class Object

Public Instance Methods

construct_ios_framework(platform_name, *source_platforms) click to toggle source
# File lib/rxcode/tasks/ios_framework.rb, line 144
def construct_ios_framework(platform_name, *source_platforms)
  build_dir = ENV['BUILD_DIR']
  configuration = ENV['CONFIGURATION']
  project_name = ENV['PROJECT_NAME']
  product_name = ENV['PRODUCT_NAME']
  static_target = ENV['STATIC_TARGET']
  
  if source_platforms.empty?
    source_platforms = [ platform_name ]
  end
  
  source_library_paths =
    source_platforms.collect do |source_platform_name|
      "\"#{build_dir}/#{configuration}-#{source_platform_name}/lib#{static_target}.a\""
    end
  
  platform_dir          = "#{build_dir}/#{configuration}-#{platform_name}"
  platform_library_path = "#{platform_dir}/#{product_name}"
  framework             = "#{platform_dir}/#{product_name}.framework"

  # Create framework directory structure.
  # rm -rf "${FRAMEWORK}" &&
  # mkdir -p "${UNIVERSAL_LIBRARY_DIR}" &&
  # mkdir -p "${FRAMEWORK}/Versions/A/Headers" &&
  # mkdir -p "${FRAMEWORK}/Versions/A/Resources" &&
  
  FileUtils.rm_rf     framework
  FileUtils.mkdir_p   platform_dir
  FileUtils.mkdir_p   "#{framework}/Versions/A/Headers"
  FileUtils.mkdir_p   "#{framework}/Versions/A/Resources"
  
  # Generate universal binary from desktop, device, and simulator builds.
  # lipo "${SIMULATOR_LIBRARY_PATH}" "${DEVICE_LIBRARY_PATH}" -create -output "${UNIVERSAL_LIBRARY_PATH}" &&
  `lipo #{source_library_paths.join(' ')} -create -output "#{platform_library_path}"`
  
  # Move files to appropriate locations in framework paths.
  # cp "${UNIVERSAL_LIBRARY_PATH}" "${FRAMEWORK}/Versions/A" &&
  # cd "${FRAMEWORK}/Versions" &&
  # ln -s "A" "Current" &&
  #    cd "${FRAMEWORK}" &&
  # ln -s "Versions/Current/Headers" "Headers" &&
  # ln -s "Versions/Current/Resources" "Resources" &&
  # ln -s "Versions/Current/${PRODUCT_NAME}" "${PRODUCT_NAME}"
  
  FileUtils.cp  platform_library_path, "#{framework}/Versions/A"
  Dir.chdir(framework) do
    Dir.chdir("Versions") do
      FileUtils.ln_s  "A", "Current"
    end
    
    FileUtils.ln_s  "Versions/Current/Headers", "Headers"
    FileUtils.ln_s  "Versions/Current/Resources", "Resources"
    FileUtils.ln_s  "Versions/Current/#{product_name}", product_name
  end
  
  # Copy headers from a cocoa framework
  script_input_file_count = ENV['SCRIPT_INPUT_FILE_COUNT'].to_i
  script_input_files = []
  script_input_file_count.times do |i|
    input_file_glob = ENV["SCRIPT_INPUT_FILE_#{i}"]
    
    script_input_files.concat(Dir[ENV["SCRIPT_INPUT_FILE_#{i}"]])
  end
  
  script_input_files.each do |input_file_path|
    if input_file_path =~ /\.h$/
      destination_file_path = File.join("#{framework}/Versions/Current/Headers", File.basename(input_file_path))
      FileUtils.cp input_file_path, destination_file_path
    end
  end
end