diff --git a/CMakeLists.txt b/CMakeLists.txt index eae70f34b6f957a8065672eba8e6f4011207ec52..79be8222ed78e4986b2885ed6e39101448f8af7f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,7 +17,9 @@ find_package(catkin REQUIRED COMPONENTS genmsg) catkin_package( CATKIN_DEPENDS genmsg - CFG_EXTRAS genjava-extras.cmake + CFG_EXTRAS + genjava-extras.cmake + genjava-catkin-api.cmake ) catkin_python_setup() diff --git a/cmake/genjava-catkin-api.cmake.em b/cmake/genjava-catkin-api.cmake.em new file mode 100644 index 0000000000000000000000000000000000000000..f9d33b7d56b49873889647c723b86171feeba011 --- /dev/null +++ b/cmake/genjava-catkin-api.cmake.em @@ -0,0 +1,53 @@ +@[if DEVELSPACE]@ +# location of scripts in develspace + set(GENJAVA_BIN_DIR "@(CMAKE_CURRENT_SOURCE_DIR)/scripts") +@[else]@ + set(GENJAVA_BIN_DIR "${GENJAVA_DIR}/../../../@(CATKIN_PACKAGE_BIN_DESTINATION)") +@[end if]@ + +set(GENJAVA_BIN ${GENJAVA_BIN_DIR}/genjava_message_artifacts) +set(genjava_INSTALL_DIR "maven/org/ros/rosjava_messages") + +include(CMakeParseArguments) + +# Api for a a catkin metapackage rolls rosjava messages for +# its dependencies. Accepts a list of package names attached +# to the PACKAGES arg (similar to the genmsg +# 'generate_messages' api. +# +# generate_rosjava_messages( +# PACKAGES +# std_msgs +# geometry_msgs +# ) +macro(generate_rosjava_messages) + if( ${ARGC} EQUAL 0 ) + return() # Nothing to do (no packages specified) + else() + cmake_parse_arguments(ARG "" "" "PACKAGES" ${ARGN}) + endif() + if(ARG_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "generate_rosjava_messages() called with unused arguments: ${ARG_UNPARSED_ARGUMENTS}") + endif() + set(ROS_GRADLE_VERBOSE $ENV{ROS_GRADLE_VERBOSE}) + if(ROS_GRADLE_VERBOSE) + set(verbosity "--verbosity") + else() + set(verbosity "") + endif() + string(REPLACE ";" " " package_list "${ARG_PACKAGES}") + add_custom_target(${PROJECT_NAME}_rosjava_messages + ALL + COMMAND ${CATKIN_ENV} ${PYTHON_EXECUTABLE} ${GENJAVA_BIN} + ${verbosity} + -o ${CMAKE_CURRENT_BINARY_DIR} + -p ${ARG_PACKAGES} # this has to be a list argument so it separates each arg (not a single string!) + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Compiling rosjava message artifacts for [${package_list}]" + ) + foreach(pkg ${ARG_PACKAGES}) + message(STATUS "Additional clean file.......${CMAKE_CURRENT_BINARY_DIR}/${pkg}/build.gradle") + set_directory_properties(PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${CMAKE_CURRENT_BINARY_DIR}/${pkg}/build.gradle) + add_dependencies(${PROJECT_NAME}_rosjava_messages ${pkg}_generate_messages) + endforeach() +endmacro() diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index 5f1a2b4f4339d6d62bf1b6795e3fa0f6fa7f867b..31aeff58372a35bf439c3f31bbebbe68d7ee2591 100644 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -2,7 +2,10 @@ # Installs ############################################################################## +# Rosrunnable installation of scripts catkin_install_python( - PROGRAMS genjava_gradle_project.py - DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} -) + PROGRAMS + genjava_gradle_project.py + genjava_message_artifacts + DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +) \ No newline at end of file