From ab2a3636537a7dd12ea98e743d6bf71c8a0c52a8 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Mon, 8 Sep 2025 02:56:51 +0200 Subject: [PATCH] clean-up: remove the GCH builder from the SCons tools MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `BuilderGCH` was added as an experimental feature many years ago; this is code found ''somewhere'' on the net and was use ''as-is'' — however, precompiled headers turned out as a feature of GCC with a lot of quality problems and, furthermore seems of questionable usability — we thus decided to adhere strictly to the »Borland model« of template instantiation and recommend against using precompiled headers. Rather, in the Lumiera code base, much care is taken to avoid unnecessary header includes — this, together with the incremental build feature of SCons largely obsoletes the necessity to resort to precompiled headers and similar facilities (as CCache). --- admin/scons/BuilderGCH.py | 109 -------------------------------------- 1 file changed, 109 deletions(-) delete mode 100644 admin/scons/BuilderGCH.py diff --git a/admin/scons/BuilderGCH.py b/admin/scons/BuilderGCH.py deleted file mode 100644 index a8705885f..000000000 --- a/admin/scons/BuilderGCH.py +++ /dev/null @@ -1,109 +0,0 @@ -# coding: utf-8 -## -## BuilderGCH.py - SCons builder for gcc's precompiled headers -## - -# Copyright (C) scons.org/wiki/GchBuilder -# 2006, Tim Blechmann -# 2008, Hermann Vosseler -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -##################################################################### - -# history: 8/2008 adapted for Lumiera build system -# changed to accept a list of precompiled header defs - -# TODO: WIP-remove these comments when port to Python 3.x is DONE -# types.py does not contain ListType in Python 3.x -# # Why do we require ListType? -# To do something like -# if type(item) is ListType: -# .... -# But types.py does not have ListType anymore -# if isinstance(item, list): -#from types import ListType - -import SCons.Action -import SCons.Builder -import SCons.Scanner.C -import SCons.Util -import SCons.Script - -SCons.Script.EnsureSConsVersion(0,96,92) - -GchAction = SCons.Action.Action('$GCHCOM', '$GCHCOMSTR') -GchShAction = SCons.Action.Action('$GCHSHCOM', '$GCHSHCOMSTR') - -def gen_suffix(env, sources): - return sources[0].get_suffix() + env['GCHSUFFIX'] - - -GchShBuilder = SCons.Builder.Builder(action = GchShAction, - source_scanner = SCons.Scanner.C.CScanner(), - suffix = gen_suffix) - -GchBuilder = SCons.Builder.Builder(action = GchAction, - source_scanner = SCons.Scanner.C.CScanner(), - suffix = gen_suffix) - -def setup_dependency(target,source,env, key): - scanner = SCons.Scanner.C.CScanner() - path = scanner.path(env) - deps = scanner(source[0], env, path) - - if key in env and env[key]: - for header in env[key]: - header_path = header.path.strip('.gch') - if header_path in [x.path for x in deps]: - print("Precompiled header(%s) %s \t <--- %s" % (key,header_path,source[0])) - env.Depends(target, header) - - -def static_pch_emitter(target,source,env): - SCons.Defaults.StaticObjectEmitter( target, source, env ) - setup_dependency(target,source,env, key='GCH') - return (target, source) - -def shared_pch_emitter(target,source,env): - SCons.Defaults.SharedObjectEmitter( target, source, env ) - setup_dependency(target,source,env, key='GCH-sh') - return (target, source) - - -def generate(env): - """ Add builders and construction variables for the Gch builder. - """ - env.Append(BUILDERS = { - 'gch': env.Builder( - action = GchAction, - target_factory = env.fs.File, - ), - 'gchsh': env.Builder( - action = GchShAction, - target_factory = env.fs.File, - ), - }) - - try: - bld = env['BUILDERS']['GCH'] - bldsh = env['BUILDERS']['GCH-sh'] - except KeyError: - bld = GchBuilder - bldsh = GchShBuilder - env['BUILDERS']['PrecompiledHeader'] = bld - env['BUILDERS']['PrecompiledHeaderShared'] = bldsh - - env['GCHCOM'] = '$CXX -o $TARGET -x c++-header -c $CXXFLAGS $_CCCOMCOM $SOURCE' - env['GCHSHCOM'] = '$CXX -o $TARGET -x c++-header -c $SHCXXFLAGS $_CCCOMCOM $SOURCE' - env['GCHSUFFIX'] = '.gch' - - for suffix in SCons.Util.Split('.c .C .cc .cxx .cpp .c++'): - env['BUILDERS']['StaticObject'].add_emitter( suffix, static_pch_emitter ) - env['BUILDERS']['SharedObject'].add_emitter( suffix, shared_pch_emitter ) - - -def exists(env): - return env.Detect('g++')