Class: RBT::SymlinkHeaders

Inherits:
Base show all
Defined in:
lib/rbt/utility_scripts/symlink_headers.rb

Overview

RBT::SymlinkHeaders

Constant Summary collapse

USR_INCLUDE_HIERARCHY =
#

USR_INCLUDE_HIERARCHY

#
'/usr/include/'
DELETE_TARGET_HEADER_FILE_IF_IT_EXISTS =
#

DELETE_TARGET_HEADER_FILE_IF_IT_EXISTS

The following constant will remove the .h file if it exists in the /usr/include/ hierarchy. Suffice to say that this may be dangerous, so you should really know what you are doing.

#
true

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, #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_information, #return_program_name_for_gobolinux_systems, #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, #run_simulation=, #run_simulation?, #sdir, #sdir_return_pwd, #set_be_silent, #set_be_verbose, #set_first_commandline_argument, #set_namespace, #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(program_name = ARGV, run_already = true) ⇒ SymlinkHeaders

#

initialize

#


50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/rbt/utility_scripts/symlink_headers.rb', line 50

def initialize(
    program_name = ARGV,
    run_already  = true
  )
  reset
  set_program_name(program_name)
  if block_given?
    yielded = yield
    case yielded
    # ===================================================================== #
    # === :do_not_notify_if_there_were_no_header_files
    # ===================================================================== #
    when :do_not_notify_if_there_were_no_header_files
      @notify_the_user_if_there_were_no_header_files = false
    # ===================================================================== #
    # === :notify_the_user_if_no_header_files_were_found
    # ===================================================================== #
    when :notify_the_user_if_no_header_files_were_found
      @notify_the_user_if_there_were_no_header_files = true
    end
  end
  run if run_already
end

Class Method Details

.[](i = '') ⇒ Object

#

RBT::SymlinkHeaders[]

#


281
282
283
# File 'lib/rbt/utility_scripts/symlink_headers.rb', line 281

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

Instance Method Details

#consider_notifying_the_user_that_no_header_files_were_foundObject

#

consider_notifying_the_user_that_no_header_files_were_found

#


169
170
171
172
173
174
# File 'lib/rbt/utility_scripts/symlink_headers.rb', line 169

def consider_notifying_the_user_that_no_header_files_were_found
  if @notify_the_user_if_there_were_no_header_files
    opne "No .h files were found in the target "\
         "directory `#{sdir(target_directory?)}`."
  end
end
#

Use this method to symlink into the /usr/include/ hierarchy.

#


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
# File 'lib/rbt/utility_scripts/symlink_headers.rb', line 204

def do_symlink_this_target(i)
  # ======================================================================= #
  # The variable new_target points to the /usr/include/ hierarchy.
  # ======================================================================= #
  new_target = USR_INCLUDE_HIERARCHY+File.basename(i)
  opne "#{rev}Now symlinking `#{sfile(i)}#{rev}` "\
       "into `#{sfile(new_target)}#{rev}`."
  # ======================================================================= #
  # Honour the instance variable @delete_target_header_file_if_it_exists next.
  # ======================================================================= #
  if @delete_target_header_file_if_it_exists
    if File.exist? new_target
      # =================================================================== #
      # Next, if it is a file or symlink, we will delete it. If it is a
      # directory, then we will symlink into that directory.
      # =================================================================== #
      if File.directory? new_target
        symlink_what_into_this_directory(i, new_target)
      else
        remove(new_target)
      end
    end
  end
  symlink(i, new_target, :be_quiet)
end

#obtain_all_header_filesObject

#

obtain_all_header_files

#


148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
# File 'lib/rbt/utility_scripts/symlink_headers.rb', line 148

def obtain_all_header_files
  target = programs_dir?+program_name?+'/Current/'
  include_target = "#{target}include/"
  set_target_directory(include_target)
  target_for_header_files = include_target+'**/**.h'
  _found_headers = Dir[target_for_header_files] # <- This variable is currently not in use.
  # ======================================================================= #
  # The next variable is probably the best, as in, the most useful
  # target. We only look for one base heirarchy, not for any files
  # within that directory. Is not very sophisticated, but the simplest
  # and best variant, in my opinion.
  # ======================================================================= #
  all_targets_in_the_base_include_directory = Dir[include_target+'*']
  symlink_these_targets_into_the_usr_include_hierarchy(
    all_targets_in_the_base_include_directory
  )
end

#program_name?Boolean

#

program_name?

#

Returns:

  • (Boolean)


134
135
136
# File 'lib/rbt/utility_scripts/symlink_headers.rb', line 134

def program_name?
  @program_name
end

#resetObject

#

reset (reset tag)

#


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
# File 'lib/rbt/utility_scripts/symlink_headers.rb', line 77

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === @delete_target_header_file_if_it_exists
  # ======================================================================= #
  @delete_target_header_file_if_it_exists = DELETE_TARGET_HEADER_FILE_IF_IT_EXISTS
  # ======================================================================= #
  # === :target_directory
  # ======================================================================= #
  @internal_hash[:target_directory] = nil
  # ======================================================================= #
  # === @notify_the_user_if_there_were_no_header_files
  #
  # We may either notify the user that we did not find anything, if there
  # were no header files, or we may not. By default, the variable that 
  # controls this behaviour is set to false, in order to lessen the
  # spam/verbosity of RBT.
  #
  # However had, RBT::Compile will specifically set this variable to
  # true, since it appears to be more helpful if this is done to
  # the end user.
  # ======================================================================= #
  @notify_the_user_if_there_were_no_header_files = false
end

#runObject

#

run (run tag)

#


274
275
276
# File 'lib/rbt/utility_scripts/symlink_headers.rb', line 274

def run
  obtain_all_header_files
end

#set_program_name(i = return_pwd) ⇒ Object

#

set_program_name

#


106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'lib/rbt/utility_scripts/symlink_headers.rb', line 106

def set_program_name(
    i = return_pwd
  )
  i = i.first if i.is_a? Array
  i = return_pwd if i.nil?
  i = i.to_s.dup
  # ======================================================================= #
  # Next, if we have at the least one '/' character, we will try to infer
  # what the user wants to do. Ideally the user provides us with a
  # specific instruction but this will not always be the case so. In
  # these cases, we will have to infer something.
  # ======================================================================= #
  if i.include? '/'
    if i.include?(programs_dir?) and
       (i =~ /\d+/) # Has at the least one number.
      i = i.split('/').reject {|line| line.empty? } # This is assumed to be a String such as '/Programs/Glib/Current/'.
      i = i[1]
    else
      i = File.basename(i)
    end
  end
  i.capitalize! # Conform to my custom, semi-GoboLinux hierarchy.
  @program_name = i
end

#set_target_directory(i = nil) ⇒ Object

#

set_target_directory

#


141
142
143
# File 'lib/rbt/utility_scripts/symlink_headers.rb', line 141

def set_target_directory(i = nil)
  @internal_hash[:target_directory] = i
end
#
#


186
187
188
189
190
191
192
193
194
195
196
197
# File 'lib/rbt/utility_scripts/symlink_headers.rb', line 186

def symlink_these_targets_into_the_usr_include_hierarchy(i)
  if i.is_a? Array
    if i.empty?
      consider_notifying_the_user_that_no_header_files_were_found
    end
    i.each {|entry|
      symlink_these_targets_into_the_usr_include_hierarchy(entry)
    }
  else
    do_symlink_this_target(i)
  end
end
#

This will symlink .h files into the target directory.

#


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
# File 'lib/rbt/utility_scripts/symlink_headers.rb', line 235

def symlink_what_into_this_directory(
    what, this_directory
  )
  if File.directory? this_directory
    this_directory << '/' unless this_directory.end_with? '/'
  end
  if File.directory? what and
     File.directory? this_directory
    all_header_files_in_the_main_directory = Dir[what+'/*.h']
    # ===================================================================== #
    # base_dir = (File.dirname(this_directory)+'/').squeeze('/')
    # if File.exist?(base_dir)     and
    #    File.directory?(base_dir) and
    #   !File.symlink?(base_dir)
    #   this_directory = base_dir
    # end
    # ===================================================================== #
    all_header_files_in_the_main_directory.each {|this_header_file|
      # =================================================================== #
      # Still honour the instance variable whether to delete the target
      # file.
      # =================================================================== #
      target_file = rds(
        this_directory+'/'+File.basename(this_header_file)
      )
      # Unfortunately, something doesn't quite work here, so I disabled
      # this on 30 Aug 2017 again.
      # if @delete_target_header_file_if_it_exists and
      #    File.exist?(target_file)
      #   delete_file(target_file)
      # end
      symlink(this_header_file, target_file)
    }
  end
end

#target_directory?Boolean

#

target_directory?

#

Returns:

  • (Boolean)


179
180
181
# File 'lib/rbt/utility_scripts/symlink_headers.rb', line 179

def target_directory?
  @internal_hash[:target_directory]
end