From 1fb7c5f7e08efe2111ded799b45a512b86e5686e Mon Sep 17 00:00:00 2001 From: Daniel Stonier <d.stonier@gmail.com> Date: Sat, 7 Sep 2013 04:05:59 +0900 Subject: [PATCH] extra handles for debian maven repo integration. --- cmake/rosjava.cmake.em | 25 +++++++++++++++++++++---- env-hooks/15.rosjava.bash.em | 1 + generate_ros_maven_path.py | 18 +++++++++++++++--- 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/cmake/rosjava.cmake.em b/cmake/rosjava.cmake.em index 73ac7ca..fd52b5e 100644 --- a/cmake/rosjava.cmake.em +++ b/cmake/rosjava.cmake.em @@ -2,6 +2,8 @@ # Utilities ############################################################################## +set(CATKIN_GLOBAL_MAVEN_DESTINATION ${CATKIN_GLOBAL_SHARE_DESTINATION}/maven CACHE PATH "path to which maven artifacts are deployed in your workspace") + # Scans down directories till it finds the gradle wrapper. # It sets the following variables # - ${PROJECT_NAME}_gradle_BINARY @@ -35,22 +37,35 @@ macro(find_gradle_repo_root) get_filename_component(${PROJECT_NAME}_gradle_ROOT ${${PROJECT_NAME}_gradle_SETTINGS} PATH) endmacro() +# Sets environment variables that are used by gradle to customise a build. +# This is better than modifying a gradle script - gradle should be able +# to be called alone without cmake intervention. +macro(_rosjava_env) + set(ROSJAVA_ENV $ENV{ROS_MAVEN_DEPLOYMENT_PATH}) + if(NOT ROSJAVA_ENV) + set(ROSJAVA_ENV "ROS_MAVEN_DEPLOYMENT_PATH=${CATKIN_DEVEL_PREFIX}/${CATKIN_GLOBAL_MAVEN_DESTINATION}") + endif() +endmacro() + ############################################################################## # RosJava Package ############################################################################## # Calls the gradle wrapper to compile just the package # that it is called in with install and installApp targets. macro(catkin_rosjava_setup) + _rosjava_env() find_gradle() if( ${ARGC} EQUAL 0 ) - set(gradle_tasks "install;installApp") + # Note : COMMAND is a list of variables, so these need to be a list, not a single string + set(gradle_tasks "install;installApp;uploadArchives") else() - string(REPLACE ";" " " gradle_tasks "${ARGV}") + set(gradle_tasks ${ARGV}) endif() add_custom_target(gradle-${PROJECT_NAME} ALL - COMMAND ${CATKIN_ENV} ${${PROJECT_NAME}_gradle_BINARY} ${gradle_tasks} + COMMAND ${ROSJAVA_ENV} ${CATKIN_ENV} ${${PROJECT_NAME}_gradle_BINARY} ${gradle_tasks} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + VERBATIM ) catkin_package_xml() foreach(depends in ${${PROJECT_NAME}_BUILD_DEPENDS}) @@ -76,6 +91,7 @@ endmacro() # It checks the build type and determines whether it should run # assembleDebug or assembleRelease macro(catkin_android_setup) + _rosjava_env() find_gradle() if( ${ARGC} EQUAL 0 ) if(CMAKE_BUILD_TYPE STREQUAL "Release") @@ -88,8 +104,9 @@ macro(catkin_android_setup) endif() add_custom_target(gradle-${PROJECT_NAME} ALL - COMMAND ${CATKIN_ENV} ${${PROJECT_NAME}_gradle_BINARY} ${gradle_tasks} + COMMAND ${ROSJAVA_ENV} ${CATKIN_ENV} ${${PROJECT_NAME}_gradle_BINARY} ${gradle_tasks} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + VERBATIM ) catkin_package_xml() foreach(depends in ${${PROJECT_NAME}_BUILD_DEPENDS}) diff --git a/env-hooks/15.rosjava.bash.em b/env-hooks/15.rosjava.bash.em index b68a779..dcbedf1 100644 --- a/env-hooks/15.rosjava.bash.em +++ b/env-hooks/15.rosjava.bash.em @@ -2,6 +2,7 @@ @[if DEVELSPACE]@ export ROS_MAVEN_PATH=`python @(CMAKE_CURRENT_SOURCE_DIR)/generate_ros_maven_path.py` +export ROS_MAVEN_DEPLOYMENT_PATH=`python @(CMAKE_CURRENT_SOURCE_DIR)/generate_ros_maven_path.py --deployment-repository` @[else]@ export ROS_MAVEN_PATH=`python @(CMAKE_INSTALL_PREFIX)/share/rosjava_tools/generate_ros_maven_path.py` @[end if]@ diff --git a/generate_ros_maven_path.py b/generate_ros_maven_path.py index 6d2ef8c..9386079 100755 --- a/generate_ros_maven_path.py +++ b/generate_ros_maven_path.py @@ -1,9 +1,16 @@ #!/usr/bin/env python import os +import argparse CATKIN_MARKER_FILE = '.catkin' +def parse_arguments(): + parser = argparse.ArgumentParser(description='Generate environment variables for the rosjava maven environment.') + parser.add_argument('-d', '--deployment-repository', action='store_true', help='Return the current devel workspace maven directory.') + args = parser.parse_args() + return args + def get_workspaces(environ): ''' Based on CMAKE_PREFIX_PATH return all catkin workspaces. @@ -13,10 +20,15 @@ def get_workspaces(environ): value = environ[env_name] if env_name in environ else '' paths = [path for path in value.split(os.pathsep) if path] # remove non-workspace paths - workspaces = [path for path in paths if os.path.isfile(os.path.join(path, CATKIN_MARKER_FILE)) or (include_fuerte and path.startswith('/opt/ros/fuerte'))] + workspaces = [path for path in paths if os.path.isfile(os.path.join(path, CATKIN_MARKER_FILE))] return workspaces if __name__ == '__main__': + args = parse_arguments() workspaces = get_workspaces(dict(os.environ)) - maven_repository_paths = [os.path.join(path, 'maven') for path in workspaces] - print os.pathsep.join(maven_repository_paths) + if args.deployment_repository: + # assuming one value exists here + print os.path.join(workspaces[0], 'share', 'maven') + else: + maven_repository_paths = [os.path.join(path, 'share', 'maven') for path in workspaces] + print os.pathsep.join(maven_repository_paths) -- GitLab