git: 72ad532057c9 - main - archivers/zstd: Add CMake config files and adjust Makefile

From: Daniel Engberg <diizzy_at_FreeBSD.org>
Date: Wed, 05 Apr 2023 06:15:20 UTC
The branch main has been updated by diizzy:

URL: https://cgit.FreeBSD.org/ports/commit/?id=72ad532057c9f9fb6fa370c80f663c005e9dd021

commit 72ad532057c9f9fb6fa370c80f663c005e9dd021
Author:     Daniel Engberg <diizzy@FreeBSD.org>
AuthorDate: 2023-04-05 06:12:08 +0000
Commit:     Daniel Engberg <diizzy@FreeBSD.org>
CommitDate: 2023-04-05 06:12:14 +0000

    archivers/zstd: Add CMake config files and adjust Makefile
    
    - Use upstream's short test for "make test"
    - Use verbose output by default during build
    * Tweak Makefile to follow Porters Handbook more closely
    * Install CMake files (taken from CMake build framework)
    
    PR:             267652
    Reported by:    fluffy
    Approved by:    portmgr (maintainer timeout, 1+ month)
---
 archivers/zstd/Makefile                            |  45 ++++++--
 archivers/zstd/distinfo                            |   2 +-
 archivers/zstd/files/zstdConfig.cmake.in           |   1 +
 archivers/zstd/files/zstdConfigVersion.cmake.in    |  70 +++++++++++++
 .../zstd/files/zstdTargets-BUILD_TYPE.cmake.in     |  29 ++++++
 archivers/zstd/files/zstdTargets.cmake.in          | 115 +++++++++++++++++++++
 archivers/zstd/pkg-plist                           |   6 +-
 7 files changed, 257 insertions(+), 11 deletions(-)

diff --git a/archivers/zstd/Makefile b/archivers/zstd/Makefile
index bd01c4aeeff0..40687a6a7855 100644
--- a/archivers/zstd/Makefile
+++ b/archivers/zstd/Makefile
@@ -1,7 +1,8 @@
 PORTNAME=	zstd
-PORTVERSION=	1.5.4
+DISTVERSION=	1.5.4
+PORTREVISION=	1
 CATEGORIES=	archivers
-MASTER_SITES=	https://github.com/facebook/zstd/releases/download/v${PORTVERSION}/
+MASTER_SITES=	https://github.com/facebook/zstd/releases/download/v${DISTVERSION}/
 
 MAINTAINER=	sunpoet@FreeBSD.org
 COMMENT=	Fast real-time compression algorithm
@@ -16,27 +17,53 @@ LICENSE_FILE_GPLv2=	${WRKSRC}/COPYING
 LIB_DEPENDS=	liblz4.so:archivers/liblz4
 
 USES=		gmake localbase:ldflags tar:zst
+USE_LDCONFIG=	yes
 
 ALL_TARGET=	default
+TEST_TARGET=	shortest
 BINARY_ALIAS=	gmd5sum=md5sum
-TEST_TARGET=	test
 MAKE_ENV=	INSTALL_DATA="${INSTALL_DATA}" \
 		INSTALL_MAN="${INSTALL_MAN}" \
 		INSTALL_PROGRAM="${INSTALL_PROGRAM}" \
-		INSTALL_SCRIPT="${INSTALL_SCRIPT}"
-USE_LDCONFIG=	yes
+		INSTALL_SCRIPT="${INSTALL_SCRIPT}" \
+		V=1
+
+.if defined(WITH_DEBUG)
+BUILD_TYPE=     Debug
+.else
+BUILD_TYPE=     Release
+.endif
 
-PLIST_SUB=	PORTVERSION=${PORTVERSION}
+PLIST_SUB=	DISTVERSION=${DISTVERSION} \
+		BUILD_TYPE=${BUILD_TYPE:tl}
 
 OPTIONS_DEFINE=	OPTIMIZED_CFLAGS
 
 OPTIMIZED_CFLAGS_VARS=	CFLAGS+=-O3
 
 post-build:
-	cd ${WRKSRC}/programs && ${SETENV} ${MAKE_ENV} ${MAKE_CMD} zstd-frugal
+	cd ${BUILD_WRKSRC}/programs && ${DO_MAKE_BUILD} zstd-frugal
 
 post-install:
-	${INSTALL_PROGRAM} ${WRKSRC}/programs/zstd-frugal ${STAGEDIR}${PREFIX}/bin/zstd-frugal
-	${LN} -s zstd.1.gz ${STAGEDIR}${PREFIX}/man/man1/zstdmt.1.gz
+	${INSTALL_PROGRAM} ${BUILD_WRKSRC}/programs/zstd-frugal ${STAGEDIR}${PREFIX}/bin/zstd-frugal
+	${MKDIR} ${STAGEDIR}${PREFIX}/lib/cmake/zstd
+	${INSTALL_DATA} ${PATCHDIR}/zstdConfig.cmake.in \
+		${STAGEDIR}${PREFIX}/lib/cmake/zstd/zstdConfig.cmake
+	${INSTALL_DATA} ${PATCHDIR}/zstdConfigVersion.cmake.in \
+		${STAGEDIR}${PREFIX}/lib/cmake/zstd/zstdConfigVersion.cmake
+	@${REINPLACE_CMD} -e 's|%%DISTVERSION%%|${DISTVERSION}|g' \
+		${STAGEDIR}${PREFIX}/lib/cmake/zstd/zstdConfigVersion.cmake
+	${INSTALL_DATA} ${PATCHDIR}/zstdTargets-BUILD_TYPE.cmake.in \
+		${STAGEDIR}${PREFIX}/lib/cmake/zstd/zstdTargets-${BUILD_TYPE:tl}.cmake
+	@${REINPLACE_CMD} -e 's|%%BUILD_TYPE_CAPS%%|${BUILD_TYPE:tu}|g' \
+		${STAGEDIR}${PREFIX}/lib/cmake/zstd/zstdTargets-${BUILD_TYPE:tl}.cmake
+	@${REINPLACE_CMD} -e 's|%%BUILD_TYPE_MIXED%%|${BUILD_TYPE}|g' \
+		${STAGEDIR}${PREFIX}/lib/cmake/zstd/zstdTargets-${BUILD_TYPE:tl}.cmake
+	@${REINPLACE_CMD} -e 's|%%DISTVERSION%%|${DISTVERSION}|g' \
+		${STAGEDIR}${PREFIX}/lib/cmake/zstd/zstdTargets-${BUILD_TYPE:tl}.cmake
+	${INSTALL_DATA} ${PATCHDIR}/zstdTargets.cmake.in \
+		${STAGEDIR}${PREFIX}/lib/cmake/zstd/zstdTargets.cmake
+	${RM} ${STAGEDIR}${PREFIX}/lib/cmake/zstd/*.bak
+	${RLN} zstd.1.gz ${STAGEDIR}${PREFIX}/man/man1/zstdmt.1.gz
 
 .include <bsd.port.mk>
diff --git a/archivers/zstd/distinfo b/archivers/zstd/distinfo
index 14adce85132c..b1bcfd8794b3 100644
--- a/archivers/zstd/distinfo
+++ b/archivers/zstd/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1677770991
+TIMESTAMP = 1680672624
 SHA256 (zstd-1.5.4.tar.zst) = 6925880b84aca086308c27036ef1c16e76817372301ead7c37f90e23567f704e
 SIZE (zstd-1.5.4.tar.zst) = 1620303
diff --git a/archivers/zstd/files/zstdConfig.cmake.in b/archivers/zstd/files/zstdConfig.cmake.in
new file mode 100644
index 000000000000..ebbfcc38f6fc
--- /dev/null
+++ b/archivers/zstd/files/zstdConfig.cmake.in
@@ -0,0 +1 @@
+include("${CMAKE_CURRENT_LIST_DIR}/zstdTargets.cmake")
diff --git a/archivers/zstd/files/zstdConfigVersion.cmake.in b/archivers/zstd/files/zstdConfigVersion.cmake.in
new file mode 100644
index 000000000000..9d632415ae6b
--- /dev/null
+++ b/archivers/zstd/files/zstdConfigVersion.cmake.in
@@ -0,0 +1,70 @@
+# This is a basic version file for the Config-mode of find_package().
+# It is used by write_basic_package_version_file() as input file for configure_file()
+# to create a version-file which can be installed along a config.cmake file.
+#
+# The created file sets PACKAGE_VERSION_EXACT if the current version string and
+# the requested version string are exactly the same and it sets
+# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version,
+# but only if the requested major version is the same as the current one.
+# The variable CVF_VERSION must be set before calling configure_file().
+
+
+set(PACKAGE_VERSION "%%DISTVERSION%%")
+
+if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
+  set(PACKAGE_VERSION_COMPATIBLE FALSE)
+else()
+
+  if("%%DISTVERSION%%" MATCHES "^([0-9]+)\\.")
+    set(CVF_VERSION_MAJOR "${CMAKE_MATCH_1}")
+    if(NOT CVF_VERSION_MAJOR VERSION_EQUAL 0)
+      string(REGEX REPLACE "^0+" "" CVF_VERSION_MAJOR "${CVF_VERSION_MAJOR}")
+    endif()
+  else()
+    set(CVF_VERSION_MAJOR "%%DISTVERSION%%")
+  endif()
+
+  if(PACKAGE_FIND_VERSION_RANGE)
+    # both endpoints of the range must have the expected major version
+    math (EXPR CVF_VERSION_MAJOR_NEXT "${CVF_VERSION_MAJOR} + 1")
+    if (NOT PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR
+        OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND NOT PACKAGE_FIND_VERSION_MAX_MAJOR STREQUAL CVF_VERSION_MAJOR)
+          OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND NOT PACKAGE_FIND_VERSION_MAX VERSION_LESS_EQUAL CVF_VERSION_MAJOR_NEXT)))
+      set(PACKAGE_VERSION_COMPATIBLE FALSE)
+    elseif(PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR
+        AND ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS_EQUAL PACKAGE_FIND_VERSION_MAX)
+        OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MAX)))
+      set(PACKAGE_VERSION_COMPATIBLE TRUE)
+    else()
+      set(PACKAGE_VERSION_COMPATIBLE FALSE)
+    endif()
+  else()
+    if(PACKAGE_FIND_VERSION_MAJOR STREQUAL CVF_VERSION_MAJOR)
+      set(PACKAGE_VERSION_COMPATIBLE TRUE)
+    else()
+      set(PACKAGE_VERSION_COMPATIBLE FALSE)
+    endif()
+
+    if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
+      set(PACKAGE_VERSION_EXACT TRUE)
+    endif()
+  endif()
+endif()
+
+
+# if the installed project requested no architecture check, don't perform the check
+if("FALSE")
+  return()
+endif()
+
+# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
+if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "8" STREQUAL "")
+  return()
+endif()
+
+# check that the installed version has the same 32/64bit-ness as the one which is currently searching:
+if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "8")
+  math(EXPR installedBits "8 * 8")
+  set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
+  set(PACKAGE_VERSION_UNSUITABLE TRUE)
+endif()
diff --git a/archivers/zstd/files/zstdTargets-BUILD_TYPE.cmake.in b/archivers/zstd/files/zstdTargets-BUILD_TYPE.cmake.in
new file mode 100644
index 000000000000..fed8503e9e06
--- /dev/null
+++ b/archivers/zstd/files/zstdTargets-BUILD_TYPE.cmake.in
@@ -0,0 +1,29 @@
+#----------------------------------------------------------------
+# Generated CMake target import file for configuration "%%BUILD_TYPE_MIXED%%".
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Import target "zstd::libzstd_shared" for configuration "%%BUILD_TYPE_MIXED%%"
+set_property(TARGET zstd::libzstd_shared APPEND PROPERTY IMPORTED_CONFIGURATIONS %%BUILD_TYPE_CAPS%%)
+set_target_properties(zstd::libzstd_shared PROPERTIES
+  IMPORTED_LOCATION_%%BUILD_TYPE_CAPS%% "${_IMPORT_PREFIX}/lib/libzstd.so.%%DISTVERSION%%"
+  IMPORTED_SONAME_%%BUILD_TYPE_CAPS%% "libzstd.so.1"
+  )
+
+list(APPEND _cmake_import_check_targets zstd::libzstd_shared )
+list(APPEND _cmake_import_check_files_for_zstd::libzstd_shared "${_IMPORT_PREFIX}/lib/libzstd.so.%%DISTVERSION%%" )
+
+# Import target "zstd::libzstd_static" for configuration "%%BUILD_TYPE_MIXED%%"
+set_property(TARGET zstd::libzstd_static APPEND PROPERTY IMPORTED_CONFIGURATIONS %%BUILD_TYPE_CAPS%%)
+set_target_properties(zstd::libzstd_static PROPERTIES
+  IMPORTED_LINK_INTERFACE_LANGUAGES_%%BUILD_TYPE_CAPS%% "C"
+  IMPORTED_LOCATION_%%BUILD_TYPE_CAPS%% "${_IMPORT_PREFIX}/lib/libzstd.a"
+  )
+
+list(APPEND _cmake_import_check_targets zstd::libzstd_static )
+list(APPEND _cmake_import_check_files_for_zstd::libzstd_static "${_IMPORT_PREFIX}/lib/libzstd.a" )
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
diff --git a/archivers/zstd/files/zstdTargets.cmake.in b/archivers/zstd/files/zstdTargets.cmake.in
new file mode 100644
index 000000000000..60da8aa603e0
--- /dev/null
+++ b/archivers/zstd/files/zstdTargets.cmake.in
@@ -0,0 +1,115 @@
+# Generated by CMake
+
+if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8)
+   message(FATAL_ERROR "CMake >= 2.8.0 required")
+endif()
+if(CMAKE_VERSION VERSION_LESS "2.8.3")
+   message(FATAL_ERROR "CMake >= 2.8.3 required")
+endif()
+cmake_policy(PUSH)
+cmake_policy(VERSION 2.8.3...3.23)
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Protect against multiple inclusion, which would fail when already imported targets are added once more.
+set(_cmake_targets_defined "")
+set(_cmake_targets_not_defined "")
+set(_cmake_expected_targets "")
+foreach(_cmake_expected_target IN ITEMS zstd::libzstd_shared zstd::libzstd_static)
+  list(APPEND _cmake_expected_targets "${_cmake_expected_target}")
+  if(TARGET "${_cmake_expected_target}")
+    list(APPEND _cmake_targets_defined "${_cmake_expected_target}")
+  else()
+    list(APPEND _cmake_targets_not_defined "${_cmake_expected_target}")
+  endif()
+endforeach()
+unset(_cmake_expected_target)
+if(_cmake_targets_defined STREQUAL _cmake_expected_targets)
+  unset(_cmake_targets_defined)
+  unset(_cmake_targets_not_defined)
+  unset(_cmake_expected_targets)
+  unset(CMAKE_IMPORT_FILE_VERSION)
+  cmake_policy(POP)
+  return()
+endif()
+if(NOT _cmake_targets_defined STREQUAL "")
+  string(REPLACE ";" ", " _cmake_targets_defined_text "${_cmake_targets_defined}")
+  string(REPLACE ";" ", " _cmake_targets_not_defined_text "${_cmake_targets_not_defined}")
+  message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_cmake_targets_defined_text}\nTargets not yet defined: ${_cmake_targets_not_defined_text}\n")
+endif()
+unset(_cmake_targets_defined)
+unset(_cmake_targets_not_defined)
+unset(_cmake_expected_targets)
+
+
+# Compute the installation prefix relative to this file.
+get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+if(_IMPORT_PREFIX STREQUAL "/")
+  set(_IMPORT_PREFIX "")
+endif()
+
+# Create imported target zstd::libzstd_shared
+add_library(zstd::libzstd_shared SHARED IMPORTED)
+
+set_target_properties(zstd::libzstd_shared PROPERTIES
+  INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include"
+  INTERFACE_LINK_LIBRARIES "-pthread"
+)
+
+# Create imported target zstd::libzstd_static
+add_library(zstd::libzstd_static STATIC IMPORTED)
+
+set_target_properties(zstd::libzstd_static PROPERTIES
+  INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include"
+  INTERFACE_LINK_LIBRARIES "-pthread"
+)
+
+if(CMAKE_VERSION VERSION_LESS 2.8.12)
+  message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.")
+endif()
+
+# Load information for each installed configuration.
+file(GLOB _cmake_config_files "${CMAKE_CURRENT_LIST_DIR}/zstdTargets-*.cmake")
+foreach(_cmake_config_file IN LISTS _cmake_config_files)
+  include("${_cmake_config_file}")
+endforeach()
+unset(_cmake_config_file)
+unset(_cmake_config_files)
+
+# Cleanup temporary variables.
+set(_IMPORT_PREFIX)
+
+# Loop over all imported files and verify that they actually exist
+foreach(_cmake_target IN LISTS _cmake_import_check_targets)
+  foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}")
+    if(NOT EXISTS "${_cmake_file}")
+      message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file
+   \"${_cmake_file}\"
+but this file does not exist.  Possible reasons include:
+* The file was deleted, renamed, or moved to another location.
+* An install or uninstall procedure did not complete successfully.
+* The installation package was faulty and contained
+   \"${CMAKE_CURRENT_LIST_FILE}\"
+but not all the files it references.
+")
+    endif()
+  endforeach()
+  unset(_cmake_file)
+  unset("_cmake_import_check_files_for_${_cmake_target}")
+endforeach()
+unset(_cmake_target)
+unset(_cmake_import_check_targets)
+
+# This file does not depend on other imported targets which have
+# been exported from the same project but in a separate export set.
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
+cmake_policy(POP)
diff --git a/archivers/zstd/pkg-plist b/archivers/zstd/pkg-plist
index fbe5a2fadb4c..c9710e44faab 100644
--- a/archivers/zstd/pkg-plist
+++ b/archivers/zstd/pkg-plist
@@ -8,10 +8,14 @@ bin/zstdmt
 include/zdict.h
 include/zstd.h
 include/zstd_errors.h
+lib/cmake/zstd/zstdConfig.cmake
+lib/cmake/zstd/zstdConfigVersion.cmake
+lib/cmake/zstd/zstdTargets-%%BUILD_TYPE%%.cmake
+lib/cmake/zstd/zstdTargets.cmake
 lib/libzstd.a
 lib/libzstd.so
 lib/libzstd.so.1
-lib/libzstd.so.%%PORTVERSION%%
+lib/libzstd.so.%%DISTVERSION%%
 libdata/pkgconfig/libzstd.pc
 man/man1/unzstd.1.gz
 man/man1/zstd.1.gz