Skip to content
Snippets Groups Projects
Commit 63fffb28 authored by Daniel Stonier's avatar Daniel Stonier
Browse files

experimental avoidance of having to shell out to gradle when files haven't changed.

parent e7224470
No related branches found
No related tags found
No related merge requests found
...@@ -44,6 +44,7 @@ endmacro() ...@@ -44,6 +44,7 @@ endmacro()
# Note that we check for the variable existence as well so we don't # Note that we check for the variable existence as well so we don't
# override a user setting. # override a user setting.
macro(_rosjava_env) macro(_rosjava_env)
set(ROS_GRADLE_VERBOSE $ENV{ROS_GRADLE_VERBOSE})
set(ROS_MAVEN_DEPLOYMENT_REPOSITORY $ENV{ROS_MAVEN_DEPLOYMENT_REPOSITORY}) set(ROS_MAVEN_DEPLOYMENT_REPOSITORY $ENV{ROS_MAVEN_DEPLOYMENT_REPOSITORY})
set(ROS_MAVEN_REPOSITORY $ENV{ROS_MAVEN_REPOSITORY}) set(ROS_MAVEN_REPOSITORY $ENV{ROS_MAVEN_REPOSITORY})
if(NOT ROS_MAVEN_DEPLOYMENT_REPOSITORY) if(NOT ROS_MAVEN_DEPLOYMENT_REPOSITORY)
...@@ -75,13 +76,37 @@ macro(catkin_rosjava_setup) ...@@ -75,13 +76,37 @@ macro(catkin_rosjava_setup)
else() else()
set(gradle_tasks ${ARGV}) set(gradle_tasks ${ARGV})
endif() endif()
if(ROS_GRADLE_VERBOSE)
set(gradle_options "")
else()
set(gradle_options "-q")
endif()
###################################
# Execution
###################################
# This is an interesting option, it uses cmake to check for changes in files and
# avoids gradle's own slow check. It could get annoying though.
file(GLOB_RECURSE BUILD_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} FOLLOW_SYMLINKS *.java *.gradle *.properties CMakeLists.txt *.cmake *.xml)
# Can't actually key off the subproject build dirs since we don't know them from here so we
# use touch a file to link the command to the target. Actual triggers come from the file dependency changes.
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/built
DEPENDS ${BUILD_FILES}
# COMMAND ${ROSJAVA_ENV} ${CATKIN_ENV} "env" "|" "grep" "ROS"
COMMAND ${ROSJAVA_ENV} ${CATKIN_ENV} ${${PROJECT_NAME}_gradle_BINARY} ${gradle_options} ${gradle_tasks}
COMMAND touch ${CMAKE_CURRENT_BINARY_DIR}/built
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Running gradle tasks for ${PROJECT_NAME}"
)
add_custom_target(gradle-${PROJECT_NAME} add_custom_target(gradle-${PROJECT_NAME}
ALL ALL
COMMAND ${ROSJAVA_ENV} ${CATKIN_ENV} "env" "|" "grep" "ROS" DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/built
COMMAND ${ROSJAVA_ENV} ${CATKIN_ENV} ${${PROJECT_NAME}_gradle_BINARY} ${gradle_tasks}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
VERBATIM VERBATIM
) )
###################################
# Target Management
###################################
catkin_package_xml() catkin_package_xml()
foreach(depends in ${${PROJECT_NAME}_BUILD_DEPENDS}) foreach(depends in ${${PROJECT_NAME}_BUILD_DEPENDS})
if(TARGET gradle-${depends}) if(TARGET gradle-${depends})
...@@ -95,6 +120,7 @@ macro(catkin_rosjava_setup) ...@@ -95,6 +120,7 @@ macro(catkin_rosjava_setup)
add_custom_target(gradle-clean-${PROJECT_NAME} add_custom_target(gradle-clean-${PROJECT_NAME}
COMMAND ${CATKIN_ENV} ${${PROJECT_NAME}_gradle_BINARY} clean COMMAND ${CATKIN_ENV} ${${PROJECT_NAME}_gradle_BINARY} clean
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Cleaning gradle project for ${PROJECT_NAME}"
) )
add_dependencies(gradle-clean gradle-clean-${PROJECT_NAME}) add_dependencies(gradle-clean gradle-clean-${PROJECT_NAME})
endmacro() endmacro()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment