Skip to content

Commit

Permalink
archivers/zstd: Add CMake config files and adjust Makefile
Browse files Browse the repository at this point in the history
- 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)
  • Loading branch information
Daniel Engberg authored and Daniel Engberg committed Apr 5, 2023
1 parent 7793ffb commit 72ad532
Show file tree
Hide file tree
Showing 7 changed files with 257 additions and 11 deletions.
45 changes: 36 additions & 9 deletions 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
Expand All @@ -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>
2 changes: 1 addition & 1 deletion 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
1 change: 1 addition & 0 deletions archivers/zstd/files/zstdConfig.cmake.in
@@ -0,0 +1 @@
include("${CMAKE_CURRENT_LIST_DIR}/zstdTargets.cmake")
70 changes: 70 additions & 0 deletions 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()
29 changes: 29 additions & 0 deletions 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)
115 changes: 115 additions & 0 deletions 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)
6 changes: 5 additions & 1 deletion archivers/zstd/pkg-plist
Expand Up @@ -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
Expand Down

0 comments on commit 72ad532

Please sign in to comment.