environment_information 1.4.29
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of environment_information might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/README.md +1061 -0
- data/bin/envi +7 -0
- data/bin/fast_envi +7 -0
- data/doc/README.gen +893 -0
- data/doc/TODO_FOR_THE_ENVIRONMENT_INFORMATION_PROJECT.md +54 -0
- data/environment_information.gemspec +130 -0
- data/lib/environment_information/base/base.rb +113 -0
- data/lib/environment_information/class/add.rb +186 -0
- data/lib/environment_information/class/colours.rb +283 -0
- data/lib/environment_information/class/constants.rb +35 -0
- data/lib/environment_information/class/environment_information.rb +51 -0
- data/lib/environment_information/class/help.rb +86 -0
- data/lib/environment_information/class/html.rb +78 -0
- data/lib/environment_information/class/initialize.rb +178 -0
- data/lib/environment_information/class/menu.rb +436 -0
- data/lib/environment_information/class/misc.rb +821 -0
- data/lib/environment_information/class/opn.rb +33 -0
- data/lib/environment_information/class/register_sigint.rb +20 -0
- data/lib/environment_information/class/reset.rb +213 -0
- data/lib/environment_information/class/ruby.rb +79 -0
- data/lib/environment_information/class/run.rb +61 -0
- data/lib/environment_information/class/show_display_and_report.rb +310 -0
- data/lib/environment_information/colours/colours.rb +150 -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 +207 -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/gtk/bindings.rb +300 -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 +263 -0
- data/lib/environment_information/queries/pkg_config.rb +125 -0
- data/lib/environment_information/queries/simple_version.rb +211 -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 +30 -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 +264 -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_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 +186 -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 +14 -0
- data/lib/environment_information/yaml/array_lfs_core_programs.yml +35 -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 +165 -0
- data/lib/environment_information/yaml/array_tracked_xorg_components.yml +34 -0
- data/lib/environment_information/yaml/query_to_use_for_the_individual_components.yml +215 -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 +195 -0
@@ -0,0 +1,263 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# === EnvironmentInformation::Queries::ComplexVersion
|
6
|
+
#
|
7
|
+
# This class will try to do a query based on more complex means.
|
8
|
+
# =========================================================================== #
|
9
|
+
# require 'environment_information/queries/simple_version.rb'
|
10
|
+
# EnvironmentInformation::Queries::ComplexVersion.new
|
11
|
+
# =========================================================================== #
|
12
|
+
require 'environment_information/base/base.rb'
|
13
|
+
|
14
|
+
module EnvironmentInformation
|
15
|
+
|
16
|
+
module Queries
|
17
|
+
|
18
|
+
class ComplexVersion < ::EnvironmentInformation::Base # === EnvironmentInformation::Queries::ComplexVersion
|
19
|
+
|
20
|
+
# ========================================================================= #
|
21
|
+
# === initialize
|
22
|
+
#
|
23
|
+
# The first argument is mandatory.
|
24
|
+
# ========================================================================= #
|
25
|
+
def initialize(
|
26
|
+
for_this_program = nil,
|
27
|
+
run_already = true
|
28
|
+
)
|
29
|
+
reset
|
30
|
+
set_program_name(
|
31
|
+
for_this_program
|
32
|
+
)
|
33
|
+
# ======================================================================= #
|
34
|
+
# === Handle blocks given next
|
35
|
+
# ======================================================================= #
|
36
|
+
if block_given?
|
37
|
+
yielded = yield
|
38
|
+
if yielded.is_a? Hash
|
39
|
+
if yielded.has_key? :prefix_to_use
|
40
|
+
@prefix_to_use << yielded.delete(:prefix_to_use)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
run if run_already
|
45
|
+
end
|
46
|
+
|
47
|
+
# ========================================================================= #
|
48
|
+
# === reset
|
49
|
+
# ========================================================================= #
|
50
|
+
def reset
|
51
|
+
# ======================================================================= #
|
52
|
+
# === @program_name
|
53
|
+
# ======================================================================= #
|
54
|
+
@program_name = ''.dup
|
55
|
+
# ======================================================================= #
|
56
|
+
# === @program_version
|
57
|
+
# ======================================================================= #
|
58
|
+
@program_version = nil
|
59
|
+
# ======================================================================= #
|
60
|
+
# === @prefix_to_use
|
61
|
+
# ======================================================================= #
|
62
|
+
@prefix_to_use = ''.dup
|
63
|
+
end
|
64
|
+
|
65
|
+
# ========================================================================= #
|
66
|
+
# === set_program_name
|
67
|
+
# ========================================================================= #
|
68
|
+
def set_program_name(i)
|
69
|
+
@program_name = i.to_sym if i
|
70
|
+
end
|
71
|
+
|
72
|
+
# ========================================================================= #
|
73
|
+
# === program_name?
|
74
|
+
# ========================================================================= #
|
75
|
+
def program_name?
|
76
|
+
@program_name
|
77
|
+
end
|
78
|
+
|
79
|
+
# ========================================================================= #
|
80
|
+
# === program_version?
|
81
|
+
# ========================================================================= #
|
82
|
+
def program_version?
|
83
|
+
@program_version
|
84
|
+
end; alias version? program_version? # === version?
|
85
|
+
|
86
|
+
# ========================================================================= #
|
87
|
+
# === return_version_of
|
88
|
+
# ========================================================================= #
|
89
|
+
def return_version_of(this_program = @program_name)
|
90
|
+
_ = ::EnvironmentInformation.query_to_use_for_the_individual_components?
|
91
|
+
if _.nil?
|
92
|
+
_ = ::EnvironmentInformation.load_file_query_to_use_for_the_individual_components
|
93
|
+
end
|
94
|
+
if _.has_key?(this_program)
|
95
|
+
cmd_to_run = _[this_program]
|
96
|
+
case cmd_to_run
|
97
|
+
# ===================================================================== #
|
98
|
+
# === :custom_busybox
|
99
|
+
# ===================================================================== #
|
100
|
+
when :custom_busybox
|
101
|
+
@program_version = ::EnvironmentInformation.return_version_of_busybox
|
102
|
+
# ===================================================================== #
|
103
|
+
# === :custom_xvid
|
104
|
+
# ===================================================================== #
|
105
|
+
when :custom_xvid
|
106
|
+
@program_version = ::EnvironmentInformation.return_version_of_xvid
|
107
|
+
# ===================================================================== #
|
108
|
+
# === :custom_boost
|
109
|
+
# ===================================================================== #
|
110
|
+
when :custom_boost
|
111
|
+
@program_version = ::EnvironmentInformation.return_version_of_boost
|
112
|
+
# ===================================================================== #
|
113
|
+
# === :custom_mpc
|
114
|
+
# ===================================================================== #
|
115
|
+
when :custom_mpc
|
116
|
+
@program_version = ::EnvironmentInformation.return_version_of_mpc
|
117
|
+
else
|
118
|
+
result = `#{@prefix_to_use}#{cmd_to_run} #{ERROR_LINE}`.to_s.strip.dup
|
119
|
+
if result.include? ' #' # Handle "uname -a" aka Linux darkstar.example.net 5.4.50 #1 SMP
|
120
|
+
result = result.split(' #').first.strip
|
121
|
+
end
|
122
|
+
@program_version = result
|
123
|
+
end
|
124
|
+
return nil if @program_version.nil?
|
125
|
+
if @program_version.include? '# HMMER ' # <- Specifically for "hammer".
|
126
|
+
@program_version = @program_version.scan(
|
127
|
+
/# HMMER (\d{0,2}\.\d{0,2}\.\d{0,2})/
|
128
|
+
).flatten.first.to_s
|
129
|
+
end
|
130
|
+
if @program_version.include? 'extracts blocks from damag' # bzip2recover
|
131
|
+
@program_version = @program_version.scan(
|
132
|
+
/bzip2recover (\d{0,2}\.\d{0,2}\.\d{0,2}): extracts blocks from damaged .bz2 files/
|
133
|
+
).flatten.first.to_s.dup
|
134
|
+
end
|
135
|
+
# ===================================================================== #
|
136
|
+
# === Handle Imagemagick: 'Version: ImageMagick 7.0.10-28'
|
137
|
+
# ===================================================================== #
|
138
|
+
if @program_version.include? 'Version: ImageMagick '
|
139
|
+
@program_version = @program_version.scan(
|
140
|
+
/Version: ImageMagick (\d{0,2}\.\d{0,2}\.\d{0,2}-\d{0,2})/
|
141
|
+
).flatten.first.to_s.tr('-','.')
|
142
|
+
end
|
143
|
+
# ===================================================================== #
|
144
|
+
# === Handle 'KDE Frameworks: 5.73.0'
|
145
|
+
# ===================================================================== #
|
146
|
+
if @program_version.include? 'KDE Frameworks: '
|
147
|
+
@program_version = @program_version.scan(
|
148
|
+
/KDE Frameworks: (\d{0,2}\.\d{0,2}\.\d{0,2})/
|
149
|
+
).flatten.first.to_s
|
150
|
+
end
|
151
|
+
# ===================================================================== #
|
152
|
+
# === Handle 'ncurses 6.2.20200212' aka ncurses
|
153
|
+
# ===================================================================== #
|
154
|
+
if @program_version.include? 'ncurses '
|
155
|
+
@program_version = @program_version.scan(
|
156
|
+
/ncurses (\d{1,1}\.\d{1,1})/
|
157
|
+
).flatten.first.to_s
|
158
|
+
end
|
159
|
+
# ===================================================================== #
|
160
|
+
# === Handle ruby 'ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux]'
|
161
|
+
# ===================================================================== #
|
162
|
+
if @program_version.include? 'ruby '
|
163
|
+
@program_version = @program_version.scan(
|
164
|
+
/^ruby (\d{1,1}\.\d{1,1}\.\d{1,1})/
|
165
|
+
).flatten.first.to_s
|
166
|
+
end
|
167
|
+
# ===================================================================== #
|
168
|
+
# === Handle patchelf '0.12.20200827.8d3a16e'
|
169
|
+
# ===================================================================== #
|
170
|
+
if @program_version.include? 'patchelf '
|
171
|
+
@program_version = @program_version.scan(
|
172
|
+
/^patchelf (\d{1,1}\.\d{1,2})/
|
173
|
+
).flatten.first.to_s
|
174
|
+
end
|
175
|
+
# ===================================================================== #
|
176
|
+
# We have to be careful with the next, as a few programs report the
|
177
|
+
# version on the second line, not on the first.
|
178
|
+
# ===================================================================== #
|
179
|
+
if @program_version.include? N
|
180
|
+
@program_version = @program_version.split(N).first.strip
|
181
|
+
end
|
182
|
+
# ===================================================================== #
|
183
|
+
# Next handle cases such as the following two examples:
|
184
|
+
#
|
185
|
+
# "ffmpeg version 4.3.1 Copyright (c) 2000-2020 the FFmpeg developers"
|
186
|
+
# "openjdk version \"14.0.2\" 2020-07-14"
|
187
|
+
#
|
188
|
+
# ===================================================================== #
|
189
|
+
if @program_version.include? ' version '
|
190
|
+
@program_version = @program_version.scan(
|
191
|
+
/ version "?(\d{0,2}\.\d{1,2}\.?\d{0,2})"?/
|
192
|
+
).flatten.first.to_s.strip
|
193
|
+
end
|
194
|
+
# ===================================================================== #
|
195
|
+
# Handle cases such as: "nginx/1.18.0"
|
196
|
+
# ===================================================================== #
|
197
|
+
if @program_version.include? '/'
|
198
|
+
@program_version = @program_version.split('/').last.strip
|
199
|
+
end
|
200
|
+
if @program_version.include?('(') and # Specifically for XTERM.
|
201
|
+
@program_version.include?(')')
|
202
|
+
@program_version = @program_version.split('(').last.to_s.delete(')') # 7.7.0(359)
|
203
|
+
end
|
204
|
+
if @program_version.include? '-'
|
205
|
+
# Specifically to fix relion: "3.1.0-commit-GITDIR"
|
206
|
+
@program_version = @program_version.split('-').first.to_s.strip
|
207
|
+
end
|
208
|
+
if @program_version.include? COMMAND_NOT_FOUND
|
209
|
+
@program_version = nil
|
210
|
+
elsif @program_version.include? ' '
|
211
|
+
# =================================================================== #
|
212
|
+
# Assume input such as: "GNU ld (GNU Binutils) 2.35"
|
213
|
+
# =================================================================== #
|
214
|
+
@program_version = @program_version.split(' ').last
|
215
|
+
end
|
216
|
+
end
|
217
|
+
return @program_version
|
218
|
+
end
|
219
|
+
|
220
|
+
# ========================================================================= #
|
221
|
+
# === run
|
222
|
+
# ========================================================================= #
|
223
|
+
def run
|
224
|
+
return_version_of
|
225
|
+
end
|
226
|
+
|
227
|
+
end; end; end
|
228
|
+
|
229
|
+
if __FILE__ == $PROGRAM_NAME
|
230
|
+
array = %i(
|
231
|
+
mpc
|
232
|
+
gtk2
|
233
|
+
linux
|
234
|
+
binutils
|
235
|
+
boost
|
236
|
+
coreutils
|
237
|
+
diffutils
|
238
|
+
ffmpeg
|
239
|
+
findutils
|
240
|
+
java
|
241
|
+
imagemagick
|
242
|
+
kde_frameworks
|
243
|
+
llvm
|
244
|
+
ncurses
|
245
|
+
nginx
|
246
|
+
qt
|
247
|
+
rubygems
|
248
|
+
sharutils
|
249
|
+
sysstat
|
250
|
+
swig
|
251
|
+
texinfo
|
252
|
+
tmux
|
253
|
+
xfsprogs
|
254
|
+
xterm
|
255
|
+
hmmer
|
256
|
+
viennarna
|
257
|
+
xstdcmap
|
258
|
+
)
|
259
|
+
array.each {|entry|
|
260
|
+
_ = EnvironmentInformation::Queries::ComplexVersion.new(entry)
|
261
|
+
_.report_left_right
|
262
|
+
}
|
263
|
+
end # complexversion
|
@@ -0,0 +1,125 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# === EnvironmentInformation::Queries::PkgConfig
|
6
|
+
#
|
7
|
+
# This class will try to do a pkg-config query, based on a .yml file.
|
8
|
+
#
|
9
|
+
# As input it needs the name of the program at hand; and that program
|
10
|
+
# has to be registered in the .yml file. The query will then use
|
11
|
+
# "pkg-config", which in turn queries the local .pc file for the
|
12
|
+
# version.
|
13
|
+
# =========================================================================== #
|
14
|
+
# require 'environment_information/queries/pkg_config.rb'
|
15
|
+
# EnvironmentInformation::Queries::PkgConfig.new
|
16
|
+
# =========================================================================== #
|
17
|
+
require 'environment_information/base/base.rb'
|
18
|
+
|
19
|
+
module EnvironmentInformation
|
20
|
+
|
21
|
+
module Queries
|
22
|
+
|
23
|
+
class PkgConfig < ::EnvironmentInformation::Base # === EnvironmentInformation::Queries::PkgConfig
|
24
|
+
|
25
|
+
# ========================================================================= #
|
26
|
+
# === initialize
|
27
|
+
#
|
28
|
+
# The first argument is mandatory.
|
29
|
+
# ========================================================================= #
|
30
|
+
def initialize(
|
31
|
+
for_this_program = nil,
|
32
|
+
run_already = true
|
33
|
+
)
|
34
|
+
reset
|
35
|
+
set_program_name(for_this_program)
|
36
|
+
run if run_already
|
37
|
+
end
|
38
|
+
|
39
|
+
# ========================================================================= #
|
40
|
+
# === reset
|
41
|
+
# ========================================================================= #
|
42
|
+
def reset
|
43
|
+
# ======================================================================= #
|
44
|
+
# === @program_name
|
45
|
+
# ======================================================================= #
|
46
|
+
@program_name = ''.dup
|
47
|
+
# ======================================================================= #
|
48
|
+
# === @program_version
|
49
|
+
# ======================================================================= #
|
50
|
+
@program_version = nil
|
51
|
+
end
|
52
|
+
|
53
|
+
# ========================================================================= #
|
54
|
+
# === set_program_name
|
55
|
+
# ========================================================================= #
|
56
|
+
def set_program_name(i)
|
57
|
+
@program_name = i.to_sym if i
|
58
|
+
end
|
59
|
+
|
60
|
+
# ========================================================================= #
|
61
|
+
# === program_name?
|
62
|
+
# ========================================================================= #
|
63
|
+
def program_name?
|
64
|
+
@program_name
|
65
|
+
end
|
66
|
+
|
67
|
+
# ========================================================================= #
|
68
|
+
# === program_version?
|
69
|
+
# ========================================================================= #
|
70
|
+
def program_version?
|
71
|
+
@program_version
|
72
|
+
end; alias version? program_version? # === version?
|
73
|
+
|
74
|
+
# ========================================================================= #
|
75
|
+
# === run
|
76
|
+
# ========================================================================= #
|
77
|
+
def run
|
78
|
+
return_version_of
|
79
|
+
end
|
80
|
+
|
81
|
+
# ========================================================================= #
|
82
|
+
# === return_version_of
|
83
|
+
# ========================================================================= #
|
84
|
+
def return_version_of(this_program = @program_name)
|
85
|
+
_ = ::EnvironmentInformation.query_to_use_for_the_individual_components?
|
86
|
+
if _.nil?
|
87
|
+
_ = ::EnvironmentInformation.load_file_query_to_use_for_the_individual_components
|
88
|
+
end
|
89
|
+
if _.has_key?(this_program)
|
90
|
+
result = _[this_program]
|
91
|
+
case result
|
92
|
+
when :pkgconfig
|
93
|
+
@program_version = `pkg-config --modversion #{this_program} #{ERROR_LINE}`.dup
|
94
|
+
else
|
95
|
+
@program_version = `#{result} #{ERROR_LINE}`.dup
|
96
|
+
end
|
97
|
+
if @program_version.include? NOT_FOUND_IN_PKG_CONFIG_SEARCH_PATH
|
98
|
+
@program_version = nil
|
99
|
+
end
|
100
|
+
else # We will try to run it anyway.
|
101
|
+
@program_version = `pkg-config --modversion #{this_program} #{ERROR_LINE}`.dup
|
102
|
+
end
|
103
|
+
@program_version.strip! if @program_version
|
104
|
+
return @program_version
|
105
|
+
end
|
106
|
+
|
107
|
+
end; end
|
108
|
+
|
109
|
+
# =========================================================================== #
|
110
|
+
# === EnvironmentInformation.query_pkgconfig_version_for
|
111
|
+
#
|
112
|
+
# This is a simpler toplevel-query, for .pc files in general.
|
113
|
+
# =========================================================================== #
|
114
|
+
def self.query_pkgconfig_version_for(i = :gtk2)
|
115
|
+
::EnvironmentInformation::Queries::PkgConfig.new(i).version?
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
if __FILE__ == $PROGRAM_NAME
|
121
|
+
_ = EnvironmentInformation::Queries::PkgConfig.new(:webkit2gtk)
|
122
|
+
puts _.program_name?.to_s+': '+_.program_version?.to_s
|
123
|
+
_ = EnvironmentInformation::Queries::PkgConfig.new(:gjs)
|
124
|
+
puts _.program_name?.to_s+': '+_.program_version?.to_s
|
125
|
+
end
|
@@ -0,0 +1,211 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# === EnvironmentInformation::Queries::SimpleVersion
|
6
|
+
#
|
7
|
+
# This class will try to do a query based on the main binary at hand.
|
8
|
+
#
|
9
|
+
# It is only a wrapper over "--version" and nothing else.
|
10
|
+
# =========================================================================== #
|
11
|
+
# require 'environment_information/queries/simple_version.rb'
|
12
|
+
# EnvironmentInformation::Queries::SimpleVersion.new
|
13
|
+
# =========================================================================== #
|
14
|
+
require 'environment_information/base/base.rb'
|
15
|
+
|
16
|
+
module EnvironmentInformation
|
17
|
+
|
18
|
+
module Queries
|
19
|
+
|
20
|
+
class SimpleVersion < ::EnvironmentInformation::Base # === EnvironmentInformation::Queries::SimpleVersion
|
21
|
+
|
22
|
+
# ========================================================================= #
|
23
|
+
# === initialize
|
24
|
+
#
|
25
|
+
# The first argument is mandatory.
|
26
|
+
# ========================================================================= #
|
27
|
+
def initialize(
|
28
|
+
for_this_program = nil,
|
29
|
+
run_already = true
|
30
|
+
)
|
31
|
+
reset
|
32
|
+
set_program_name(
|
33
|
+
for_this_program
|
34
|
+
)
|
35
|
+
# ======================================================================= #
|
36
|
+
# === Handle blocks given next
|
37
|
+
# ======================================================================= #
|
38
|
+
if block_given?
|
39
|
+
yielded = yield
|
40
|
+
if yielded.is_a? Hash
|
41
|
+
if yielded.has_key? :prefix_to_use
|
42
|
+
@prefix_to_use << yielded.delete(:prefix_to_use)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
run if run_already
|
47
|
+
end
|
48
|
+
|
49
|
+
# ========================================================================= #
|
50
|
+
# === reset
|
51
|
+
# ========================================================================= #
|
52
|
+
def reset
|
53
|
+
# ======================================================================= #
|
54
|
+
# === @program_name
|
55
|
+
# ======================================================================= #
|
56
|
+
@program_name = ''.dup
|
57
|
+
# ======================================================================= #
|
58
|
+
# === @program_version
|
59
|
+
# ======================================================================= #
|
60
|
+
@program_version = nil
|
61
|
+
# ======================================================================= #
|
62
|
+
# === @prefix_to_use
|
63
|
+
# ======================================================================= #
|
64
|
+
@prefix_to_use = ''.dup
|
65
|
+
end
|
66
|
+
|
67
|
+
# ========================================================================= #
|
68
|
+
# === set_program_name
|
69
|
+
# ========================================================================= #
|
70
|
+
def set_program_name(i)
|
71
|
+
@program_name = i.to_sym if i
|
72
|
+
end
|
73
|
+
|
74
|
+
# ========================================================================= #
|
75
|
+
# === program_name?
|
76
|
+
# ========================================================================= #
|
77
|
+
def program_name?
|
78
|
+
@program_name
|
79
|
+
end
|
80
|
+
|
81
|
+
# ========================================================================= #
|
82
|
+
# === program_version?
|
83
|
+
# ========================================================================= #
|
84
|
+
def program_version?
|
85
|
+
@program_version
|
86
|
+
end; alias version? program_version? # === version?
|
87
|
+
|
88
|
+
# ========================================================================= #
|
89
|
+
# === run
|
90
|
+
# ========================================================================= #
|
91
|
+
def run
|
92
|
+
return_version_of
|
93
|
+
end
|
94
|
+
|
95
|
+
# ========================================================================= #
|
96
|
+
# === return_version_of
|
97
|
+
# ========================================================================= #
|
98
|
+
def return_version_of(this_program = @program_name)
|
99
|
+
_ = ::EnvironmentInformation.query_to_use_for_the_individual_components?
|
100
|
+
if _.nil?
|
101
|
+
_ = ::EnvironmentInformation.load_file_query_to_use_for_the_individual_components
|
102
|
+
end
|
103
|
+
if _.has_key?(this_program)
|
104
|
+
result = _[this_program]
|
105
|
+
case result
|
106
|
+
when :version
|
107
|
+
@program_version = `#{@prefix_to_use}#{this_program} --version #{ERROR_LINE}`.strip
|
108
|
+
end
|
109
|
+
end
|
110
|
+
if @program_version
|
111
|
+
if @program_version.include? N
|
112
|
+
@program_version = @program_version.split(N).first
|
113
|
+
end
|
114
|
+
if @program_version.include? '--'
|
115
|
+
@program_version.gsub!(/--/,'') # For strace specifically.
|
116
|
+
end
|
117
|
+
# if @program_version.include? 'GNOME Document Viewer'
|
118
|
+
# @program_version.sub!(/GNOME Document Viewer/,'') # For evince specifically.
|
119
|
+
# end
|
120
|
+
if @program_version.include? 'GNU'
|
121
|
+
@program_version.gsub!(/GNU/,'')
|
122
|
+
end
|
123
|
+
if @program_version.include? ' built on linux-gnu.'
|
124
|
+
@program_version.gsub!(/ built on linux-gnu\./, '') # Fixing wget specifically.
|
125
|
+
end
|
126
|
+
if @program_version.include?('[') and @program_version.include?(']')
|
127
|
+
@program_version.gsub!(/\[.+\]/, '')
|
128
|
+
end
|
129
|
+
@program_version.strip!
|
130
|
+
if @program_version.start_with? "#{this_program} "
|
131
|
+
# For example: "ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux]"
|
132
|
+
@program_version.sub!(/#{this_program} /, '')
|
133
|
+
elsif @program_version.start_with? "#{this_program.capitalize} "
|
134
|
+
# For example: "Wget 1.20.3 built on linux-gnu."
|
135
|
+
@program_version.sub!(/#{this_program.capitalize} /, '')
|
136
|
+
elsif @program_version.start_with? "#{this_program.upcase} "
|
137
|
+
# For example: "NASM version 2.15.04 compiled on Aug 27 2020"
|
138
|
+
@program_version.sub!(/#{this_program.upcase} /, '')
|
139
|
+
elsif @program_version.downcase.start_with? "#{this_program.downcase} "
|
140
|
+
# For example: "IceWM", has a unusual start.
|
141
|
+
@program_version.sub!(/#{this_program} /i, '')
|
142
|
+
elsif @program_version.start_with? 'Awk'
|
143
|
+
@program_version.sub!(/Awk /i, '') # Ad-hox fix here.
|
144
|
+
end
|
145
|
+
if @program_version.include? '- Vi IMproved '
|
146
|
+
@program_version.sub!(/- Vi IMproved /, '') # Fixing vim specifically.
|
147
|
+
end
|
148
|
+
if @program_version.include? '(v'
|
149
|
+
# This is specifically for perl:
|
150
|
+
# "This is perl 5, version 32, subversion 0 (v5.32.0) built for x86_64-linux-thread-multi"
|
151
|
+
@program_version = @program_version.scan(
|
152
|
+
/\(v(\d{0,2}\.?\d{0,2}\.\d{0,2})\)/
|
153
|
+
).flatten.first.to_s.dup
|
154
|
+
end
|
155
|
+
# ===================================================================== #
|
156
|
+
# The next check for "Version" should come after we eliminated
|
157
|
+
# the leading program name.
|
158
|
+
# ===================================================================== #
|
159
|
+
if @program_version.include? 'Version '
|
160
|
+
@program_version = @program_version.scan(
|
161
|
+
/Version (\d{0,2}\.?\d{0,2}\.\d{0,2})/
|
162
|
+
).flatten.first.to_s.dup
|
163
|
+
elsif @program_version.include? 'version '
|
164
|
+
# This here should work for most programs, save for perl.
|
165
|
+
@program_version = @program_version.scan(
|
166
|
+
/version (\d{0,2}\.?\d{0,2}\.\d{0,2})/
|
167
|
+
).flatten.first.to_s.dup
|
168
|
+
end
|
169
|
+
if @program_version.include? 'patchlevel '
|
170
|
+
# Gnuplot has this specifically: "5.4 patchlevel 0"
|
171
|
+
@program_version = @program_version.split('patchlevel ').first.strip
|
172
|
+
end
|
173
|
+
# ===================================================================== #
|
174
|
+
# Next we kill everything inside (). This may sometimes be
|
175
|
+
# problematic, which is why this check comes quite late.
|
176
|
+
# ===================================================================== #
|
177
|
+
if @program_version.include?('(') and @program_version.include?(')')
|
178
|
+
@program_version.gsub!(/\(.+\)/, '')
|
179
|
+
end
|
180
|
+
# ===================================================================== #
|
181
|
+
# Handle: "IceWM 1.8.0, Copyright 1997-2003 Marko Macek, 2001 Mathias Hasselmann."
|
182
|
+
# ===================================================================== #
|
183
|
+
if @program_version.include?(',')
|
184
|
+
@program_version = @program_version.split(',').first
|
185
|
+
end
|
186
|
+
# ===================================================================== #
|
187
|
+
# Next, if a '-' is included, we split it and use the last part.
|
188
|
+
# This handles cases such as "valgrind-3.16.0".
|
189
|
+
# ===================================================================== #
|
190
|
+
if @program_version.include?('-')
|
191
|
+
@program_version = @program_version.split('-').last
|
192
|
+
end
|
193
|
+
# ===================================================================== #
|
194
|
+
# Last but not least, for "node" specifically.
|
195
|
+
# ===================================================================== #
|
196
|
+
if @program_version.start_with? 'v'
|
197
|
+
@program_version[0,1] = ''
|
198
|
+
end
|
199
|
+
if @program_version.include? COMMAND_NOT_FOUND
|
200
|
+
@program_version = nil
|
201
|
+
end
|
202
|
+
end
|
203
|
+
return @program_version
|
204
|
+
end
|
205
|
+
|
206
|
+
end; end; end
|
207
|
+
|
208
|
+
if __FILE__ == $PROGRAM_NAME
|
209
|
+
_ = EnvironmentInformation::Queries::SimpleVersion.new(:lftp)
|
210
|
+
_.report_left_right
|
211
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# require 'environment_information/requires/require_asciitable.rb'
|
6
|
+
# =========================================================================== #
|
7
|
+
begin
|
8
|
+
class EnvironmentInformation::EnvironmentInformation; end # Define a prototype here.
|
9
|
+
require 'ascii_paradise/requires/require_asciitable_namespace.rb'
|
10
|
+
EnvironmentInformation::ASCIITABLE_IS_AVAILABLE = true
|
11
|
+
rescue LoadError
|
12
|
+
# puts 'asciitable is not available, consider installing it.'
|
13
|
+
# puts 'We will, however, continue, as it is not a mandatory package.'
|
14
|
+
EnvironmentInformation::ASCIITABLE_IS_AVAILABLE = false
|
15
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# require 'environment_information/requires/require_the_constants.rb'
|
6
|
+
# =========================================================================== #
|
7
|
+
require 'environment_information/constants/constants.rb'
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# require 'environment_information/requires/require_the_environment_information_project.rb'
|
6
|
+
# =========================================================================== #
|
7
|
+
require 'environment_information/requires/require_the_constants.rb'
|
8
|
+
require 'environment_information/colours/sfancy.rb'
|
9
|
+
require 'environment_information/colours/simp.rb'
|
10
|
+
require 'environment_information/version/version.rb'
|
11
|
+
# =========================================================================== #
|
12
|
+
# Next, require the individual components:
|
13
|
+
# =========================================================================== #
|
14
|
+
require 'environment_information/requires/require_the_individual_misc_components.rb'
|
15
|
+
# =========================================================================== #
|
16
|
+
# Next, require the toplevel-methods of environment_information/:
|
17
|
+
# =========================================================================== #
|
18
|
+
require 'environment_information/requires/require_the_toplevel_methods.rb'
|
19
|
+
# =========================================================================== #
|
20
|
+
# And then we will require the main class of the environment information
|
21
|
+
# project:
|
22
|
+
# =========================================================================== #
|
23
|
+
require 'environment_information/class/environment_information.rb'
|
@@ -0,0 +1,30 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# require 'environment_information/requires/require_the_individual_misc_components.rb'
|
6
|
+
# =========================================================================== #
|
7
|
+
module EnvironmentInformation
|
8
|
+
|
9
|
+
require 'environment_information/constants/array_tracked_components.rb'
|
10
|
+
|
11
|
+
# ========================================================================= #
|
12
|
+
# === EnvironmentInformation.require_all_individual_misc_components
|
13
|
+
#
|
14
|
+
# This method can be used to load all the individual misc-components
|
15
|
+
# that are part of the EnvironmentInformation project.
|
16
|
+
# ========================================================================= #
|
17
|
+
def self.require_all_individual_misc_components
|
18
|
+
|
19
|
+
# ======================================================================= #
|
20
|
+
# Batch-require the components in the misc_components/ directory next:
|
21
|
+
# ======================================================================= #
|
22
|
+
tracked_non_programs?.each {|this_component|
|
23
|
+
require "environment_information/misc_components/#{this_component}.rb"
|
24
|
+
}
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
require_all_individual_misc_components
|
29
|
+
|
30
|
+
end
|