@@ -23,7 +23,7 @@ import org.gradle.api.*;
23
23
* println d
24
24
* }
25
25
* // filtered list of *_msg dependencies.
26
- * pkg.messageDependencies ().each { d ->
26
+ * pkg.getMessageDependencies ().each { d ->
27
27
* println d
28
28
* }
29
29
* }
@@ -32,7 +32,7 @@ import org.gradle.api.*;
32
32
* only generate the properties once and share them this way.
33
33
*/
34
34
class CatkinPlugin implements Plugin<Project > {
35
- def void apply (Project project ) {
35
+ def void apply (Project project ) {
36
36
project. extensions. create(" catkin" , CatkinPluginExtension )
37
37
38
38
def workspaces = System . getenv(" ROS_PACKAGE_PATH" )
@@ -48,7 +48,7 @@ class CatkinPlugin implements Plugin<Project> {
48
48
if (! packageXml. exists()) {
49
49
throw new StopActionException (" Missing package.xml for project: ${ project} " )
50
50
}
51
- project. catkin. pkg = new CatkinPackage (packageXml)
51
+ project. catkin. pkg = new CatkinPackage (project, packageXml)
52
52
53
53
project. task(" catkinPackageInfo" ) << {
54
54
println " Catkin Workspaces: ${ project.catkin.workspaces} "
@@ -64,26 +64,31 @@ class CatkinPluginExtension {
64
64
}
65
65
66
66
class CatkinPackages {
67
- def Map<String , CatkinPackage > pkgs
68
- def List<String > workspaces
69
- def Project project
70
67
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 ) {
72
73
this . project = project
73
74
this . workspaces = workspaces
74
75
pkgs = [:]
75
76
}
76
77
77
- def generate () {
78
+ void generate () {
78
79
if (pkgs. size() == 0 ) {
79
80
workspaces. each { workspace ->
80
- def manifestTree = project. fileTree(dir : workspace, include : " **/package.xml" )
81
+ def manifestTree = project. fileTree(dir : workspace,
82
+ include : " **/package.xml" )
81
83
manifestTree. each {
82
- def pkg = new CatkinPackage (it)
84
+ def pkg = new CatkinPackage (project, it)
83
85
if (pkgs. containsKey(pkg. name)) {
86
+ // TODO(damonkohler): This comparison probably doesn't work since
87
+ // versions are strings.
84
88
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
+ " ." )
87
92
pkgs[pkg. name] = pkg
88
93
}
89
94
} else {
@@ -96,44 +101,51 @@ class CatkinPackages {
96
101
}
97
102
98
103
class CatkinPackage {
99
- def name
100
- def version
101
- def dependencies
102
104
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
104
112
println " Loading " + packageXmlFilename
105
113
def packageXml = new XmlParser (). parse(packageXmlFilename)
106
114
name = packageXml. name. text()
107
115
version = packageXml. version. text()
108
- dependencies = packageXml. build_depend. collect( { it. text() })
116
+ dependencies = packageXml. build_depend. collect{ it. text() }
109
117
}
110
118
111
119
String toString () { " ${ name} ${ version} ${ dependencies} " }
112
120
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 ) {
120
122
Set<String > result = [];
121
123
dependencies. each {
122
124
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))
127
128
}
128
129
}
129
130
return result
130
131
}
131
132
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
+
132
140
void generateMessageArtifact (Project project ) {
133
141
project. version = version
134
142
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
+ }
137
149
}
138
150
def generatedSourcesDir = " ${ project.buildDir} /generated-src"
139
151
def generateSourcesTask = project. tasks. create(" generateSources" , JavaExec )
@@ -155,8 +167,8 @@ class CatkinPackage {
155
167
project. version = version
156
168
project. group = " org.ros.rosjava_messages"
157
169
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,)" )
160
172
}
161
173
def generatedSourcesDir = " ${ project.buildDir} /generated-src"
162
174
def generateSourcesTask = project. tasks. create(" generateSources" , JavaExec )
0 commit comments