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 a72e069d47520a5e615a1f81f029bb40838a8d01..49a4dfbec782813e353d321573c355768d1ab4ff 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 @@ -102,6 +102,60 @@ class CatkinPackages { } } } + + def isMessagePackage(String package_name) { + def pkg + def result = false + try { + pkg = this.pkgs[package_name] + /* println(" Name: " + pkg.name + "-" + pkg.version) */ + /* println(" Dep-dependencies: " + pkg.dependencies) */ + pkg.dependencies.each { d -> + if ( d.equalsIgnoreCase("message_generation") ) { + result = true + } + } + } catch (NullPointerException e) { + /* Not a catkin package dependency (e.g. boost), ignore */ + result = false + } + return result + } + + def void generateMessageArtifact(Project p, String package_name) { + def pkg = this.pkgs[package_name] + p.version = pkg.version + /* println("Artifact: " + pkg.name + "-" + pkg.version) */ + p.dependencies.add("compile", 'org.ros.rosjava_bootstrap:message_generation:[0.1,0.2)') + List<String> messageDependencies = [] + pkg.dependencies.each { d -> + /* println(" Dependency: " + d) */ + if ( this.isMessagePackage(d) ) { + messageDependencies.add(d) + /* println(" Msg Pkg: yes") */ + } else { + /* println(" Msg Pkg: no") */ + } + } + messageDependencies.each { d -> + if ( p.getParent().getChildProjects().containsKey(d) ) { + /* println(" Internal: " + d) */ + p.dependencies.add("compile", p.dependencies.project(path: ':' + d)) + } else { + /* println(" External: " + d) */ + p.dependencies.add("compile", 'org.ros.rosjava_messages:' + d + ':[0.0,)') + } + } + def generatedSourcesDir = "${p.buildDir}/generated-src" + def generateSourcesTask = p.tasks.create("generateSources", JavaExec) + generateSourcesTask.description = "Generate sources for " + pkg.name + generateSourcesTask.outputs.dir(p.file(generatedSourcesDir)) + /* generateSourcesTask.args = new ArrayList<String>([generatedSourcesDir, pkg.name]) */ + generateSourcesTask.args = new ArrayList<String>([generatedSourcesDir, '--package-path=' + pkg.directory, pkg.name]) + generateSourcesTask.classpath = p.configurations.runtime + generateSourcesTask.main = 'org.ros.internal.message.GenerateInterfaces' + p.tasks.compileJava.source generateSourcesTask.outputs.files + } } class CatkinPackage { @@ -134,6 +188,8 @@ class CatkinPackage { * Find and annotate a list of package package dependencies. * Useful for message artifact generation). * + * Depracated, but kept around for legacy purposes, remove in igloo + * * @return List<String> : dependencies (package name strings) */ def List<String> messageDependencies() { @@ -146,6 +202,7 @@ class CatkinPackage { return msgDependencies } + /* Depracated, but kept around for legacy purposes, remove in igloo */ def void generateMessageArtifact(Project p) { p.version = version p.dependencies.add("compile", 'org.ros.rosjava_bootstrap:message_generation:[0.1,0.2)') @@ -162,6 +219,7 @@ class CatkinPackage { p.tasks.compileJava.source generateSourcesTask.outputs.files } + /* Depracated, but kept around for legacy purposes, remove in igloo */ def void generateUnofficialMessageArtifact(Project p) { /* Couple of constraints here: 1) maven group forced to org.ros.rosjava_messages to that all message artifact