Class: RBT::StaticOverviewOfTheAvailableBinariesOnThisComputerSystem

Inherits:
Base
  • Object
show all
Defined in:
lib/rbt/utility_scripts/static_overview_of_the_available_binaries_on_this_computer_system.rb

Overview

RBT::StaticOverviewOfTheAvailableBinariesOnThisComputerSystem

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 Base

#cat, #cd_back_to_the_current_working_directory, #consider_reporting_how_many_programs_are_registered, #cookbook_files?, #copy_recursively, #delete_code_of_conduct?, #determine_appdir_prefix_from_this_input, #directory_validation?, #do_not_show_names, #fast_return_file_size_of_this_program, #file_last_symlinked_program?, #file_programs_version_url, #gem_version, #is_a_64bit_system?, #is_ccache_available?, #is_porg_available?, #is_this_binary_registered?, #is_this_program_included?, #make_command?, #make_install_command?, #new_cookbook_instance_for, #program_exists?, #publish_list_of_all_programs_version, #rcp, registered_binaries?, #remove_symlink, #rename_kde_konsole_tab, #repackage, #report_n_programs, #report_working_directory, #return_compile_time_statistics, #return_n_random_characters, #return_version_of_this_program, #run_make_then_make_install, #sanitize_url1_entry, #set_source_directory, #show_overview_over_available_utility_scripts, #symlink_all_files_from_this_directory_to_that_directory, #system_tags?, #upload_list_of_all_programs_version, #use_yaml_database_for_tags?, #warn_and_exit, #wget

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(commandline_arguments = nil, run_already = true) ⇒ StaticOverviewOfTheAvailableBinariesOnThisComputerSystem

#

initialize

#


28
29
30
31
32
33
34
35
36
37
# File 'lib/rbt/utility_scripts/static_overview_of_the_available_binaries_on_this_computer_system.rb', line 28

def initialize(
    commandline_arguments = nil,
    run_already           = true
  )
  reset
  set_commandline_arguments(
    commandline_arguments
  )
  run if run_already
end

Class Method Details

.[](i = ARGV) ⇒ Object

#

RBT::StaticOverviewOfTheAvailableBinariesOnThisComputerSystem[]

#


152
153
154
# File 'lib/rbt/utility_scripts/static_overview_of_the_available_binaries_on_this_computer_system.rb', line 152

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

Instance Method Details

#report_how_many_statically_compiled_programs_were_encounteredObject

#

report_how_many_statically_compiled_programs_were_encountered

#


143
144
145
146
147
# File 'lib/rbt/utility_scripts/static_overview_of_the_available_binaries_on_this_computer_system.rb', line 143

def report_how_many_statically_compiled_programs_were_encountered
  e "#{sfancy(@encountered_n_statically_compiled_programs.to_s)} "\
    "#{rev}statically compiled programs were discovered on "\
    "this computer system."
end

#resetObject

#

reset (reset tag)

#


42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/rbt/utility_scripts/static_overview_of_the_available_binaries_on_this_computer_system.rb', line 42

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === @encountered_n_statically_compiled_programs
  # ======================================================================= #
  @encountered_n_statically_compiled_programs = 0
  # ======================================================================= #
  # === @array_work_on_these_directories
  # ======================================================================= #
  @array_work_on_these_directories = %w(
    /usr/bin/
    /bin/
  )
end

#runObject

#

run (run tag)

#


61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/rbt/utility_scripts/static_overview_of_the_available_binaries_on_this_computer_system.rb', line 61

def run
  opnn { :no_trailing }
  e
  e
  e 'Showing an overview of all static binaries on this system (at the '\
    'least in '+sdir('/usr/bin/')
  e "#{rev}and #{sdir('/bin/')}#{rev}) next:"
  e
  @array_work_on_these_directories.each {|this_directory|
    Dir["#{this_directory}*"].sort_by {|entry| entry.downcase }.each {|this_file|
      if File.directory? this_file
        e "#{rev}Note that #{sdir(this_file)} #{rev}is a directory."
        if is_on_roebe?
          # I can remove this. \o/
          e 'This is questionable: check on this perhaps before '\
            'continuing here.'
          exit
        end
      end
      # =================================================================== #
      # We will exclude files that are e. g. perl files such as .pl
      # or .py.
      # =================================================================== #
      next if this_file.include? '.'
      next if File.empty?(this_file) # Ignore empty files.
      # =================================================================== #
      # We can not ignore symlinks because of stuff like this:
      #
      #   /usr/bin/ls -> /home/Programs/Coreutils/8.31/bin/ls
      #
      # next if File.symlink?(this_file)
      # =================================================================== # 
      # =================================================================== #
      # If the first line includes '#!/' then we will assume this to
      # be a "scripting" file.
      # =================================================================== #
      is_it_a_scripting_file = false
      begin
        if File.exist?(this_file)
          File.open(this_file) {|file|
            first_line = file.readline
            if first_line.include?('#!/')  or # Assume this to be a "scripting" file.
               first_line.start_with?('#!')
              is_it_a_scripting_file = true
            end
          }
        end
      rescue EOFError => error
        e orange('Problem with ')+sfile(this_file)
        pp error
        pp error.class
      end
      next if is_it_a_scripting_file
      # =================================================================== #
      # Next we will run "ldd" on the binary at hand.
      # =================================================================== #
      cmd_to_use = "ldd #{this_file}"
      # e tomato(cmd_to_use)+': '
      result = `#{cmd_to_use}`
      if result.include?('not a dynamic executable')
        raw_name = File.basename(this_file)
        result = "#{rev}  #{steelblue(this_file.ljust(35))} #{rev}is "\
                 "most likely a #{olivedrab('static executable')}."
        hash_all_binaries = RBT.all_binaries?
        if hash_all_binaries.include?(raw_name)
          result = result.dup if result.frozen?
          result << " #{rev}It belongs to the program called "\
                    "#{lightgreen(hash_all_binaries[raw_name])}."
        end
        e result
        @encountered_n_statically_compiled_programs += 1
      end
    }
  }
  e
  report_how_many_statically_compiled_programs_were_encountered
  e
end