Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,19 @@ endif()
if(BUILD_TESTING)
enable_testing()
add_subdirectory(demo)
if(BUILD_SHARED_LIBS)
add_test(NAME test-pkg-config
COMMAND ${CMAKE_COMMAND}
-DLTM_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}
-DLTM_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}/pkg-config-test
-DCMAKE_GENERATOR=${CMAKE_GENERATOR}
-DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM}
-DCMAKE_GENERATOR_TOOLSET=${CMAKE_GENERATOR_TOOLSET}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
-P ${CMAKE_CURRENT_SOURCE_DIR}/demo/test_pkgconfig.cmake
)
endif()
endif()

#-----------------------------------------------------------------------------
Expand All @@ -170,6 +183,13 @@ if(BUILD_SHARED_LIBS)
# Let the user override the default directory of the pkg-config file (usually this shouldn't be required to be changed)
set(CMAKE_INSTALL_PKGCONFIGDIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig" CACHE PATH "Folder where to install .pc files")

foreach(DIR LIBDIR INCLUDEDIR)
set(LTM_PKGCONFIG_${DIR} "${CMAKE_INSTALL_${DIR}}")
if(NOT IS_ABSOLUTE "${LTM_PKGCONFIG_${DIR}}")
set(LTM_PKGCONFIG_${DIR} "\${prefix}/${CMAKE_INSTALL_${DIR}}")
endif()
endforeach()

configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.pc.in
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc
Expand Down
56 changes: 56 additions & 0 deletions demo/test_pkgconfig.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# SPDX-License-Identifier: Unlicense

# Keep absolute install paths outside the source and build trees. These paths
# need not exist: the test configures packages but does not install anything.
get_filename_component(ROOT "${LTM_BINARY_DIR}" ABSOLUTE)
set(PARENT "")
while(NOT PARENT STREQUAL ROOT)
set(PARENT "${ROOT}")
get_filename_component(ROOT "${ROOT}" DIRECTORY)
endwhile()

foreach(LAYOUT relative absolute absolute-include absolute-lib)
set(BUILD_DIR "${LTM_BINARY_DIR}/${LAYOUT}")
set(INCLUDEDIR include)
set(LIBDIR lib)
set(EXPECTED_INCLUDEDIR "\${prefix}/include/libtommath")
set(EXPECTED_LIBDIR "\${prefix}/lib")
if(LAYOUT STREQUAL absolute OR LAYOUT STREQUAL absolute-include)
set(INCLUDEDIR "${ROOT}libtommath-pkg-config-test/${LAYOUT}/headers")
set(EXPECTED_INCLUDEDIR "${INCLUDEDIR}/libtommath")
endif()
if(LAYOUT STREQUAL absolute OR LAYOUT STREQUAL absolute-lib)
set(LIBDIR "${ROOT}libtommath-pkg-config-test/${LAYOUT}/libraries")
set(EXPECTED_LIBDIR "${LIBDIR}")
endif()

file(MAKE_DIRECTORY "${BUILD_DIR}")
execute_process(
COMMAND "${CMAKE_COMMAND}" "${LTM_SOURCE_DIR}"
-G "${CMAKE_GENERATOR}"
"-DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM}"
"-DCMAKE_GENERATOR_TOOLSET=${CMAKE_GENERATOR_TOOLSET}"
"-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}"
"-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}"
"-DCMAKE_INSTALL_PREFIX=${BUILD_DIR}/prefix"
"-DCMAKE_INSTALL_INCLUDEDIR=${INCLUDEDIR}"
"-DCMAKE_INSTALL_LIBDIR=${LIBDIR}"
-DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON
-DBUILD_SHARED_LIBS=ON
-DBUILD_TESTING=OFF
WORKING_DIRECTORY "${BUILD_DIR}"
RESULT_VARIABLE RESULT
)
if(NOT RESULT EQUAL 0)
message(FATAL_ERROR "Could not configure ${LAYOUT} installation")
endif()

file(READ "${BUILD_DIR}/libtommath.pc" CONFIG)
foreach(DIR INCLUDEDIR LIBDIR)
string(TOLOWER "${DIR}" VARIABLE)
string(FIND "${CONFIG}" "${VARIABLE}=${EXPECTED_${DIR}}\n" MATCH)
if(MATCH EQUAL -1)
message(FATAL_ERROR "Incorrect ${VARIABLE} in ${LAYOUT} libtommath.pc")
endif()
endforeach()
endforeach()
4 changes: 2 additions & 2 deletions libtommath.pc.in
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
prefix=@CMAKE_INSTALL_PREFIX@
libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@/@PROJECT_NAME@
libdir=@LTM_PKGCONFIG_LIBDIR@
includedir=@LTM_PKGCONFIG_INCLUDEDIR@/@PROJECT_NAME@

Name: LibTomMath
Description: public domain library for manipulating large integer numbers
Expand Down
4 changes: 2 additions & 2 deletions makefile.shared
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ $(LIBNAME): $(OBJECTS)
install: $(LIBNAME) .install_common
$(LIBTOOL) --mode=install install -m 644 $(LIBNAME) $(DESTDIR)$(LIBPATH)/$(LIBNAME)
install -m 644 $(HEADERS_PUB) $(DESTDIR)$(INCPATH)
sed -e 's,^prefix=.*,prefix=$(PREFIX),' -e 's,^Version:.*,Version: $(VERSION_PC),' -e 's,@CMAKE_INSTALL_LIBDIR@,lib,' \
-e 's,@CMAKE_INSTALL_INCLUDEDIR@/@PROJECT_NAME@,include/tommath,' libtommath.pc.in > libtommath.pc
sed -e 's,^prefix=.*,prefix=$(PREFIX),' -e 's,^Version:.*,Version: $(VERSION_PC),' -e 's,^libdir=.*,libdir=$${prefix}/lib,' \
-e 's,^includedir=.*,includedir=$${prefix}/include/tommath,' libtommath.pc.in > libtommath.pc
install -d $(DESTDIR)$(LIBPATH)/pkgconfig
install -m 644 libtommath.pc $(DESTDIR)$(LIBPATH)/pkgconfig/

Expand Down