mirror of https://git.tukaani.org/xz.git
CMake: Require CMake 3.20 or later
This allows a few cleanups.
This commit is contained in:
parent
028185dd48
commit
9231c39ffb
|
@ -4,19 +4,17 @@
|
|||
#
|
||||
# CMake support for building XZ Utils
|
||||
#
|
||||
# CMake 3.20 or later is recommended. Older versions down to 3.14 work
|
||||
# too with the following limitations:
|
||||
# Requirements:
|
||||
#
|
||||
# - Translations aren't supported.
|
||||
# - CMake 3.20 or later
|
||||
#
|
||||
# - Generated liblzma.pc won't be relocatable.
|
||||
# - To get translated messages, install GNU gettext tools (the command
|
||||
# msgfmt is needed). Alternatively disable translations by setting
|
||||
# XZ_NLS=OFF.
|
||||
#
|
||||
# To get translated messages, install GNU gettext tools (the command msgfmt
|
||||
# is needed). Alternatively disable translations by setting XZ_NLS=OFF.
|
||||
#
|
||||
# If building from xz.git instead of a release tarball: To generate
|
||||
# translated man pages, run po4a/update-po which requires the po4a tool.
|
||||
# The build works without this step too.
|
||||
# - If building from xz.git instead of a release tarball: To generate
|
||||
# translated man pages, run po4a/update-po which requires the po4a
|
||||
# tool. The build works without this step too.
|
||||
#
|
||||
# About CMAKE_BUILD_TYPE:
|
||||
#
|
||||
|
@ -79,8 +77,7 @@
|
|||
#
|
||||
#############################################################################
|
||||
|
||||
# NOTE: Translation support is disabled with CMake older than 3.20.
|
||||
cmake_minimum_required(VERSION 3.14...3.29 FATAL_ERROR)
|
||||
cmake_minimum_required(VERSION 3.20...3.29 FATAL_ERROR)
|
||||
|
||||
include(CMakePushCheckState)
|
||||
include(CheckIncludeFile)
|
||||
|
@ -286,7 +283,7 @@ if(NOT HAVE_CLOCK_GETTIME)
|
|||
# With glibc <= 2.17 or Solaris 10 this needs librt.
|
||||
# Add librt for the next check for HAVE_CLOCK_GETTIME. If it is
|
||||
# found after including the library, we know that librt is required.
|
||||
list(INSERT CMAKE_REQUIRED_LIBRARIES 0 rt)
|
||||
list(PREPEND CMAKE_REQUIRED_LIBRARIES rt)
|
||||
check_symbol_exists(clock_gettime time.h HAVE_CLOCK_GETTIME_LIBRT)
|
||||
|
||||
# If it was found now, add librt to all targets and keep it in
|
||||
|
@ -295,7 +292,7 @@ if(NOT HAVE_CLOCK_GETTIME)
|
|||
link_libraries(rt)
|
||||
set(LIBS "-lrt ${LIBS}") # For liblzma.pc
|
||||
else()
|
||||
list(REMOVE_AT CMAKE_REQUIRED_LIBRARIES 0)
|
||||
list(POP_FRONT CMAKE_REQUIRED_LIBRARIES)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
@ -308,31 +305,19 @@ if(HAVE_CLOCK_GETTIME OR HAVE_CLOCK_GETTIME_LIBRT)
|
|||
endif()
|
||||
|
||||
|
||||
# Translation support requires CMake 3.20 because it added the Intl::Intl
|
||||
# target so we don't need to play with the individual variables.
|
||||
#
|
||||
# The definition ENABLE_NLS is added only to those targets that use it, thus
|
||||
# it's not done here. (xz has translations, xzdec doesn't.)
|
||||
set(XZ_NLS_DEFAULT OFF)
|
||||
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.20")
|
||||
find_package(Intl)
|
||||
find_package(Gettext)
|
||||
|
||||
if(Intl_FOUND AND GETTEXT_FOUND)
|
||||
set(XZ_NLS_DEFAULT ON)
|
||||
endif()
|
||||
find_package(Intl)
|
||||
find_package(Gettext)
|
||||
if(Intl_FOUND AND GETTEXT_FOUND)
|
||||
set(XZ_NLS_DEFAULT ON)
|
||||
endif()
|
||||
|
||||
option(XZ_NLS "Native Language Support (translated messages and man pages)"
|
||||
"${XZ_NLS_DEFAULT}")
|
||||
|
||||
if(XZ_NLS)
|
||||
if(CMAKE_VERSION VERSION_LESS "3.20")
|
||||
message(FATAL_ERROR "Native language support (NLS) requires "
|
||||
"CMake >= 3.20. "
|
||||
"Upgrade to a newer CMake or set XZ_NLS=OFF.")
|
||||
endif()
|
||||
|
||||
if(NOT Intl_FOUND)
|
||||
message(FATAL_ERROR "Native language support (NLS) was enabled but "
|
||||
"find_package(Intl) failed. "
|
||||
|
@ -647,7 +632,7 @@ if(XZ_THREADS)
|
|||
|
||||
# Make the thread libs available in later checks. In practice
|
||||
# only pthread_condattr_setclock check should need this.
|
||||
list(INSERT CMAKE_REQUIRED_LIBRARIES 0 "${CMAKE_THREAD_LIBS_INIT}")
|
||||
list(PREPEND CMAKE_REQUIRED_LIBRARIES "${CMAKE_THREAD_LIBS_INIT}")
|
||||
|
||||
# Check if pthread_condattr_setclock() exists to
|
||||
# use CLOCK_MONOTONIC.
|
||||
|
@ -833,9 +818,9 @@ if("sha256" IN_LIST XZ_CHECKS)
|
|||
else()
|
||||
# Try with libmd. Other checks don't need it so we
|
||||
# don't need to leave it into CMAKE_REQUIRED_LIBRARIES.
|
||||
list(INSERT CMAKE_REQUIRED_LIBRARIES 0 md)
|
||||
list(PREPEND CMAKE_REQUIRED_LIBRARIES md)
|
||||
check_c_source_compiles("${SOURCE}" "${HAVE_X}_LIBMD")
|
||||
list(REMOVE_AT CMAKE_REQUIRED_LIBRARIES 0)
|
||||
list(POP_FRONT CMAKE_REQUIRED_LIBRARIES)
|
||||
if(${HAVE_X}_LIBMD)
|
||||
# NOTE: Just "${HAVE_X}", not "${HAVE_X}_LIBMD":
|
||||
target_compile_definitions(liblzma PRIVATE
|
||||
|
@ -1534,20 +1519,14 @@ file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/liblzma-config.cmake"
|
|||
"${LZMA_CONFIG_CONTENTS}")
|
||||
|
||||
|
||||
# Create liblzma.pc. If using CMake >= 3.20 and CMAKE_INSTALL_<dir> paths
|
||||
# are relative to CMAKE_INSTALL_PREFIX, the .pc file will be relocatable
|
||||
# (that is, all paths will be relative to ${prefix}). Otherwise absolute
|
||||
# Create liblzma.pc. If CMAKE_INSTALL_<dir> paths are relative to
|
||||
# CMAKE_INSTALL_PREFIX, the .pc file will be relocatable (that is,
|
||||
# all paths will be relative to ${prefix}). Otherwise absolute
|
||||
# paths will be used.
|
||||
set(prefix "${CMAKE_INSTALL_PREFIX}")
|
||||
set(exec_prefix "\${prefix}")
|
||||
|
||||
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.20")
|
||||
cmake_path(APPEND libdir "\${exec_prefix}" "${CMAKE_INSTALL_LIBDIR}")
|
||||
cmake_path(APPEND includedir "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}")
|
||||
else()
|
||||
set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}")
|
||||
set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
|
||||
endif()
|
||||
cmake_path(APPEND libdir "\${exec_prefix}" "${CMAKE_INSTALL_LIBDIR}")
|
||||
cmake_path(APPEND includedir "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}")
|
||||
|
||||
# Threads::Threads is linked in only when using POSIX threads.
|
||||
# Use an empty value if using Windows threads or if threading is disabled.
|
||||
|
@ -2263,7 +2242,10 @@ xzdiff, xzgrep, xzmore, xzless, and their symlinks" ON)
|
|||
foreach(S xzdiff xzgrep xzmore xzless)
|
||||
configure_file("src/scripts/${S}.in" "${S}"
|
||||
@ONLY
|
||||
NEWLINE_STYLE LF)
|
||||
NEWLINE_STYLE LF
|
||||
FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
|
||||
GROUP_READ GROUP_EXECUTE
|
||||
WORLD_READ WORLD_EXECUTE)
|
||||
|
||||
if(ENABLE_SCRIPTS)
|
||||
install(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/${S}"
|
||||
|
@ -2272,12 +2254,6 @@ xzdiff, xzgrep, xzmore, xzless, and their symlinks" ON)
|
|||
endif()
|
||||
endforeach()
|
||||
|
||||
# file(CHMOD ...) would need CMake 3.19 so use execute_process instead.
|
||||
# Using +x is fine even if umask was 077. If execute bit is set at all
|
||||
# then "make install" will set it for group and other access bits too.
|
||||
execute_process(COMMAND chmod +x xzdiff xzgrep xzmore xzless
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
|
||||
unset(xz)
|
||||
unset(POSIX_SHELL)
|
||||
unset(enable_path_for_scripts)
|
||||
|
|
Loading…
Reference in New Issue