1- # Copyright (C) 2017-2021 Ruby-GNOME Project Team
1+ # Copyright (C) 2017-2025 Ruby-GNOME Project Team
22#
33# This library is free software: you can redistribute it and/or modify
44# it under the terms of the GNU Lesser General Public License as published by
1313# You should have received a copy of the GNU Lesser General Public License
1414# along with this program. If not, see <http://www.gnu.org/licenses/>.
1515
16- require "shellwords "
16+ require "rubygems-requirements-system/installer "
1717
18+ # Other files exist only for backward compatibility.
1819require_relative "native-package-installer/version"
1920
2021require_relative "native-package-installer/executable-finder"
@@ -31,122 +32,16 @@ def install(spec)
3132
3233 def initialize ( spec )
3334 @spec = spec
34- @platform = Platform . detect
35+ @platform = RubyGemsRequirementsSystem :: Platform . detect
3536 end
3637
3738 def install
38- package = @platform . package ( @spec )
39- return false if package . nil?
40-
41- package_name , *options = package
42- package_command_line = [ package_name , *options ] . collect do |component |
43- Shellwords . escape ( component )
44- end . join ( " " )
45-
46- install_command = "#{ @platform . install_command } #{ package_command_line } "
47- if have_priviledge?
48- sudo = nil
49- else
50- sudo = ExecutableFinder . find ( "sudo" )
51- end
52-
53- installing_message = "installing '#{ package_name } ' native package... "
54- log_message ( "%s" , installing_message )
55- failed_to_get_super_user_priviledge = false
56- if have_priviledge?
57- succeeded = run_command ( install_command )
58- else
59- if sudo
60- prompt = "[sudo] password for %u to install <#{ package_name } >: "
61- sudo_options = "-p #{ Shellwords . escape ( prompt ) } "
62- install_command = "#{ sudo } #{ sudo_options } #{ install_command } "
63- succeeded = run_command ( install_command )
64- else
65- succeeded = false
66- failed_to_get_super_user_priviledge = true
67- end
68- end
69-
70- if failed_to_get_super_user_priviledge
71- result_message = "require super user privilege"
72- else
73- result_message = succeeded ? "succeeded" : "failed"
74- end
75- show_postpone_message do
76- "#{ installing_message } #{ result_message } \n "
77- end
78- log_message ( "#{ result_message } \n " )
79-
80- error_message = nil
81- unless succeeded
82- if failed_to_get_super_user_priviledge
83- error_message = <<-MESSAGE
84- '#{ package_name } ' native package is required.
85- Run the following command as super user to install required native package:
86- \# #{ install_command }
87- MESSAGE
88- else
89- error_message = <<-MESSAGE
90- Failed to run '#{ install_command } '.
91- MESSAGE
92- end
93- end
94- if error_message
95- log_message ( "%s" , error_message )
96- show_message ( "%s" , error_message )
97- end
98-
99- show_message ( "--------------------\n \n " )
100-
101- succeeded
102- end
103-
104- private
105- def super_user?
106- Process . uid . zero?
107- end
108-
109- def have_priviledge?
110- return true unless @platform . need_super_user_priviledge?
111- super_user?
112- end
113-
114- def with_mkmf?
115- Object . const_defined? ( :MakeMakefile )
116- end
117-
118- def run_command ( command_line )
119- if with_mkmf?
120- xsystem ( command_line )
121- else
122- system ( command_line )
123- end
124- end
125-
126- def log_message ( format , *args )
127- if with_mkmf?
128- message ( format , *args )
129- else
130- printf ( format , *args )
131- $stdout. flush
132- end
133- end
134-
135- def show_message ( format , *args )
136- if with_mkmf?
137- MakeMakefile ::Logging . message ( format , *args )
138- else
139- printf ( format , *args )
140- $stdout. flush
141- end
142- end
143-
144- def show_postpone_message ( &block )
145- if with_mkmf?
146- MakeMakefile ::Logging . postpone ( &block )
147- else
148- print ( yield )
149- $stdout. flush
39+ @spec . each do |platform_id , system_packages |
40+ next unless @platform . target? ( platform_id . to_s )
41+ system_packages = [ system_packages ] unless system_packages . is_a? ( Array )
42+ requirement =
43+ RubyGemsRequirementsSystem ::Requirement . new ( [ ] , system_packages )
44+ @platform . install ( requirement )
15045 end
15146 end
15247end
0 commit comments