diff options
-rw-r--r-- | CMakeLists.txt | 45 | ||||
-rw-r--r-- | Config.cmake.in | 5 | ||||
-rw-r--r-- | Makefile.am | 2 | ||||
-rw-r--r-- | doc/README.cmake | 13 |
4 files changed, 58 insertions, 7 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index b6be6e09..173ca445 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,6 +45,7 @@ include(CheckCSourceCompiles) include(CheckFunctionExists) include(CheckIncludeFile) include(CheckSymbolExists) +include(CMakePackageConfigHelpers) include(CTest) include(GNUInstallDirs) @@ -459,14 +460,23 @@ add_library(gc ${SRC}) if (enable_threads) target_link_libraries(gc PRIVATE ${THREADDLLIBS} ${ATOMIC_OPS_LIBS}) endif() +target_include_directories(gc INTERFACE + "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>" + "$<INSTALL_INTERFACE:include>") if (enable_cplusplus) add_library(gccpp gc_badalc.cc gc_cpp.cc) target_link_libraries(gccpp PRIVATE gc) + target_include_directories(gccpp INTERFACE + "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>" + "$<INSTALL_INTERFACE:include>") if (enable_throw_bad_alloc_library) # The same as gccpp but contains only gc_badalc. add_library(gctba gc_badalc.cc) target_link_libraries(gctba PRIVATE gc) + target_include_directories(gctba INTERFACE + "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>" + "$<INSTALL_INTERFACE:include>") endif(enable_throw_bad_alloc_library) endif() @@ -474,16 +484,19 @@ if (build_cord) set(CORD_SRC cord/cordbscs.c cord/cordprnt.c cord/cordxtra.c) add_library(cord ${CORD_SRC}) target_link_libraries(cord PRIVATE gc) + target_include_directories(cord INTERFACE + "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>" + "$<INSTALL_INTERFACE:include>") if (BUILD_SHARED_LIBS) set_property(TARGET cord PROPERTY VERSION ${CORD_VERSION}) set_property(TARGET cord PROPERTY SOVERSION ${CORD_SOVERSION}) endif() - install(TARGETS cord EXPORT cordExports + install(TARGETS cord EXPORT BDWgcTargets LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") -endif() +endif(build_cord) if (BUILD_SHARED_LIBS AND HAVE_FLAG_WL_NO_UNDEFINED) # Declare that the libraries do not refer to external symbols. @@ -504,7 +517,7 @@ if (BUILD_SHARED_LIBS) set_property(TARGET gc PROPERTY VERSION ${GC_VERSION}) set_property(TARGET gc PROPERTY SOVERSION ${GC_SOVERSION}) endif() -install(TARGETS gc EXPORT gcExports +install(TARGETS gc EXPORT BDWgcTargets LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" @@ -515,7 +528,7 @@ if (enable_cplusplus) set_property(TARGET gccpp PROPERTY VERSION ${GCCPP_VERSION}) set_property(TARGET gccpp PROPERTY SOVERSION ${GCCPP_SOVERSION}) endif() - install(TARGETS gccpp EXPORT gccppExports + install(TARGETS gccpp EXPORT BDWgcTargets LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" @@ -525,13 +538,13 @@ if (enable_cplusplus) set_property(TARGET gctba PROPERTY VERSION ${GCCPP_VERSION}) set_property(TARGET gctba PROPERTY SOVERSION ${GCCPP_SOVERSION}) endif() - install(TARGETS gctba EXPORT gctbaExports + install(TARGETS gctba EXPORT BDWgcTargets LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") endif(enable_throw_bad_alloc_library) -endif() +endif(enable_cplusplus) if (install_headers) install(FILES include/gc.h @@ -707,3 +720,23 @@ if (enable_docs) install(FILES doc/gc.man DESTINATION "${CMAKE_INSTALL_MANDIR}/man3" RENAME gc.3) endif(enable_docs) + +# CMake config/targets files. +install(EXPORT BDWgcTargets FILE BDWgcTargets.cmake + NAMESPACE BDWgc:: DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/bdwgc") + +configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/BDWgcConfig.cmake" + INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/bdwgc" + NO_SET_AND_CHECK_MACRO) + +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/BDWgcConfigVersion.cmake" + VERSION "${PACKAGE_VERSION}" COMPATIBILITY AnyNewerVersion) + +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/BDWgcConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/BDWgcConfigVersion.cmake" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/bdwgc") + +export(EXPORT BDWgcTargets + FILE "${CMAKE_CURRENT_BINARY_DIR}/BDWgcTargets.cmake") diff --git a/Config.cmake.in b/Config.cmake.in new file mode 100644 index 00000000..354f0ae3 --- /dev/null +++ b/Config.cmake.in @@ -0,0 +1,5 @@ +# The BDWgc CMake configuration file. + +@PACKAGE_INIT@ +include("${CMAKE_CURRENT_LIST_DIR}/BDWgcTargets.cmake") +check_required_components(gc) diff --git a/Makefile.am b/Makefile.am index 4758a36e..2e023a1a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -206,7 +206,7 @@ EXTRA_DIST += README.QUICK # :GOTCHA: deliberately we do not include 'Makefile' EXTRA_DIST += NT_MAKEFILE OS2_MAKEFILE PCR-Makefile digimars.mak \ Makefile.direct SMakefile.amiga WCC_MAKEFILE autogen.sh CMakeLists.txt \ - build/s60v3/bld.inf build/s60v3/libgc.mmp + Config.cmake.in build/s60v3/bld.inf build/s60v3/libgc.mmp # files used by makefiles other than Makefile.am # diff --git a/doc/README.cmake b/doc/README.cmake index 297122de..ee0b4897 100644 --- a/doc/README.cmake +++ b/doc/README.cmake @@ -47,3 +47,16 @@ INPUT The main input to cmake is CMakeLists.txt file in the GC root directory. For help, go to cmake.org. + + +HOW TO IMPORT BDWGC +------------------- + +Another project could add bdwgc as one of its dependencies with something like +this in their CMakeLists.txt: + +find_package(BDWgc 8.1.0 REQUIRED) +add_executable(Foo foo.c) +target_link_libraries(Foo BDWgc::gc) + +Other exported libraries are: cord, gccpp, gctba. |