class Package::Backend::Splitter def initialize(&block : Proc(Recipe, Package)) @callback = block end def create_split(recipe : Recipe) : Package @callback.call recipe end # Package::Backend::Splitter = create new package # takes (then stores) the given block # this block takes a recipe as a parameter and create a new package # the new package: # keep prefixes # new name = split name (-man, -src, ...) # split files # Man-pages and documentation def self.man(prefixes : Array(String)) : Splitter Backend::Splitter.new do |recipe| Package.new(recipe, true).tap do |split| prefixes = (prefixes + [recipe.prefix]).uniq split.name = "#{recipe.name}-man" split.files = prefixes.map do |prefix| "#{prefix}/share/man" end split.recipe.require_stripping = false end end end # Developer's files: headers, pkgconfig files, *.a. def self.dev(prefixes : Array(String)) : Splitter Backend::Splitter.new do |recipe| Package.new(recipe, true).tap do |split| prefixes = (prefixes + [recipe.prefix]).uniq split.name = "#{recipe.name}-dev" split.files = prefixes.map do |prefix| [ "#{prefix}/include", "#{prefix}/lib/pkgconfig" ] end.flatten split.file_patterns = prefixes.map do |prefix| Regex.new("^" + prefix + ".*\\.a$") end # Any prefix containing "/include/" split.file_patterns.not_nil! << Regex.new(".*/include/.*.h(pp)?") end end end # Source files: prefix containing "src". def self.src(prefixes : Array(String)) : Splitter Backend::Splitter.new do |recipe| Package.new(recipe, true).tap do |split| prefixes = (prefixes + [recipe.prefix]).uniq split.name = "#{recipe.name}-src" split.files = prefixes.map do |prefix| [ "#{prefix}/lib/share/src", "#{prefix}/src", "#{prefix}/usr/src", "#{prefix}/usr/local/src" ] end.flatten split.recipe.require_stripping = false end end end end