module Symbols
Public Class Methods
alias_symbol(sym, pod_name)
click to toggle source
# File lib/cocoapods-packager/mangle.rb, line 26 def alias_symbol(sym, pod_name) pod_name = pod_name.tr('-', '_') sym + "=Pod#{pod_name}_" + sym end
classes_from_symbols(syms)
click to toggle source
# File lib/cocoapods-packager/symbols.rb, line 21 def classes_from_symbols(syms) classes = syms.select { |klass| klass[/OBJC_CLASS_\$_/] } classes = classes.uniq classes.map! { |klass| klass.gsub(/^.*\$_/, '') } end
constants_from_symbols(syms)
click to toggle source
# File lib/cocoapods-packager/symbols.rb, line 27 def constants_from_symbols(syms) consts = syms.select { |const| const[/ S /] } consts = consts.select { |const| const !~ /OBJC|\.eh/ } consts = consts.uniq consts = consts.map! { |const| const.gsub(/^.* _/, '') } other_consts = syms.select { |const| const[/ T /] } other_consts = other_consts.uniq other_consts = other_consts.map! { |const| const.gsub(/^.* _/, '') } consts + other_consts end
mangle_for_pod_dependencies(pod_name, sandbox_root)
click to toggle source
performs symbol aliasing
for each dependency:
- determine symbols for classes and global constants - alias each symbol to Pod#{pod_name}_#{symbol} - put defines into `GCC_PREPROCESSOR_DEFINITIONS` for passing to Xcode
# File lib/cocoapods-packager/mangle.rb, line 10 def mangle_for_pod_dependencies(pod_name, sandbox_root) pod_libs = Dir.glob("#{sandbox_root}/build/lib*.a").select do |file| file !~ /lib#{pod_name}.a$/ end dummy_alias = alias_symbol "PodsDummy_#{pod_name}", pod_name all_syms = [dummy_alias] pod_libs.each do |pod_lib| syms = Symbols.symbols_from_library(pod_lib) all_syms += syms.map! { |sym| alias_symbol sym, pod_name } end "GCC_PREPROCESSOR_DEFINITIONS='$(inherited) #{all_syms.uniq.join(' ')}'" end
symbols_from_library(library)
click to toggle source
# File lib/cocoapods-packager/symbols.rb, line 2 def symbols_from_library(library) syms = `nm -defined-only -extern-only #{library}`.split("\n") result = classes_from_symbols(syms) result += constants_from_symbols(syms) result.select do |e| case e when 'llvm.cmdline', 'llvm.embedded.module', '__clang_at_available_requires_core_foundation_framework' false else true end end end
Private Instance Methods
alias_symbol(sym, pod_name)
click to toggle source
# File lib/cocoapods-packager/mangle.rb, line 26 def alias_symbol(sym, pod_name) pod_name = pod_name.tr('-', '_') sym + "=Pod#{pod_name}_" + sym end
classes_from_symbols(syms)
click to toggle source
# File lib/cocoapods-packager/symbols.rb, line 21 def classes_from_symbols(syms) classes = syms.select { |klass| klass[/OBJC_CLASS_\$_/] } classes = classes.uniq classes.map! { |klass| klass.gsub(/^.*\$_/, '') } end
constants_from_symbols(syms)
click to toggle source
# File lib/cocoapods-packager/symbols.rb, line 27 def constants_from_symbols(syms) consts = syms.select { |const| const[/ S /] } consts = consts.select { |const| const !~ /OBJC|\.eh/ } consts = consts.uniq consts = consts.map! { |const| const.gsub(/^.* _/, '') } other_consts = syms.select { |const| const[/ T /] } other_consts = other_consts.uniq other_consts = other_consts.map! { |const| const.gsub(/^.* _/, '') } consts + other_consts end
mangle_for_pod_dependencies(pod_name, sandbox_root)
click to toggle source
performs symbol aliasing
for each dependency:
- determine symbols for classes and global constants - alias each symbol to Pod#{pod_name}_#{symbol} - put defines into `GCC_PREPROCESSOR_DEFINITIONS` for passing to Xcode
# File lib/cocoapods-packager/mangle.rb, line 10 def mangle_for_pod_dependencies(pod_name, sandbox_root) pod_libs = Dir.glob("#{sandbox_root}/build/lib*.a").select do |file| file !~ /lib#{pod_name}.a$/ end dummy_alias = alias_symbol "PodsDummy_#{pod_name}", pod_name all_syms = [dummy_alias] pod_libs.each do |pod_lib| syms = Symbols.symbols_from_library(pod_lib) all_syms += syms.map! { |sym| alias_symbol sym, pod_name } end "GCC_PREPROCESSOR_DEFINITIONS='$(inherited) #{all_syms.uniq.join(' ')}'" end
symbols_from_library(library)
click to toggle source
# File lib/cocoapods-packager/symbols.rb, line 2 def symbols_from_library(library) syms = `nm -defined-only -extern-only #{library}`.split("\n") result = classes_from_symbols(syms) result += constants_from_symbols(syms) result.select do |e| case e when 'llvm.cmdline', 'llvm.embedded.module', '__clang_at_available_requires_core_foundation_framework' false else true end end end