Skip to content

Commit fb703d8

Browse files
committed
Add install and FetchContent
1 parent 09b056a commit fb703d8

File tree

3 files changed

+54
-1
lines changed

3 files changed

+54
-1
lines changed

CMakeLists.txt

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
2+
3+
project(CPM VERSION 0.37.0 LANGUAGES NONE)
4+
5+
option(CPM_INSTALL "Install CPM" OFF)
6+
7+
include(CMakePackageConfigHelpers)
8+
configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/CPMConfig.cmake.in"
9+
"${CMAKE_CURRENT_BINARY_DIR}/CPMConfig.cmake"
10+
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/CPM"
11+
)
12+
write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/CPMConfigVersion.cmake" COMPATIBILITY SameMajorVersion ARCH_INDEPENDENT)
13+
14+
# For consumer using FetchContent
15+
if(NOT ${CMAKE_PROJECT_NAME} STREQUAL ${PROJECT_NAME})
16+
# Trick to use the find_package
17+
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/CPM.cmake" "${CMAKE_CURRENT_BINARY_DIR}/CPM.cmake" COPYONLY)
18+
set(CPM_DIR "${CMAKE_CURRENT_BINARY_DIR}")
19+
find_package(CPM CONFIG REQUIRED NO_POLICY_SCOPE)
20+
# Check if the user download the repo with git and not in an official release
21+
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git" AND IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/.git")
22+
find_package(Git REQUIRED QUIET)
23+
# Generate a git-describe version string from Git repository tags.
24+
execute_process(
25+
COMMAND ${GIT_EXECUTABLE} tag --points-at HEAD
26+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
27+
OUTPUT_VARIABLE CPM_TAG
28+
RESULT_VARIABLE GIT_DESCRIBE_ERROR_CODE
29+
OUTPUT_STRIP_TRAILING_WHITESPACE
30+
)
31+
if(NOT GIT_DESCRIBE_ERROR_CODE AND NOT CPM_TAG STREQUAL "")
32+
set(CPM_RELEASE TRUE)
33+
else()
34+
set(CPM_RELEASE FALSE)
35+
endif()
36+
endif()
37+
endif()
38+
39+
if(CPM_INSTALL)
40+
## Without it : Unable to determine default CMAKE_INSTALL_LIBDIR directory because no target architecture is known. Please enable at least one language before including GNUInstallDirs.
41+
enable_language(C)
42+
include(GNUInstallDirs)
43+
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/CPMConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/CPMConfigVersion.cmake" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/CPM.cmake" DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/CPM")
44+
endif()

cmake/CPM.cmake

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,11 @@ if(NOT COMMAND cpm_message)
4242
endfunction()
4343
endif()
4444

45-
set(CURRENT_CPM_VERSION 1.0.0-development-version)
45+
if(${PROJECT_NAME} STREQUAL "CPM" AND CPM_RELEASE)
46+
set(CURRENT_CPM_VERSION "${PROJECT_VERSION}")
47+
else()
48+
set(CURRENT_CPM_VERSION 1.0.0-development-version)
49+
endif()
4650

4751
get_filename_component(CPM_CURRENT_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}" REALPATH)
4852
if(CPM_DIRECTORY)

cmake/CPMConfig.cmake.in

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
@PACKAGE_INIT@
2+
3+
include("${CMAKE_CURRENT_LIST_DIR}/CPM.cmake" NO_POLICY_SCOPE)
4+
5+
check_required_components(CPM)

0 commit comments

Comments
 (0)