Class: RBT::Action::InferBuildSystem

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

Overview

RBT::Action::InferBuildSystem

Constant Summary

Constants inherited from LeanPrototype

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

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from LeanPrototype

#a_or_an?, #abbreviations?, #absolute_path, #action, #add_to_the_commandline_arguments, #all_binaries?, #all_files_from, #all_libraries?, #allowed_cookbook_entries?, #appdir_location_of?, #append_onto_the_internal_hash, #append_what_into, #archive_type_of?, #available_programs?, #be_quiet?, #be_verbose?, #begins_with_a_comment?, #capitalize_first_alphabetical_character, #cd_to_the_log_directory, #cd_to_the_temp_directory, #change_directory, #change_permission, #cheering_person?, #chmod, #chop_off_archive, #clear_commandline_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(i = ARGV, run_already = true, &block) ⇒ InferBuildSystem

#

initialize

#


27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/rbt/actions/individual_actions/infer_build_system/infer_build_system.rb', line 27

def initialize(
    i           = ARGV,
    run_already = true,
    &block
  )
  reset
  set_commandline_arguments(i)
  case run_already
  # ======================================================================= #
  # === :do_not_run_yet
  # ======================================================================= #
  when :do_not_run_yet
    run_already = false
  end
  run if run_already
end

Class Method Details

.[](i = ARGV) ⇒ Object

#

RBT::Action::InferBuildSystem[]

#


183
184
185
# File 'lib/rbt/actions/individual_actions/infer_build_system/infer_build_system.rb', line 183

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

Instance Method Details

#dataset_from_build_systems_priorities?Boolean

#

dataset_from_build_systems_priorities?

#

Returns:

  • (Boolean)


64
65
66
# File 'lib/rbt/actions/individual_actions/infer_build_system/infer_build_system.rb', line 64

def dataset_from_build_systems_priorities?
  @internal_hash[:dataset_from_build_systems_priorities]
end

#infer_the_build_system_from_this_directory(i = return_pwd) ⇒ Object

#

infer_the_build_system_from_this_directory

This method will attempt to determine the build system for the given directory (defaulting to the current work directory, if omitted as argument).

The argument to this method should thus be a directory that exists locally.

#


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
# File 'lib/rbt/actions/individual_actions/infer_build_system/infer_build_system.rb', line 110

def infer_the_build_system_from_this_directory(
    i = return_pwd
  )
  # ======================================================================= #
  # === Check for the case first where the user must use autoconf
  #
  # This should come before the next check for "configure".
  # ======================================================================= #
  if does_this_file_exist?("#{i}configure.ac")
    if meson_build_file_exists?(:default) and meson_has_higher_priority_that_configure?
      set_use_this_build_system 'meson'
    else
      set_use_this_build_system 'configure_requiring_autoconf_step'
    end
  # ======================================================================= #
  # === Check for GNU configure script
  #
  # This entry point will check for configure.
  # ======================================================================= #
  elsif does_this_file_exist?("#{i}configure")
    set_use_this_build_system 'configure'
  # ======================================================================= #
  # === Handle meson build next                                 (meson tag)
  #
  # However had, some programs may have both a configure-script
  # and meson files. In this case, we have to determine which
  # one is to be run, which is done within the following
  # "elsif" clause.
  # ======================================================================= #
  elsif meson_build_file_exists?(:default)
    set_use_this_build_system 'meson'
  # ======================================================================= #
  # === Check for a perl Makefile.PL file
  # ======================================================================= #
  elsif does_this_file_exist?("#{i}Makefile.PL")
    set_use_this_build_system 'perl'
  # ======================================================================= #
  # === Check for Makefile
  #
  # This entry point will be valid for e. g. "man-pages".
  # ======================================================================= #
  elsif does_this_file_exist?("#{i}Makefile")
    set_use_this_build_system 'make'
  # ======================================================================= #
  # === Check for oldschool setup.rb files:
  # ======================================================================= #
  elsif does_this_file_exist?("#{i}setup.rb")
    set_use_this_build_system 'setup.rb'
  # ======================================================================= #
  # === Handle "setup.py" files next
  # ======================================================================= #
  elsif does_this_file_exist?("#{i}FILE_SETUP_PY") and !meson_build_file_exists?
    set_use_this_build_system 'python'
  # ======================================================================= #
  # === It's still python though
  # ======================================================================= #
  elsif does_this_file_exist?("#{i}FILE_SETUP_PY")
    set_use_this_build_system 'python'
  else
    e 'Unknown build system.'
  end
end

#meson_has_higher_priority_that_configure?Boolean

#

meson_has_higher_priority_that_configure?

#

Returns:

  • (Boolean)


71
72
73
74
75
76
# File 'lib/rbt/actions/individual_actions/infer_build_system/infer_build_system.rb', line 71

def meson_has_higher_priority_that_configure?
  array = dataset_from_build_systems_priorities?
  index1 = array.index('meson')
  index2 = array.index('configure')
  return (index1 < index2)
end

#report_the_build_systemObject Also known as: report

#

report_the_build_system

#


176
177
178
# File 'lib/rbt/actions/individual_actions/infer_build_system/infer_build_system.rb', line 176

def report_the_build_system
  e "#{rev}The build system is #{steelblue(build_system?)}#{rev}."
end

#resetObject

#

reset (reset tag)

#


47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/rbt/actions/individual_actions/infer_build_system/infer_build_system.rb', line 47

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === @use_this_build_system
  # ======================================================================= #
  set_use_this_build_system(nil)
  # ======================================================================= #
  # === :dataset_from_build_systems_priorities
  # ======================================================================= #
  _ = RBT.file_build_system_priorities
  @internal_hash[:dataset_from_build_systems_priorities] = YAML.load_file(_)
end

#runObject

#

run (run tag)

#


95
96
97
98
# File 'lib/rbt/actions/individual_actions/infer_build_system/infer_build_system.rb', line 95

def run
  set_use_this_build_system 'unknown' # ← Default value since as of February 2024.
  infer_the_build_system_from_this_directory
end

#set_use_this_build_system(i) ⇒ Object

#

set_use_this_build_system

#


81
82
83
# File 'lib/rbt/actions/individual_actions/infer_build_system/infer_build_system.rb', line 81

def set_use_this_build_system(i)
  @use_this_build_system = i
end

#use_this_build_system?Boolean Also known as: build_system?

#

use_this_build_system?

#

Returns:

  • (Boolean)


88
89
90
# File 'lib/rbt/actions/individual_actions/infer_build_system/infer_build_system.rb', line 88

def use_this_build_system?
  @use_this_build_system
end