From eadc0fc949a4e30fc36f54d2751a12b87ce07601 Mon Sep 17 00:00:00 2001 From: Daniel Stonier <d.stonier@gmail.com> Date: Mon, 23 Jun 2014 20:40:43 +0900 Subject: [PATCH] first steps. --- .project | 17 ++++++ .pydevproject | 8 +++ cmake/genjava-extras.cmake.em | 58 ++++++++++++------ scripts/CMakeLists.txt | 2 +- scripts/genjava.py | 16 +++++ scripts/genmsg_java.py | 0 src/genjava/genjava_main.py | 110 ++++++++++++++++++++++++++++++++++ src/genjava/genjava_main.pyc | Bin 0 -> 1708 bytes 8 files changed, 192 insertions(+), 19 deletions(-) create mode 100644 .project create mode 100644 .pydevproject create mode 100755 scripts/genjava.py delete mode 100755 scripts/genmsg_java.py create mode 100644 src/genjava/genjava_main.py create mode 100644 src/genjava/genjava_main.pyc diff --git a/.project b/.project new file mode 100644 index 0000000..e88e447 --- /dev/null +++ b/.project @@ -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> diff --git a/.pydevproject b/.pydevproject new file mode 100644 index 0000000..0ebadbb --- /dev/null +++ b/.pydevproject @@ -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> diff --git a/cmake/genjava-extras.cmake.em b/cmake/genjava-extras.cmake.em index 74e1020..8bcc5a7 100644 --- a/cmake/genjava-extras.cmake.em +++ b/cmake/genjava-extras.cmake.em @@ -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 "") diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index 762da42..044a96f 100644 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -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}) diff --git a/scripts/genjava.py b/scripts/genjava.py new file mode 100755 index 0000000..769db0b --- /dev/null +++ b/scripts/genjava.py @@ -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()) + diff --git a/scripts/genmsg_java.py b/scripts/genmsg_java.py deleted file mode 100755 index e69de29..0000000 diff --git a/src/genjava/genjava_main.py b/src/genjava/genjava_main.py new file mode 100644 index 0000000..e75a67c --- /dev/null +++ b/src/genjava/genjava_main.py @@ -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) diff --git a/src/genjava/genjava_main.pyc b/src/genjava/genjava_main.pyc new file mode 100644 index 0000000000000000000000000000000000000000..149ebb8c4b88e6f5a172ae7269e8c91f6ee6e832 GIT binary patch literal 1708 zcmZSn%*&;}X>M>b0~9bZFfceUFftU|F)%QsFfgPrGUPBY<T5fuF)}cM_)H8rObk&> zU^ym+9A<_n7KRjNh86~fC{~6P7BGX2A%%${Sc8>;fg$t%|Ns9r7#SECO86KU7z&Cq z^Gf2=O7oISGV}BNz}A8!*%=rZoI%$1fK)OtWHEwlPGMqbW?-ykV5nhW$YKInlfuG~ z!pe}s#*o6!kix;x%*4b9mE&Yc;X;z*Mwa7YNa012<3pC?XGjqM%L#(b6oSh!Gc+?W z1ZxO0FfbHvU|?Y2QUHUHj8uipyyTqHlvIU+#F7k!jKpGvM1|sl)a1;>9EG&}qTIw1 z9fefAbUmmJ1qB6N&$Rsf_}t?3Vk`aJyb}GY#Da|c6#b(7Vi3+sEKAhSs7xu!*Do$g z)`uz8&n-^3*7YndNrCFjFDL;ihbhfSEK1df$?7NPCT6GV>*;}Xfh{iK2E|}%adJ^+ z0VuGGbr={J+*9*XixNvx6+m_>B<H83f?N!8e`a2KPO3stez8JsYH@L5da7PAC@tvb z7IQK%FzD(+MN8Ni7#I@4u~!0$-{O+|qSO)=1_p+V)SQB10Z{a1q{7TlNXyJgg_u(S zHK!mkIXf{uwO9d^8X#<il6-}<%)AtZ60AD&i+R8<$S*A^C@s-V$t)^XVqjo^a1~NA zi&B$I@{20L9s!vE_Zq}v&tg!*)76DWnl32PAigLlNX<(r)(53hqzEkrIR|78)TIiE zc_|7hsRhLfxy9)a4{3n>TfzYfiK6s^#G>L<aN>3>N-xb#%_|82i4>K9T%DMb5}yba zF5v=uxu`f5BvcH^6rkV)n^2?y%7I{_*p-2Sfp9uWPt5~)6`W>ZY$zR{o0yrWS5R5P zk8CB_am8k!1PyW<1FI0D3<NSKgW?+GD-Z@}#Ar}VGJx_xEfYftI6KxbfpQ^;WM)WX zVi0R)WMBlzFfo9{SfB!|3|VXpS?pjj4u)n%hFWH@erARmW{8p$P`(0L<X6ngz`y`? zvw~`|zG`u?1Oo$uf&wCP_259YxL6D<S)7_!l$-(1eNai&VhvC#4FV;3aIyrKGbNx> z1saQBHY^Q;A_8JVd`e~!I5DKB=H(WrgX1hYKQ}iqFC{)FGcUCSl>MP82b6H)OY-AW zGLuWd3ZdfhAPGp40C_60D7_4vHVTUJ)AJH@A-N;5D7_e*BO#85=%Gc7gZvEgOk!r9 zCn%;teq~_fWRzkQWE5r807-)rVtjmBX-R2OYJ7YU$QePPgb4O6NON(z9&#uIfwDC? oaDzb615Ts}f{Mu%l%;HP^HWN5Qtebht_KMSF!HeRaB&I)0Qt?Z_W%F@ literal 0 HcmV?d00001 -- GitLab