1
|
cmake_minimum_required(VERSION 2.8)
|
2
|
if(POLICY CMP0040)
|
3
|
cmake_policy(SET CMP0040 OLD)
|
4
|
endif()
|
5
|
if(POLICY CMP0053)
|
6
|
cmake_policy(SET CMP0053 OLD)
|
7
|
endif()
|
8
|
|
9
|
project(ModuleName)
|
10
|
string(TOLOWER ${PROJECT_NAME} PROJECT_NAME_LOWER)
|
11
|
include("${PROJECT_SOURCE_DIR}/cmake/utils.cmake")
|
12
|
set(PROJECT_VERSION 1.0.0 CACHE STRING "ModuleName version")
|
13
|
set(UPGRADE_GUID "")
|
14
|
DISSECT_VERSION()
|
15
|
set(PROJECT_SHORT_VER ${PROJECT_VERSION_MAJOR}${PROJECT_VERSION_MINOR}${PROJECT_VERSION_REVISION})
|
16
|
set(PROJECT_DESCRIPTION "ModuleDescription")
|
17
|
set(PROJECT_VENDOR "VenderName")
|
18
|
set(PROJECT_MAINTAINER "unknown")
|
19
|
set(PROJECT_TYPE "java/Category")
|
20
|
|
21
|
find_package(OpenRTM)
|
22
|
set(RTM_VER ${OPENRTM_VERSION})
|
23
|
set(RTM_SHORT_VER ${OPENRTM_VERSION_MAJOR}${OPENRTM_VERSION_MINOR}${OPENRTM_VERSION_PATCH})
|
24
|
|
25
|
function(get_dist ARG0)
|
26
|
if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
27
|
set(${ARG0} ${CMAKE_SYSTEM_NAME} PARENT_SCOPE)
|
28
|
return()
|
29
|
endif()
|
30
|
foreach(dist Debian Ubuntu RedHat Fedora CentOS Raspbian)
|
31
|
execute_process(
|
32
|
COMMAND grep ${dist} -s /etc/issue /etc/os-release /etc/redhat-release /etc/system-release
|
33
|
OUTPUT_VARIABLE dist_name
|
34
|
)
|
35
|
if(${dist_name} MATCHES ${dist})
|
36
|
set(${ARG0} ${dist} PARENT_SCOPE)
|
37
|
return()
|
38
|
endif()
|
39
|
endforeach()
|
40
|
endfunction(get_dist)
|
41
|
|
42
|
function(get_pkgmgr ARG0)
|
43
|
get_dist(DIST_NAME)
|
44
|
if(${DIST_NAME} MATCHES "Debian" OR
|
45
|
${DIST_NAME} MATCHES "Ubuntu" OR
|
46
|
${DIST_NAME} MATCHES "Raspbian")
|
47
|
set(${ARG0} "DEB" PARENT_SCOPE)
|
48
|
return()
|
49
|
endif()
|
50
|
if(${DIST_NAME} MATCHES "RedHat" OR
|
51
|
${DIST_NAME} MATCHES "Fedora" OR
|
52
|
${DIST_NAME} MATCHES "CentOS")
|
53
|
set(${ARG0} "RPM" PARENT_SCOPE)
|
54
|
return()
|
55
|
endif()
|
56
|
endfunction(get_pkgmgr)
|
57
|
|
58
|
get_dist(DIST_NAME)
|
59
|
MESSAGE(STATUS "Distribution is ${DIST_NAME}")
|
60
|
|
61
|
get_pkgmgr(PKGMGR)
|
62
|
if(PKGMGR AND NOT LINUX_PACKAGE_GENERATOR)
|
63
|
set(LINUX_PACKAGE_GENERATOR ${PKGMGR})
|
64
|
if(${PKGMGR} MATCHES "DEB")
|
65
|
execute_process(COMMAND dpkg --print-architecture
|
66
|
OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE
|
67
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
68
|
message(STATUS "Package manager is ${PKGMGR}. Arch is ${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.")
|
69
|
endif()
|
70
|
if(${PKGMGR} MATCHES "RPM")
|
71
|
execute_process(COMMAND uname "-m"
|
72
|
OUTPUT_VARIABLE CPACK_RPM_PACKAGE_ARCHITECTURE
|
73
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
74
|
message(STATUS "Package manager is ${PKGMGR}. Arch is ${CPACK_RPM_PACKAGE_ARCHITECTURE}.")
|
75
|
endif()
|
76
|
endif()
|
77
|
|
78
|
option(BUILD_DOCUMENTATION "Build the documentation" OFF)
|
79
|
|
80
|
|
81
|
file(GLOB CLASS_FILES "${CMAKE_CURRENT_SOURCE_DIR}/bin/*.class")
|
82
|
file(GLOB SUB_CLASS_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/bin/*")
|
83
|
list(REMOVE_ITEM SUB_CLASS_DIRS ${CLASS_FILES})
|
84
|
message(STATUS "subdirectories are ${SUB_CLASS_DIRS}")
|
85
|
set(EXEC_FILES ""
|
86
|
${CLASS_FILES}
|
87
|
)
|
88
|
|
89
|
if(WIN32)
|
90
|
set(SCRIPT_FILE ""
|
91
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.bat)
|
92
|
else()
|
93
|
set(SCRIPT_FILE ""
|
94
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.sh)
|
95
|
endif()
|
96
|
|
97
|
set(OTHER_SRCS CMakeLists.txt
|
98
|
RTC.xml ModuleName.conf rtc.conf)
|
99
|
|
100
|
# check java installed
|
101
|
find_package(Java)
|
102
|
|
103
|
if(WIN32)
|
104
|
set(OPENRTM_SHARE_PREFIX "OpenRTM-aist/${RTM_VER}/Components/${PROJECT_TYPE}")
|
105
|
set(INSTALL_PREFIX ${PROJECT_NAME})
|
106
|
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
107
|
set(CMAKE_INSTALL_PREFIX "${OPENRTM_DIR}/Components/${PROJECT_TYPE}/${PROJECT_NAME}" CACHE PATH "..." FORCE)
|
108
|
endif()
|
109
|
else()
|
110
|
set(OPENRTM_SHARE_PREFIX "share/openrtm-${OPENRTM_VERSION_MAJOR}.${OPENRTM_VERSION_MINOR}")
|
111
|
set(INSTALL_PREFIX "${OPENRTM_SHARE_PREFIX}/components/${PROJECT_TYPE}/${PROJECT_NAME}")
|
112
|
endif()
|
113
|
|
114
|
|
115
|
foreach(target ${EXEC_FILES})
|
116
|
add_custom_command( TARGET ${PROJECT_NAME} POST_BUILD
|
117
|
COMMAND ${CMAKE_COMMAND} -E copy
|
118
|
${PROJECT_SOURCE_DIR}/${target} ${PROJECT_BINARY_DIR}
|
119
|
)
|
120
|
endforeach()
|
121
|
|
122
|
install(FILES ${EXEC_FILES} DESTINATION "${INSTALL_PREFIX}"
|
123
|
COMPONENT component)
|
124
|
|
125
|
install(DIRECTORY ${SUB_CLASS_DIRS} DESTINATION "${INSTALL_PREFIX}"
|
126
|
FILES_MATCHING PATTERN "*.class")
|
127
|
|
128
|
|
129
|
install(PROGRAMS ${SCRIPT_FILE} DESTINATION "${INSTALL_PREFIX}"
|
130
|
COMPONENT component)
|
131
|
|
132
|
#install(FILES ${PROJECT_SOURCE_DIR}/RTC.xml DESTINATION ${INSTALL_PREFIX}
|
133
|
# COMPONENT component)
|
134
|
install(FILES ${OTHER_SRCS} DESTINATION ${INSTALL_PREFIX}
|
135
|
COMPONENT component)
|
136
|
|
137
|
|
138
|
# add uninstall target
|
139
|
configure_file(
|
140
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/uninstall_target.cmake.in"
|
141
|
"${CMAKE_CURRENT_BINARY_DIR}/uninstall_target.cmake"
|
142
|
IMMEDIATE @ONLY)
|
143
|
add_custom_target(uninstall COMMAND
|
144
|
${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
|
145
|
|
146
|
if(WIN32)
|
147
|
# start menu
|
148
|
set_property(INSTALL "${INSTALL_PREFIX}/${PROJECT_NAME}.bat"
|
149
|
PROPERTY CPACK_START_MENU_SHORTCUTS "${PROJECT_NAME}.bat")
|
150
|
endif()
|
151
|
|
152
|
# target settings for document
|
153
|
if(BUILD_DOCUMENTATION)
|
154
|
add_subdirectory(doc)
|
155
|
endif(BUILD_DOCUMENTATION)
|
156
|
|
157
|
|
158
|
set(cpack_options "${PROJECT_BINARY_DIR}/cpack_options.cmake")
|
159
|
configure_file("${PROJECT_SOURCE_DIR}/cmake/cpack_options.cmake.in"
|
160
|
${cpack_options} @ONLY)
|
161
|
|
162
|
set(CPACK_PROJECT_CONFIG_FILE ${cpack_options})
|
163
|
include(${CPACK_PROJECT_CONFIG_FILE})
|
164
|
include(CPack)
|