forked from mrdoob/three.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild.js
177 lines (142 loc) · 4.02 KB
/
build.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
var fs = require("fs");
var path = require("path");
var argsparser = require( "argsparser" );
var uglify = require("uglify-js");
function merge(files){
"use strict";
var buffer = [];
for (var i = 0,il = files.length;i<il;i++){
var fileName = path.join("src", files[i]);
buffer.push(fs.readFileSync(fileName,'utf8'));
}
return buffer.join("");
}
function output(text, filename){
"use strict";
var file = path.join('build', filename);
fs.writeFileSync(file,text,'utf8');
}
function compress(text, fname_externs){
/*
externs = ""
if fname_externs:
externs = "--externs %s.js" % fname_externs
in_tuple = tempfile.mkstemp()
with os.fdopen(in_tuple[0], 'w') as handle:
handle.write(text)
out_tuple = tempfile.mkstemp()
os.system("java -jar compiler/compiler.jar --warning_level=VERBOSE --jscomp_off=globalThis --jscomp_off=checkTypes --externs externs_common.js %s --language_in=ECMASCRIPT5_STRICT --js %s --js_output_file %s" % (externs, in_tuple[1], out_tuple[1]))
with os.fdopen(out_tuple[0], 'r') as handle:
compressed = handle.read()
os.unlink(in_tuple[1])
os.unlink(out_tuple[1])
return compressed*/
"use strict";
return uglify(text);
}
function addHeader(text, endFilename){
"use strict";
return "// " + endFilename + " - http://github.com/mrdoob/three.js\n" + text;
}
function makeDebug(text){
"use strict";
var position = 0;
while (true){
position = text.indexOf("/* DEBUG", position);
if (position == -1){
break;
}
text = text.substring(0,position) + text.substring(position+8);
position = text.find("*/", position);
text = text.substring(0,position) + text.substring(position+2);
}
return text;
}
function buildLib(files, debug, minified, filename, fname_externs){
"use strict";
var text = merge(files);
if (debug){
text = makeDebug(text);
filename = filename + 'Debug';
}
var folder;
if (filename == "Three"){
folder = '';
} else {
folder = 'custom/';
}
filename = filename + '.js';
//print("=" * 40)
console.log("========================================");
console.log("Compiling " + filename);
//print("=" * 40)
console.log("========================================");
if (minified){
text = compress(text, fname_externs);
}
output(addHeader(text, filename), folder + filename);
}
function buildIncludes(files, filename){
"use strict";
//var template = "\t\t<script src='../src/%s'></script>";
//var text = "\n".join(template % f for f in files)
var text = [];
for (var i = 0,il = files.length;i<il;i++){
text.push("\t\t<script src='../src/" + files[i] + "'></script>");
}
output(text.join("\n"), filename + '.js');
}
function getFileNames(){
"use strict";
var fileName = "utils/files.json";
var data = JSON.parse(fs.readFileSync(fileName,'utf8'));
return data;
}
function parse_args(){
"use strict";
//parse
var returnValue = argsparser.parse();
/*
# If no arguments have been passed, show the help message and exit
if len(sys.argv) == 1:
parser.print_help()
sys.exit(1)
*/
for (var i in returnValue){
if (i.substring(0,2) == "--"){
returnValue[i.substring(2)] = returnValue[i];
delete returnValue[i];
} else {
delete returnValue[i];
}
}
return returnValue;
}
function main(){
"use strict";
var args = parse_args();
var debug = args.debug;
var minified = args.minified;
var files = getFileNames();
var config = [
['Three', 'includes', '', files["common"].concat(files["extras"]), args.common],
['ThreeCanvas', 'includes_canvas', '', files["canvas"], args.canvas],
['ThreeWebGL', 'includes_webgl', '', files["webgl"], args.webgl],
['ThreeExtras', 'includes_extras', 'externs_extras', files["extras"], args.extras]
];
for (var i = 0,il = config.length;i<il;i++){
var chosenConfig = config[i],
fname_lib = chosenConfig[0],
fname_inc = chosenConfig[1],
fname_externs = chosenConfig[2],
files = chosenConfig[3],
enabled = chosenConfig[4];
if (enabled || args.all){
buildLib(files, debug, minified, fname_lib, fname_externs);
if (args.includes){
buildIncludes(files, fname_inc);
}
}
}
}
main();