@@ -23,7 +23,7 @@ import org.gradle.api.*;
2323 * println d
2424 * }
2525 * // filtered list of *_msg dependencies.
26- * pkg.messageDependencies ().each { d ->
26+ * pkg.getMessageDependencies ().each { d ->
2727 * println d
2828 * }
2929 * }
@@ -32,7 +32,7 @@ import org.gradle.api.*;
3232 * only generate the properties once and share them this way.
3333 */
3434class CatkinPlugin implements Plugin<Project > {
35- def void apply (Project project ) {
35+ def void apply (Project project ) {
3636 project. extensions. create(" catkin" , CatkinPluginExtension )
3737
3838 def workspaces = System . getenv(" ROS_PACKAGE_PATH" )
@@ -48,7 +48,7 @@ class CatkinPlugin implements Plugin<Project> {
4848 if (! packageXml. exists()) {
4949 throw new StopActionException (" Missing package.xml for project: ${ project} " )
5050 }
51- project. catkin. pkg = new CatkinPackage (packageXml)
51+ project. catkin. pkg = new CatkinPackage (project, packageXml)
5252
5353 project. task(" catkinPackageInfo" ) << {
5454 println " Catkin Workspaces: ${ project.catkin.workspaces} "
@@ -64,26 +64,31 @@ class CatkinPluginExtension {
6464}
6565
6666class CatkinPackages {
67- def Map<String , CatkinPackage > pkgs
68- def List<String > workspaces
69- def Project project
7067
71- def CatkinPackages (Project project , List<String > workspaces ) {
68+ Map<String , CatkinPackage > pkgs
69+ List<String > workspaces
70+ Project project
71+
72+ CatkinPackages (Project project , List<String > workspaces ) {
7273 this . project = project
7374 this . workspaces = workspaces
7475 pkgs = [:]
7576 }
7677
77- def generate () {
78+ void generate () {
7879 if (pkgs. size() == 0 ) {
7980 workspaces. each { workspace ->
80- def manifestTree = project. fileTree(dir : workspace, include : " **/package.xml" )
81+ def manifestTree = project. fileTree(dir : workspace,
82+ include : " **/package.xml" )
8183 manifestTree. each {
82- def pkg = new CatkinPackage (it)
84+ def pkg = new CatkinPackage (project, it)
8385 if (pkgs. containsKey(pkg. name)) {
86+ // TODO(damonkohler): This comparison probably doesn't work since
87+ // versions are strings.
8488 if (pkgs[pkg. name]. version < pkg. version) {
85- println (" Replacing " + pkg. name + " version " + pkgs[pkg. name]. version +
86- " with version " + pkg. version + " ." )
89+ println (" Replacing " + pkg. name + " version " +
90+ pkgs[pkg. name]. version + " with version " + pkg. version +
91+ " ." )
8792 pkgs[pkg. name] = pkg
8893 }
8994 } else {
@@ -96,44 +101,51 @@ class CatkinPackages {
96101}
97102
98103class CatkinPackage {
99- def name
100- def version
101- def dependencies
102104
103- def CatkinPackage (File packageXmlFilename ) {
105+ Project project
106+ String name
107+ String version
108+ Set<String > dependencies
109+
110+ CatkinPackage (Project project , File packageXmlFilename ) {
111+ this . project = project
104112 println " Loading " + packageXmlFilename
105113 def packageXml = new XmlParser (). parse(packageXmlFilename)
106114 name = packageXml. name. text()
107115 version = packageXml. version. text()
108- dependencies = packageXml. build_depend. collect( { it. text() })
116+ dependencies = packageXml. build_depend. collect{ it. text() }
109117 }
110118
111119 String toString () { " ${ name} ${ version} ${ dependencies} " }
112120
113- /*
114- * Find and annotate a list of package package dependencies.
115- * Useful for message artifact generation).
116- *
117- * @return List<String> : dependencies (package name strings)
118- */
119- Set<String > messageDependencies (Project project , Collection<String > dependencies ) {
121+ Set<String > getTransitiveDependencies (Collection<String > dependencies ) {
120122 Set<String > result = [];
121123 dependencies. each {
122124 if (project. catkin. tree. pkgs. containsKey(it)) {
123- if (it. contains(" _msgs" ) || it. contains(" _srvs" )) {
124- result. add(it)
125- }
126- result. addAll(messageDependencies(project, project. catkin. tree. pkgs[it]. dependencies))
125+ result. add(it)
126+ result. addAll(getTransitiveDependencies(
127+ project. catkin. tree. pkgs[it]. dependencies))
127128 }
128129 }
129130 return result
130131 }
131132
133+ Set<String > getMessageDependencies () {
134+ getTransitiveDependencies(dependencies). findAll {
135+ project. catkin. tree. pkgs. containsKey(it) &&
136+ project. catkin. tree. pkgs[it]. dependencies. contains(" message_generation" )
137+ } as Set
138+ }
139+
132140 void generateMessageArtifact (Project project ) {
133141 project. version = version
134142 project. dependencies. add(" compile" , " org.ros.rosjava_bootstrap:message_generation:[0.2,0.3)" )
135- messageDependencies(project, dependencies). each {
136- project. dependencies. add(" compile" , project. dependencies. project(path : " :${ it} " ))
143+ getMessageDependencies(). each {
144+ if (project. getParent(). getChildProjects(). containsKey(it)) {
145+ project. dependencies. add(" compile" , project. dependencies. project(path : " :${ it} " ))
146+ } else {
147+ project. dependencies. add(" compile" , " org.ros.rosjava_messages:${ it} :[0.0,)" )
148+ }
137149 }
138150 def generatedSourcesDir = " ${ project.buildDir} /generated-src"
139151 def generateSourcesTask = project. tasks. create(" generateSources" , JavaExec )
@@ -155,8 +167,8 @@ class CatkinPackage {
155167 project. version = version
156168 project. group = " org.ros.rosjava_messages"
157169 project. dependencies. add(" compile" , " org.ros.rosjava_bootstrap:message_generation:[0.2,0.3)" )
158- messageDependencies(project, dependencies ). each { d ->
159- project. dependencies. add(" compile" , " org.ros.rosjava_messages:" + d + " :[0.1,)" )
170+ getMessageDependencies( ). each {
171+ project. dependencies. add(" compile" , " org.ros.rosjava_messages:${ it } :[0.1,)" )
160172 }
161173 def generatedSourcesDir = " ${ project.buildDir} /generated-src"
162174 def generateSourcesTask = project. tasks. create(" generateSources" , JavaExec )
0 commit comments