build.py 2.1 KB

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