Class: RBT::SymlinkFromToCurrent

Inherits:
CompileBase show all
Defined in:
lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb

Overview

RBT::SymlinkFromToCurrent

Constant Summary collapse

DO_REGISTER_INTO_THE_LOCAL_YAML_DATABASE =
#

DO_REGISTER_INTO_THE_LOCAL_YAML_DATABASE

#
true
ARRAY_ALLOWED_SUBDIRECTORIES =
#

RBT::SymlinkFromToCurrent::ARRAY_ALLOWED_SUBDIRECTORIES

Which subdirectories are allowed for this class. bin/, sbin/ and lib/ are the three main directories.

The trailing ‘/’ can be omitted.

#
%w(
  bin
  sbin
  lib
  lib64
  include
  etc
  pkgconfig
  man
  Shared
  shared
  share
  yaml
  Settings
)

Constants included from CompileBaseModule

CompileBaseModule::FILE_AUTOGEN

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 included from CompileBaseModule

#always_show_dependencies?, #capitalize_program_names?, #cflags?, #check_whether_we_will_install_only_programs_from_the_bin_subdirectory, #cleanup_system_tag_directory, #config?, #consider_removing_libtool_la_files, #consider_symlinking_cmake_modules, #consider_symlinking_header_files_into_the_usr_include_hierarchy, #consider_symlinking_lib64_into_lib, #cookbook_dataset_autosymlink_lib64?, #cookbook_dataset_program_version?, #create_a_new_current_symlink_here, #create_architecture_file, #do_invoke_symlink_program, #do_play_song, #editor_to_use?, #email?, #exit_on_unregistered_cookbook_entries?, #has_an_error_occurred?, #host_cpu?, #install_only_binaries?, #installer_constant?, make_command?, #no_error_has_occurred?, #play_song?, #recipes_dir?, #register_program, #remove_compiling_is_in_progress, #report_to_developers, #reset_the_module, #return_build_type, #return_chained_programs, #return_files_from_the_profiles_directory, #return_these_programs, #run_ldconfig?, #shall_we_symlink_the_header_files_into_the_usr_include_hierarchy?, #store_full_configure_command_into_resources_directory, #symlink_into_tags, #symlink_into_usr_lib_dir?, #symlink_m4_macros, #symlink_program, #symlink_program?, #update_kde_apps, #use_ccache?, #use_gobolinux_symlinkprogram?, #use_mrxvt?, #use_porg?, #use_stow?, #use_tags?, #uses_appdir_prefix?, #validate_the_cookbook_aliases

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_options, #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_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_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_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(commandline_arguments = nil, run_already = true) ⇒ SymlinkFromToCurrent

#

initialize

#


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

def initialize(
    commandline_arguments = nil,
    run_already           = true
  )
  reset
  set_commandline_arguments(
    commandline_arguments
  )
  case run_already
  # ======================================================================= #
  # === :do_not_run_yet
  # ======================================================================= #
  when :do_not_run_yet,
       :dont_run_yet
    run_already = false
  end
  # ======================================================================= #
  # === Handle blocks given next
  # ======================================================================= #
  if block_given?
    yielded = yield
    # ===================================================================== #
    # === Handle Hashes next
    # ===================================================================== #
    if yielded.is_a? Hash
      # =================================================================== #
      # === :use_opn
      # =================================================================== #
      if yielded.has_key? :use_opn
        disable_opn if (yielded[:use_opn] == false)
      end
    else
      case yielded
      # =================================================================== #
      # === :do_not_run_yet
      # =================================================================== #
      when :do_not_run_yet
        run_already = false
      # =================================================================== #
      # === :do_not_register
      # =================================================================== #
      when :do_not_register
        do_not_register_into_the_local_yaml_database
      end
    end
  end
  run if run_already
end

Class Method Details

.[](i = ARGV) ⇒ Object

#

RBT::SymlinkFromToCurrent[]

#


959
960
961
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 959

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

Instance Method Details

#assumed_target_of(i) ⇒ Object

#

assumed_target_of

#


385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 385

def assumed_target_of(i)
  target = i.dup
  case i
  when /bin$/
    target = usr_bin?
  when /share$/,
       /shared$/,
       /Shared$/
    target = share_dir?
  when /lib$/,
       /lib64$/ # lib64 could be controversial - hmmm.
    target = lib_dir?
  when /etc$/
    target = etc_dir?
  when /libexec$/
    target = '/usr/libexec/'
  end
  return target
end

#capitalized(i) ⇒ Object

#

capitalized

#


376
377
378
379
380
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 376

def capitalized(i)
  i = i.dup
  i.capitalize! if do_capitalize?
  return i
end

#consider_removing_empty_directoriesObject

#

consider_removing_empty_directories

#


189
190
191
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 189

def consider_removing_empty_directories
  do_remove_empty_directories if @remove_empty_directories
end

#consider_symlinking_headersObject

#

consider_symlinking_headers

This must be conditionally - some programs will specify that we symlink headers whereas others will not.

#


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

def consider_symlinking_headers
  _ = program_name?
  require 'rbt/requires/require_the_cookbook_class.rb'
  # ======================================================================= #
  # Next, load up the yaml file.
  # ======================================================================= #
  if @shall_we_symlink_the_headers
    shall_we_symlink_the_headers = @shall_we_symlink_the_headers
  else
    @dataset = action(:SanitizeCookbook, _) { :fast }
    unless @shall_we_symlink_the_headers == false
      # =================================================================== #
      # The following check is a bit odd - I did not add a comment as
      # to why I added the next line, but the check above was now
      # added at 02.01.2020, to skip a nonsensical situation.
      # =================================================================== #
      shall_we_symlink_the_headers = @dataset.shall_we_symlink_the_headers?
    end
  end
  if shall_we_symlink_the_headers
    # ===================================================================== #
    # Ok, in this case we delegate to class SymlinkHeaders.
    # ===================================================================== #
    require 'rbt/utility_scripts/symlink_headers.rb'
    RBT::SymlinkHeaders.new(_)
  end
end

#consider_symlinking_pkgconfig_files(appdir_target = full_path_to_the_target_program? ) ⇒ Object

#

consider_symlinking_pkgconfig_files

This method can be used to symlink .pc files into the /usr/lib/pkgconfig hierarchy.

Since as of February 2023 this method is no longer in use, due to a bug that took too long to understand. We may have to rewrite this class eventually.

#


592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 592

def consider_symlinking_pkgconfig_files(
    appdir_target = full_path_to_the_target_program?
  )
  # ======================================================================= #
  # The appdir_target variable may be incorrect, such as when we symlink
  # another version.
  # ======================================================================= #
  if appdir_target.respond_to? :split
    splitted = appdir_target.split('/')
    unless splitted.last == full_path_to_the_target_program?.split('/').last
      appdir_target = full_path_to_the_target_program?
    end
  else
    opne 'A minor problem - '+steelblue('appdir_target')+' does '\
         'not respond to the method .split.'
    opne 'We will still continue, though.'
  end
  if @symlink_pkgconfig_files and
     appdir_target.include?(programs_dir?)
    require 'rbt/utility_scripts/symlink_pkgconfig_files.rb'
    opne "Next, we will symlink all .pc files found "\
         "under `#{sdir(appdir_target)}`."
    SymlinkPkgconfigFiles.new(appdir_target)
  end
end

#current_target?Boolean Also known as: target?

#

current_target?

This will yield a String as a result, such as ‘/Programs/Htop/Current/’.

These constitute our the symlink-targets.

We must retain a trailing ‘/’ here.

#

Returns:

  • (Boolean)


436
437
438
439
440
441
442
443
444
445
446
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 436

def current_target?
  _  = programs_directory?.to_s.dup
  if name_of_the_program?
    _ << capitalized(name_of_the_program?)
  else
    # opnwarn('No name of the program is known.')
  end
  _ << '/Current/' unless _.include? 'Current'
  _ = rds(_)
  return _
end
#
#


494
495
496
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 494

def do_force_symlink
  @force_symlink = true
end

#do_keep_empty_directoriesObject Also known as: keep_empty_directories

#

do_keep_empty_directories

#


251
252
253
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 251

def do_keep_empty_directories
  @remove_empty_directories = false
end

#do_not_register_into_the_local_yaml_databaseObject Also known as: do_not_register

#

do_not_register_into_the_local_yaml_database

#


578
579
580
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 578

def do_not_register_into_the_local_yaml_database
  @do_register_into_the_local_yaml_database = false
end
#
#


476
477
478
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 476

def do_not_symlink
  @will_we_symlink = false
end

#do_not_symlink=(i) ⇒ Object

#
#


465
466
467
468
469
470
471
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 465

def do_not_symlink=(i)
  if i == true
    do_not_symlink
  else
    @will_we_symlink = true
  end
end

#do_register_into_yaml_database(i = full_path?, , register_program_files_into_the_yaml_database = RBT.register_program_files_into_yaml_database?) ⇒ Object

#

do_register_into_yaml_database

#


331
332
333
334
335
336
337
338
339
340
341
342
343
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 331

def do_register_into_yaml_database(
    i                                             = full_path?,
    register_program_files_into_the_yaml_database = RBT.register_program_files_into_yaml_database?
  )
  if i
    unless i.include? '/'
      i = static_appdir_prefix_of?(i, program_version?)
    end
    if register_program_files_into_the_yaml_database 
      action(:RegisterProgramFilesIntoYamlDatabase, i)
    end
  end
end

#do_remove_empty_directoriesObject

#

do_remove_empty_directories

This method will remove directories that are empty. For this, we will make of the method remove() which resides in shared.rb.

#


268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 268

def do_remove_empty_directories
  if run_simulation?
    opne 'As we are running in simulation mode, we will not remove '
    opne 'any of the following directories:'
    e
    pp remove_these_directories?
    e
  else # Removing the directories next.
    unless remove_these_directories?.empty?
      opne "Removing these #{slateblue('(empty)')} directories next:"
      remove_these_directories?.each {|entry|
        e "  #{sdir(entry)}"
      }
      remove(remove_these_directories?)
    end
  end
end
#

Since as of January 2020 the method will also support the –force option, which will first delete the target at /usr/bin, before doing the symlink operation. Only use it if you are certain you wish to do so.

#


633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 633

def do_symlink
  will_we_symlink = will_we_symlink?
  _ = use_this_program?
  return unless _ and !_.empty?
  if _ and File.directory?(_)
    inform_the_user_what_will_be_done
    # ===================================================================== #
    # Obtain all subdirectories next (the toplevel-directories).
    # ===================================================================== #
    directories = Dir["#{_}**"].select {|entry| File.directory?(entry) }
    unless directories.empty?
      opnn if use_opn?
      e "#{rev}Symlinking from the directory #{sdir(_)} #{rev}next."
    end
    directories.each {|name_of_the_subdirectory|
      # =================================================================== #
      # === Eliminate empty subdirectories next
      #
      # If the directory in question is empty, it will be eliminated.
      #
      # This is not ideal, though, as it may also remove new directories
      # created during the postinstallation step. Hence, since as of
      # December 2022, only certain empty directores will be removed.
      # =================================================================== #
      if Dir.empty?(name_of_the_subdirectory)
        basename = File.basename(name_of_the_subdirectory)
        if ARRAY_ALLOWED_SUBDIRECTORIES.include?(basename)
          register_for_removal(name_of_the_subdirectory)
        end
      else
        # ================================================================= #
        # === Process allowed subdirectories next
        #
        # Check whether we have an allowed subdirectory or not first.
        # This class will only handle allowed subdirectories past the
        # following point.
        #
        # The Array that is processed next may look as follows:
        #
        #   ["/home/Programs/Pixman/0.42.2/Resources",
        #    "/home/Programs/Pixman/0.42.2/include",
        #    "/home/Programs/Pixman/0.42.2/lib",
        #    "/home/Programs/Pixman/0.42.2/yaml"]
        #
        # ================================================================= #
        if @array_allowed_subdirectories.any? {|entry|
            name_of_the_subdirectory.end_with?(entry)
          }
          short_name_of_the_subdirectory = File.basename(name_of_the_subdirectory)
          @will_we_symlink = true # Reset our flag here.
          if run_simulation?
            opne 'We run in simulation mode, thus we will not '
            opne "symlink #{sfile(entry)} into #{sfile(assumed_target_of(entry))}."
          else
            case short_name_of_the_subdirectory # (case tag)
            # =============================================================== #
            # === bin
            #
            # This also includes sbin/ directories.
            #
            # This functionality was removed in September 2022. It is
            # now handled by a toplevel action, via RBT.action().
            #
            # In May 2023 this was partially restored, but now handled
            # via RBT.action().
            # =============================================================== #
            when /bin$/
              RBT.action(:symlink_into_the_usr_bin_hierarchy, name_of_the_subdirectory)
            # when /bin$/
            #   target = assumed_target_of(name_of_the_subdirectory)
            #   # ============================================================= #
            #   # The full_target variable may be "/usr/bin/zip", for example.
            #   # ============================================================= #
            #   full_target = target+
            #                 File.basename(name_of_the_subdirectory)
            #   delete_file_or_do_not_delete_file = false
            #   if full_target.include?('/usr/bin/') and
            #      force_the_symlink_operation?
            #     # ============================================================= #
            #     # For now we will only do this on /usr/bin/ (13.01.2020) -
            #     # at a later time this may be extended.
            #     # ============================================================= #
            #     delete_file_or_do_not_delete_file = true
            #   end
            #   if be_verbose?
            #     opnn if use_opn?; e 'Processing '+sfancy(name_of_the_subdirectory)+
            #                         ' for symlinking into `'+sdir(target)+'` next:'
            #   end
            #   symlink_from_to(
            #     name_of_the_subdirectory,
            #     target,
            #     delete_file_or_do_not_delete_file
            #   ) if @will_we_symlink
            # =============================================================== #
            # === lib
            #
            # Symlink into the lib/ subdirectory here; typically into
            # /usr/lib/.
            #
            # This entry is special in that we also have to consider
            # the /usr/lib/pkgconfig/ subdirectory - otherwise the
            # relevant .pc files may not be symlinked.
            # =============================================================== #
            when /lib$/,
                 /lib64$/ # lib64 could be controversial - hmmm.
              target = assumed_target_of(name_of_the_subdirectory)
              if be_verbose?
                opnn if use_opn?
                notify_the_user_processing_this_directory_for_symlinking_into_that_target(
                  name_of_the_subdirectory,
                  target
                )
              end
              if will_we_symlink
                symlink_from_to(name_of_the_subdirectory, target)
                pkgconfig_subdirectory = name_of_the_subdirectory+'/pkgconfig/'
                if File.directory?(pkgconfig_subdirectory) and
                  (all_pc_files = Dir[pkgconfig_subdirectory+'*.pc'])
                  unless all_pc_files.empty?
                    # ===================================================== #
                    # Ok, we found at the least one .pc file. Thus we can
                    # try to symlink these .pc files.
                    # ===================================================== #
                    target = '/usr/lib/pkgconfig/'
                    all_pc_files.each {|this_pc_file|
                      real_target = target+
                                    File.basename(this_pc_file)
                      symlink_this_file(
                        this_pc_file,
                        real_target
                      )
                    }
                  end
                end
              end
            # =============================================================== #
            # === include
            #
            # This is equivalent towards a target such as '/usr/include/'.
            # =============================================================== #
            when /include$/
              target = include_dir?
              if @will_we_symlink
                opnn if use_opn?; e 'Symlinking into the main '+
                                    sdir('include/')+' directory at '+sdir(target)+'.'
                symlink_from_to(name_of_the_subdirectory, target) { :include_directories }
              end
            # =============================================================== #
            # === share
            # =============================================================== #
            when /share$/,
                 /shared$/,
                 /Shared$/
              target = assumed_target_of(name_of_the_subdirectory)
              if be_verbose?
                opnn if use_opn?
                notify_the_user_processing_this_directory_for_symlinking_into_that_target(
                  name_of_the_subdirectory,
                  target
                )
              end
              symlink_from_to(name_of_the_subdirectory, target) if @will_we_symlink
            # =============================================================== #
            # === etc
            # =============================================================== #
            when /etc$/
              target = assumed_target_of(name_of_the_subdirectory)
              if be_verbose?
                opnn if use_opn?
                notify_the_user_processing_this_directory_for_symlinking_into_that_target(
                  name_of_the_subdirectory,
                  target
                )
              end
              symlink_from_to(name_of_the_subdirectory, target) if @will_we_symlink
            # =============================================================== #
            # === libexec
            # =============================================================== #
            when /libexec$/
              target = assumed_target_of(name_of_the_subdirectory)
              if be_verbose?
                opnn if use_opn?
                notify_the_user_processing_this_directory_for_symlinking_into_that_target(
                  name_of_the_subdirectory,
                  target
                )
              end
              symlink_from_to(name_of_the_subdirectory, target) if @will_we_symlink
            # =============================================================== #
            # === yaml
            # =============================================================== #
            when 'yaml' # Ignore this entry.
              @will_we_symlink = false
            # =============================================================== #
            # === man
            #
            # For now, we don't have a place for man pages.
            # =============================================================== #
            when 'man'
              @will_we_symlink = false
            else
              @will_we_symlink = false
              # unless (name_of_the_subdirectory == 'yaml') or 
              #        (name_of_the_subdirectory == 'include')
              #   opne "=> #{sdir(name_of_the_subdirectory)}"\
              #        "#{swarn(' does not exist, we thus ignore it.')}"
              # end
            end
          end
        # else
        #   opnn if use_opn?; e "Unhandled subdirectory: #{sdir(name_of_the_subdirectory)}"
        end
      end
    }
  end
  consider_removing_empty_directories # ← Should come before symlinking headers files
  # ======================================================================= #
  # Register into the yaml database, before symlinking pkgconfig files.
  # ======================================================================= #
  do_register_into_yaml_database if @do_register_into_the_local_yaml_database # ← Should go before symlinking the headers.
  consider_symlinking_headers         # ← Should come before symlinking pkgconfig files
  # consider_symlinking_pkgconfig_files # ← Should come before saving the name of the program into a local file.
  keep_track_which_program_was_last_symlinked
end
#
#


451
452
453
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 451

def do_symlink_the_headers
  @shall_we_symlink_the_headers = true
end

#first_argument_or_current_working_directoryObject

#

first_argument_or_current_working_directory

#


565
566
567
568
569
570
571
572
573
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 565

def first_argument_or_current_working_directory
  _ = first?
  if (_ and _.start_with?('--')) or
     (_ and _.empty?) or
     _.nil?
    _ = return_pwd
  end
  return _
end
#
#

Returns:

  • (Boolean)


323
324
325
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 323

def force_the_symlink_operation?
  @force_symlink
end

#inform_the_user_what_will_be_done(program_name = program_name? ) ⇒ Object

#

inform_the_user_what_will_be_done (inform tag)

#


919
920
921
922
923
924
925
926
927
928
929
930
931
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 919

def inform_the_user_what_will_be_done(
    program_name = program_name?
  )
  _ = "Working on the program #{sfancy(program_name)}#{rev}. ".dup
  if @array_allowed_subdirectories.size == 1
    _ << "#{rev}The subdirectory found at\n"
  else
    _ << "#{rev}The subdirectories found at\n" 
  end
  opnn if use_opn?; e _
  _ = "#{rev}`#{sfancy(use_this_program?)}#{rev}` will be symlinked."
  opnn if use_opn?; e _
end

#is_it_a_number?(i) ⇒ Boolean

#

is_it_a_number?

#

Returns:

  • (Boolean)


348
349
350
351
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 348

def is_it_a_number?(i)
  i = i.to_s.dup.delete('.') # Ignore '.' tokens.
  return i =~ /^\d+$/
end

#keep_empty_directories?Boolean

#

keep_empty_directories?

#

Returns:

  • (Boolean)


258
259
260
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 258

def keep_empty_directories?
  !@remove_empty_directories
end

#keep_track_which_program_was_last_symlinkedObject Also known as: try_to_save_the_name_of_the_program_into_a_local_file

#

keep_track_which_program_was_last_symlinked

This method will save the name of the program that this class has been working on, into a local file.

The reasoning behind this behaviour is so that we can use this in other classes, such as when we use :last on the commandline. The class that will act on :last will then pick up the content of the file that we have been using to store this information into. This then allows us to always refer to the “last program that was symlink_program-ed”, which is quite convenient as we don’t have to remember the name.

#


367
368
369
370
371
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 367

def keep_track_which_program_was_last_symlinked
  what = program_name?
  into = file_last_symlinked_program?
  write_what_into(what, into)
end
#

menu (menu tag)

All commandline options for this class can be passed through the menu() method here.

#


504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 504

def menu(
    i = hyphen_commandline_arguments?
  )
  if i.is_a? Array
    i.each {|entry| menu(entry)}
  else
    case i
    # ===================================================================== #
    # === rnsymc --force
    # ===================================================================== #
    when /^-?-?force$/i,
         /^-?-?f$/i
      do_force_symlink
    # ===================================================================== #
    # === symlink_program --help
    #
    # This entry point is used to display the help interface of this
    # class.
    # ===================================================================== #
    when /^-?-?help$/i,
         /^-?-?show(-|_)?help$i/
      show_help
    # ===================================================================== #
    # === rnsymc --bin/
    # === rnsymc --bin
    # ===================================================================== #
    when /^-?-?bin\/?$/i
      symlink_only_the_bin_subdirectory
    # ===================================================================== #
    # === symlink_program --symlink-headers
    #
    # This will delegate towards class SymlinkHeaders for symlinking
    # the .h header files.
    # ===================================================================== #
    when /^-?-?symlink(-|_)?headers$/
      do_symlink_the_headers
    end
  end
end

#notify_the_user_processing_this_directory_for_symlinking_into_that_target(name_of_the_subdirectory, target) ⇒ Object

#

notify_the_user_processing_this_directory_for_symlinking_into_that_target

#


936
937
938
939
940
941
942
943
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 936

def notify_the_user_processing_this_directory_for_symlinking_into_that_target(
    name_of_the_subdirectory,
    target
  )
  e "#{rev}Processing #{sfancy(name_of_the_subdirectory)}"\
     "#{rev} for symlinking into `#{sdir(target)}"\
     "#{rev}` next:"
end

#only_allow_bin_as_subdirectoryObject Also known as: symlink_only_the_bin_subdirectory

#

only_allow_bin_as_subdirectory

This method will enable that we only symlink the bin/ subdirectory.

#


549
550
551
552
553
554
555
556
557
558
559
560
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 549

def only_allow_bin_as_subdirectory
  opne "#{rev}Only the subdirectory at "\
       "#{sdir('bin/')} #{rev}will be symlinked next."
  @array_allowed_subdirectories.clear
  @array_allowed_subdirectories << 'bin'
  # ======================================================================= #
  # Disable some variables too, in this event.
  # ======================================================================= #
  @shall_we_symlink_the_headers = false
  @do_register_into_the_local_yaml_database = false
  @symlink_pkgconfig_files = false
end

#program_version?Boolean

#

program_version?

This method should return the program-version of the program at hand.

#

Returns:

  • (Boolean)


291
292
293
294
295
296
297
298
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 291

def program_version?
  _ = program_name?.to_s.dup
  i.chop! if _.end_with? '/'
  if _.include? '/'
    i = i.split('/').last.to_s
  end
  return _
end

#register_for_removal(i) ⇒ Object

#

register_for_removal

This method will register a directory for removal. Store the absolute path here - this simplifies removing said directory..

The check whether the directory is empty or not is done in another part of this class.

#


236
237
238
239
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 236

def register_for_removal(i)
  i = rds(i)
  @array_remove_these_directories << i unless (i == '/')
end

#remove_these_directories?Boolean

#

remove_these_directories?

#

Returns:

  • (Boolean)


244
245
246
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 244

def remove_these_directories?
  @array_remove_these_directories
end

#resetObject

#

reset (reset tag)

#


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
174
175
176
177
178
179
180
181
182
183
184
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 124

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === :be_verbose
  # ======================================================================= #
  set_be_verbose
  # ======================================================================= #
  # === :use_opn
  # ======================================================================= #
  do_use_opn
  # ======================================================================= #
  # === @array_allowed_subdirectories
  # ======================================================================= #
  @array_allowed_subdirectories = ARRAY_ALLOWED_SUBDIRECTORIES
  # ======================================================================= #
  # === @will_we_symlink
  #
  # The next variable determines if we will actually symlink or whether
  # we will not.
  # ======================================================================= #
  @will_we_symlink = true
  # ======================================================================= #
  # === @symlink_pkgconfig_files
  #
  # Determine whether the .pc files will be symlinked as well or not.
  # ======================================================================= #
  @symlink_pkgconfig_files = true
  # ======================================================================= #
  # === @remove_empty_directories
  #
  # The next instance variable determines whether we will remove empty
  # directories or not. By default we will do so, but this behaviour
  # has to be modifiable as not every user may wish to have this,
  # hence why this instance variable exists.
  # ======================================================================= #
  @remove_empty_directories = true
  # ======================================================================= #
  # === @force_symlink
  #
  # If this variable is true then we will remove entries at /usr/bin
  # before doing the symlink-operation. Use this only if you want to
  # do so, via the commandline flag --force.
  #
  # By default this is false, aka "disabled".
  # ======================================================================= #
  @force_symlink = false
  # ======================================================================= #
  # === @array_remove_these_directories
  # ======================================================================= #
  @array_remove_these_directories = []
  # ======================================================================= #
  # === @shall_we_symlink_the_headers
  # ======================================================================= #
  @shall_we_symlink_the_headers = false
  # ======================================================================= #
  # === @do_register_into_the_local_yaml_database
  # ======================================================================= #
  @do_register_into_the_local_yaml_database =
    DO_REGISTER_INTO_THE_LOCAL_YAML_DATABASE
end

#runObject

#

run (run tag)

#


948
949
950
951
952
953
954
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 948

def run
  set_use_this_program(
    first_argument_or_current_working_directory
  )
  menu
  do_symlink if will_we_symlink?
end

#show_helpObject

#

show_help

To invoke this method from the commandline, try:

rnsymc --help
#


308
309
310
311
312
313
314
315
316
317
318
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 308

def show_help
  e
  e 'The following options are available:'
  e
  eparse '  --symlink-headers # the .h header files will be '\
         'symlinked as well'
  eparse '  --bin             # symlink ONLY the bin/ subdirectory'
  eparse '  --force           # delete the target at '+
         sdir('/usr/bin/')+' before doing the symlink-operation'
  e
end
#
#

Returns:

  • (Boolean)


621
622
623
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 621

def symlink_pkgconfig_files?
  @symlink_pkgconfig_files
end
#

This method will return the NAME of the program at hand, in a downcased manner.

#

Returns:

  • (Boolean)


411
412
413
414
415
416
417
418
419
420
421
422
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 411

def symlink_this_program?
  _ = @use_this_program.to_s.dup
  if _.include? _
    _.sub!(/#{Regexp.quote(programs_dir?)}/,'')
    # May look like this now: "Vala/0.50.3/"
    if _.include? '/'
      _ = _.split('/').first
    end
  end
  _.downcase!
  return _
end

#use_this_program?Boolean Also known as: prefix?, full_path?, path?, full_path_to_the_target_program?, target_directory?

#

use_this_program?

#

Returns:

  • (Boolean)


483
484
485
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 483

def use_this_program?
  @use_this_program
end

#will_we_symlink?Boolean Also known as: we_will_symlink?

#
#

Returns:

  • (Boolean)


458
459
460
# File 'lib/rbt/utility_scripts/symlink_from_to_current/symlink_from_to_current.rb', line 458

def will_we_symlink?
  @will_we_symlink
end