This repository has been archived on 2022-01-17. You can view files and clone it, but cannot push or open issues/pull-requests.
packaging/src/backends/splitter.cr

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