Class: RBT::Action::Statistics::CompileStrategies

Inherits:
RBT::Action show all
Defined in:
lib/rbt/actions/individual_actions/statistics/compile_strategies.rb

Overview

RBT::Action::Statistics::CompileStrategies

Constant Summary

Constants inherited from LeanPrototype

LeanPrototype::ALL_COLOUR_METHODS, LeanPrototype::ARRAY_KDE_KONSOLE_COLOURS_IN_USE, LeanPrototype::DAY_NAMES, LeanPrototype::NAMESPACE, LeanPrototype::SILENT_REDIRECTION

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from LeanPrototype

#a_or_an?, #abbreviations?, #absolute_path, #action, #add_to_the_commandline_arguments, #all_binaries?, #all_files_from, #all_libraries?, #allowed_cookbook_entries?, #appdir_location_of?, #append_onto_the_internal_hash, #append_what_into, #archive_type_of?, #available_programs?, #be_quiet?, #be_verbose?, #begins_with_a_comment?, #capitalize_first_alphabetical_character, #cd_to_the_log_directory, #cd_to_the_temp_directory, #change_directory, #change_permission, #cheering_person?, #chmod, #chop_off_archive, #clear_commandline_arguments, #cliner, #coloured_and_padded_e, #coloured_and_padded_esystem, #coloured_esystem, #colourize_directory_for_system_results, #colourize_this_error, #colourize_this_file_path, #colourize_this_warning, #commandline_arguments?, #commandline_arguments_without_hyphens?, #comment, #convert_dd_mm_yyyy_to_its_long_variant, #convert_env_variable, #copy_directory, #copy_files, #cpr, #create_directory, #current_hour?, #dd_mmm_yyy, #debug, #debug?, #directory_expanded_cookbooks?, #disable_colours, #display_md5sum?, #do_not_debug, #does_the_cookbook_include_this_program?, #does_this_expanded_cookbook_file_exist_for_this_program?, #does_this_file_exist?, #does_this_file_exist_and_is_it_a_file?, #e, #eblue, #ecomment, #ecrimson, #edir, #editor?, #efancy, #eimp, #enable_colours, #enable_debug, #ensure_main_encoding_for, #eparse, #esystem, #esystem_gold, #etomato, #ewarn, #exit_program, #expanded_cookbooks_directory_exists?, #extract_this_archive, #extract_to?, #file_compiled_programs?, #file_dirname_retaining_trailing_slash, #file_predefined_installation_instructions?, #file_specification_of_registered_cookbook_entries, #find_cookbook_alias_for, #find_this_yaml_file, #first_argument?, #first_non_hyphen_argument?, #get_all_directories_from, #get_all_files_from, #get_all_programs, #get_date, #get_extended_date, #get_files_and_directories_from, #go_to_base_dir, #home_dir?, #host_system?, #infer_the_namespace, #internal_hash?, #internal_hash_set_commandline_arguments, #is_an_archive?, #is_directory?, #is_file?, #is_github_url?, #is_make_available?, #is_meson_installed?, #is_on_gobolinux?, #is_on_windows?, #is_roebe?, #is_superuser?, #is_symlink?, #is_this_a_header?, #is_this_a_library?, #is_this_program_included?, #iso_encoding?, #load_dataset_from_this_expanded_cookbook, #load_yaml, #load_yaml_file_from_the_cookbook_directory_for_this_program, #log_directory?, #main_encoding?, #meson_build_file_exists?, #months?, #move_file, #n_programs_are_available?, #n_programs_available?, #namespace?, #no_directory_exists_at, #no_directory_was_found_at, #no_opn, #no_such_file_exists, #open_in_browser, #open_in_editor, #opncomment, #opne, #opnef, #opnerev, #opnerror, #opnesystem, #opnewarn, #opnfancy, #opnn, #otomato, #packages_directory?, #path_to_this_expanded_cookbooks_dataset, #pkgconfig_directory?, #populate_the_internal_hash_with_default_values, #predefined_installation_instructions?, #prepend_this_commandline_argument, #program_version_of?, #project_base_directory?, #project_yaml_directory?, #query_path?, #rarrow?, #read_file, #read_file_in_default_encoding, #read_file_with_default_encoding, #readlines, #readlines_with_proper_encoding, #register_sigint, #registered_cookbook_entries?, #remove, #remove_archive_from_the_end, #remove_comments_from_each_line, #remove_directory, #remove_double_slashes, #remove_file, #remove_newlines, #remove_parens, #remove_symlink, #remove_the_first_commandline_argument, #remove_this_commandline_argument, #remove_this_entry_from_the_commandline_arguments, #remove_trailing_ANSII_escape_code, #remove_unnecessary_data_from_url, #rename, #report_pwd, #require_the_rbt_aliases, #reset_the_internal_hash, #return_all_archives_from_this_directory, #return_appdir_prefix, #return_commandline_arguments_with_leading_hyphens, #return_current_hour_minutes_second, #return_date, #return_day_of_the_month_based_on_utc, #return_full_time, #return_hours_minutes_seconds_based_on_utc, #return_location_to_this_programs_yaml_file, #return_month_based_on_this_number, #return_month_based_on_utc, #return_opnn, #return_program_name, #return_program_name_for_gobolinux_systems, #return_program_name_via_program_information, #return_pwd, #return_unicode_warning_symbol_or_empty_string, #return_utc, #return_utc_time_in_a_format_similar_to_slackware, #return_weekday_based_on_utc, #return_year_based_on_utc, #rev, #rpn, #run_simulation=, #run_simulation?, #sdir, #sdir_return_pwd, #set_be_silent, #set_be_verbose, #set_first_commandline_argument, #set_namespace, #set_use_colours, #set_use_opn, #set_xorg_buffer, #sfancy, #sfile, #silent_redirection?, #silently_create_this_directory_if_it_does_not_yet_exist, #simp, #source_base_directory?, #ssym, #stderr, #store_into_this_directory?, #string_right_arrow?, #swarn, #symlink, #sysbin_directory?, #sysetc_directory?, #sysinclude_directory?, #syslib_directory?, #sysshare_directory?, #system_directory?, #temp_directory?, #to_bool, #to_camelcase, #to_iso_encoding, #to_unicode, #today?, #touch, #try_to_require_beautiful_url, #try_to_require_the_environment_information_gem, #try_to_require_the_extracter_gem, #try_to_require_the_open_gem, #try_to_require_the_xorg_buffer, #try_to_require_wget, #try_to_return_a_special_compile_component, #unicode_cliner, #unicode_middle_cliner, #use_colours=, #use_colours?, #use_opn=, #use_opn?, #utf_encoding?, #verbose_truth, #word_wrap, #write_what_into, #write_what_into_via_unicode, #yes_or_no

Constructor Details

#initialize(i = ARGV, run_already = true, &block) ⇒ CompileStrategies

#

initialize

#


36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/rbt/actions/individual_actions/statistics/compile_strategies.rb', line 36

def initialize(
    i           = ARGV,
    run_already = true,
    &block
  )
  reset
  set_commandline_arguments(i)
  case run_already
  # ======================================================================= #
  # === :do_not_run_yet
  # ======================================================================= #
  when :do_not_run_yet
    run_already = false
  end
  # ======================================================================= #
  # === Handle blocks given to this class next
  # ======================================================================= #
  if block_given?
    _yielded = yield
  end
  run if run_already
end

Class Method Details

.[](i = ARGV) ⇒ Object

#

RBT::Action::Statistics::CompileStrategies[]

#


309
310
311
# File 'lib/rbt/actions/individual_actions/statistics/compile_strategies.rb', line 309

def self.[](i = ARGV)
  new(i)
end

Instance Method Details

#colour_on_the_left_hand_side(i) ⇒ Object

#

colour_on_the_left_hand_side

#


137
138
139
# File 'lib/rbt/actions/individual_actions/statistics/compile_strategies.rb', line 137

def colour_on_the_left_hand_side(i)
  sfancy(i)
end

#dataset?Boolean

#

dataset?

#

Returns:

  • (Boolean)


89
90
91
# File 'lib/rbt/actions/individual_actions/statistics/compile_strategies.rb', line 89

def dataset?
  @internal_hash[:dataset]
end

#determine_how_many_programs_are_registeredObject

#

determine_how_many_programs_are_registered

#


110
111
112
# File 'lib/rbt/actions/individual_actions/statistics/compile_strategies.rb', line 110

def determine_how_many_programs_are_registered
  @n_programs_are_registered = @internal_hash[:main_hash].keys.size
end

#load_dataset_from_the_expanded_dataObject

#

load_dataset_from_the_expanded_data

#


152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
# File 'lib/rbt/actions/individual_actions/statistics/compile_strategies.rb', line 152

def load_dataset_from_the_expanded_data
  reset_the_main_hash
  _ = RBT.directory_expanded_cookbooks? # Get a reference to the expanded cookbooks directory.
  # ======================================================================= #
  # Load all files from the expanded cookbooks dataset next:
  # ======================================================================= #
  all_files = Dir["#{_}*.yml"]
  if all_files.size < n_programs_are_available?
    # ===================================================================== #
    # And do a little-error check next, as revealed on June 2022.
    # ===================================================================== #
    e tomato('Note: not all programs seem to contain an expanded dataset.')
    e tomato('Consider running "')+steelblue('rbt --expand')+
      tomato('" to generate the expanded dataset.')
  end
  all_files.each {|this_file|
    dataset_from_the_yaml_file = load_yaml(this_file)
    name_of_the_program = File.basename(this_file).sub(/\.yml$/,'')
    hash = {}
    hash[name_of_the_program] = dataset_from_the_yaml_file
    @internal_hash[:main_hash].update(hash)
  }
  determine_how_many_programs_are_registered
end

#main_hash?Boolean

#

main_hash?

#

Returns:

  • (Boolean)


190
191
192
# File 'lib/rbt/actions/individual_actions/statistics/compile_strategies.rb', line 190

def main_hash?
  @internal_hash[:main_hash]
end

#n_programs_are_assumed_to_be_run_via_makefiles?Boolean

#

n_programs_are_assumed_to_be_run_via_makefiles?

#

Returns:

  • (Boolean)


96
97
98
# File 'lib/rbt/actions/individual_actions/statistics/compile_strategies.rb', line 96

def n_programs_are_assumed_to_be_run_via_makefiles?
  @internal_hash[:n_programs_are_assumed_to_be_run_via_makefiles]
end

#n_programs_are_registered?Boolean Also known as: n_total_programs?

#

n_programs_are_registered?

#

Returns:

  • (Boolean)


293
294
295
# File 'lib/rbt/actions/individual_actions/statistics/compile_strategies.rb', line 293

def n_programs_are_registered?
  @n_programs_are_registered
end

#n_programs_depend_on(a = 'cmake', b = cmake_deps) ⇒ Object

#

n_programs_depend_

#


117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/rbt/actions/individual_actions/statistics/compile_strategies.rb', line 117

def n_programs_depend_on(
    a = 'cmake',
    b = cmake_deps
  )
  @internal_hash[:n_programs_are_assumed_to_be_run_via_makefiles] -= b.keys.size
  n_percent = (
    b.keys.size * 100.0 / @n_programs_are_registered
  ).round(1).to_s.rjust(4)+'%'
  # ======================================================================= #
  # Next append the number:
  # ======================================================================= #
  n_percent << ' ('+b.keys.size.to_s.rjust(4)+' / '+n_total_programs?.to_s+')'
  colourized_n_percent = mediumseagreen(n_percent)
  e "#{colour_on_the_left_hand_side(b.keys.size.to_s.rjust(3))} #{rev}programs "\
    "depend on #{royalblue((a+'.').ljust(15))} #{colourized_n_percent}"
end

#program_path?Boolean

#

program_path?

#

Returns:

  • (Boolean)


82
83
84
# File 'lib/rbt/actions/individual_actions/statistics/compile_strategies.rb', line 82

def program_path?
  @internal_hash[:dataset]['program_path']
end

#reportObject

#

report (report tag)

#


197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
# File 'lib/rbt/actions/individual_actions/statistics/compile_strategies.rb', line 197

def report
  _ = main_hash?
  # ======================================================================= #
  # Seed the variable @internal_hash[:n_programs_are_assumed_to_be_run_via_makefiles]
  # with an initial value, which will lateron be decremented accordingly.
  #
  # Note that all keys will be guaranteed to be Symbols, such as
  # :required_deps_on or :use_this_build_system.
  # ======================================================================= #
  @internal_hash[:n_programs_are_assumed_to_be_run_via_makefiles] = @n_programs_are_registered
  check_for_this_value = :required_deps_on
  configure_deps = _.select {|key, inner_value|
    build_system = inner_value[:use_this_build_system]
    build_system and (build_system.to_s.strip == 'configure')
  }
  cmake_deps = _.select {|key, inner_value|
    array_required_deps_on = inner_value[check_for_this_value]
    array_required_deps_on and array_required_deps_on.include?('cmake')
  }
  python_deps = _.select {|key, inner_value|
    array_required_deps_on = inner_value[check_for_this_value]
    array_required_deps_on and array_required_deps_on.include?('python')
  }
  meson_deps = _.select {|key, inner_value|
    array_required_deps_on = inner_value[check_for_this_value]
    array_required_deps_on and array_required_deps_on.include?('meson')
  }
  ruby_deps = _.select {|key, inner_value|
    array_required_deps_on = inner_value[check_for_this_value]
    array_required_deps_on and array_required_deps_on.include?('ruby')
  }
  perl_deps = _.select {|key, inner_value|
    array_required_deps_on = inner_value[check_for_this_value]
    array_required_deps_on and array_required_deps_on.include?('perl')
  }
  scons_deps = _.select {|key, inner_value|
    array_required_deps_on = inner_value[check_for_this_value]
    array_required_deps_on and array_required_deps_on.include?('scons')
  }
  waf_deps = _.select {|key, inner_value|
    array_required_deps_on = inner_value[check_for_this_value]
    array_required_deps_on and array_required_deps_on.include?('waf')
  }
  e
  report_how_many_programs_are_registered_in_total
  e
  # ======================================================================= #
  # === configure
  # ======================================================================= #
  n_programs_depend_on('configure', configure_deps)
  # ======================================================================= #
  # === cmake
  # ======================================================================= #
  n_programs_depend_on('cmake', cmake_deps)
  # ======================================================================= #
  # === ruby
  # ======================================================================= #
  n_programs_depend_on('ruby', ruby_deps)
  # ======================================================================= #
  # === python
  # ======================================================================= #
  n_programs_depend_on('python', python_deps)
  # ======================================================================= #
  # === meson
  # ======================================================================= #
  n_programs_depend_on('meson', meson_deps)
  # ======================================================================= #
  # === perl
  # ======================================================================= #
  n_programs_depend_on('perl', perl_deps)
  # ======================================================================= #
  # === scons
  # ======================================================================= #
  n_programs_depend_on('scons', scons_deps)
  # ======================================================================= #
  # === waf
  # ======================================================================= #
  n_programs_depend_on('waf', waf_deps)
  e slateblue('---')
  e colour_on_the_left_hand_side(
    @n_programs_are_registered - n_programs_are_assumed_to_be_run_via_makefiles?
  )+rev+' programs make use of any of the above '+skyblue('^^^')+
  rev+' compile-time strategies.'
  e
  e "#{sfancy(n_programs_are_assumed_to_be_run_via_makefiles?.to_s)} #{rev}programs"\
    " are assumed to be compiled through #{orange('make')} #{rev}(and possibly"
  e '     '+lightsalmon('GNU autoconfigure')+rev+
    '). Note that meson depends on python,'
  e '     so strictly speaking, the meson-dependencies overlap'
  e '     with the python-dependencies.'
  e
end

#report_how_many_programs_are_registered_in_totalObject

#

report_how_many_programs_are_registered_in_total

#


144
145
146
147
# File 'lib/rbt/actions/individual_actions/statistics/compile_strategies.rb', line 144

def report_how_many_programs_are_registered_in_total
  e "#{rev}There are a total of #{springgreen(@n_programs_are_registered)} "\
    "#{rev}registered programs in the #{royalblue('RBT project')}#{rev}."
end

#resetObject

#

reset (reset tag)

#


62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/rbt/actions/individual_actions/statistics/compile_strategies.rb', line 62

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === :main_hash
  # ======================================================================= #
  @internal_hash[:main_hash] = {}
  # ======================================================================= #
  # === :n_programs_are_assumed_to_be_run_via_makefiles
  # ======================================================================= #
  @internal_hash[:n_programs_are_assumed_to_be_run_via_makefiles] = 0
  # ======================================================================= #
  # Remember if you need to know the amount of programs, within this
  # class the variable @n_programs_are_registered keeps track of this.
  # ======================================================================= #
end

#reset_the_main_hashObject

#

reset_the_main_hash

#


103
104
105
# File 'lib/rbt/actions/individual_actions/statistics/compile_strategies.rb', line 103

def reset_the_main_hash
  @internal_hash[:main_hash].clear
end

#runObject

#

run (run tag)

#


300
301
302
303
304
# File 'lib/rbt/actions/individual_actions/statistics/compile_strategies.rb', line 300

def run
  show_introduction
  load_dataset_from_the_expanded_data
  report # Report to the user finally.
end

#show_introductionObject

#

show_introduction

#


180
181
182
183
184
185
# File 'lib/rbt/actions/individual_actions/statistics/compile_strategies.rb', line 180

def show_introduction
  opnn { :no_colon }
  e; e
  e "#{rev}Gathering some #{steelblue('compile-statistics')} "\
    "#{rev}about the registered programs."
end