module Autoproj::AutobuildExtensions::Package
Attributes
The Autoproj::PackageManifest
object that describes this package
Set {#use_package_xml?}
Public Class Methods
# File lib/autoproj/autobuild_extensions/package.rb, line 19 def initialize(spec = Hash.new) super @ws = nil @os_packages = Set.new @added_tags = Set.new @optional_dependencies = Set.new @description = PackageManifest.new(self, null: true) @use_package_xml = false @internal_dependencies = [] end
Public Instance Methods
Add a tag to the package. Use this if you don’t want the tag to be shared with everyone that uses the package (i.e. cannot go in manifest.xml)
# File lib/autoproj/autobuild_extensions/package.rb, line 57 def add_tag(tag) @added_tags << tag end
# File lib/autoproj/autobuild_extensions/package.rb, line 115 def all_dependencies_with_osdeps(set = Set.new) original_set = set.dup all_dependencies(set) set.dup.each do |dep_pkg_name| next if original_set.include?(dep_pkg_name) if (dep_pkg = ws.manifest.find_autobuild_package(dep_pkg_name)) set.merge(dep_pkg.os_packages) else raise ArgumentError, "#{dep_pkg_name}, which is listed as a dependency "\ "of #{name}, is not the name of a known package" end end set.merge(os_packages) set end
# File lib/autoproj/autobuild_extensions/package.rb, line 105 def depends_on(name) name = name.name if name.respond_to?(:name) # probably a Package object pkg_autobuild, pkg_os = partition_package(name) pkg_autobuild.each do |pkg| super(pkg) end @os_packages.merge(pkg_os.to_set) end
# File lib/autoproj/autobuild_extensions/package.rb, line 133 def depends_on_os_package(name) depends_on(name) end
True if this package is tagged with the given tag string
# File lib/autoproj/autobuild_extensions/package.rb, line 62 def has_tag?(tag) tags.include?(tag.to_s) end
# File lib/autoproj/autobuild_extensions/package.rb, line 38 def internal_dependencies @internal_dependencies.dup end
@api private
Adds and ‘internal’ dependency to the package ‘Internal’ dependencies are actually autobuild dependencies for a given package type. It is assumed that only osdeps that do not rely on strict package managers will be declared as internal dependencies.
The difference between a regular “os dependency” is that the internal dependency is installed right after the impport phase (before the actual osdeps phase)
# File lib/autoproj/autobuild_extensions/package.rb, line 154 def internal_dependency(osdeps_name) @internal_dependencies << osdeps_name end
# File lib/autoproj/autobuild_extensions/package.rb, line 158 def optional_dependency(name) optional_dependencies << name end
# File lib/autoproj/autobuild_extensions/package.rb, line 177 def partition_optional_dependencies packages = [] osdeps = [] optional_dependencies.each do |name| pkg_autobuild, pkg_osdeps = partition_package(name) packages.concat(pkg_autobuild) osdeps.concat(pkg_osdeps) rescue Autoproj::PackageNotFound # Simply ignore non-existent optional dependencies end [packages, osdeps] end
# File lib/autoproj/autobuild_extensions/package.rb, line 162 def partition_package(pkg_name) pkg_autobuild = [] pkg_osdeps = [] ws.manifest.resolve_package_name(pkg_name, include_unavailable: true).each do |type, dep_name| if type == :osdeps pkg_osdeps << dep_name elsif type == :package pkg_autobuild << dep_name else raise Autoproj::InternalError, "expected package type to be either :osdeps or :package, got #{type.inspect}" end end [pkg_autobuild, pkg_osdeps] end
Ask autoproj to run the given block after this package has been imported
# File lib/autoproj/autobuild_extensions/package.rb, line 97 def post_import(&block) Autoproj.post_import(self, &block) end
# File lib/autoproj/autobuild_extensions/package.rb, line 137 def remove_dependency(name) dependencies.delete name optional_dependencies.delete name os_packages.delete name end
Asks autoproj to remove the given file in the package’s installation prefix
# File lib/autoproj/autobuild_extensions/package.rb, line 85 def remove_obsolete_installed_file(*path) post_install do path = File.join(prefix, *path) if File.exist?(path) Autoproj.message " removing obsolete file #{path}", :bold FileUtils.rm_f path end end end
Asks autoproj to remove references to the given obsolete oroGen package
# File lib/autoproj/autobuild_extensions/package.rb, line 68 def remove_obsolete_installed_orogen_package(name) post_install do path = File.join(prefix, "lib", "pkgconfig") Dir.glob(File.join(path, "#{name}-*.pc")) do |pcfile| Autoproj.message " removing obsolete file #{pcfile}", :bold FileUtils.rm_f pcfile end pcfile = File.join(path, "orogen-project-#{name}.pc") if File.exist?(pcfile) Autoproj.message " removing obsolete file #{pcfile}", :bold FileUtils.rm_f pcfile end end end
Whether we should use a package.xml file present in this package (parsed as ROS’ catkin would) instead of Autoproj’s manifest.xml
@see use_package_xml
=
# File lib/autoproj/autobuild_extensions/package.rb, line 34 def use_package_xml? @use_package_xml end
# File lib/autoproj/autobuild_extensions/package.rb, line 12 def ws @ws ||= Autoproj.workspace end