Skip to content
Snippets Groups Projects
Commit eadc0fc9 authored by Daniel Stonier's avatar Daniel Stonier
Browse files

first steps.

parent 9032aad4
No related branches found
No related tags found
No related merge requests found
.project 0 → 100644
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>genjava</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.python.pydev.PyDevBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.python.pydev.pythonNature</nature>
</natures>
</projectDescription>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?eclipse-pydev version="1.0"?><pydev_project>
<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
<path>/${PROJECT_DIR_NAME}/src</path>
</pydev_pathproperty>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.7</pydev_property>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
</pydev_project>
......@@ -9,8 +9,24 @@ set(GENJAVA_BIN_DIR "${GENJAVA_DIR}/../../../@(CATKIN_PACKAGE_BIN_DESTINATION)")
set(GENMSG_JAVA_BIN ${GENJAVA_BIN_DIR}/genmsg_java.py)
set(GENSRV_JAVA_BIN ${GENJAVA_BIN_DIR}/gensrv_java.py)
# genmsg usually uses this variable to configure the install location. we typically pick
# it up from the environment configured by rosjava_build_tools.
#set(genjava_INSTALL_DIR "maven/org/ros/rosjava_messages")
set(ROS_MAVEN_DEPLOYMENT_REPOSITORY $ENV{ROS_MAVEN_DEPLOYMENT_REPOSITORY})
if(NOT ROS_MAVEN_DEPLOYMENT_REPOSITORY)
set(ROS_MAVEN_DEPLOYMENT_REPOSITORY "${CATKIN_DEVEL_PREFIX}/${CATKIN_GLOBAL_MAVEN_DESTINATION}")
endif()
# Generate .msg->.h for py
# The generated .h files should be added ALL_GEN_OUTPUT_FILES_py
#
# Example arguments:
#
# ARG_PKG : foo_msgs
# ARG_MSG : /mnt/zaphod/ros/rosjava/hydro/src/foo_msgs/msg/Foo.msg
# ARG_IFLAGS : -Ifoo_msgs:/mnt/zaphod/ros/rosjava/hydro/src/foo_msgs/msg;-Istd_msgs:/opt/ros/hydro/share/std_msgs/cmake/../msg
# ARG_MSG_DEPS : ???
# ARG_GEN_OUTPUT_DIR : /mnt/zaphod/ros/rosjava/hydro/devel/${genjava_INSTALL_DIR}/foo_msgs
macro(_generate_msg_java ARG_PKG ARG_MSG ARG_IFLAGS ARG_MSG_DEPS ARG_GEN_OUTPUT_DIR)
message(STATUS "GEN_MSG_JAVA..........._generate_msg_java")
......@@ -19,26 +35,32 @@ macro(_generate_msg_java ARG_PKG ARG_MSG ARG_IFLAGS ARG_MSG_DEPS ARG_GEN_OUTPUT_
message(STATUS " ARG_IFLAGS...........${ARG_IFLAGS}")
message(STATUS " ARG_MSG_DEPS.........${ARG_MSG_DEPS}")
message(STATUS " ARG_GEN_OUTPUT_DIR...${ARG_GEN_OUTPUT_DIR}")
message(STATUS "GEN_MSG_JAVA...........done")
message(STATUS "CMAKE_CURRENT_BINARY_DIR.......${CMAKE_CURRENT_BINARY_DIR}")
#Append msg to output dir
# set(GEN_OUTPUT_DIR "${ARG_GEN_OUTPUT_DIR}/msg")
# file(MAKE_DIRECTORY ${GEN_OUTPUT_DIR})
#set(GEN_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}")
#file(MAKE_DIRECTORY ${GEN_OUTPUT_DIR})
#Create input and output filenames
# get_filename_component(MSG_SHORT_NAME ${ARG_MSG} NAME_WE)
#
# set(MSG_GENERATED_NAME _${MSG_SHORT_NAME}.py)
# set(GEN_OUTPUT_FILE ${GEN_OUTPUT_DIR}/${MSG_GENERATED_NAME})
#
# add_custom_command(OUTPUT ${GEN_OUTPUT_FILE}
# DEPENDS ${GENMSG_PY_BIN} ${ARG_MSG} ${ARG_MSG_DEPS}
# COMMAND ${CATKIN_ENV} ${PYTHON_EXECUTABLE} ${GENMSG_PY_BIN} ${ARG_MSG}
# ${ARG_IFLAGS}
# -p ${ARG_PKG}
# -o ${GEN_OUTPUT_DIR}
# COMMENT "Generating Python from MSG ${ARG_PKG}/${MSG_SHORT_NAME}"
# )
#
# list(APPEND ALL_GEN_OUTPUT_FILES_py ${GEN_OUTPUT_FILE})
get_filename_component(MSG_SHORT_NAME ${ARG_MSG} NAME_WE)
file(REMOVE_RECURSE ${CMAKE_CURRENT_BINARY_DIR}/gradle)
#set(MSG_GENERATED_NAME ${MSG_SHORT_NAME}.java)
#set(GEN_OUTPUT_FILE ${GEN_OUTPUT_DIR}/${MSG_GENERATED_NAME})
#message(STATUS "GEN_OUTPUT_FILE..........${GEN_OUTPUT_FILE}")
#add_custom_command(OUTPUT ${GEN_OUTPUT_FILE}
# DEPENDS ${GENMSG_JAVA_BIN} ${ARG_MSG} ${ARG_MSG_DEPS}
# COMMAND ${CATKIN_ENV} cmake
# -E remove_directory ${CMAKE_CURRENT_BINARY_DIR}
# -m ${ARG_MSG}
# ${ARG_IFLAGS}
# -p ${ARG_PKG}
# -o ${GEN_OUTPUT_DIR}
# COMMENT "Generating Java code from MSG ${ARG_PKG}/${MSG_SHORT_NAME}"
#)
#list(APPEND ALL_GEN_OUTPUT_FILES_java ${GEN_OUTPUT_FILE})
endmacro()
......@@ -71,7 +93,7 @@ endmacro()
macro(_generate_module_java ARG_PKG ARG_GEN_OUTPUT_DIR ARG_GENERATED_FILES)
message(STATUS "GEN_MODULE_PY..........._generate_module_py")
message(STATUS "GEN_MODULE_JAVA..........._generate_module_java")
# generate empty __init__ to make parent folder of msg/srv a python module
if(NOT EXISTS ${ARG_GEN_OUTPUT_DIR}/__init__.py)
file(WRITE ${ARG_GEN_OUTPUT_DIR}/__init__.py "")
......
catkin_install_python(
PROGRAMS genmsg_java.py gensrv_java.py
PROGRAMS genjava.py gensrv_java.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
#!/usr/bin/env python
"""
ROS message source code generation for Java
Converts ROS .msg files in a package into Java source code implementations.
"""
import os
import sys
#import genjava.generator
import genjava.genjava_main
if __name__ == "__main__":
genjava.genjava_main.genmain(sys.argv, 'genmsg_java.py') #, genpy.generator.MsgGenerator())
# Software License Agreement (BSD License)
#
# Copyright (c) 2014, Daniel Stonier.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following
# disclaimer in the documentation and/or other materials provided
# with the distribution.
# * Neither the name of Willow Garage, Inc. nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
##############################################################################
# Imports
##############################################################################
from __future__ import print_function
import argparse
import os
#import sys
#import traceback
#import genmsg
import genmsg.command_line
#from genmsg import MsgGenerationException
#from . generate_initpy import write_modules
##############################################################################
# Methods
##############################################################################
def parse_arguments():
'''
The include path has a special format, e.g.
-Ifoo_msgs:/mnt/zaphod/ros/rosjava/hydro/src/foo_msgs/msg;-Istd_msgs:/opt/ros/hydro/share/std_msgs/cmake/../msg
'''
parser = argparse.ArgumentParser(description='Generate java code for a single ros message.')
parser.add_argument('-m', '--message', action='store', help='the message file')
parser.add_argument('-p', '--package', action='store', help='package to find the message file')
parser.add_argument('-o', '--output-dir', action='store', help='output directory for the java code (e.g. build/foo_msgs)')
parser.add_argument('-I', '--include-path', action='append', help="include paths to the package and deps msg files")
#myargs = rospy.myargv(argv=sys.argv)
#return parser.parse_args(args=myargs[1:])
return parser.parse_args()
##############################################################################
# Main
##############################################################################
def genmain(argv, progname): # , gen):
args = parse_arguments()
print("genjava %s/%s" % (args.package, args.message))
print(" output dir..........%s" % args.output_dir)
search_path = genmsg.command_line.includepath_to_dict(args.include_path)
print(" search path.......%s" % search_path)
gradle_project_dir = os.path.join(args.output_dir, 'gradle')
os.mkdir(gradle_project_dir)
# try:
# if options.initpy:
# if options.outdir:
# retcode = write_modules(options.outdir)
# else:
# parser.error("Missing args")
# else:
# if len(args) < 2:
# parser.error("please specify args")
# if not os.path.exists(options.outdir):
# # This script can be run multiple times in parallel. We
# # don't mind if the makedirs call fails because somebody
# # else snuck in and created the directory before us.
# try:
# os.makedirs(options.outdir)
# except OSError as e:
# if not os.path.exists(options.outdir):
# raise
# search_path = genmsg.command_line.includepath_to_dict(options.includepath)
# retcode = gen.generate_messages(options.package, args[1:], options.outdir, search_path)
# except genmsg.InvalidMsgSpec as e:
# print("ERROR: ", e, file=sys.stderr)
# retcode = 1
# except MsgGenerationException as e:
# print("ERROR: ", e, file=sys.stderr)
# retcode = 2
# except Exception as e:
# traceback.print_exc()
# print("ERROR: ",e)
# retcode = 3
# sys.exit(retcode or 0)
File added
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment