@@ -6,118 +6,91 @@ set(GENJAVA_BIN_DIR "@(CMAKE_CURRENT_SOURCE_DIR)/scripts")
66set (GENJAVA_BIN_DIR " ${GENJAVA_DIR}/../../../@(CATKIN_PACKAGE_BIN_DESTINATION)" )
77@ [end if ]@
88
9- set (GENMSG_JAVA_BIN ${GENJAVA_BIN_DIR}/ genmsg_java .py )
10- set (GENSRV_JAVA_BIN ${GENJAVA_BIN_DIR} / gensrv_java . py )
9+ set (GENJAVA_BIN ${GENJAVA_BIN_DIR}/ genjava_gradle_project .py )
10+ set (genjava_INSTALL_DIR " maven/org/ros/rosjava_messages " )
1111
12- # genmsg usually uses this variable to configure the install location. we typically pick
13- # it up from the environment configured by rosjava_build_tools.
14- # set(genjava_INSTALL_DIR "maven/org/ros/rosjava_messages")
15- set (ROS_MAVEN_DEPLOYMENT_REPOSITORY $ENV{ROS_MAVEN_DEPLOYMENT_REPOSITORY})
16- if (NOT ROS_MAVEN_DEPLOYMENT_REPOSITORY)
17- set (ROS_MAVEN_DEPLOYMENT_REPOSITORY " ${CATKIN_DEVEL_PREFIX}/${CATKIN_GLOBAL_MAVEN_DESTINATION}" )
18- endif ()
19-
20- # Generate .msg->.h for py
21- # The generated .h files should be added ALL_GEN_OUTPUT_FILES_py
22- #
23- # Example arguments:
24- #
25- # ARG_PKG : foo_msgs
26- # ARG_MSG : /mnt/zaphod/ros/rosjava/hydro/src/foo_msgs/msg/Foo.msg
27- # ARG_IFLAGS : -Ifoo_msgs:/mnt/zaphod/ros/rosjava/hydro/src/foo_msgs/msg;-Istd_msgs:/opt/ros/hydro/share/std_msgs/cmake/../msg
28- # ARG_MSG_DEPS : ???
29- # ARG_GEN_OUTPUT_DIR : /mnt/zaphod/ros/rosjava/hydro/devel/${genjava_INSTALL_DIR}/foo_msgs
3012macro (_generate_msg_java ARG_PKG ARG_MSG ARG_IFLAGS ARG_MSG_DEPS ARG_GEN_OUTPUT_DIR)
31-
32- message (STATUS " GEN_MSG_JAVA..........._generate_msg_java" )
33- message (STATUS " ARG_PKG..............${ARG_PKG}" )
34- message (STATUS " ARG_MSG..............${ARG_MSG}" )
35- message (STATUS " ARG_IFLAGS...........${ARG_IFLAGS}" )
36- message (STATUS " ARG_MSG_DEPS.........${ARG_MSG_DEPS}" )
37- message (STATUS " ARG_GEN_OUTPUT_DIR...${ARG_GEN_OUTPUT_DIR}" )
38- message (STATUS " GEN_MSG_JAVA...........done" )
39- message (STATUS " CMAKE_CURRENT_BINARY_DIR.......${CMAKE_CURRENT_BINARY_DIR}" )
40-
41- # Append msg to output dir
42- # set(GEN_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}")
43- # file(MAKE_DIRECTORY ${GEN_OUTPUT_DIR})
44- # Create input and output filenames
45- get_filename_component (MSG_SHORT_NAME ${ARG_MSG} NAME_WE)
46-
47- file (REMOVE_RECURSE ${CMAKE_CURRENT_BINARY_DIR}/ gradle)
48-
49- # set(MSG_GENERATED_NAME ${MSG_SHORT_NAME}.java)
50- # set(GEN_OUTPUT_FILE ${GEN_OUTPUT_DIR}/${MSG_GENERATED_NAME})
51- # message(STATUS "GEN_OUTPUT_FILE..........${GEN_OUTPUT_FILE}")
52- # add_custom_command(OUTPUT ${GEN_OUTPUT_FILE}
53- # DEPENDS ${GENMSG_JAVA_BIN} ${ARG_MSG} ${ARG_MSG_DEPS}
54- # COMMAND ${CATKIN_ENV} cmake
55- # -E remove_directory ${CMAKE_CURRENT_BINARY_DIR}
56- # -m ${ARG_MSG}
57- # ${ARG_IFLAGS}
58- # -p ${ARG_PKG}
59- # -o ${GEN_OUTPUT_DIR}
60- # COMMENT "Generating Java code from MSG ${ARG_PKG}/${MSG_SHORT_NAME}"
61- # )
62-
63- # list(APPEND ALL_GEN_OUTPUT_FILES_java ${GEN_OUTPUT_FILE})
64-
13+ list (APPEND ALL_GEN_OUTPUT_FILES_java ${ARG_MSG} ${ARG_MSG_DEPS})
14+
15+ # Example arguments:
16+ #
17+ # ARG_PKG : foo_msgs
18+ # ARG_MSG : /mnt/zaphod/ros/rosjava/hydro/src/foo_msgs/msg/Foo.msg
19+ # ARG_IFLAGS : -Ifoo_msgs:/mnt/zaphod/ros/rosjava/hydro/src/foo_msgs/msg;-Istd_msgs:/opt/ros/hydro/share/std_msgs/cmake/../msg
20+ # ARG_MSG_DEPS : ???
21+ # ARG_GEN_OUTPUT_DIR : /mnt/zaphod/ros/rosjava/hydro/devel/${genjava_INSTALL_DIR}/foo_msgs
22+
23+ # message(STATUS "Java generator for [${ARG_PKG}][${ARG_MSG}]")
24+ # message(STATUS " ARG_IFLAGS...........${ARG_IFLAGS}")
25+ # message(STATUS " ARG_MSG_DEPS.........${ARG_MSG_DEPS}")
26+ # message(STATUS " ARG_GEN_OUTPUT_DIR...${ARG_GEN_OUTPUT_DIR}")
27+ # message(STATUS "GEN_MSG_JAVA...........done")
28+ # message(STATUS "CMAKE_CURRENT_BINARY_DIR.......${CMAKE_CURRENT_BINARY_DIR}")
6529endmacro ()
6630
67- # todo, these macros are practically equal. Check for input file extension instead
6831macro (_generate_srv_java ARG_PKG ARG_SRV ARG_IFLAGS ARG_MSG_DEPS ARG_GEN_OUTPUT_DIR)
69-
70- message (STATUS " GEN_SRV_JAVA..........._generate_srv_java" )
71- # Append msg to output dir
72- # set(GEN_OUTPUT_DIR "${ARG_GEN_OUTPUT_DIR}/srv")
73- # file(MAKE_DIRECTORY ${GEN_OUTPUT_DIR})
74- #
75- # Create input and output filenames
76- # get_filename_component(SRV_SHORT_NAME ${ARG_SRV} NAME_WE)
77- #
78- # set(SRV_GENERATED_NAME _${SRV_SHORT_NAME}.py)
79- # set(GEN_OUTPUT_FILE ${GEN_OUTPUT_DIR}/${SRV_GENERATED_NAME})
80- #
81- # add_custom_command(OUTPUT ${GEN_OUTPUT_FILE}
82- # DEPENDS ${GENSRV_PY_BIN} ${ARG_SRV} ${ARG_MSG_DEPS}
83- # COMMAND ${CATKIN_ENV} ${PYTHON_EXECUTABLE} ${GENSRV_PY_BIN} ${ARG_SRV}
84- # ${ARG_IFLAGS}
85- # -p ${ARG_PKG}
86- # -o ${GEN_OUTPUT_DIR}
87- # COMMENT "Generating Python code from SRV ${ARG_PKG}/${SRV_SHORT_NAME}"
88- # )
89- #
90- # list(APPEND ALL_GEN_OUTPUT_FILES_py ${GEN_OUTPUT_FILE})
91-
32+ list (APPEND ALL_GEN_OUTPUT_FILES_java ${ARG_SRV} ${ARG_MSG_DEPS})
9233endmacro ()
9334
35+ # This is a bit different to the other generators - it generates the whole message package together
36+ # (unless there's another api I'm not aware of yet in the generator jar). It's a few milliseconds
37+ # of overkill generating all .java files if only one msg changed, but it's not worth the effort to
38+ # break that down yet.
39+ #
40+ # To facilitate this, the ARG_GENERATED_FILES is actually just the underlying ARG_MSG and ARG_SRV
41+ # files which we feed the commands as DEPENDS to trigger their execution.
9442macro (_generate_module_java ARG_PKG ARG_GEN_OUTPUT_DIR ARG_GENERATED_FILES)
9543
96- message (STATUS " GEN_MODULE_JAVA..........._generate_module_java" )
97- # generate empty __init__ to make parent folder of msg/srv a python module
98- if (NOT EXISTS ${ARG_GEN_OUTPUT_DIR}/ __init__ .py )
99- file (WRITE ${ARG_GEN_OUTPUT_DIR}/ __init__ .py " " )
100- endif ()
101-
102- # Append msg to output dir
103- foreach (type " msg" " srv" )
104- set (GEN_OUTPUT_DIR " ${ARG_GEN_OUTPUT_DIR}/${type}" )
105- set (GEN_OUTPUT_FILE ${GEN_OUTPUT_DIR}/ __init__ .py )
106-
107- if (IS_DIRECTORY ${GEN_OUTPUT_DIR})
108- add_custom_command (OUTPUT ${GEN_OUTPUT_FILE}
109- DEPENDS ${GENMSG_PY_BIN} ${ARG_GENERATED_FILES}
110- COMMAND ${CATKIN_ENV} ${PYTHON_EXECUTABLE} ${GENMSG_PY_BIN}
111- - o ${GEN_OUTPUT_DIR}
112- -- initpy
113- COMMENT " Generating Python ${type} __init__.py for ${ARG_PKG}" )
114- list (APPEND ALL_GEN_OUTPUT_FILES_py ${GEN_OUTPUT_FILE})
44+ # ###############################
45+ # Gradle Subproject
46+ # ###############################
47+ set (GRADLE_BUILD_DIR " ${CMAKE_CURRENT_BINARY_DIR}/java" )
48+ set (GRADLE_BUILD_FILE " ${GRADLE_BUILD_DIR}/${ARG_PKG}/build.gradle" )
49+ list (APPEND ALL_GEN_OUTPUT_FILES_java ${GRADLE_BUILD_FILE})
50+
51+ add_custom_command (OUTPUT ${GRADLE_BUILD_FILE}
52+ DEPENDS ${GENJAVA_BIN}
53+ COMMAND ${CATKIN_ENV} ${PYTHON_EXECUTABLE} ${GENJAVA_BIN}
54+ - o ${GRADLE_BUILD_DIR}
55+ - p ${ARG_PKG}
56+ COMMENT " Generating Java gradle project from ${ARG_PKG}"
57+ )
58+
59+ # ###############################
60+ # Compile Gradle Subproject
61+ # ###############################
62+ set (ROS_GRADLE_VERBOSE $ENV{ROS_GRADLE_VERBOSE})
63+ if (ROS_GRADLE_VERBOSE)
64+ set (GRADLE_CMD " ./gradlew" )
65+ else ()
66+ set (GRADLE_CMD " ./gradlew;-q" )
11567 endif ()
116-
117- endforeach ()
118-
68+ set (GEN_OUTPUT_FILE ${CMAKE_CURRENT_BINARY_DIR}/ generated_java_messages .flag )
69+
70+ add_custom_command (OUTPUT ${GEN_OUTPUT_FILE}
71+ DEPENDS ${GRADLE_BUILD_FILE} ${ARG_GENERATED_FILES}
72+ COMMAND ${CATKIN_ENV} ${GRADLE_CMD}
73+ COMMAND touch ${GEN_OUTPUT_FILE}
74+ WORKING_DIRECTORY ${GRADLE_BUILD_DIR}/ ${ARG_PKG}
75+ COMMENT " Generating Java code for ${ARG_PKG}" )
76+ list (APPEND ALL_GEN_OUTPUT_FILES_java ${GEN_OUTPUT_FILE})
77+
78+ # ###############################
79+ # Debugging
80+ # ###############################
81+ # foreach(gen_output_file ${ALL_GEN_OUTPUT_FILES_java})
82+ # message(STATUS "ALL_GEN_OUTPUT_FILES_java..........${gen_output_file}")
83+ # endforeach()
84+
85+ # ###############################
86+ # Dependent Targets
87+ # ###############################
88+ # Make sure we have built gradle-rosjava_bootstrap if it is in the source workspace
89+ # (otherwise package.xml will make sure it has installed via rosdep/deb.
90+ # if(TARGET gradle-rosjava_bootstrap)
91+ # Preference would be to add it to ${ARG_PKG}_generate_messages_java but that
92+ # is not defined till after this module is parsed, so add it all
93+ # add_dependencies(${ARG_PKG}_generate_messages gradle-rosjava_bootstrap)
94+ # endif()
11995endmacro ()
12096
121- if (NOT EXISTS @ (PROJECT_NAME)_SOURCE_DIR)
122- set (GENJAVA_INSTALL_DIR ${PYTHON_INSTALL_DIR})
123- endif ()
0 commit comments