diff options
author | sanine <sanine.not@pm.me> | 2022-08-25 14:54:53 -0500 |
---|---|---|
committer | sanine <sanine.not@pm.me> | 2022-08-25 14:54:53 -0500 |
commit | 37c97e345d12f95dde44e1d1a4c2f2aadd4615bc (patch) | |
tree | e1bb25bc855883062bdd7847ff2c04290f71c840 /portaudio/build/scons | |
parent | 5634c7b04da619669f2f29f6798c03982be05180 (diff) |
add initial structure
Diffstat (limited to 'portaudio/build/scons')
-rw-r--r-- | portaudio/build/scons/SConscript_common | 30 | ||||
-rw-r--r-- | portaudio/build/scons/SConscript_opts | 91 |
2 files changed, 121 insertions, 0 deletions
diff --git a/portaudio/build/scons/SConscript_common b/portaudio/build/scons/SConscript_common new file mode 100644 index 0000000..eaf4e3c --- /dev/null +++ b/portaudio/build/scons/SConscript_common @@ -0,0 +1,30 @@ +import os.path, sys + +class ConfigurationError(Exception): + def __init__(self, reason): + Exception.__init__(self, "Configuration failed: %s" % reason) + +env = Environment() + +# sunos, aix, hpux, irix, sunos appear to be platforms known by SCons, assuming they're POSIX compliant +Posix = ("linux", "darwin", "sunos", "aix", "hpux", "irix", "sunos", "netbsd") +Windows = ("win32", "cygwin") + +if env["PLATFORM"] == "posix": + if sys.platform[:5] == "linux": + Platform = "linux" + elif sys.platform[:6] == "netbsd": + Platform = "netbsd" + else: + raise ConfigurationError("Unknown platform %s" % sys.platform) +else: + if not env["PLATFORM"] in ("win32", "cygwin") + Posix: + raise ConfigurationError("Unknown platform %s" % env["PLATFORM"]) + Platform = env["PLATFORM"] + +# Inspired by the versioning scheme followed by Qt, it seems sensible enough. There are three components: major, minor +# and micro. Major changes with each subtraction from the API (backward-incompatible, i.e. V19 vs. V18), minor changes +# with each addition to the API (backward-compatible), micro changes with each revision of the source code. +ApiVer = "2.0.0" + +Export("Platform", "Posix", "ConfigurationError", "ApiVer") diff --git a/portaudio/build/scons/SConscript_opts b/portaudio/build/scons/SConscript_opts new file mode 100644 index 0000000..6a4b0a9 --- /dev/null +++ b/portaudio/build/scons/SConscript_opts @@ -0,0 +1,91 @@ +import os.path, sys + +def _PackageOption(pkgName, default=1): + """ Allow user to choose whether a package should be used if available. This results in a commandline option use<Pkgname>, + where Pkgname is the name of the package with a capitalized first letter. + @param pkgName: Name of package. + @param default: The default value for this option ("yes"/"no"). + """ + return BoolOption("use%s" % pkgName[0].upper() + pkgName[1:], "use %s if available" % (pkgName), default) + +def _BoolOption(opt, explanation, default=1): + """ Allow user to enable/disable a certain option. This results in a commandline option enable<Option>, where Option + is the name of the option with a capitalized first letter. + @param opt: Name of option. + @param explanation: Explanation of option. + @param default: The default value for this option (1/0). + """ + return BoolOption("enable%s" % opt[0].upper() + opt[1:], explanation, default) + +def _EnumOption(opt, explanation, allowedValues, default): + """ Allow the user to choose among a set of values for an option. This results in a commandline option with<Option>, + where Option is the name of the option with a capitalized first letter. + @param opt: The name of the option. + @param explanation: Explanation of option. + @param allowedValues: The set of values to choose from. + @param default: The default value. + """ + assert default in allowedValues + return EnumOption("with%s" % opt[0].upper() + opt[1:], explanation, default, allowed_values=allowedValues) + +def _DirectoryOption(opt, explanation, default): + """ Allow the user to configure the location for a certain directory, for instance the prefix. This results in a + commandline option which is simply the name of this option. + @param opt: The configurable directory, for instance "prefix". + @param explanation: Explanation of option. + @param default: The default value for this option. + """ + return PathOption(opt, explanation, default) + # Incompatible with the latest stable SCons + # return PathOption(path, help, default, PathOption.PathIsDir) + +import SCons.Errors +try: + Import("Platform", "Posix") +except SCons.Errors.UserError: + # The common objects must be exported first + SConscript("SConscript_common") + Import("Platform", "Posix") + +# Expose the options as a dictionary of sets of options +opts = {} + +if Platform in Posix: + opts["Installation Dirs"] = [_DirectoryOption("prefix", "installation prefix", "/usr/local")] +elif Platform in Windows: + if Platform == "cygwin": + opts["Installation Dirs"] = [_DirectoryOption("prefix", "installation prefix", "/usr/local")] + +opts["Build Targets"] = [_BoolOption("shared", "create shared library"), _BoolOption("static", "create static library"), + _BoolOption("tests", "build test programs")] + +apis = [] +if Platform in Posix: + apis.append(_PackageOption("OSS")) + apis.append(_PackageOption("JACK")) + apis.append(_PackageOption("ALSA", Platform == "linux")) + apis.append(_PackageOption("ASIHPI", Platform == "linux")) + apis.append(_PackageOption("COREAUDIO", Platform == "darwin")) +elif Platform in Windows: + if Platform == "cygwin": + apis.append(_EnumOption("winAPI", "Windows API to use", ("wmme", "directx", "asio"), "wmme")) + +opts["Host APIs"] = apis + +opts["Build Parameters"] = [\ + _BoolOption("debug", "compile with debug symbols"), + _BoolOption("optimize", "compile with optimization", default=0), + _BoolOption("asserts", "runtime assertions are helpful for debugging, but can be detrimental to performance", + default=1), + _BoolOption("debugOutput", "enable debug output", default=0), + # _BoolOption("python", "create Python binding"), + ("customCFlags", "customize compilation of C code", ""), + ("customCxxFlags", "customize compilation of C++ code", ""), + ("customLinkFlags", "customize linking", ""), + ] + +opts["Bindings"] = [\ + _BoolOption("cxx", "build Merlijn Blaauw's PA C++ wrapper", default=0) + ] + +Return("opts") |