From 29816153660280601d96289dc3ef0da2ee46d6ff Mon Sep 17 00:00:00 2001 From: Mark Benvenuto Date: Wed, 29 Mar 2017 11:32:59 -0400 Subject: SERVER-28306 IDL Code Generator --- site_scons/site_tools/idl_tool.py | 58 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 site_scons/site_tools/idl_tool.py (limited to 'site_scons') diff --git a/site_scons/site_tools/idl_tool.py b/site_scons/site_tools/idl_tool.py new file mode 100644 index 00000000000..22e75c4ac42 --- /dev/null +++ b/site_scons/site_tools/idl_tool.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python2 +# Copyright (C) 2017 MongoDB Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License, version 3, +# as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +"""IDL Compiler Scons Tool.""" + +import os.path +import sys + +import SCons + +def idlc_emitter(target, source, env): + """For each input IDL file, the tool produces a .cpp and .h file.""" + first_source = str(source[0]) + + if not first_source.endswith(".idl"): + raise ValueError("Bad idl file name '%s', it must end with '.idl' " % (first_source)) + + base_file_name, _ = SCons.Util.splitext(str(target[0])) + target_source = base_file_name + "_gen.cpp" + target_header = base_file_name + "_gen.h" + + return [target_source, target_header], source + + +IDLCAction = SCons.Action.Action('$IDLCCOM', '$IDLCCOMSTR') + +# TODO: create a scanner for imports when imports are implemented +IDLCBuilder = SCons.Builder.Builder( + action=IDLCAction, + emitter=idlc_emitter, + srcsuffx=".idl", + suffix=".cpp" + ) + +def generate(env): + bld = IDLCBuilder + env['BUILDERS']['Idlc'] = bld + + env['IDLC'] = sys.executable + " buildscripts/idl/idlc.py" + env['IDLCFLAGS'] = '' + base_dir = env.subst('$BUILD_ROOT/$VARIANT_DIR').replace("#", "") + env['IDLCCOM'] = '$IDLC --base_dir %s --header ${TARGETS[1]} --output ${TARGETS[0]} $SOURCES ' % (base_dir) + env['IDLCSUFFIX'] = '.idl' + +def exists(env): + return True \ No newline at end of file -- cgit v1.2.1