-
Notifications
You must be signed in to change notification settings - Fork 112
Expand file tree
/
Copy pathUsefulMacros.cmake
More file actions
95 lines (88 loc) · 3.2 KB
/
UsefulMacros.cmake
File metadata and controls
95 lines (88 loc) · 3.2 KB
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
macro(set_target_python_module_name target)
set_target_properties(${target} PROPERTIES PREFIX "")
if (WIN32)
set_target_properties(${target} PROPERTIES SUFFIX ".pyd")
elseif(APPLE)
set_target_properties(${target} PROPERTIES SUFFIX ".so")
endif (WIN32)
endmacro()
macro(set_target_rpath target path)
if (APPLE)
set_target_properties(${target} PROPERTIES INSTALL_RPATH "@loader_path/${path}" BUILD_WITH_INSTALL_RPATH TRUE)
elseif (UNIX)
set_target_properties(${target} PROPERTIES INSTALL_RPATH "$ORIGIN/${path}" BUILD_WITH_INSTALL_RPATH TRUE)
endif(APPLE)
endmacro()
macro(copy_target x)
set(src $<TARGET_FILE:${x}>)
set(dst ${CMAKE_CURRENT_BINARY_DIR})
add_custom_command(
TARGET ${x}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${src} ${dst}
COMMENT "Copying ${src} to ${dst}")
unset(src)
unset(dst)
endmacro()
function(copy_target_dependencies x)
if(ARGC GREATER 1)
set(_target_file ${ARGV1})
get_filename_component(_target_file_name ${_target_file} NAME)
else()
set(_target_file $<TARGET_FILE:${x}>)
set(_target_file_name $<TARGET_FILE_NAME:${x}>)
endif()
if(WIN32)
add_custom_command(TARGET ${x} POST_BUILD
COMMAND ${CMAKE_COMMAND} -P
${PROJECT_SOURCE_DIR}/cmake/CopyWindowsDependencies.cmake
${CMAKE_CURRENT_BINARY_DIR}/${_target_file_name}
${PPTK_LIBS_DIR} "${PPTK_DLL_DIRS}")
elseif(APPLE)
add_custom_command(TARGET ${x} POST_BUILD
COMMAND ${CMAKE_COMMAND} -P
${PROJECT_SOURCE_DIR}/cmake/CopyAppleDependencies.cmake
${CMAKE_CURRENT_BINARY_DIR}/${_target_file_name} ${PPTK_LIBS_DIR})
elseif(UNIX)
find_file(helper_script CopyLinuxDependencies.cmake
PATHS ${CMAKE_MODULE_PATH} REQUIRED)
add_custom_command(TARGET ${x} POST_BUILD
COMMAND ${CMAKE_COMMAND} -P ${helper_script}
${_target_file}
${CMAKE_CURRENT_BINARY_DIR}/${_target_file_name}
${PPTK_LIBS_DIR} ${PPTK_PATCHELF})
unset(helper_script CACHE) # find_file creates a cache variable, this is temporary
endif()
endfunction()
macro(current_source_dir x)
string(CONCAT ${x} "^" ${PROJECT_SOURCE_DIR} "/?")
string(REGEX REPLACE ${${x}} "" ${x} ${CMAKE_CURRENT_SOURCE_DIR})
endmacro()
function(copy_file x)
# x should be a file path, and should not be a variable
# i.e. copy_file(${var}), not copy_file(var)
get_filename_component(filename ${x} NAME)
file(RELATIVE_PATH rel_path ${PROJECT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
if (NOT (rel_path STREQUAL ""))
string(REGEX REPLACE "(/|\\\\)" "." rel_path "${rel_path}")
string(CONCAT target_name "${rel_path}" "." "${filename}")
else()
string(CONCAT target_name "${PROJECT_NAME}" "." "${filename}")
endif()
if (ARGC EQUAL 2)
set(${ARGV1} ${target_name} PARENT_SCOPE)
endif()
if (NOT IS_ABSOLUTE ${x})
set(src ${CMAKE_CURRENT_SOURCE_DIR}/${x})
else()
set(src ${x})
endif()
set(dst ${CMAKE_CURRENT_BINARY_DIR})
add_custom_target(${target_name} ALL
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${src} ${dst}
COMMENT "Copying ${src} to ${dst}")
endfunction()
function(copy_file_with_dependencies x)
copy_file(${x} _target_name)
copy_target_dependencies(${_target_name} ${x})
endfunction()