1import os.path, sys
2
3def _PackageOption(pkgName, default=1):
4    """ Allow user to choose whether a package should be used if available. This results in a commandline option use<Pkgname>,
5    where Pkgname is the name of the package with a capitalized first letter.
6    @param pkgName: Name of package.
7    @param default: The default value for this option ("yes"/"no").
8    """
9    return BoolOption("use%s" % pkgName[0].upper() + pkgName[1:], "use %s if available" % (pkgName), default)
10
11def _BoolOption(opt, explanation, default=1):
12    """ Allow user to enable/disable a certain option. This results in a commandline option enable<Option>, where Option
13    is the name of the option with a capitalized first letter.
14    @param opt: Name of option.
15    @param explanation: Explanation of option.
16    @param default: The default value for this option (1/0).
17    """
18    return BoolOption("enable%s" % opt[0].upper() + opt[1:], explanation, default)
19
20def _EnumOption(opt, explanation, allowedValues, default):
21    """ Allow the user to choose among a set of values for an option. This results in a commandline option with<Option>,
22    where Option is the name of the option with a capitalized first letter.
23    @param opt: The name of the option.
24    @param explanation: Explanation of option.
25    @param allowedValues: The set of values to choose from.
26    @param default: The default value.
27    """
28    assert default in allowedValues
29    return EnumOption("with%s" % opt[0].upper() + opt[1:], explanation, default, allowed_values=allowedValues)
30
31def _DirectoryOption(opt, explanation, default):
32    """ Allow the user to configure the location for a certain directory, for instance the prefix. This results in a
33    commandline option which is simply the name of this option.
34    @param opt: The configurable directory, for instance "prefix".
35    @param explanation: Explanation of option.
36    @param default: The default value for this option.
37    """
38    return PathOption(opt, explanation, default)
39    # Incompatible with the latest stable SCons
40    # return PathOption(path, help, default, PathOption.PathIsDir)
41
42import SCons.Errors
43try:
44    Import("Platform", "Posix")
45except SCons.Errors.UserError:
46    # The common objects must be exported first
47    SConscript("SConscript_common")
48    Import("Platform", "Posix")
49
50# Expose the options as a dictionary of sets of options
51opts = {}
52
53if Platform in Posix:
54    opts["Installation Dirs"] = [_DirectoryOption("prefix", "installation prefix", "/usr/local")]
55elif Platform in Windows:
56    if Platform == "cygwin":
57        opts["Installation Dirs"] = [_DirectoryOption("prefix", "installation prefix", "/usr/local")]
58
59opts["Build Targets"] = [_BoolOption("shared", "create shared library"), _BoolOption("static", "create static library"),
60        _BoolOption("tests", "build test programs")]
61
62apis = []
63if Platform in Posix:
64    apis.append(_PackageOption("OSS"))
65    apis.append(_PackageOption("JACK"))
66    apis.append(_PackageOption("ALSA", Platform == "linux"))
67    apis.append(_PackageOption("ASIHPI", Platform == "linux"))
68    apis.append(_PackageOption("COREAUDIO", Platform == "darwin"))
69elif Platform in Windows:
70    if Platform == "cygwin":
71        apis.append(_EnumOption("winAPI", "Windows API to use", ("wmme", "directx", "asio"), "wmme"))
72
73opts["Host APIs"] = apis
74
75opts["Build Parameters"] = [\
76        _BoolOption("debug", "compile with debug symbols"),
77        _BoolOption("optimize", "compile with optimization", default=0),
78        _BoolOption("asserts", "runtime assertions are helpful for debugging, but can be detrimental to performance",
79                default=1),
80        _BoolOption("debugOutput", "enable debug output", default=0),
81        # _BoolOption("python", "create Python binding"),
82        ("customCFlags", "customize compilation of C code", ""),
83        ("customCxxFlags", "customize compilation of C++ code", ""),
84        ("customLinkFlags", "customize linking", ""),
85        ]
86
87opts["Bindings"] = [\
88        _BoolOption("cxx", "build Merlijn Blaauw's PA C++ wrapper", default=0)
89        ]
90
91Return("opts")
92