qrpm 0.0.3 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/qrpm/rpm.rb CHANGED
@@ -2,59 +2,102 @@ require 'erb'
2
2
  require 'fileutils'
3
3
 
4
4
  module Qrpm
5
+ # Knows the following RPM fields:
6
+ #
7
+ # name Package name (mandatory)
8
+ # version Version (mandatory)
9
+ # release Release
10
+ # summary Short one-line description of package (mandatory)
11
+ # description Description
12
+ # packager Name of the packager (defaults to the name of the user or
13
+ # $USER@$HOSTNAME if not found)
14
+ # license License (defaults to GPL)
15
+ # require Array of required packages
16
+ # make Controls the build process:
17
+ # null Search the top-level directory for configure or
18
+ # make files and runs them. Skip building if not
19
+ # found. This is the default
20
+ # true Expect the top-level directory to contain
21
+ # configure or make files and runs them. It is an
22
+ # error if the Makefile is missing
23
+ # (array of commands)
24
+ # Runs the commands to build the project
25
+ #
26
+ # Each field has a dynamically generated accessor method that can be
27
+ # referenced in the template file
5
28
  class Rpm
6
- # Defines the following member methods:
7
- #
8
- # name Package name
9
- # version Version
10
- # release Release
11
- # license License (defaults to GPL)
12
- # summary Short one-line description of package
13
- # description Description
14
- # packager Name of the packager (defaults to the name of the current
15
- # user or the value of the $USER environment variable if not
16
- # found)
17
- # require Array of required packages
18
- # make Controls the build process:
19
- # null Search the top-level directory for configure or
20
- # make files and runs them. Skip building if not
21
- # found. This is the default
22
- # true Expect the top-level directory to contain
23
- # configure make files and runs them. It is an
24
- # error if the Makefile is missing
25
- # (array of commands)
26
- # Runs the commands to build the project
27
- #
28
- FIELDS = %w(name version release group license summary description packager requires make)
29
- MANDATORY_FIELDS = %w(name summary version)
30
- TEMPLATE = "#{::File.dirname(__FILE__)}/template.erb"
29
+ MANDATORY_FIELDS = %w(name version summary)
30
+
31
+ # Maps from field name to array of allowed types for that field
32
+ FIELDS = MANDATORY_FIELDS.map { |f| [f, [String]] }.to_h.merge({
33
+ "release" => [String],
34
+ "description" => [String],
35
+ "packager" => [String],
36
+ "license" => [String],
37
+ "group" => [String],
38
+ "include" => [Array, String],
39
+ "require" => [Array, String],
40
+ "make" => [Array, String]
41
+ })
31
42
 
32
43
  RPM_DIRS = %w(SOURCES BUILD RPMS SPECS SRPMS tmp)
33
44
 
34
- # Field accessor methods
35
- FIELDS.each { |f| eval "def #{f}() @fields[\"#{f}\"] end" }
45
+ # Field accessor methods. FIXME Value should have been resolved
46
+ FIELDS.each { |f,ts|
47
+ if ts.include? Array
48
+ eval <<-EOS
49
+ def #{f}()
50
+ case v = @fields["#{f}"]
51
+ when ValueNode
52
+ v.value
53
+ when ArrayNode
54
+ v.values.map(&:value)
55
+ else
56
+ raise ArgumentError, "Can this even happen?"
57
+ end
58
+ end
59
+ EOS
60
+ else
61
+ eval "def #{f}() @fields[\"#{f}\"]&.value end"
62
+ end
63
+ }
36
64
 
37
65
  attr_reader :fields
38
66
  attr_reader :nodes
39
67
 
68
+ # The source directory
69
+ attr_reader :srcdir
70
+
40
71
  # The content of the SPEC file
41
72
  attr_reader :spec
42
73
 
43
74
  def files() @files ||= nodes.select(&:file?) end
44
- def links() @lines ||= nodes.select(&:link?) end
45
-
46
- def has_configure?() ::File.exist? "configure" end
47
- def has_make?() ::File.exist? "make" end
48
-
49
- def initialize(fields, nodes, template: TEMPLATE)
75
+ def links() @links ||= nodes.select(&:link?) end
76
+ def reflinks() @reflinks ||= nodes.select(&:reflink?) end
77
+ def symlinks() @symlinks ||= nodes.select(&:symlink?) end
78
+
79
+ def initialize(srcdir, fields, nodes, template: QRPM_ERB_FILE)
80
+ constrain srcdir, String
81
+ constrain fields, String => Node
82
+ constrain nodes, [FileNode]
50
83
  @fields, @nodes = fields, nodes
84
+ @srcdir = srcdir
51
85
  @template = template
52
86
  end
53
87
 
54
- def build(target: :rpm, file: nil)
55
- Dir.mktmpdir { |rootdir|
56
- FileUtils.rm_rf(rootdir)
57
- FileUtils.mkdir_p(rootdir)
88
+ def has_configure?() ::File.exist? "#{srcdir}/configure" end
89
+ def has_make?() ::File.exist? "#{srcdir}/Makefile" end
90
+
91
+ def build(target: :rpm, file: nil, verbose: false, destdir: ".", builddir: nil)
92
+ verb = verbose ? "" : "&>/dev/null"
93
+ begin
94
+ if builddir
95
+ rootdir = builddir
96
+ FileUtils.rm_rf(rootdir)
97
+ FileUtils.mkdir_p(rootdir)
98
+ else
99
+ rootdir = Dir.mktmpdir
100
+ end
58
101
 
59
102
  spec_file = file || "#{name}.spec"
60
103
  tar_file = "#{name}.tar.gz"
@@ -64,47 +107,51 @@ module Qrpm
64
107
  # Create directories
65
108
  RPM_DIRS.each { |dir| FileUtils.mkdir_p "#{rootdir}/#{dir}" }
66
109
 
67
- # Directory for tarball creation. This lives inside the RPM directory
68
- # structure and is removed before we start rpmbuild
69
- tarroot = "#{rootdir}/tmp/#{name}"
70
- FileUtils.mkdir(tarroot)
71
-
72
- # Copy files
73
- FileUtils.cp_r(".", tarroot, preserve: true)
74
-
75
- # Roll tarball and put it in the SOURCES directory
76
- system "tar zcf #{tar_path} -C #{rootdir}/tmp #{name}" or raise "Can't roll tarball"
77
-
78
- # Remove temporary tar dir
79
- FileUtils.rm_rf tarroot
80
-
81
- # Create spec file
110
+ # Roll tarball
111
+ #
112
+ # It is a bad idea to use git-archive to roll a tarball because we may
113
+ # have configuration files/scripts that are not included in the git
114
+ # repository. If needed then see
115
+ # https://gist.github.com/arteymix/03702e3eb05c2c161a86b49d4626d21f
116
+ #
117
+ # Alternatively use the --add-file option? Then we need to know if
118
+ # files are in the git repo or not
119
+ system "tar zcf #{tar_path} --transform=s%^\./%#{name}/% ." # FIXME FIXME
120
+
121
+ # Create spec file. Initial blanks are removed from each line in the file
82
122
  renderer = ERB.new(IO.read(@template).sub(/^__END__\n.*/m, ""), trim_mode: "-")
83
- @spec = renderer.result(binding)
123
+ @spec = renderer.result(binding).gsub(/^[[:blank:]]*/, "")
84
124
 
85
125
  # Emit spec or build RPM
86
126
  if target == :spec
87
- IO.write(spec_file, @spec)
127
+ destfiles = ["#{destdir}/#{spec_file}"]
128
+ IO.write(destfiles.first, @spec)
88
129
  else
89
130
  IO.write(spec_path, @spec)
90
- system "rpmbuild -v -ba --define \"_topdir #{rootdir}\" #{rootdir}/SPECS/#{name}.spec" or
91
- raise "Failed building RPM file"
131
+ system "rpmbuild -v -ba --define \"_topdir #{rootdir}\" #{rootdir}/SPECS/#{name}.spec #{verb}" or
132
+ raise "Failed building RPM file. Re-run with -v option to see errors"
92
133
  if target == :srpm
93
- system "cp #{rootdir}/SRPMS/* ." or raise "Failed copying SRPM file"
134
+ destfiles = Dir["#{rootdir}/SRPMS/*"]
135
+ !destfiles.empty? or raise Error, "No SRPM file found"
94
136
  elsif target == :rpm
95
- system "cp #{rootdir}/RPMS/*/#{name}-[0-9]* ." or raise "Failed copying RPM file"
137
+ destfiles = Dir["#{rootdir}/RPMS/*/#{name}-[0-9]*"]
138
+ !destfiles.empty? or raise Error, "No RPM file found"
96
139
  else
97
140
  raise ArgumentError, "Not a valid value for :target - #{target.inspect}"
98
141
  end
142
+ system "cp #{destfiles.join " "} #{destdir}" or raise "Failed copying SRPM file"
99
143
  end
100
- }
144
+ return destfiles
145
+ ensure
146
+ FileUtils.remove_entry_secure rootdir if !builddir
147
+ end
101
148
  end
102
149
 
103
150
  def dump
104
151
  puts self.class
105
152
  indent {
106
153
  puts "fields"
107
- indent { fields.each { |k,v| puts "#{k}: #{v.inspect}" } }
154
+ indent { fields.sort_by(&:first).each { |k,v| puts "#{k}: #{v.value}" } }
108
155
  puts "nodes"
109
156
  indent { nodes.map(&:dump) }
110
157
  }
@@ -1,4 +1,3 @@
1
-
2
1
  Name: <%= name %>
3
2
  Summary: <%= summary %>
4
3
  Version: <%= version %>
@@ -6,13 +5,12 @@ Release: <%= release %>
6
5
  License: <%= license %>
7
6
  Packager: <%= packager %>
8
7
  <% if group -%>
9
- Group: <%= group %>
8
+ Group: <%= group %>
10
9
  <% end -%>
11
- <% for pck in requires || [] -%>
12
- Requires: <%= pck %>
10
+ <% for pck in require || [] -%>
11
+ Requires: <%= pck %>
13
12
  <% end -%>
14
13
  Source: %{name}.tar.gz
15
- BuildRoot: <%= rootdir %>/tmp/%{name}-%{version}
16
14
 
17
15
  %description
18
16
  <%= description %>
@@ -21,55 +19,56 @@ BuildRoot: <%= rootdir %>/tmp/%{name}-%{version}
21
19
  %setup -n <%= name %>
22
20
 
23
21
  %build
22
+ cd <%= srcdir %>
24
23
  <% if make.nil? -%>
25
- <% if has_configure? -%>
26
- ./configure
27
- <% end -%>
28
- <% if has_make? -%>
29
- make
30
- <% end -%>
24
+ <% if has_configure? -%>
25
+ ./configure
26
+ <% end -%>
27
+ <% if has_make? -%>
28
+ make
29
+ <% end -%>
31
30
  <% elsif make == false -%>
32
31
  <% elsif make == true -%>
33
- <% if has_configure? -%>
34
- ./configure
35
- <% end -%>
36
- make
32
+ <% if has_configure? -%>
33
+ ./configure
34
+ <% end -%>
35
+ make
37
36
  <% elsif make.is_a? Array -%>
38
- <% for cmd in make -%>
39
- <%= cmd %>
40
- <% end -%>
37
+ <% for cmd in make -%>
38
+ <%= cmd.value %>
39
+ <% end -%>
41
40
  <% end -%>
42
41
 
43
42
  %install
44
43
  <% if !nodes.empty? -%>
45
44
  mkdir -p <%= nodes.map { |f| "%{buildroot}#{f.directory}" }.uniq.join(" ") %>
46
45
  <% for file in files -%>
47
- cp <%= file.file %> %{buildroot}<%= file.path %>
46
+ cp <%= file.srcpath %> %{buildroot}<%= file.dstpath %>
48
47
  <% end -%>
49
48
  <% for link in links -%>
50
- touch %{buildroot}<%= link.path %>
49
+ touch %{buildroot}<%= link.dstpath %>
51
50
  <% end -%>
52
51
  <% end -%>
53
52
 
54
53
  %files
55
54
  <% for file in files -%>
56
- <%= file.path %>
55
+ <%= file.dstpath %>
57
56
  <% end -%>
58
57
  <% for link in links -%>
59
- %ghost <%= link.path %>
58
+ %ghost <%= link.dstpath %>
60
59
  <% end -%>
61
60
 
62
61
  %clean
63
- %if "%{clean}" != ""
64
- rm -rf %{_topdir}/BUILD/%{name}
65
- [ $(basename %{buildroot}) == "%{name}-%{version}-%{release}.%{_target_cpu}" ] && rm -rf %{buildroot}
66
- %endif
62
+ true # no-op
67
63
 
68
64
  %post
69
65
  <% for file in files.select(&:perm) -%>
70
- chmod <%= file.perm %> <%= file.path %>
66
+ chmod <%= file.perm %> <%= file.dstpath %>
67
+ <% end -%>
68
+ <% for file in reflinks -%>
69
+ ln -sf <%= link.reflink %> <%= link.dstpath %>
71
70
  <% end -%>
72
- <% for file in links -%>
73
- ln -sf <%= link.link %> <%= link.path %>
71
+ <% for file in symlinks -%>
72
+ ln -sf <%= link.symlink %> <%= link.dstpath %>
74
73
  <% end -%>
75
74
 
@@ -45,7 +45,7 @@ make: null # make can be undefined or null (use make if present), false
45
45
  #
46
46
  # It is used like this
47
47
  #
48
- # /opt/my_files
48
+ # /opt/my_files:
49
49
  # - name: data
50
50
  # file: src/my_data
51
51
  # perm: 600
@@ -53,18 +53,17 @@ make: null # make can be undefined or null (use make if present), false
53
53
  # This will copy src/my_data to a 'data' file in the /opt/my_files directory
54
54
  # with permissions 0600
55
55
  #
56
- # Links can only be specified using attributes
56
+ # Link files are specified using the :link attribute that is a path on the
57
+ # target system:
57
58
  #
58
- # name: Destination file name. Default is the last path component in :link
59
- # link: Path to the file that will be pointed to by the link
59
+ # /opt/my_files:
60
+ # - name: linked_data
61
+ # link: /opt/my_files/data
60
62
  #
61
- # To create a symbolic link in /var/lib/ from my_app to /opt/my_files/data:
63
+ # Default name for link files is the basename of of :link
62
64
  #
63
- # libdir:
64
- # - name: my_app
65
- # link: /opt/my_files/data
66
65
  #
67
- # The following standard directories are defined:
66
+ # The following standard directories are defined: FIXME Outdated
68
67
  #
69
68
  # etcdir /etc Configuration files
70
69
  # bindir /usr/bin Executables
@@ -72,16 +71,20 @@ make: null # make can be undefined or null (use make if present), false
72
71
  # libdir /usr/lib Libraries (both binary and clear text)
73
72
  # libexecdir /usr/libexec Executable subprograms (not meant to be
74
73
  # called indepentently)
75
- # sharedir /usr/share Constant data files. FIXME: Always a subdir
74
+ # sharedir /usr/share Constant data files
76
75
  # vardir /var/lib Variable data files
77
76
  # spooldir /var/spool Spool files
78
77
  # rundir /var/run Run files
79
78
  # lockdir /var/lock Lock files
80
79
  # cachedir /var/cache Cache directory
81
- # tmpdir /tmp Temporary directory (deleted when the '
82
- # machine starts)
80
+ # tmpdir /tmp Temporary directory (deleted between restarts)
81
+ # vartmpdir /var/tmp TODO
83
82
  # logdir /var/log Log directory
84
83
  #
84
+ # pckdir <package-name> Name of package directory. It is always the
85
+ # name of the directory in /usr/share
86
+ #
87
+ #
85
88
  # Each standard directory can also be prefixed a 'pck'. That will create a
86
89
  # subdirectory with the package's name in the base standard directory. Eg.
87
90
  # 'pcketcdir' will create the directory '/etc/<name>'
data/lib/qrpm/utils.rb ADDED
@@ -0,0 +1,10 @@
1
+ module Qrpm
2
+ # Get full name of user, defaults to username '@' hostname
3
+ def self.fullname
4
+ s = Etc.getpwnam(ENV['USER'])&.gecos
5
+ if s.nil? || s == ""
6
+ s = "#{ENV['USER']}@#{ENV['HOSTNAME']}"
7
+ end
8
+ s
9
+ end
10
+ end
data/lib/qrpm/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Qrpm
4
- VERSION = "0.0.3"
4
+ VERSION = "0.3.0"
5
5
  end
data/lib/qrpm.rb CHANGED
@@ -1,16 +1,122 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'etc'
4
+
5
+ require 'indented_io'
6
+ require "constrain"
7
+ require "forward_to"
8
+
9
+ include Constrain
10
+ include ForwardTo
11
+
3
12
  require_relative "qrpm/version"
4
13
  require_relative "qrpm/node.rb"
14
+ require_relative "qrpm/fragment.rb"
15
+ require_relative "qrpm/lexer.rb"
16
+ require_relative "qrpm/compiler.rb"
17
+ require_relative "qrpm/qrpm.rb"
5
18
  require_relative "qrpm/rpm.rb"
6
- require_relative "qrpm/parser.rb"
19
+ require_relative "qrpm/utils.rb"
7
20
 
8
21
  module Qrpm
9
22
  class Error < RuntimeError; end
23
+ class CompileError < StandardError; end
24
+ class AbstractMethodError < StandardError; end
25
+ def abstract_method = raise AbstractMethodError.new "Abstract method called"
10
26
 
11
27
  QRPM_CONFIG_FILE = "qrpm.yml"
12
28
 
13
29
  QRPM_SHARE_DIR = "#{::File.dirname(__FILE__)}/../lib/qrpm"
14
30
  QRPM_CONFIG_FILE_TEMPLATE = "#{QRPM_SHARE_DIR}/template.yml"
15
31
  QRPM_ERB_FILE = "#{QRPM_SHARE_DIR}/template.erb"
32
+
33
+ # Should be defined and non-empty
34
+ MANDATORY_FIELDS = Rpm::MANDATORY_FIELDS
35
+
36
+ # Maps from field name to array of allowed types for that field
37
+ FIELDS = Rpm::FIELDS.map { |k,ts|
38
+ nts = ts.map { |t|
39
+ if t == String
40
+ ValueNode
41
+ elsif t == Array
42
+ ArrayNode
43
+ else
44
+ raise ArgumentError, "Illegal type: #{t.inspect}"
45
+ end
46
+ }
47
+ [k, nts]
48
+ }.to_h
49
+
50
+ STANDARD_DIRS = %w(
51
+ etcdir bindir sbindir libdir libexecdir sharedir docdir vardir spooldir
52
+ rundir lockdir cachedir logdir tmpdir
53
+ )
54
+
55
+ ROOT_DIRS = {
56
+ rootdir: "/",
57
+ rootconfdir: "$rootdir/etc",
58
+ rootexecdir: "$rootdir/usr",
59
+ rootlibdir: "$rootdir/usr",
60
+ rootconstdir: "$rootdir/usr/share",
61
+ rootdocdir: "$rootconstdir",
62
+ rootdatadir: "$rootdir/var"
63
+ }
64
+
65
+ SYSTEM_DIRS = {
66
+ sysetcdir: "$rootconfdir",
67
+ sysbindir: "$rootexecdir/bin",
68
+ syssbindir: "$rootexecdir/sbin",
69
+ syslibdir: "$rootlibdir/lib64",
70
+ syslibexecdir: "$rootexecdir/libexec",
71
+ syssharedir: "$rootconstdir/$pckdir", # Always a subdir of /usr/share
72
+ sysdocdir: "$syssharedir",
73
+ sysvardir: "$rootdatadir/lib",
74
+ sysspooldir: "$rootdatadir/spool",
75
+ sysrundir: "$rootdatadir/run",
76
+ syslockdir: "$rootdatadir/lock",
77
+ syscachedir: "$rootdatadir/cache",
78
+ syslogdir: "$rootdatadir/log",
79
+ systmpdir: "/tmp" # Always /tmp because of security
80
+ }
81
+
82
+ # There are no package-specific versions of bindir and sbindir
83
+ PACKAGE_DIRS = {
84
+ pcketcdir: "$sysetcdir/$pckdir",
85
+ pckbindir: "$sysbindir", # No subdir
86
+ pcksbindir: "$syssbindir", # No subdir
87
+ pcklibdir: "$syslibdir/$pckdir",
88
+ pcklibexecdir: "$syslibexecdir/$pckdir",
89
+ pcksharedir: "$syssharedir/$pckdir",
90
+ pckdocdir: "$sysdocdir/$pckdir",
91
+ pckvardir: "$sysvardir/$pckdir",
92
+ pckspooldir: "$sysspooldir/$pckdir",
93
+ pckrundir: "$sysrundir/$pckdir",
94
+ pcklockdir: "$syslockdir/$pckdir",
95
+ pckcachedir: "$syscachedir/$pckdir",
96
+ pcklogdir: "$syslogdir/$pckdir",
97
+ pcktmpdir: "$systmpdir/$pckdir"
98
+ }
99
+
100
+ INSTALL_DIRS = ROOT_DIRS.merge SYSTEM_DIRS.merge PACKAGE_DIRS
101
+
102
+ DEFAULTS = {
103
+ "name" => "$(basename $PWD)",
104
+ "summary" => "The $name RPM package",
105
+ "version" => "$(cd ${{srcdir}} && git tag -l 2>/dev/null | tail -1 | tr -dc '.0-9' || echo 0.0.0)",
106
+ "description" => "$summary",
107
+ "release" => "1",
108
+ "license" => "GPL",
109
+ "packager" => ::Qrpm.fullname,
110
+ "currdir" => ".", # The directory from where the qrpm was run. Initialized by the client program
111
+ "qrpmdir" => ".", # The directory containing the qrpm file. Initialized by the client program
112
+ "srcdir" => ".",
113
+ "pckdir" => "$name",
114
+ "make" => nil
115
+ }
116
+
117
+ IDENT_RE = /(?:[\w_][\w\d_]*)/
118
+ PATH_RE = /(?:[\w_][\w\d_.]*)/
119
+
120
+ FILE_KEYS = %w(name file symlink reflink perm)
16
121
  end
122
+
data/qrpm.gemspec CHANGED
@@ -11,8 +11,6 @@ Gem::Specification.new do |spec|
11
11
  spec.summary = "Gem qrpm"
12
12
  spec.description = "Gem qrpm"
13
13
  spec.homepage = "http://www.nowhere.com/"
14
- spec.required_ruby_version = ">= 2.4.0"
15
-
16
14
 
17
15
  spec.metadata["homepage_uri"] = spec.homepage
18
16
 
@@ -27,8 +25,10 @@ Gem::Specification.new do |spec|
27
25
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
28
26
  spec.require_paths = ["lib"]
29
27
 
30
- spec.add_dependency "shellopts", "~> 2.0.0"
28
+ spec.add_dependency "shellopts", "~> 2.1.1"
31
29
  spec.add_dependency "indented_io"
30
+ spec.add_dependency "constrain"
31
+ spec.add_dependency "forward_to"
32
32
 
33
33
  # Uncomment to register a new dependency of your gem
34
34
  # spec.add_dependency "example-gem", "~> 1.0"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qrpm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Claus Rasmussen
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-05-03 00:00:00.000000000 Z
11
+ date: 2022-07-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: shellopts
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.0.0
19
+ version: 2.1.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 2.0.0
26
+ version: 2.1.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: indented_io
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +38,34 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: constrain
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: forward_to
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
41
69
  description: Gem qrpm
42
70
  email:
43
71
  - claus.l.rasmussen@gmail.com
@@ -49,26 +77,39 @@ files:
49
77
  - ".rspec"
50
78
  - ".ruby-version"
51
79
  - Gemfile
80
+ - NOTES
52
81
  - README.md
53
82
  - Rakefile
83
+ - TODO
54
84
  - bin/console
55
85
  - bin/setup
56
86
  - clean
57
87
  - cmd
88
+ - doc/pg.yml
89
+ - doc/qrpm2.rb
90
+ - doc/qrpm2.yml
91
+ - example.yml
58
92
  - example/bin/a_file
59
93
  - example/bin/another_file
94
+ - example/configure
95
+ - example/make
96
+ - example/my_package_name-1.2.3-4.x86_64.rpm
97
+ - example/my_package_name.spec
60
98
  - example/qrpm.yml
61
99
  - example/share/some_data
62
100
  - example/share/some_other_data
63
101
  - exe/qrpm
64
102
  - lib/qrpm.rb
103
+ - lib/qrpm/compiler.rb
104
+ - lib/qrpm/fragment.rb
105
+ - lib/qrpm/lexer.rb
65
106
  - lib/qrpm/node.rb
66
- - lib/qrpm/parser.rb
67
107
  - lib/qrpm/qrpm.rb
68
108
  - lib/qrpm/render.rb
69
109
  - lib/qrpm/rpm.rb
70
110
  - lib/qrpm/template.erb
71
111
  - lib/qrpm/template.yml
112
+ - lib/qrpm/utils.rb
72
113
  - lib/qrpm/version.rb
73
114
  - packager.sh
74
115
  - packager.yml
@@ -78,7 +119,7 @@ homepage: http://www.nowhere.com/
78
119
  licenses: []
79
120
  metadata:
80
121
  homepage_uri: http://www.nowhere.com/
81
- post_install_message:
122
+ post_install_message:
82
123
  rdoc_options: []
83
124
  require_paths:
84
125
  - lib
@@ -86,15 +127,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
86
127
  requirements:
87
128
  - - ">="
88
129
  - !ruby/object:Gem::Version
89
- version: 2.4.0
130
+ version: '0'
90
131
  required_rubygems_version: !ruby/object:Gem::Requirement
91
132
  requirements:
92
133
  - - ">="
93
134
  - !ruby/object:Gem::Version
94
135
  version: '0'
95
136
  requirements: []
96
- rubygems_version: 3.1.4
97
- signing_key:
137
+ rubygems_version: 3.3.18
138
+ signing_key:
98
139
  specification_version: 4
99
140
  summary: Gem qrpm
100
141
  test_files: []