Skip to content

Commit 394d7a6

Browse files
committed
Support non gnu libc arm-linux-eabi platforms
1 parent 75e7ff5 commit 394d7a6

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

lib/rubygems/platform.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ def ===(other)
180180
# version
181181
(
182182
(@os != "linux" && (@version.nil? || other.version.nil?)) ||
183-
(@os == "linux" && ((@version.nil? && ["gnu", "musl"].include?(other.version)) || (@version == "gnu" && other.version.nil?))) ||
183+
(@os == "linux" && (other.version == "gnu#{@version}" || other.version == "musl#{@version}" || @version == "gnu#{other.version}")) ||
184184
@version == other.version
185185
)
186186
end

test/rubygems/test_gem_platform.rb

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,10 @@ def test_initialize
138138
"x86_64-linux-gnu" => ["x86_64", "linux", "gnu"],
139139
"x86_64-linux-musl" => ["x86_64", "linux", "musl"],
140140
"x86_64-linux-uclibc" => ["x86_64", "linux", "uclibc"],
141+
"arm-linux-eabi" => ["arm", "linux", "eabi"],
142+
"arm-linux-gnueabi" => ["arm", "linux", "gnueabi"],
143+
"arm-linux-musleabi" => ["arm", "linux", "musleabi"],
144+
"arm-linux-uclibceabi" => ["arm", "linux", "uclibceabi"],
141145
"x86_64-openbsd3.9" => ["x86_64", "openbsd", "3.9"],
142146
"x86_64-openbsd4.0" => ["x86_64", "openbsd", "4.0"],
143147
"x86_64-openbsd" => ["x86_64", "openbsd", nil],
@@ -301,6 +305,34 @@ def test_nil_version_is_stricter_for_linux_os
301305
refute(x86_linux_uclibc === x86_linux, "linux-uclibc =~ linux")
302306
end
303307

308+
def test_eabi_version_is_stricter_for_linux_os
309+
arm_linux_eabi = Gem::Platform.new "arm-linux-eabi"
310+
arm_linux_gnueabi = Gem::Platform.new "arm-linux-gnueabi"
311+
arm_linux_musleabi = Gem::Platform.new "arm-linux-musleabi"
312+
arm_linux_uclibceabi = Gem::Platform.new "arm-linux-uclibceabi"
313+
314+
# a naked linux runtime is implicit gnu, as it represents the common glibc-linked runtime
315+
assert(arm_linux_eabi === arm_linux_gnueabi, "linux-eabi =~ linux-gnueabi")
316+
assert(arm_linux_gnueabi === arm_linux_eabi, "linux-gnueabi =~ linux-eabi")
317+
318+
# musl and explicit gnu should differ
319+
refute(arm_linux_gnueabi === arm_linux_musleabi, "linux-gnueabi =~ linux-musleabi")
320+
refute(arm_linux_musleabi === arm_linux_gnueabi, "linux-musleabi =~ linux-gnueabi")
321+
322+
# explicit libc differ
323+
refute(arm_linux_uclibceabi === arm_linux_musleabi, "linux-uclibceabi =~ linux-musleabi")
324+
refute(arm_linux_musleabi === arm_linux_uclibceabi, "linux-musleabi =~ linux-uclibceabi")
325+
326+
# musl host runtime accepts libc-generic or statically linked gems...
327+
assert(arm_linux_eabi === arm_linux_musleabi, "linux-eabi =~ linux-musleabi")
328+
# ...but implicit gnu runtime generally does not accept musl-specific gems
329+
refute(arm_linux_musleabi === arm_linux_eabi, "linux-musleabi =~ linux-eabi")
330+
331+
# other libc are not glibc compatible
332+
refute(arm_linux_eabi === arm_linux_uclibceabi, "linux-eabi =~ linux-uclibceabi")
333+
refute(arm_linux_uclibceabi === arm_linux_eabi, "linux-uclibceabi =~ linux-eabi")
334+
end
335+
304336
def test_equals3_cpu_arm
305337
arm = Gem::Platform.new "arm-linux"
306338
armv5 = Gem::Platform.new "armv5-linux"

0 commit comments

Comments
 (0)