class Cxxproject::StaticLibrary

Attributes

whole_archive[R]

Public Class Methods

new(name, whole_archive=false) click to toggle source
Calls superclass method Cxxproject::BuildingBlock::new
# File lib/cxxproject/buildingblocks/static_library.rb, line 16
def initialize(name, whole_archive=false)
  super(name)
  @whole_archive = whole_archive
end

Public Instance Methods

add_grouping_tasks(archive) click to toggle source
# File lib/cxxproject/buildingblocks/static_library.rb, line 121
def add_grouping_tasks(archive)
  namespace 'lib' do
    desc archive
    task @name => archive
  end
end
additional_path_components() click to toggle source
# File lib/cxxproject/buildingblocks/static_library.rb, line 31
def additional_path_components
  ['libs']
end
calc_archive_name() click to toggle source
# File lib/cxxproject/buildingblocks/static_library.rb, line 75
    def calc_archive_name
      aname = get_archive_name
#      if @output_dir_abs
#        prefix = File.rel_from_to_project(@project_dir, @output_dir)
#        aname = aname[prefix.length..-1]
#      end
      return aname
    end
calc_command_line() click to toggle source
# File lib/cxxproject/buildingblocks/static_library.rb, line 61
    def calc_command_line
      objs = @objects
       if @output_dir_abs
        prefix = File.rel_from_to_project(@project_dir, @output_dir)
#        objs.map! { |m| m[prefix.length..-1] }
      end
      archiver = @tcs[:ARCHIVER]
      cmd = [archiver[:COMMAND]] # ar
      cmd += archiver[:ARCHIVE_FLAGS].split(" ")
      cmd += archiver[:FLAGS]
      cmd << calc_archive_name # -o debug/x.exe
      cmd += objs
    end
complete_init() click to toggle source
Calls superclass method Cxxproject::BuildingBlock#complete_init
# File lib/cxxproject/buildingblocks/static_library.rb, line 21
def complete_init()
  if @output_dir_abs
    add_lib_element(HasLibraries::LIB, @name, true)
    add_lib_element(HasLibraries::SEARCH_PATH, File.join(@output_dir, 'libs'), true)
  else
    add_lib_element(HasLibraries::LIB_WITH_PATH, File.join(@output_dir,"lib#{@name}.a"), true)
  end
  super
end
convert_to_rake() click to toggle source

task that will link the given object files to a static lib

# File lib/cxxproject/buildingblocks/static_library.rb, line 86
    def convert_to_rake()
      object_multitask = prepare_tasks_for_objects()
      archiver = @tcs[:ARCHIVER]

      res = typed_file_task Rake::Task::LIBRARY, get_task_name => object_multitask do
        cmd = calc_command_line
        aname = calc_archive_name
        Dir.chdir(@project_dir) do
          FileUtils.rm(aname) if File.exists?(aname)
#          cmd.map! {|c| c.include?(' ') ? "\"#{c}\"" : c }
          rd, wr = IO.pipe
          cmd << {
            :err => wr,
            :out => wr
          }
          sp = spawn(*cmd)
          cmd.pop

          consoleOutput = ProcessHelper.readOutput(sp, rd, wr)

          process_result(cmd, consoleOutput, @tcs[:ARCHIVER][:ERROR_PARSER], "Creating #{aname}")

          check_config_file()
        end
      end
      res.tags = tags
      enhance_with_additional_files(res)
      add_output_dir_dependency(get_task_name, res, true)

      add_grouping_tasks(get_task_name)

      setup_rake_dependencies(res, object_multitask)
      return res
    end
get_archive_name() click to toggle source
# File lib/cxxproject/buildingblocks/static_library.rb, line 35
def get_archive_name() # relative path
  return @archive_name if @archive_name
  parts = [@output_dir]

  if @output_dir_abs
    parts = [@output_dir_relPath] if @output_dir_relPath
    parts += additional_path_components()
  end

  parts << "lib#{@name}.a"

  @archive_name = File.join(parts)
  @archive_name
end
get_task_name() click to toggle source
# File lib/cxxproject/buildingblocks/static_library.rb, line 50
def get_task_name() # full path
  return @task_name if @task_name

  parts = [@output_dir]
  parts << 'libs' if @output_dir_abs
  parts << "lib#{@name}.a"
  @task_name = File.join(parts)
  @task_name = @project_dir + "/" + @task_name unless @output_dir_abs
  @task_name
end