This repository was archived by the owner on Nov 9, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 35
/
Copy pathrosjava.cmake.em
155 lines (148 loc) · 6.68 KB
/
rosjava.cmake.em
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
##############################################################################
# Utilities
##############################################################################
set(CATKIN_GLOBAL_MAVEN_DESTINATION ${CATKIN_GLOBAL_SHARE_DESTINATION}/maven CACHE PATH "path to which maven artifacts are deployed in your workspace")
set(CATKIN_GLOBAL_GRADLE_DESTINATION ${CATKIN_GLOBAL_SHARE_DESTINATION}/gradle CACHE PATH "path to which gradle configuration and artifacts are deployed in your workspace")
# Scans down directories till it finds the gradle wrapper.
# It sets the following variables
# - ${PROJECT_NAME}_gradle_BINARY
macro(find_gradle)
find_file(${PROJECT_NAME}_gradle_BINARY gradlew
PATHS
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/..
${CMAKE_CURRENT_SOURCE_DIR}/../..
NO_DEFAULT_PATH
)
if(NOT ${PROJECT_NAME}_gradle_BINARY)
message(FATAL_ERROR "Could not find the gradle wrapper in this directory or below.")
endif()
endmacro()
# Scans down directories till it finds the gradle project settings.
# It sets the following variables
# - ${PROJECT_NAME}_gradle_ROOT
macro(find_gradle_repo_root)
find_file(${PROJECT_NAME}_gradle_SETTINGS settings.gradle
PATHS
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/..
${CMAKE_CURRENT_SOURCE_DIR}/../..
NO_DEFAULT_PATH
)
if(NOT ${PROJECT_NAME}_gradle_SETTINGS)
message(FATAL_ERROR "Could not find the settings.gradle file in this directory or below.")
endif()
get_filename_component(${PROJECT_NAME}_gradle_ROOT ${${PROJECT_NAME}_gradle_SETTINGS} PATH)
endmacro()
# These are used to seed the environment variables if the workspace is
# containing rosjava_build_tools to be built as well. In this situtation
# CATKIN_ENV won't have any configuration, so we need some incoming here.
# Note that we check for the variable existence as well so we don't
# override a user setting.
macro(catkin_rosjava_env_setup)
set(ROS_GRADLE_VERBOSE $ENV{ROS_GRADLE_VERBOSE})
set(ROS_MAVEN_DEPLOYMENT_REPOSITORY $ENV{ROS_MAVEN_DEPLOYMENT_REPOSITORY})
set(ROS_MAVEN_REPOSITORY $ENV{ROS_MAVEN_REPOSITORY})
if(NOT ROS_MAVEN_DEPLOYMENT_REPOSITORY)
set(ROSJAVA_ENV "ROS_MAVEN_DEPLOYMENT_REPOSITORY=${CATKIN_DEVEL_PREFIX}/${CATKIN_GLOBAL_MAVEN_DESTINATION}")
else()
set(ROSJAVA_ENV "ROS_MAVEN_DEPLOYMENT_REPOSITORY=${ROS_MAVEN_DEPLOYMENT_REPOSITORY}")
endif()
if(NOT ROS_MAVEN_REPOSITORY)
list(APPEND ROSJAVA_ENV "ROS_MAVEN_REPOSITORY=https://github.com/rosjava/rosjava_mvn_repo/raw/master")
else()
set(ROSJAVA_ENV "ROS_MAVEN_REPOSITORY=${ROS_MAVEN_REPOSITORY}")
endif()
# The build farm won't let you access /root/.gradle, so redirect it somewhere practical here.
if(DEFINED CATKIN_BUILD_BINARY_PACKAGE)
list(APPEND ROSJAVA_ENV "GRADLE_USER_HOME=${CATKIN_DEVEL_PREFIX}/${CATKIN_GLOBAL_GRADLE_DESTINATION}")
endif()
endmacro()
##############################################################################
# RosJava Package
##############################################################################
# Calls the gradle wrapper to compile just the package
# that it is called in with install and installDist targets.
macro(catkin_rosjava_setup)
catkin_rosjava_env_setup()
find_gradle()
if( ${ARGC} EQUAL 0 )
return() # Nothing to do (typically no subprojects created yet)
else()
set(gradle_tasks ${ARGV})
endif()
if(ROS_GRADLE_VERBOSE)
set(gradle_options "")
else()
set(gradle_options "-q")
endif()
###################################
# Execution
###################################
add_custom_target(gradle-${PROJECT_NAME} ALL
#COMMAND ${ROSJAVA_ENV} ${CATKIN_ENV} "env" "|" "grep" "ROS"
COMMAND ${ROSJAVA_ENV} ${CATKIN_ENV} ${${PROJECT_NAME}_gradle_BINARY} ${gradle_options} --project-dir ${CMAKE_CURRENT_SOURCE_DIR} --project-cache-dir ${PROJECT_BINARY_DIR}/.gradle -PbuildDir=${PROJECT_BINARY_DIR} ${gradle_tasks}
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
VERBATIM
COMMENT "Gradling tasks for ${PROJECT_NAME}"
)
###################################
# Target Management
###################################
catkin_package_xml()
foreach(depends ${${PROJECT_NAME}_BUILD_DEPENDS})
if(TARGET gradle-${depends})
#message(STATUS "Adding dependency.....gradle-${PROJECT_NAME} <- gradle-${depends}")
add_dependencies(gradle-${PROJECT_NAME} gradle-${depends})
endif()
if(TARGET ${depends}_generate_messages)
#message(STATUS "Adding dependency.....gradle-${PROJECT_NAME} <- ${depends}_generate_messages")
add_dependencies(gradle-${PROJECT_NAME} ${depends}_generate_messages)
endif()
endforeach()
if(NOT TARGET gradle-clean)
add_custom_target(gradle-clean)
endif()
add_custom_target(gradle-clean-${PROJECT_NAME}
COMMAND ${CATKIN_ENV} ${${PROJECT_NAME}_gradle_BINARY} clean
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
COMMENT "Cleaning gradle project for ${PROJECT_NAME}"
)
add_dependencies(gradle-clean gradle-clean-${PROJECT_NAME})
endmacro()
##############################################################################
# Android Package
##############################################################################
# Calls the gradle wrapper to compile the android package.
# It checks the build type and determines whether it should run
# assembleDebug or assembleRelease
macro(catkin_android_setup)
catkin_rosjava_env_setup()
find_gradle()
if( ${ARGC} EQUAL 0 )
return() # Nothing to do (typically no subprojects created yet)
else()
set(gradle_tasks ${ARGV})
endif()
add_custom_target(gradle-${PROJECT_NAME}
ALL
COMMAND ${ROSJAVA_ENV} ${CATKIN_ENV} ${${PROJECT_NAME}_gradle_BINARY} --project-dir ${CMAKE_CURRENT_SOURCE_DIR} --project-cache-dir ${PROJECT_BINARY_DIR}/.gradle -PbuildDir=${PROJECT_BINARY_DIR} ${gradle_tasks}
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
VERBATIM
)
catkin_package_xml()
foreach(depends in ${${PROJECT_NAME}_BUILD_DEPENDS})
if(TARGET gradle-${depends})
#message(STATUS "Adding dependency gradle-${depends}")
add_dependencies(gradle-${PROJECT_NAME} gradle-${depends})
endif()
endforeach()
if(NOT TARGET gradle-clean)
add_custom_target(gradle-clean)
endif()
add_custom_target(gradle-clean-${PROJECT_NAME}
COMMAND ${CATKIN_ENV} ${${PROJECT_NAME}_gradle_BINARY} clean
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
)
add_dependencies(gradle-clean gradle-clean-${PROJECT_NAME})
endmacro()