-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
63 lines (59 loc) · 3.36 KB
/
CMakeLists.txt
File metadata and controls
63 lines (59 loc) · 3.36 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
project(mpMapInteractive2)
cmake_minimum_required(VERSION 3.0)
option(USE_CUSTOM_RCPP "Use custom Rcpp package" ON)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
find_package(R REQUIRED)
if(USE_CUSTOM_RCPP)
find_package(Rcpp REQUIRED)
endif()
set(RFiles onLoad.R mpMapInteractive2.R Rcpp_exceptions.R)
set(manFiles mpMapInteractive2.Rd)
#This is the target that copies the NAMESPACE, DESCRIPTION and R files to the binary directory
add_custom_target(copyPackage ALL)
#If we're on visual studio and not using NMake makefiles, assume that we're building a visual studio project, which has multiple configuration subfolders
if(WIN32 AND (NOT USE_CUSTOM_RCPP))
message(FATAL On windows you must specify USE_CUSTOM_RCPP)
endif()
if(WIN32 AND (NOT "${CMAKE_GENERATOR}" STREQUAL "NMake Makefiles"))
foreach(BUILD_TYPE IN LISTS CMAKE_CONFIGURATION_TYPES)
#If we're using a custom Rcpp, copy one DESCRIPTION file
add_custom_command(TARGET copyPackage COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/DESCRIPTIONCustomRcpp ${CMAKE_BINARY_DIR}/${BUILD_TYPE}/DESCRIPTION)
#Copy NAMESPACE
add_custom_command(TARGET copyPackage COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/NAMESPACE ${CMAKE_BINARY_DIR}/${BUILD_TYPE}/NAMESPACE)
#Copy R files
foreach(RFile IN LISTS RFiles)
add_custom_command(TARGET copyPackage COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/R/${RFile} ${CMAKE_BINARY_DIR}/${BUILD_TYPE}/R/${RFile})
endforeach()
foreach(manFile IN LISTS manFiles)
add_custom_command(TARGET copyPackage COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/man/${manFile} ${CMAKE_BINARY_DIR}/${BUILD_TYPE}/man/${manFile})
endforeach()
endforeach()
#In this case we assume that we're building a single configuration
else()
#If we're using a custom Rcpp, copy one DESCRIPTION file
if(USE_CUSTOM_RCPP)
add_custom_command(TARGET copyPackage COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/DESCRIPTIONCustomRcpp ${CMAKE_BINARY_DIR}/DESCRIPTION)
#otherwise use the other
else()
add_custom_command(TARGET copyPackage COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/DESCRIPTION ${CMAKE_BINARY_DIR}/DESCRIPTION)
endif()
#Copy NAMESPACE
add_custom_command(TARGET copyPackage COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/NAMESPACE ${CMAKE_BINARY_DIR}/NAMESPACE)
#Copy R files
foreach(RFile IN LISTS RFiles)
add_custom_command(TARGET copyPackage COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/R/${RFile} ${CMAKE_BINARY_DIR}/R/${RFile})
endforeach()
foreach(manFile IN LISTS manFiles)
add_custom_command(TARGET copyPackage COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/man/${manFiles} ${CMAKE_BINARY_DIR}/man/${manFiles})
endforeach()
endif()
add_subdirectory(src)
if(WIN32)
if("${CMAKE_GENERATOR}" STREQUAL "NMake Makefiles")
install(CODE "execute_process(COMMAND \"${R_COMMAND}\" CMD INSTALL --no-multiarch . WORKING_DIRECTORY \"${PROJECT_BINARY_DIR}\")")
else()
install(CODE "execute_process(COMMAND \"${R_COMMAND}\" CMD INSTALL --no-multiarch \${CMAKE_INSTALL_CONFIG_NAME} WORKING_DIRECTORY \"${PROJECT_BINARY_DIR}\")")
endif()
else()
install(CODE "execute_process(COMMAND \"${R_COMMAND}\" CMD INSTALL . WORKING_DIRECTORY \"${PROJECT_BINARY_DIR}\")")
endif()