Created
April 7, 2017 18:50
-
-
Save cjhanks/9d8785bc0f827044825b3e666777ad22 to your computer and use it in GitHub Desktop.
Thrift SCons Tool
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
A by no-means feature complete thrift `site_tools` package for compiling | |
C++ only. | |
""" | |
import SCons | |
from os.path import splitext | |
def thrift_emitter(target, source, env): | |
for src in source: | |
name = splitext(str(src))[0] | |
if env['THRIFTCPPOUT']: | |
outputs = [ | |
'{}_constants.cpp', | |
'{}_constants.h', | |
'{}_types.cpp', | |
'{}_types.h', | |
] | |
for o in outputs: | |
target.append(o.format(name)) | |
return (target, source) | |
def thrift_scanner(node, env, _): | |
return [] | |
def generate(env): | |
try: | |
builder = env['BUILDERS']['Thrift'] | |
except KeyError: | |
action = SCons.Action.Action('$THRIFTCOM', '$THRIFTCOMSTR') | |
builder = SCons.Builder.Builder(action=action, | |
emitter=thrift_emitter, | |
src_suffice='$THRIFTSRCSUFFIX') | |
env['BUILDERS']['Thrift'] = builder | |
env['THRIFT'] = env.Detect('thrift') or 'thrift' | |
env['THRIFTCPPOUT'] = '.' | |
env['THRIFTPYOUT'] = '' | |
env['THRIFTPATH'] = ['.'] | |
thrift_command = [ | |
'$THRIFT', | |
'--gen', | |
'cpp', | |
'-out', | |
'${THRIFTCPPOUT}', | |
'${SOURCES}', | |
] | |
env['THRIFTCOM'] = ' '.join(thrift_command) | |
env.AppendUnique( | |
SCANNERS=SCons.Scanner.Scanner(function=thrift_scanner, | |
skeys=['.thrift']) | |
) | |
def exists(env): | |
return env.Detect('thrift') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment