Skip to content

Instantly share code, notes, and snippets.

@cjhanks
Created April 7, 2017 18:50
Show Gist options
  • Save cjhanks/9d8785bc0f827044825b3e666777ad22 to your computer and use it in GitHub Desktop.
Save cjhanks/9d8785bc0f827044825b3e666777ad22 to your computer and use it in GitHub Desktop.
Thrift SCons Tool
"""
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