5 $osgLibs = ['osgFX', 'osgParticle', 'osg', 'osgGA', 'osgText', 'osgUtil', 'osgSim', 'osgViewer', 'osgDB']
6 $osgPlugins = ['ac', 'osg', 'freetype', 'imageio', 'rgb', 'txf', 'mdl', '3ds', 'dds']
8 def runOsgVersion(option)
9 env = "export DYLD_LIBRARY_PATH=#{Dir.pwd}/dist/lib"
10 bin = Dir.pwd + "/dist/bin/osgversion"
11 return `#{env}; #{bin} --#{option}`.chomp
14 osgVersion = runOsgVersion('version-number')
15 $osgSoVersion=runOsgVersion('so-number')
16 $openThreadsSoVersion=runOsgVersion('openthreads-soversion-number')
18 $codeSignIdentity = ENV['FG_CODESIGN_IDENTITY']
19 puts "Code signing identity is #{$codeSignIdentity}"
21 puts "osgVersion=#{osgVersion}, so-number=#{$osgSoVersion}"
23 $alutSourcePath='/Library/Frameworks/ALUT.framework'
25 $svnLibs = ['svn_client', 'svn_wc', 'svn_delta', 'svn_diff', 'svn_ra',
26 'svn_ra_local', 'svn_repos', 'svn_fs', 'svn_fs_fs', 'svn_fs_util',
27 'svn_ra_svn', 'svn_subr', 'svn_ra_neon']
29 def fix_install_names(object)
30 #puts "fixing install names for #{object}"
33 oldName = "lib#{l}.#{$osgSoVersion}.dylib"
34 newName = "@executable_path/../Frameworks/#{oldName}"
35 `install_name_tool -change #{oldName} #{newName} #{object}`
38 oldName = "libOpenThreads.#{$openThreadsSoVersion}.dylib"
39 newName= "@executable_path/../Frameworks/#{oldName}"
40 `install_name_tool -change #{oldName} #{newName} #{object}`
42 alutBundlePath = "@executable_path/../Frameworks/Alut.framework"
43 alutLib = "Versions/A/ALUT"
44 `install_name_tool -change #{$alutSourcePath}/#{alutLib} #{alutBundlePath}/#{alutLib} #{object}`
47 $prefixDir=Dir.pwd + "/dist"
48 dmgDir=Dir.pwd + "/image"
49 srcDir=Dir.pwd + "/flightgear"
51 def fix_svn_install_names(object)
53 fileName = "lib#{l}-1.0.dylib"
54 oldName = "#{$prefixDir}/lib/#{fileName}"
55 newName = "@executable_path/../Frameworks/#{fileName}"
56 `install_name_tool -change #{oldName} #{newName} #{object}`
60 puts "Erasing previous image dir"
63 bundle=dmgDir + "/FlightGear.app"
64 contents=bundle + "/Contents"
65 macosDir=contents + "/MacOS"
66 $frameworksDir=contents +"/Frameworks"
67 resourcesDir=contents+"/Resources"
68 osgPluginsDir=contents+"/PlugIns/osgPlugins-#{osgVersion}"
69 volName="\"FlightGear Nightly Build\""
72 puts "Copying Subversion client libraries"
74 libFile = "lib#{l}-1.0.dylib"
75 path = "#{$frameworksDir}/#{libFile}"
76 `cp #{$prefixDir}/lib/#{libFile} #{$frameworksDir}`
77 fix_svn_install_names(path)
78 `install_name_tool -id #{libFile} #{path}`
83 puts "Signing #{path}"
84 `codesign -s "#{$codeSignIdentity}" #{path}`
87 fgVersion = File.read("#{srcDir}/version").strip
89 dmgPath = Dir.pwd + "/fg_mac_nightly_#{fgVersion}.dmg"
91 puts "Creating directory structure"
92 `mkdir -p #{macosDir}`
93 `mkdir -p #{$frameworksDir}`
94 `mkdir -p #{resourcesDir}`
95 `mkdir -p #{osgPluginsDir}`
97 puts "Copying binaries"
98 bins = ['fgfs', 'fgjs', 'fgcom']
100 if !File.exist?("#{$prefixDir}/bin/#{b}")
104 outPath = "#{macosDir}/#{b}"
105 `cp #{$prefixDir}/bin/#{b} #{outPath}`
106 fix_install_names(outPath)
107 fix_svn_install_names(outPath)
111 puts "copying libraries"
113 libFile = "lib#{l}.#{$osgSoVersion}.dylib"
114 `cp #{$prefixDir}/lib/#{libFile} #{$frameworksDir}`
115 fix_install_names("#{$frameworksDir}/#{libFile}")
118 # and not forgetting OpenThreads
119 libFile = "libOpenThreads.#{$openThreadsSoVersion}.dylib"
120 `cp #{$prefixDir}/lib/#{libFile} #{$frameworksDir}`
122 $osgPlugins.each do |p|
123 pluginFile = "osgdb_#{p}.so"
124 `cp #{$prefixDir}/lib/osgPlugins-#{osgVersion}/#{pluginFile} #{osgPluginsDir}`
125 fix_install_names("#{osgPluginsDir}/#{pluginFile}")
131 # must copy frameworks using ditto
132 `ditto #{$alutSourcePath} #{$frameworksDir}/ALUT.framework`
135 template = File.read("#{srcDir}/package/mac/nightly.plist.in")
136 output = ERB.new(template).result(binding)
138 File.open("#{contents}/Info.plist", 'w') { |f|
142 `cp #{srcDir}/package/mac/nightly-readme.rtf #{dmgDir}/ReadMe.rtf`
143 `cp #{srcDir}/package/mac/FlightGear.icns #{resourcesDir}/FlightGear.icns`
144 `cp #{srcDir}/COPYING #{dmgDir}`
146 # Macflightgear launcher
147 if File.exist?("FlightGearOSX")
148 puts "Copying Macflightgear launcher files"
149 Dir.chdir "FlightGearOSX" do
150 `cp FlightGear #{macosDir}`
151 `rsync -a *.rb *.lproj *.sh *.tiff #{resourcesDir}`
152 code_sign("#{macosDir}/FlightGear")
156 if File.exist?("#{$prefixDir}/bin/fgcom-data")
157 puts "Copying FGCom data files"
158 `ditto #{$prefixDir}/bin/fgcom-data #{resourcesDir}/fgcom-data`
163 createArgs = "-format UDBZ -imagekey bzip2-level=9 -quiet -volname #{volName}"
166 `hdiutil create -srcfolder #{dmgDir} #{createArgs} #{dmgPath}`