Class: RBT::GenerateMakefile

Inherits:
Base show all
Defined in:
lib/rbt/generate_files/generate_makefile.rb

Overview

RBT::GenerateMakefile

Constant Summary collapse

WHICH_SHELL_TO_USE =
#

WHICH_SHELL_TO_USE

#
'/bin/sh'
NAME_OF_MAKEFILE =
#

NAME_OF_MAKEFILE

#
'Makefile'
NAME_OF_THE_FILE_HERE =
#

NAME_OF_THE_FILE_HERE

#
'generate_makefile.rb'

Constants inherited from LeanPrototype

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

Instance Attribute 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(optional_makefile = nil, run_already = true) ⇒ GenerateMakefile

#

initialize

#


62
63
64
65
66
67
68
69
# File 'lib/rbt/generate_files/generate_makefile.rb', line 62

def initialize(
    optional_makefile = nil,
    run_already       = true
  )
  reset
  set_input(optional_makefile)
  run if run_already
end

Instance Attribute Details

#base_dir=(value) ⇒ Object (writeonly)

Sets the attribute base_dir

Parameters:

  • value

    the value to set the attribute base_dir to.



42
43
44
# File 'lib/rbt/generate_files/generate_makefile.rb', line 42

def base_dir=(value)
  @base_dir = value
end

Instance Method Details

#add_commentObject

#

add_comment

Add a comment to the Makefile.

#


187
188
189
# File 'lib/rbt/generate_files/generate_makefile.rb', line 187

def add_comment
  @_ << '# =========================================================================== #'+N
end

#add_headerObject

#

add_header

#


117
118
119
120
121
122
123
# File 'lib/rbt/generate_files/generate_makefile.rb', line 117

def add_header
  add_comment
  @_ << "# Autogenerated Makefile from "\
        "$RBT/generate_files/#{NAME_OF_THE_FILE_HERE}#{N}"
  add_comment
  add_newline
end

#add_newlineObject

#

add_newline

#


128
129
130
# File 'lib/rbt/generate_files/generate_makefile.rb', line 128

def add_newline
  @_ << N
end

#add_tabsObject

#

add_tabs

This will replace the first 4 spaces with a tab

#


137
138
139
# File 'lib/rbt/generate_files/generate_makefile.rb', line 137

def add_tabs
  @_.gsub!(/^    /, TABULATOR)
end

#array_available_C_files?Boolean Also known as: all_c_files?

#

array_available_C_files?

#

Returns:

  • (Boolean)


110
111
112
# File 'lib/rbt/generate_files/generate_makefile.rb', line 110

def array_available_C_files?
  @array_available_C_files
end

#consider_generating_a_new_makefileObject

#

consider_generating_a_new_makefile

#


277
278
279
280
281
282
283
284
# File 'lib/rbt/generate_files/generate_makefile.rb', line 277

def consider_generating_a_new_makefile
  target = 'Makefile'
  if File.exist?(target) and !@may_we_overwrite_existing_makefiles
    opne 'A file '+sfile(target)+rev+' already exists. We may '\
         'not generate the same-named file.'
  end
  save_to(target)
end

#could_we_find_a_C_file?Boolean

#

could_we_find_a_C_file?

#

Returns:

  • (Boolean)


289
290
291
# File 'lib/rbt/generate_files/generate_makefile.rb', line 289

def could_we_find_a_C_file?
  !@array_available_C_files.empty?
end

#create_makefile_variable(this_variable) ⇒ Object

#

create_makefile_variable

Creates a makefile variable for you to use.

#


172
173
# File 'lib/rbt/generate_files/generate_makefile.rb', line 172

def create_makefile_variable(this_variable)
end

#create_rule(name_of_rule, action, extended_instruction_set = '') ⇒ Object

#

create_rule

Use this to create a specific rule.

#


156
157
158
159
160
161
162
163
164
165
# File 'lib/rbt/generate_files/generate_makefile.rb', line 156

def create_rule(
    name_of_rule,
    action,
    extended_instruction_set = ''
  )
  extended_instruction_set = ' '+extended_instruction_set unless extended_instruction_set.empty?
  @_ << N # right now, we always add a newline
  @_ << name_of_rule+':'+extended_instruction_set+N
  @_ << TABULATOR+action+N # rm *.o temp
end

#data?Boolean

#

data?

#

Returns:

  • (Boolean)


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

def data?
  @_
end

#fill_up_stringObject

#

fill_up_string

#


194
195
196
197
198
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
226
227
228
229
230
# File 'lib/rbt/generate_files/generate_makefile.rb', line 194

def fill_up_string
  @_ << 
'# =========================================================================== #
# MACRO LISTING
# =========================================================================== #
SHELL='+WHICH_SHELL_TO_USE+'
  
# =========================================================================== #
# === CFLAGS TO USE
# =========================================================================== #
CFLAGS = # -O -systype bsd43

# =========================================================================== #
# === COMPILER TO USE
#
# This variable can be used to keep track as to which compiler has to be
# used.
# =========================================================================== #
CC=gcc
  
CCOPTS=-Wall
  
# =========================================================================== #
# === TARGET
# =========================================================================== #
# foobar.dvi: $(SRCS)
# 	$(DITROFF) $(MACROS) $(SRCS) >paper.dvi
     
dummy: '+all_c_files?.join(' ')+'
	$(CC) $(CCOPTS) -o dummy '+all_c_files?.join(' ')+'
	
prefix		= '+prefix?+'
exec_prefix	= ${prefix}


'
end

#input(i) ⇒ Object

#

input

#


74
75
76
77
# File 'lib/rbt/generate_files/generate_makefile.rb', line 74

def input(i)
  i = i.join(' ').strip if i.is_a? Array
  @input = i
end
#

menu

#


257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
# File 'lib/rbt/generate_files/generate_makefile.rb', line 257

def menu(
    i = nil
  )
  if i.is_a? Array
    i.each {|entry| menu(entry) }
  else
    case i # case tag
    # ======================================================================= #
    # === generate_makefile --help
    # ======================================================================= #
    when /-?-?help$/i
      show_help
      exit
    end
  end
end

#prefix?Boolean

#

prefix?

#

Returns:

  • (Boolean)


235
236
237
# File 'lib/rbt/generate_files/generate_makefile.rb', line 235

def prefix?
  @prefix
end

#report_what_we_will_doObject

#

report_what_we_will_do

#


242
243
244
245
# File 'lib/rbt/generate_files/generate_makefile.rb', line 242

def report_what_we_will_do
  _ = @base_dir+NAME_OF_MAKEFILE
  opne "#{rev}Generating Makefile in `#{sfile(_)}`."
end

#resetObject

#

reset

#


82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/rbt/generate_files/generate_makefile.rb', line 82

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === @_
  # ======================================================================= #
  @_ = ''.dup # string that will be generated
  # ======================================================================= #
  # === @base_dir
  # ======================================================================= #
  @base_dir = return_pwd.dup # Trailing / is easier.
  # ======================================================================= #
  # === @prefix
  # ======================================================================= #
  @prefix = '/usr/' # prefix to use
  # ======================================================================= #
  # === @may_we_overwrite_existing_makefiles
  # ======================================================================= #
  @may_we_overwrite_existing_makefiles = false
  # ======================================================================= #
  # === @array_available_C_files
  # ======================================================================= #
  @array_available_C_files = Dir['*.c']
end

#runObject

#

run (run tag)

Bundle together the various actions.

#


317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
# File 'lib/rbt/generate_files/generate_makefile.rb', line 317

def run
  check_against_input
  report_what_we_will_do
  add_header
  fill_up_string
  if could_we_find_a_C_file?
  else
    create_rule 'joe_goes_crazy', 'echo "ok joe is crazy..."'
    create_rule 'all','g++ main.cpp hello.cpp factorial.cpp -o hello'
    create_rule 'hello','g++ main.o factorial.o hello.o -o hello','main.o factorial.o hello.o'
  end
  sanitize
  add_tabs # should be called right before save_to is invoked
  consider_generating_a_new_makefile
end

#sanitizeObject

#

sanitize

You can use this method to sanitize an existing makefile as well.

#


146
147
148
149
# File 'lib/rbt/generate_files/generate_makefile.rb', line 146

def sanitize
  @_.gsub!(/chown root/,'chown 0')
  @_.gsub!(/\/usr\/bin\//,'')
end

#save_to(where_to = 'Makefile', mode_to_use = 'w+') ⇒ Object

#

save_to

Where to save the Makefile.

#


298
299
300
301
302
303
304
305
306
307
308
309
310
# File 'lib/rbt/generate_files/generate_makefile.rb', line 298

def save_to(
    where_to    = 'Makefile',
    mode_to_use = 'w+'
  )
  if File.exist? where_to
    name = 'old_Makefile'
    opne 'A Makefile already exists in this directory. We will rename this'
    opne 'Makefile to '+sfile(name)+' before generating a new Makefile.'
    opnn; mv('Makefile', name)
  end
  save_what_into(data?, where_to)
  opne 'A new '+steelblue('Makefile')+rev+' was generated!'
end

#show_helpObject

#

show_help (help tag)

#


250
251
252
# File 'lib/rbt/generate_files/generate_makefile.rb', line 250

def show_help
  e 'These are the available options:'
end