environment_information 1.4.99
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.
Potentially problematic release.
This version of environment_information might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/README.md +1287 -0
- data/bin/envi +7 -0
- data/bin/fast_envi +7 -0
- data/doc/README.gen +1044 -0
- data/doc/todo/TODO_FOR_THE_ENVIRONMENT_INFORMATION_PROJECT.md +48 -0
- data/environment_information.gemspec +135 -0
- data/lib/environment_information/base/base.rb +166 -0
- data/lib/environment_information/class/class.rb +2829 -0
- data/lib/environment_information/colours/colours.rb +224 -0
- data/lib/environment_information/colours/sfancy.rb +19 -0
- data/lib/environment_information/colours/simp.rb +19 -0
- data/lib/environment_information/constants/array_tracked_components.rb +210 -0
- data/lib/environment_information/constants/constants.rb +17 -0
- data/lib/environment_information/constants/encoding.rb +21 -0
- data/lib/environment_information/constants/error_line.rb +17 -0
- data/lib/environment_information/constants/file_constants.rb +102 -0
- data/lib/environment_information/constants/misc.rb +86 -0
- data/lib/environment_information/constants/namespace.rb +14 -0
- data/lib/environment_information/constants/newline.rb +16 -0
- data/lib/environment_information/constants/regex.rb +30 -0
- data/lib/environment_information/constants/temp_directory.rb +52 -0
- data/lib/environment_information/gui/gtk2/environment_information.rb +35 -0
- data/lib/environment_information/gui/gtk3/environment_information.rb +34 -0
- data/lib/environment_information/gui/libui/environment_information.rb +74 -0
- data/lib/environment_information/gui/shared_code/environment_information_module.rb +409 -0
- data/lib/environment_information/misc_components/README.md +3 -0
- data/lib/environment_information/misc_components/cflags.rb +36 -0
- data/lib/environment_information/misc_components/cpuinfo.rb +64 -0
- data/lib/environment_information/misc_components/operating_system.rb +54 -0
- data/lib/environment_information/misc_components/operating_system_bit_type.rb +42 -0
- data/lib/environment_information/misc_components/ram.rb +30 -0
- data/lib/environment_information/misc_components/rubygems_installation_directory.rb +54 -0
- data/lib/environment_information/misc_components/screen_resolution.rb +50 -0
- data/lib/environment_information/project/project.rb +27 -0
- data/lib/environment_information/queries/README.md +2 -0
- data/lib/environment_information/queries/complex_version.rb +273 -0
- data/lib/environment_information/queries/pkg_config.rb +125 -0
- data/lib/environment_information/queries/simple_version.rb +217 -0
- data/lib/environment_information/requires/require_asciitable.rb +15 -0
- data/lib/environment_information/requires/require_the_constants.rb +7 -0
- data/lib/environment_information/requires/require_the_environment_information_project.rb +23 -0
- data/lib/environment_information/requires/require_the_individual_misc_components.rb +30 -0
- data/lib/environment_information/requires/require_the_toplevel_methods.rb +22 -0
- data/lib/environment_information/toplevel_methods/autogenerate_all_relevant_methods.rb +152 -0
- data/lib/environment_information/toplevel_methods/cd.rb +16 -0
- data/lib/environment_information/toplevel_methods/e.rb +43 -0
- data/lib/environment_information/toplevel_methods/hash.rb +60 -0
- data/lib/environment_information/toplevel_methods/internet_is_available.rb +30 -0
- data/lib/environment_information/toplevel_methods/is_on_roebe.rb +16 -0
- data/lib/environment_information/toplevel_methods/menu.rb +90 -0
- data/lib/environment_information/toplevel_methods/misc.rb +322 -0
- data/lib/environment_information/toplevel_methods/n_subcommands.rb +31 -0
- data/lib/environment_information/toplevel_methods/prefix_to_use.rb +39 -0
- data/lib/environment_information/toplevel_methods/register_this_component_is_missing.rb +61 -0
- data/lib/environment_information/toplevel_methods/remote_url_of_this_program.rb +45 -0
- data/lib/environment_information/toplevel_methods/replay_from_the_stored_file.rb +84 -0
- data/lib/environment_information/toplevel_methods/return_alias_to.rb +30 -0
- data/lib/environment_information/toplevel_methods/return_pkgconfig_based_programs.rb +28 -0
- data/lib/environment_information/toplevel_methods/return_remote_gtk2_version.rb +54 -0
- data/lib/environment_information/toplevel_methods/return_simple_version_based_programs.rb +28 -0
- data/lib/environment_information/toplevel_methods/return_version_of_this_program.rb +182 -0
- data/lib/environment_information/toplevel_methods/show_all_available_components.rb +192 -0
- data/lib/environment_information/toplevel_methods/write_what_into.rb +24 -0
- data/lib/environment_information/version/version.rb +25 -0
- data/lib/environment_information/www/sinatra_interface.rb +213 -0
- data/lib/environment_information/www/webobject_interface.cgi +29 -0
- data/lib/environment_information/yaml/array_default_programs_on_linux.yml +15 -0
- data/lib/environment_information/yaml/array_lfs_core_programs.yml +37 -0
- data/lib/environment_information/yaml/array_science_cluster.yml +12 -0
- data/lib/environment_information/yaml/array_tracked_non_programs.yml +13 -0
- data/lib/environment_information/yaml/array_tracked_programs.yml +215 -0
- data/lib/environment_information/yaml/array_tracked_xorg_components.yml +37 -0
- data/lib/environment_information/yaml/colours.yml +3 -0
- data/lib/environment_information/yaml/query_to_use_for_the_individual_components.yml +264 -0
- data/lib/environment_information.rb +5 -0
- data/test/testing_environment_information.rb +26 -0
- data/test/testing_missing_components.rb +9 -0
- data/test/testing_prefix_for_the_environment_information_project.rb +20 -0
- metadata +177 -0
@@ -0,0 +1,2829 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# === EnvironmentInformation::EnvironmentInformation
|
6
|
+
#
|
7
|
+
# The primary purpose of this class is to provide information about
|
8
|
+
# the computer environment ruby is running on. Obviously ruby must
|
9
|
+
# be available in order for this class (this program) to work.
|
10
|
+
#
|
11
|
+
# By default, class EnvironmentInformation will run in
|
12
|
+
# "commandline mode", that is, it will output information
|
13
|
+
# onto the console/terminal.
|
14
|
+
#
|
15
|
+
# The dataset is of course also available internally, though, so you
|
16
|
+
# can query this information and display it e. g. in a traditional
|
17
|
+
# GUI or WWW setting, like for a webpage.
|
18
|
+
# =========================================================================== #
|
19
|
+
# A complete usage example for the main class follows next:
|
20
|
+
#
|
21
|
+
# require 'environment_information'
|
22
|
+
#
|
23
|
+
# _ = EnvironmentInformation::EnvironmentInformation.new(:do_not_run_yet)
|
24
|
+
# _.disable_colours
|
25
|
+
# _.be_silent
|
26
|
+
# _.run
|
27
|
+
# _.string
|
28
|
+
#
|
29
|
+
# Another usage example:
|
30
|
+
#
|
31
|
+
# EnvironmentInformation.new('--kdeversions?')
|
32
|
+
#
|
33
|
+
# =========================================================================== #
|
34
|
+
# require 'environment_information/class/class.rb'
|
35
|
+
# =========================================================================== #
|
36
|
+
require 'environment_information/base/base.rb'
|
37
|
+
|
38
|
+
module EnvironmentInformation
|
39
|
+
|
40
|
+
class EnvironmentInformation < ::EnvironmentInformation::Base # === EnvironmentInformation::EnvironmentInformation
|
41
|
+
|
42
|
+
# ========================================================================= #
|
43
|
+
# === EnvironmentInformation::EnvironmentInformation::TRY_TO_USE_HTML_COLOURS
|
44
|
+
#
|
45
|
+
# If true then we will try to use the konsole-colours, when possible.
|
46
|
+
#
|
47
|
+
# These are part of the colours gem, so this adds a dependency on the
|
48
|
+
# colours gem.
|
49
|
+
# ========================================================================= #
|
50
|
+
TRY_TO_USE_HTML_COLOURS = true
|
51
|
+
|
52
|
+
require 'environment_information/constants/namespace.rb'
|
53
|
+
require 'environment_information/constants/array_tracked_components.rb'
|
54
|
+
require 'environment_information/constants/misc.rb'
|
55
|
+
require 'environment_information/colours/colours.rb'
|
56
|
+
require 'environment_information/queries/complex_version.rb'
|
57
|
+
require 'environment_information/queries/pkg_config.rb'
|
58
|
+
require 'environment_information/queries/simple_version.rb'
|
59
|
+
require 'environment_information/toplevel_methods/hash.rb'
|
60
|
+
require 'environment_information/toplevel_methods/misc.rb'
|
61
|
+
require 'environment_information/toplevel_methods/return_pkgconfig_based_programs.rb'
|
62
|
+
require 'environment_information/toplevel_methods/return_simple_version_based_programs'
|
63
|
+
require 'environment_information/toplevel_methods/write_what_into.rb'
|
64
|
+
require 'environment_information/version/version.rb'
|
65
|
+
|
66
|
+
begin
|
67
|
+
require 'opn'
|
68
|
+
rescue LoadError; end
|
69
|
+
|
70
|
+
# ========================================================================= #
|
71
|
+
# === initialize
|
72
|
+
# ========================================================================= #
|
73
|
+
def initialize(
|
74
|
+
commandline_arguments = nil,
|
75
|
+
run_already = true
|
76
|
+
)
|
77
|
+
register_sigint
|
78
|
+
reset
|
79
|
+
# ======================================================================= #
|
80
|
+
# Next, we handle special run-mode variants.
|
81
|
+
# ======================================================================= #
|
82
|
+
case run_already
|
83
|
+
when :do_show_everything
|
84
|
+
do_show_everything
|
85
|
+
run_already = true
|
86
|
+
end
|
87
|
+
# ======================================================================= #
|
88
|
+
# And set @run_already, so that menu() can overrule it lateron.
|
89
|
+
# ======================================================================= #
|
90
|
+
@run_already = run_already
|
91
|
+
set_commandline_arguments(
|
92
|
+
commandline_arguments
|
93
|
+
)
|
94
|
+
# ======================================================================= #
|
95
|
+
# === Handle blocks
|
96
|
+
#
|
97
|
+
# Next blocks will be handled. This must come after the reset() method.
|
98
|
+
# ======================================================================= #
|
99
|
+
if block_given?
|
100
|
+
yielded = yield
|
101
|
+
case yielded # case tag
|
102
|
+
# ===================================================================== #
|
103
|
+
# === :do_not_use_rbt
|
104
|
+
# ===================================================================== #
|
105
|
+
when :do_not_use_rbt
|
106
|
+
@may_we_try_to_use_rbt = false
|
107
|
+
# ===================================================================== #
|
108
|
+
# === :disable_colours
|
109
|
+
# ===================================================================== #
|
110
|
+
when :disable_colours
|
111
|
+
disable_colours
|
112
|
+
# ===================================================================== #
|
113
|
+
# === :disable_colours_and_do_not_store_into_a_local_file
|
114
|
+
# ===================================================================== #
|
115
|
+
when :disable_colours_and_do_not_store_into_a_local_file
|
116
|
+
disable_colours
|
117
|
+
do_not_save_anything
|
118
|
+
# ===================================================================== #
|
119
|
+
# === :do_not_run_yet
|
120
|
+
# ===================================================================== #
|
121
|
+
when :do_not_run_yet
|
122
|
+
@run_already = false
|
123
|
+
else
|
124
|
+
# =================================================================== #
|
125
|
+
# Handle Hashes given in the block.
|
126
|
+
# =================================================================== #
|
127
|
+
if yielded.is_a? Hash
|
128
|
+
# ================================================================= #
|
129
|
+
# === :use_n_tokens
|
130
|
+
# ================================================================= #
|
131
|
+
if yielded.has_key? :use_n_tokens
|
132
|
+
set_use_n_tokens(yielded.delete(:use_n_tokens))
|
133
|
+
# ================================================================= #
|
134
|
+
# === :n_tokens
|
135
|
+
# ================================================================= #
|
136
|
+
elsif yielded.has_key? :n_tokens
|
137
|
+
set_use_n_tokens(yielded.delete(:n_tokens))
|
138
|
+
end
|
139
|
+
# ================================================================= #
|
140
|
+
# === :use_colours
|
141
|
+
# ================================================================= #
|
142
|
+
if yielded.has_key? :use_colours
|
143
|
+
set_use_colours(yielded.delete(:use_colours))
|
144
|
+
end
|
145
|
+
# ================================================================= #
|
146
|
+
# === :be_silent
|
147
|
+
# ================================================================= #
|
148
|
+
if yielded.has_key? :be_silent
|
149
|
+
set_be_silent(yielded.delete(:be_silent))
|
150
|
+
end
|
151
|
+
# ================================================================= #
|
152
|
+
# === :show_ruby_stuff
|
153
|
+
# ================================================================= #
|
154
|
+
if yielded.has_key? :show_ruby_stuff
|
155
|
+
if yielded.delete(:show_ruby_stuff) == false
|
156
|
+
dont_show_ruby_stuff
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
# ======================================================================= #
|
163
|
+
# First, we will add the default programs on a linux computer. The
|
164
|
+
# later invocation to menu() can change this, but we also want to
|
165
|
+
# provide "useful defaults" for users to benefit from this gem.
|
166
|
+
# ======================================================================= #
|
167
|
+
add_the_default_programs_on_a_linux_computer
|
168
|
+
# ======================================================================= #
|
169
|
+
# Add the ruby components next. This must come before menu().
|
170
|
+
# ======================================================================= #
|
171
|
+
consider_adding_the_ruby_components
|
172
|
+
# ======================================================================= #
|
173
|
+
# Invoke menu() to query and honour the commandline arguments.
|
174
|
+
# ======================================================================= #
|
175
|
+
menu
|
176
|
+
run if @run_already
|
177
|
+
end
|
178
|
+
|
179
|
+
# ========================================================================= #
|
180
|
+
# === add (add tag)
|
181
|
+
#
|
182
|
+
# This method can be used to add individual entries to the main array
|
183
|
+
# called @array_report_these_programs.
|
184
|
+
#
|
185
|
+
# The format for add() contains only one component, which appears on
|
186
|
+
# the left side, and denotes the name of the program or component
|
187
|
+
# that we wish to query, such as "php" or "ruby" and so forth.
|
188
|
+
#
|
189
|
+
# Some Symbols will be used as a "pointer" towards an Array of
|
190
|
+
# registered programs.
|
191
|
+
#
|
192
|
+
# Note that (1) will be converted into a Symbol if it is a String.
|
193
|
+
#
|
194
|
+
# If the second entry (2) is nil, then the version will be inferred
|
195
|
+
# at "runtime" within the method display(). Otherwise display()
|
196
|
+
# will simply use the passed version (which should be a String in
|
197
|
+
# that case, then).
|
198
|
+
#
|
199
|
+
# Before we can add an entry to the main dataset, we have to check
|
200
|
+
# whether it is a registered entry altogether. If it is not
|
201
|
+
# registered, the user has to be notified about this fact.
|
202
|
+
# This notification will ONLY happen if the associated version is nil;
|
203
|
+
# if a specific version is supplied then this method will assume
|
204
|
+
# that the program should be displayed anyway.
|
205
|
+
#
|
206
|
+
# An Array can also be supplied to this method, if necessary.
|
207
|
+
# ========================================================================= #
|
208
|
+
def add(
|
209
|
+
i
|
210
|
+
)
|
211
|
+
if i.is_a?(String) and i.include?(',')
|
212
|
+
# ===================================================================== #
|
213
|
+
# Strings containing ',' will be split accordingly.
|
214
|
+
# ===================================================================== #
|
215
|
+
i = i.split(',')
|
216
|
+
elsif i.is_a?(String) and i.include?('-')
|
217
|
+
# ===================================================================== #
|
218
|
+
# Strings containing '-' will lose that '-'.
|
219
|
+
# ===================================================================== #
|
220
|
+
i = i.dup if i.frozen?
|
221
|
+
i.delete!('-')
|
222
|
+
end
|
223
|
+
[i].flatten.compact.each {|entry|
|
224
|
+
case entry
|
225
|
+
# ===================================================================== #
|
226
|
+
# === :everything
|
227
|
+
#
|
228
|
+
# This entry point is meant for simply adding everything.
|
229
|
+
# ===================================================================== #
|
230
|
+
when :everything
|
231
|
+
entry = return_every_registered_component
|
232
|
+
# ===================================================================== #
|
233
|
+
# === Rubygems installation directory
|
234
|
+
# ===================================================================== #
|
235
|
+
when :rubygems_installation_directory,
|
236
|
+
/^rubygems( |_)?installation( |_)?directory\??$/i
|
237
|
+
entry = 'rubygems_installation_directory'
|
238
|
+
# ===================================================================== #
|
239
|
+
# === cflags
|
240
|
+
# ===================================================================== #
|
241
|
+
when :cflags,
|
242
|
+
/^cflags$/i
|
243
|
+
entry = 'CFLAGS in use'
|
244
|
+
# ===================================================================== #
|
245
|
+
# === screen_resolution
|
246
|
+
# ===================================================================== #
|
247
|
+
when :screen_resolution,
|
248
|
+
/^screen( |_)?resolution$/i
|
249
|
+
entry = 'Screen Resolution'
|
250
|
+
# ===================================================================== #
|
251
|
+
# === ram
|
252
|
+
# ===================================================================== #
|
253
|
+
when :ram,
|
254
|
+
/^ram$/i
|
255
|
+
entry = 'RAM'
|
256
|
+
# ===================================================================== #
|
257
|
+
# === cpuinfo
|
258
|
+
# ===================================================================== #
|
259
|
+
when :cpuinfo,
|
260
|
+
/^cpuinfo$/i
|
261
|
+
entry = 'CPU Model'
|
262
|
+
# ===================================================================== #
|
263
|
+
# === operating_system_bit_type
|
264
|
+
# ===================================================================== #
|
265
|
+
when :operating_system_bit_type,
|
266
|
+
/^operating(_|-)?system(_|-)?bit(_|-)?type$/i
|
267
|
+
entry = 'Operating system bit type'
|
268
|
+
# ===================================================================== #
|
269
|
+
# === :operating_system
|
270
|
+
# ===================================================================== #
|
271
|
+
when :operating_system,
|
272
|
+
/^operating(_|-)?system$/i,
|
273
|
+
/^operating(_|-)?system(_|-)?in(_|-)?use$/i
|
274
|
+
entry = 'Operating system'
|
275
|
+
# ===================================================================== #
|
276
|
+
# === cpflags
|
277
|
+
# ===================================================================== #
|
278
|
+
when /^cflags$/i,
|
279
|
+
/^CFLAGS in use$/i
|
280
|
+
entry = 'CFLAGS in use'
|
281
|
+
# ===================================================================== #
|
282
|
+
# === :pkgconfig_entries
|
283
|
+
# ===================================================================== #
|
284
|
+
when :pkgconfig_entries
|
285
|
+
entry = ::EnvironmentInformation.return_pkgconfig_based_programs
|
286
|
+
# ===================================================================== #
|
287
|
+
# === :all_xorg_components
|
288
|
+
# ===================================================================== #
|
289
|
+
when :all_xorg_components
|
290
|
+
entry = return_all_xorg_components
|
291
|
+
# ===================================================================== #
|
292
|
+
# === envi --science
|
293
|
+
# ===================================================================== #
|
294
|
+
when :science_cluster
|
295
|
+
entry = ARRAY_SCIENCE_CLUSTER
|
296
|
+
# ===================================================================== #
|
297
|
+
# === envi --lfs_core_programs
|
298
|
+
# ===================================================================== #
|
299
|
+
when :lfs,
|
300
|
+
:lfs_core_programs
|
301
|
+
entry = ::EnvironmentInformation.lfs_core_programs?
|
302
|
+
# ===================================================================== #
|
303
|
+
# === :linux_kernel
|
304
|
+
# ===================================================================== #
|
305
|
+
when :linux_kernel
|
306
|
+
i = :linux
|
307
|
+
# ===================================================================== #
|
308
|
+
# === :RAM
|
309
|
+
# ===================================================================== #
|
310
|
+
when :RAM
|
311
|
+
entry = :ram # Just the "alias" to the real entry.
|
312
|
+
end
|
313
|
+
unless @array_report_these_programs.include? entry
|
314
|
+
@array_report_these_programs << entry
|
315
|
+
@array_report_these_programs.flatten!
|
316
|
+
end
|
317
|
+
}
|
318
|
+
end; alias update_version_for add # === add
|
319
|
+
alias append add # === append
|
320
|
+
alias append_this_to_main_string add # === append_this_to_main_string
|
321
|
+
alias show_these_entries add # === show_these_entries
|
322
|
+
alias set_additional add # === set_additional
|
323
|
+
|
324
|
+
# ========================================================================= #
|
325
|
+
# === add_the_default_programs_on_a_linux_computer
|
326
|
+
# ========================================================================= #
|
327
|
+
def add_the_default_programs_on_a_linux_computer
|
328
|
+
# ======================================================================= #
|
329
|
+
# Add the default programs on a linux computer.
|
330
|
+
# ======================================================================= #
|
331
|
+
add(
|
332
|
+
return_default_programs_on_a_linux_computer
|
333
|
+
)
|
334
|
+
end; alias add_default_linux_programs add_the_default_programs_on_a_linux_computer # === add_default_linux_programs
|
335
|
+
|
336
|
+
# ========================================================================= #
|
337
|
+
# === add_ruby_and_rubygems
|
338
|
+
# ========================================================================= #
|
339
|
+
def add_ruby_and_rubygems
|
340
|
+
add(:ruby)
|
341
|
+
add(:rubygems)
|
342
|
+
add(:rubygems_installation_directory)
|
343
|
+
end
|
344
|
+
|
345
|
+
# ========================================================================= #
|
346
|
+
# === add_this_to_the_toplevel_hash
|
347
|
+
# ========================================================================= #
|
348
|
+
def add_this_to_the_toplevel_hash(a, b)
|
349
|
+
a = a.to_sym unless a.is_a? Symbol
|
350
|
+
::EnvironmentInformation.hash?[a] = b
|
351
|
+
end; alias register_onto_the_main_hash add_this_to_the_toplevel_hash # === register_onto_the_main_hash
|
352
|
+
|
353
|
+
# ========================================================================= #
|
354
|
+
# === colourize_this_in_the_right_side_colour
|
355
|
+
# ========================================================================= #
|
356
|
+
def colourize_this_in_the_right_side_colour(i)
|
357
|
+
if use_colours?
|
358
|
+
::Colours.send(::EnvironmentInformation.colour_for_the_right_side, i)
|
359
|
+
else
|
360
|
+
i
|
361
|
+
end
|
362
|
+
end
|
363
|
+
|
364
|
+
# ========================================================================= #
|
365
|
+
# === set_use_colours
|
366
|
+
# ========================================================================= #
|
367
|
+
def set_use_colours(i = '')
|
368
|
+
::EnvironmentInformation.set_use_colours(true)
|
369
|
+
end
|
370
|
+
|
371
|
+
# ========================================================================= #
|
372
|
+
# === use_colours?
|
373
|
+
# ========================================================================= #
|
374
|
+
def use_colours?
|
375
|
+
::EnvironmentInformation.use_colours?
|
376
|
+
end
|
377
|
+
|
378
|
+
# ========================================================================= #
|
379
|
+
# === enable_colours
|
380
|
+
# ========================================================================= #
|
381
|
+
def enable_colours
|
382
|
+
::EnvironmentInformation.use_colours = true
|
383
|
+
end
|
384
|
+
|
385
|
+
# ========================================================================= #
|
386
|
+
# === disable_colours
|
387
|
+
#
|
388
|
+
# Call this method when you wish to disable the colours. Note that
|
389
|
+
# this will disable colours on the toplevel.
|
390
|
+
# ========================================================================= #
|
391
|
+
def disable_colours
|
392
|
+
::EnvironmentInformation.use_colours = false
|
393
|
+
end; alias no_colours disable_colours # === no_colours()
|
394
|
+
|
395
|
+
# ========================================================================= #
|
396
|
+
# === rev
|
397
|
+
# ========================================================================= #
|
398
|
+
def rev
|
399
|
+
if use_colours?
|
400
|
+
Colours::GREEN
|
401
|
+
else
|
402
|
+
''
|
403
|
+
end
|
404
|
+
end
|
405
|
+
|
406
|
+
# ========================================================================= #
|
407
|
+
# === true_rev
|
408
|
+
# ========================================================================= #
|
409
|
+
def true_rev
|
410
|
+
if use_colours?
|
411
|
+
Colours::REV
|
412
|
+
else
|
413
|
+
''
|
414
|
+
end
|
415
|
+
end
|
416
|
+
|
417
|
+
# ========================================================================= #
|
418
|
+
# === col1
|
419
|
+
#
|
420
|
+
# The "first" colour to be used.
|
421
|
+
# ========================================================================= #
|
422
|
+
def col1
|
423
|
+
if use_colours?
|
424
|
+
Colours::BOLD_BLUE
|
425
|
+
else
|
426
|
+
''
|
427
|
+
end
|
428
|
+
end
|
429
|
+
|
430
|
+
# ========================================================================= #
|
431
|
+
# === cyan
|
432
|
+
# ========================================================================= #
|
433
|
+
def cyan(i = '')
|
434
|
+
if i.empty?
|
435
|
+
Colours::CYAN
|
436
|
+
end if use_colours?
|
437
|
+
end
|
438
|
+
|
439
|
+
# ========================================================================= #
|
440
|
+
# === blue
|
441
|
+
# ========================================================================= #
|
442
|
+
def blue(i = '')
|
443
|
+
if i.empty?
|
444
|
+
Colours::BLUE
|
445
|
+
end if use_colours?
|
446
|
+
end
|
447
|
+
|
448
|
+
# ========================================================================= #
|
449
|
+
# === simp
|
450
|
+
# ========================================================================= #
|
451
|
+
def simp(i)
|
452
|
+
return ::Colours.simp(i) if use_colours?
|
453
|
+
return i
|
454
|
+
end
|
455
|
+
|
456
|
+
# ========================================================================= #
|
457
|
+
# === sfile
|
458
|
+
# ========================================================================= #
|
459
|
+
def sfile(i)
|
460
|
+
return ::Colours.sfile(i) if use_colours?
|
461
|
+
return i
|
462
|
+
end
|
463
|
+
|
464
|
+
# ========================================================================= #
|
465
|
+
# === sfancy
|
466
|
+
# ========================================================================= #
|
467
|
+
def sfancy(i = '')
|
468
|
+
return ::Colours.sfancy(i) if use_colours?
|
469
|
+
return i
|
470
|
+
end
|
471
|
+
|
472
|
+
# ========================================================================= #
|
473
|
+
# === crimson
|
474
|
+
# ========================================================================= #
|
475
|
+
def crimson(i = '')
|
476
|
+
if use_colours? and TRY_TO_USE_HTML_COLOURS
|
477
|
+
i = ::Colours.crimson(i)
|
478
|
+
end
|
479
|
+
return i
|
480
|
+
end
|
481
|
+
|
482
|
+
# ========================================================================= #
|
483
|
+
# === darkgreen
|
484
|
+
# ========================================================================= #
|
485
|
+
def darkgreen(i = '')
|
486
|
+
if use_colours? and TRY_TO_USE_HTML_COLOURS
|
487
|
+
i = ::Colours.darkgreen(i)
|
488
|
+
end
|
489
|
+
return i
|
490
|
+
end
|
491
|
+
|
492
|
+
# ========================================================================= #
|
493
|
+
# === dimgray
|
494
|
+
# ========================================================================= #
|
495
|
+
def dimgray(i = '')
|
496
|
+
if use_colours? and TRY_TO_USE_HTML_COLOURS
|
497
|
+
i = ::Colours.dimgray(i)
|
498
|
+
end
|
499
|
+
return i
|
500
|
+
end
|
501
|
+
|
502
|
+
# ========================================================================= #
|
503
|
+
# === royalblue
|
504
|
+
# ========================================================================= #
|
505
|
+
def royalblue(i = '')
|
506
|
+
if use_colours? and TRY_TO_USE_HTML_COLOURS
|
507
|
+
i = ::Colours.royalblue(i)
|
508
|
+
end
|
509
|
+
return i
|
510
|
+
end
|
511
|
+
|
512
|
+
# ========================================================================= #
|
513
|
+
# === slateblue
|
514
|
+
# ========================================================================= #
|
515
|
+
def slateblue(i = '')
|
516
|
+
if use_colours? and TRY_TO_USE_HTML_COLOURS
|
517
|
+
i = ::Colours.slateblue(i)
|
518
|
+
end
|
519
|
+
return i
|
520
|
+
end
|
521
|
+
|
522
|
+
# ========================================================================= #
|
523
|
+
# === steelblue
|
524
|
+
# ========================================================================= #
|
525
|
+
def steelblue(i = '')
|
526
|
+
if use_colours? and TRY_TO_USE_HTML_COLOURS
|
527
|
+
i = ::Colours.steelblue(i)
|
528
|
+
end
|
529
|
+
return i
|
530
|
+
end
|
531
|
+
|
532
|
+
# ========================================================================= #
|
533
|
+
# === seagreen
|
534
|
+
# ========================================================================= #
|
535
|
+
def seagreen(i = '')
|
536
|
+
if use_colours? and TRY_TO_USE_HTML_COLOURS
|
537
|
+
i = ::Colours.seagreen(i)
|
538
|
+
end
|
539
|
+
return i
|
540
|
+
end
|
541
|
+
|
542
|
+
# ========================================================================= #
|
543
|
+
# === olivedrab
|
544
|
+
#
|
545
|
+
# This one will be used for the right-hand side.
|
546
|
+
# ========================================================================= #
|
547
|
+
def olivedrab(i = '')
|
548
|
+
if use_colours? and TRY_TO_USE_HTML_COLOURS
|
549
|
+
i = ::Colours.olivedrab(i)
|
550
|
+
end
|
551
|
+
return i
|
552
|
+
end
|
553
|
+
|
554
|
+
# ========================================================================= #
|
555
|
+
# === olive
|
556
|
+
# ========================================================================= #
|
557
|
+
def olive(i = '')
|
558
|
+
if use_colours? and TRY_TO_USE_HTML_COLOURS
|
559
|
+
i = ::Colours.olive(i)
|
560
|
+
end
|
561
|
+
return i
|
562
|
+
end
|
563
|
+
|
564
|
+
# ========================================================================= #
|
565
|
+
# === limegreen
|
566
|
+
# ========================================================================= #
|
567
|
+
def limegreen(i = '')
|
568
|
+
if use_colours? and TRY_TO_USE_HTML_COLOURS
|
569
|
+
i = ::Colours.limegreen(i)
|
570
|
+
end
|
571
|
+
return i
|
572
|
+
end
|
573
|
+
|
574
|
+
# ========================================================================= #
|
575
|
+
# === darkolivegreen
|
576
|
+
# ========================================================================= #
|
577
|
+
def darkolivegreen(i = '')
|
578
|
+
if use_colours? and TRY_TO_USE_HTML_COLOURS
|
579
|
+
i = ::Colours.darkolivegreen(i)
|
580
|
+
end
|
581
|
+
return i
|
582
|
+
end
|
583
|
+
|
584
|
+
# ========================================================================= #
|
585
|
+
# === lightgreen
|
586
|
+
# ========================================================================= #
|
587
|
+
def lightgreen(i = '')
|
588
|
+
if use_colours? and TRY_TO_USE_HTML_COLOURS
|
589
|
+
i = ::Colours.lightgreen(i)
|
590
|
+
end
|
591
|
+
return i
|
592
|
+
end
|
593
|
+
|
594
|
+
# ========================================================================= #
|
595
|
+
# === mediumpurple
|
596
|
+
# ========================================================================= #
|
597
|
+
def mediumpurple(i = '')
|
598
|
+
if use_colours? and TRY_TO_USE_HTML_COLOURS
|
599
|
+
i = ::Colours.mediumpurple(i)
|
600
|
+
end
|
601
|
+
return i
|
602
|
+
end
|
603
|
+
|
604
|
+
# ========================================================================= #
|
605
|
+
# === teal
|
606
|
+
# ========================================================================= #
|
607
|
+
def teal(i = '')
|
608
|
+
return ::Colours.teal(i) if use_colours?
|
609
|
+
return i
|
610
|
+
end
|
611
|
+
|
612
|
+
# ========================================================================= #
|
613
|
+
# === orange
|
614
|
+
# ========================================================================= #
|
615
|
+
def orange(i = '')
|
616
|
+
return ::Colours.orange(i) if use_colours?
|
617
|
+
return i
|
618
|
+
end
|
619
|
+
|
620
|
+
# ========================================================================= #
|
621
|
+
# === EnvironmentInformation::EnvironmentInformation::THIS_FILE
|
622
|
+
#
|
623
|
+
# THIS_FILE = __FILE__
|
624
|
+
#
|
625
|
+
# We hardcode this since it is only relevant on my home system, anyway.
|
626
|
+
# ========================================================================= #
|
627
|
+
THIS_FILE =
|
628
|
+
'/home/x/programming/ruby/src/'\
|
629
|
+
'environment_information/lib/environment_information/class/'\
|
630
|
+
'environment_information.rb'
|
631
|
+
|
632
|
+
begin
|
633
|
+
require 'rbt/utility_scripts/report_mate_desktop_version.rb'
|
634
|
+
rescue LoadError; end
|
635
|
+
|
636
|
+
require 'environment_information/requires/require_asciitable.rb'
|
637
|
+
|
638
|
+
# ========================================================================= #
|
639
|
+
# === do_show_help (help tag)
|
640
|
+
#
|
641
|
+
# Show the commandline-usage through this method here.
|
642
|
+
#
|
643
|
+
# To invoke this, try:
|
644
|
+
#
|
645
|
+
# envi --help
|
646
|
+
#
|
647
|
+
# ========================================================================= #
|
648
|
+
def do_show_help
|
649
|
+
e
|
650
|
+
lpad = "#{col1} "
|
651
|
+
e "#{rev}The following options are available for "\
|
652
|
+
"#{simp('class EnvironmentInformation:')}#{rev}#{N}#{N}"
|
653
|
+
if ASCIITABLE_IS_AVAILABLE
|
654
|
+
e col1+' asciitable '+rev+'# Print in Ascii Table format'
|
655
|
+
end
|
656
|
+
e lpad+'html '+rev+'# Save the environment information '\
|
657
|
+
'into a .html file'
|
658
|
+
e lpad+'gui '+rev+'# Start the GTK gui bindings; some '\
|
659
|
+
'aliases are possible such as --GUI'
|
660
|
+
e lpad+'nocolours '+rev+'# Disable colours '\
|
661
|
+
'(--disable-colours also works)'
|
662
|
+
e lpad+'noruby '+rev+'# dont show ruby-related environment '\
|
663
|
+
'information'
|
664
|
+
e lpad+'help '+rev+'# show some help'
|
665
|
+
e lpad+'xorg '+rev+'# show some xorg-specific '\
|
666
|
+
'components (also --xorg-components)'
|
667
|
+
e lpad+'OS '+rev+'# show the OS then exit'
|
668
|
+
e lpad+'full '+rev+'# show full information, including '\
|
669
|
+
'GTK, Glib, Atk and Pango Version'
|
670
|
+
e ' # ^^^ This is probably the most useful usage.'
|
671
|
+
e lpad+'openssl '+rev+'# display openssl option'
|
672
|
+
e lpad+'REALLY_ALL '+rev+'# also compare the program_versions '\
|
673
|
+
'(--really-everything is an alias to this)'
|
674
|
+
e lpad+'save '+rev+'# display the result, then '\
|
675
|
+
'save it into a file'
|
676
|
+
e lpad+'sinatra '+rev+'# start the sinatra-interface '\
|
677
|
+
'of the environment_information project'
|
678
|
+
e lpad+'version '+rev+'# show the version of '\
|
679
|
+
'EnvironmentInformation in use'
|
680
|
+
e lpad+'--show-remote-url '+rev+'# show the remote URLs '\
|
681
|
+
'of a program (requires the RBT project)'
|
682
|
+
e lpad+'padding=value '+rev+'# set to another padding value'
|
683
|
+
e lpad+'--one-liner '+rev+'# show everything compacted, without a newline'
|
684
|
+
e lpad+'--nentries? '+rev+'# feedback how many entries are tracked in total'
|
685
|
+
e rev+N+'The above commands should be commandline arguments, '\
|
686
|
+
'such as: "'+teal('envi full')+rev+'".'
|
687
|
+
e
|
688
|
+
e "#{rev}Do note that you can prefix the above commands via "\
|
689
|
+
"a leading --, of course."
|
690
|
+
e
|
691
|
+
# ======================================================================= #
|
692
|
+
# Show a simple usage example next:
|
693
|
+
# ======================================================================= #
|
694
|
+
e 'Usage example:'
|
695
|
+
e
|
696
|
+
e steelblue(
|
697
|
+
' envi --version'
|
698
|
+
)
|
699
|
+
e
|
700
|
+
e rev+'If you wish to show only some programs, you could '\
|
701
|
+
'use the following:'
|
702
|
+
e
|
703
|
+
e steelblue(
|
704
|
+
' envi --use-these-programs=bash,binutils,bison,yacc,bzip2,coreutils,diff,find,gawk,gcc'
|
705
|
+
)
|
706
|
+
e steelblue(
|
707
|
+
' envi --use-these-programs=:lfs'
|
708
|
+
)
|
709
|
+
e true_rev # Reset via Colours.rev here.
|
710
|
+
do_exit_the_program
|
711
|
+
end; alias show_help do_show_help # === show_help
|
712
|
+
|
713
|
+
require 'environment_information/toplevel_methods/write_what_into.rb'
|
714
|
+
require 'environment_information/constants/temp_directory.rb'
|
715
|
+
|
716
|
+
# ========================================================================= #
|
717
|
+
# === do_generate_a_html_file (html tag)
|
718
|
+
#
|
719
|
+
# The action-method that will generate the html file. This depends
|
720
|
+
# on the gem html_tags, with module HtmlTags though.
|
721
|
+
#
|
722
|
+
# To invoke this method, do:
|
723
|
+
#
|
724
|
+
# envi --generate-html-file
|
725
|
+
#
|
726
|
+
# ========================================================================= #
|
727
|
+
def do_generate_a_html_file(
|
728
|
+
styling_instructions = :none
|
729
|
+
)
|
730
|
+
# ======================================================================= #
|
731
|
+
# === Ensure that the html_tags project is available
|
732
|
+
# ======================================================================= #
|
733
|
+
unless Object.const_defined? :HtmlTags
|
734
|
+
begin
|
735
|
+
require 'html_tags'
|
736
|
+
rescue LoadError
|
737
|
+
e 'html_tags is not available. Considering installing it via:'
|
738
|
+
e
|
739
|
+
e ' gem install html_tags'
|
740
|
+
e
|
741
|
+
end
|
742
|
+
end
|
743
|
+
# ======================================================================= #
|
744
|
+
# === Define where to store the .html file in question
|
745
|
+
# ======================================================================= #
|
746
|
+
this_html_file = "#{::EnvironmentInformation.temp_directory?}environment_information.html"
|
747
|
+
# ======================================================================= #
|
748
|
+
# Obtain the main dataset next.
|
749
|
+
# ======================================================================= #
|
750
|
+
what = dataset_as_string
|
751
|
+
case styling_instructions
|
752
|
+
when :bold
|
753
|
+
what = HtmlTags.b(what)
|
754
|
+
end
|
755
|
+
what = HtmlTags.html(
|
756
|
+
HtmlTags.title('Information about the local environment')+
|
757
|
+
HtmlTags.body(
|
758
|
+
HtmlTags.h1(
|
759
|
+
'Your environment',
|
760
|
+
css_style: 'margin-top: 0.5em; margin-bottom: 0.5em; padding: 2px;'
|
761
|
+
)+
|
762
|
+
HtmlTags.pre(
|
763
|
+
what,
|
764
|
+
css_style: 'font-weight: bold; font-size: 2em; padding-left: 1.0em; margin-top:2px;'
|
765
|
+
)
|
766
|
+
)
|
767
|
+
)
|
768
|
+
::EnvironmentInformation.write_what_into(what, this_html_file)
|
769
|
+
# ======================================================================= #
|
770
|
+
# Notify the user what has been done.
|
771
|
+
# ======================================================================= #
|
772
|
+
if File.exist? this_html_file
|
773
|
+
opnn; e "Generated a HTML file at `#{sfile(this_html_file)}`."
|
774
|
+
end
|
775
|
+
end
|
776
|
+
|
777
|
+
# ========================================================================= #
|
778
|
+
# === THE_PROGRAM_IS_NOT_INSTALLED_OR_COULD_NOT_BE_FOUND
|
779
|
+
# ========================================================================= #
|
780
|
+
THE_PROGRAM_IS_NOT_INSTALLED_OR_COULD_NOT_BE_FOUND =
|
781
|
+
'[The program is not installed or could not be found.]'.dup
|
782
|
+
|
783
|
+
# ========================================================================= #
|
784
|
+
# === report_the_installed_KDE_software_suite
|
785
|
+
# ========================================================================= #
|
786
|
+
def report_the_installed_KDE_software_suite
|
787
|
+
begin
|
788
|
+
require 'rbt/toplevel_methods/misc.rb'
|
789
|
+
require 'rbt/toplevel_methods/try_to_return_a_special_compile_component.rb'
|
790
|
+
require 'rbt/toplevel_methods/swift_return_version_of_this_program.rb'
|
791
|
+
array = RBT.return_kde_apps
|
792
|
+
append_this = ''.dup
|
793
|
+
if array and !array.empty?
|
794
|
+
e 'Now working through all registered KDE applications, trying to'
|
795
|
+
e 'show their version on the commandline:'
|
796
|
+
e
|
797
|
+
array.each {|this_program|
|
798
|
+
append_this.clear
|
799
|
+
# ================================================================= #
|
800
|
+
# The next line of code was added in August 2022 because ksmoothdock
|
801
|
+
# is misbehaving. At a later time we may have to review this;
|
802
|
+
# ideally we should not need any such ad-hoc exceptions ever.
|
803
|
+
# ================================================================= #
|
804
|
+
next if this_program == 'ksmoothdock'
|
805
|
+
print gold(
|
806
|
+
(' '+this_program+':').ljust(40)
|
807
|
+
)
|
808
|
+
cmd_to_use = "#{this_program} --version 2>&1"
|
809
|
+
version = `#{cmd_to_use}`
|
810
|
+
if version.include? "command not found\n"
|
811
|
+
version = THE_PROGRAM_IS_NOT_INSTALLED_OR_COULD_NOT_BE_FOUND
|
812
|
+
else
|
813
|
+
if version
|
814
|
+
# Remove the name of the program here e. g. "kcachegrind 21.12.1"
|
815
|
+
version.sub!(/#{this_program}/,'')
|
816
|
+
most_recent_version = ::RBT.swift_return_version_of_this_program(this_program.strip.downcase)
|
817
|
+
if RBT.is_this_version_higher_than_that_version?(
|
818
|
+
most_recent_version.to_s,
|
819
|
+
version.to_s,
|
820
|
+
:do_not_report_any_errors
|
821
|
+
)
|
822
|
+
append_this << orange(
|
823
|
+
"\n ^^^ This program could "\
|
824
|
+
"be updated to version "+
|
825
|
+
most_recent_version.to_s
|
826
|
+
)
|
827
|
+
end
|
828
|
+
end
|
829
|
+
end
|
830
|
+
version.strip!
|
831
|
+
if version.include? 'The program is not installed'
|
832
|
+
e lightblue(version)+append_this
|
833
|
+
else
|
834
|
+
e steelblue(version)+append_this
|
835
|
+
end
|
836
|
+
}
|
837
|
+
e
|
838
|
+
else
|
839
|
+
e 'The array appears to be empty.'
|
840
|
+
end
|
841
|
+
exit
|
842
|
+
rescue LoadError; end
|
843
|
+
end
|
844
|
+
|
845
|
+
# ========================================================================= #
|
846
|
+
# === is_a_registered_component?
|
847
|
+
# ========================================================================= #
|
848
|
+
def is_a_registered_component?(i)
|
849
|
+
::EnvironmentInformation.is_this_component_included?(i)
|
850
|
+
end; alias is_an_allowed_entry? is_a_registered_component? # === is_an_allowed_entry?
|
851
|
+
|
852
|
+
# ========================================================================= #
|
853
|
+
# === tracked_programs?
|
854
|
+
# ========================================================================= #
|
855
|
+
def tracked_programs?
|
856
|
+
ARRAY_TRACKED_PROGRAMS
|
857
|
+
end
|
858
|
+
|
859
|
+
# ========================================================================= #
|
860
|
+
# === return_default_programs_on_linux
|
861
|
+
#
|
862
|
+
# This method should return the "main" programs on a linux computer,
|
863
|
+
# the most important entries.
|
864
|
+
# ========================================================================= #
|
865
|
+
def return_default_programs_on_linux
|
866
|
+
ARRAY_DEFAULT_PROGRAMS_ON_LINUX
|
867
|
+
end; alias return_default_programs_on_a_linux_computer return_default_programs_on_linux # === return_default_programs_on_a_linux_computer
|
868
|
+
alias return_default_programs return_default_programs_on_linux # === return_default_programs
|
869
|
+
|
870
|
+
# ========================================================================= #
|
871
|
+
# === do_show_almost_everything_excluding_the_default_linux_programs
|
872
|
+
#
|
873
|
+
# This is similar to do_show_everything() but it will not show
|
874
|
+
# the default linux programs.
|
875
|
+
# ========================================================================= #
|
876
|
+
def do_show_almost_everything_excluding_the_default_linux_programs
|
877
|
+
these_programs = return_every_registered_component
|
878
|
+
default_programs = return_default_programs
|
879
|
+
# ======================================================================= #
|
880
|
+
# Next subtract those that are part in the default_programs.
|
881
|
+
# ======================================================================= #
|
882
|
+
these_programs.reject! {|entry|
|
883
|
+
default_programs.include? entry
|
884
|
+
}
|
885
|
+
add(these_programs)
|
886
|
+
end
|
887
|
+
|
888
|
+
# ========================================================================= #
|
889
|
+
# === do_show_everything (everything tag, full tag)
|
890
|
+
#
|
891
|
+
# This method can be used when the user wishes to enable seeing
|
892
|
+
# full information about his local environment (on the computer).
|
893
|
+
#
|
894
|
+
# This will always display EVERY registered component.
|
895
|
+
#
|
896
|
+
# Commandline invocation:
|
897
|
+
#
|
898
|
+
# envi --everything
|
899
|
+
#
|
900
|
+
# ========================================================================= #
|
901
|
+
def do_show_everything
|
902
|
+
add(:everything) # Simply add everything.
|
903
|
+
end; alias do_show_full_information do_show_everything # === do_show_full_information
|
904
|
+
alias show_full_information do_show_everything # === show_full_information
|
905
|
+
|
906
|
+
# ========================================================================= #
|
907
|
+
# === consider_storing_the_components_that_were_displayed
|
908
|
+
# ========================================================================= #
|
909
|
+
def consider_storing_the_components_that_were_displayed
|
910
|
+
if store_the_results_into_local_files?
|
911
|
+
::EnvironmentInformation.consider_storing_these_results_into_a_local_file
|
912
|
+
end
|
913
|
+
end; alias consider_storing_which_components_were_displayed consider_storing_the_components_that_were_displayed # === consider_storing_which_components_were_displayed
|
914
|
+
|
915
|
+
# ========================================================================= #
|
916
|
+
# === store_the_results_into_local_files?
|
917
|
+
# ========================================================================= #
|
918
|
+
def store_the_results_into_local_files?
|
919
|
+
@internal_hash[:store_the_results_into_local_files]
|
920
|
+
end
|
921
|
+
|
922
|
+
# ========================================================================= #
|
923
|
+
# === do_show_only_the_operating_system
|
924
|
+
#
|
925
|
+
# To invoke this method, try:
|
926
|
+
#
|
927
|
+
# envi --os?
|
928
|
+
#
|
929
|
+
# ========================================================================= #
|
930
|
+
def do_show_only_the_operating_system
|
931
|
+
clear_old_dataset
|
932
|
+
add(:operating_system)
|
933
|
+
end
|
934
|
+
|
935
|
+
# ========================================================================= #
|
936
|
+
# === can_we_query_the_mate_desktop?
|
937
|
+
# ========================================================================= #
|
938
|
+
def can_we_query_the_mate_desktop?
|
939
|
+
is_rbt_available? and RBT.const_defined?(:ReportMateDesktopVersion)
|
940
|
+
end
|
941
|
+
|
942
|
+
# ========================================================================= #
|
943
|
+
# === show_n_registered_entries
|
944
|
+
#
|
945
|
+
# Invoke this via:
|
946
|
+
#
|
947
|
+
# envi --n_entries
|
948
|
+
#
|
949
|
+
# ========================================================================= #
|
950
|
+
def show_n_registered_entries
|
951
|
+
e "#{true_rev}The EnvironmentInformation project contains "\
|
952
|
+
"#{sfancy(::EnvironmentInformation.tracked_programs?.size)} "\
|
953
|
+
"#{true_rev}registered entries."
|
954
|
+
end
|
955
|
+
|
956
|
+
# ========================================================================= #
|
957
|
+
# === assign_components_for_the_short_format
|
958
|
+
#
|
959
|
+
# We will only display 6 components when we use the short variant.
|
960
|
+
# ========================================================================= #
|
961
|
+
def assign_components_for_the_short_format
|
962
|
+
clear_old_dataset
|
963
|
+
dont_show_ruby_stuff
|
964
|
+
add(%i(
|
965
|
+
operating_system
|
966
|
+
operating_system_bit_type
|
967
|
+
cpuinfo
|
968
|
+
cflags
|
969
|
+
RAM
|
970
|
+
screen_resolution
|
971
|
+
))
|
972
|
+
end
|
973
|
+
|
974
|
+
# ========================================================================= #
|
975
|
+
# === may_we_try_to_use_rbt?
|
976
|
+
# ========================================================================= #
|
977
|
+
def may_we_try_to_use_rbt?
|
978
|
+
@may_we_try_to_use_rbt
|
979
|
+
end
|
980
|
+
|
981
|
+
# ========================================================================= #
|
982
|
+
# === write_what_into
|
983
|
+
# ========================================================================= #
|
984
|
+
def write_what_into(what, into)
|
985
|
+
::EnvironmentInformation.write_what_into(what, into)
|
986
|
+
end
|
987
|
+
|
988
|
+
# ========================================================================= #
|
989
|
+
# === work_on_the_programs_directory_only
|
990
|
+
#
|
991
|
+
# This works on the /home/Programs/ directory directly.
|
992
|
+
#
|
993
|
+
# Invocation example:
|
994
|
+
#
|
995
|
+
# envi --work-on-programs-directory-only
|
996
|
+
#
|
997
|
+
# ========================================================================= #
|
998
|
+
def work_on_the_programs_directory_only(
|
999
|
+
use_this_as_programs_directory = '/home/Programs/'
|
1000
|
+
)
|
1001
|
+
# ======================================================================= #
|
1002
|
+
# 1) First, we have to determine which programs are available.
|
1003
|
+
# ======================================================================= #
|
1004
|
+
e "#{rev}Determining which programs are available at the prefix "\
|
1005
|
+
"#{steelblue(use_this_as_programs_directory)}:"
|
1006
|
+
array_these_programs_are_available = []
|
1007
|
+
tracked_programs?.each {|entry|
|
1008
|
+
target = "#{use_this_as_programs_directory}#{entry.capitalize}"
|
1009
|
+
if File.directory?(target)
|
1010
|
+
# =================================================================== #
|
1011
|
+
# In this case we know that this target exists.
|
1012
|
+
# =================================================================== #
|
1013
|
+
array_these_programs_are_available << entry
|
1014
|
+
end
|
1015
|
+
}
|
1016
|
+
# ======================================================================= #
|
1017
|
+
# 2) Checking these programs next.
|
1018
|
+
# ======================================================================= #
|
1019
|
+
clear_main_dataset
|
1020
|
+
add(array_these_programs_are_available)
|
1021
|
+
::EnvironmentInformation.set_prefix_to_use(use_this_as_programs_directory)
|
1022
|
+
end
|
1023
|
+
|
1024
|
+
# ========================================================================= #
|
1025
|
+
# === set_main_array
|
1026
|
+
# ========================================================================= #
|
1027
|
+
def set_main_array(i)
|
1028
|
+
@array_report_these_programs = i
|
1029
|
+
end; alias set_display_these_components set_main_array # === set_display_these_components
|
1030
|
+
alias set_use_this_as_main_input set_main_array # === set_use_this_as_main_input
|
1031
|
+
alias set_report_these_programs set_main_array # === set_report_these_programs
|
1032
|
+
alias show_only_the_components_from_this_dataset set_main_array # === show_only_the_components_from_this_dataset
|
1033
|
+
|
1034
|
+
# ========================================================================= #
|
1035
|
+
# === set_runmode_gui
|
1036
|
+
# ========================================================================= #
|
1037
|
+
def set_runmode_gui
|
1038
|
+
@runmode = :gui
|
1039
|
+
end
|
1040
|
+
|
1041
|
+
# ========================================================================= #
|
1042
|
+
# === set_runmode_html
|
1043
|
+
# ========================================================================= #
|
1044
|
+
def set_runmode_html
|
1045
|
+
@runmode = :html
|
1046
|
+
end
|
1047
|
+
|
1048
|
+
# ========================================================================= #
|
1049
|
+
# === do_exit_the_program
|
1050
|
+
# ========================================================================= #
|
1051
|
+
def do_exit_the_program
|
1052
|
+
@do_exit_the_program = true
|
1053
|
+
end
|
1054
|
+
|
1055
|
+
# ========================================================================= #
|
1056
|
+
# === gui?
|
1057
|
+
# ========================================================================= #
|
1058
|
+
def gui?
|
1059
|
+
@runmode == :gui
|
1060
|
+
end
|
1061
|
+
|
1062
|
+
# ========================================================================= #
|
1063
|
+
# === commandline?
|
1064
|
+
#
|
1065
|
+
# Whether we run in the "commandline mode" or whether we run in the
|
1066
|
+
# GUI or WWW/HTML mode.
|
1067
|
+
# ========================================================================= #
|
1068
|
+
def commandline?
|
1069
|
+
@runmode == :commandline
|
1070
|
+
end
|
1071
|
+
|
1072
|
+
# ========================================================================= #
|
1073
|
+
# === be_silent
|
1074
|
+
# ========================================================================= #
|
1075
|
+
def be_silent
|
1076
|
+
@be_silent = true
|
1077
|
+
end; alias be_quiet be_silent # === be_quiet
|
1078
|
+
|
1079
|
+
# ========================================================================= #
|
1080
|
+
# === set_be_silent
|
1081
|
+
# ========================================================================= #
|
1082
|
+
def set_be_silent(i = true)
|
1083
|
+
@be_silent = i
|
1084
|
+
end
|
1085
|
+
|
1086
|
+
# ========================================================================= #
|
1087
|
+
# === be_silent?
|
1088
|
+
# ========================================================================= #
|
1089
|
+
def be_silent?
|
1090
|
+
@be_silent
|
1091
|
+
end
|
1092
|
+
|
1093
|
+
# ========================================================================= #
|
1094
|
+
# === start_the_sinatra_interface
|
1095
|
+
# ========================================================================= #
|
1096
|
+
def start_the_sinatra_interface
|
1097
|
+
require 'environment_information/www/sinatra_interface.rb'
|
1098
|
+
::EnvironmentInformation.start_sinatra_interface
|
1099
|
+
end
|
1100
|
+
|
1101
|
+
# ========================================================================= #
|
1102
|
+
# === do_not_display_the_result
|
1103
|
+
# ========================================================================= #
|
1104
|
+
def do_not_display_the_result
|
1105
|
+
@display_result = false
|
1106
|
+
end
|
1107
|
+
|
1108
|
+
# ========================================================================= #
|
1109
|
+
# === do_rename_kde_konsole
|
1110
|
+
#
|
1111
|
+
# This will attempt to rename the KDE Konsole tab, but only if we are
|
1112
|
+
# on roebe.
|
1113
|
+
# ========================================================================= #
|
1114
|
+
def do_rename_kde_konsole(
|
1115
|
+
use_this_title = 'Environment Information'
|
1116
|
+
)
|
1117
|
+
begin
|
1118
|
+
require 'roebe/requires/require_kde_konsole.rb'
|
1119
|
+
rescue LoadError; end
|
1120
|
+
if try_to_rename_the_kde_konsole_tab? and
|
1121
|
+
is_on_roebe? and
|
1122
|
+
Object.const_defined?(:Roebe) and
|
1123
|
+
Roebe.const_defined?(:KdeKonsole)
|
1124
|
+
Roebe.rename_konsole(use_this_title)
|
1125
|
+
end
|
1126
|
+
end
|
1127
|
+
|
1128
|
+
# ========================================================================= #
|
1129
|
+
# === use_ascii_table
|
1130
|
+
#
|
1131
|
+
# We will display in ascii-table format here.
|
1132
|
+
# ========================================================================= #
|
1133
|
+
def use_ascii_table
|
1134
|
+
disable_colours # Can't use colours right now. Perhaps at a later time.
|
1135
|
+
extend Terminal::Table::TableHelper
|
1136
|
+
@table = table ['Name', 'Version']
|
1137
|
+
@table.style = {
|
1138
|
+
padding_left: 2,
|
1139
|
+
width: 110 # Set the width here.
|
1140
|
+
}
|
1141
|
+
@use_ascii_table = true
|
1142
|
+
end
|
1143
|
+
|
1144
|
+
# ========================================================================= #
|
1145
|
+
# === show_everything?
|
1146
|
+
# ========================================================================= #
|
1147
|
+
def show_everything?
|
1148
|
+
@show_everything
|
1149
|
+
end
|
1150
|
+
|
1151
|
+
# ========================================================================= #
|
1152
|
+
# === try_to_rename_the_kde_konsole_tab?
|
1153
|
+
# ========================================================================= #
|
1154
|
+
def try_to_rename_the_kde_konsole_tab?
|
1155
|
+
@internal_hash[:try_to_rename_the_kde_konsole_tab]
|
1156
|
+
end
|
1157
|
+
|
1158
|
+
# ========================================================================= #
|
1159
|
+
# === do_not_run_already
|
1160
|
+
# ========================================================================= #
|
1161
|
+
def do_not_run_already
|
1162
|
+
@run_already = false
|
1163
|
+
end; alias do_not_run do_not_run_already # === do_not_run
|
1164
|
+
|
1165
|
+
# ========================================================================= #
|
1166
|
+
# === open_this_file_in_editor
|
1167
|
+
# ========================================================================= #
|
1168
|
+
def open_this_file_in_editor
|
1169
|
+
_ = "bluefish #{THIS_FILE}"
|
1170
|
+
e _; system _; exit
|
1171
|
+
end
|
1172
|
+
|
1173
|
+
# ========================================================================= #
|
1174
|
+
# === xorg_components?
|
1175
|
+
# ========================================================================= #
|
1176
|
+
def xorg_components?
|
1177
|
+
::EnvironmentInformation.xorg_components?
|
1178
|
+
end; alias return_all_xorg_components xorg_components? # === return_all_xorg_components
|
1179
|
+
|
1180
|
+
# ========================================================================= #
|
1181
|
+
# === do_show_only_the_xorg_components
|
1182
|
+
#
|
1183
|
+
# This method will essentially clear the old dataset before adding
|
1184
|
+
# all xorg-components to the display-part of this class.
|
1185
|
+
#
|
1186
|
+
# The components that are appended here, are defined in the file
|
1187
|
+
# constants/array_tracked_components.rb - so if you wish to add
|
1188
|
+
# new xorg-related entries, you should modify the entries in that
|
1189
|
+
# .rb file.
|
1190
|
+
# ========================================================================= #
|
1191
|
+
def do_show_only_the_xorg_components
|
1192
|
+
clear_old_dataset
|
1193
|
+
do_not_show_the_ruby_components
|
1194
|
+
add(:all_xorg_components)
|
1195
|
+
end
|
1196
|
+
|
1197
|
+
# ========================================================================= #
|
1198
|
+
# === clear_old_dataset
|
1199
|
+
# ========================================================================= #
|
1200
|
+
def clear_old_dataset
|
1201
|
+
@array_report_these_programs.clear
|
1202
|
+
end
|
1203
|
+
|
1204
|
+
# ========================================================================= #
|
1205
|
+
# === shall_we_really_store_which_programs_are_not_up_to_date?
|
1206
|
+
#
|
1207
|
+
# This method will also honour whether the user is on a roebe-like
|
1208
|
+
# system or whether the user is not.
|
1209
|
+
# ========================================================================= #
|
1210
|
+
def shall_we_really_store_which_programs_are_not_up_to_date?
|
1211
|
+
is_on_roebe? and !@array_these_programs_not_up_to_date.empty?
|
1212
|
+
end
|
1213
|
+
|
1214
|
+
# ========================================================================= #
|
1215
|
+
# === result_as_array
|
1216
|
+
#
|
1217
|
+
# The lines that we will have inside of this method, may look like this:
|
1218
|
+
#
|
1219
|
+
# " operating_system: GNU/Linux\n"
|
1220
|
+
#
|
1221
|
+
# ========================================================================= #
|
1222
|
+
def result_as_array
|
1223
|
+
_ = dataset_as_string
|
1224
|
+
splitted = _.split("\n")
|
1225
|
+
splitted.map! {|inner_line|
|
1226
|
+
inner_line.split(': ').map {|entry| entry.strip }
|
1227
|
+
}
|
1228
|
+
return splitted
|
1229
|
+
end; alias result result_as_array # === result
|
1230
|
+
|
1231
|
+
# ========================================================================= #
|
1232
|
+
# === clear_the_main_dataset
|
1233
|
+
# ========================================================================= #
|
1234
|
+
def clear_the_main_dataset
|
1235
|
+
clear_old_dataset
|
1236
|
+
do_not_display_the_ruby_components
|
1237
|
+
end; alias clear_main_dataset clear_the_main_dataset # === clear_main_dataset
|
1238
|
+
alias empty_main_dataset clear_the_main_dataset # === empty_main_dataset
|
1239
|
+
alias empty_main_array clear_the_main_dataset # === empty_main_array
|
1240
|
+
|
1241
|
+
# ========================================================================= #
|
1242
|
+
# === clear_toplevel_hash
|
1243
|
+
# ========================================================================= #
|
1244
|
+
def clear_toplevel_hash
|
1245
|
+
::EnvironmentInformation.clear_hash
|
1246
|
+
end
|
1247
|
+
|
1248
|
+
# ========================================================================= #
|
1249
|
+
# === dataset_as_string
|
1250
|
+
#
|
1251
|
+
# This method must return the dataset in String format. That String
|
1252
|
+
# must already be properly "formatted".
|
1253
|
+
# ========================================================================= #
|
1254
|
+
def dataset_as_string
|
1255
|
+
_ = ''.dup # Put the information onto that String here.
|
1256
|
+
main_dataset?.each {|entry|
|
1257
|
+
if entry.is_a? Array
|
1258
|
+
entry = entry.first # The second entry is ignored in that event.
|
1259
|
+
end
|
1260
|
+
# ===================================================================== #
|
1261
|
+
# Before we can use .send() we have to check whether EnvironmentInformation
|
1262
|
+
# actually responds to that method. If not then we will simply skip
|
1263
|
+
# this snippet for now; but this may have to be changed at some
|
1264
|
+
# point in the future, to more elegantly handle failure. (Sep 2019).
|
1265
|
+
# ===================================================================== #
|
1266
|
+
use_this_method = "return_version_of_#{entry}".to_sym
|
1267
|
+
if ::EnvironmentInformation.respond_to? use_this_method
|
1268
|
+
program_version = ::EnvironmentInformation.send(
|
1269
|
+
use_this_method
|
1270
|
+
)
|
1271
|
+
entry = " #{entry}:"
|
1272
|
+
_ << "#{entry} #{program_version}#{N}"
|
1273
|
+
end
|
1274
|
+
}
|
1275
|
+
return _ # And return the generated String.
|
1276
|
+
end; alias string? dataset_as_string # === string?
|
1277
|
+
alias string dataset_as_string # === string
|
1278
|
+
alias main_string? dataset_as_string # === main_string?
|
1279
|
+
alias stringified dataset_as_string # === stringified
|
1280
|
+
|
1281
|
+
# ========================================================================= #
|
1282
|
+
# === return_version_of_awk?
|
1283
|
+
# ========================================================================= #
|
1284
|
+
def return_version_of_awk?
|
1285
|
+
::EnvironmentInformation.send(__method__)
|
1286
|
+
end; alias return_version_of_awk return_version_of_awk? # == return_version_of_awk
|
1287
|
+
|
1288
|
+
# ========================================================================= #
|
1289
|
+
# === return_version_of_binutils?
|
1290
|
+
# ========================================================================= #
|
1291
|
+
def return_version_of_binutils?
|
1292
|
+
::EnvironmentInformation.send(__method__)
|
1293
|
+
end; alias return_version_of_binutils return_version_of_binutils? # == return_version_of_binutils
|
1294
|
+
|
1295
|
+
# ========================================================================= #
|
1296
|
+
# === return_version_of_coreutils?
|
1297
|
+
# ========================================================================= #
|
1298
|
+
def return_version_of_coreutils?
|
1299
|
+
::EnvironmentInformation.send(__method__)
|
1300
|
+
end; alias return_version_of_coreutils return_version_of_coreutils? # == return_version_of_coreutils
|
1301
|
+
|
1302
|
+
# ========================================================================= #
|
1303
|
+
# === return_version_of_diffutils?
|
1304
|
+
# ========================================================================= #
|
1305
|
+
def return_version_of_diffutils?
|
1306
|
+
::EnvironmentInformation.send(__method__)
|
1307
|
+
end; alias return_version_of_diffutils return_version_of_diffutils? # == return_version_of_diffutils
|
1308
|
+
|
1309
|
+
# ========================================================================= #
|
1310
|
+
# === return_version_of_gcc?
|
1311
|
+
# ========================================================================= #
|
1312
|
+
def return_version_of_gcc?
|
1313
|
+
::EnvironmentInformation.send(__method__)
|
1314
|
+
end; alias return_version_of_gcc return_version_of_gcc? # == return_version_of_gcc
|
1315
|
+
|
1316
|
+
# ========================================================================= #
|
1317
|
+
# === return_version_of_linux_kernel?
|
1318
|
+
# ========================================================================= #
|
1319
|
+
def return_version_of_linux_kernel?
|
1320
|
+
::EnvironmentInformation.send(__method__)
|
1321
|
+
end; alias return_version_of_linux_kernel return_version_of_linux_kernel? # == return_version_of_linux_kernel
|
1322
|
+
|
1323
|
+
# ========================================================================= #
|
1324
|
+
# === is_this_program_included?
|
1325
|
+
# ========================================================================= #
|
1326
|
+
def is_this_program_included?(i)
|
1327
|
+
::EnvironmentInformation.is_this_program_included?(i)
|
1328
|
+
end
|
1329
|
+
|
1330
|
+
# ========================================================================= #
|
1331
|
+
# === return_version_of_glibc?
|
1332
|
+
# ========================================================================= #
|
1333
|
+
def return_version_of_glibc?
|
1334
|
+
::EnvironmentInformation.send(__method__)
|
1335
|
+
end; alias return_version_of_glibc return_version_of_glibc? # == return_version_of_glibc
|
1336
|
+
|
1337
|
+
# ========================================================================= #
|
1338
|
+
# === return_version_of_intltool?
|
1339
|
+
# ========================================================================= #
|
1340
|
+
def return_version_of_intltool?
|
1341
|
+
::EnvironmentInformation.send(__method__)
|
1342
|
+
end; alias return_version_of_intltool return_version_of_intltool? # == return_version_of_intltool
|
1343
|
+
|
1344
|
+
# ========================================================================= #
|
1345
|
+
# === return_version_of_grep?
|
1346
|
+
# ========================================================================= #
|
1347
|
+
def return_version_of_grep?
|
1348
|
+
::EnvironmentInformation.send(__method__)
|
1349
|
+
end; alias return_version_of_grep return_version_of_grep? # == return_version_of_grep
|
1350
|
+
|
1351
|
+
# ========================================================================= #
|
1352
|
+
# === return_version_of_gnupg?
|
1353
|
+
# ========================================================================= #
|
1354
|
+
def return_version_of_gnupg?
|
1355
|
+
::EnvironmentInformation.send(__method__)
|
1356
|
+
end; alias return_version_of_gnupg return_version_of_gnupg? # == return_version_of_gnupg
|
1357
|
+
|
1358
|
+
# ========================================================================= #
|
1359
|
+
# === return_version_of_bison?
|
1360
|
+
# ========================================================================= #
|
1361
|
+
def return_version_of_bison?
|
1362
|
+
::EnvironmentInformation.send(__method__)
|
1363
|
+
end; alias return_version_of_bison return_version_of_bison? # == return_version_of_bison
|
1364
|
+
|
1365
|
+
# ========================================================================= #
|
1366
|
+
# === return_version_of_flex?
|
1367
|
+
# ========================================================================= #
|
1368
|
+
def return_version_of_flex?
|
1369
|
+
::EnvironmentInformation.send(__method__)
|
1370
|
+
end; alias return_version_of_flex return_version_of_flex? # == return_version_of_flex
|
1371
|
+
|
1372
|
+
# ========================================================================= #
|
1373
|
+
# === operating_system?
|
1374
|
+
#
|
1375
|
+
# To quickly test this method, try:
|
1376
|
+
#
|
1377
|
+
# EnvironmentInformation::EnvironmentInformation.new { :do_not_run_yet }.operating_system?
|
1378
|
+
#
|
1379
|
+
# ========================================================================= #
|
1380
|
+
def operating_system?
|
1381
|
+
::EnvironmentInformation.send(__method__)
|
1382
|
+
end; alias return_version_of_operating_system operating_system? # === return_version_of_operating_system
|
1383
|
+
|
1384
|
+
# ========================================================================= #
|
1385
|
+
# === load_dataset_from_this_file
|
1386
|
+
#
|
1387
|
+
# This method can be used to read which programs will be displayed
|
1388
|
+
# from a local file, rather than rely on the pre-set default.
|
1389
|
+
# ========================================================================= #
|
1390
|
+
def load_dataset_from_this_file(i)
|
1391
|
+
if File.exist? i
|
1392
|
+
File.readlines(i).map {|entry|
|
1393
|
+
entry.delete('-').strip # ← Clean up the input a little bit.
|
1394
|
+
}
|
1395
|
+
else
|
1396
|
+
opnn; e "No file exists at `#{sfile(i)}`."
|
1397
|
+
end
|
1398
|
+
end; alias try_to_load_dataset_from_this_file load_dataset_from_this_file # === try_to_load_dataset_from_this_file
|
1399
|
+
alias try_to_read_content_from_this_file load_dataset_from_this_file # === try_to_read_content_from_this_file
|
1400
|
+
|
1401
|
+
# ========================================================================= #
|
1402
|
+
# === consider_storing_which_programs_are_not_up_to_date
|
1403
|
+
# ========================================================================= #
|
1404
|
+
def consider_storing_which_programs_are_not_up_to_date
|
1405
|
+
if shall_we_really_store_which_programs_are_not_up_to_date?
|
1406
|
+
into = FILE_THESE_PROGRAMS_CAN_BE_UPGRADED
|
1407
|
+
what = YAML.dump(@array_these_programs_not_up_to_date)
|
1408
|
+
if File.directory?('/home/Temp/rbt/')
|
1409
|
+
into = "/home/Temp/rbt/#{File.basename(into)}"
|
1410
|
+
else
|
1411
|
+
into = "#{log_dir?}#{File.basename(into)}"
|
1412
|
+
end
|
1413
|
+
opnn; e 'We will also store which programs are not up to date.'
|
1414
|
+
opnn; e "These will be stored into the file at `#{sfile(into)}`."
|
1415
|
+
::EnvironmentInformation.write_what_into(what, into)
|
1416
|
+
end
|
1417
|
+
end
|
1418
|
+
|
1419
|
+
require 'environment_information/misc_components/operating_system_bit_type.rb'
|
1420
|
+
# ========================================================================= #
|
1421
|
+
# === bit_type?
|
1422
|
+
# ========================================================================= #
|
1423
|
+
def bit_type?
|
1424
|
+
::EnvironmentInformation.operating_system_bit_type
|
1425
|
+
end
|
1426
|
+
|
1427
|
+
# ========================================================================= #
|
1428
|
+
# === register_unavailable_program
|
1429
|
+
#
|
1430
|
+
# Programs that were not be found can be registered through this method.
|
1431
|
+
# ========================================================================= #
|
1432
|
+
def register_unavailable_program(i)
|
1433
|
+
i = i.to_sym # Let's store only Symbols.
|
1434
|
+
@array_unavailable_programs << i
|
1435
|
+
end; alias register_not_found register_unavailable_program # === register_not_found
|
1436
|
+
|
1437
|
+
require 'environment_information/misc_components/cpuinfo.rb'
|
1438
|
+
# ========================================================================= #
|
1439
|
+
# === cpu_model?
|
1440
|
+
# ========================================================================= #
|
1441
|
+
def cpu_model?
|
1442
|
+
::EnvironmentInformation.cpuinfo?
|
1443
|
+
end
|
1444
|
+
|
1445
|
+
require 'environment_information/misc_components/ram.rb'
|
1446
|
+
# ========================================================================= #
|
1447
|
+
# === ram?
|
1448
|
+
# ========================================================================= #
|
1449
|
+
def ram?
|
1450
|
+
::EnvironmentInformation.ram?
|
1451
|
+
end
|
1452
|
+
|
1453
|
+
require 'environment_information/misc_components/screen_resolution.rb'
|
1454
|
+
# ========================================================================= #
|
1455
|
+
# === screen_resolution?
|
1456
|
+
# ========================================================================= #
|
1457
|
+
def screen_resolution?
|
1458
|
+
::EnvironmentInformation.screen_resolution?
|
1459
|
+
end
|
1460
|
+
|
1461
|
+
require 'environment_information/misc_components/cflags.rb'
|
1462
|
+
# ========================================================================= #
|
1463
|
+
# === cflags_in_use?
|
1464
|
+
# ========================================================================= #
|
1465
|
+
def cflags_in_use?
|
1466
|
+
::EnvironmentInformation.cflags_in_use?
|
1467
|
+
end
|
1468
|
+
|
1469
|
+
# ========================================================================= #
|
1470
|
+
# === return_every_registered_component
|
1471
|
+
# ========================================================================= #
|
1472
|
+
def return_every_registered_component
|
1473
|
+
array = ::EnvironmentInformation.tracked_programs?+
|
1474
|
+
::EnvironmentInformation.tracked_non_programs?+
|
1475
|
+
::EnvironmentInformation.science_cluster?+
|
1476
|
+
::EnvironmentInformation.xorg_components?
|
1477
|
+
array = array.flatten.uniq
|
1478
|
+
# ======================================================================= #
|
1479
|
+
# === The mate-desktop
|
1480
|
+
#
|
1481
|
+
# Since as of 31.03.2019 we will also try to show the mate-desktop
|
1482
|
+
# components if the RBT project is available/installed.
|
1483
|
+
# ======================================================================= #
|
1484
|
+
if can_we_query_the_mate_desktop?
|
1485
|
+
# ===================================================================== #
|
1486
|
+
# Keep in mind that this Array is nested, so the name is
|
1487
|
+
# included as well as the version.
|
1488
|
+
# ===================================================================== #
|
1489
|
+
_ = RBT.return_mate_desktop_version_array
|
1490
|
+
_.each {|a,b|
|
1491
|
+
# array << [a, b]
|
1492
|
+
array << a
|
1493
|
+
register_onto_the_main_hash(a, b)
|
1494
|
+
}
|
1495
|
+
end
|
1496
|
+
return array # Return our findings.
|
1497
|
+
end
|
1498
|
+
|
1499
|
+
# ========================================================================= #
|
1500
|
+
# === clear_hash_and_missing_components
|
1501
|
+
# ========================================================================= #
|
1502
|
+
def clear_hash_and_missing_components
|
1503
|
+
clear_toplevel_hash
|
1504
|
+
clear_missing_components
|
1505
|
+
end
|
1506
|
+
|
1507
|
+
# ========================================================================= #
|
1508
|
+
# === clear_missing_components
|
1509
|
+
# ========================================================================= #
|
1510
|
+
def clear_missing_components
|
1511
|
+
::EnvironmentInformation.clear_missing_components
|
1512
|
+
end
|
1513
|
+
|
1514
|
+
# ========================================================================= #
|
1515
|
+
# === return_remote_gtk2_version
|
1516
|
+
#
|
1517
|
+
# Be wary when using this method, as it may slow down the whole
|
1518
|
+
# application, due to making remote web-based queries.
|
1519
|
+
# ========================================================================= #
|
1520
|
+
def return_remote_gtk2_version
|
1521
|
+
::EnvironmentInformation.return_remote_gtk2_version
|
1522
|
+
end
|
1523
|
+
|
1524
|
+
# ========================================================================= #
|
1525
|
+
# === do_compare_the_program_version
|
1526
|
+
#
|
1527
|
+
# This method can be used if the user wishes to also compare the
|
1528
|
+
# program version of the installed programs. This functionality
|
1529
|
+
# depends on the rbt gem, and the RBT namespace.
|
1530
|
+
# ========================================================================= #
|
1531
|
+
def do_compare_the_program_version(
|
1532
|
+
be_verbose = true
|
1533
|
+
)
|
1534
|
+
if be_verbose
|
1535
|
+
@array_show_this_to_the_user <<
|
1536
|
+
'The program versions will also be compared.'
|
1537
|
+
end
|
1538
|
+
@internal_hash[:compare_program_versions] = true
|
1539
|
+
end
|
1540
|
+
|
1541
|
+
# ========================================================================= #
|
1542
|
+
# === compare_program_versions?
|
1543
|
+
# ========================================================================= #
|
1544
|
+
def compare_program_versions?
|
1545
|
+
@internal_hash[:compare_program_versions]
|
1546
|
+
end; alias compare_program_version? compare_program_versions? # === compare_program_version?
|
1547
|
+
|
1548
|
+
# ========================================================================= #
|
1549
|
+
# === is_rbt_available_and_may_we_try_to_use_rbt?
|
1550
|
+
# ========================================================================= #
|
1551
|
+
def is_rbt_available_and_may_we_try_to_use_rbt?
|
1552
|
+
is_rbt_available? and may_we_try_to_use_rbt?
|
1553
|
+
end
|
1554
|
+
|
1555
|
+
# ========================================================================= #
|
1556
|
+
# === report_the_remote_urls?
|
1557
|
+
# ========================================================================= #
|
1558
|
+
def report_the_remote_urls?
|
1559
|
+
@internal_hash[:report_the_remote_urls]
|
1560
|
+
end
|
1561
|
+
|
1562
|
+
# ========================================================================= #
|
1563
|
+
# === return_version_of_busyboxy?
|
1564
|
+
# ========================================================================= #
|
1565
|
+
def return_version_of_busyboxy?
|
1566
|
+
::EnvironmentInformation.send(__method__)
|
1567
|
+
end; alias return_version_of_busyboxy return_version_of_busyboxy? # == return_version_of_busyboxy
|
1568
|
+
|
1569
|
+
# ========================================================================= #
|
1570
|
+
# === return_version_of_boost?
|
1571
|
+
# ========================================================================= #
|
1572
|
+
def return_version_of_boost?
|
1573
|
+
::EnvironmentInformation.send(__method__)
|
1574
|
+
end; alias return_version_of_boost return_version_of_boost? # == return_version_of_boost
|
1575
|
+
|
1576
|
+
# ========================================================================= #
|
1577
|
+
# === return_version_of_xvid?
|
1578
|
+
# ========================================================================= #
|
1579
|
+
def return_version_of_xvid?
|
1580
|
+
::EnvironmentInformation.send(__method__)
|
1581
|
+
end; alias return_version_of_xvid return_version_of_xvid? # == return_version_of_xvid
|
1582
|
+
|
1583
|
+
# ========================================================================= #
|
1584
|
+
# === start_gtk_component
|
1585
|
+
#
|
1586
|
+
# To invoke this method from the commandline, do:
|
1587
|
+
#
|
1588
|
+
# envi --start-gtk
|
1589
|
+
#
|
1590
|
+
# ========================================================================= #
|
1591
|
+
def start_gtk_component
|
1592
|
+
require 'environment_information/gui/gtk3/environment_information.rb'
|
1593
|
+
::EnvironmentInformation.run_gtk
|
1594
|
+
@do_exit_the_program = true
|
1595
|
+
end
|
1596
|
+
|
1597
|
+
# ========================================================================= #
|
1598
|
+
# === do_sort_alphabetically (sort tag)
|
1599
|
+
#
|
1600
|
+
# Some entries are Symbols, which is why we have to call .to_s in the
|
1601
|
+
# method here.
|
1602
|
+
# ========================================================================= #
|
1603
|
+
def do_sort_alphabetically(
|
1604
|
+
display_these_components = display_which_components?
|
1605
|
+
)
|
1606
|
+
_ = display_these_components.sort_by {|name, version| name.to_s }
|
1607
|
+
set_main_array(_)
|
1608
|
+
end
|
1609
|
+
|
1610
|
+
# ========================================================================= #
|
1611
|
+
# === do_not_save_anything
|
1612
|
+
# ========================================================================= #
|
1613
|
+
def do_not_save_anything
|
1614
|
+
@shall_the_results_be_saved = false
|
1615
|
+
# ======================================================================= #
|
1616
|
+
# We will also avoid saving the results into a local yaml file.
|
1617
|
+
# ======================================================================= #
|
1618
|
+
@internal_hash[:store_the_results_into_local_files] = false
|
1619
|
+
end; alias do_not_store_anything do_not_save_anything # === do_not_store_anything
|
1620
|
+
|
1621
|
+
# ========================================================================= #
|
1622
|
+
# === do_display_in_a_short_format
|
1623
|
+
#
|
1624
|
+
# The short-format means that we will use only a compact set of
|
1625
|
+
# programs to display. For example, "make" and "bash" will not be
|
1626
|
+
# displayed, neither "binutils" or "ruby".
|
1627
|
+
# ========================================================================= #
|
1628
|
+
def do_display_in_a_short_format
|
1629
|
+
@display_everything_in_short_format = true
|
1630
|
+
end
|
1631
|
+
|
1632
|
+
# ========================================================================= #
|
1633
|
+
# === sort_alphabetically?
|
1634
|
+
# ========================================================================= #
|
1635
|
+
def sort_alphabetically?
|
1636
|
+
@internal_hash[:sort_alphabetically]
|
1637
|
+
end
|
1638
|
+
|
1639
|
+
# ========================================================================= #
|
1640
|
+
# === enable_sort_alphabetically
|
1641
|
+
# ========================================================================= #
|
1642
|
+
def enable_sort_alphabetically
|
1643
|
+
@internal_hash[:sort_alphabetically] = true
|
1644
|
+
end
|
1645
|
+
|
1646
|
+
# ========================================================================= #
|
1647
|
+
# === opnn
|
1648
|
+
# ========================================================================= #
|
1649
|
+
def opnn
|
1650
|
+
if TRY_TO_MAKE_USE_OF_THE_OPN_GEM_IF_IT_IS_AVAILABLE and
|
1651
|
+
Object.const_defined?(:Opn)
|
1652
|
+
Opn.opn({
|
1653
|
+
namespace: NAMESPACE,
|
1654
|
+
use_colours: use_colours?
|
1655
|
+
})
|
1656
|
+
end
|
1657
|
+
end; alias opn opnn # === opn
|
1658
|
+
|
1659
|
+
# ========================================================================= #
|
1660
|
+
# === register_sigint
|
1661
|
+
# ========================================================================= #
|
1662
|
+
def register_sigint
|
1663
|
+
Signal.trap('SIGINT') { e; exit }
|
1664
|
+
end
|
1665
|
+
|
1666
|
+
# ========================================================================= #
|
1667
|
+
# === reset (reset tag)
|
1668
|
+
# ========================================================================= #
|
1669
|
+
def reset
|
1670
|
+
# ======================================================================= #
|
1671
|
+
# === @pkg_config_query
|
1672
|
+
# ======================================================================= #
|
1673
|
+
@pkg_config_query = ::EnvironmentInformation::Queries::PkgConfig.new
|
1674
|
+
# ======================================================================= #
|
1675
|
+
# === @simple_version_query
|
1676
|
+
# ======================================================================= #
|
1677
|
+
@simple_version_query = ::EnvironmentInformation::Queries::SimpleVersion.new
|
1678
|
+
# ======================================================================= #
|
1679
|
+
# === @complex_version_query
|
1680
|
+
# ======================================================================= #
|
1681
|
+
@complex_version_query = ::EnvironmentInformation::Queries::ComplexVersion.new
|
1682
|
+
# ======================================================================= #
|
1683
|
+
# === @array_report_these_programs
|
1684
|
+
#
|
1685
|
+
# This Array denotes which programs are to be reported.
|
1686
|
+
#
|
1687
|
+
# By default it is empty.
|
1688
|
+
# ======================================================================= #
|
1689
|
+
@array_report_these_programs = []
|
1690
|
+
# ======================================================================= #
|
1691
|
+
# === @array_unavailable_programs
|
1692
|
+
#
|
1693
|
+
# Programs which could not be found can be registered into the following
|
1694
|
+
# Array.
|
1695
|
+
# ======================================================================= #
|
1696
|
+
@array_unavailable_programs = []
|
1697
|
+
# ======================================================================= #
|
1698
|
+
# === @runmode
|
1699
|
+
#
|
1700
|
+
# The @runmode variable can be :commandline or :gui or :www.
|
1701
|
+
# ======================================================================= #
|
1702
|
+
@runmode = :commandline
|
1703
|
+
# ======================================================================= #
|
1704
|
+
# === @show_everything
|
1705
|
+
#
|
1706
|
+
# If the following instance variable is set to true then this class
|
1707
|
+
# will try to show every registered (and thus, available) component.
|
1708
|
+
#
|
1709
|
+
# By default this is not wanted, so it is disabled. The user has to
|
1710
|
+
# specifically enable this option via the commandline, if so
|
1711
|
+
# desired, and thus overrule this default value.
|
1712
|
+
# ======================================================================= #
|
1713
|
+
@show_everything = false
|
1714
|
+
# ======================================================================= #
|
1715
|
+
# === @display_result
|
1716
|
+
#
|
1717
|
+
# If the following instance variable is true, which is the case by
|
1718
|
+
# default, then this class will report to the user on the commandline.
|
1719
|
+
#
|
1720
|
+
# If it is set to false then nothing will be displayed; this is
|
1721
|
+
# useful when you only want to obtain the dataset, without
|
1722
|
+
# showing anything to the user.
|
1723
|
+
# ======================================================================= #
|
1724
|
+
@display_result = true
|
1725
|
+
# ======================================================================= #
|
1726
|
+
# === @be_silent
|
1727
|
+
#
|
1728
|
+
# By default, this class is not silent, meaning that it will display
|
1729
|
+
# information to the user.
|
1730
|
+
# ======================================================================= #
|
1731
|
+
@be_silent = false
|
1732
|
+
# ======================================================================= #
|
1733
|
+
# === @may_we_try_to_use_rbt
|
1734
|
+
#
|
1735
|
+
# Whether we may query RBT for additional help or not. By default
|
1736
|
+
# we will try to make use of RBT.
|
1737
|
+
# ======================================================================= #
|
1738
|
+
@may_we_try_to_use_rbt = true
|
1739
|
+
# ======================================================================= #
|
1740
|
+
# === @array_show_this_to_the_user
|
1741
|
+
#
|
1742
|
+
# The following Array can be used to show messages to the user.
|
1743
|
+
# ======================================================================= #
|
1744
|
+
@array_show_this_to_the_user = []
|
1745
|
+
# ======================================================================= #
|
1746
|
+
# === @array_display_these_components
|
1747
|
+
#
|
1748
|
+
# This Array will display the components on the commandline.
|
1749
|
+
#
|
1750
|
+
# Take note that the order is important: the entries that appear first
|
1751
|
+
# will be displayed earlier. In other words: first entries will be
|
1752
|
+
# shown first as well.
|
1753
|
+
# ======================================================================= #
|
1754
|
+
@array_display_these_components = []
|
1755
|
+
# ======================================================================= #
|
1756
|
+
# === @show_ruby_version_and_gem_version
|
1757
|
+
#
|
1758
|
+
# This instance variable determines whether class EnvironmentInformation
|
1759
|
+
# will display the ruby version and the gem version.
|
1760
|
+
#
|
1761
|
+
# By default we will do so, but there may be situations where this
|
1762
|
+
# may be unwanted, or not a good idea, such as in a minimal system
|
1763
|
+
# where no ruby is running, or if the user only wants to display
|
1764
|
+
# very little information.
|
1765
|
+
# ======================================================================= #
|
1766
|
+
@show_ruby_version_and_gem_version = true
|
1767
|
+
# ======================================================================= #
|
1768
|
+
# === @display_everything_in_short_format
|
1769
|
+
#
|
1770
|
+
# This variable determines whether we will use a compact-display or
|
1771
|
+
# whether there will be one-entry-per-program instead.
|
1772
|
+
# ======================================================================= #
|
1773
|
+
@display_everything_in_short_format = false
|
1774
|
+
# ======================================================================= #
|
1775
|
+
# === @run_already
|
1776
|
+
#
|
1777
|
+
# This variable will be true by default.
|
1778
|
+
# ======================================================================= #
|
1779
|
+
@run_already = true
|
1780
|
+
# ======================================================================= #
|
1781
|
+
# === @show_help
|
1782
|
+
#
|
1783
|
+
# If this variable is set to true, then we will only show help, then
|
1784
|
+
# exit the program.
|
1785
|
+
# ======================================================================= #
|
1786
|
+
@show_help = false
|
1787
|
+
# ======================================================================= #
|
1788
|
+
# === @do_exit_the_program
|
1789
|
+
#
|
1790
|
+
# The following variable can determine when we exit from this class.
|
1791
|
+
# By default we will not exist early.
|
1792
|
+
# ======================================================================= #
|
1793
|
+
@do_exit_the_program = false
|
1794
|
+
# ======================================================================= #
|
1795
|
+
# === @array_these_programs_not_up_to_date
|
1796
|
+
#
|
1797
|
+
# This Array can be used to save into a local file which programs
|
1798
|
+
# are not up to date.
|
1799
|
+
# ======================================================================= #
|
1800
|
+
if is_on_roebe?
|
1801
|
+
@array_these_programs_not_up_to_date = []
|
1802
|
+
end
|
1803
|
+
# ======================================================================= #
|
1804
|
+
# === @internal_hash
|
1805
|
+
# ======================================================================= #
|
1806
|
+
@internal_hash = {}
|
1807
|
+
# ======================================================================= #
|
1808
|
+
# === :report_the_remote_urls
|
1809
|
+
#
|
1810
|
+
# If this instance variable is set to true then the remote URLs will
|
1811
|
+
# be shown as well, on the commandline.
|
1812
|
+
# ======================================================================= #
|
1813
|
+
@internal_hash[:report_the_remote_urls] = false
|
1814
|
+
# ======================================================================= #
|
1815
|
+
# === :try_to_rename_the_kde_konsole_tab
|
1816
|
+
#
|
1817
|
+
# The following instance variable will determine as to whether we will
|
1818
|
+
# try to make use of the KDE Konsole and rename the tab of the konsole
|
1819
|
+
# there.
|
1820
|
+
#
|
1821
|
+
# Since as of October 2018 we will not use the KDE konsole by default
|
1822
|
+
# anymore. This may change at a later moment in time, though.
|
1823
|
+
# ======================================================================= #
|
1824
|
+
@internal_hash[:try_to_rename_the_kde_konsole_tab] = false
|
1825
|
+
# ======================================================================= #
|
1826
|
+
# === :generate_a_html_file
|
1827
|
+
#
|
1828
|
+
# If the next instance variable is set to true then a html file will
|
1829
|
+
# be generated. By default this will not happen, though.
|
1830
|
+
# ======================================================================= #
|
1831
|
+
@internal_hash[:generate_a_html_file] = false
|
1832
|
+
# ======================================================================= #
|
1833
|
+
# === :store_the_results_into_local_files
|
1834
|
+
#
|
1835
|
+
# If the following variable is set to true then the project will
|
1836
|
+
# generate local files too, e. g. yaml files and what not.
|
1837
|
+
# ======================================================================= #
|
1838
|
+
@internal_hash[:store_the_results_into_local_files] = true
|
1839
|
+
# ======================================================================= #
|
1840
|
+
# === :use_ascii_table
|
1841
|
+
#
|
1842
|
+
# Whether to use an ASCII table or whether we will not:
|
1843
|
+
# ======================================================================= #
|
1844
|
+
@internal_hash[:use_ascii_table] = false
|
1845
|
+
# ======================================================================= #
|
1846
|
+
# === :table
|
1847
|
+
# ======================================================================= #
|
1848
|
+
@internal_hash[:table] = nil # The ascii table.
|
1849
|
+
# ======================================================================= #
|
1850
|
+
# === :compare_program_versions
|
1851
|
+
#
|
1852
|
+
# This instance variable can be used to also compare the program
|
1853
|
+
# versions, if the RBT project is available.
|
1854
|
+
#
|
1855
|
+
# By default this will not be done, though.
|
1856
|
+
# ======================================================================= #
|
1857
|
+
@internal_hash[:compare_program_versions] = false
|
1858
|
+
# ======================================================================= #
|
1859
|
+
# === :use_one_line_to_show_the_result
|
1860
|
+
# ======================================================================= #
|
1861
|
+
@internal_hash[:use_one_line_to_show_the_result] = false
|
1862
|
+
# ======================================================================= #
|
1863
|
+
# === :sort_alphabetically
|
1864
|
+
#
|
1865
|
+
# Whether to sort the main Hash alphabetically or not.
|
1866
|
+
# ======================================================================= #
|
1867
|
+
@internal_hash[:sort_alphabetically] = false
|
1868
|
+
end
|
1869
|
+
|
1870
|
+
# ========================================================================= #
|
1871
|
+
# === dont_show_ruby_stuff
|
1872
|
+
#
|
1873
|
+
# Disable showing ruby + gem information.
|
1874
|
+
# ========================================================================= #
|
1875
|
+
def dont_show_ruby_stuff # Dont show ruby stuff.
|
1876
|
+
@show_ruby_version_and_gem_version = false
|
1877
|
+
end; alias show_no_ruby dont_show_ruby_stuff # === show_no_ruby
|
1878
|
+
|
1879
|
+
# ========================================================================= #
|
1880
|
+
# === return_all_ruby_components
|
1881
|
+
#
|
1882
|
+
# Combine three calls into one here - all related to ruby.
|
1883
|
+
# ========================================================================= #
|
1884
|
+
def return_all_ruby_components
|
1885
|
+
%i(
|
1886
|
+
ruby
|
1887
|
+
rubygems
|
1888
|
+
rubygems_installation_directory
|
1889
|
+
)
|
1890
|
+
end
|
1891
|
+
|
1892
|
+
# ========================================================================= #
|
1893
|
+
# === consider_adding_the_ruby_components
|
1894
|
+
#
|
1895
|
+
# This method can be used to consider adding the ruby-components,
|
1896
|
+
# which means "ruby" itself, rubygems "gem", and the rubygems
|
1897
|
+
# installation directory.
|
1898
|
+
# ========================================================================= #
|
1899
|
+
def consider_adding_the_ruby_components
|
1900
|
+
if @show_ruby_version_and_gem_version
|
1901
|
+
add(
|
1902
|
+
return_all_ruby_components # Combine three calls into one here - all related to ruby.
|
1903
|
+
)
|
1904
|
+
end
|
1905
|
+
end
|
1906
|
+
|
1907
|
+
# ========================================================================= #
|
1908
|
+
# === do_not_show_the_ruby_components
|
1909
|
+
# ========================================================================= #
|
1910
|
+
def do_not_show_the_ruby_components
|
1911
|
+
@show_ruby_version_and_gem_version = false
|
1912
|
+
end; alias do_not_display_the_ruby_components do_not_show_the_ruby_components # === do_not_display_the_ruby_components
|
1913
|
+
|
1914
|
+
# ========================================================================= #
|
1915
|
+
# === return_version_of_rubygems?
|
1916
|
+
# ========================================================================= #
|
1917
|
+
def return_version_of_rubygems?
|
1918
|
+
::EnvironmentInformation.send(__method__)
|
1919
|
+
end; alias return_version_of_rubygems return_version_of_rubygems? # == return_version_of_rubygems
|
1920
|
+
|
1921
|
+
# ========================================================================= #
|
1922
|
+
# === return_version_of_ruby?
|
1923
|
+
# ========================================================================= #
|
1924
|
+
def return_version_of_ruby?
|
1925
|
+
::EnvironmentInformation.send(__method__)
|
1926
|
+
end; alias return_version_of_ruby return_version_of_ruby? # == return_version_of_ruby
|
1927
|
+
|
1928
|
+
require 'environment_information/misc_components/rubygems_installation_directory.rb'
|
1929
|
+
# ========================================================================= #
|
1930
|
+
# === rubygems_installation_directory?
|
1931
|
+
# ========================================================================= #
|
1932
|
+
def rubygems_installation_directory?
|
1933
|
+
::EnvironmentInformation.rubygems_installation_directory?
|
1934
|
+
end
|
1935
|
+
|
1936
|
+
# ========================================================================= #
|
1937
|
+
# === run (run tag)
|
1938
|
+
# ========================================================================= #
|
1939
|
+
def run
|
1940
|
+
# ======================================================================= #
|
1941
|
+
# Try to rename the KDE konsole first. This will happen on
|
1942
|
+
# roebe-systems only.
|
1943
|
+
# ======================================================================= #
|
1944
|
+
do_rename_kde_konsole
|
1945
|
+
# ======================================================================= #
|
1946
|
+
# ^^^ This check happens here again because menu() is allowed to
|
1947
|
+
# toggle this variable.
|
1948
|
+
# ======================================================================= #
|
1949
|
+
if @display_everything_in_short_format
|
1950
|
+
assign_components_for_the_short_format # Handle the short format here.
|
1951
|
+
end
|
1952
|
+
do_sort_alphabetically if sort_alphabetically? # ← Must come before the report-step.
|
1953
|
+
unless @do_exit_the_program
|
1954
|
+
# ===================================================================== #
|
1955
|
+
# === Report step
|
1956
|
+
#
|
1957
|
+
# We may only display the components if @display_result is true.
|
1958
|
+
# ===================================================================== #
|
1959
|
+
if @display_result
|
1960
|
+
register_the_available_components_and_show_them_at_once
|
1961
|
+
end
|
1962
|
+
end
|
1963
|
+
# ======================================================================= #
|
1964
|
+
# === Consider generating a .html file
|
1965
|
+
#
|
1966
|
+
# The user may want to generate a .html file, so the following
|
1967
|
+
# functionality allows the user to do so. This check should
|
1968
|
+
# ideally come before other local files are generated.
|
1969
|
+
# ======================================================================= #
|
1970
|
+
do_generate_a_html_file if @internal_hash[:generate_a_html_file]
|
1971
|
+
if commandline? and store_the_results_into_local_files?
|
1972
|
+
# ===================================================================== #
|
1973
|
+
# Only store local files if the variable
|
1974
|
+
# @store_the_results_into_local_files is true.
|
1975
|
+
# ===================================================================== #
|
1976
|
+
consider_storing_the_components_that_were_displayed
|
1977
|
+
consider_storing_which_programs_are_not_up_to_date
|
1978
|
+
end
|
1979
|
+
end; alias feedback_everything run # === feedback_everything
|
1980
|
+
alias do_feedback_everything run # === do_feedback_everything
|
1981
|
+
alias output run # === output
|
1982
|
+
alias feedback run # === feedback
|
1983
|
+
|
1984
|
+
|
1985
|
+
require 'environment_information/toplevel_methods/is_on_roebe.rb'
|
1986
|
+
require 'environment_information/toplevel_methods/return_alias_to.rb'
|
1987
|
+
begin
|
1988
|
+
require 'rbt/requires/swift_version.rb'
|
1989
|
+
rescue LoadError
|
1990
|
+
if ::EnvironmentInformation.is_on_roebe?
|
1991
|
+
puts 'The file rbt/toplevel_methods/swift_return_version_of_this_program.rb is not available.'
|
1992
|
+
end
|
1993
|
+
end
|
1994
|
+
|
1995
|
+
begin
|
1996
|
+
require 'rbt/toplevel_methods/url.rb'
|
1997
|
+
rescue LoadError
|
1998
|
+
if ::EnvironmentInformation.is_on_roebe?
|
1999
|
+
puts 'The file rbt/toplevel_methods/url.rb is not available.'
|
2000
|
+
end
|
2001
|
+
end
|
2002
|
+
|
2003
|
+
# ========================================================================= #
|
2004
|
+
# === show_help?
|
2005
|
+
# ========================================================================= #
|
2006
|
+
def show_help?
|
2007
|
+
@show_help
|
2008
|
+
end
|
2009
|
+
|
2010
|
+
# ========================================================================= #
|
2011
|
+
# === compare_via_gem_version
|
2012
|
+
# ========================================================================= #
|
2013
|
+
def compare_via_gem_version(i)
|
2014
|
+
begin
|
2015
|
+
Gem::Version.new(i)
|
2016
|
+
rescue ArgumentError => error
|
2017
|
+
e Colours.tomato(error)
|
2018
|
+
e 'We will continue nonetheless ('+i+')'
|
2019
|
+
return nil
|
2020
|
+
end
|
2021
|
+
end
|
2022
|
+
|
2023
|
+
require 'environment_information/toplevel_methods/e.rb'
|
2024
|
+
# ========================================================================= #
|
2025
|
+
# === e (e tag)
|
2026
|
+
#
|
2027
|
+
# The e() method is the general output-method for this class.
|
2028
|
+
# ========================================================================= #
|
2029
|
+
def e(i = '')
|
2030
|
+
unless @be_silent
|
2031
|
+
if use_one_line_to_show_the_result? # This will just use "print".
|
2032
|
+
::EnvironmentInformation.ee(i)
|
2033
|
+
else
|
2034
|
+
::EnvironmentInformation.e(
|
2035
|
+
i, display_everything_in_short_format: @display_everything_in_short_format
|
2036
|
+
)
|
2037
|
+
end
|
2038
|
+
end
|
2039
|
+
end
|
2040
|
+
|
2041
|
+
# ========================================================================= #
|
2042
|
+
# === do_report_the_remote_urls
|
2043
|
+
#
|
2044
|
+
# Enable the reporting of the remote URLs, if available.
|
2045
|
+
# ========================================================================= #
|
2046
|
+
def do_report_the_remote_urls
|
2047
|
+
@internal_hash[:report_the_remote_urls] = true
|
2048
|
+
end
|
2049
|
+
|
2050
|
+
# ========================================================================= #
|
2051
|
+
# === show_the_registered_components
|
2052
|
+
# ========================================================================= #
|
2053
|
+
def show_the_registered_components(
|
2054
|
+
i = tracked_programs?
|
2055
|
+
)
|
2056
|
+
e
|
2057
|
+
e 'The following programs will be tracked:'
|
2058
|
+
e
|
2059
|
+
use_one_line_to_show_the_result = use_one_line_to_show_the_result?
|
2060
|
+
i.each_with_index {|this_program, index| index += 1
|
2061
|
+
if use_one_line_to_show_the_result
|
2062
|
+
padded_index = index.to_s+') '
|
2063
|
+
else
|
2064
|
+
padded_index = ' '+(index.to_s+') ').rjust(5)
|
2065
|
+
end
|
2066
|
+
colourized_and_padded_index = seagreen(padded_index)
|
2067
|
+
e colourized_and_padded_index+
|
2068
|
+
steelblue(this_program)
|
2069
|
+
}
|
2070
|
+
e
|
2071
|
+
end
|
2072
|
+
|
2073
|
+
# ========================================================================= #
|
2074
|
+
# === report_version
|
2075
|
+
# ========================================================================= #
|
2076
|
+
def report_version
|
2077
|
+
require 'environment_information/toplevel_methods/menu.rb'
|
2078
|
+
::EnvironmentInformation.report_version
|
2079
|
+
@do_exit_the_program = true
|
2080
|
+
end
|
2081
|
+
|
2082
|
+
# ========================================================================= #
|
2083
|
+
# === display_these_components?
|
2084
|
+
#
|
2085
|
+
# Note that @display_these_components is a Hash.
|
2086
|
+
# ========================================================================= #
|
2087
|
+
def display_these_components?
|
2088
|
+
@array_report_these_programs
|
2089
|
+
end; alias components? display_these_components? # === components?
|
2090
|
+
alias main_dataset? display_these_components? # === main_dataset?
|
2091
|
+
alias main_entry? display_these_components? # === main_entry?
|
2092
|
+
alias dataset? display_these_components? # === dataset?
|
2093
|
+
alias result display_these_components? # === result
|
2094
|
+
alias result? display_these_components? # === result?
|
2095
|
+
alias display_which_components? display_these_components? # === display_which_components?
|
2096
|
+
alias array_obtain_these_programs? display_these_components? # === array_obtain_these_programs?
|
2097
|
+
alias array_with_entries? display_these_components? # === array_with_entries?
|
2098
|
+
alias main_array? display_these_components? # === main_array?
|
2099
|
+
alias programs? display_these_components? # === programs?
|
2100
|
+
alias show_these_components? display_these_components? # === show_these_components?
|
2101
|
+
|
2102
|
+
# ========================================================================= #
|
2103
|
+
# === main_hash?
|
2104
|
+
# ========================================================================= #
|
2105
|
+
def main_hash?
|
2106
|
+
::EnvironmentInformation.hash?
|
2107
|
+
end
|
2108
|
+
|
2109
|
+
# ========================================================================= #
|
2110
|
+
# === register_the_available_components_and_show_them_at_once (report tag)
|
2111
|
+
#
|
2112
|
+
# This method can be used to register information about the various
|
2113
|
+
# components. It will also instantly display the component at
|
2114
|
+
# hand, to avoid "lagging" behaviour on the commandline.
|
2115
|
+
# ========================================================================= #
|
2116
|
+
def register_the_available_components_and_show_them_at_once(
|
2117
|
+
report_these_programs = @array_report_these_programs
|
2118
|
+
)
|
2119
|
+
if report_these_programs.empty?
|
2120
|
+
opn; e 'There are no components that can be displayed.' # And this ends here.
|
2121
|
+
else
|
2122
|
+
# ===================================================================== #
|
2123
|
+
# Always clear the main Array before proceeding here.
|
2124
|
+
# ===================================================================== #
|
2125
|
+
clear_missing_components
|
2126
|
+
toplevel_hash = ::EnvironmentInformation.hash?
|
2127
|
+
hash_use_this_for_the_query = ::EnvironmentInformation.all_the_queries
|
2128
|
+
# ===================================================================== #
|
2129
|
+
# Iterate over the registered programs next.
|
2130
|
+
# ===================================================================== #
|
2131
|
+
report_these_programs.each {|this_program|
|
2132
|
+
# =================================================================== #
|
2133
|
+
# First, determine the left_side and the right_side.
|
2134
|
+
# =================================================================== #
|
2135
|
+
left_side = this_program.to_s.dup
|
2136
|
+
right_side = nil
|
2137
|
+
case this_program
|
2138
|
+
# =================================================================== #
|
2139
|
+
# === RAM
|
2140
|
+
# =================================================================== #
|
2141
|
+
when :ram,
|
2142
|
+
/^RAM$/i
|
2143
|
+
right_side = ram?.to_s.dup
|
2144
|
+
right_side = right_side.dup if right_side.frozen?
|
2145
|
+
# ================================================================= #
|
2146
|
+
# Append 'MB RAM' in orange colour next, with some padding.
|
2147
|
+
# This is just a small visual "enhancement" that I quite like.
|
2148
|
+
# ================================================================= #
|
2149
|
+
right_side << orange(' MB RAM')
|
2150
|
+
# =================================================================== #
|
2151
|
+
# === Rubygems installation directory
|
2152
|
+
# =================================================================== #
|
2153
|
+
when :rubygems_installation_directory,
|
2154
|
+
/^rubygems( |_)?installation( |_)?directory\??$/i
|
2155
|
+
right_side = rubygems_installation_directory?
|
2156
|
+
# =================================================================== #
|
2157
|
+
# === cflags
|
2158
|
+
# =================================================================== #
|
2159
|
+
when :cflags,
|
2160
|
+
/^cflags$/i,
|
2161
|
+
/^cflags(_|-| )?in(_|-| )?use$/i
|
2162
|
+
right_side = cflags_in_use?
|
2163
|
+
# =================================================================== #
|
2164
|
+
# === Screen resolution
|
2165
|
+
#
|
2166
|
+
# This is a bit "special" in the sense that we will colourize
|
2167
|
+
# the middle 'x', if found, and if colours are used.
|
2168
|
+
# =================================================================== #
|
2169
|
+
when :screen_resolution,
|
2170
|
+
/^screen( |_)?resolution$/i
|
2171
|
+
right_side = screen_resolution?
|
2172
|
+
if right_side.include?('x') and use_colours?
|
2173
|
+
splitted = right_side.split('x')
|
2174
|
+
right_side = colourize_this_in_the_right_side_colour(splitted.first)+
|
2175
|
+
royalblue('x')+
|
2176
|
+
colourize_this_in_the_right_side_colour(splitted.last)
|
2177
|
+
end
|
2178
|
+
# =================================================================== #
|
2179
|
+
# === CPU Model
|
2180
|
+
# =================================================================== #
|
2181
|
+
when /^cpuinfo$/i,
|
2182
|
+
/^CPU(_|-| )?Model/
|
2183
|
+
right_side = cpu_model?
|
2184
|
+
# =================================================================== #
|
2185
|
+
# === Operating system bit type
|
2186
|
+
# =================================================================== #
|
2187
|
+
when /^operating(_|-| )?system(_|-| )?bit(_|-| )?type$/i
|
2188
|
+
right_side = bit_type?
|
2189
|
+
# =================================================================== #
|
2190
|
+
# === Operating system
|
2191
|
+
# =================================================================== #
|
2192
|
+
when /^Operating(_|-| )?system$/i,
|
2193
|
+
:operating_system
|
2194
|
+
right_side = ::EnvironmentInformation.operating_system
|
2195
|
+
end
|
2196
|
+
# =================================================================== #
|
2197
|
+
# Find the corresponding entry next while including aliases:
|
2198
|
+
# =================================================================== #
|
2199
|
+
this_program = this_program.to_sym # These are stored as symbol.
|
2200
|
+
this_program = ::EnvironmentInformation.return_alias_to(this_program)
|
2201
|
+
_ = hash_use_this_for_the_query[this_program]
|
2202
|
+
if hash_use_this_for_the_query.has_key? this_program
|
2203
|
+
if _.to_s.start_with? 'pkg'
|
2204
|
+
# =============================================================== #
|
2205
|
+
# === :pkgconfig
|
2206
|
+
#
|
2207
|
+
# This is by far the simplest solution.
|
2208
|
+
# =============================================================== #
|
2209
|
+
right_side = @pkg_config_query.return_version_of(this_program)
|
2210
|
+
add_this_to_the_toplevel_hash(left_side, right_side)
|
2211
|
+
# ================================================================= #
|
2212
|
+
# === :version
|
2213
|
+
#
|
2214
|
+
# Here we will handle simple versions, e. g. "lftp --version"
|
2215
|
+
# entries, and similar.
|
2216
|
+
# ================================================================= #
|
2217
|
+
elsif _ == :version
|
2218
|
+
right_side = @simple_version_query.return_version_of(this_program)
|
2219
|
+
add_this_to_the_toplevel_hash(left_side, right_side)
|
2220
|
+
else
|
2221
|
+
# =============================================================== #
|
2222
|
+
# Else we will pass through class ComplexVersion:
|
2223
|
+
# =============================================================== #
|
2224
|
+
right_side = @complex_version_query.return_version_of(this_program)
|
2225
|
+
add_this_to_the_toplevel_hash(left_side, right_side)
|
2226
|
+
end
|
2227
|
+
# =================================================================== #
|
2228
|
+
# The next clause has been written specifically to allow querying
|
2229
|
+
# the mate-desktop components.
|
2230
|
+
# =================================================================== #
|
2231
|
+
elsif toplevel_hash.has_key?(this_program) and
|
2232
|
+
toplevel_hash[this_program] # ← This is thus non-nil.
|
2233
|
+
right_side = toplevel_hash[this_program]
|
2234
|
+
end
|
2235
|
+
if right_side.nil?
|
2236
|
+
register_unavailable_program(this_program)
|
2237
|
+
end
|
2238
|
+
# =================================================================== #
|
2239
|
+
# === @internal_hash[:report_the_remote_urls]
|
2240
|
+
#
|
2241
|
+
# Next, honour @internal_hash[:report_the_remote_urls] if it is
|
2242
|
+
# set to true.
|
2243
|
+
# =================================================================== #
|
2244
|
+
if report_the_remote_urls? and
|
2245
|
+
is_rbt_available? and
|
2246
|
+
RBT.respond_to?(:remote_url_for?)
|
2247
|
+
version = ''.dup
|
2248
|
+
_ = this_program.to_s.delete('-').downcase.strip.to_sym
|
2249
|
+
if RBT.does_include?(_)
|
2250
|
+
remote_url = RBT.remote_url_for?(_, :return_as_string)
|
2251
|
+
if is_a_registered_component? _
|
2252
|
+
if version.frozen?
|
2253
|
+
version = version.dup
|
2254
|
+
end
|
2255
|
+
version << lightgreen(remote_url)
|
2256
|
+
if right_side # We can only continue if the program is available.
|
2257
|
+
# In theory we could show the URL anyway, but for the time
|
2258
|
+
# being, at the least, we will not show the URL.
|
2259
|
+
right_side = right_side.dup if right_side.frozen?
|
2260
|
+
right_side << " #{olive('→')} #{version}"
|
2261
|
+
end
|
2262
|
+
end
|
2263
|
+
end
|
2264
|
+
end
|
2265
|
+
# =================================================================== #
|
2266
|
+
# The next method is defined in base.rb.
|
2267
|
+
# =================================================================== #
|
2268
|
+
report_left_right(
|
2269
|
+
left_side,
|
2270
|
+
right_side,
|
2271
|
+
:default_colour,
|
2272
|
+
:default_colour,
|
2273
|
+
:default_colour,
|
2274
|
+
!use_one_line_to_show_the_result?
|
2275
|
+
)
|
2276
|
+
# =================================================================== #
|
2277
|
+
# Next compare the program versions with the local versions.
|
2278
|
+
# =================================================================== #
|
2279
|
+
if compare_program_versions? and
|
2280
|
+
is_rbt_available_and_may_we_try_to_use_rbt? and
|
2281
|
+
RBT.respond_to?(:swift_return_version_of_this_program) and
|
2282
|
+
RBT.does_include?(left_side.to_s.strip)
|
2283
|
+
# ================================================================= #
|
2284
|
+
# Example:
|
2285
|
+
#
|
2286
|
+
# RBT.swift_return_version_of_this_program(:gettext)
|
2287
|
+
#
|
2288
|
+
# ================================================================= #
|
2289
|
+
registered_local_version = RBT.swift_return_version_of_this_program(
|
2290
|
+
left_side.to_s.strip.to_sym
|
2291
|
+
).to_s
|
2292
|
+
# ================================================================= #
|
2293
|
+
# We ignore gtk2 when it comes to the version-check.
|
2294
|
+
# ================================================================= #
|
2295
|
+
next if this_program == :gtk2
|
2296
|
+
# ================================================================= #
|
2297
|
+
# Next use Gem::Version to compare them, but not if the version
|
2298
|
+
# is nil.
|
2299
|
+
# ================================================================= #
|
2300
|
+
unless right_side.nil?
|
2301
|
+
# =============================================================== #
|
2302
|
+
# The .delete('v') is specifically for libuv or node.
|
2303
|
+
# =============================================================== #
|
2304
|
+
registered_local_version = registered_local_version.to_s.
|
2305
|
+
delete('v').
|
2306
|
+
tr('_','.')
|
2307
|
+
a = compare_via_gem_version(registered_local_version)
|
2308
|
+
b = compare_via_gem_version(right_side)
|
2309
|
+
if a and b and (a > b)
|
2310
|
+
result = ''.dup
|
2311
|
+
if use_one_line_to_show_the_result?
|
2312
|
+
result << mediumaquamarine(' ← ')
|
2313
|
+
else # else this is the default.
|
2314
|
+
result << lightblue(' ^^^^ ')
|
2315
|
+
end
|
2316
|
+
result << slateblue('This program could be '\
|
2317
|
+
'upgraded, to the version ')+
|
2318
|
+
steelblue(registered_local_version)
|
2319
|
+
e result
|
2320
|
+
end if registered_local_version =~ /\d+/
|
2321
|
+
end
|
2322
|
+
end
|
2323
|
+
}
|
2324
|
+
end
|
2325
|
+
end; alias display register_the_available_components_and_show_them_at_once # === display
|
2326
|
+
alias report_result register_the_available_components_and_show_them_at_once # === report_result
|
2327
|
+
alias display_the_components register_the_available_components_and_show_them_at_once # === display_the_components
|
2328
|
+
alias display_the_dataset register_the_available_components_and_show_them_at_once # === display_the_dataset
|
2329
|
+
alias work_through_the_programs register_the_available_components_and_show_them_at_once # === work_through_the_programs
|
2330
|
+
alias build_up_the_main_string register_the_available_components_and_show_them_at_once # === build_up_the_main_string
|
2331
|
+
alias display_the_main_components register_the_available_components_and_show_them_at_once # === build_up_the_main_string
|
2332
|
+
alias report register_the_available_components_and_show_them_at_once # === report
|
2333
|
+
|
2334
|
+
# ========================================================================= #
|
2335
|
+
# === menu (menu tag)
|
2336
|
+
#
|
2337
|
+
# This method constitutes the "menu" interface for class
|
2338
|
+
# EnvironmentInformation. It usually deals with the
|
2339
|
+
# commandline-given arguments stored in ARGV.
|
2340
|
+
# ========================================================================= #
|
2341
|
+
def menu(
|
2342
|
+
i = @commandline_arguments
|
2343
|
+
)
|
2344
|
+
if i.is_a? Array
|
2345
|
+
i.each {|entry| menu(entry) }
|
2346
|
+
else
|
2347
|
+
case i # case tag
|
2348
|
+
# ===================================================================== #
|
2349
|
+
# === envi --really-all
|
2350
|
+
#
|
2351
|
+
# This entry point is for really showing everything.
|
2352
|
+
# ===================================================================== #
|
2353
|
+
when /^-?-?REALLY(_|-)?ALL$/i,
|
2354
|
+
/^-?-?compare(_|-)?program(_|-)?version$/i,
|
2355
|
+
/^-?-?compare(_|-)?to(_|-)?program(_|-)?versions$/i,
|
2356
|
+
/^-?-?do(_|-)?compare(_|-)?program(_|-)?version$/i,
|
2357
|
+
/^-?-?really(_|-)?everything$/i # === envi --really-everything
|
2358
|
+
clear_old_dataset
|
2359
|
+
add_default_linux_programs
|
2360
|
+
add_ruby_and_rubygems
|
2361
|
+
do_show_almost_everything_excluding_the_default_linux_programs
|
2362
|
+
do_compare_the_program_version
|
2363
|
+
# ===================================================================== #
|
2364
|
+
# === envi --one-liner
|
2365
|
+
#
|
2366
|
+
# A more complex usage example may be this:
|
2367
|
+
#
|
2368
|
+
# envi --rall --oneliner
|
2369
|
+
#
|
2370
|
+
# ===================================================================== #
|
2371
|
+
when /^-?-?one(-|_)?liner$/i # === envi --oneliner
|
2372
|
+
@internal_hash[:use_one_line_to_show_the_result] = true # This is different to the short-format.
|
2373
|
+
# ===================================================================== #
|
2374
|
+
# === envi --short
|
2375
|
+
# ===================================================================== #
|
2376
|
+
when /^-?-?short$/i,
|
2377
|
+
/^-?-?display(-|_)?short(-|_)?format$/i,
|
2378
|
+
/^-?-?do(-|_)?display(-|_)?in(-|_)?a(-|_)?short(-|_)?format$/i
|
2379
|
+
do_display_in_a_short_format
|
2380
|
+
# ===================================================================== #
|
2381
|
+
# === envi --sort-alphabetically
|
2382
|
+
#
|
2383
|
+
# This entry point can also be combined, such as in:
|
2384
|
+
#
|
2385
|
+
# envi --show-everything --sort-alphabetically
|
2386
|
+
#
|
2387
|
+
# ===================================================================== #
|
2388
|
+
when /^-?-?sort(-|_)?alphabetically$/i,
|
2389
|
+
/^-?-?sort$/i,
|
2390
|
+
/^-?-?alphabetically$/i,
|
2391
|
+
/^-?-?alphabet$/i
|
2392
|
+
enable_sort_alphabetically
|
2393
|
+
# ===================================================================== #
|
2394
|
+
# === envi --use-colours?
|
2395
|
+
# ===================================================================== #
|
2396
|
+
when /^-?-?use(-|_)?colou?rs\??$/i
|
2397
|
+
e 'Will colours be used? '+
|
2398
|
+
::EnvironmentInformation.verbose_truth(
|
2399
|
+
::EnvironmentInformation.use_colours?.to_s
|
2400
|
+
)
|
2401
|
+
do_not_run
|
2402
|
+
@do_exit_the_program = true
|
2403
|
+
# ===================================================================== #
|
2404
|
+
# === :do_show_everything
|
2405
|
+
#
|
2406
|
+
# An alternative way to make use of this entry point is via:
|
2407
|
+
#
|
2408
|
+
# envi --do-show-everything
|
2409
|
+
# envi --show-everything
|
2410
|
+
# envi --all
|
2411
|
+
#
|
2412
|
+
# ===================================================================== #
|
2413
|
+
when :do_show_everything,
|
2414
|
+
:show_really_everything,
|
2415
|
+
/^-?-?do(_|-)?show(_|-)?everything$/i,
|
2416
|
+
/^-?-?show(-|_)?everything$/i,
|
2417
|
+
/^-?-?show(-|_)?full(-|_)?information$/i,
|
2418
|
+
/^-?-?everything$/i,
|
2419
|
+
/^-?-?rall$/i,
|
2420
|
+
/^-?-?ALL$/i
|
2421
|
+
do_show_everything
|
2422
|
+
@run_already = true
|
2423
|
+
# ===================================================================== #
|
2424
|
+
# === envi --kdeversions?
|
2425
|
+
#
|
2426
|
+
# Note that this variant depends on another gem, called "rbt", and
|
2427
|
+
# the associated RBT namespace.
|
2428
|
+
# ===================================================================== #
|
2429
|
+
when /^-?-?kde(_|-)?versions\??$/i,
|
2430
|
+
/^-?-?kde\??$/i
|
2431
|
+
report_the_installed_KDE_software_suite
|
2432
|
+
# ===================================================================== #
|
2433
|
+
# === envi --registered-components?
|
2434
|
+
# ===================================================================== #
|
2435
|
+
when /^-?-?registered(_|-)?components\??$/i,
|
2436
|
+
/^-?-?available\??$/i
|
2437
|
+
do_not_run_already
|
2438
|
+
show_the_registered_components
|
2439
|
+
@do_exit_the_program = true
|
2440
|
+
# ===================================================================== #
|
2441
|
+
# === envi --additional=php
|
2442
|
+
#
|
2443
|
+
# This entry point allows us to show additional programs.
|
2444
|
+
#
|
2445
|
+
# Another usage example:
|
2446
|
+
#
|
2447
|
+
# envi --additional=php,python,perl
|
2448
|
+
#
|
2449
|
+
# ===================================================================== #
|
2450
|
+
when /^-?-?additional=(.+)$/i,
|
2451
|
+
/^-?-?add=(.+)$/i
|
2452
|
+
_ = $1.to_s.dup
|
2453
|
+
add(_)
|
2454
|
+
# ===================================================================== #
|
2455
|
+
# === envi --n_entries?
|
2456
|
+
# ===================================================================== #
|
2457
|
+
when /^-?-?n(_|-)?entries\??$/i,
|
2458
|
+
/^-?-?n(_|-)?programs\??$/i # envi --nprograms?
|
2459
|
+
show_n_registered_entries # === envi --n_entries
|
2460
|
+
@do_exit_the_program = true
|
2461
|
+
# ===================================================================== #
|
2462
|
+
# === envi --use-these-programs=bash,binutils,bison,yacc,bzip2,coreutils,diff,find,gawk,gcc,grep,gzip,linux,make,m4,patch,perl,python,sed,tar,makeinfo,xz
|
2463
|
+
# === envi --use-these-programs=:lfs
|
2464
|
+
#
|
2465
|
+
# This entry point can be used to display a certain subset of
|
2466
|
+
# programs, at the user's discretion.
|
2467
|
+
# ===================================================================== #
|
2468
|
+
when /^-?-?use(-|_)?these(-|_)?programs=(.+)$/i # === $3
|
2469
|
+
# =================================================================== #
|
2470
|
+
# First clear (aka reset) the main dataset.
|
2471
|
+
# =================================================================== #
|
2472
|
+
clear_old_dataset
|
2473
|
+
match = $3.to_s.dup
|
2474
|
+
add(match)
|
2475
|
+
# ===================================================================== #
|
2476
|
+
# === envi --show-remote-url
|
2477
|
+
#
|
2478
|
+
# This entry point will also show the remote URL to the
|
2479
|
+
# program at hand.
|
2480
|
+
# ===================================================================== #
|
2481
|
+
when /^-?-?show(_|-)?remote(_|-)?url$/i
|
2482
|
+
do_report_the_remote_urls
|
2483
|
+
# ===================================================================== #
|
2484
|
+
# === envi --help
|
2485
|
+
#
|
2486
|
+
# This entry point will always show help-related information.
|
2487
|
+
# ===================================================================== #
|
2488
|
+
when /^-?-?help$/i
|
2489
|
+
do_show_help
|
2490
|
+
# ===================================================================== #
|
2491
|
+
# === envi --no-save
|
2492
|
+
#
|
2493
|
+
# Skip saving into a local file through this entry point.
|
2494
|
+
#
|
2495
|
+
# Invocation example:
|
2496
|
+
#
|
2497
|
+
# envi --lfs --no-save
|
2498
|
+
#
|
2499
|
+
# ===================================================================== #
|
2500
|
+
when /^-?-?no(_|-)?save$/i
|
2501
|
+
do_not_save_anything
|
2502
|
+
# ===================================================================== #
|
2503
|
+
# === envi --os?
|
2504
|
+
# ===================================================================== #
|
2505
|
+
when /^-?-?OS\??$/i,
|
2506
|
+
/^-?-?show(-|_)?only(-|_)?the(-|_)?operating(-|_)?system$/i
|
2507
|
+
do_show_only_the_operating_system
|
2508
|
+
show_no_ruby
|
2509
|
+
# ===================================================================== #
|
2510
|
+
# === envi --help
|
2511
|
+
# ===================================================================== #
|
2512
|
+
when /help/i
|
2513
|
+
@show_help = true
|
2514
|
+
# ===================================================================== #
|
2515
|
+
# === envi --clear
|
2516
|
+
#
|
2517
|
+
# This entry point will simply clear the old dataset.
|
2518
|
+
#
|
2519
|
+
# This can be used to only display a few components, such as:
|
2520
|
+
#
|
2521
|
+
# envi --clear --python --ruby --perl
|
2522
|
+
#
|
2523
|
+
# ===================================================================== #
|
2524
|
+
when /^-?-?clear$/i,
|
2525
|
+
/^-?-?clear(_|-)?old(_|-)?dataset$/i
|
2526
|
+
clear_old_dataset
|
2527
|
+
# ===================================================================== #
|
2528
|
+
# === envi --sinatra
|
2529
|
+
# ===================================================================== #
|
2530
|
+
when /^-?-?sinatra$/i,
|
2531
|
+
/^-?-?www$/i
|
2532
|
+
start_the_sinatra_interface
|
2533
|
+
# ===================================================================== #
|
2534
|
+
# === envi --open
|
2535
|
+
# ===================================================================== #
|
2536
|
+
when /^-?-?open$/i,
|
2537
|
+
/^-?-?edit$/i
|
2538
|
+
open_this_file_in_editor
|
2539
|
+
# ===================================================================== #
|
2540
|
+
# === envi --lfs
|
2541
|
+
# ===================================================================== #
|
2542
|
+
when /^-?-?lfs$/i,
|
2543
|
+
/^-?-?lfs(_|-)?core(_|-)?programs$/i
|
2544
|
+
clear_old_dataset
|
2545
|
+
add(:lfs_core_programs)
|
2546
|
+
# ===================================================================== #
|
2547
|
+
# === envi openssl
|
2548
|
+
# ===================================================================== #
|
2549
|
+
when /^-?-?openssl$/,
|
2550
|
+
'ssl'
|
2551
|
+
add(:openssl)
|
2552
|
+
# ===================================================================== #
|
2553
|
+
# === envi --science
|
2554
|
+
# ===================================================================== #
|
2555
|
+
when /^-?-?science$/
|
2556
|
+
clear_old_dataset
|
2557
|
+
add(:science_cluster)
|
2558
|
+
# ===================================================================== #
|
2559
|
+
# === envi --nocolours
|
2560
|
+
#
|
2561
|
+
# This entry point can be used to disable usage of colours.
|
2562
|
+
# ===================================================================== #
|
2563
|
+
when /^-?-?nocolours/,'2',
|
2564
|
+
/^-?-?no(-|_)?colou?rs$/i,
|
2565
|
+
/^-?-?nocol$/i,
|
2566
|
+
/^-?-?disable(-|_)?colou?rs$/i, # === envi --really-all --disable-colours
|
2567
|
+
:disable_colours
|
2568
|
+
disable_colours
|
2569
|
+
# ===================================================================== #
|
2570
|
+
# === envi --version
|
2571
|
+
# ===================================================================== #
|
2572
|
+
when *ARRAY_VERSION
|
2573
|
+
report_version
|
2574
|
+
# ===================================================================== #
|
2575
|
+
# === envi --gui
|
2576
|
+
# ===================================================================== #
|
2577
|
+
when /^-?-?gui$/i,
|
2578
|
+
/^-?-?gtk$/i,
|
2579
|
+
/^-?-?start(-|_)?gtk$/i
|
2580
|
+
start_gtk_component
|
2581
|
+
# ===================================================================== #
|
2582
|
+
# === envi --replay
|
2583
|
+
# ===================================================================== #
|
2584
|
+
when /^-?-?replay$/i
|
2585
|
+
require 'environment_information/toplevel_methods/replay_from_the_stored_file.rb'
|
2586
|
+
::EnvironmentInformation.replay_from_the_stored_file
|
2587
|
+
# ===================================================================== #
|
2588
|
+
# === envi --be_silent_no_colours
|
2589
|
+
#
|
2590
|
+
# Not sure why the following entry point exists, but I will retain it
|
2591
|
+
# for the time being.
|
2592
|
+
# ===================================================================== #
|
2593
|
+
when /^-?-?be(_|-)?silent(_|-)?no(_|-)?colours$/
|
2594
|
+
disable_colours
|
2595
|
+
do_not_display_the_result
|
2596
|
+
do_show_everything
|
2597
|
+
# ===================================================================== #
|
2598
|
+
# This entry point is mostly for internal use, e. g. to pass
|
2599
|
+
# in Symbols to menu().
|
2600
|
+
# ===================================================================== #
|
2601
|
+
when :be_silent_no_colours_everything,
|
2602
|
+
:be_silent_and_no_colours,
|
2603
|
+
:be_silent_no_colours,
|
2604
|
+
:full_be_silent
|
2605
|
+
disable_colours
|
2606
|
+
do_show_everything
|
2607
|
+
do_not_display_the_result
|
2608
|
+
# ===================================================================== #
|
2609
|
+
# === envi --be_silent
|
2610
|
+
# ===================================================================== #
|
2611
|
+
when /^-?-?be(_|-)?silent$/i # === envi --be-silent
|
2612
|
+
do_not_display_the_result
|
2613
|
+
do_show_everything
|
2614
|
+
# ===================================================================== #
|
2615
|
+
# === envi --work-on-programs-directory-only
|
2616
|
+
# ===================================================================== #
|
2617
|
+
when /^-?-?work(-|_)?on(-|_)?programs(-|_)?directory(-|_)?only$/i,
|
2618
|
+
/^-?-?work(-|_)?on(-|_)?the(-|_)?programs(-|_)?directory(-|_)?only$/i
|
2619
|
+
work_on_the_programs_directory_only
|
2620
|
+
# ===================================================================== #
|
2621
|
+
# === envi --do-save
|
2622
|
+
# ===================================================================== #
|
2623
|
+
when /^save$/i,
|
2624
|
+
/^-?-?do(_|-)?save$/i
|
2625
|
+
@store_the_results_into_local_files = true
|
2626
|
+
# ===================================================================== #
|
2627
|
+
# === envi --asciitable
|
2628
|
+
# ===================================================================== #
|
2629
|
+
when /^-?-?asciitable$/i,
|
2630
|
+
'table','1'
|
2631
|
+
use_ascii_table if ASCIITABLE_IS_AVAILABLE
|
2632
|
+
# ===================================================================== #
|
2633
|
+
# === envi --read-from-this-file=/Depot/j/display_these_programs.md
|
2634
|
+
# === envi --file=/Depot/j/display_these_programs.md
|
2635
|
+
# === envi --input-from=/Depot/j/display_these_programs.md
|
2636
|
+
# ===================================================================== #
|
2637
|
+
when /^-?-?read(-|_)?from(-|_)?this(-|_)?file=(.+)$/i, # <- And this has $4
|
2638
|
+
/^-?-?file=(.+)$/i, # <- This has only $1
|
2639
|
+
/^-?-?input(-|_)?from=(.+)$/i # <- This has $2
|
2640
|
+
_ = $1.to_s.dup
|
2641
|
+
_ = $2.to_s.dup if $2
|
2642
|
+
_ = $4.to_s.dup if $4
|
2643
|
+
clear_old_dataset
|
2644
|
+
set_use_this_as_main_input(
|
2645
|
+
load_dataset_from_this_file(_)
|
2646
|
+
)
|
2647
|
+
# ===================================================================== #
|
2648
|
+
# === envi --no-yaml-file
|
2649
|
+
# ===================================================================== #
|
2650
|
+
when /^-?-?no(-|_)?yaml(-|_)?file$/i,
|
2651
|
+
/^-?-?no(-|_)?local(-|_)?file$/i
|
2652
|
+
@store_the_results_into_local_files = false
|
2653
|
+
# ===================================================================== #
|
2654
|
+
# === envi noruby
|
2655
|
+
# ===================================================================== #
|
2656
|
+
when /^-?-?noruby$/i,
|
2657
|
+
'show_no_ruby',
|
2658
|
+
'classic',
|
2659
|
+
'naked',
|
2660
|
+
'3',
|
2661
|
+
'minimal'
|
2662
|
+
show_no_ruby
|
2663
|
+
# ===================================================================== #
|
2664
|
+
# === envi --show-all
|
2665
|
+
# ===================================================================== #
|
2666
|
+
when /^-?-?show(-|_)?all$/i,
|
2667
|
+
/^-?-?all$/i,
|
2668
|
+
/^-?-?full$/i,
|
2669
|
+
/^-?-?everything$/i, # === envi --everything
|
2670
|
+
/^-?-?information$/i,
|
2671
|
+
'f',
|
2672
|
+
'4'
|
2673
|
+
do_show_everything # <- Just to be sure.
|
2674
|
+
# ===================================================================== #
|
2675
|
+
# === :be_silent
|
2676
|
+
# ===================================================================== #
|
2677
|
+
when /^-?-?be(_|-)?silent$/i,
|
2678
|
+
:be_silent # We will be silent, but we will still show everything.
|
2679
|
+
do_not_display_the_result
|
2680
|
+
do_show_everything
|
2681
|
+
# ===================================================================== #
|
2682
|
+
# === envi --compare_programs
|
2683
|
+
#
|
2684
|
+
# This entry point allows us to compare the program versions with
|
2685
|
+
# the one registered in RBT.
|
2686
|
+
# ===================================================================== #
|
2687
|
+
when *ARRAY_COMPARE_PROGRAM_VERSIONS
|
2688
|
+
do_compare_the_program_version
|
2689
|
+
# ===================================================================== #
|
2690
|
+
# === envi --generate-html-file
|
2691
|
+
#
|
2692
|
+
# This entry point can be used to generate a local .html file.
|
2693
|
+
# ===================================================================== #
|
2694
|
+
when /^-?-?generate(-|_)?html(-|_)?file$/i,
|
2695
|
+
/^-?-?html$/i # envi --HTML
|
2696
|
+
@internal_hash[:generate_a_html_file] = true
|
2697
|
+
set_runmode_html # Set it here again, just in case.
|
2698
|
+
do_show_everything
|
2699
|
+
# ===================================================================== #
|
2700
|
+
# === envi --show-components?
|
2701
|
+
# ===================================================================== #
|
2702
|
+
when /^-?-?show(-|_)?components\??$/i
|
2703
|
+
e "#{true_rev}The following components will be shown on a default run:"
|
2704
|
+
e
|
2705
|
+
show_these_components?.each {|this_component|
|
2706
|
+
if this_component.is_a? Array
|
2707
|
+
this_component = this_component.first
|
2708
|
+
end
|
2709
|
+
e " - #{steelblue(this_component)}#{true_rev}"
|
2710
|
+
}
|
2711
|
+
e
|
2712
|
+
exit
|
2713
|
+
# ===================================================================== #
|
2714
|
+
# === :do_not_run_yet
|
2715
|
+
#
|
2716
|
+
# Invocation example:
|
2717
|
+
#
|
2718
|
+
# envi --do-not-run-yet
|
2719
|
+
#
|
2720
|
+
# ===================================================================== #
|
2721
|
+
when /^-?-?-do(-|_)?not(-|_)?run(-|_)?yet$/i, # === envi --do-not-run-yet
|
2722
|
+
:do_not_run_yet,
|
2723
|
+
:dont_run_yet,
|
2724
|
+
:default # This is the default variant.
|
2725
|
+
@run_already = false
|
2726
|
+
# ===================================================================== #
|
2727
|
+
# === envi --pkgconfig
|
2728
|
+
#
|
2729
|
+
# Show all pkgconfig entries - but only these.
|
2730
|
+
# ===================================================================== #
|
2731
|
+
when /^-?-?pkg(-|_)?config$/i
|
2732
|
+
clear_old_dataset
|
2733
|
+
add(:pkgconfig_entries)
|
2734
|
+
# ===================================================================== #
|
2735
|
+
# === envi --xorg-components
|
2736
|
+
#
|
2737
|
+
# This entry point is for when the user only wants to show the
|
2738
|
+
# xorg-components on the local computer system.
|
2739
|
+
# ===================================================================== #
|
2740
|
+
when /^-?-?xorg(_|-)?components$/i,
|
2741
|
+
/^-?-?xorg$/i,
|
2742
|
+
/^-?-?show(_|-)?xorg(_|-)?components$/i
|
2743
|
+
do_show_only_the_xorg_components
|
2744
|
+
else # else tag
|
2745
|
+
# =================================================================== #
|
2746
|
+
# It is better to report that the given commandline-input as
|
2747
|
+
# not found, so this will be reported. Before we can do so, we
|
2748
|
+
# will first check whether the user wanted to pass some
|
2749
|
+
# existing/registered component nonetheless.
|
2750
|
+
#
|
2751
|
+
# This clause can be checked via something like this:
|
2752
|
+
#
|
2753
|
+
# envi --bash
|
2754
|
+
# envi --brotli
|
2755
|
+
#
|
2756
|
+
# =================================================================== #
|
2757
|
+
if is_a_registered_component?(i.delete('-'))
|
2758
|
+
# ================================================================= #
|
2759
|
+
# The next line has been added in August 2022. Not sure if we
|
2760
|
+
# retain it or not - either way the future will show.
|
2761
|
+
# ================================================================= #
|
2762
|
+
@array_report_these_programs.clear # Clear the old result first.
|
2763
|
+
do_not_store_anything
|
2764
|
+
add(
|
2765
|
+
i.delete('-')
|
2766
|
+
)
|
2767
|
+
else
|
2768
|
+
# ================================================================= #
|
2769
|
+
# Only enter the report-section if we do NOT want to exit early.
|
2770
|
+
# ================================================================= #
|
2771
|
+
do_show_help if show_help?
|
2772
|
+
# Or:
|
2773
|
+
# e 'Unhandled command input (in file environment_information/class/menu.rb): '
|
2774
|
+
# e
|
2775
|
+
# e " #{sfancy(i)}"
|
2776
|
+
# e
|
2777
|
+
end
|
2778
|
+
end
|
2779
|
+
end
|
2780
|
+
end
|
2781
|
+
|
2782
|
+
# ========================================================================= #
|
2783
|
+
# === use_one_line_to_show_the_result?
|
2784
|
+
# ========================================================================= #
|
2785
|
+
def use_one_line_to_show_the_result?
|
2786
|
+
@internal_hash[:use_one_line_to_show_the_result]
|
2787
|
+
end
|
2788
|
+
|
2789
|
+
# ========================================================================= #
|
2790
|
+
# === EnvironmentInformation::EnvironmentInformation[]
|
2791
|
+
# ========================================================================= #
|
2792
|
+
def self.[](i = ARGV, &block)
|
2793
|
+
new(i, &block)
|
2794
|
+
end
|
2795
|
+
|
2796
|
+
end
|
2797
|
+
|
2798
|
+
# =========================================================================== #
|
2799
|
+
# === EnvironmentInformation.run
|
2800
|
+
# =========================================================================== #
|
2801
|
+
def self.run(i = ARGV)
|
2802
|
+
::EnvironmentInformation::EnvironmentInformation.new(i)
|
2803
|
+
end
|
2804
|
+
|
2805
|
+
# =========================================================================== #
|
2806
|
+
# === EnvironmentInformation.run_the_main_class
|
2807
|
+
# =========================================================================== #
|
2808
|
+
def self.run_the_main_class(i = ARGV, &block)
|
2809
|
+
::EnvironmentInformation::EnvironmentInformation.new(i, &block)
|
2810
|
+
end; self.instance_eval { alias result run_the_main_class } # === EnvironmentInformation.result
|
2811
|
+
self.instance_eval { alias show run_the_main_class } # === EnvironmentInformation.show
|
2812
|
+
self.instance_eval { alias new run_the_main_class } # === EnvironmentInformation.new
|
2813
|
+
self.instance_eval { alias [] run_the_main_class } # === EnvironmentInformation[]
|
2814
|
+
|
2815
|
+
# =========================================================================== #
|
2816
|
+
# === EnvironmentInformation.environment_information?
|
2817
|
+
#
|
2818
|
+
# This method will return a very long string containing all
|
2819
|
+
# information about the locally installed/available programs.
|
2820
|
+
# =========================================================================== #
|
2821
|
+
def self.environment_information?
|
2822
|
+
::EnvironmentInformation::EnvironmentInformation.new(:full_be_silent).stringified
|
2823
|
+
end
|
2824
|
+
|
2825
|
+
end
|
2826
|
+
|
2827
|
+
if __FILE__ == $PROGRAM_NAME
|
2828
|
+
EnvironmentInformation::EnvironmentInformation.new(ARGV)
|
2829
|
+
end # environment_information.rb
|