$NetBSD: patch-SConstruct,v 1.11 2023/07/29 11:45:43 adam Exp $ Add support for NetBSD and Dragonfly. Avoid -fatal-warnings: ld might complain about conflicting versions. Fix locations. Don't compile with debug info. Don't mess with the linker. Respect LDFLAGS and CXXFLAGS. --- SConstruct.orig 2023-06-29 13:37:52.000000000 +0000 +++ SConstruct @@ -1266,6 +1266,7 @@ envDict = dict(BUILD_ROOT=buildDir, CONFIGURELOG='$BUILD_ROOT/scons/config.log', CONFIG_HEADER_DEFINES={}, LIBDEPS_TAG_EXPANSIONS=[], + ENV=os.environ, ) # By default, we will get the normal SCons tool search. But if the @@ -1455,7 +1456,9 @@ def CheckForProcessor(context, which_arc os_macros = { "windows": "defined(_WIN32)", "solaris": "defined(__sun)", + "dragonfly": "defined(__DragonFly__)", "freebsd": "defined(__FreeBSD__)", + "netbsd": "defined(__NetBSD__)", "openbsd": "defined(__OpenBSD__)", "iOS": "defined(__APPLE__) && TARGET_OS_IOS && !TARGET_OS_SIMULATOR", "iOS-sim": "defined(__APPLE__) && TARGET_OS_IOS && TARGET_OS_SIMULATOR", @@ -1591,7 +1594,7 @@ if env.TargetOSIs('posix'): env.Append( CCFLAGS_WERROR=["-Werror"], CXXFLAGS_WERROR=['-Werror=unused-result'] if env.ToolchainIs('clang') else [], - LINKFLAGS_WERROR=['-Wl,-fatal_warnings' if env.TargetOSIs('darwin') else "-Wl,--fatal-warnings"], + LINKFLAGS_WERROR=[''], ) elif env.TargetOSIs('windows'): env.Append( @@ -2006,7 +2009,7 @@ if env['_LIBDEPS'] == '$_LIBDEPS_LIBS': if not env.TargetOSIs('solaris', 'darwin', 'windows', 'openbsd'): env.Tool('thin_archive') -if env.TargetOSIs('linux', 'freebsd', 'openbsd'): +if env.TargetOSIs('linux', 'freebsd', 'openbsd', 'netbsd', 'dragonfly'): env['LINK_WHOLE_ARCHIVE_LIB_START'] = '-Wl,--whole-archive' env['LINK_WHOLE_ARCHIVE_LIB_END'] = '-Wl,--no-whole-archive' env['LINK_AS_NEEDED_LIB_START'] = '-Wl,--as-needed' @@ -2183,14 +2186,14 @@ if env.TargetOSIs('linux'): elif env.TargetOSIs('solaris'): env.Append( LIBS=["socket","resolv","lgrp"] ) -elif env.TargetOSIs('freebsd'): +elif env.TargetOSIs('freebsd', 'dragonfly'): env.Append( LIBS=[ "kvm" ] ) env.Append( CCFLAGS=[ "-fno-omit-frame-pointer" ] ) elif env.TargetOSIs('darwin'): env.Append( LIBS=["resolv"] ) -elif env.TargetOSIs('openbsd'): +elif env.TargetOSIs('netbsd', 'openbsd'): env.Append( LIBS=[ "kvm" ] ) elif env.TargetOSIs('windows'): @@ -2492,7 +2495,6 @@ if env.TargetOSIs('posix'): # -Winvalid-pch Warn if a precompiled header (see Precompiled Headers) is found in the search path but can't be used. env.Append( CCFLAGS=["-fasynchronous-unwind-tables", - "-ggdb" if not env.TargetOSIs('emscripten') else "-g", "-Wall", "-Wsign-compare", "-Wno-unknown-pragmas", @@ -3019,7 +3021,7 @@ def doConfigure(myenv): myenv.AddMethod( functools.partial(var_func, var=var, func=CheckFlag), f"Check{var}Supported") - if myenv.ToolchainIs('gcc', 'clang'): + if myenv.ToolchainIs('gcc', 'clang') and get_option('runtime-hardening') == "on": # This tells clang/gcc to use the gold linker if it is available - we prefer the gold linker # because it is much faster. Don't use it if the user has already configured another linker # selection manually. @@ -3415,9 +3417,6 @@ def doConfigure(myenv): if usingLibStdCxx: def CheckModernLibStdCxx(context): test_body = """ - #if !__has_include() - #error "libstdc++ from GCC 5.3.0 or newer is required" - #endif """ context.Message('Checking for libstdc++ 5.3.0 or better... ') @@ -3828,7 +3827,7 @@ def doConfigure(myenv): # Explicitly use the new gnu hash section if the linker offers # it, except on android since older runtimes seem to not # support it. For that platform, use 'both'. - if env.TargetOSIs('android'): + if env.TargetOSIs('android') or env.TargetOSIs('netbsd'): myenv.AddToLINKFLAGSIfSupported('-Wl,--hash-style=both') else: myenv.AddToLINKFLAGSIfSupported('-Wl,--hash-style=gnu') @@ -4119,8 +4118,9 @@ def doConfigure(myenv): def checkOpenSSL(conf): sslLibName = "ssl" cryptoLibName = "crypto" - sslLinkDependencies = ["crypto", "dl"] - if conf.env.TargetOSIs('freebsd'): + if conf.env.TargetOSIs('linux', 'solaris'): + sslLinkDependencies = ["crypto", "dl"] + else: sslLinkDependencies = ["crypto"] if conf.env.TargetOSIs('windows'): @@ -4457,7 +4457,7 @@ def doConfigure(myenv): myenv.ConfError("Couldn't find SASL header/libraries") # requires ports devel/libexecinfo to be installed - if env.TargetOSIs('freebsd', 'openbsd'): + if env.TargetOSIs('dragonfly', 'freebsd', 'netbsd', 'openbsd'): if not conf.CheckLib("execinfo"): myenv.ConfError("Cannot find libexecinfo, please install devel/libexecinfo.")