diff options
Diffstat (limited to 'site_scons/site_tools/jsheader.py')
-rw-r--r-- | site_scons/site_tools/jsheader.py | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/site_scons/site_tools/jsheader.py b/site_scons/site_tools/jsheader.py new file mode 100644 index 00000000000..c271948599b --- /dev/null +++ b/site_scons/site_tools/jsheader.py @@ -0,0 +1,53 @@ +import os + +from SCons.Builder import Builder + +def jsToH(target, source, env): + + outFile = str( target[0] ) + + h = ['#include "bson/stringdata.h"' + ,'namespace mongo {' + ,'struct JSFile{ const char* name; const StringData& source; };' + ,'namespace JSFiles{' + ] + + def cppEscape(s): + s = s.strip() + s = s.replace( '\\', '\\\\' ) + s = s.replace( '"', r'\"' ) + return s + + for s in source: + filename = str(s) + objname = os.path.split(filename)[1].split('.')[0] + stringname = '_jscode_raw_' + objname + + h.append('const StringData ' + stringname + " = ") + + for l in open( filename, 'r' ): + h.append( '"' + cppEscape(l) + r'\n" ' ) + + h.append(";") + h.append('extern const JSFile %s;'%objname) #symbols aren't exported w/o this + h.append('const JSFile %s = { "%s", %s };'%(objname, filename.replace('\\', '/'), stringname)) + + h.append("} // namespace JSFiles") + h.append("} // namespace mongo") + h.append("") + + text = '\n'.join(h); + + out = open( outFile, 'wb' ) + try: + out.write( text ) + finally: + out.close() + +jshBuilder = Builder( action=jsToH ) + +def generate(env, **kw): + env.Append( BUILDERS=dict( JSHeader=jshBuilder ) ) + +def exists(env): + return True |