Ticket #2386: 2386.patch

File 2386.patch, 11.8 kB (added by jburke, 22 months ago)

In progress patch, does not include i18n flattening or compression.

  • buildscripts/makeDojoJs.js

     
    1010 
    1111var result = buildUtil.makeDojoJs(buildUtil.loadDependencyList(profileFile), version); 
    1212 
    13 //Save the dojo.js contents. 
    14 buildUtil.saveFile(releaseDir + "/" + dojoFileName, result.dojoContents); 
     13//Save the dojo.js contents. It is always the first result. 
     14buildUtil.saveFile(releaseDir + "/" + dojoFileName, result[0].contents); 
    1515 
     16//Save the other layers, if there are any. 
     17for(var i = 1; i < result.length; i++){ 
     18        buildUtil.saveFile(releaseDir + "/" + result[i].layerName, result[i].contents); 
     19} 
     20 
    1621//Save the dependency list to build.txt 
    17 buildUtil.saveFile(releaseDir + "/build.txt", "Files baked into this build:" + lineSeparator + result.resourceDependencies.join(lineSeparator)); 
     22var buildText = "Files baked into this build:" + lineSeparator; 
     23for(var i = 0; i < result.length; i++){ 
     24        buildText += lineSeparator + result[i].layerName + ":" + lineSeparator; 
     25        buildText += result[i].depList.join(lineSeparator) + lineSeparator; 
     26} 
    1827 
    19 print("Files baked into this build:" + lineSeparator + result.resourceDependencies.join(lineSeparator)); 
     28buildUtil.saveFile(releaseDir + "/build.txt", buildText); 
    2029 
     30print(buildText); 
    2131 
  • buildscripts/buildUtil.js

     
    8282        dojo.hostenv.name_ = hostenvType; 
    8383         
    8484        //Override dojo.provide to get a list of resource providers. 
    85         var provideList = []; 
     85        var currentProvideList = []; 
    8686        dojo._provide = dojo.provide; 
    8787        dojo.provide = function(resourceName){ 
    88                 provideList.push(resourceName); 
     88                currentProvideList.push(resourceName); 
    8989                dojo._provide(resourceName); 
    9090        } 
    9191         
     
    163163        if(dependencies["dojoLoaded"]){ 
    164164                dependencies["dojoLoaded"](); 
    165165        } 
     166 
     167        //Now build the URI list, starting with the main dojo.js file 
     168        var result = []; 
     169        result[0] = { 
     170                layerName: "dojo.js", 
     171                depList: buildUtil.determineUriList(dependencies, null, dependencies["filters"]), 
     172                provideList: currentProvideList 
     173        } 
     174        currentProvideList = []; 
    166175         
     176        //Figure out if we have to process layers. 
     177        var layerCount = 0; 
     178        var layers = dependencies["layers"]; 
     179        if(layers && layers.length > 0){ 
     180                layerCount = layers.length; 
     181        } 
     182         
     183        //Process dojo layer files  
     184        if(layerCount){ 
     185                //Set up a lookup table for the layer URIs based on layer file name. 
     186                var namedLayerUris = {"dojo.js": result[0].depList}; 
     187                                 
     188                for(var i = 0; i < layerCount; i++){ 
     189                        var layer = layers[i]; 
     190                         
     191                        //Set up list of module URIs that are already defined for this layer's 
     192                        //layer dependencies. 
     193                        var layerUris = []; 
     194                        if(layer["layerDependencies"]){ 
     195                                for(var j = 0; j < layer.layerDependencies.length; j++){ 
     196                                        if(namedLayerUris[layer.layerDependencies[j]]){ 
     197                                                layerUris.concat(namedLayerUris[layer.layerDependencies[j]]); 
     198                                        } 
     199                                } 
     200                        } 
     201                         
     202                        //Get the final list of dependencies in this layer 
     203                        var depList = buildUtil.determineUriList(layer.dependencies, layerUris, dependencies["filters"]);  
     204                         
     205                        //Store the layer URIs that are in this file as well as all files it depends on. 
     206                        namedLayerUris[layer.name] = layerUris.concat(depList); 
     207 
     208                        //Add to the results object. 
     209                        result[i + 1] = { 
     210                                layerName: layer.name, 
     211                                depList: depList, 
     212                                provideList: currentProvideList 
     213                        } 
     214 
     215                        //Reset for another run through the loop. 
     216                        currentProvideList = [];  
     217                }  
     218        } 
     219 
     220        if(isWebBuild){ 
     221                dojo.hostenv.loadUri = dojo.hostenv.oldLoadUri; 
     222        }else{ 
     223                load = old_load; // restore the original load function 
     224                dj_eval = old_eval; // restore the original dj_eval function 
     225 
     226                dj_global['dojo'] = undefined; 
     227                dj_global['djConfig'] = undefined; 
     228                delete dj_global; 
     229        } 
     230 
     231        return result; //Object with properties: name (String), depList (Array) and provideList (Array) 
     232} 
     233 
     234//Function to do the actual collection of file names to join. 
     235buildUtil.determineUriList = function(/*Array*/dependencies, /*Array*/layerUris, /*Object*/filters){ 
    167236        for(var x=0; x<dependencies.length; x++){ 
    168237                try{ 
    169238                        var dep = dependencies[x]; 
     
    181250                        quit(-1); 
    182251                } 
    183252        } 
    184          
    185         // FIXME: we should also provide some way of figuring out what files are the 
    186         // test files for the namespaces which are included and provide them in the 
    187         // final package. 
    188          
    189         // FIXME: should we turn __package__.js file clobbering on? It will break things if there's a subdir rolled up into a __package__ 
    190         /* 
    191         for(var x=0; x<dojo.hostenv.loadedUris.length; x++){ 
    192                 print(dojo.hostenv.loadedUris[x].substr(-14)); 
    193                 if(dojo.hostenv.loadedUris[x].substr(-14) == "__package__.js"){ 
    194                         dojo.hostenv.loadedUris.splice(x, 1); 
    195                         x--; 
    196                 } 
    197         } 
    198         */ 
    199          
    200         // print("URIs, in order: "); 
    201         // for(var x=0; x<dojo.hostenv.loadedUris.length; x++){ 
    202         //      print(dojo.hostenv.loadedUris[x]); 
    203         // } 
    204          
     253 
    205254        var depList = []; 
    206255        var seen = {}; 
    207256        uris: for(var x=0; x<dojo.hostenv.loadedUris.length; x++){ 
    208257                var curi = dojo.hostenv.loadedUris[x]; 
    209258                if(!seen[curi]){ 
    210259                        seen[curi] = true; 
    211                         if(dependencies["filters"]){ 
    212                                 for(var i in dependencies.filters){ 
    213                                         if(curi.match(dependencies.filters[i])){ 
     260                        if(filters){ 
     261                                for(var i in filters){ 
     262                                        if(curi.match(filters[i])){ 
    214263                                                continue uris; 
    215                                         }}} 
     264                                        } 
     265 
     266                                        //If the uri is already accounted for in another 
     267                                        //layer, skip it. 
     268                                        if(layerUris){ 
     269                                                for(var i = 0; i < layerUris.length; i++){  
     270                                                        if(curi == layerUris[i]){  
     271                                                                                        continue uris;  
     272                                                        }  
     273                                                }  
     274                                        }  
     275                                } 
     276                        } 
    216277                        depList.push(curi); 
    217278                } 
    218279        } 
    219280         
    220         if(isWebBuild){ 
    221                 dojo.hostenv.loadUri = dojo.hostenv.oldLoadUri; 
    222         }else{ 
    223                 load = old_load; // restore the original load function 
    224                 dj_eval = old_eval; // restore the original dj_eval function 
     281        //Clear out the loadedUris for the next run.  
     282        dojo.hostenv.loadedUris = [];  
     283        return depList;  
     284} 
    225285 
    226                 dj_global['dojo'] = undefined; 
    227                 dj_global['djConfig'] = undefined; 
    228                 delete dj_global; 
    229         } 
    230286 
    231         return { 
    232                 depList: depList, 
    233                 provideList: provideList 
    234         }; 
    235 } 
    236  
    237 buildUtil.loadDependencyList = function(/*String*/profileFile){ 
     287buildUtil.evalProfile = function(/*String*/ profileFile){ 
    238288        var dependencies = null; 
    239289        var hostenvType = null; 
    240290        var profileText = new String(buildUtil.readFile(profileFile)); 
     
    242292        //Remove the call to getDependencyList.js because we want to call it manually. 
    243293        profileText = profileText.replace(/load\(("|')getDependencyList.js("|')\)/, ""); 
    244294        eval(profileText); 
    245         if(hostenvType){ 
    246                 hostenvType.join(",\n"); 
     295        return { 
     296                dependencies: dependencies, 
     297                hostenvType: hostenvType 
     298        }; 
     299} 
     300 
     301buildUtil.loadDependencyList = function(/*String*/profileFile){ 
     302        var profile = buildUtil.evalProfile(profileFile); 
     303        if(profile.hostenvType){ 
     304                profile.hostenvType = profile.hostenvType.join(",\n"); 
    247305        } 
    248         var depResult = buildUtil.getDependencyList(dependencies, hostenvType); 
    249         depResult.dependencies = dependencies; 
     306        var depResult = buildUtil.getDependencyList(profile.dependencies, profile.hostenvType); 
     307        depResult.dependencies = profile.dependencies; 
    250308         
    251309        return depResult; 
    252310} 
    253311 
    254 buildUtil.makeDojoJs = function(/*Object*/dependencyResult, /*String*/version){ 
    255         //summary: Makes the uncompressed contents for dojo.js using the object 
    256         //returned from buildUtil.getDependencyList() 
     312buildUtil.createLayerContents = function(/*Array*/depList, /*Array*/provideList, /*String*/version){ 
     313        //summary: Creates the core contents for a build layer (including dojo.js). 
    257314 
    258         var lineSeparator = buildUtil.getLineSeparator(); 
    259         var depList = dependencyResult.depList; 
    260  
    261315        //Concat the files together, and mark where we should insert all the 
    262316        //provide statements. 
    263317        var dojoContents = ""; 
     
    271325        //used to remove matching dojo.require statements. 
    272326        //Sort the provide list alphabetically to make it easy to read. 
    273327        //Order of provide statements do not matter. 
    274         var provideList = dependencyResult.provideList.sort();  
     328        provideList = provideList.sort();  
    275329        var depRegExpString = ""; 
    276330        for(var i = 0; i < provideList.length; i++){ 
    277331                if(i != 0){ 
     
    319373                "major: " + majorValue + ", minor: " + minorValue + ", patch: " + patchValue + ", flag: \"" + flagValue + "\"," 
    320374        ); 
    321375         
     376        return dojoContents; 
     377} 
     378 
     379buildUtil.makeDojoJs = function(/*Object*/dependencyResult, /*String*/version){ 
     380        //summary: Makes the uncompressed contents for dojo.js using the object 
     381        //returned from buildUtil.getDependencyList() 
     382 
     383        var lineSeparator = buildUtil.getLineSeparator(); 
     384 
     385        //Cycle through the layers to create the content for each layer. 
     386        for(var i = 0; i< dependencyResult.length; i++){ 
     387                var layerResult = dependencyResult[i]; 
     388                layerResult.contents = buildUtil.createLayerContents(layerResult.depList, layerResult.provideList, version); 
     389        } 
     390 
     391        //Object with properties: 
     392        //depList: Array of file paths (src/io/js) 
     393        //provideList: Array of module resource names (dojo.io) 
     394        //name: name of the layer file 
     395        //contents: the file contents for that layer file. 
     396        return dependencyResult;  
     397 
    322398        //Return the dependency list, since it is used for other things in the ant file. 
    323399        return { 
    324400                resourceDependencies: depList, 
     
    655731        //Find the bundles that need to be flattened. 
    656732        load("buildUtil.js"); 
    657733 
    658         var prefixes = buildUtil.getDependencyPropertyFromProfile(profileFile, "prefixes"); 
     734        var profile = buildUtil.evalProfile(profileFile); 
     735        var dependencies = profileFile.dependencies; 
     736 
     737        var prefixes = dependencies["prefixes"] || []; 
    659738        //Make sure dojo is in the list. 
    660739        var dojoPath = releaseDir.replace(/^.*(\/|\\)release(\/|\\)/, "release/"); 
    661740        prefixes.push(["dojo", dojoPath + "/src"]); 
    662741 
    663         var skiplist = buildUtil.getDependencyPropertyFromProfile(profileFile, "internSkipList"); 
     742        var skiplist = dependencies["internSkipList"] || []; 
    664743         
     744        //Intern strings for dojo.js 
    665745        buildUtil.internTemplateStringsInFile(loader, releaseDir + "/dojo.js", srcRoot, prefixes, skiplist); 
    666746        buildUtil.internTemplateStringsInFile(loader, releaseDir + "/dojo.js.uncompressed.js", srcRoot, prefixes, skiplist); 
    667747 
     748        //Intern strings for any other layer files. 
     749        if(dependencies["layers"] && dependencies.layers.length > 0){ 
     750                for(var i = 0; i < dependencies.layers.length; i++){ 
     751                        buildUtil.internTemplateStringsInFile(loader, releaseDir + "/" + dependencies.layers[i].name, srcRoot, prefixes, skiplist); 
     752                } 
     753        } 
     754 
    668755        //Intern strings for all files in widget dir (xdomain and regular files) 
    669756        var fileList = buildUtil.getFilteredFileList(releaseDir + "/src/widget", 
    670757                /\.js$/, true); 
  • buildscripts/listProfileDeps.js

     
    55var profileFile = arguments[0]; 
    66var lineSeparator = java.lang.System.getProperty("line.separator"); 
    77 
    8 print("Files included in this profile:" + lineSeparator + buildUtil.loadDependencyList(profileFile).depList.join(lineSeparator)); 
     8var result = buildUtil.loadDependencyList(profileFile); 
     9 
     10var buildText = "Files included in this profile:" + lineSeparator; 
     11for(var i = 0; i < result.length; i++){ 
     12        buildText += lineSeparator + result[i].layerName + ":" + lineSeparator; 
     13        buildText += result[i].depList.join(lineSeparator) + lineSeparator; 
     14} 
     15 
     16print(buildText); 
  • buildscripts/makeDojoJsWeb.js

     
    5151 
    5252        var buildSigDir = dojo.crypto.MD5.compute(depList.sort().join(","), dojo.crypto.outputTypes.Hex); 
    5353        try{ 
    54                 var contents = buildUtil.makeDojoJs(dependencyResult, version).dojoContents; 
     54                var contents = buildUtil.createLayerContents(dependencyResult.depList, dependencyResult.provideList, version); 
    5555                var compressedContents = ""; 
    5656                var prefixes = [["dojo", "src"]]; 
    5757