#!/usr/bin/ruby require "FileUtils"; @flex_dir = "/Applications/Adobe\\ Flash\\ Builder\\ Beta/sdks/4.0.0"; @default_package = "com.roguedevelopment.catalyst"; def compileAll() files = Dir.glob("*.fxp"); files.each do |file| compileFxg( file ); end end def compileFxg( file ) puts "=== #{file}"; temp_dir = extractZip( file ) tailPackage = file.gsub(/\.fxp/,"") fullPackage = "#{@default_package}.#{tailPackage}" package_dir = createPackageDir( temp_dir, fullPackage ) copyMainToPackage( temp_dir, package_dir) copyComponentsToPackage( temp_dir, package_dir) removeOldSource(temp_dir) alterSourceCodeToPackageStructure(package_dir, fullPackage) compileSwc(temp_dir, package_dir, fullPackage, "#{tailPackage}.swc") deleteTempDir( temp_dir ) puts "Done!" end def deleteTempDir( temp_dir ) puts "Deleting temp dir" FileUtils.rmtree(temp_dir) end def compileSwc( dir , package_dir, package, swc_name) createSwcConfig( dir , package_dir, package, swc_name) puts " Invoking compc -load-config+=swcconfig.xml" puts `#{@flex_dir}/bin/compc -load-config+=swcconfig.xml` end def createSwcConfig( dir , package_dir, package, swc_name) puts " Creating swcconfig.xml" config = File.new("swcconfig.xml","w") config.write("\n") config.write("\n") config.write(" \n") config.write(" #{dir}/src \n") config.write(" \n") config.write("\n") config.write("#{swc_name}\n") config.write("\n") files = Dir.glob("#{package_dir}/*") files.each do |file| classname = File.basename(file).gsub(/\.[^.]*$/,"") config.write(" #{package}.#{classname}\n") end config.write("\n") config.write("\n") config.close end # copies the Main.mxml to the new package directory def copyMainToPackage( temp_dir, package_dir) puts " Copying Main.mxml" FileUtils.cp("#{temp_dir}/src/Main.mxml", "#{package_dir}") end def alterSourceCodeToPackageStructure( package_dir , package) files = Dir.glob("#{package_dir}/*") files.each do |file| fixPackageName(file, package) end end def fixPackageName( file , package) puts " Fixing package names in #{file}" tempFileName = "#{file}.tmp" tempFile = File.new(tempFileName, "w") File.open(file).each do |line| newLine = line.gsub(/([^.])components\./, "\\1#{package}.") tempFile.syswrite(newLine) end tempFile.close FileUtils.rm( file ) FileUtils.mv( tempFileName, file) end def copyComponentsToPackage(temp_dir, package_dir) files = Dir.glob("#{temp_dir}/src/components/*") files.each do |file| puts " Copying #{file} -> #{package_dir}" FileUtils.cp(file, "#{package_dir}") end end def removeOldSource( temp_dir ) puts " Removing old source locations" FileUtils.rmtree( "#{temp_dir}/src/components") FileUtils.rm( "#{temp_dir}/src/Main.mxml") end def extractZip( file ) tempDir = "#{file}.tmp"; puts " Extracting to #{tempDir}" FileUtils.rmtree(tempDir) if File::exists?(tempDir) FileUtils.mkdir( tempDir ); FileUtils.chdir( tempDir ) `unzip ../#{file}` FileUtils.chdir( ".." ) tempDir end def createPackageDir( tempDir , package) dir = "#{tempDir}/src" package.split(".").each do |pathPart| dir = "#{dir}/#{pathPart}" puts " Creating directory #{dir}" FileUtils.mkdir(dir) end dir end compileAll(); #FileUtils.mkdir("temp"); #FileUtils.chdir("temp");