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

Commit

Permalink
first steps.
Browse files Browse the repository at this point in the history
  • Loading branch information
stonier committed Jun 23, 2014
1 parent 9032aad commit eadc0fc
Show file tree
Hide file tree
Showing 8 changed files with 192 additions and 19 deletions.
17 changes: 17 additions & 0 deletions .project
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?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>
8 changes: 8 additions & 0 deletions .pydevproject
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?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>
58 changes: 40 additions & 18 deletions cmake/genjava-extras.cmake.em
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand All @@ -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()

Expand Down Expand Up @@ -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 "")
Expand Down
2 changes: 1 addition & 1 deletion scripts/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
catkin_install_python(
PROGRAMS genmsg_java.py gensrv_java.py
PROGRAMS genjava.py gensrv_java.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
16 changes: 16 additions & 0 deletions scripts/genjava.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#!/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())

Empty file removed scripts/genmsg_java.py
Empty file.
110 changes: 110 additions & 0 deletions src/genjava/genjava_main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# 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)
Binary file added src/genjava/genjava_main.pyc
Binary file not shown.

0 comments on commit eadc0fc

Please sign in to comment.