diff --git a/src/context.cr b/src/context.cr index c92da2e..abc656f 100644 --- a/src/context.cr +++ b/src/context.cr @@ -71,6 +71,8 @@ class Package::Context # but it’ll be kind of enough for now. property architecture = "x86_64" + property prefixes = ["/usr", "/", "/usr/weirdos"] + def initialize @packaging_backends << Backend::Packaging.new "pkgutils" do |context, package| puts "#{package.fake_root_directory} -> #{packages_directory}/#{package.name}##{package.version}-#{package.release}.pkg.tar.xz" @@ -111,7 +113,7 @@ class Package::Context next BuildStatus::Pass end - child = context.sh "./configure --prefix=/usr #{recipe.options["configure"]? || ""}" + child = context.sh "./configure --prefix=#{recipe.prefix} #{recipe.options["configure"]? || ""}" if child.exit_status == 0 BuildStatus::Success @@ -154,19 +156,24 @@ class Package::Context @splitter_backends << Backend::Splitter.new do |recipe| Package.new(recipe, true).tap do |split| + prefixes = (@prefixes + [recipe.prefix]).uniq + split.name = "#{recipe.name}-man" - split.files = ["/usr/share/man"] + split.files = prefixes.map do |prefix| + "#{prefix}/share/man" + end end end @splitter_backends << Backend::Splitter.new do |recipe| Package.new(recipe, true).tap do |split| + prefixes = (@prefixes + [recipe.prefix]).uniq + split.name = "#{recipe.name}-dev" - split.files = ["/usr/include"] - split.file_patterns = [ - Regex.new("^/lib/.*\\.a$"), - Regex.new("^/usr/lib/.*\\.a$") - ] + split.files = prefixes.map { |x| "#{x}/include" } + split.file_patterns = prefixes.map do |prefix| + Regex.new("^" + prefix + ".*\\.a$") + end end end end diff --git a/src/recipe.cr b/src/recipe.cr index c699207..d0a9803 100644 --- a/src/recipe.cr +++ b/src/recipe.cr @@ -57,6 +57,8 @@ class Package::Recipe getter sources = Sources.new getter packages = Array(Package).new + @prefix : String? + property recipe_directory = "." @working_uuid : UUID = UUID.random @@ -74,7 +76,8 @@ class Package::Recipe def initialize(@context, filename : String) specs = SpecFileParser.parse filename, { - "pkg" => fake_root_directory + "pkg" => fake_root_directory, + "prefix" => prefix } name : String? = nil @@ -112,6 +115,8 @@ class Package::Recipe @instructions.install << value.as_s_or_ls when "dirname" @dirname = value.as_s + when "prefix" + @prefix = value.as_s when "dependencies" value.as_a_or_s.each do |atom| @run_dependencies << atom @@ -182,6 +187,10 @@ class Package::Recipe @dirname || "#{name}-#{version}" end + def prefix : String + @prefix || @context.prefixes[0]? || "/usr" + end + def download sources.each do |url| next if url.scheme == "file"