From 3444f5db82d18597c0398c120bc279d37d27aa49 Mon Sep 17 00:00:00 2001 From: Daniel Stonier <d.stonier@gmail.com> Date: Tue, 24 Jun 2014 01:19:11 +0900 Subject: [PATCH] another step forward. --- .gitignore | 1 + CMakeLists.txt | 21 +- cmake/genjava-extras.cmake.em | 179 ++++++++---------- package.xml | 6 + scripts/CMakeLists.txt | 9 +- .../{genjava.py => genjava_gradle_project.py} | 5 +- scripts/gensrv_java.py | 0 src/genjava/__init__.py | 2 + src/genjava/genjava_main.py | 29 +-- src/genjava/genjava_main.pyc | Bin 1708 -> 1358 bytes src/genjava/gradle/Readme.md | 3 + .../gradle/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 51106 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + src/genjava/gradle/gradlew | 164 ++++++++++++++++ src/genjava/gradle_project.py | 161 ++++++++++++++++ .../templates/genjava_project/build.gradle.in | 85 +++++++++ 16 files changed, 543 insertions(+), 128 deletions(-) create mode 100644 .gitignore rename scripts/{genjava.py => genjava_gradle_project.py} (57%) delete mode 100755 scripts/gensrv_java.py create mode 100644 src/genjava/gradle/Readme.md create mode 100644 src/genjava/gradle/gradle/wrapper/gradle-wrapper.jar create mode 100644 src/genjava/gradle/gradle/wrapper/gradle-wrapper.properties create mode 100755 src/genjava/gradle/gradlew create mode 100644 src/genjava/gradle_project.py create mode 100644 src/genjava/templates/genjava_project/build.gradle.in diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0d20b64 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.pyc diff --git a/CMakeLists.txt b/CMakeLists.txt index 2590ccb..eae70f3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,13 +6,13 @@ cmake_minimum_required(VERSION 2.8.3) project(genjava) ############################################################################## -# Dependencies +# Find Package ############################################################################## find_package(catkin REQUIRED COMPONENTS genmsg) ############################################################################## -# Package +# Catkin ############################################################################## catkin_package( @@ -20,16 +20,23 @@ catkin_package( CFG_EXTRAS genjava-extras.cmake ) +catkin_python_setup() + +############################################################################## +# Installs +############################################################################## + add_subdirectory(scripts) -message(STATUS "GENMSG_LANGS_DESTINATION...........${GENMSG_LANGS_DESTINATION}") file(WRITE ${CATKIN_DEVEL_PREFIX}/${GENMSG_LANGS_DESTINATION}/genjava "Java") install(FILES ${CATKIN_DEVEL_PREFIX}/${GENMSG_LANGS_DESTINATION}/genjava DESTINATION ${GENMSG_LANGS_DESTINATION}) -catkin_python_setup() +############################################################################## +# Tests +############################################################################## -if(CATKIN_ENABLE_TESTING) - catkin_add_nosetests(test) -endif() +#if(CATKIN_ENABLE_TESTING) +# catkin_add_nosetests(test) +#endif() diff --git a/cmake/genjava-extras.cmake.em b/cmake/genjava-extras.cmake.em index 8bcc5a7..f08631d 100644 --- a/cmake/genjava-extras.cmake.em +++ b/cmake/genjava-extras.cmake.em @@ -6,118 +6,91 @@ set(GENJAVA_BIN_DIR "@(CMAKE_CURRENT_SOURCE_DIR)/scripts") set(GENJAVA_BIN_DIR "${GENJAVA_DIR}/../../../@(CATKIN_PACKAGE_BIN_DESTINATION)") @[end if]@ -set(GENMSG_JAVA_BIN ${GENJAVA_BIN_DIR}/genmsg_java.py) -set(GENSRV_JAVA_BIN ${GENJAVA_BIN_DIR}/gensrv_java.py) +set(GENJAVA_BIN ${GENJAVA_BIN_DIR}/genjava_gradle_project.py) +set(genjava_INSTALL_DIR "maven/org/ros/rosjava_messages") -# 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") - message(STATUS " ARG_PKG..............${ARG_PKG}") - message(STATUS " ARG_MSG..............${ARG_MSG}") - 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 "${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) - - 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}) - + list(APPEND ALL_GEN_OUTPUT_FILES_java ${ARG_MSG} ${ARG_MSG_DEPS}) + + # 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 + + #message(STATUS "Java generator for [${ARG_PKG}][${ARG_MSG}]") + #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}") endmacro() -#todo, these macros are practically equal. Check for input file extension instead macro(_generate_srv_java ARG_PKG ARG_SRV ARG_IFLAGS ARG_MSG_DEPS ARG_GEN_OUTPUT_DIR) - - message(STATUS "GEN_SRV_JAVA..........._generate_srv_java") - #Append msg to output dir -# set(GEN_OUTPUT_DIR "${ARG_GEN_OUTPUT_DIR}/srv") -# file(MAKE_DIRECTORY ${GEN_OUTPUT_DIR}) -# - #Create input and output filenames -# get_filename_component(SRV_SHORT_NAME ${ARG_SRV} NAME_WE) -# -# set(SRV_GENERATED_NAME _${SRV_SHORT_NAME}.py) -# set(GEN_OUTPUT_FILE ${GEN_OUTPUT_DIR}/${SRV_GENERATED_NAME}) -# -# add_custom_command(OUTPUT ${GEN_OUTPUT_FILE} -# DEPENDS ${GENSRV_PY_BIN} ${ARG_SRV} ${ARG_MSG_DEPS} -# COMMAND ${CATKIN_ENV} ${PYTHON_EXECUTABLE} ${GENSRV_PY_BIN} ${ARG_SRV} -# ${ARG_IFLAGS} -# -p ${ARG_PKG} -# -o ${GEN_OUTPUT_DIR} -# COMMENT "Generating Python code from SRV ${ARG_PKG}/${SRV_SHORT_NAME}" -# ) -# -# list(APPEND ALL_GEN_OUTPUT_FILES_py ${GEN_OUTPUT_FILE}) - + list(APPEND ALL_GEN_OUTPUT_FILES_java ${ARG_SRV} ${ARG_MSG_DEPS}) endmacro() +# This is a bit different to the other generators - it generates the whole message package together +# (unless there's another api I'm not aware of yet in the generator jar). It's a few milliseconds +# of overkill generating all .java files if only one msg changed, but it's not worth the effort to +# break that down yet. +# +# To facilitate this, the ARG_GENERATED_FILES is actually just the underlying ARG_MSG and ARG_SRV +# files which we feed the commands as DEPENDS to trigger their execution. macro(_generate_module_java ARG_PKG ARG_GEN_OUTPUT_DIR ARG_GENERATED_FILES) - 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 "") - endif() - - #Append msg to output dir - foreach(type "msg" "srv") - set(GEN_OUTPUT_DIR "${ARG_GEN_OUTPUT_DIR}/${type}") - set(GEN_OUTPUT_FILE ${GEN_OUTPUT_DIR}/__init__.py) - - if(IS_DIRECTORY ${GEN_OUTPUT_DIR}) - add_custom_command(OUTPUT ${GEN_OUTPUT_FILE} - DEPENDS ${GENMSG_PY_BIN} ${ARG_GENERATED_FILES} - COMMAND ${CATKIN_ENV} ${PYTHON_EXECUTABLE} ${GENMSG_PY_BIN} - -o ${GEN_OUTPUT_DIR} - --initpy - COMMENT "Generating Python ${type} __init__.py for ${ARG_PKG}") - list(APPEND ALL_GEN_OUTPUT_FILES_py ${GEN_OUTPUT_FILE}) + ################################ + # Gradle Subproject + ################################ + set(GRADLE_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/java") + set(GRADLE_BUILD_FILE "${GRADLE_BUILD_DIR}/${ARG_PKG}/build.gradle") + list(APPEND ALL_GEN_OUTPUT_FILES_java ${GRADLE_BUILD_FILE}) + + add_custom_command(OUTPUT ${GRADLE_BUILD_FILE} + DEPENDS ${GENJAVA_BIN} + COMMAND ${CATKIN_ENV} ${PYTHON_EXECUTABLE} ${GENJAVA_BIN} + -o ${GRADLE_BUILD_DIR} + -p ${ARG_PKG} + COMMENT "Generating Java gradle project from ${ARG_PKG}" + ) + + ################################ + # Compile Gradle Subproject + ################################ + set(ROS_GRADLE_VERBOSE $ENV{ROS_GRADLE_VERBOSE}) + if(ROS_GRADLE_VERBOSE) + set(GRADLE_CMD "./gradlew") + else() + set(GRADLE_CMD "./gradlew;-q") endif() - - endforeach() - + set(GEN_OUTPUT_FILE ${CMAKE_CURRENT_BINARY_DIR}/generated_java_messages.flag) + + add_custom_command(OUTPUT ${GEN_OUTPUT_FILE} + DEPENDS ${GRADLE_BUILD_FILE} ${ARG_GENERATED_FILES} + COMMAND ${CATKIN_ENV} ${GRADLE_CMD} + COMMAND touch ${GEN_OUTPUT_FILE} + WORKING_DIRECTORY ${GRADLE_BUILD_DIR}/${ARG_PKG} + COMMENT "Generating Java code for ${ARG_PKG}") + list(APPEND ALL_GEN_OUTPUT_FILES_java ${GEN_OUTPUT_FILE}) + + ################################ + # Debugging + ################################ + #foreach(gen_output_file ${ALL_GEN_OUTPUT_FILES_java}) + # message(STATUS "ALL_GEN_OUTPUT_FILES_java..........${gen_output_file}") + #endforeach() + + ################################ + # Dependent Targets + ################################ + # Make sure we have built gradle-rosjava_bootstrap if it is in the source workspace + # (otherwise package.xml will make sure it has installed via rosdep/deb. + #if(TARGET gradle-rosjava_bootstrap) + # Preference would be to add it to ${ARG_PKG}_generate_messages_java but that + # is not defined till after this module is parsed, so add it all + #add_dependencies(${ARG_PKG}_generate_messages gradle-rosjava_bootstrap) + #endif() endmacro() -if(NOT EXISTS @(PROJECT_NAME)_SOURCE_DIR) - set(GENJAVA_INSTALL_DIR ${PYTHON_INSTALL_DIR}) -endif() \ No newline at end of file diff --git a/package.xml b/package.xml index 84622fd..e40e2e9 100644 --- a/package.xml +++ b/package.xml @@ -18,8 +18,14 @@ <buildtool_depend version_gte="0.5.78">catkin</buildtool_depend> <build_depend>genmsg</build_depend> + <build_depend>python-catkin-pkg</build_depend> + <build_depend>python-rospkg</build_depend> + <build_depend>rosjava_bootstrap</build_depend> <run_depend>genmsg</run_depend> + <run_depend>python-catkin-pkg</run_depend> + <run_depend>python-rospkg</run_depend> + <run_depend>rosjava_bootstrap</run_depend> <export> <message_generator>java</message_generator> diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index 044a96f..5f1a2b4 100644 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -1,3 +1,8 @@ +############################################################################## +# Installs +############################################################################## + catkin_install_python( - PROGRAMS genjava.py gensrv_java.py - DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}) + PROGRAMS genjava_gradle_project.py + DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +) diff --git a/scripts/genjava.py b/scripts/genjava_gradle_project.py similarity index 57% rename from scripts/genjava.py rename to scripts/genjava_gradle_project.py index 769db0b..3039c43 100755 --- a/scripts/genjava.py +++ b/scripts/genjava_gradle_project.py @@ -8,9 +8,8 @@ Converts ROS .msg files in a package into Java source code implementations. import os import sys -#import genjava.generator -import genjava.genjava_main +import genjava if __name__ == "__main__": - genjava.genjava_main.genmain(sys.argv, 'genmsg_java.py') #, genpy.generator.MsgGenerator()) + genjava.main(sys.argv) diff --git a/scripts/gensrv_java.py b/scripts/gensrv_java.py deleted file mode 100755 index e69de29..0000000 diff --git a/src/genjava/__init__.py b/src/genjava/__init__.py index ce7b434..f79a649 100644 --- a/src/genjava/__init__.py +++ b/src/genjava/__init__.py @@ -35,3 +35,5 @@ #__all__ = ['Time', 'Duration', 'TVal', # 'Message', 'SerializationError', 'DeserializationError', 'MessageException', 'struct_I'] + +from .genjava_main import main diff --git a/src/genjava/genjava_main.py b/src/genjava/genjava_main.py index e75a67c..3d947ae 100644 --- a/src/genjava/genjava_main.py +++ b/src/genjava/genjava_main.py @@ -36,46 +36,49 @@ from __future__ import print_function import argparse -import os +#import os #import sys #import traceback #import genmsg -import genmsg.command_line +#import genmsg.command_line #from genmsg import MsgGenerationException #from . generate_initpy import write_modules +from . import gradle_project ############################################################################## # Methods ############################################################################## -def parse_arguments(): +def parse_arguments(argv): ''' 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('-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") + #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() + return parser.parse_args(argv) ############################################################################## # Main ############################################################################## -def genmain(argv, progname): # , gen): - args = parse_arguments() - print("genjava %s/%s" % (args.package, args.message)) + +def main(argv): + args = parse_arguments(argv[1:]) + #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) + gradle_project.create(args.package, 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: diff --git a/src/genjava/genjava_main.pyc b/src/genjava/genjava_main.pyc index 149ebb8c4b88e6f5a172ae7269e8c91f6ee6e832..364d7ce18054d258b89d3bb490bdc694b672a559 100644 GIT binary patch delta 643 zcmZ3(dyY$*`7<w9sOHMxWCkc;Vqjo!U|?h@cA6-ypw7&Y!orZl%#h2%5XHj4n8M1? z!oU#4%8<eaX0S1&FfjycuuqIrbkAgDU|`Sy5hZ*K3=HW-i77d$@dZWsS*gh-$slo% z(d-Ni49+0q!x<PDN*EZj7#UI+L8de_FxE0M)G$t5DXqoGkj2E1!pV@r#gGEFD}|jQ zg`1(7iHWg>ks*tjp@xB>nUNt_gJ-fb<A0ulVonAI23_5P#N_PBdQ3`_tC(yVEhg_^ zQWaCsNYzW%Q%EY!%t_Ht%g>L`Elw}ioNUJI#tU*y2@3-QLt;^S+2jUhF)?cf1_u57 zf)f3r{Nk*{vPAvNyp+uJ$tzg3CO=@7$lw5l5UUWA45JJS+&|1P|9~`?Fo0Z^!pI=s z%*as7$WQ|I8OX^@3}VfU42&hr3|TA;AOTh|$;8mi#K4%sz!0nfGRO}chLb0<$kuDH zF)%O$@qhw}m4ShwpeQr1q=busfg!)Nq@c7UJ|(j#2o$CzAa%(_sfi`2C7`ecg+XF^ zss_k+K_K-oFBWTnoDU|7L2kwLXuf`NQL=t|YF<`i+2k#(a$=ys$xY16^JHLPC<fWX sz$m~ZIQc!Rf+ff-u>D{s1_^<p9wY`fA57q|1RR?EY!a-T0_>c^0EO9mr~m)} delta 957 zcmX@dwT4%k`7<w<{-(LX$qZ1y#K6Gdz`)2*Y&TI_p`L*ug^3}DnIVdWA%&Ttg@GZ8 zl_7-%%wPja1#7S}Ffe5P|NsBL1|tIlLkS-P14BVkW?o5rT4`Q#NoIbYAJ}M+Bs&8G zgEPqJ9*{}~hAc*g6h@FK%?ymS3=B043|UMdYf@MkQdk*M*cehK-sXyjh;lNdaKS{` z8B(|znwgjwp*naNQh1T%_>krJ8Bzqma)Jyg><lSFa5-j%W(I~}4dKcBjQ@FZi#Zt> z7<6@WQ;UlyOED?22rw`(Ob%cY<1c{96eK2RC#I)Pwq~+pRGM7Hq#9Wa3MpOBVvvt@ zbu;slb4pWEbqf+pGD_GO7#I=@3R3e@iuFOk1Cdhz$rUS<<SUe9q$)rSR7lKAQAkNG zC|1ZVPFG0F%t<Ytyp_pK4isKsa|#lRic^a;K(PZRid{iYi(^!pT*9I<IgVMPo(Cky zD#R!Qfy~Juhp{j)Fn};PyrUuE-ORvH%fwIu4)q!)P+)^dW`;B-2C-&F21bw!69Y($ z1uDSGkj2K3#SRwZU}$D!sAUH0XJ)8jhA2s4kYWhd0NLbM%*(*Qke-^Cl~|Ujpjxc2 zT0Hq4vuu5_7y|=?f<kd>Vo`DiI1Kb4K($x{6zW0TAlHGC5jfqHfKmxGaKLO(oFt~F zmT)mJFyxn(6qJ_4r(_m^!zMj7FSj_o1QY<t`MJ4?c`5NZnR%%t!iYdGh)*oZh%d>H zPsvO!0jq?@R6Hm)zz#0~xjwNdy{v=-oOtuo^AdAYVWPz)AooFB577e(Zp^5V1-TpK zpv25PPX-2tVvu_o7&#fG7zG(cC$D2sumU*?q@p-o581gvpu`3ag&+wA1_rRv2m&>} N4Ot~v*?71(g#oC>#`gdK diff --git a/src/genjava/gradle/Readme.md b/src/genjava/gradle/Readme.md new file mode 100644 index 0000000..4068f0c --- /dev/null +++ b/src/genjava/gradle/Readme.md @@ -0,0 +1,3 @@ +This is not installed, but it gets used to generate the gradle wrapper for a project. + +It is currently the gradle wrapper supporting gradle 1.9. \ No newline at end of file diff --git a/src/genjava/gradle/gradle/wrapper/gradle-wrapper.jar b/src/genjava/gradle/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..3c7abdf12790879c06b07176de29647f77aa4129 GIT binary patch literal 51106 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 literal 0 HcmV?d00001 diff --git a/src/genjava/gradle/gradle/wrapper/gradle-wrapper.properties b/src/genjava/gradle/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..46530ef --- /dev/null +++ b/src/genjava/gradle/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Wed Mar 19 17:27:39 KST 2014 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=http\://services.gradle.org/distributions/gradle-1.11-bin.zip diff --git a/src/genjava/gradle/gradlew b/src/genjava/gradle/gradlew new file mode 100755 index 0000000..91a7e26 --- /dev/null +++ b/src/genjava/gradle/gradlew @@ -0,0 +1,164 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# For Cygwin, ensure paths are in UNIX format before anything is touched. +if $cygwin ; then + [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` +fi + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >&- +APP_HOME="`pwd -P`" +cd "$SAVED" >&- + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/src/genjava/gradle_project.py b/src/genjava/gradle_project.py new file mode 100644 index 0000000..da8e2c7 --- /dev/null +++ b/src/genjava/gradle_project.py @@ -0,0 +1,161 @@ +#!/usr/bin/env python + +############################################################################## +# Imports +############################################################################## + +from __future__ import print_function + +import os +import shutil + +# local imports +#import utils +from catkin_pkg.packages import find_packages +import rospkg + +############################################################################## +# Utils +############################################################################## + +import pwd + + +def author_name(): + """ + Utility to compute logged in user name + + :returns: name of current user, ``str`` + """ + import getpass + name = getpass.getuser() + try: + login = name + name = pwd.getpwnam(login)[4] + name = ''.join(name.split(',')) # strip commas + # in case pwnam is not set + if not name: + name = login + except: + #pwd failed + pass + #if type(name) == str: + # name = name.decode('utf-8') + return name + + +import subprocess + + +def create_gradle_wrapper(repo_path): + gradle_binary = os.path.join(os.path.dirname(__file__), 'gradle', 'gradlew') + cmd = [gradle_binary, '-p', repo_path, 'wrapper'] + print("Creating gradle wrapper: %s" % ' '.join(cmd)) + try: + subprocess.check_call(cmd) + except subprocess.CalledProcessError: + raise subprocess.CalledProcessError("failed to create the gradle wrapper.") + + +def read_template(tmplf): + f = open(tmplf, 'r') + try: + t = f.read() + finally: + f.close() + return t + +############################################################################## +# Methods acting on classes +############################################################################## + + +def instantiate_genjava_template(template, project_name, project_version, pkg_directory, author, msg_dependencies): + return template % locals() + + +def get_templates(): + template_dir = os.path.join(os.path.dirname(__file__), 'templates', 'genjava_project') + templates = {} + templates['build.gradle'] = read_template(os.path.join(template_dir, 'build.gradle.in')) + return templates + + +def populate_project(project_name, project_version, pkg_directory, gradle_project_dir, msg_dependencies): + author = author_name() + for filename, template in get_templates().iteritems(): + contents = instantiate_genjava_template(template, project_name, project_version, pkg_directory, author, msg_dependencies) + try: + p = os.path.abspath(os.path.join(gradle_project_dir, filename)) + f = open(p, 'w') + f.write(contents) + #console.pretty_print("Created file: ", console.cyan) + #console.pretty_println("%s" % p, console.yellow) + finally: + f.close() + + +def create_dependency_string(project_name, msg_package_index): + package = msg_package_index[project_name] + gradle_dependency_string = "" + for dep in package.build_depends: + try: + dependency_package = msg_package_index[dep.name] + except KeyError: + continue # it's not a message package + gradle_dependency_string += "compile 'org.ros.rosjava_messages:" + dependency_package.name + ":" + dependency_package.version + "'\n" + return gradle_dependency_string + + +def create_msg_package_index(): + """ + Scans the package paths and creates a package index always taking the + highest in the workspace chain (i.e. takes an overlay in preference when + there are multiple instances of the package). + + :returns: the package index + :rtype: { name : catkin_pkg.Package } + """ + # should use this, but it doesn't sequence them properly, so we'd have to make careful version checks + # this is inconvenient since it would always mean we should bump the version number in an overlay + # when all that is necessary is for it to recognise that it is in an overlay + # ros_paths = rospkg.get_ros_paths() + package_index = {} + ros_paths = rospkg.get_ros_package_path() + ros_paths = [x for x in ros_paths.split(':') if x] + for path in reversed(ros_paths): # make sure we pick up the source overlays last + for unused_package_path, package in find_packages(path).items(): + if 'message_generation' in [dep.name for dep in package.build_depends]: +# print(package.name) +# print(" version: %s" % package.version) +# print(" dependencies: ") +# for dep in package.build_depends: +# if not (dep.name == 'message_generation'): +# print(" : %s" % dep) + package_index[package.name] = package + return package_index + + +def create(msg_pkg_name, output_dir): + ''' + Creates a standalone single project gradle build instance in the specified output directory and + populates it with gradle wrapper and build.gradle file that will enable building of the artifact later. + + :param str project_name: + :param dict msg_package_index: { name : catkin_pkg.Package } + :param str output_dir: + ''' + if os.path.exists(output_dir): + shutil.rmtree(output_dir) + genjava_gradle_dir = os.path.join(output_dir, msg_pkg_name) + os.makedirs(genjava_gradle_dir) + msg_package_index = create_msg_package_index() + if msg_pkg_name not in msg_package_index.keys(): + raise IOError("could not find %s on the ros package path" % msg_pkg_name) + + msg_dependencies = create_dependency_string(msg_pkg_name, msg_package_index) + + create_gradle_wrapper(genjava_gradle_dir) + pkg_directory = os.path.dirname(msg_package_index[msg_pkg_name].filename) + msg_pkg_version = msg_package_index[msg_pkg_name].version + populate_project(msg_pkg_name, msg_pkg_version, pkg_directory, genjava_gradle_dir, msg_dependencies) diff --git a/src/genjava/templates/genjava_project/build.gradle.in b/src/genjava/templates/genjava_project/build.gradle.in new file mode 100644 index 0000000..c0896ea --- /dev/null +++ b/src/genjava/templates/genjava_project/build.gradle.in @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2014 %(author)s + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +task wrapper(type: Wrapper) { + gradleVersion = '1.11' +} + +buildscript { + def rosMavenPath = "$System.env.ROS_MAVEN_PATH".split(':').collect { 'file://' + it } + def rosMavenRepository = "$System.env.ROS_MAVEN_REPOSITORY" + repositories { + rosMavenPath.each { p -> + maven { + url p + } + } + mavenLocal() + maven { + url rosMavenRepository + } + } + dependencies { + classpath group: 'org.ros.rosjava_bootstrap', name: 'gradle_plugins', version: '[0.1,0.2)' + } +} + +apply plugin: 'ros-java' +group 'org.ros.rosjava_messages' +version = '%(project_version)s' + +ext { + generated_sources_directory = "${projectDir}/src/main/java" +} + +task generateSources (type: JavaExec) { + description = "Generate sources for %(project_name)s" + outputs.dir(file(generated_sources_directory)) + args = new ArrayList<String>([generated_sources_directory, '--package-path=%(pkg_directory)s', '%(project_name)s']) + classpath = configurations.runtime + main = 'org.ros.internal.message.GenerateInterfaces' + tasks.compileJava.source outputs.files +} + +dependencies { + compile 'org.ros.rosjava_bootstrap:message_generation:[0.1,)' + %(msg_dependencies)s +} + +task info << { + println "\nProject Info" + println "============\n" + println "Name : ${rootProject}" + println "Dir : ${projectDir}" + println "Group : ${group}" + println "Version : ${version}" + println "Configurations: " + configurations + + println "\nPackage Info" + println "============\n" + println "Name : %(project_name)s" + println "Dir : %(pkg_directory)s" + + println "\nGenerate Info" + println "============\n" + println "Output Dir : ${generated_sources_directory}" + println "Task Args : " + tasks["generateSources"].args + tasks["generateSources"].outputs.getFiles().getAsFileTree().each { + println "Files : ${it}" + } +} + +defaultTasks 'publishMavenJavaPublicationToMavenRepository' -- GitLab