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/package.cr

87 lines
2.0 KiB
Crystal
Raw Permalink Normal View History

require "specparser"
2019-07-02 03:50:50 +02:00
class Package::Package
2019-07-03 05:23:48 +02:00
getter recipe : Recipe
getter automatic : Bool # Was the package created by automatic splitting?
# Reference for splits. Recipe#packages[0] should keep this set to `nil`.
property files : Array(String)?
property file_patterns : Array(Regex)?
property fake_root_directory : String?
2019-07-02 03:50:50 +02:00
2019-08-02 23:58:42 +02:00
def initialize(@recipe, @automatic = false, @fake_root_directory = nil)
end
def initialize(@recipe, section : SpecParser::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"
2021-02-28 20:56:51 +01:00
# 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
# Most of the attributes are inherited from recipe.
macro inherit(attribute)
@{{attribute.var.id}} : {{attribute.type.id}}?
def {{attribute.var.id}} : {{attribute.type.id}}
@{{attribute.var.id}} || @recipe.{{attribute.var.id}}
end
def {{attribute.var.id}}=(new_value : {{attribute.type.id}})
@{{attribute.var.id}} = new_value
end
end
inherit name : String
inherit version : String
inherit release : Int32
inherit url : String?
inherit description : String?
2019-08-06 20:55:24 +02:00
setter dependencies : Array(String)?
inherit conflicts : Array(String)
inherit provides : Array(String)
2019-09-06 00:39:11 +02:00
inherit prefix : String
2019-08-06 20:55:24 +02:00
def dependencies
@dependencies || @recipe.run_dependencies
end
2019-07-04 07:51:00 +02:00
def fake_root_directory
2019-08-02 23:58:42 +02:00
@fake_root_directory || "#{recipe.working_directory}/root-#{name}"
2019-07-04 07:51:00 +02:00
end
2021-02-28 20:56:51 +01:00
def to_s(io : IO)
io << "<Package: #{name}-#{version}>"
2019-07-02 03:50:50 +02:00
end
end