1 | //START of the "main" part of the script. |
---|
2 | //This is the entry point for this script file. |
---|
3 | load("buildUtil.js"); |
---|
4 | load("buildUtilXd.js"); |
---|
5 | |
---|
6 | var result = "ERROR"; |
---|
7 | |
---|
8 | var buildDirectory = new String(arguments[0]); |
---|
9 | var depList = new String(arguments[1]); |
---|
10 | var provideList = new String(arguments[2]); |
---|
11 | var version = new String(arguments[3]); |
---|
12 | var xdDojoUrl = new String(arguments[4]); |
---|
13 | |
---|
14 | depList = depList.split(","); |
---|
15 | |
---|
16 | //Check if there were no provideList (the caller can send string "null" |
---|
17 | //to indicate that the command line parameter is empty. We need some string |
---|
18 | //to make sure all the arguments are in the right spot. |
---|
19 | if(provideList == "null"){ |
---|
20 | provideList = "[]"; |
---|
21 | }else{ |
---|
22 | provideList = provideList.split(","); |
---|
23 | provideList = '["' + provideList.join('","') + '"]'; |
---|
24 | } |
---|
25 | |
---|
26 | var dependencyResult; |
---|
27 | eval('dependencyResult = {depList: ["' + depList.join('","') + '"], provideList: ' + provideList + '};'); |
---|
28 | |
---|
29 | //Make sure we are dealing with JS files and that the paths are not outside |
---|
30 | //of the working area. Do this to discourage fetching arbitrary files from |
---|
31 | //the server. |
---|
32 | var deps = dependencyResult.depList; |
---|
33 | var isInputOk = true; |
---|
34 | for(var i = 0; i < deps.length; i++){ |
---|
35 | var matches = deps[i].match(/\.\./g); |
---|
36 | if((matches && matches.length > 1) || !deps[i].match(/\.js$/) || deps[i].indexOf(0) == '/'){ |
---|
37 | print("Error: Invalid file set."); |
---|
38 | isInputOk = false; |
---|
39 | break; |
---|
40 | } |
---|
41 | } |
---|
42 | |
---|
43 | if(isInputOk){ |
---|
44 | //Load dojo (needed for string interning) |
---|
45 | djConfig={ |
---|
46 | baseRelativePath: "../" |
---|
47 | }; |
---|
48 | load('../dojo.js'); |
---|
49 | dojo.require("dojo.string.extras"); |
---|
50 | dojo.require("dojo.crypto.MD5"); |
---|
51 | |
---|
52 | var buildSigDir = dojo.crypto.MD5.compute(depList.sort().join(","), dojo.crypto.outputTypes.Hex); |
---|
53 | try{ |
---|
54 | //xxx createLayerContents is broken: need kwargs? it is optional but probably should provide it. |
---|
55 | var contents = buildUtil.createLayerContents(dependencyResult.depList, dependencyResult.provideList, version); |
---|
56 | var compressedContents = ""; |
---|
57 | var prefixes = [["dojo", "src"]]; |
---|
58 | |
---|
59 | //Make sure any dojo.requireLocalization calls are modified |
---|
60 | //so that they inform the loader of valid locales that can be loaded. |
---|
61 | contents = buildUtil.modifyRequireLocalization(contents, prefixes); |
---|
62 | |
---|
63 | //Intern strings. |
---|
64 | contents = buildUtil.interningRegexpMagic("xdomain", contents, djConfig.baseRelativePath, prefixes, [], true); |
---|
65 | |
---|
66 | //Set the xdomain dojo url |
---|
67 | if(xdDojoUrl){ |
---|
68 | contents = buildUtilXd.setXdDojoConfig(contents, xdDojoUrl); |
---|
69 | } |
---|
70 | |
---|
71 | //Compress code. |
---|
72 | compressedContents = buildUtil.optimizeJs("dojo.js", contents, "", "shrinksafe"); |
---|
73 | |
---|
74 | //Add copyright |
---|
75 | var copyright = fileUtil.readFile("copyright.txt"); |
---|
76 | var buildNotice = fileUtil.readFile("build_notice.txt"); |
---|
77 | contents = copyright + buildNotice + contents; |
---|
78 | compressedContents = copyright + buildNotice + compressedContents; |
---|
79 | |
---|
80 | //Prep cache location |
---|
81 | var buildCachePath = buildDirectory + "/" + buildSigDir + "/"; |
---|
82 | |
---|
83 | //Create needed directories for cache location. |
---|
84 | var dirFile = new java.io.File(buildCachePath + "compressed"); |
---|
85 | var dirsOk = dirFile.mkdirs(); |
---|
86 | |
---|
87 | result = "dirFile: " + dirFile.getAbsolutePath() + ", dirsOK: " + dirsOk; |
---|
88 | |
---|
89 | //Create build contents file |
---|
90 | var buildContents = dependencyResult.provideList.sort().join("\n"); |
---|
91 | |
---|
92 | //Save files to disk |
---|
93 | fileUtil.saveUtf8File(buildCachePath + "dojo.js", contents); |
---|
94 | fileUtil.saveUtf8File(buildCachePath + "compressed/dojo.js", compressedContents); |
---|
95 | fileUtil.saveUtf8File(buildCachePath + "build.txt", buildContents); |
---|
96 | |
---|
97 | result = "OK"; |
---|
98 | }catch(e){ |
---|
99 | result = "ERROR: " + e; |
---|
100 | } |
---|
101 | |
---|
102 | print(result); |
---|
103 | } |
---|