From 02aef3d8da52da6d92ce75f61270ea7eb9e5ecbe Mon Sep 17 00:00:00 2001
From: Daniel Stonier <d.stonier@gmail.com>
Date: Fri, 8 Nov 2013 20:23:36 +0900
Subject: [PATCH] bugfixed artifact generator for messages, now handles
 external dependencies correctly.

---
 .../ros/gradle_plugins/CatkinPlugin.groovy    | 27 +++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)

diff --git a/gradle_plugins/src/main/groovy/org/ros/gradle_plugins/CatkinPlugin.groovy b/gradle_plugins/src/main/groovy/org/ros/gradle_plugins/CatkinPlugin.groovy
index c4fe340..f1e6333 100644
--- a/gradle_plugins/src/main/groovy/org/ros/gradle_plugins/CatkinPlugin.groovy
+++ b/gradle_plugins/src/main/groovy/org/ros/gradle_plugins/CatkinPlugin.groovy
@@ -146,7 +146,7 @@ class CatkinPackage {
     
     def void generateMessageArtifact(Project p) {
         p.version = version
-        p.dependencies.add("compile", 'org.ros.rosjava_bootstrap:message_generation:[0.1,)')
+        p.dependencies.add("compile", 'org.ros.rosjava_bootstrap:message_generation:[0.1,0.2)')
         messageDependencies().each { d ->
             p.dependencies.add("compile", p.dependencies.project(path: ':' + d))
         }
@@ -160,13 +160,36 @@ class CatkinPackage {
         p.tasks.compileJava.source generateSourcesTask.outputs.files
     }
 
+    def void generateUnofficialMessageArtifact(Project p) {
+        /* Couple of constraints here:
+             1) maven group forced to org.ros.rosjava_messages to that all message artifact
+                dependencies are easily found.
+             2) Open ended dependency range (takes the latest in ROS_PACKAGE_PATH) since we
+                don't know the artifact versions the user really wants.
+        */
+        p.version = version
+        p.group = 'org.ros.rosjava_messages'
+        p.dependencies.add("compile", 'org.ros.rosjava_bootstrap:message_generation:[0.1,0.2)')
+        messageDependencies().each { d ->
+            p.dependencies.add("compile", 'org.ros.rosjava_messages:' + d + ':[0.1,)')
+        }
+        def generatedSourcesDir = "${p.buildDir}/generated-src"
+        def generateSourcesTask = p.tasks.create("generateSources", JavaExec)
+        generateSourcesTask.description = "Generate sources for " + name
+        generateSourcesTask.outputs.dir(p.file(generatedSourcesDir))
+        generateSourcesTask.args = new ArrayList<String>([generatedSourcesDir, name])
+        generateSourcesTask.classpath = p.configurations.runtime
+        generateSourcesTask.main = 'org.ros.internal.message.GenerateInterfaces'
+        p.tasks.compileJava.source generateSourcesTask.outputs.files
+    }
+
     /*
      * Hack to work around for rosjava_test_msgs - look in a subfolder for the
      * msgs and name the artifact by the subfolder name/version.
      */
     def void generateMessageArtifactInSubFolder(Project p, String subfolderName, List<String> dependencies) {
         // p.version = version use the subfolder's project version
-        p.dependencies.add("compile", 'org.ros.rosjava_bootstrap:message_generation:[0.1,)')
+        p.dependencies.add("compile", 'org.ros.rosjava_bootstrap:message_generation:[0.1,0.2)')
         dependencies.each { d ->
             p.dependencies.add("compile", p.dependencies.project(path: ':' + d))
         }
-- 
GitLab