Class: Pod::Builder
- Inherits:
-
Object
- Object
- Pod::Builder
- Defined in:
- lib/cocoapods-packager/builder.rb
Instance Method Summary collapse
- #build(platform, library) ⇒ Object
- #build_framework(platform) ⇒ Object
- #build_library(platform, defines, output) ⇒ Object
- #build_static_lib_for_ios(static_libs, defines, output) ⇒ Object
- #build_static_lib_for_mac(static_libs, output) ⇒ Object
- #build_static_library(platform) ⇒ Object
- #build_with_mangling(platform) ⇒ Object
- #compile(platform) ⇒ Object
- #copy_headers ⇒ Object
- #copy_license ⇒ Object
- #copy_resources(platform) ⇒ Object
- #create_framework(platform) ⇒ Object
- #dependency_count ⇒ Object
- #expand_paths(path_specs) ⇒ Object
-
#initialize(source_dir, sandbox_root, public_headers_root, spec, embedded, mangle) ⇒ Builder
constructor
A new instance of Builder.
- #link_embedded_resources ⇒ Object
- #static_libs_in_sandbox(build_dir = 'build') ⇒ Object
- #xcodebuild(defines = '', args = '', build_dir = 'build') ⇒ Object
Constructor Details
#initialize(source_dir, sandbox_root, public_headers_root, spec, embedded, mangle) ⇒ Builder
Returns a new instance of Builder.
3 4 5 6 7 8 9 10 |
# File 'lib/cocoapods-packager/builder.rb', line 3 def initialize(source_dir, sandbox_root, public_headers_root, spec, , mangle) @source_dir = source_dir @sandbox_root = sandbox_root @public_headers_root = public_headers_root @spec = spec @embedded = @mangle = mangle end |
Instance Method Details
#build(platform, library) ⇒ Object
12 13 14 15 16 17 18 |
# File 'lib/cocoapods-packager/builder.rb', line 12 def build(platform, library) if library build_static_library(platform) else build_framework(platform) end end |
#build_framework(platform) ⇒ Object
29 30 31 32 33 34 35 36 37 38 |
# File 'lib/cocoapods-packager/builder.rb', line 29 def build_framework(platform) UI.puts('Building framework') defines = compile(platform) create_framework(platform.name.to_s) copy_headers build_library(platform, defines, @fwk.versions_path + Pathname.new(@spec.name)) copy_license copy_resources(platform) end |
#build_library(platform, defines, output) ⇒ Object
52 53 54 55 56 57 58 59 60 |
# File 'lib/cocoapods-packager/builder.rb', line 52 def build_library(platform, defines, output) static_libs = static_libs_in_sandbox if platform.name == :ios build_static_lib_for_ios(static_libs, defines, output) else build_static_lib_for_mac(static_libs, output) end end |
#build_static_lib_for_ios(static_libs, defines, output) ⇒ Object
62 63 64 65 66 67 68 69 70 71 |
# File 'lib/cocoapods-packager/builder.rb', line 62 def build_static_lib_for_ios(static_libs, defines, output) return if static_libs.count == 0 `libtool -static -o #{@sandbox_root}/build/package.a #{static_libs.join(' ')}` xcodebuild(defines, '-sdk iphonesimulator', 'build-sim') sim_libs = static_libs_in_sandbox('build-sim') `libtool -static -o #{@sandbox_root}/build-sim/package.a #{sim_libs.join(' ')}` `lipo #{@sandbox_root}/build/package.a #{@sandbox_root}/build-sim/package.a -create -output #{output}` end |
#build_static_lib_for_mac(static_libs, output) ⇒ Object
73 74 75 76 |
# File 'lib/cocoapods-packager/builder.rb', line 73 def build_static_lib_for_mac(static_libs, output) return if static_libs.count == 0 `libtool -static -o #{output} #{static_libs.join(' ')}` end |
#build_static_library(platform) ⇒ Object
20 21 22 23 24 25 26 27 |
# File 'lib/cocoapods-packager/builder.rb', line 20 def build_static_library(platform) UI.puts('Building static library') defines = compile(platform) platform_path = Pathname.new(platform.name.to_s) platform_path.mkdir unless platform_path.exist? build_library(platform, defines, platform_path + Pathname.new("lib#{@spec.name}.a")) end |
#build_with_mangling(platform) ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/cocoapods-packager/builder.rb', line 78 def build_with_mangling(platform) UI.puts 'Mangling symbols' defines = Symbols.mangle_for_pod_dependencies(@spec.name, @sandbox_root) defines << " " << @spec.consumer(platform).compiler_flags.join(' ') if platform.name == :ios defines = "#{defines} ARCHS=\"x86_64 i386 arm64 armv7 armv7s\"" end UI.puts 'Building mangled framework' xcodebuild(defines) defines end |
#compile(platform) ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/cocoapods-packager/builder.rb', line 92 def compile(platform) defines = "GCC_PREPROCESSOR_DEFINITIONS='PodsDummy_Pods_#{@spec.name}=PodsDummy_PodPackage_#{@spec.name}'" defines << " " << @spec.consumer(platform).compiler_flags.join(' ') if platform.name == :ios defines = "#{defines} ARCHS=\"x86_64 i386 arm64 armv7 armv7s\"" end xcodebuild(defines) if dependency_count > 0 && @mangle return build_with_mangling(platform) end defines end |
#copy_headers ⇒ Object
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/cocoapods-packager/builder.rb', line 109 def copy_headers headers_source_root = "#{@public_headers_root}/#{@spec.name}" Dir.glob("#{headers_source_root}/**/*.h"). each { |h| `ditto #{h} #{@fwk.headers_path}/#{h.sub(headers_source_root, '')}` } # If custom 'module_map' is specified add it to the framework distribution # otherwise check if a header exists that is equal to 'spec.name', if so # create a default 'module_map' one using it. if !@spec.module_map.nil? module_map_file = "#{@sandbox_root}/#{@spec.name}/#{@spec.module_map}" module_map = File.read(module_map_file) if Pathname(module_map_file).exist? elsif File.exist?("#{@public_headers_root}/#{@spec.name}/#{@spec.name}.h") module_map = <<MAP framework module #{@spec.name} { umbrella header "#{@spec.name}.h" export * module * { export * } } MAP end unless module_map.nil? @fwk.module_map_path.mkpath unless @fwk.module_map_path.exist? File.write("#{@fwk.module_map_path}/module.modulemap", module_map) end end |
#copy_license ⇒ Object
138 139 140 141 142 |
# File 'lib/cocoapods-packager/builder.rb', line 138 def copy_license license_file = @spec.license[:file] || 'LICENSE' license_file = "#{@sandbox_root}/#{@spec.name}/#{license_file}" `cp "#{license_file}" .` if Pathname(license_file).exist? end |
#copy_resources(platform) ⇒ Object
144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/cocoapods-packager/builder.rb', line 144 def copy_resources(platform) bundles = Dir.glob("#{@sandbox_root}/build/*.bundle") `cp -rp #{@sandbox_root}/build/*.bundle #{@fwk.resources_path} 2>&1` resources = (@spec.consumer(platform).resources) if resources.count == 0 && bundles.count == 0 @fwk.delete_resources return end if resources.count > 0 `cp -rp #{resources.join(' ')} #{@fwk.resources_path}` end end |
#create_framework(platform) ⇒ Object
159 160 161 162 |
# File 'lib/cocoapods-packager/builder.rb', line 159 def create_framework(platform) @fwk = Framework::Tree.new(@spec.name, platform, @embedded) @fwk.make end |
#dependency_count ⇒ Object
164 165 166 167 168 169 170 171 172 |
# File 'lib/cocoapods-packager/builder.rb', line 164 def dependency_count count = @spec.dependencies.count @spec.subspecs.each do |subspec| count += subspec.dependencies.count end count end |
#expand_paths(path_specs) ⇒ Object
174 175 176 177 178 |
# File 'lib/cocoapods-packager/builder.rb', line 174 def (path_specs) path_specs.map do |path_spec| Dir.glob(File.join(@source_dir, path_spec)) end end |
#link_embedded_resources ⇒ Object
40 41 42 43 44 45 46 47 48 |
# File 'lib/cocoapods-packager/builder.rb', line 40 def target_path = @fwk.root_path + Pathname.new('Resources') target_path.mkdir unless target_path.exist? Dir.glob(@fwk.resources_path.to_s + '/*').each do |resource| resource = Pathname.new(resource).relative_path_from(target_path) `ln -sf #{resource} #{target_path}` end end |
#static_libs_in_sandbox(build_dir = 'build') ⇒ Object
180 181 182 |
# File 'lib/cocoapods-packager/builder.rb', line 180 def static_libs_in_sandbox(build_dir = 'build') Dir.glob("#{@sandbox_root}/#{build_dir}/libPods-*.a") end |
#xcodebuild(defines = '', args = '', build_dir = 'build') ⇒ Object
184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
# File 'lib/cocoapods-packager/builder.rb', line 184 def xcodebuild(defines = '', args = '', build_dir = 'build') command = "xcodebuild #{defines} CONFIGURATION_BUILD_DIR=#{build_dir} clean build #{args} -configuration Release -target Pods -project #{@sandbox_root}/Pods.xcodeproj 2>&1" output = `#{command}`.lines.to_a if $?.exitstatus != 0 puts UI::BuildFailedReport.report(command, output) # Note: We use `Process.exit` here because it fires a `SystemExit` # exception, which gives the caller a chance to clean up before the # process terminates. # # See http://ruby-doc.org/core-1.9.3/Process.html#method-c-exit Process.exit end end |