mirror of
https://github.com/Doodle3D/Doodle3D-Slicer.git
synced 2024-11-30 09:24:57 +01:00
108 lines
3.3 KiB
Python
108 lines
3.3 KiB
Python
|
#!/usr/bin/env python
|
||
|
|
||
|
import sys
|
||
|
|
||
|
if sys.version_info < (2, 7):
|
||
|
print("This script requires at least Python 2.7.")
|
||
|
print("Please, update to a newer version: http://www.python.org/download/releases/")
|
||
|
# exit()
|
||
|
|
||
|
import argparse
|
||
|
import json
|
||
|
import os
|
||
|
import shutil
|
||
|
import tempfile
|
||
|
|
||
|
from io import open
|
||
|
|
||
|
def main(argv=None):
|
||
|
|
||
|
parser = argparse.ArgumentParser()
|
||
|
parser.add_argument('--include', action='append', required=True)
|
||
|
parser.add_argument('--externs', action='append', default=['externs/common.js'])
|
||
|
parser.add_argument('--amd', action='store_true', default=False)
|
||
|
parser.add_argument('--minify', action='store_true', default=False)
|
||
|
parser.add_argument('--output', default='../../build/three.js')
|
||
|
parser.add_argument('--sourcemaps', action='store_true', default=False)
|
||
|
|
||
|
args = parser.parse_args()
|
||
|
|
||
|
output = args.output
|
||
|
|
||
|
# merge
|
||
|
|
||
|
print(' * Building ' + output)
|
||
|
|
||
|
# enable sourcemaps support
|
||
|
|
||
|
if args.sourcemaps:
|
||
|
sourcemap = output + '.map'
|
||
|
sourcemapping = '\n//@ sourceMappingURL=' + sourcemap
|
||
|
sourcemapargs = ' --create_source_map ' + sourcemap + ' --source_map_format=V3'
|
||
|
else:
|
||
|
sourcemap = sourcemapping = sourcemapargs = ''
|
||
|
|
||
|
fd, path = tempfile.mkstemp()
|
||
|
tmp = open(path, 'w', encoding='utf-8')
|
||
|
sources = []
|
||
|
|
||
|
if args.amd:
|
||
|
tmp.write('( function ( root, factory ) {\n\n\tif ( typeof define === \'function\' && define.amd ) {\n\n\t\tdefine( [ \'exports\' ], factory );\n\n\t} else if ( typeof exports === \'object\' ) {\n\n\t\tfactory( exports );\n\n\t} else {\n\n\t\tfactory( root );\n\n\t}\n\n}( this, function ( exports ) {\n\n')
|
||
|
|
||
|
for include in args.include:
|
||
|
with open('includes/' + include + '.json','r', encoding='utf-8') as f:
|
||
|
files = json.load(f)
|
||
|
for filename in files:
|
||
|
tmp.write('// File:' + filename)
|
||
|
tmp.write(u'\n\n')
|
||
|
filename = '../../' + filename
|
||
|
sources.append(filename)
|
||
|
with open(filename, 'r', encoding='utf-8') as f:
|
||
|
if filename.endswith(".glsl"):
|
||
|
tmp.write('THREE.ShaderChunk[ \'' + os.path.splitext(os.path.basename(filename))[0] + '\'] = "')
|
||
|
tmp.write(f.read().replace('\n','\\n'))
|
||
|
tmp.write(u'";\n\n')
|
||
|
else:
|
||
|
tmp.write(f.read())
|
||
|
tmp.write(u'\n')
|
||
|
|
||
|
if args.amd:
|
||
|
tmp.write('exports.THREE = THREE;\n\n} ) );')
|
||
|
|
||
|
tmp.close()
|
||
|
|
||
|
# save
|
||
|
|
||
|
if args.minify is False:
|
||
|
shutil.copy(path, output)
|
||
|
os.chmod(output, 0o664) # temp files would usually get 0600
|
||
|
|
||
|
else:
|
||
|
backup = ''
|
||
|
if os.path.exists(output):
|
||
|
with open(output, 'r', encoding='utf-8') as f: backup = f.read()
|
||
|
os.remove(output)
|
||
|
|
||
|
externs = ' --externs '.join(args.externs)
|
||
|
source = ' '.join(sources)
|
||
|
cmd = 'java -jar compiler/compiler.jar --warning_level=VERBOSE --jscomp_off=globalThis --externs %s --jscomp_off=checkTypes --language_in=ECMASCRIPT5_STRICT --js %s --js_output_file %s %s' % (externs, path, output, sourcemapargs)
|
||
|
os.system(cmd)
|
||
|
|
||
|
# header
|
||
|
|
||
|
if os.path.exists(output):
|
||
|
with open(output, 'r', encoding='utf-8') as f: text = f.read()
|
||
|
with open(output, 'w', encoding='utf-8') as f: f.write('// threejs.org/license\n' + text + sourcemapping)
|
||
|
else:
|
||
|
print("Minification with Closure compiler failed. Check your Java runtime version.")
|
||
|
with open(output, 'w', encoding='utf-8') as f: f.write(backup)
|
||
|
|
||
|
os.close(fd)
|
||
|
os.remove(path)
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
script_dir = os.path.dirname(os.path.abspath(__file__))
|
||
|
os.chdir(script_dir)
|
||
|
main()
|