diff options
| author | Antonin Kral <a.kral@bobek.cz> | 2012-08-29 20:54:51 +0200 |
|---|---|---|
| committer | Antonin Kral <a.kral@bobek.cz> | 2012-08-29 20:54:51 +0200 |
| commit | 83957b73f9177f6e38bd5375bd93ca1f6a47188c (patch) | |
| tree | f20b7d6ac9a9c64ff5bb6b5910a24abbb356b1d5 /src/mongo/shell/createCPPfromJavaScriptFiles.js | |
| parent | 5071d203970edd4c995493d810abe20987e76fe9 (diff) | |
Imported Upstream version 2.2.0upstream/2.2.0
Diffstat (limited to 'src/mongo/shell/createCPPfromJavaScriptFiles.js')
| -rw-r--r-- | src/mongo/shell/createCPPfromJavaScriptFiles.js | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/src/mongo/shell/createCPPfromJavaScriptFiles.js b/src/mongo/shell/createCPPfromJavaScriptFiles.js new file mode 100644 index 00000000000..ee581202bf3 --- /dev/null +++ b/src/mongo/shell/createCPPfromJavaScriptFiles.js @@ -0,0 +1,105 @@ +// createCPPfromJavaScriptFiles.js + +/* Copyright 2011 10gen Inc. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +// This JavaScript file is run under Windows Script Host from the Visual Studio build. +// It creates .CPP files from JavaScript files and is intended to duplicate the functionality +// of the jsToH Python function in SConstruct. By using only standard Windows components +// (Windows Script Host, JScript) we avoid the need for Visual Studio builders to install +// Python, and we don't need to include the generated files in Git because they can be +// recreated as required. + +var whitespace = " \t"; +function cppEscape( s ) { + for ( var i = 0, len = s.length; i < len; ++i ) { + if ( whitespace.indexOf( s.charAt( i ) ) === -1 ) { + s = s.substring( i ); + break; + } + } + if ( i == len ) + return ""; + for ( i = s.length - 1; i >= 0; --i ) { + if ( whitespace.indexOf( s.charAt( i ) ) === -1 ) { + s = s.substr( 0, i + 1 ); + break; + } + } + s = s.replace( /\\/g, "\\\\" ); + s = s.replace( /"/g, '\\"' ); + return s; +}; + +function jsToH( fso, outputFileNameString, inputFileNameStringArray ) { + var displayString = 'jsToH( "' + outputFileNameString + '", ['; + var i, len = inputFileNameStringArray.length; + for ( i = 0; i < len; ++i ) { + displayString += '"' + inputFileNameStringArray[i] + '"'; + if ( i < len - 1 ) + displayString += ', '; + } + displayString += '] );' + WScript.Echo( displayString ); + var h = ['#include "bson/stringdata.h"' + , 'namespace mongo {' + , 'struct JSFile{ const char* name; const StringData& source; };' + , 'namespace JSFiles{' + ]; + for ( i = 0; i < len; ++i ) { + var filename = inputFileNameStringArray[i]; + var objname = filename.substring( 0, filename.lastIndexOf( '.' ) ).substr( 1 + filename.lastIndexOf('/') ); + var stringname = '_jscode_raw_' + objname; + h.push( 'const StringData ' + stringname + ' = ' ); + var inputFile = fso.GetFile( filename ); + var inputStream = inputFile.OpenAsTextStream( 1 /* ForReading */, 0 /* TristateFalse == ASCII */ ); + while ( !inputStream.AtEndOfStream ) + h.push( '"' + cppEscape(inputStream.ReadLine()) + '\\n" ' ); + inputStream.Close(); + h.push( ';' ); + h.push( 'extern const JSFile ' + objname + ';' ); //symbols aren't exported w/o this + h.push( 'const JSFile ' + objname + ' = { "' + filename + '" , ' + stringname + ' };' ); + } + h.push( "} // namespace JSFiles" ); + h.push( "} // namespace mongo" ); + h.push( "" ); + var out = fso.CreateTextFile( outputFileNameString, true /* overwrite */ ); + out.Write( h.join( '\n' ) ); + out.Close(); +}; + +function rebuildIfNeeded( fso, outputFileNameString, inputFileNameStringArray ) { + var rebuildNeeded = false; + if ( !fso.FileExists( outputFileNameString ) ) { + rebuildNeeded = true; + } else { + var outputFileDate = fso.GetFile( outputFileNameString ).DateLastModified; + for ( var i = 0, len = inputFileNameStringArray.length; i < len; ++i ) { + if ( fso.GetFile( inputFileNameStringArray[i] ).DateLastModified > outputFileDate ) { + rebuildNeeded = true; + break; + } + } + } + if ( rebuildNeeded ) + jsToH( fso, outputFileNameString, inputFileNameStringArray ); +}; + +var shell = new ActiveXObject( "WScript.Shell" ); +shell.CurrentDirectory = WScript.Arguments.Unnamed.Item( 0 ); + +var fso = new ActiveXObject( "Scripting.FileSystemObject" ); +rebuildIfNeeded( fso, "shell/mongo.cpp", ["shell/utils.js", "shell/utils_sh.js", "shell/db.js", "shell/mongo.js", "shell/mr.js", "shell/query.js", "shell/collection.js"] ); +rebuildIfNeeded( fso, "shell/mongo-server.cpp", ["shell/servers.js", "shell/shardingtest.js", "shell/servers_misc.js", "shell/replsettest.js", "shell/replsetbridge.js"] ); |
