diff --git a/cmake/rosjava.cmake.em b/cmake/rosjava.cmake.em index 73ac7cacb3c532da55d380d07cbec228a44fa7b9..fd52b5ee5bc1a94ceaa9e29c38382831907c9f32 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 b68a7797bc63e71e4a9a268aaf73d73d1fec9ab6..dcbedf1d7620bf14770eda5b484737e6760d80c1 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 6d2ef8cf987fa105e12ddba28895b4a470688320..93860798557619f4b301732bf9bb7e73b82a223a 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)