# -*- python -*- import os.path Import('env testruns') dist_headers = [ 'hammer.h', 'allocator.h', 'compiler_specifics.h', 'glue.h', 'internal.h', 'platform.h' ] parsers_headers = [ 'parsers/parser_internal.h' ] backends_headers = [ 'backends/regex.h', 'backends/contextfree.h' ] parsers = ['parsers/%s.c'%s for s in ['action', 'and', 'attr_bool', 'bind', 'bits', 'butnot', 'ch', 'charset', 'choice', 'difference', 'end', 'endianness', 'epsilon', 'ignore', 'ignoreseq', 'indirect', 'int_range', 'many', 'not', 'nothing', 'optional', 'permutation', 'sequence', 'token', 'unimplemented', 'whitespace', 'xor', 'value']] backends = ['backends/%s.c' % s for s in ['packrat', 'llk', 'regex', 'glr', 'lalr', 'lr', 'lr0']] misc_hammer_parts = [ 'allocator.c', 'benchmark.c', 'bitreader.c', 'bitwriter.c', 'cfgrammar.c', 'datastructures.c', 'desugar.c', 'glue.c', 'hammer.c', 'pprint.c', 'registry.c', 'system_allocator.c'] if env['PLATFORM'] == 'win32': misc_hammer_parts += [ 'platform_win32.c', 'tsearch.c', ] else: misc_hammer_parts += ['platform_bsdlike.c'] ctests = ['t_benchmark.c', 't_bitreader.c', 't_bitwriter.c', 't_parser.c', 't_grammar.c', 't_misc.c', 't_regression.c'] static_library_name = 'hammer' build_shared_library=True if env['PLATFORM'] == 'win32': build_shared_library=False # symbols in hammer are not exported yet, this shared lib would be useless static_library_name = 'hammer_s' # prevent collision between .lib from dll and .lib for static lib libhammer_shared = env.SharedLibrary('hammer', parsers + backends + misc_hammer_parts) libhammer_static = env.StaticLibrary(static_library_name, parsers + backends + misc_hammer_parts) if build_shared_library: Default(libhammer_shared, libhammer_static) env.Install('$libpath', [libhammer_static, libhammer_shared]) else: Default(libhammer_static) env.Install('$libpath', [libhammer_static]) env.Install('$incpath', dist_headers) env.Install('$parsersincpath', parsers_headers) env.Install('$backendsincpath', backends_headers) env.Install('$pkgconfigpath', '../../../libhammer.pc') if GetOption('with_tests'): testenv = env.Clone() testenv.ParseConfig('pkg-config --cflags --libs glib-2.0') testenv.Append(LIBS=['hammer']) testenv.Prepend(LIBPATH=['.']) ctestexec = testenv.Program('test_suite', ctests + ['test_suite.c'], LINKFLAGS='--coverage' if testenv.GetOption('coverage') else None) ctest = Alias('testc', [ctestexec], ''.join(['env LD_LIBRARY_PATH=', os.path.dirname(ctestexec[0].path), ' ', ctestexec[0].path])) AlwaysBuild(ctest) testruns.append(ctest) Export('libhammer_static libhammer_shared') for b in env['bindings']: env.SConscript(['bindings/%s/SConscript' % b])