プロジェクト

全般

プロフィール

CMakeLists.txt

katami, 2018/02/28 10:39

 
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)