From d53f6129f48e1c0ed755e4aedda0085a528a1426 Mon Sep 17 00:00:00 2001 From: William Deegan Date: Sat, 6 Jun 2020 11:28:41 -0700 Subject: change CompilationDatabase from psuedo builder to builder. Add emitter to clear source and set default target as 'compile_commands.json'. --- CHANGES.txt | 1 + SCons/Tool/compilation_db.py | 21 +++++++++++++-------- SCons/Tool/compilation_db.xml | 8 +++++--- doc/user/misc.xml | 15 +++++++++++++++ test/CompilationDatabase/fixture/SConstruct | 4 ++-- 5 files changed, 36 insertions(+), 13 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 414825d..b04615f 100755 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -56,6 +56,7 @@ RELEASE VERSION/DATE TO BE FILLED IN LATER - Renamed as.py to asm.py and left redirecting tool. 'as' is a reserved word and so changing the name was required as we wanted to import symbols for use in compilation_db tool. + - Add CompilationDatabase() builder in compilation_db tool. Contributed by MongoDB. From Jeremy Elson: - Updated design doc to use the correct syntax for Depends() diff --git a/SCons/Tool/compilation_db.py b/SCons/Tool/compilation_db.py index 0b7c9b8..788f454 100644 --- a/SCons/Tool/compilation_db.py +++ b/SCons/Tool/compilation_db.py @@ -154,13 +154,18 @@ def scan_compilation_db(node, env, path): return __COMPILATION_DB_ENTRIES -def CompilationDatabase(env, target='compile_commands.json'): - result = env.__COMPILATIONDB_Database(target=target, source=[]) +def compilation_db_emitter(target, source, env): + """ fix up the source/targets """ - env.AlwaysBuild(result) - env.NoCache(result) + # Default target name is compilation_db.json + if not target: + target = ['compile_commands.json', ] - return result + # No source should have been passed. Drop it. + if source: + source = [] + + return target, source def generate(env, **kwargs): @@ -214,17 +219,17 @@ def generate(env, **kwargs): action=SCons.Action.Action(compilation_db_entry_action, None), ) - env["BUILDERS"]["__COMPILATIONDB_Database"] = SCons.Builder.Builder( + env["BUILDERS"]["CompilationDatabase"] = SCons.Builder.Builder( action=SCons.Action.Action(write_compilation_db, "$COMPILATIONDB_COMSTR"), target_scanner=SCons.Scanner.Scanner( function=scan_compilation_db, node_class=None ), + emitter=compilation_db_emitter, + suffix='json', ) env['COMPILATIONDB_USE_ABSPATH'] = False - env.AddMethod(CompilationDatabase, "CompilationDatabase") - def exists(env): return True diff --git a/SCons/Tool/compilation_db.xml b/SCons/Tool/compilation_db.xml index 65b557b..12a4db0 100644 --- a/SCons/Tool/compilation_db.xml +++ b/SCons/Tool/compilation_db.xml @@ -26,12 +26,14 @@ See its __doc__ string for a discussion of the format. - Sets up &b-CompilationDatabase; Pseudo builder. + Sets up &b-CompilationDatabase; builder. This builder generates a clang tooling compatible compilation database. - Note: If there's no specified target file, it will default to - compile_commands.json + + + Note: The target file is typically named + compile_commands.json. diff --git a/doc/user/misc.xml b/doc/user/misc.xml index e9b078d..8aa7d62 100644 --- a/doc/user/misc.xml +++ b/doc/user/misc.xml @@ -699,9 +699,17 @@ env.Command('directory_build_info', This is controlled by COMPILATIONDB_USE_ABSPATH=(True|False) + which defaults to False. Example of absolute paths for target and source + + +env = Environment(COMPILATIONDB_USE_ABSPATH=True) +env.Tool('compilation_db') +env.CompilationDatabase('compile_commands.json') + + [ { @@ -712,8 +720,15 @@ env.Command('directory_build_info', } ] + + Example of relative paths for target and source + +env = Environment() +env.Tool('compilation_db') +env.CompilationDatabase('compile_commands.json') + [ { diff --git a/test/CompilationDatabase/fixture/SConstruct b/test/CompilationDatabase/fixture/SConstruct index 0f8944e..0bbcafa 100644 --- a/test/CompilationDatabase/fixture/SConstruct +++ b/test/CompilationDatabase/fixture/SConstruct @@ -12,8 +12,8 @@ env.Tool('compilation_db') if ARGUMENTS.get('ABSPATH', False): env['COMPILATIONDB_USE_ABSPATH'] = True - env.CompilationDatabase('compile_commands_abs.json') + env.CompilationDatabase('compile_commands_abs.json', source=[]) else: - env.CompilationDatabase('compile_commands.json') + env.CompilationDatabase('compile_commands.json', source=[]) env.Program('main', 'test_main.c') -- cgit v0.12