From e6fb4d6c3db00ff0ba5c40c492fba36721e65cf9 Mon Sep 17 00:00:00 2001 From: Luka Vandervelden Date: Thu, 22 Aug 2019 19:16:08 +0200 Subject: [PATCH] Splits can be defined in recipes. This is done using `%split split-name` sections. `files` and `file-patterns` are both array attributes that can be provided to set what paths or files should go in them. Other variables can be overriden as well from that %split section. --- src/package.cr | 32 ++++++++++++++++++++++++++++++++ src/recipe.cr | 14 +++++++------- 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/src/package.cr b/src/package.cr index 0f813ae..26a9c65 100644 --- a/src/package.cr +++ b/src/package.cr @@ -1,3 +1,4 @@ +require "specfileparser" class Package::Package getter recipe : Recipe @@ -6,6 +7,37 @@ class Package::Package def initialize(@recipe, @automatic = false, @fake_root_directory = nil) end + def initialize(@recipe, section : SpecFileParser::Section) + @automatic = false + + @name = section.options[0] + + section.content.each do |name, value| + case name + when "version" + @version = value.as_s + when "release" + @release = value.as_s.to_i + when "url" + @url = value.as_s + when "description" + @description = value.as_s_or_ls + when "dependencies" + # Remember, no build-dep versus run-dep for + # packages! Build-deps are recipe-only! + @dependencies = value.as_a_or_s + when "conflicts" + @conflicts = value.as_a_or_s + when "provides" + @provides = value.as_a_or_s + when "files" + @files = value.as_a_or_s + when "file-patterns" + @file_patterns = value.as_a_or_s.map { |x| Regex.new x } + end + end + end + macro inherit(attribute) @{{attribute.var.id}} : {{attribute.type.id}}? diff --git a/src/recipe.cr b/src/recipe.cr index 8264a9b..8c2b3af 100644 --- a/src/recipe.cr +++ b/src/recipe.cr @@ -158,14 +158,15 @@ class Package::Recipe @name = name @version = version - end - def self.new(context, filename : String) - instance = Recipe.allocate.tap &.initialize(context, filename) + # Packages can only be created once @name and @version exist! + @packages << Package.new self, false, fake_root_directory - instance.packages << Package.new instance, false, instance.fake_root_directory - - instance + specs.sections.each do |section| + if section.name == "split" + @packages << Package.new self, section + end + end end def working_directory @@ -264,7 +265,6 @@ class Package::Recipe FileUtils.find fake_root_directory do |file| file = file[fake_root_directory.size..file.size] - pp! file files_to_split << file if file_patterns.any? &.match file end