build.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #!/usr/bin/env python
  2. import argparse
  3. import json
  4. import os
  5. import shutil
  6. import sys
  7. import tempfile
  8. def main(argv=None):
  9. parser = argparse.ArgumentParser()
  10. parser.add_argument('--include', action='append', required=True)
  11. parser.add_argument('--externs', action='append', default=['externs/common.js'])
  12. parser.add_argument('--minify', action='store_true', default=False)
  13. parser.add_argument('--output', default='../build/three.js')
  14. parser.add_argument('--sourcemaps', action='store_true', default=False)
  15. args = parser.parse_args()
  16. output = args.output
  17. # merge
  18. print(' * Building ' + output)
  19. # enable sourcemaps support
  20. if args.sourcemaps:
  21. sourcemap = '../build/three.js.map'
  22. sourcemapping = '\n//@ sourceMappingURL=' + sourcemap
  23. sourcemapargs = ' --create_source_map ' + sourcemap + ' --source_map_format=V3'
  24. else:
  25. sourcemap = sourcemapping = sourcemapargs = ''
  26. fd, path = tempfile.mkstemp()
  27. tmp = open(path, 'w')
  28. sources = []
  29. for include in args.include:
  30. with open('includes/' + include + '.json','r') as f: files = json.load(f)
  31. for filename in files:
  32. sources.append(filename)
  33. with open(filename, 'r') as f: tmp.write(f.read())
  34. tmp.close()
  35. # save
  36. if args.minify is False:
  37. shutil.copy(path, output)
  38. os.chmod(output, 0o664); # temp files would usually get 0600
  39. else:
  40. externs = ' --externs '.join(args.externs)
  41. source = ' '.join(sources)
  42. 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, source, output, sourcemapargs)
  43. os.system(cmd)
  44. # header
  45. with open(output,'r') as f: text = f.read()
  46. with open(output,'w') as f: f.write('// three.js - http://github.com/mrdoob/three.js\n' + text + sourcemapping)
  47. os.close(fd)
  48. os.remove(path)
  49. if __name__ == "__main__":
  50. main()