mirror of
https://github.com/facebook/zstd.git
synced 2025-07-29 11:21:22 +03:00
build(cmake): improve pkg-config generation
With this patch the pkg-config generation when using the CMake build system is improved in the following ways: - Libs.private is now filled when needed - The JoinPaths module is now used to join paths, leading to simpler code - The .pc file is always generated, regardless of the platform, as it can also be consumed on Windows Here's how the .pc file is affected by these changes, in comparison to the one generated with the official Makefiles: $ diff -s lib/libzstd.pc build/cmake/build-old/lib/libzstd.pc 15c15 < Libs.private: -pthread --- > Libs.private: $ diff -s lib/libzstd.pc build/cmake/build-new/lib/libzstd.pc Files lib/libzstd.pc and build/cmake/build-new/lib/libzstd.pc are identical
This commit is contained in:
23
build/cmake/CMakeModules/JoinPaths.cmake
Normal file
23
build/cmake/CMakeModules/JoinPaths.cmake
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# This module provides function for joining paths
|
||||||
|
# known from most languages
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: (MIT OR CC0-1.0)
|
||||||
|
# Copyright 2020 Jan Tojnar
|
||||||
|
# https://github.com/jtojnar/cmake-snips
|
||||||
|
#
|
||||||
|
# Modelled after Python’s os.path.join
|
||||||
|
# https://docs.python.org/3.7/library/os.path.html#os.path.join
|
||||||
|
# Windows not supported
|
||||||
|
function(join_paths joined_path first_path_segment)
|
||||||
|
set(temp_path "${first_path_segment}")
|
||||||
|
foreach(current_segment IN LISTS ARGN)
|
||||||
|
if(NOT ("${current_segment}" STREQUAL ""))
|
||||||
|
if(IS_ABSOLUTE "${current_segment}")
|
||||||
|
set(temp_path "${current_segment}")
|
||||||
|
else()
|
||||||
|
set(temp_path "${temp_path}/${current_segment}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
set(${joined_path} "${temp_path}" PARENT_SCOPE)
|
||||||
|
endfunction()
|
@ -135,30 +135,17 @@ if (ZSTD_BUILD_STATIC)
|
|||||||
OUTPUT_NAME ${STATIC_LIBRARY_BASE_NAME})
|
OUTPUT_NAME ${STATIC_LIBRARY_BASE_NAME})
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (UNIX OR MINGW)
|
# pkg-config
|
||||||
# pkg-config
|
include(JoinPaths) # can be replaced by cmake_path(APPEND) in CMake 3.20
|
||||||
set(PREFIX "${CMAKE_INSTALL_PREFIX}")
|
set(PREFIX "${CMAKE_INSTALL_PREFIX}")
|
||||||
set(EXEC_PREFIX "\${prefix}")
|
set(EXEC_PREFIX "\${prefix}")
|
||||||
set(LIBDIR "${CMAKE_INSTALL_FULL_LIBDIR}")
|
join_paths(LIBDIR "\${exec_prefix}" "${CMAKE_INSTALL_LIBDIR}")
|
||||||
set(INCLUDEDIR "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
|
join_paths(INCLUDEDIR "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}")
|
||||||
set(VERSION "${zstd_VERSION}")
|
set(LIBS_PRIVATE "${THREADS_LIBS}")
|
||||||
|
set(VERSION "${zstd_VERSION}")
|
||||||
|
|
||||||
string(LENGTH "${PREFIX}" PREFIX_LENGTH)
|
configure_file("${LIBRARY_DIR}/libzstd.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/libzstd.pc" @ONLY)
|
||||||
string(SUBSTRING "${LIBDIR}" 0 ${PREFIX_LENGTH} LIBDIR_PREFIX)
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libzstd.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
|
||||||
string(SUBSTRING "${LIBDIR}" ${PREFIX_LENGTH} -1 LIBDIR_SUFFIX)
|
|
||||||
string(SUBSTRING "${INCLUDEDIR}" 0 ${PREFIX_LENGTH} INCLUDEDIR_PREFIX)
|
|
||||||
string(SUBSTRING "${INCLUDEDIR}" ${PREFIX_LENGTH} -1 INCLUDEDIR_SUFFIX)
|
|
||||||
|
|
||||||
if ("${INCLUDEDIR_PREFIX}" STREQUAL "${PREFIX}")
|
|
||||||
set(INCLUDEDIR "\${prefix}${INCLUDEDIR_SUFFIX}")
|
|
||||||
endif()
|
|
||||||
if ("${LIBDIR_PREFIX}" STREQUAL "${PREFIX}")
|
|
||||||
set(LIBDIR "\${exec_prefix}${LIBDIR_SUFFIX}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
configure_file("${LIBRARY_DIR}/libzstd.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/libzstd.pc" @ONLY)
|
|
||||||
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libzstd.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
# install target
|
# install target
|
||||||
install(FILES
|
install(FILES
|
||||||
|
Reference in New Issue
Block a user