-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLangulusUtilities.cmake
78 lines (68 loc) · 3.3 KB
/
LangulusUtilities.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
include(FetchContent)
# Utility for fetching Langulus libraries using FetchContent
function(fetch_langulus_module NAME GIT_TAG TAG)
if (LANGULUS)
message(FATAL_ERROR "You can't fetch Langulus::${NAME}, because this build \
indicates LANGULUS is being build along your project. The library you're \
trying to fetch should already be available locally.")
endif()
if(NOT DEFINED LANGULUS_EXTERNAL_DIRECTORY)
set(LANGULUS_EXTERNAL_DIRECTORY "${CMAKE_SOURCE_DIR}/external" CACHE PATH
"Place where external dependencies will be downloaded")
message(WARNING "LANGULUS_EXTERNAL_DIRECTORY not defined, using default: \
${LANGULUS_EXTERNAL_DIRECTORY}")
endif()
# Completely avoid downloading or updating anything, once the appropriate
# folder exists
string(TOUPPER ${NAME} UPPERCASE_NAME)
if (EXISTS "${LANGULUS_EXTERNAL_DIRECTORY}/${NAME}-src")
set(FETCHCONTENT_SOURCE_DIR_LANGULUS${UPPERCASE_NAME} "${LANGULUS_EXTERNAL_DIRECTORY}/${NAME}-src" CACHE INTERNAL "" FORCE)
message(STATUS "Reusing external library Langulus::${NAME}... \
(delete ${LANGULUS_EXTERNAL_DIRECTORY}/${NAME}-src manually in order to redownload)")
else()
unset(FETCHCONTENT_SOURCE_DIR_LANGULUS${UPPERCASE_NAME} CACHE)
message(STATUS "Downloading external library Langulus::${NAME}...")
endif()
FetchContent_Declare(
Langulus${NAME}
GIT_REPOSITORY https://github.com/Langulus/${NAME}.git
GIT_TAG ${TAG}
SOURCE_DIR "${LANGULUS_EXTERNAL_DIRECTORY}/${NAME}-src"
SUBBUILD_DIR "${CMAKE_BINARY_DIR}/external/${NAME}-subbuild"
${ARGN}
)
FetchContent_MakeAvailable(Langulus${NAME})
endfunction()
# Utility for fetching external libraries using FetchContent
function(fetch_external_module NAME GIT_REPOSITORY REPO GIT_TAG TAG)
if(NOT DEFINED LANGULUS_EXTERNAL_DIRECTORY)
set(LANGULUS_EXTERNAL_DIRECTORY "${CMAKE_SOURCE_DIR}/external" CACHE PATH
"Place where external dependencies will be downloaded")
message(WARNING "LANGULUS_EXTERNAL_DIRECTORY not defined, \
using default: ${LANGULUS_EXTERNAL_DIRECTORY}")
endif()
# Completely avoid downloading or updating anything, once the appropriate
# folder exists
string(TOUPPER ${NAME} UPPERCASE_NAME)
if (EXISTS "${LANGULUS_EXTERNAL_DIRECTORY}/${NAME}-src")
set(FETCHCONTENT_SOURCE_DIR_${UPPERCASE_NAME} "${LANGULUS_EXTERNAL_DIRECTORY}/${NAME}-src" CACHE INTERNAL "" FORCE)
message(STATUS "Reusing external library ${NAME}... \
(delete ${LANGULUS_EXTERNAL_DIRECTORY}/${NAME}-src manually in order to redownload)")
else()
unset(FETCHCONTENT_SOURCE_DIR_${UPPERCASE_NAME} CACHE)
message(STATUS "Downloading external library ${NAME}...")
endif()
FetchContent_Declare(
${NAME}
GIT_REPOSITORY ${REPO}
GIT_TAG ${TAG}
SOURCE_DIR "${LANGULUS_EXTERNAL_DIRECTORY}/${NAME}-src"
SUBBUILD_DIR "${CMAKE_BINARY_DIR}/external/${NAME}-subbuild"
${ARGN}
EXCLUDE_FROM_ALL
)
FetchContent_MakeAvailable(${NAME})
string(TOLOWER ${NAME} LOWERCASE_NAME)
set(${NAME}_SOURCE_DIR "${${LOWERCASE_NAME}_SOURCE_DIR}" CACHE INTERNAL "${NAME} source directory")
set(${NAME}_BINARY_DIR "${${LOWERCASE_NAME}_BINARY_DIR}" CACHE INTERNAL "${NAME} binary directory")
endfunction()