Skip to content

Commit

Permalink
Detect if being built embedded in another CMake build #2
Browse files Browse the repository at this point in the history
Signed-off-by: Mikko Johannes Koivunalho <[email protected]>
  • Loading branch information
mikkoi committed Feb 14, 2020
1 parent 8759266 commit c30729f
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 96 deletions.
183 changes: 96 additions & 87 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,11 @@ cmake_minimum_required(VERSION 3.9 FATAL_ERROR)

# Detect if Check is being used in another build as a subproject
# probably with command FetchContent*().
set(THIS_IS_MAIN_PROJECT TRUE)
set(THIS_IS_SUBPROJECT FALSE)
if(DEFINED PROJECT_NAME)
set(THIS_IS_MAIN_PROJECT FALSE)
set(THIS_IS_SUBPROJECT TRUE)
message(STATUS "Turned off installing because Check is a subproject.")
message(STATUS "Turned off building tests because Check is a subproject.")
endif()

if(POLICY CMP0090)
Expand Down Expand Up @@ -400,62 +402,65 @@ set(CONFIG_HEADER ${CMAKE_CURRENT_BINARY_DIR}/config.h)
#
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/check_stdint.h.in
${CMAKE_CURRENT_BINARY_DIR}/check_stdint.h @ONLY)
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/check_stdint.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
if(NOT THIS_IS_SUBPROJECT)
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/check_stdint.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
endif()

###############################################################################
# Generate "check.pc", the package config (pkgconfig) file for libtool
set(prefix_save "${PREFIX}")
set(prefix "${CMAKE_INSTALL_PREFIX}")
set(exec_prefix "\${prefix}")
set(libdir "\${exec_prefix}/lib")
set(includedir "\${prefix}/include")
set(VERSION "${PROJECT_VERSION}")

if (HAVE_SUBUNIT)
set(LIBSUBUNIT_PC "libsubunit")
else (HAVE_SUBINIT)
set(LIBSUBUNIT_PC "")
endif (HAVE_SUBUNIT)

if (CHECK_ENABLE_GCOV)
set(GCOV_LIBS "-lgcov")
else (CHECK_ENABLE_GCOV)
set(GCOV_LIBS "")
endif (CHECK_ENABLE_GCOV)

set(PTHREAD_LIBS "")
set(LIBS "")

if (HAVE_LIBM)
set(LIBS "${LIBS} -lm")
endif (HAVE_LIBM)

if (HAVE_LIBRT)
set(LIBS "${LIBS} -lrt")
endif (HAVE_LIBRT)

set(PTHREAD_CFLAGS "-pthread")

configure_file(check.pc.in check.pc @ONLY)

unset(PTHREAD_CFLAGS)
unset(LIBS)
unset(PTHREAD_LIBS)
unset(GCOV_LIBS)
unset(LIBSUBUNIT_PC)
unset(VERSION)
unset(includedir)
unset(libdir)
unset(exec_prefix)
set(PREFIX "${prefix_save}")

install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/check.pc
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
)
if(NOT THIS_IS_SUBPROJECT)
set(prefix_save "${PREFIX}")
set(prefix "${CMAKE_INSTALL_PREFIX}")
set(exec_prefix "\${prefix}")
set(libdir "\${exec_prefix}/lib")
set(includedir "\${prefix}/include")
set(VERSION "${PROJECT_VERSION}")

if (HAVE_SUBUNIT)
set(LIBSUBUNIT_PC "libsubunit")
else (HAVE_SUBINIT)
set(LIBSUBUNIT_PC "")
endif (HAVE_SUBUNIT)

if (CHECK_ENABLE_GCOV)
set(GCOV_LIBS "-lgcov")
else (CHECK_ENABLE_GCOV)
set(GCOV_LIBS "")
endif (CHECK_ENABLE_GCOV)

set(PTHREAD_LIBS "")
set(LIBS "")

if (HAVE_LIBM)
set(LIBS "${LIBS} -lm")
endif (HAVE_LIBM)

if (HAVE_LIBRT)
set(LIBS "${LIBS} -lrt")
endif (HAVE_LIBRT)

set(PTHREAD_CFLAGS "-pthread")

configure_file(check.pc.in check.pc @ONLY)

unset(PTHREAD_CFLAGS)
unset(LIBS)
unset(PTHREAD_LIBS)
unset(GCOV_LIBS)
unset(LIBSUBUNIT_PC)
unset(VERSION)
unset(includedir)
unset(libdir)
unset(exec_prefix)
set(PREFIX "${prefix_save}")

install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/check.pc
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
)
endif()

###############################################################################
# Subdirectories
Expand All @@ -465,7 +470,7 @@ add_subdirectory(checkmk)

###############################################################################
# Unit tests
if (BUILD_TESTING AND THIS_IS_MAIN_PROJECT)
if(BUILD_TESTING AND NOT THIS_IS_SUBPROJECT)
add_subdirectory(tests)
add_test(NAME check_check COMMAND check_check)
add_test(NAME check_check_export COMMAND check_check_export)
Expand Down Expand Up @@ -494,39 +499,41 @@ if (BUILD_TESTING AND THIS_IS_MAIN_PROJECT)
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/tests
COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/tests/test_set_max_msg_size.sh)
endif(UNIX OR MINGW OR MSYS)
endif (BUILD_TESTING AND THIS_IS_MAIN_PROJECT)
endif()

###############################################################################
# Export project, prepare a config and config-version files
string(TOLOWER ${PROJECT_NAME} EXPORT_NAME)
include(CMakePackageConfigHelpers)
configure_package_config_file(
${CMAKE_CURRENT_SOURCE_DIR}/cmake/${EXPORT_NAME}-config.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/cmake/${EXPORT_NAME}-config.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/${EXPORT_NAME}/cmake
)
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/cmake/${EXPORT_NAME}-config-version.cmake
VERSION ${PROJECT_VERSION}
COMPATIBILITY AnyNewerVersion
)

export(EXPORT check-targets
FILE "${CMAKE_CURRENT_BINARY_DIR}/cmake/${EXPORT_NAME}-targets.cmake"
NAMESPACE "${PROJECT_NAME}::"
)

install(EXPORT check-targets
NAMESPACE "${PROJECT_NAME}::"
FILE "${EXPORT_NAME}-targets.cmake"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${EXPORT_NAME}
)
install(
FILES
"${CMAKE_CURRENT_BINARY_DIR}/cmake/${EXPORT_NAME}-config.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/cmake/${EXPORT_NAME}-config-version.cmake"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${EXPORT_NAME}
)
if(NOT THIS_IS_SUBPROJECT)
string(TOLOWER ${PROJECT_NAME} EXPORT_NAME)
include(CMakePackageConfigHelpers)
configure_package_config_file(
${CMAKE_CURRENT_SOURCE_DIR}/cmake/${EXPORT_NAME}-config.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/cmake/${EXPORT_NAME}-config.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/${EXPORT_NAME}/cmake
)
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/cmake/${EXPORT_NAME}-config-version.cmake
VERSION ${PROJECT_VERSION}
COMPATIBILITY AnyNewerVersion
)

export(EXPORT check-targets
FILE "${CMAKE_CURRENT_BINARY_DIR}/cmake/${EXPORT_NAME}-targets.cmake"
NAMESPACE "${PROJECT_NAME}::"
)

install(EXPORT check-targets
NAMESPACE "${PROJECT_NAME}::"
FILE "${EXPORT_NAME}-targets.cmake"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${EXPORT_NAME}
)
install(
FILES
"${CMAKE_CURRENT_BINARY_DIR}/cmake/${EXPORT_NAME}-config.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/cmake/${EXPORT_NAME}-config-version.cmake"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${EXPORT_NAME}
)
endif()

# Store the current build directory in the CMake user package registry.
# This helps dependent projects use a package from the current
Expand All @@ -540,7 +547,9 @@ install(
# this side effect should not be enabled by default.
# Therefore CMake 3.15 and above prefer that export(PACKAGE) does nothing
# unless an explicit CMAKE_EXPORT_PACKAGE_REGISTRY variable is set.
export(PACKAGE "${PROJECT_NAME}")
if(NOT THIS_IS_SUBPROJECT)
export(PACKAGE "${PROJECT_NAME}")
endif()

# vim: shiftwidth=2:softtabstop=2:tabstop=2:expandtab:autoindent

4 changes: 2 additions & 2 deletions checkmk/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ configure_file(checkmk.in checkmk @ONLY)
file(COPY doc/checkmk.1 DESTINATION man/man1)

option(INSTALL_CHECKMK "Install checkmk" ON)
if(INSTALL_CHECKMK)
if(INSTALL_CHECKMK AND NOT THIS_IS_SUBPROJECT)
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/checkmk
DESTINATION ${CMAKE_INSTALL_BINDIR}
Expand All @@ -37,7 +37,7 @@ if(INSTALL_CHECKMK)
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/man
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}
)
endif(INSTALL_CHECKMK)
endif()

# vim: shiftwidth=2:softtabstop=2:tabstop=2:expandtab:autoindent

16 changes: 9 additions & 7 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -182,13 +182,15 @@ target_include_directories(checkShared
$<INSTALL_INTERFACE:include>
)

install(TARGETS check checkShared
EXPORT check-targets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
if(NOT THIS_IS_SUBPROJECT)
install(TARGETS check checkShared
EXPORT check-targets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
endif()

# vim: shiftwidth=2:softtabstop=2:tabstop=2:expandtab:autoindent

0 comments on commit c30729f

Please sign in to comment.