@@ -22,17 +22,38 @@ def object_paths
2222 end
2323
2424 def platform
25- @platform ||= begin
26- local = Gem ::Platform . local
27- parts = [ local . cpu , local . os , local . version ]
28- parts [ 2 ] = 'musl' if RUBY_PLATFORM =~ /musl/
29- ideal = parts . compact . reject { |s | s . to_s . empty? } . join ( '-' ) . gsub ( /-darwin-?\d +/ , '-darwin' )
25+ @platform ||= determine_platform
26+ end
27+
28+ def determine_platform
29+ ideal = construct_ideal_platform_name
30+ return ideal if platform_directory_exists? ( ideal )
31+
32+ fallback_platform
33+ end
34+
35+ def construct_ideal_platform_name
36+ local = Gem ::Platform . local
37+ parts = [ local . cpu , local . os , local . version ]
38+ parts [ 2 ] = 'musl' if musl_platform?
39+ parts . compact . reject ( &:empty? ) . join ( '-' ) . gsub ( /-darwin-?\d +/ , '-darwin' )
40+ end
3041
31- return ideal if File . directory? ( File . join ( vendored_source_path , ideal ) )
42+ def musl_platform?
43+ RUBY_PLATFORM =~ /musl/
44+ end
45+
46+ def platform_directory_exists? ( name )
47+ File . directory? ( File . join ( vendored_source_path , name ) )
48+ end
49+
50+ def fallback_platform
51+ available = available_platform_directories
52+ available . size == 1 ? available . first : construct_ideal_platform_name
53+ end
3254
33- available = Dir . glob ( File . join ( vendored_source_path , '*' ) ) . select { |d | File . directory? ( d ) } . map { |d | File . basename ( d ) } - [ 'include' ]
34- available . size == 1 ? available . first : ideal
35- end
55+ def available_platform_directories
56+ Dir . glob ( File . join ( vendored_source_path , '*' ) ) . select { |d | File . directory? ( d ) } . map { |d | File . basename ( d ) } - [ 'include' ]
3657 end
3758
3859 def config
0 commit comments