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