Skip to content

Commit eb3d977

Browse files
authored
CMake package config (#412)
* Use variables from GNUInstallDirs everywhere * Componentize the install rules * Add headers to the interface include path * Add install rules for CMake package config * Associate inline headers to a target Previously inline_headers was a UTILITY target, which cannot be installed, so it was renamed to inline_headers_util and a new inline_headers INTERFACE library target is introduced instead. Co-authored-by: friendlyanon <[email protected]>
1 parent cc7776a commit eb3d977

File tree

5 files changed

+189
-31
lines changed

5 files changed

+189
-31
lines changed

CMakeLists.txt

+30
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,36 @@ set(TARGET_LIBDFT "sleefdft")
231231
# Check subdirectories
232232
add_subdirectory("src")
233233

234+
# Install the CMake package config
235+
include(CMakePackageConfigHelpers)
236+
237+
write_basic_package_version_file(
238+
sleefConfigVersion.cmake
239+
COMPATIBILITY SameMajorVersion
240+
)
241+
242+
set(
243+
SLEEF_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/sleef"
244+
CACHE STRING "CMake package config location relative to the install prefix"
245+
)
246+
247+
mark_as_advanced(SLEEF_INSTALL_CMAKEDIR)
248+
249+
install(
250+
FILES
251+
"${PROJECT_SOURCE_DIR}/sleefConfig.cmake"
252+
"${PROJECT_BINARY_DIR}/sleefConfigVersion.cmake"
253+
DESTINATION "${SLEEF_INSTALL_CMAKEDIR}"
254+
COMPONENT sleef_Development
255+
)
256+
257+
install(
258+
EXPORT sleefTargets
259+
NAMESPACE sleef::
260+
DESTINATION "${SLEEF_INSTALL_CMAKEDIR}"
261+
COMPONENT sleef_Development
262+
)
263+
234264
# Extra messages at configuration time. By default is active, it can be
235265
# turned off by invoking cmake with "-DSLEEF_SHOW_CONFIG=OFF".
236266
if(SLEEF_SHOW_CONFIG)

sleefConfig.cmake

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
include("${CMAKE_CURRENT_LIST_DIR}/sleefTargets.cmake")

src/dft/CMakeLists.txt

+26-5
Original file line numberDiff line numberDiff line change
@@ -354,9 +354,30 @@ set_target_properties(${TARGET_LIBDFT} PROPERTIES
354354
)
355355

356356
# Install
357-
install(TARGETS ${TARGET_LIBDFT}
358-
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
359-
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
360-
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
361-
RUNTIME DESTINATION bin
357+
install(
358+
TARGETS ${TARGET_LIBDFT}
359+
EXPORT sleefTargets
360+
PUBLIC_HEADER #
361+
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
362+
COMPONENT sleef_Development
363+
LIBRARY #
364+
DESTINATION "${CMAKE_INSTALL_LIBDIR}"
365+
COMPONENT sleef_Runtime
366+
NAMELINK_SKIP
367+
ARCHIVE #
368+
DESTINATION "${CMAKE_INSTALL_LIBDIR}"
369+
COMPONENT sleef_Development
370+
RUNTIME #
371+
DESTINATION "${CMAKE_INSTALL_BINDIR}"
372+
COMPONENT sleef_Runtime
373+
INCLUDES #
374+
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
375+
)
376+
377+
install(
378+
TARGETS ${TARGET_LIBDFT}
379+
LIBRARY #
380+
DESTINATION "${CMAKE_INSTALL_LIBDIR}"
381+
COMPONENT sleef_Development
382+
NAMELINK_ONLY
362383
)

src/libm/CMakeLists.txt

+101-20
Original file line numberDiff line numberDiff line change
@@ -641,11 +641,31 @@ if(BUILD_INLINE_HEADERS)
641641

642642
#
643643

644-
add_custom_target(${TARGET_INLINE_HEADERS} ALL
644+
add_custom_target(${TARGET_INLINE_HEADERS}_util ALL
645645
DEPENDS
646646
${INLINE_HEADER_FILES_GENERATED}
647647
)
648-
install(FILES ${INLINE_HEADER_FILES_GENERATED} DESTINATION include)
648+
649+
add_library("${TARGET_INLINE_HEADERS}" INTERFACE)
650+
add_dependencies("${TARGET_INLINE_HEADERS}" "${TARGET_INLINE_HEADERS}_util")
651+
target_include_directories(
652+
"${TARGET_INLINE_HEADERS}"
653+
INTERFACE
654+
"$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include>"
655+
)
656+
657+
# CMake 3.4 can't have PUBLIC_HEADER property on INTERFACE libraries
658+
install(
659+
FILES ${INLINE_HEADER_FILES_GENERATED}
660+
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
661+
COMPONENT sleef_Development
662+
)
663+
664+
install(
665+
TARGETS "${TARGET_INLINE_HEADERS}"
666+
EXPORT sleefTargets
667+
INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
668+
)
649669
endif(SED_COMMAND)
650670
endif(BUILD_INLINE_HEADERS)
651671

@@ -966,7 +986,11 @@ if(CLANG_EXE_PATH AND SLEEF_ENABLE_LLVM_BITCODE)
966986
)
967987
add_dependencies(${TARGET_LLVM_BITCODE} ${TARGET_HEADERS})
968988

969-
install(FILES ${LLVM_BITCODE_OUTPUTS} DESTINATION "${CMAKE_INSTALL_LIBDIR}")
989+
install(
990+
FILES ${LLVM_BITCODE_OUTPUTS}
991+
DESTINATION "${CMAKE_INSTALL_LIBDIR}"
992+
COMPONENT sleef_Development
993+
)
970994
endif()
971995

972996
# --------------------------------------------------------------------
@@ -992,31 +1016,88 @@ if(COMPILER_SUPPORTS_BUILTIN_MATH)
9921016
endif()
9931017

9941018
if(BUILD_SCALAR_LIB)
995-
install(TARGETS sleefscalar
996-
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
997-
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
998-
RUNTIME DESTINATION bin
999-
)
1019+
install(
1020+
TARGETS sleefscalar
1021+
EXPORT sleefTargets
1022+
LIBRARY #
1023+
DESTINATION "${CMAKE_INSTALL_LIBDIR}"
1024+
COMPONENT sleef_Runtime
1025+
NAMELINK_SKIP
1026+
ARCHIVE #
1027+
DESTINATION "${CMAKE_INSTALL_LIBDIR}"
1028+
COMPONENT sleef_Development
1029+
RUNTIME #
1030+
DESTINATION "${CMAKE_INSTALL_BINDIR}"
1031+
COMPONENT sleef_Runtime
1032+
)
1033+
1034+
install(
1035+
TARGETS sleefscalar
1036+
LIBRARY #
1037+
DESTINATION "${CMAKE_INSTALL_LIBDIR}"
1038+
COMPONENT sleef_Development
1039+
NAMELINK_ONLY
1040+
)
10001041
endif()
10011042

10021043
# --------------------------------------------------------------------
10031044
# Install
10041045
# --------------------------------------------------------------------
10051046
# Install libsleef and sleef.h
1006-
install(TARGETS ${TARGET_LIBSLEEF}
1007-
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
1008-
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
1009-
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
1010-
RUNTIME DESTINATION bin
1047+
install(
1048+
TARGETS ${TARGET_LIBSLEEF}
1049+
EXPORT sleefTargets
1050+
PUBLIC_HEADER #
1051+
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
1052+
COMPONENT sleef_Development
1053+
LIBRARY #
1054+
DESTINATION "${CMAKE_INSTALL_LIBDIR}"
1055+
COMPONENT sleef_Runtime
1056+
NAMELINK_SKIP
1057+
ARCHIVE #
1058+
DESTINATION "${CMAKE_INSTALL_LIBDIR}"
1059+
COMPONENT sleef_Development
1060+
RUNTIME #
1061+
DESTINATION "${CMAKE_INSTALL_BINDIR}"
1062+
COMPONENT sleef_Runtime
1063+
INCLUDES #
1064+
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
1065+
)
1066+
install(
1067+
TARGETS ${TARGET_LIBSLEEF}
1068+
LIBRARY #
1069+
DESTINATION "${CMAKE_INSTALL_LIBDIR}"
1070+
COMPONENT sleef_Development
1071+
NAMELINK_ONLY
10111072
)
10121073
configure_file("sleef.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/sleef.pc" @ONLY)
1013-
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/sleef.pc"
1014-
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
1074+
install(
1075+
FILES "${CMAKE_CURRENT_BINARY_DIR}/sleef.pc"
1076+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig"
1077+
COMPONENT sleef_Development
1078+
)
10151079

10161080
if(ENABLE_GNUABI)
1017-
install(TARGETS ${TARGET_LIBSLEEFGNUABI}
1018-
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
1019-
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
1020-
RUNTIME DESTINATION bin
1021-
)
1081+
install(
1082+
TARGETS ${TARGET_LIBSLEEFGNUABI}
1083+
EXPORT sleefTargets
1084+
LIBRARY #
1085+
DESTINATION "${CMAKE_INSTALL_LIBDIR}"
1086+
COMPONENT sleef_Runtime
1087+
NAMELINK_SKIP
1088+
ARCHIVE #
1089+
DESTINATION "${CMAKE_INSTALL_LIBDIR}"
1090+
COMPONENT sleef_Development
1091+
RUNTIME #
1092+
DESTINATION "${CMAKE_INSTALL_BINDIR}"
1093+
COMPONENT sleef_Runtime
1094+
)
1095+
1096+
install(
1097+
TARGETS ${TARGET_LIBSLEEF}
1098+
LIBRARY #
1099+
DESTINATION "${CMAKE_INSTALL_LIBDIR}"
1100+
COMPONENT sleef_Development
1101+
NAMELINK_ONLY
1102+
)
10221103
endif()

src/quad/CMakeLists.txt

+31-6
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,11 @@ if(BUILD_INLINE_HEADERS)
393393
DEPENDS
394394
${INLINE_HEADER_FILES_GENERATED}
395395
)
396-
install(FILES ${INLINE_HEADER_FILES_GENERATED} DESTINATION include)
396+
install(
397+
FILES ${INLINE_HEADER_FILES_GENERATED}
398+
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
399+
COMPONENT sleef_Development
400+
)
397401
endif(SED_COMMAND)
398402
endif(BUILD_INLINE_HEADERS)
399403

@@ -485,9 +489,30 @@ endif(DEFINED QMKDISP_PARAMS_X2)
485489
# Install
486490
# --------------------------------------------------------------------
487491
# Install libsleef and sleef.h
488-
install(TARGETS sleefquad
489-
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
490-
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
491-
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
492-
RUNTIME DESTINATION bin
492+
install(
493+
TARGETS sleefquad
494+
EXPORT sleefTargets
495+
PUBLIC_HEADER #
496+
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
497+
COMPONENT sleef_Development
498+
LIBRARY #
499+
DESTINATION "${CMAKE_INSTALL_LIBDIR}"
500+
COMPONENT sleef_Runtime
501+
NAMELINK_SKIP
502+
ARCHIVE #
503+
DESTINATION "${CMAKE_INSTALL_LIBDIR}"
504+
COMPONENT sleef_Development
505+
RUNTIME #
506+
DESTINATION "${CMAKE_INSTALL_BINDIR}"
507+
COMPONENT sleef_Runtime
508+
INCLUDES #
509+
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
510+
)
511+
512+
install(
513+
TARGETS sleefquad
514+
LIBRARY #
515+
DESTINATION "${CMAKE_INSTALL_LIBDIR}"
516+
COMPONENT sleef_Development
517+
NAMELINK_ONLY
493518
)

0 commit comments

Comments
 (0)