Skip to content

Commit d6ce5d2

Browse files
committed
Create cmake/cpack/find/nabla.cmake & cmake/cpack/find/compoment/template.cmake, script component install rules has been added creating interface install variables in separate files which can be used with find_package. TODO: global configuration Nabla file including the component files if found in package, makes flexible search requests for package parts
1 parent 77413e6 commit d6ce5d2

File tree

4 files changed

+65
-2
lines changed

4 files changed

+65
-2
lines changed

3rdparty/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ set(_OLD_SKIP_INSTALL_ALL ${SKIP_INSTALL_ALL})
6363
set(BUILD_SHARED_LIBS OFF)
6464
set(SKIP_INSTALL_ALL ON)
6565

66-
add_subdirectory(zlib zlib EXCLUDE_FROM_ALL)
6766
file(LOCK "${CMAKE_CURRENT_SOURCE_DIR}/zlib" DIRECTORY GUARD PROCESS RESULT_VARIABLE NBL_LOCK TIMEOUT 60)
67+
add_subdirectory(zlib zlib EXCLUDE_FROM_ALL)
6868
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/zlib/zconf.h.included")
6969
execute_process(COMMAND "${CMAKE_COMMAND}" -E rename zconf.h.included zconf.h
7070
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/zlib"
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
list(TRANSFORM @_NBL_PROXY_@ PREPEND "${CMAKE_CURRENT_LIST_DIR}/")

cmake/cpack/find/nabla.cmake

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
function(NBL_GEN_FIND_NABLA_CODE_IMPL _COMPOMENT_ _SPATH_)
2+
string(APPEND NBL_FIND_NABLA_IMPL "set(_COMPOMENT_ ${_COMPOMENT_})\nset(_SPATH_ ${_SPATH_})\n\nset(NBL_ROOT_PATH ${NBL_ROOT_PATH})\n\n")
3+
string(APPEND NBL_FIND_NABLA_IMPL
4+
[=[
5+
if(CMAKE_INSTALL_CONFIG_NAME MATCHES "^([Dd][Ee][Bb][Uu][Gg])$")
6+
set(NBL_CONFIG_PREFIX_PATH debug)
7+
elseif(CMAKE_INSTALL_CONFIG_NAME MATCHES "^([Rr][Ee][Ll][Ww][Ii][Tt][Hh][Dd][Ee][Bb][Ii][Nn][Ff][Oo])$")
8+
set(NBL_CONFIG_PREFIX_PATH relwithdebinfo)
9+
elseif(CMAKE_INSTALL_CONFIG_NAME MATCHES "^([Rr][Ee][Ll][Ee][Aa][Ss][Ee])$")
10+
unset(NBL_CONFIG_PREFIX_PATH)
11+
else()
12+
message(FATAL_ERROR "Internal error, requested \"${CMAKE_INSTALL_CONFIG_NAME}\" configuration is invalid!")
13+
endif()
14+
15+
string(REPLACE "${CMAKE_INSTALL_PREFIX}" "" NBL_CMAKE_INSTALL_MANIFEST_CONTENT "${CMAKE_INSTALL_MANIFEST_FILES}")
16+
list(REMOVE_DUPLICATES NBL_CMAKE_INSTALL_MANIFEST_CONTENT)
17+
18+
set(_NBL_PREFIX_ "${CMAKE_INSTALL_PREFIX}/${NBL_CONFIG_PREFIX_PATH}")
19+
string(TOUPPER "${CMAKE_INSTALL_CONFIG_NAME}" _NBL_CONFIG_)
20+
string(TOUPPER "${_COMPOMENT_}" _Cu_)
21+
string(TOLOWER "${_COMPOMENT_}" _Cl_)
22+
23+
set(NBL_CMAKE_COMPOMENT_OUTPUT_DIRECTORY "${CMAKE_INSTALL_PREFIX}/${NBL_CONFIG_PREFIX_PATH}/cmake/compoment")
24+
set(NBL_CMAKE_COMPOMENT_OUTPUT_FILE "${NBL_CMAKE_COMPOMENT_OUTPUT_DIRECTORY}/NablaConfig${_COMPOMENT_}.cmake")
25+
26+
cmake_path(RELATIVE_PATH CMAKE_INSTALL_PREFIX BASE_DIRECTORY "${NBL_CMAKE_COMPOMENT_OUTPUT_DIRECTORY}" OUTPUT_VARIABLE _NBL_REL_TO_PREFIX_)
27+
28+
foreach(_MANIFEST_INSTALL_REL_FILE_ IN LISTS NBL_CMAKE_INSTALL_MANIFEST_CONTENT)
29+
string(FIND "${_MANIFEST_INSTALL_REL_FILE_}" "/${_SPATH_}/" _NBL_FOUND_)
30+
31+
if(NOT "${_NBL_FOUND_}" STREQUAL "-1")
32+
set(_X_ "${_NBL_REL_TO_PREFIX_}/${_MANIFEST_INSTALL_REL_FILE_}")
33+
cmake_path(NORMAL_PATH _X_ OUTPUT_VARIABLE _X_)
34+
35+
list(APPEND NBL_INSTALL_${_Cu_}_${_NBL_CONFIG_} "${_X_}")
36+
endif()
37+
endforeach()
38+
39+
set(_NBL_PROXY_ NBL_INSTALL_${_Cu_}_${_NBL_CONFIG_})
40+
41+
string(APPEND NBL_MANIFEST_IMPL "set(${_NBL_PROXY_}\n\t${${_NBL_PROXY_}}\n)")
42+
string(REPLACE ";" "\n\t" NBL_MANIFEST_IMPL "${NBL_MANIFEST_IMPL}")
43+
string(CONFIGURE "${NBL_MANIFEST_IMPL}" NBL_MANIFEST_IMPL_CONF)
44+
file(WRITE "${NBL_CMAKE_COMPOMENT_OUTPUT_FILE}" "${NBL_MANIFEST_IMPL_CONF}")
45+
46+
# the reason behind this weird looking thing is you cannot nest bracket arguments https://cmake.org/cmake/help/latest/manual/cmake-language.7.html#bracket-argument
47+
# some variables need evaluation but some not and must be literals, to make this code read-able & work we do a small workaround
48+
configure_file("${NBL_ROOT_PATH}/cmake/cpack/find/compoment/template.cmake" "${NBL_CMAKE_COMPOMENT_OUTPUT_FILE}.tmp" @ONLY)
49+
file(READ "${NBL_CMAKE_COMPOMENT_OUTPUT_FILE}.tmp" _NBL_COMPOMENT_INCLUDE_LIST_TRANFORM_)
50+
file(REMOVE "${NBL_CMAKE_COMPOMENT_OUTPUT_FILE}.tmp")
51+
file(APPEND "${NBL_CMAKE_COMPOMENT_OUTPUT_FILE}" "\n${_NBL_COMPOMENT_INCLUDE_LIST_TRANFORM_}")
52+
]=]
53+
)
54+
55+
install(CODE "${NBL_FIND_NABLA_IMPL}" COMPONENT ${_COMPOMENT_})
56+
endfunction()
57+
58+
# Generate compoment configurations
59+
NBL_GEN_FIND_NABLA_CODE_IMPL(Headers include)
60+
NBL_GEN_FIND_NABLA_CODE_IMPL(Libraries lib)
61+
NBL_GEN_FIND_NABLA_CODE_IMPL(Runtimes runtime)

cmake/cpack/package.cmake

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,4 +87,5 @@ set(CPACK_COMPONENT_HEADERS_DEPENDS Libraries Runtimes)
8787

8888
set(CPACK_THREADS 0) # try to use all threads for compression
8989

90-
include(CPack)
90+
include(CPack)
91+
include("${CMAKE_CURRENT_LIST_DIR}/find/nabla.cmake")

0 commit comments

Comments
 (0)