Class: RBT::Linux::Gobolinux::CreateRecipe

Inherits:
Base show all
Defined in:
lib/rbt/linux/gobolinux/create_recipe.rb

Overview

RBT::Linux::Gobolinux::CreateRecipe

Constant Summary collapse

USE_THIS_GOBOLINUX_COMPILE_VERSION =
#

USE_THIS_GOBOLINUX_COMPILE_VERSION

Which gobolinux-compile version to use. Currently this is hardcoded.

On GoboLinux, we could probably determine the “Compile –version”.

#
'2.0'

Constants inherited from RBT::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

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 RBT::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) ⇒ CreateRecipe

#

initialize

#


57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 57

def initialize(
    i           = ARGV,
    run_already = true
  )
  reset
  set_this_program(i)
  # ======================================================================= #
  # === Handle blocks given to this method next
  # ======================================================================= #
  if block_given?
    yielded = yield
    case yielded
    # ===================================================================== #
    # The following entry point means that we will store e. g. 'gtk' into
    # the subdirectory 'g/gtk'.
    # ===================================================================== #
    when :store_in_alphanumeric_subdirectory
      use_this_first_character = @this_program[0,1].dup
      @store_in_this_base_directory << use_this_first_character+'/'
    end
  end
  run if run_already
end

Instance Method Details

#add(i = N) ⇒ Object

#

add

#


266
267
268
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 266

def add(i = N)
  @main_string << i
end

#configure_options?Boolean Also known as: coptions?

#

configure_options?

#

Returns:

  • (Boolean)


332
333
334
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 332

def configure_options?
  @dataset.configure_options? # This appears to be a String.
end

#consider_appending_more_stuffObject

#

consider_appending_more_stuff

Add some more exceptions and so forth.

#


321
322
323
324
325
326
327
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 321

def consider_appending_more_stuff
  if coptions?.include? '--enable-udev'
    add 'with_udev=('+N
    add '  --enable-udev'+N
    add ')'
  end
end

#create_directory_skeletonObject

#

create_directory_skeleton

This method will create the required directories and files to accomodate a gobolinux recipe.

#


357
358
359
360
361
362
363
364
365
366
367
368
369
370
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 357

def create_directory_skeleton
  _ = temporary_base_dir?+name_of_the_program+'-'+version?+'/'
  mkdir _
  opnn; touch rds(_+'/Recipe'), :be_verbose
  mkdir rds(_+'/Resources/')
  opnn; touch rds(_+'/Resources/BuildDependencies'), :be_verbose
  opnn; touch rds(_+'/Resources/BuildInformation'), :be_verbose
  opnn; touch rds(_+'/Resources/Dependencies'), :be_verbose
  opnn; touch rds(_+'/Resources/Description'), :be_verbose
  opnn; touch rds(_+'/Resources/Environment'), :be_verbose # This one is rarely needed.
  populate_description_file
  populate_dependencies_file
  populate_recipe_file # Need to fill up the file "Recipe" here.
end

#dataset?Boolean

#

dataset?

#

Returns:

  • (Boolean)


191
192
193
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 191

def dataset?
  @dataset
end

#dependencies?Boolean

#

dependencies?

#

Returns:

  • (Boolean)


239
240
241
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 239

def dependencies?
  @dataset.required_deps_on? # This is assumed to return an Array.
end

#description?Boolean

#

description?

#

Returns:

  • (Boolean)


421
422
423
424
425
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 421

def description?
  _ = @dataset.description?.delete(N)
  _ = word_wrap(_, 68) # Condense the description a bit.
  return _
end

#has_a_homepage_url?Boolean

#

has_a_homepage_url?

Query whether the program has a registered homepage url.

#

Returns:

  • (Boolean)


407
408
409
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 407

def has_a_homepage_url?
  homepage_url?
end

#homepage_url?Boolean

#

homepage_url?

#

Returns:

  • (Boolean)


414
415
416
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 414

def homepage_url?
  @dataset.homepage?
end

#licence?Boolean Also known as: license?

#

licence?

#

Returns:

  • (Boolean)


212
213
214
215
216
217
218
219
220
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 212

def licence?
  _ = @dataset.licence?.to_s
  # ======================================================================= #
  # GoboLinux uses a slightly different scheme, hence the following
  # line which acts as a corrective.
  # ======================================================================= #
  _ = 'GNU GPL 2' if _ == 'GPLv2'
  return _
end

#notify_the_user_what_we_will_doObject

#

notify_the_user_what_we_will_do

#


159
160
161
162
163
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 159

def notify_the_user_what_we_will_do
  _ = program?
  opne "We will next create a gobolinux-recipe for the "\
       "program #{simp(_)}."
end

#pad_with_quotes(i) ⇒ Object

#

pad_with_quotes

#


246
247
248
249
250
251
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 246

def pad_with_quotes(i)
  unless i.include? '"'
    i = '"'+i+'"'
  end
  return i
end

#path?Boolean Also known as: path

#

path?

#

Returns:

  • (Boolean)


198
199
200
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 198

def path?
  dataset?.program_path?
end

#populate_dependencies_fileObject

#

populate_dependencies_file

#


430
431
432
433
434
435
436
437
438
439
440
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 430

def populate_dependencies_file
  _ = ''.dup
  dependencies = dependencies?
  if dependencies
    dependencies.each {|dep|
      _ << dep+N
    }
    into = @store_in_this_base_directory+program_name_and_version+'/Resources/Dependencies'
    write_what_into(_, into)
  end
end

#populate_description_file(i = program_name? ) ⇒ Object

#

populate_description_file

This method will generate a (hopefully) valid GoboLinux Recipe description file. This file resides in the subdirectory Resources/ hierarchy.

For examples of such a file in use by GoboLinux, have a look at:

http://recipes.gobolinux.org/r/?list=LibDRM&ver=2.4.80-r1&file=Resources/Description
http://recipes.gobolinux.org/r/?list=ZzipLib&ver=0.13.58-r1&file=Resources/Description
#


385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 385

def populate_description_file(
    i = program_name?
  )
  _ = ''.dup
  _ << '[Name] '+return_gobolinux_name_for_this_program(i)+N # Unsure whether this line is needed - htop 2.0.x does not have it.
  _ << '[Summary] '+short_desc?+N
  _ << '[Description] '+description?.rstrip+N # .split(N).join(NEW_LINE_SEPARATOR+N)
  _ << '[License] '+license?+N
  if has_a_homepage_url?
    _ << '[Homepage] '+homepage_url?+N
  else # else we will simply use url2 instead
    _ << '[Homepage] '+url2+N
  end
  into = @store_in_this_base_directory+program_name_and_version+'/Resources/Description'
  write_what_into(_, into)
end

#populate_recipe_fileObject

#

populate_recipe_file (recipe tag)

#


273
274
275
276
277
278
279
280
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
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 273

def populate_recipe_file
  add ''.dup
  # ======================================================================= #
  # First add the header to that particular recipe:
  # ======================================================================= #
  add '# Recipe for version '+return_version+', author email: '+email?+N
  add '# (autogenerated via the file create_recipe.rb)'+N
  add '# Recipe (MakeRecipe) for '+return_gobolinux_name+N+N
  add "compile_version=#{USE_THIS_GOBOLINUX_COMPILE_VERSION}#{N}"
  add 'url='+pad_with_quotes(url1)+N
  add 'file_size='+return_file_size.to_s+N
  add 'file_md5='+return_md5sum.to_s+N
  add 'recipe_type=configure'+N
  add return_symlink_options
  # ======================================================================= #
  # Next, if the configure options for the given program in question exist,
  # then we will batch-add them to the recipe file. 
  # ======================================================================= #
  coptions = configure_options?
  unless coptions.empty? # Only when it is NOT empty, will we append it.
    add 'configure_options=('+N
    coptions.squeeze(' ').split(' ').each {|inner_coption|
      unless inner_coption.include? '--enable-udev'
        unless inner_coption.start_with? '--'
          inner_coption.prepend('--')
        end
        # ================================================================= #
        # Use udev-options a bit differently - see GoboLinux recipes
        # such as libdrm.
        # ================================================================= #
        add '  '+inner_coption+N
      end
    }
    add ')'+N
  end
  consider_appending_more_stuff
  into = @store_in_this_base_directory+program_name_and_version+'/Recipe'
  # ======================================================================= #
  # The main String was built up there.
  # ======================================================================= #
  write_what_into(@main_string, into)
end

#program_name_and_versionObject

#

program_name_and_version

#


205
206
207
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 205

def program_name_and_version
  name_of_the_program+'-'+version?
end

#resetObject

#

reset

#


84
85
86
87
88
89
90
91
92
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 84

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === @main_string
  # ======================================================================= #
  @main_string = ''.dup
  set_store_in_this_base_directory
end

#return_file_sizeObject

#

return_file_size

#


168
169
170
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 168

def return_file_size
  @dataset.file_size?
end

#return_gobolinux_name(i = @this_program) ⇒ Object Also known as: return_gobolinux_name_for_this_program

#

return_gobolinux_name

This method will return the GoboLinux name. It will make use of the class GobolinuxNamingConvention.

#


152
153
154
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 152

def return_gobolinux_name(i = @this_program)
  ::RBT.return_gobolinux_name(i)
end

#return_md5sum(i = path) ⇒ Object

#

return_md5sum

Here we need to keep in mind that the target path may not exist.

#


177
178
179
180
181
182
183
184
185
186
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 177

def return_md5sum(i = path)
  if File.exist? i
    result = `md5sum #{i}`.split(' ').first
    result.chomp
  else
    opne swarn('No target file at `')+sfile(i)+
         swarn('`. We will continue nonetheless.')
    '0' # Return 0 in this case.
  end
end
#

I assume that this will cause SymlinkProgram to overwrite, in case there is a conflict.

#


259
260
261
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 259

def return_symlink_options
  'symlink_options=(--conflict=overwrite)'+N
end

#runObject

#

run

#


445
446
447
448
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 445

def run
  notify_the_user_what_we_will_do
  create_directory_skeleton
end

#set_dataset(i = @this_program) ⇒ Object

#

set_dataset

#


132
133
134
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 132

def set_dataset(i = @this_program)
  @dataset = action(:SanitizeCookbook, i) { :fast }
end

#set_store_in_this_base_directory(i = Dir.pwd) ⇒ Object

#

set_store_in_this_base_directory

This method will keep track as to where to store the recipe - the base directory.

#


107
108
109
110
111
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 107

def set_store_in_this_base_directory(i = Dir.pwd)
  i = i.dup if i.frozen?
  i << '/' unless i.end_with? '/'
  @store_in_this_base_directory = i
end

#set_this_program(i) ⇒ Object

#

set_this_program

#


116
117
118
119
120
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 116

def set_this_program(i)
  i = i.first if i.is_a? Array
  @this_program = i
  set_dataset
end

#short_desc?Boolean

#

short_desc?

Wrapper over the short_description of a program.

#

Returns:

  • (Boolean)


341
342
343
344
345
346
347
348
349
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 341

def short_desc?
  _ = @dataset.short_description?.to_s
  if _.size > 68
    _ = word_wrap(_, 68)
  end
  _.chomp!
  _.strip!
  return _
end

#temporary_base_dir?Boolean

#

temporary_base_dir?

#

Returns:

  • (Boolean)


97
98
99
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 97

def temporary_base_dir?
  @store_in_this_base_directory
end

#this_program?Boolean Also known as: this_program, program?, name_of_the_program, program_name?

#

this_program?

#

Returns:

  • (Boolean)


139
140
141
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 139

def this_program?
  @this_program
end

#url1Object

#

url1

#


225
226
227
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 225

def url1
  @dataset.url1?.to_s
end

#url2Object

#

url2

#


232
233
234
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 232

def url2
  @dataset.url2?.to_s
end

#version?Boolean Also known as: return_version

#

version?

#

Returns:

  • (Boolean)


125
126
127
# File 'lib/rbt/linux/gobolinux/create_recipe.rb', line 125

def version?
  @dataset.program_version?
end