Class: RBT::Cmake

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

Overview

RBT::Cmake

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

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, #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(use_this_prefix = :guess_prefix, run_already = true, &block) ⇒ Cmake

#

initialize

#


50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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
# File 'lib/rbt/cmake/cmake.rb', line 50

def initialize(
    use_this_prefix = :guess_prefix,
    run_already     = true,
    &block
  )
  reset
  case use_this_prefix
  when :do_not_run_yet
    run_already = false
    use_this_prefix = :guess_prefix
  end
  case run_already
  # ======================================================================= #
  # === :do_not_run_yet
  # ======================================================================= #
  when :do_not_run_yet
    run_already = false
  end
  set_use_this_prefix(use_this_prefix)
  set_base_directory
  # ======================================================================= #
  # === Handle blocks next
  # ======================================================================= #
  if block_given?
    yielded = yield
    # ===================================================================== #
    # Use it as at the parent object.
    # ===================================================================== #
    if yielded.is_a?(Symbol)
      case yielded
      # =================================================================== #
      # ===  :colourized_and_padded
      # =================================================================== #
      when :colourized_and_padded
        @use_extra_padding_for_the_system_command = true
      else
        e tomato("Not found the following symbol: :#{yielded}")
      end
    elsif yielded.is_a?(Hash)
      set_parent_object(yielded[:self]) if yielded.has_key? :self
      set_use_opn(yielded[:use_opn]) if yielded.has_key? :use_opn
    else
      set_parent_object(yielded)
    end
  end
  run if run_already
end

Instance Method Details

#append(i) ⇒ Object

#

append

This method will simply append data onto the @cmake_string.

NO checking involved, so call it only when you are sure that you want to add this.

Use this method and ONLY this method when you wish to extend the @cmake_string.

#


225
226
227
228
229
# File 'lib/rbt/cmake/cmake.rb', line 225

def append(i)
  @cmake_string << " #{i}"
  @cmake_string.strip! # Clean up too.
  @cmake_string.squeeze!(' ')
end

#append_base_directoryObject Also known as: add_prefix

#

append_base_directory

#


273
274
275
# File 'lib/rbt/cmake/cmake.rb', line 273

def append_base_directory
  append @base_directory
end

#check_if_cmake_is_available(may_we_exit = @may_we_exit) ⇒ Object Also known as: cmake_is_available?

#

check_if_cmake_is_available

We must find out whether cmake is available or not.

If it is not available, we must exit, but only if the argument provided allows us to do this.

#


285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
# File 'lib/rbt/cmake/cmake.rb', line 285

def check_if_cmake_is_available(
    may_we_exit = @may_we_exit
  )
  case may_we_exit
  when :do_not_exit
    may_we_exit = false
  end
  _ = `cmake 2>&1`
  if _.include? 'not found'
    opne swarn('Cmake is not available. Please install `cmake` first.')
    if may_we_exit
      opnwarn 'Exiting now.'
      exit
    end
    return false
  else
    return true
  end
end

#check_if_cmakelists_file_exists?(where = Dir.pwd) ⇒ Boolean

#

check_if_cmakelists_file_exists?

This method checks if a CMakeLists.txt file exists.

#

Returns:

  • (Boolean)


189
190
191
192
193
194
195
# File 'lib/rbt/cmake/cmake.rb', line 189

def check_if_cmakelists_file_exists?(where = Dir.pwd)
  if File.exist? where+'/CMakeLists.txt'
    true
  else
    false
  end
end

#cmake_string?Boolean Also known as: cmake_string, return_configure_command_that_was_used, string

#

cmake_string?

#

Returns:

  • (Boolean)


382
383
384
# File 'lib/rbt/cmake/cmake.rb', line 382

def cmake_string? # contains the cmake string.
  @cmake_string
end

#create_cmake_file_add_subdirectory(name) ⇒ Object

#

create_cmake_file_add_subdirectory

From this point on we list only methods which are to be used to create a cmake file. These should one day be used to automatically create a cmake project.

#


204
205
# File 'lib/rbt/cmake/cmake.rb', line 204

def create_cmake_file_add_subdirectory(name)
end

#guess_prefix(of_this_dir = return_pwd) ⇒ Object Also known as: prefix?, guess_prefix?

#

guess_prefix

The argument ‘of_this_dir` passed to this method should include a ’-‘.

guess_prefix will simply return the new prefix.

#


169
170
171
172
173
174
175
176
177
178
179
180
181
# File 'lib/rbt/cmake/cmake.rb', line 169

def guess_prefix(
    of_this_dir = return_pwd
  )
  basename = File.basename(of_this_dir)
  basename = of_this_dir.split('-') if of_this_dir.include? '-'
  _ = programs_dir?.dup
  if of_this_dir.include? '-'
    _ << File.basename(basename.first).capitalize+'/'+basename[1]
  else
    _ << basename
  end
  return _
end

#has_been_run?Boolean

#

has_been_run?

#

Returns:

  • (Boolean)


352
353
354
# File 'lib/rbt/cmake/cmake.rb', line 352

def has_been_run?
  @has_been_run
end

#notify_the_user_which_command_we_will_runObject Also known as: verbose_run_the_actual_system_command

#

notify_the_user_which_command_we_will_run

This useful method will notify the user which specific command will be run.

#


408
409
410
411
412
413
414
415
416
# File 'lib/rbt/cmake/cmake.rb', line 408

def notify_the_user_which_command_we_will_run
  orev "Running the following command "\
       "from #{sdir(@current_directory)}#{rev}:"
  e if @use_extra_padding_for_the_system_command
  e cornflowerblue("  #{@cmake_string}")
  e if @use_extra_padding_for_the_system_command
  run_this_system_command_via_io_popen(@cmake_string)
  @has_been_run = true # Keep track of the fact that we already run this once.
end

#opnnObject

#

opnn

#


308
309
310
# File 'lib/rbt/cmake/cmake.rb', line 308

def opnn
  super(namespace?) if use_opn?
end

#prepend(i) ⇒ Object

#

prepend

This will prepend to the cmake string. Best way to use this is via the prefix variable.

#


237
238
239
240
241
242
243
244
245
246
247
248
249
# File 'lib/rbt/cmake/cmake.rb', line 237

def prepend(i)
  # ======================================================================= #
  # We must find the position of the 'cmake' string.
  # ======================================================================= #
  if @cmake_string.include? 'cmake'
    start_position = @cmake_string.index('cmake')+('cmake'.size)
    @cmake_string[start_position,0] = ' '+i
  else 
    @cmake_string.prepend(" #{i}")
  end
  @cmake_string.strip! # Clean up too.
  @cmake_string.squeeze!(' ')
end

#resetObject

#

reset

#


101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/rbt/cmake/cmake.rb', line 101

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === @current_directory
  # ======================================================================= #
  @current_directory = return_pwd
  # ======================================================================= #
  # === @cmake_string
  # ======================================================================= #
  @cmake_string      = 'cmake'.dup
  # ======================================================================= #
  # === @may_we_exit
  # ======================================================================= #
  @may_we_exit       = false
  @parent_object     = nil
  @has_been_run      = false
  # ======================================================================= #
  # === @use_opn
  # ======================================================================= #
  @use_opn           = true
  # ======================================================================= #
  # === @use_extra_padding_for_the_system_command
  # ======================================================================= #
  @use_extra_padding_for_the_system_command = false
  set_base_directory(temp_directory?)
end

#runObject

#

run

If you need some examples for a proper cmake string, have a look:

cmake . -DCMAKE_INSTALL_PREFIX=$MY_TEMP/install_test
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
#


436
437
438
439
440
# File 'lib/rbt/cmake/cmake.rb', line 436

def run
  check_if_cmake_is_available
  prepend(use_this_prefix?)
  notify_the_user_which_command_we_will_run
end

#run_full(also_run_make_and_make_install = false, full_prefix = prefix? ) ⇒ Object

#

run_full

This method will also run “make” and “make install”.

Afterwards, it will invoke CreateProgram, and then AdvancedSymlink.

You probably won’t need this method if you use this class here as part of RBT, but in the event that you also wish to call this class standalone, this code should suffice.

Since Aug 2011 we use the variable @base_directory.

#


325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
# File 'lib/rbt/cmake/cmake.rb', line 325

def run_full(
    also_run_make_and_make_install = false,
    full_prefix                    = prefix?
  )
  append_base_directory
  run
  if also_run_make_and_make_install
    run_make_command
    run_make_install_command
    # ===================================================================== #
    # === RBT::CreateProgram
    #
    # Next, delegate towards RBT::CreateProgram.
    # ===================================================================== #
    create_program = action(:app_dir_skeleton, full_prefix)
    create_program.create_the_directories
    # ===================================================================== #
    # Since Aug 2011 we also run AdvancedSymlink. @default_prefix
    # must be set when we arrive at this point here.
    # ===================================================================== #
    @advanced_symlink = RBT::AdvancedSymlink.new(full_prefix)
  end
end

#run_make_commandObject

#

run_make_command

#


391
392
393
# File 'lib/rbt/cmake/cmake.rb', line 391

def run_make_command
  run_this_system_command_via_io_popen 'make'+ERROR_LINE
end

#run_make_install_commandObject

#

run_make_install_command

#


398
399
400
# File 'lib/rbt/cmake/cmake.rb', line 398

def run_make_install_command
  run_this_system_command_via_io_popen 'make install'+ERROR_LINE
end

#run_this_system_command_via_io_popen(i) ⇒ Object

#

run_this_system_command_via_io_popen

#


359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
# File 'lib/rbt/cmake/cmake.rb', line 359

def run_this_system_command_via_io_popen(i)
  io_object = IO.popen(i, {:err => [:child, :out]}).each { |line|
    if @parent_object
      # =================================================================== #
      # In this case, delegate to the parent object.
      # =================================================================== #
      @parent_object.parse_this_line_obtained_via_io_popen(line)
    else
      # =================================================================== #
      # Else, handle everything here in this class.
      # =================================================================== #
      if RBT.const_defined? :ColourizeParser
        line = ColourizeParser.parse_this_line(line)
      end
      e line
    end
  }
  io_object.close
end

#set_base_directory(i = ' .') ⇒ Object

#

set_base_directory

The method set_base_directory sets the variable @base_directory to use. By default, it uses ‘ .’ as its target.

#


257
258
259
260
261
# File 'lib/rbt/cmake/cmake.rb', line 257

def set_base_directory(
    i = ' .'
  )
  @base_directory = i
end

#set_full_configure_line(i) ⇒ Object

#

set_full_configure_line

This method can be specifically used from the outside.

#


423
424
425
# File 'lib/rbt/cmake/cmake.rb', line 423

def set_full_configure_line(i)
  @cmake_string = i
end

#set_may_we_exitObject

#

set_may_we_exit

#


210
211
212
# File 'lib/rbt/cmake/cmake.rb', line 210

def set_may_we_exit
  @may_we_exit = true # We may exit.
end

#set_parent_object(i = nil) ⇒ Object

#

set_parent_object

The parent object, presently, may only be of class RBT::Action::Installer or it is simply nil.

#


135
136
137
# File 'lib/rbt/cmake/cmake.rb', line 135

def set_parent_object(i = nil)
  @parent_object = i
end

#set_use_this_prefix(i) ⇒ Object Also known as: set_prefix

#

set_use_this_prefix

#


142
143
144
145
146
147
148
149
150
151
152
153
# File 'lib/rbt/cmake/cmake.rb', line 142

def set_use_this_prefix(i)
  case i
  # ======================================================================= #
  # === :guess
  # ======================================================================= #
  when :guess,
       :guess_prefix
    i = guess_prefix
  end
  _ = " -DCMAKE_INSTALL_PREFIX=#{i}"
  @use_this_prefix = _
end

#use_this_prefix?Boolean

#

use_this_prefix?

#

Returns:

  • (Boolean)


158
159
160
# File 'lib/rbt/cmake/cmake.rb', line 158

def use_this_prefix?
  @use_this_prefix
end

#we_use_a_build_directoryObject

#

we_use_a_build_directory

#


266
267
268
# File 'lib/rbt/cmake/cmake.rb', line 266

def we_use_a_build_directory
  set_base_directory(' ..')
end