import os import sys import shutil import zipfile import json from lib import tools_lib as Tools def PrintInfo (message): print ('INFO: ' + message) def PrintError (message): print ('ERROR: ' + message) def GetVersion (rootDir): packageJson = None with open (os.path.join (rootDir, 'package.json')) as packageJsonFile: packageJson = json.load (packageJsonFile) return packageJson['version'] def CreateDestinationDir (config, rootDir, websiteDir, version, testBuild): if not os.path.exists (websiteDir): os.makedirs (websiteDir) if not os.path.exists (os.path.join (websiteDir, 'o3dv')): os.makedirs (os.path.join (websiteDir, 'o3dv')) shutil.copy2 (os.path.join (rootDir, 'website', 'index.html'), websiteDir) shutil.copy2 (os.path.join (rootDir, 'website', 'embed.html'), websiteDir) shutil.copy2 (os.path.join (rootDir, 'website', 'robots.txt'), websiteDir) shutil.copy2 (os.path.join (rootDir, 'build', 'o3dv.website.min.js'), os.path.join (websiteDir, 'o3dv')) shutil.copy2 (os.path.join (rootDir, 'build', 'o3dv.website.min.css'), os.path.join (websiteDir, 'o3dv')) shutil.copytree (os.path.join (rootDir, 'libs'), os.path.join (websiteDir, 'libs')) shutil.copytree (os.path.join (rootDir, 'website', 'assets'), os.path.join (websiteDir, 'assets')) shutil.copytree (os.path.join (rootDir, 'website', 'css', 'Quicksand'), os.path.join (websiteDir, 'o3dv', 'Quicksand')) shutil.copytree (os.path.join (rootDir, 'website', 'css', 'O3DVIcons'), os.path.join (websiteDir, 'o3dv', 'O3DVIcons')) shutil.copytree (os.path.join (rootDir, 'website', 'info'), os.path.join (websiteDir, 'info')) websiteLibFiles = config['website_lib_files'] websiteFiles = [ 'o3dv/o3dv.website.min.css', 'o3dv/o3dv.website.min.js' ] htmlFileNames = [ 'index.html', 'embed.html', os.path.join ('info', 'index.html'), os.path.join ('info', 'cookies.html'), os.path.join ('info', 'faq.html') ] for htmlFileName in htmlFileNames: htmlFilePath = os.path.join (websiteDir, htmlFileName) replacer = Tools.TokenReplacer (htmlFilePath, False) replacer.ReplaceTokenFileLinks ('', '', websiteLibFiles, version) replacer.ReplaceTokenFileLinks ('', '', websiteFiles, version) initScriptContent = '' initScriptContent += '' embedInitScriptContent = '' embedInitScriptContent += '' replacer.ReplaceTokenContent ('', '', initScriptContent) replacer.ReplaceTokenContent ('', '', embedInitScriptContent) metaFile = os.path.join (rootDir, 'tools', 'website_meta_data.txt') if os.path.exists (metaFile): metaContent = Tools.GetFileContent (metaFile) replacer.ReplaceTokenContent ('', '', metaContent) analyticsFile = os.path.join (rootDir, 'tools', 'website_analytics_data.txt') if os.path.exists (analyticsFile) and not testBuild: analyticsContent = Tools.GetFileContent (analyticsFile) replacer.ReplaceTokenContent ('', '', analyticsContent) scriptFile = os.path.join (rootDir, 'tools', 'website_script_data.txt') if os.path.exists (scriptFile): scriptContent = Tools.GetFileContent (scriptFile) replacer.ReplaceTokenContent ('', '', scriptContent) introFile = os.path.join (rootDir, 'tools', 'website_intro_data.txt') if os.path.exists (introFile): introContent = Tools.GetFileContent (introFile) replacer.ReplaceTokenContent ('', '', introContent) replacer.WriteToFile (htmlFilePath) def CreatePackage (rootDir, websiteDir, packageDir, version): if not os.path.exists (packageDir): os.makedirs (packageDir) zipPath = os.path.join (packageDir, 'o3dv_' + version + '.zip') zip = zipfile.ZipFile (zipPath, mode = 'w', compression = zipfile.ZIP_DEFLATED) for lib in os.listdir (os.path.join (websiteDir, 'libs', 'loaders')): zip.write (os.path.join (websiteDir, 'libs', 'loaders', lib), 'libs/loaders/' + lib) zip.write (os.path.join (rootDir, 'build', 'o3dv.min.js'), 'o3dv.min.js') zip.write (os.path.join (rootDir, 'LICENSE.md'), 'o3dv.license.md') zip.close () return True def Main (argv): toolsDir = os.path.dirname (os.path.abspath (__file__)) rootDir = os.path.dirname (toolsDir) os.chdir (rootDir) testBuild = False buildDir = os.path.join (rootDir, 'build', 'final') if len (argv) >= 2 and argv[1] == 'test': testBuild = True buildDir = os.path.join (rootDir, 'build', 'test') PrintInfo ('Creating test build.') websiteDir = os.path.join (buildDir, 'website') packageDir = os.path.join (buildDir, 'package') if os.path.exists (buildDir): shutil.rmtree (buildDir) config = None with open (os.path.join (toolsDir, 'config.json')) as configJson: config = json.load (configJson) version = GetVersion (rootDir) PrintInfo ('Create build directory') CreateDestinationDir (config, rootDir, websiteDir, version, testBuild) PrintInfo ('Create package.') packageResult = CreatePackage (rootDir, websiteDir, packageDir, version) if not packageResult: PrintError ('Create package failed.') return 1 return 0 sys.exit (Main (sys.argv))