Skip to content

Commit b777efa

Browse files
committed
allow catkin_make to compile empty gradle packages, also dynamically add tasks for both library and app projects.
1 parent b7176ff commit b777efa

File tree

4 files changed

+35
-10
lines changed

4 files changed

+35
-10
lines changed

cmake/rosjava.cmake.em

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,7 @@ macro(catkin_rosjava_setup)
7171
_rosjava_env()
7272
find_gradle()
7373
if( ${ARGC} EQUAL 0 )
74-
# Note : COMMAND is a list of variables (semi-colon separated)
75-
set(gradle_tasks "publishMavenJavaPublicationToMavenRepository") # old targets "install;installApp;uploadArchives"
74+
return() # Nothing to do (typically no subprojects created yet)
7675
else()
7776
set(gradle_tasks ${ARGV})
7877
endif()

src/rosjava_build_tools/create_rosjava_project.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from __future__ import print_function
88

99
import os
10+
import re
1011
import sys
1112
import argparse
1213
import xml.etree.ElementTree as ElementTree
@@ -151,7 +152,7 @@ def add_to_package_xml(name):
151152
package_xml.write(new_contents)
152153

153154

154-
def add_install_app_to_cmake_targets():
155+
def add_tasks_to_cmake_setup(tasks):
155156
'''
156157
Adds project name to build_depends in package.xml (should be same name as the ros msg package name).
157158
'''
@@ -165,11 +166,23 @@ def add_install_app_to_cmake_targets():
165166
console.pretty_println("\nCouldn't find the root level CMakeLists.txt - not adding to the superproject.")
166167
return
167168
with open(cmakelists_txt_path, 'r') as cmakelists_txt:
169+
old_contents = cmakelists_txt.read()
170+
result = re.search('^catkin_rosjava_setup\(.*\)', old_contents, re.MULTILINE)
171+
if result is None:
172+
console.pretty_println("\nCouldn't find a catkin_rosjava_setup entry in the CMakeLists.txt - not adding tasks.")
173+
return
174+
rosjava_setup_string = result.group(0)
175+
gradle_tasks = set([])
176+
if rosjava_setup_string.find("publishMavenJavaPublicationToMavenRepository") != -1:
177+
gradle_tasks.add("publishMavenJavaPublicationToMavenRepository")
178+
if rosjava_setup_string.find("installApp") != -1:
179+
gradle_tasks.add("installApp")
180+
gradle_tasks |= set(tasks)
168181
console.pretty_print(' File : ', console.cyan)
169182
console.pretty_println('CMakeLists.txt (gradle task update)', console.yellow)
170-
old_text = 'catkin_rosjava_setup(publishMavenJavaPublicationToMavenRepository)'
171-
new_text = 'catkin_rosjava_setup(publishMavenJavaPublicationToMavenRepository installApp)'
172-
new_contents = cmakelists_txt.read().replace(old_text, new_text)
183+
old_text = rosjava_setup_string
184+
new_text = 'catkin_rosjava_setup(' + ' '.join(gradle_tasks) + ')'
185+
new_contents = old_contents.replace(old_text, new_text)
173186
with open(cmakelists_txt_path, 'w') as cmakelists_txt:
174187
cmakelists_txt.write(new_contents)
175188

@@ -223,14 +236,15 @@ def create_rosjava_project():
223236
author = args.author
224237
create_rosjava_project_common(args, 'rosjava_project')
225238
create_talker_listener_classes(project_name, 'rosjava_project', author)
226-
add_install_app_to_cmake_targets()
239+
add_tasks_to_cmake_setup(['installApp', 'publishMavenJavaPublicationToMavenRepository'])
227240

228241

229242
def create_rosjava_library_project():
230243
args = parse_arguments()
231244
project_name = args.name[0]
232245
create_rosjava_project_common(args, 'rosjava_library_project')
233246
create_dummy_java_class(project_name)
247+
add_tasks_to_cmake_setup(['publishMavenJavaPublicationToMavenRepository'])
234248

235249

236250
def create_rosjava_msg_project():
@@ -239,3 +253,4 @@ def create_rosjava_msg_project():
239253
create_rosjava_project_common(args, 'rosjava_msg_project')
240254
add_catkin_generate_tree_command()
241255
add_to_package_xml(project_name)
256+
add_tasks_to_cmake_setup(['publishMavenJavaPublicationToMavenRepository'])

src/rosjava_build_tools/templates/rosjava_package/CMakeLists.txt.in

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,13 @@ project(%(repo_name)s)
1010
##############################################################################
1111

1212
find_package(catkin REQUIRED rosjava_build_tools)
13-
# Set the gradle targets you want catkin's make to run by default
14-
catkin_rosjava_setup(publishMavenJavaPublicationToMavenRepository)
13+
14+
# Set the gradle targets you want catkin's make to run by default, e.g.
15+
# catkin_rosjava_setup(installApp)
16+
# Note that the catkin_create_rosjava_xxx scripts will usually automatically
17+
# add tasks to this for you when you create subprojects.
18+
catkin_rosjava_setup()
19+
1520
catkin_package()
1621

1722
##############################################################################

src/rosjava_build_tools/templates/rosjava_package/build.gradle.in

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,14 @@ subprojects {
5959

6060
/*
6161
Some useful tasks:
62+
6263
install: deploys jar's to MavenLocal() (i.e. ~/.m2/repository)
6364
publishMavenJavaPublicationToMavenRepository : deploys jar's to devel/share/maven
6465
installApp : assembles java apps in the _subproject_/build directories.
66+
67+
Note that these are dependent on the type of project (e.g. installApp is only valid for
68+
java binary subprojects, while publishMavenJav... is only added once a subproject is included.
69+
If you're using catkin_make, this is not important, since it will use the task list specified
70+
in CMakeLists.txt
6571
*/
66-
defaultTasks 'install'
72+
defaultTasks 'tasks'

0 commit comments

Comments
 (0)