rubygems-requirements-system 0.0.1

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.
Files changed (32) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +141 -0
  3. data/Rakefile +35 -0
  4. data/doc/text/gpl-3.txt +674 -0
  5. data/doc/text/lgpl-3.txt +165 -0
  6. data/doc/text/news.md +5 -0
  7. data/lib/rubygems-requirements-system/executable-finder.rb +87 -0
  8. data/lib/rubygems-requirements-system/installer.rb +122 -0
  9. data/lib/rubygems-requirements-system/os-release.rb +59 -0
  10. data/lib/rubygems-requirements-system/package.rb +17 -0
  11. data/lib/rubygems-requirements-system/platform/alpine-linux.rb +44 -0
  12. data/lib/rubygems-requirements-system/platform/alt-linux.rb +52 -0
  13. data/lib/rubygems-requirements-system/platform/amazon-linux-2.rb +50 -0
  14. data/lib/rubygems-requirements-system/platform/amazon-linux-2023.rb +40 -0
  15. data/lib/rubygems-requirements-system/platform/arch-linux.rb +43 -0
  16. data/lib/rubygems-requirements-system/platform/base.rb +135 -0
  17. data/lib/rubygems-requirements-system/platform/conda.rb +43 -0
  18. data/lib/rubygems-requirements-system/platform/debian.rb +67 -0
  19. data/lib/rubygems-requirements-system/platform/fedora.rb +44 -0
  20. data/lib/rubygems-requirements-system/platform/freebsd.rb +43 -0
  21. data/lib/rubygems-requirements-system/platform/gentoo-linux.rb +50 -0
  22. data/lib/rubygems-requirements-system/platform/homebrew.rb +43 -0
  23. data/lib/rubygems-requirements-system/platform/macports.rb +43 -0
  24. data/lib/rubygems-requirements-system/platform/pld-linux.rb +43 -0
  25. data/lib/rubygems-requirements-system/platform/red-hat-enterprise-linux.rb +67 -0
  26. data/lib/rubygems-requirements-system/platform/suse.rb +51 -0
  27. data/lib/rubygems-requirements-system/platform/ubuntu.rb +41 -0
  28. data/lib/rubygems-requirements-system/platform/unknown.rb +31 -0
  29. data/lib/rubygems-requirements-system/platform.rb +72 -0
  30. data/lib/rubygems-requirements-system/version.rb +18 -0
  31. data/lib/rubygems_plugin.rb +21 -0
  32. metadata +94 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 7b4f3b0dc17cf9b76958081357cc6f9cf1ab338e86a88aad5ed4643d9bca8766
4
+ data.tar.gz: 4ebf3a4f17907e0c5ac6ce55a857eeddc5265cb85c6cd229a19f89ca5b738eb2
5
+ SHA512:
6
+ metadata.gz: dabaddfe7338b0918888b16933b8c110a2bd6a7de9b626e425fab0736b6314d70f3daf48814f4c69d778f6d178f3da2b5e05a626ceec3c37090125f0fc35586e
7
+ data.tar.gz: 6f6caa567e5e2d34c680e86e8ba08ca60b1d8f0d6cdfcde0314c90b5db86ae39314796fefe938b009d919a97d9f2c25be1b704144660b034a08222be529d1e6b
data/README.md ADDED
@@ -0,0 +1,141 @@
1
+ # rubygems-requirements-system
2
+
3
+ ## Summary
4
+
5
+ This is a RubyGems plugin. This installs system packages that are
6
+ needed by a gem automatically.
7
+
8
+ This is convenient for both of users and developers.
9
+
10
+ Users don't need to install gem dependencies separately.
11
+
12
+ Developers don't need to write documents how to install gem
13
+ dependencies.
14
+
15
+ ## Motivation
16
+
17
+ Bindings are helpful for developers because developers don't need to
18
+ re-implement existing features. But users need to install not only
19
+ bindings but also dependencies.
20
+
21
+ There are some approaches to reduce the inconvenience:
22
+
23
+ 1. Installs dependencies automatically
24
+ 2. Bundles dependencies (a.k.a. fat gem)
25
+
26
+ The 1. approach is used by Ruby-GNOME packages such as glib2 gem and
27
+ gtk4 gem.
28
+
29
+ The 2. approach is used by Nokogiri.
30
+
31
+ If gems that use the 2. approach are maintained actively, there are
32
+ not much problems. There are several problems otherwise. For example,
33
+ security concerns and new CRuby support.
34
+
35
+ See also:
36
+ https://slide.rabbit-shocker.org/authors/kou/rubykaigi-takeout-2020/
37
+
38
+ The 1. approach will reduce maintenance costs. It will help both of
39
+ developers and users. If we can reduce maintenance costs for
40
+ developers, developers can focus on new features and bug fixes than
41
+ releases.
42
+
43
+ ## Usage
44
+
45
+ Add `rubygems-requirements-system` to your gem's runtime dependencies:
46
+
47
+ ```ruby
48
+ Gem::Specification.new do |spec|
49
+ # ...
50
+ spec.add_runtime_dependency("rubygems-requirements-system")
51
+ # ...
52
+ end
53
+ ```
54
+
55
+ Add dependency information to `Gem::Specification#requirements`:
56
+
57
+ ```ruby
58
+ Gem::Specification.new do |spec|
59
+ # ...
60
+
61
+ # Install GObject. Package ID is pkg-config's package name for now.
62
+ # We'll add support for other package system's name such as CMake
63
+ # package's name.
64
+ # We can specify package names for each platform.
65
+ spec.requirements << "system: gobject-2.0: alt_linux: glib2-devel"
66
+ spec.requirements << "system: gobject-2.0: arch_linux: glib2"
67
+ spec.requirements << "system: gobject-2.0: conda: glib"
68
+ spec.requirements << "system: gobject-2.0: debian: libglib2.0-dev"
69
+ spec.requirements << "system: gobject-2.0: gentoo_linux: dev-libs/glib"
70
+ spec.requirements << "system: gobject-2.0: homebrew: glib"
71
+ spec.requirements << "system: gobject-2.0: macports: glib2"
72
+ # We can omit the Red Hat Enterprise Linux family case because
73
+ # "pkgconfig(gobject-2.0)" can be generated automatically.
74
+ spec.requirements << "system: gobject-2.0: rhel: pkgconfig(gobject-2.0)"
75
+
76
+ # ...
77
+ end
78
+ ```
79
+
80
+ You can require dependency A or B. For example, you can require
81
+ `mysqlclient` or `libmariadb`.
82
+
83
+ ```ruby
84
+ Gem::Specification.new do |spec|
85
+ # ...
86
+
87
+ # We need mysqliclient or libmariadb for this gem.
88
+ spec.requirements << "system: mysqlclient|libmariadb: arch_linux: mariadb-libs"
89
+ spec.requirements << "system: mysqlclient|libmariadb: debian: libmysqlclient-dev"
90
+ spec.requirements << "system: mysqlclient|libmariadb: debian: libmariadb-dev"
91
+
92
+ # ...
93
+ end
94
+ ```
95
+
96
+ You can install multiple packages for a dependency.
97
+
98
+ ```ruby
99
+ Gem::Specification.new do |spec|
100
+ # ...
101
+
102
+ # We need to install multiple packages to use cairo with conda.
103
+ spec.requirements << "system: cairo: conda: cairo"
104
+ spec.requirements << "system: cairo: conda: expat"
105
+ spec.requirements << "system: cairo: conda: xorg-kbproto"
106
+ spec.requirements << "system: cairo: conda: xorg-libxau"
107
+ spec.requirements << "system: cairo: conda: xorg-libxext"
108
+ spec.requirements << "system: cairo: conda: xorg-libxrender"
109
+ spec.requirements << "system: cairo: conda: xorg-renderproto"
110
+ spec.requirements << "system: cairo: conda: xorg-xextproto"
111
+ spec.requirements << "system: cairo: conda: xorg-xproto"
112
+ spec.requirements << "system: cairo: conda: zlib"
113
+
114
+ # ...
115
+ end
116
+ ```
117
+
118
+ ## Requirements
119
+
120
+ RubyGems 3.5.0 or later is required. RubyGems can load installed
121
+ plugin immediately since 3.5.0.
122
+
123
+ If `gem install glib2` installs rubygems-requirements-system gem as a
124
+ dependency, old RubyGems doesn't use a RubyGems plugin in
125
+ rubygems-requirements-system gem while installing glib2 gem. So glib2
126
+ gem dependencies aren't installed automatically.
127
+
128
+ ## History
129
+
130
+ This is based on
131
+ [native-package-installer](https://github.com/ruby-gnome/native-package-installer)
132
+ gem. We could add support for RubyGems plugin to
133
+ native-package-installer but we didn't. Because "native" package isn't
134
+ a natural name for a package on the target platform. We want to use
135
+ other word than "native". So we create a new gem.
136
+
137
+ ## License
138
+
139
+ Copyright (C) 2013-2025 Ruby-GNOME Project Team
140
+
141
+ LGPL-3 or later. See doc/text/lgpl-3.txt for details.
data/Rakefile ADDED
@@ -0,0 +1,35 @@
1
+ # -*- ruby -*-
2
+ #
3
+ # Copyright (C) 2025 Ruby-GNOME Project Team
4
+ #
5
+ # This library is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU Lesser General Public License as published by
7
+ # the Free Software Foundation, either version 3 of the License, or
8
+ # (at your option) any later version.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public License
16
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+
18
+ require "bundler/gem_helper"
19
+
20
+ base_dir = File.dirname(__FILE__)
21
+ helper = Bundler::GemHelper.new(base_dir)
22
+ def helper.version_tag
23
+ version
24
+ end
25
+ helper.install
26
+
27
+ release_task = Rake.application["release"]
28
+ # We use Trusted Publishing.
29
+ release_task.prerequisites.delete("build")
30
+ release_task.prerequisites.delete("release:rubygem_push")
31
+ release_task_comment = release_task.comment
32
+ if release_task_comment
33
+ release_task.clear_comments
34
+ release_task.comment = release_task_comment.gsub(/ and build.*$/, "")
35
+ end