Class: RBT::Libtool

Inherits:
Base show all
Defined in:
lib/rbt/libtool/reset.rb,
lib/rbt/libtool/run.rb,
lib/rbt/libtool/help.rb,
lib/rbt/libtool/libtool.rb,
lib/rbt/libtool/constants.rb,
lib/rbt/libtool/class_methods/class_methods.rb,
lib/rbt/libtool/search_in_these_directories.rb,
lib/rbt/libtool/class_methods/use_this_directory.rb,
lib/rbt/libtool/class_methods/return_every_la_file.rb,
lib/rbt/libtool/class_methods/autocorrect_this_file.rb,
lib/rbt/libtool/remove_libtool_files/remove_libtool_files.rb,
lib/rbt/libtool/class_methods/return_all_la_files_from_this_directory.rb,
lib/rbt/libtool/class_methods/append_this_directory_to_the_list_of_directories_to_search_for.rb

Overview

RBT::Libtool.new

Defined Under Namespace

Classes: RemoveLibtoolFiles

Constant Summary collapse

FILE_SEARCH_IN_THESE_DIRECTORIES =
#

FILE_SEARCH_IN_THESE_DIRECTORIES

#
"#{RBT.project_yaml_dir?}search_in_these_directories/search_in_these_directories.yml"
ULIB_LIBRARIES =
#

ULIB_LIBRARIES

#
'/usr/lib/'
ULIB64_LIBRARIES =
#

ULIB64_LIBRARIES

#
'/usr/lib64/'
SYSTEM_LIBRARIES =
#

SYSTEM_LIBRARIES

In modern GoboLinux variants, this is pointing towards /System/Index/lib.

#
'/System/Index/lib/'
REGEX_TO_DISCOVER_PROGRAMS_ENTRIES_IN_DEPENDENCY_LIBS =
#

REGEX_TO_DISCOVER_PROGRAMS_ENTRIES_IN_DEPENDENCY_LIBS

Rubular example at:

http://rubular.com/r/E8jSpNAMcX
#
/(.*\/Programs\/[A-Za-z]+\d*[a-z]*\/.+\d\/)/

Constants inherited from LeanPrototype

RBT::LeanPrototype::ALL_COLOUR_METHODS, RBT::LeanPrototype::ARRAY_KDE_KONSOLE_COLOURS_IN_USE, RBT::LeanPrototype::DAY_NAMES, RBT::LeanPrototype::NAMESPACE, RBT::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(i = ARGV, run_already = true) ⇒ Libtool

#

initialize

#


34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/rbt/libtool/libtool.rb', line 34

def initialize(
    i           = ARGV,
    run_already = true
  )
  reset
  case i
  # ======================================================================= #
  # === :do_not_run_yet
  # ======================================================================= #
  when :do_not_run_yet
    # In this case, do not run anything.
  else # This else clause here is the default clause.
    set_commandline_arguments(i)
    run if run_already
  end
end

Class Method Details

.[](i = ARGV) ⇒ Object

#

RBT::Libtool[]

#


479
480
481
# File 'lib/rbt/libtool/libtool.rb', line 479

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

.append_this_directory_to_the_list_of_directories_to_search_for(i = ARGV) ⇒ Object

#

RBT::Libtool.append_this_directory_to_the_list_of_directories_to_search_for

This should be used on the commandline.

It will permanently set to use a new directory to search for.

#


30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/rbt/libtool/class_methods/append_this_directory_to_the_list_of_directories_to_search_for.rb', line 30

def self.append_this_directory_to_the_list_of_directories_to_search_for(
    i = ARGV
  )
  i = i.first if i.is_a? Array
  case i
  when 'PROGRAMS'
    i = program_dir?
  end unless File.exist?(i)
  i = i.dup if i.frozen?
  i << '/' unless i.end_with? '/'
  target_file = FILE_SEARCH_IN_THESE_DIRECTORIES
  array_search_in_these_directories = YAML.load_file(target_file)
  # ======================================================================= #
  # Only add new entries.
  # ======================================================================= #
  if array_search_in_these_directories.include? i
    opn; e "Can not add #{Colours.sdir(i)} as it is already a part "\
           "of the search-directories."
  # ======================================================================= #
  # Add the new entry into our main yaml file.
  # ======================================================================= #
  else
    array_search_in_these_directories << i
    opn; e 'We will append the directory `'+Colours.sdir(i)+'` to the '\
           'list of directories'
    opn; e 'that we will search for incorrect .la files.'
    File.open(target_file, 'w+') { |file|
      file.write(YAML.dump(array_search_in_these_directories))
    }
    opn; e "Done! The new file can be found at `#{Colours.sfile(target_file)}`."
    if RBT.is_on_roebe?
      this_file = "#{RUBY_SRC_DIR}roebe/lib/roebe/yaml/"\
                  "#{File.basename(target_file)}"
      File.open(this_file, 'w+') { |file|
        file.write(YAML.dump(array_search_in_these_directories))
      }
      opn; e 'Done! The new file can be found at '+Colours.sfile(this_file)
    end
  end
end

.autocorrect_this_file(i) ⇒ Object

#

RBT::Libtool.autocorrect_this_file

The argument for this method should be an erroneous libtool entry such as /usr/lib/glib.la.

#


19
20
21
# File 'lib/rbt/libtool/class_methods/autocorrect_this_file.rb', line 19

def self.autocorrect_this_file(i)
  RBT::Libtool.new(:do_not_run_yet).remove_this_entry(i)
end

.autofix_every_la_fileObject

#

Libtool.autofix_every_la_file

Use this method to fix every .la file on your system.

Invocation example:

rubylibtool --autofix
#


418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
# File 'lib/rbt/libtool/libtool.rb', line 418

def self.autofix_every_la_file
  ensure_that_we_have_found_la_files
  if Libtool.faulty_la_files?.empty?
    # ===================================================================== #
    # In this case, fill up the Array first.
    # ===================================================================== #
    Libtool.fill_up_array_that_holds_faulty_la_files
  end
  Libtool.faulty_la_files?.each {|file|
    opne "Now working on the #{orange('.la')} file `#{sfile(file)}`."
    dataset = File.readlines(file)
    new_file_content = ''
    dataset.each {|line|
      if line.include?('dependency_libs') and 
         line.include? PROGRAMS_DIRECTORY.chop # .chop because we have a trailing '/'.
        splitted = line.split(' ')
        splitted.map! {|entry|
          if entry.include? PROGRAMS_DIRECTORY.chop
            entry = rds(entry)
            # ============================================================= #
            #   /usr//Programs/Libx11/1.6.3/lib/libX11.la
            # or
            #   /usr//usr//usr//Programs/Atspi2core/2.18.2/lib/libatspi.la
            # really strange
            # ============================================================= #
            regex = REGEX_TO_DISCOVER_PROGRAMS_ENTRIES_IN_DEPENDENCY_LIBS
            entry =~ regex
            match = $1.to_s.dup
            entry.sub!(/#{match}/, '/usr/')
          end
          entry
        }
        line = splitted.join(' ')+N
      end
      new_file_content << line
    }
    what = new_file_content
    into = file
    opne "Now storing into `#{sfile(into)}`."
    write_what_into(what, into)
  }
end

.e(i = '') ⇒ Object

#

RBT::Libtool.e

#


19
20
21
# File 'lib/rbt/libtool/class_methods/append_this_directory_to_the_list_of_directories_to_search_for.rb', line 19

def self.e(i = '')
  puts i
end

.obtain_all_la_files_from_system_librariesObject

#

Libtool.obtain_all_la_files_from_system_libraries

Grab all .la files from /System/Index/lib/.

#


36
37
38
# File 'lib/rbt/libtool/class_methods/class_methods.rb', line 36

def self.obtain_all_la_files_from_system_libraries
  Dir["#{SYSTEM_LIBRARIES}*.la"].sort
end

.obtain_all_la_files_from_usr_libObject

#

Libtool.obtain_all_la_files_from_usr_lib

Grab all .la files from /usr/lib/.

#


27
28
29
# File 'lib/rbt/libtool/class_methods/class_methods.rb', line 27

def self.obtain_all_la_files_from_usr_lib
  Dir["#{ULIB_LIBRARIES}*.la"].sort
end

.obtain_all_la_files_from_usr_lib64Object

#

Libtool.obtain_all_la_files_from_usr_lib64

Grab all .la files from the /usr/lib64/ directory.

This is no longer in use a lot.

#


18
19
20
# File 'lib/rbt/libtool/class_methods/class_methods.rb', line 18

def self.obtain_all_la_files_from_usr_lib64
  Dir["#{ULIB64_LIBRARIES}*.la"].sort
end

.return_all_la_files_from_this_directory(this_directory) ⇒ Object

#

RBT::Libtool.return_all_la_files_from_this_directory

#


14
15
16
# File 'lib/rbt/libtool/class_methods/return_all_la_files_from_this_directory.rb', line 14

def self.return_all_la_files_from_this_directory(this_directory)
  Dir["#{this_directory}*.la"].sort
end

.return_every_la_fileObject

#

RBT::Libtool.return_every_la_file

If you want to return every .la file on a given computer system, then, use this method here.

This will obtain from /usr/lib/, /usr/lib64 and /System/Libraries/ by default. Otherwise, we will make use of an Array.

#


22
23
24
# File 'lib/rbt/libtool/class_methods/return_every_la_file.rb', line 22

def self.return_every_la_file
  ::RBT::Libtool.new.every_la_file
end

.set_use_this_directory(i) ⇒ Object

#

RBT::Libtool.set_use_this_directory

#


32
33
34
# File 'lib/rbt/libtool/class_methods/use_this_directory.rb', line 32

def self.set_use_this_directory(i)
  @use_this_directory = i.to_s
end

.use_this_directory(i) ⇒ Object

#

RBT::Libtool.use_this_directory

The PWD macro means Dir.pwd actually.

#


41
42
43
44
45
46
47
48
49
# File 'lib/rbt/libtool/class_methods/use_this_directory.rb', line 41

def self.use_this_directory(i)
  i = i.to_s
  case i
  when 'PWD'
    i = return_pwd
  end unless File.exist? i
  i << '/' unless i.end_with? '/'
  @use_this_directory = i
end

.use_this_directory?Boolean

#

RBT::Libtool.use_this_directory?

#

Returns:

  • (Boolean)


25
26
27
# File 'lib/rbt/libtool/class_methods/use_this_directory.rb', line 25

def self.use_this_directory?
  @use_this_directory
end

Instance Method Details

#append_this_directory_to_the_list_of_directories_to_search_for(i) ⇒ Object

#

append_this_directory_to_the_list_of_directories_to_search_for

#


215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
# File 'lib/rbt/libtool/libtool.rb', line 215

def append_this_directory_to_the_list_of_directories_to_search_for(i)
  case i
  when 'PROGRAMS'
    i = program_dir?
  end unless File.exist?(i)
  i = i.dup if i.frozen?
  i << '/' unless i.end_with? '/'
  unless @search_in_these_directories.include? i
    if block_given?
      yielded = yield
      case yielded
      # =================================================================== #
      # === :be_verbose
      # =================================================================== #
      when :be_verbose
        opne "Adding the directory `#{sdir(i)}"\
             "` to the search path of this class."
      end
    end
    @search_in_these_directories << i
  end
end

#clear_array_log_these_filesObject

#

clear_array_log_these_files

#


272
273
274
# File 'lib/rbt/libtool/libtool.rb', line 272

def clear_array_log_these_files
  @array_log_these_files = []
end

#ensure_that_we_have_found_la_filesObject

#

ensure_that_we_have_found_la_files

#


206
207
208
209
210
# File 'lib/rbt/libtool/libtool.rb', line 206

def ensure_that_we_have_found_la_files
  if @array_all_libtool_files.empty?
    obtain_all_the_la_files
  end
end

#input?Boolean

#

input?

#

Returns:

  • (Boolean)


388
389
390
# File 'lib/rbt/libtool/libtool.rb', line 388

def input?
  @input
end

#log_these_filesObject

#

log_these_files

#


178
179
180
# File 'lib/rbt/libtool/libtool.rb', line 178

def log_these_files
  @array_log_these_files
end
#

menu (menu tag)

The input to this should ideally be the whole commandline, as String.

Reason being that we can apply a regex on the whole line.

#


58
59
60
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
# File 'lib/rbt/libtool/libtool.rb', line 58

def menu(i)
  if i.is_a? Array
    i.each {|entry| menu(entry) }
  else
    case i # case tag
    # ===================================================================== #
    # === Add search-directories
    #
    # This entry point will add new directories to the main list of
    # search directories for class RBT::Libtool.
    #
    # Invocation example:
    #
    #   rubylibtool --search-in-this-directory=/opt/lib
    #   rubylibtool --add=/home/Programs/ /usr/lib64/libglib-2.0.la
    #   rubylibtool --add=PROGRAMS /usr/lib64/libpng16.la
    #
    # ===================================================================== #
    when /(_|-)?(_|-)?search(_|-)?in(_|-)?this(_|-)?directory=(.+)/i, # === $6
         /(_|-)?(_|-)?add=(.+)/i                                      # === $3
      _ = $3.to_s.dup
      _ = $6.to_s.dup if $6
      append_this_directory_to_the_list_of_directories_to_search_for(
        _
      ) { :be_verbose }
    # ===================================================================== #
    # === Remove a faulty .la entry that was stored in a local .md file
    #
    # This entry point can be used to simply remove the last stored .la
    # file.
    #
    # Invocation example:
    #
    #   rubylibtool --remove-from-stored-file
    #
    # ===================================================================== #
    when /^-?-?remove(_|-)?from(_|-)?stored(_|-)?file$/i,
         /^-?-?remove(_|-)?from(_|-)?file$/i
      remove_the_last_faulty_libtool_entry_stored_in_a_file
    # ===================================================================== #
    # === Remove a single, faulty libtool entry from every .la file
    #
    # This method will modify offending .la files. The input argument
    # will be removed from these files.
    #
    # Trigger the following via:
    #
    #   rubylibtool --remove-this-entry=/usr/lib/libpng16.la
    #   rubylibtool --remove-this-entry=/Programs/Sqliteautoconf/3110000/lib/libsqlite3.la
    #
    # ===================================================================== #
    when /-?-?remove-?this-?entry=(.+)/,
         /-?-?remove=(.+)/,
         /-?-?purge=(.+)/,
         /-?-?purge (.+)/,
         /-?-?purge-?this-?entry=(.+)/,
         /-?-?purge-?this=(.+)/,
         /-?-?purge-?entry=(.+)/,
         /-?-?fix-?this-?entry=(.+)/
      remove_this_entry($1.to_s.dup)
      exit
    # ===================================================================== #
    # === Show the help section
    # ===================================================================== #
    when /-?-?help/i
      show_help
      exit
    # ===================================================================== #
    # === rubylibtool --search-in-which-directories?
    # ===================================================================== #
    when /(_|-)?(_|-)?search(_|-)?in(_|-)?which(_|-)?directories\??/
      notify_the_user_which_directories_will_be_searched
    # ===================================================================== #
    # === Designate another directory to use
    #
    # Specific usage example:
    #
    #   rubylibtool --from-this-directory=PWD --purge=/usr/lib/libstdc++.la
    #
    # ===================================================================== #
    when /--from-this-directory=(.+)/
      use_this_directory($1.to_s.dup)
    # ===================================================================== #
    # === rubylibtool --autocorrect
    #
    # The idea about autocorrecting the .la files is to convert
    # /Programs/ entries into /usr/ entries.
    # ===================================================================== #
    when /-?-?autofix/, /-?-?autocorrect/
      autofix_every_la_file
    # ===================================================================== #
    # === Show every .la file on this machine
    #
    # Invocation example:
    #   roebelibtool --show-every-la-file
    # ===================================================================== #
    when /-?-?show(_|-)?every(_|-)?la(_|-)?file/,
         /-?-?all$/,'ALL'
      show_every_la_file
    # ===================================================================== #
    # === roebe_libtool --stats
    # ===================================================================== #
    when /^-?-?stats$/i,
         /^-?-?statistics$/i,
         /^-?-?report$/i
      show_statistics
      exit
    else # else nothing was found.
      if i.end_with?('.la')
        remove_this_entry(i)
      end
      # opnn; e 'Unsure which action to perform. Pass in "--help" for the '\
      #         'available options.'
    end
  end
end

#n_la_files?Boolean

#

n_la_files?

#

Returns:

  • (Boolean)


464
465
466
# File 'lib/rbt/libtool/libtool.rb', line 464

def n_la_files?
  @array_all_libtool_files.size
end

#notify_the_user_which_directories_will_be_searchedObject

#

notify_the_user_which_directories_will_be_searched

#


241
242
243
244
# File 'lib/rbt/libtool/libtool.rb', line 241

def notify_the_user_which_directories_will_be_searched
  opne 'The following directories will be searched:'
  e "  #{sfancy(@search_in_these_directories.join(', '))}"
end

#obtain_all_the_la_files(i = @search_in_these_directories) ⇒ Object Also known as: obtain_all_libtool_files, every_la_file

#

obtain_all_the_la_files

#


257
258
259
260
261
262
263
264
265
266
# File 'lib/rbt/libtool/libtool.rb', line 257

def obtain_all_the_la_files(
    i = @search_in_these_directories
  )
  i.each {|this_dir|
    these_la_files = Dir["#{this_dir}**/**.la"]
    @array_all_libtool_files << these_la_files
    @array_all_libtool_files.flatten!
  }
  return @array_all_libtool_files
end

#remove_the_last_faulty_libtool_entry_stored_in_a_fileObject

#

remove_the_last_faulty_libtool_entry_stored_in_a_file

Invocation example:

rubylibtool --remove-from-file
#


359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
# File 'lib/rbt/libtool/libtool.rb', line 359

def remove_the_last_faulty_libtool_entry_stored_in_a_file
  _ = "#{rbt_log_directory?}libtool/last_faulty_libtool_file.md"
  # ======================================================================= #
  # (1) Read the entry from the .md file, if it exists
  # ======================================================================= #
  if File.exist? _
    this_is_a_faulty_libtool_entry = File.read(_).strip
    # ===================================================================== #
    # (2) pass this into remove_this_entry()
    # ===================================================================== #
    remove_this_entry(this_is_a_faulty_libtool_entry)
  else
    opnn; no_file_exists_at(_)
  end
end

#remove_this_entry(i) ⇒ Object

#

remove_this_entry

Use this method to remove a specific entry within all .la files.

#


281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
# File 'lib/rbt/libtool/libtool.rb', line 281

def remove_this_entry(i)
  clear_array_log_these_files # Reset the Array first.
  if i.end_with?(':') and !File.exist?(i)
    i.chop!
  end
  opne 'The following entry will be removed from every '\
       'encountered .la file on this computer:'
  e
  e "  #{seagreen(i)}"
  e
  if ::RBT::Libtool.use_this_directory?
    la_files = Dir["#{RBT::Libtool.use_this_directory?}**/**.la"]
  else
    la_files = obtain_all_libtool_files
  end
  notify_the_user_which_directories_will_be_searched
  # ======================================================================= #
  # Next, reject those who do not contain the given search term "i".
  # We will also log these files.
  # ======================================================================= #
  la_files.select! {|file|
    # ===================================================================== #
    # Must first check whether it is a symlink that exists.
    # ===================================================================== #
    if File.symlink?(file) and !File.exist?(File.readlink(file))
      symlink_target = File.readlink(file)
      opne 'No file exists at '+sfile(file)+rev+
           ' (a symlink pointing '\
           'at '+sfile(symlink_target)+')'
    end
    if File.exist? file
      dataset = File.read(file)
      dataset.include?(i)
    else
      opne "No file could be found at `#{sfile(file)}#{rev}`."
    end
  }
  if la_files.empty?
    opne "We did not find any .la file that includes "\
         "the entry `#{simp(i)}#{rev}`."
  else
    la_files.each {|file|
      opne "#{rev}Working on `#{sfile(file)}#{rev}` next."
      dataset = File.readlines(file)
      _ = ''.dup
      dataset.each {|line|
        if line.include?('dependency_libs') and line.include?(i)
          line.gsub!(/#{Regexp.quote(i)}/,'')
          @array_log_these_files << i
        end
        _ << line
      }
      # =================================================================== #
      # Write the new content into that .la file.
      # =================================================================== #
      write_what_into(_, file)
    }
    unless @array_log_these_files.empty?
      what = N+@array_log_these_files.join(N)+('-' * 40)+N
      # ===================================================================== #
      # Store the modified files in a file:
      # ===================================================================== #
      into = "#{rbt_log_directory?}libtool_modified_these_files.md"
      opne "#{rev}Keeping a backup of which libtool files were"
      opne "modified, at `#{sfile(into)}#{rev}`."
      append_what_into(what, into)
    end
  end
end

#report_how_many_la_files_were_foundObject

#

report_how_many_la_files_were_found

#


378
379
380
381
382
383
# File 'lib/rbt/libtool/libtool.rb', line 378

def report_how_many_la_files_were_found
  opne "There are a total of #{sfancy(n_la_files?.to_s)}"\
       " .la files on this system."
  opne 'The directories '+sdir(target_directories?.join(', '))+
       ' were searched.'
end

#resetObject

#

reset (reset tag)

#


16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/rbt/libtool/reset.rb', line 16

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === @array_all_libtool_files
  # ======================================================================= #
  @array_all_libtool_files = []
  clear_array_log_these_files
  _ = FILE_SEARCH_IN_THESE_DIRECTORIES
  if File.exist? _
    set_search_in_these_directories(YAML.load_file(_))
  else
    opne "No file called #{sfile(_)} exists. Thus, "\
         "we can not load the dataset."
  end
end

#runObject

#

run (run tag)

#


12
13
# File 'lib/rbt/libtool/run.rb', line 12

def run
end

#sanitize_commandline_argumentsObject

#

sanitize_commandline_arguments

#


194
195
196
197
198
199
200
201
# File 'lib/rbt/libtool/libtool.rb', line 194

def sanitize_commandline_arguments
  @commandline_arguments.map! {|entry|
    if entry and entry.end_with?(':')
      entry.chop! # Trailing ':' seem pointless.
    end
    entry
  }
end

#search_in_these_directories?Boolean Also known as: target_directories?, search_in_which_directories?

#

search_in_these_directories?

#

Returns:

  • (Boolean)


249
250
251
# File 'lib/rbt/libtool/libtool.rb', line 249

def search_in_these_directories?
  @search_in_these_directories
end

#set_commandline_arguments(i) ⇒ Object

#

set_commandline_arguments

#


185
186
187
188
189
# File 'lib/rbt/libtool/libtool.rb', line 185

def set_commandline_arguments(i)
  @commandline_arguments = [i].flatten.compact
  sanitize_commandline_arguments
  menu(@commandline_arguments)
end

#set_search_in_these_directories(i = FILE_SEARCH_IN_THESE_DIRECTORIES) ⇒ Object

#

set_search_in_these_directories

Note that the variable that is set here, called @search_in_these_directories, will keep track of the directories that we will search for, by default.

A directory must end with a trailing ‘/’ character, which is ensured here by this method too, if an Array is used as input.

On my home system, the .yml file that is searched is at:

bl $RSRC/libtool/lib/libtool/yaml/search_in_these_directories/search_in_these_directories.yml
#


23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/rbt/libtool/search_in_these_directories.rb', line 23

def set_search_in_these_directories(
    i = FILE_SEARCH_IN_THESE_DIRECTORIES
  )
  if i.end_with?('.yml')
    i = YAML.load_file(i)
  end if i.is_a? String
  # ======================================================================= #
  # Modify the Array by ensuring a trailing '/' is used.
  # ======================================================================= #
  if i.is_a? Array
    i.map! {|line|
      # =================================================================== #
      # Check for ALL_CAPS constants next - these will be handled as
      # shortcut for ENV[].
      # =================================================================== #
      if (line == line.upcase) and ENV.has_key?(line.upcase)
        line = ENV[line.upcase].dup
      end 
      line << '/' unless line.end_with? '/'
      line
    }
  end
  @search_in_these_directories = i
end

#show_every_la_fileObject

#

show_every_la_file

Invocation example:

roebelibtool --show-every-la-file
#


398
399
400
401
402
403
404
405
406
# File 'lib/rbt/libtool/libtool.rb', line 398

def show_every_la_file
  ensure_that_we_have_found_la_files
  opne 'Every .la file on this computer will be shown next'
  e
  @array_all_libtool_files.each_with_index {|this_libtool_file, index| index += 1
    index = (index.to_s+')').ljust(6)
    e "  #{sfancy(index)}#{sfile(this_libtool_file)}"
  }; e
end

#show_helpObject

#

show_help (help tag)

Give some information to the user how RBT::Libtool can be used.

Invoke this like so:

roebelibtool --help
#


21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/rbt/libtool/help.rb', line 21

def show_help
  e
  opnn; ecomment '  --remove-this-entry=/usr/lib/libpng16.la # remove this entry from all .la files'
  opnn; ecomment '  --stats                                  # show some statistics from your system'
  opnn; ecomment '  --show-every-la-file                     # show every .la file on your system'
  opnn; ecomment '  --all                                    # an alias to the above ^^^'
  opnn; ecomment '  --search-in-which-directories?           # report in which '\
                 'directories we will look for .la files'
  opnn; ecomment '  --stats                                  # show some statistics about your .la files'
  opnn; ecomment '  --report                                 # report how many .la files we have found'
  opnn; ecomment '  --autofix                                # autofix every faulty .la file'
  opnn; ecomment '  --purge                                  # purge a specific entry from a '\
                 '.la file; also note that we will log this action'
  opnn; ecomment '  --remove-this-entry                      # Remove a specific entry '\
                 'from all .la files'
  opnn; ecomment '  --from-this-directory=                   # use '\
                 'another directory to search in'
  opnn; ecomment '  --remove-from-stored-file                # remove '\
                 'the .la file last registered'
  ecomment       '                                                         '\
                 '# as faulty, from a local file'
  e
  opnn; ecomment '  rubylibtool --remove-this-entry=/usr/lib/libpng16.la # Remove this entry.'
  e
  e
  opne 'Note that you can also add new entries to the '\
       'array of files that'
  opne 'will be searched from the commandline, by doing this:'
  e
  opnn; ecomment '  --search-in-this-directory=   # add this directory to '\
                 'the list of directories that will be searched'
  opnn; ecomment '  --add=                        # ^^^ same as above, but shorter'
  e
end

#show_statisticsObject

#

show_statistics

#


471
472
473
474
# File 'lib/rbt/libtool/libtool.rb', line 471

def show_statistics
  ensure_that_we_have_found_la_files
  report_how_many_la_files_were_found
end