76 lines
1.9 KiB
Crystal
76 lines
1.9 KiB
Crystal
|
|
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
|