summaryrefslogtreecommitdiff
path: root/portaudio/build/scons
diff options
context:
space:
mode:
authorsanine <sanine.not@pm.me>2022-08-25 14:54:53 -0500
committersanine <sanine.not@pm.me>2022-08-25 14:54:53 -0500
commit37c97e345d12f95dde44e1d1a4c2f2aadd4615bc (patch)
treee1bb25bc855883062bdd7847ff2c04290f71c840 /portaudio/build/scons
parent5634c7b04da619669f2f29f6798c03982be05180 (diff)
add initial structure
Diffstat (limited to 'portaudio/build/scons')
-rw-r--r--portaudio/build/scons/SConscript_common30
-rw-r--r--portaudio/build/scons/SConscript_opts91
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")