Skip to content
This repository was archived by the owner on Jan 14, 2023. It is now read-only.

Commit 3444f5d

Browse files
committed
another step forward.
1 parent eadc0fc commit 3444f5d

File tree

16 files changed

+543
-128
lines changed

16 files changed

+543
-128
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*.pyc

CMakeLists.txt

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,30 +6,37 @@ cmake_minimum_required(VERSION 2.8.3)
66
project(genjava)
77

88
##############################################################################
9-
# Dependencies
9+
# Find Package
1010
##############################################################################
1111

1212
find_package(catkin REQUIRED COMPONENTS genmsg)
1313

1414
##############################################################################
15-
# Package
15+
# Catkin
1616
##############################################################################
1717

1818
catkin_package(
1919
CATKIN_DEPENDS genmsg
2020
CFG_EXTRAS genjava-extras.cmake
2121
)
2222

23+
catkin_python_setup()
24+
25+
##############################################################################
26+
# Installs
27+
##############################################################################
28+
2329
add_subdirectory(scripts)
2430

25-
message(STATUS "GENMSG_LANGS_DESTINATION...........${GENMSG_LANGS_DESTINATION}")
2631
file(WRITE ${CATKIN_DEVEL_PREFIX}/${GENMSG_LANGS_DESTINATION}/genjava "Java")
2732
install(FILES ${CATKIN_DEVEL_PREFIX}/${GENMSG_LANGS_DESTINATION}/genjava
2833
DESTINATION ${GENMSG_LANGS_DESTINATION})
2934

30-
catkin_python_setup()
35+
##############################################################################
36+
# Tests
37+
##############################################################################
3138

32-
if(CATKIN_ENABLE_TESTING)
33-
catkin_add_nosetests(test)
34-
endif()
39+
#if(CATKIN_ENABLE_TESTING)
40+
# catkin_add_nosetests(test)
41+
#endif()
3542

cmake/genjava-extras.cmake.em

Lines changed: 76 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -6,118 +6,91 @@ set(GENJAVA_BIN_DIR "@(CMAKE_CURRENT_SOURCE_DIR)/scripts")
66
set(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
3012
macro(_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}")
6529
endmacro()
6630

67-
#todo, these macros are practically equal. Check for input file extension instead
6831
macro(_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})
9233
endmacro()
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.
9442
macro(_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()
11995
endmacro()
12096

121-
if(NOT EXISTS @(PROJECT_NAME)_SOURCE_DIR)
122-
set(GENJAVA_INSTALL_DIR ${PYTHON_INSTALL_DIR})
123-
endif()

package.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,14 @@
1818
<buildtool_depend version_gte="0.5.78">catkin</buildtool_depend>
1919

2020
<build_depend>genmsg</build_depend>
21+
<build_depend>python-catkin-pkg</build_depend>
22+
<build_depend>python-rospkg</build_depend>
23+
<build_depend>rosjava_bootstrap</build_depend>
2124

2225
<run_depend>genmsg</run_depend>
26+
<run_depend>python-catkin-pkg</run_depend>
27+
<run_depend>python-rospkg</run_depend>
28+
<run_depend>rosjava_bootstrap</run_depend>
2329

2430
<export>
2531
<message_generator>java</message_generator>

scripts/CMakeLists.txt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
##############################################################################
2+
# Installs
3+
##############################################################################
4+
15
catkin_install_python(
2-
PROGRAMS genjava.py gensrv_java.py
3-
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
6+
PROGRAMS genjava_gradle_project.py
7+
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
8+
)
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@
88
import os
99
import sys
1010

11-
#import genjava.generator
12-
import genjava.genjava_main
11+
import genjava
1312

1413
if __name__ == "__main__":
15-
genjava.genjava_main.genmain(sys.argv, 'genmsg_java.py') #, genpy.generator.MsgGenerator())
14+
genjava.main(sys.argv)
1615

scripts/gensrv_java.py

Whitespace-only changes.

src/genjava/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,5 @@
3535

3636
#__all__ = ['Time', 'Duration', 'TVal',
3737
# 'Message', 'SerializationError', 'DeserializationError', 'MessageException', 'struct_I']
38+
39+
from .genjava_main import main

src/genjava/genjava_main.py

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,46 +36,49 @@
3636

3737
from __future__ import print_function
3838
import argparse
39-
import os
39+
#import os
4040
#import sys
4141
#import traceback
4242
#import genmsg
43-
import genmsg.command_line
43+
#import genmsg.command_line
4444

4545
#from genmsg import MsgGenerationException
4646
#from . generate_initpy import write_modules
47+
from . import gradle_project
4748

4849
##############################################################################
4950
# Methods
5051
##############################################################################
5152

5253

53-
def parse_arguments():
54+
def parse_arguments(argv):
5455
'''
5556
The include path has a special format, e.g.
5657
-Ifoo_msgs:/mnt/zaphod/ros/rosjava/hydro/src/foo_msgs/msg;-Istd_msgs:/opt/ros/hydro/share/std_msgs/cmake/../msg
5758
'''
5859
parser = argparse.ArgumentParser(description='Generate java code for a single ros message.')
59-
parser.add_argument('-m', '--message', action='store', help='the message file')
60+
#parser.add_argument('-m', '--message', action='store', help='the message file')
6061
parser.add_argument('-p', '--package', action='store', help='package to find the message file')
6162
parser.add_argument('-o', '--output-dir', action='store', help='output directory for the java code (e.g. build/foo_msgs)')
62-
parser.add_argument('-I', '--include-path', action='append', help="include paths to the package and deps msg files")
63+
#parser.add_argument('-I', '--include-path', action='append', help="include paths to the package and deps msg files")
6364
#myargs = rospy.myargv(argv=sys.argv)
6465
#return parser.parse_args(args=myargs[1:])
65-
return parser.parse_args()
66+
return parser.parse_args(argv)
6667

6768
##############################################################################
6869
# Main
6970
##############################################################################
7071

71-
def genmain(argv, progname): # , gen):
72-
args = parse_arguments()
73-
print("genjava %s/%s" % (args.package, args.message))
72+
73+
def main(argv):
74+
args = parse_arguments(argv[1:])
75+
#print("genjava %s/%s" % (args.package, args.message))
7476
print(" output dir..........%s" % args.output_dir)
75-
search_path = genmsg.command_line.includepath_to_dict(args.include_path)
76-
print(" search path.......%s" % search_path)
77-
gradle_project_dir = os.path.join(args.output_dir, 'gradle')
78-
os.mkdir(gradle_project_dir)
77+
gradle_project.create(args.package, args.output_dir)
78+
#search_path = genmsg.command_line.includepath_to_dict(args.include_path)
79+
#print(" search path.......%s" % search_path)
80+
#gradle_project_dir = os.path.join(args.output_dir, 'gradle')
81+
#os.mkdir(gradle_project_dir)
7982

8083
# try:
8184
# if options.initpy:

src/genjava/genjava_main.pyc

-350 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)