diff options
Diffstat (limited to 'BuildTools/SCons/SConstruct')
-rw-r--r-- | BuildTools/SCons/SConstruct | 897 |
1 files changed, 451 insertions, 446 deletions
diff --git a/BuildTools/SCons/SConstruct b/BuildTools/SCons/SConstruct index ef32b31..c5493fc 100644 --- a/BuildTools/SCons/SConstruct +++ b/BuildTools/SCons/SConstruct @@ -8,8 +8,8 @@ root = Dir("../..").abspath # Override SConscript to handle tests oldSConscript = SConscript def SConscript(*arguments, **keywords) : - if not keywords.get("test_only", False) or env["TEST"] : - return apply(oldSConscript, arguments, keywords) + if not keywords.get("test_only", False) or env["TEST"] : + return apply(oldSConscript, arguments, keywords) env.SConscript = SConscript ################################################################################ @@ -21,80 +21,80 @@ env.SConscript = SConscript ################################################################################ #if env["PLATFORM"] == "win32" : -# env["MSVC_BATCH"] = 1 +# env["MSVC_BATCH"] = 1 # Pretty output def colorize(command, target, color) : - colors = { "red": "31", "green": "32", "yellow": "33", "blue": "34" } - prefix = "" - suffix = "" - if sys.stdout.isatty() and env["PLATFORM"] != "win32": - prefix = "\033[0;" + colors[color] + ";140m" - suffix = "\033[0m" - return " " + prefix + command + suffix + " " + target + colors = { "red": "31", "green": "32", "yellow": "33", "blue": "34" } + prefix = "" + suffix = "" + if sys.stdout.isatty() and env["PLATFORM"] != "win32": + prefix = "\033[0;" + colors[color] + ";140m" + suffix = "\033[0m" + return " " + prefix + command + suffix + " " + target if int(ARGUMENTS.get("V", 0)) == 0 and not ARGUMENTS.get("dump_trace", False) : - env["CCCOMSTR"] = colorize("CC", "$TARGET", "green") - env["SHCCCOMSTR"] = colorize("CC", "$TARGET", "green") - env["CXXCOMSTR"] = colorize("CXX", "$TARGET", "green") - env["SHCXXCOMSTR"] = colorize("CXX", "$TARGET", "green") - env["LINKCOMSTR"] = colorize("LINK", "$TARGET", "red") - env["SHLINKCOMSTR"] = colorize("LINK", "$TARGET", "red") - env["ARCOMSTR"] = colorize("AR", "$TARGET", "red") - env["RANLIBCOMSTR"] = colorize("RANLIB", "$TARGET", "red") - env["PCHCOMSTR"] = colorize("PCH", "$TARGET", "blue") - env["QT4_RCCCOMSTR"] = colorize("RCC", "$TARGET", "blue") - env["QT4_UICCOMSTR"] = colorize("UIC", "$TARGET", "blue") - env["QT4_MOCFROMHCOMSTR"] = colorize("MOC", "$TARGET", "blue") - env["QT4_MOCFROMCXXCOMSTR"] = colorize("MOC", "$TARGET", "blue") - env["QT4_LRELEASECOMSTR"] = colorize("LRELEASE", "$TARGET", "blue") - env["QT4_LUPDATECOMSTR"] = colorize("LUPDATE", "$TARGET", "blue") - env["GENCOMSTR"] = colorize("GEN", "$TARGET", "blue") - env["RCCOMSTR"] = colorize("RC", "$TARGET", "blue") - env["BUNDLECOMSTR"] = colorize("BUNDLE", "$TARGET", "blue") - env["NIBCOMSTR"] = colorize("NIB", "$TARGET", "blue") - env["NSISCOMSTR"] = colorize("NSIS", "$TARGET", "blue") - env["INSTALLSTR"] = colorize("INSTALL", "$TARGET", "blue") - env["TESTCOMSTR"] = colorize("TEST", "$SOURCE", "yellow") - env["FOCOMSTR"] = colorize("FO", "$TARGET", "blue") - env["XSLTCOMSTR"] = colorize("XSLT", "$TARGET", "blue") - env["XMLLINTCOMSTR"] = colorize("XMLLINT", "$SOURCE", "blue") - env["DOXYCOMSTR"] = colorize("DOXY", "$SOURCE", "blue") - #Progress(colorize("DEP", "$TARGET", "red") + env["CCCOMSTR"] = colorize("CC", "$TARGET", "green") + env["SHCCCOMSTR"] = colorize("CC", "$TARGET", "green") + env["CXXCOMSTR"] = colorize("CXX", "$TARGET", "green") + env["SHCXXCOMSTR"] = colorize("CXX", "$TARGET", "green") + env["LINKCOMSTR"] = colorize("LINK", "$TARGET", "red") + env["SHLINKCOMSTR"] = colorize("LINK", "$TARGET", "red") + env["ARCOMSTR"] = colorize("AR", "$TARGET", "red") + env["RANLIBCOMSTR"] = colorize("RANLIB", "$TARGET", "red") + env["PCHCOMSTR"] = colorize("PCH", "$TARGET", "blue") + env["QT4_RCCCOMSTR"] = colorize("RCC", "$TARGET", "blue") + env["QT4_UICCOMSTR"] = colorize("UIC", "$TARGET", "blue") + env["QT4_MOCFROMHCOMSTR"] = colorize("MOC", "$TARGET", "blue") + env["QT4_MOCFROMCXXCOMSTR"] = colorize("MOC", "$TARGET", "blue") + env["QT4_LRELEASECOMSTR"] = colorize("LRELEASE", "$TARGET", "blue") + env["QT4_LUPDATECOMSTR"] = colorize("LUPDATE", "$TARGET", "blue") + env["GENCOMSTR"] = colorize("GEN", "$TARGET", "blue") + env["RCCOMSTR"] = colorize("RC", "$TARGET", "blue") + env["BUNDLECOMSTR"] = colorize("BUNDLE", "$TARGET", "blue") + env["NIBCOMSTR"] = colorize("NIB", "$TARGET", "blue") + env["NSISCOMSTR"] = colorize("NSIS", "$TARGET", "blue") + env["INSTALLSTR"] = colorize("INSTALL", "$TARGET", "blue") + env["TESTCOMSTR"] = colorize("TEST", "$SOURCE", "yellow") + env["FOCOMSTR"] = colorize("FO", "$TARGET", "blue") + env["XSLTCOMSTR"] = colorize("XSLT", "$TARGET", "blue") + env["XMLLINTCOMSTR"] = colorize("XMLLINT", "$SOURCE", "blue") + env["DOXYCOMSTR"] = colorize("DOXY", "$SOURCE", "blue") + #Progress(colorize("DEP", "$TARGET", "red") def checkObjCHeader(context, header) : - context.Message("Checking for Objective-C header " + header + " ... ") - ret = context.TryCompile("#include <Cocoa/Cocoa.h>\n#include <" + header + ">", ".m") - context.Result(ret) - return ret + context.Message("Checking for Objective-C header " + header + " ... ") + ret = context.TryCompile("#include <Cocoa/Cocoa.h>\n#include <" + header + ">", ".m") + context.Result(ret) + return ret def checkForCpp11Support(context) : - context.Message('Checking whether the C++ compiler supports C++11... ') - result = context.TryLink( - """ + context.Message('Checking whether the C++ compiler supports C++11... ') + result = context.TryLink( + """ #include <memory> int main(int, char **) { - // shared_ptr test - std::shared_ptr<int> intPtr = std::make_shared<int>(); + // shared_ptr test + std::shared_ptr<int> intPtr = std::make_shared<int>(); - // unique_ptr test - std::unique_ptr<int> intPtrUnique = std::unique_ptr<int>(new int(1)); + // unique_ptr test + std::unique_ptr<int> intPtrUnique = std::unique_ptr<int>(new int(1)); - // auto test - auto otherIntPtr = intPtr; - std::shared_ptr<int> fooIntPtr = otherIntPtr; + // auto test + auto otherIntPtr = intPtr; + std::shared_ptr<int> fooIntPtr = otherIntPtr; - // lambda test - auto someFunction = [](int i){ i = i * i; }; + // lambda test + auto someFunction = [](int i){ i = i * i; }; - // nullptr test - double* fooDouble = nullptr; - return 0; + // nullptr test + double* fooDouble = nullptr; + return 0; } """, '.cpp') - context.Result(result) - return result + context.Result(result) + return result ################################################################################ @@ -102,265 +102,265 @@ int main(int, char **) { ################################################################################ if ARGUMENTS.get("force-configure", 0) : - SCons.SConf.SetCacheMode("force") + SCons.SConf.SetCacheMode("force") def CheckPKG(context, name): - context.Message( 'Checking for package %s... ' % name ) - ret = context.TryAction('pkg-config --exists \'%s\'' % name)[0] - context.Result( ret ) - return ret + context.Message( 'Checking for package %s... ' % name ) + ret = context.TryAction('pkg-config --exists \'%s\'' % name)[0] + context.Result( ret ) + return ret def CheckVersion(context, library, version, define, header, value) : - context.Message("Checking " + library + " version (>= " + version + ") ...") - version = GetVersion(context, define, header) - ok = version >= value - context.Result(ok) - return ok + context.Message("Checking " + library + " version (>= " + version + ") ...") + version = GetVersion(context, define, header) + ok = version >= value + context.Result(ok) + return ok def GetVersion(context, define, header, extension = ".c") : - ret = context.TryRun(""" + ret = context.TryRun(""" #include <%(header)s> #include <stdio.h> int main(int argc, char* argv[]) { - printf("%%d\\n", %(define)s); - return 0; + printf("%%d\\n", %(define)s); + return 0; } """ % { "header" : header, "define": define }, extension) - if ret[0] : - return int(ret[1]) - else : - return -1 + if ret[0] : + return int(ret[1]) + else : + return -1 conf = Configure(conf_env, custom_tests = { - 'CheckCpp11Support' : checkForCpp11Support, - }) + 'CheckCpp11Support' : checkForCpp11Support, + }) if not conf.CheckCXX() or not conf.CheckCC() : - print "Error: You need a working compiler" - Exit(1) + print "Error: You need a working compiler" + Exit(1) if not conf.CheckCpp11Support() : - print "Error: You need a compiler with support for the C++11 standard" - Exit(1) + print "Error: You need a compiler with support for the C++11 standard" + Exit(1) env["HAVE_ZLIB"] = True zlib_flags = {} zlib_okay = False if env.get("zlib_libdir", None) : - zlib_flags["LIBPATH"] = [env["zlib_libdir"]] - zlib_okay = True + zlib_flags["LIBPATH"] = [env["zlib_libdir"]] + zlib_okay = True if env.get("zlib_includedir", None) : - zlib_flags["CPPPATH"] = [env["zlib_includedir"]] - zlib_okay = True + zlib_flags["CPPPATH"] = [env["zlib_includedir"]] + zlib_okay = True if env.get("zlib_libfile", None) : - zlib_flags["LIBS"] = [File(env["zlib_libfile"])] - zlib_okay = True + zlib_flags["LIBS"] = [File(env["zlib_libfile"])] + zlib_okay = True elif zlib_okay : - zlib_flags["LIBS"] = ["z"] + zlib_flags["LIBS"] = ["z"] if (not zlib_okay) and conf.CheckLib("z") : - zlib_flags["LIBS"] = ["z"] - zlib_okay = True + zlib_flags["LIBS"] = ["z"] + zlib_okay = True if zlib_okay : - env["ZLIB_FLAGS"] = zlib_flags + env["ZLIB_FLAGS"] = zlib_flags elif not env.get("zlib_bundled_enable", True) : - print "Error: Zlib not found and zlib_bundled_enable is false" - Exit(1) + print "Error: Zlib not found and zlib_bundled_enable is false" + Exit(1) else : - env["ZLIB_BUNDLED"] = True + env["ZLIB_BUNDLED"] = True if conf.CheckLib("resolv") : - env["PLATFORM_FLAGS"]["LIBS"] = env["PLATFORM_FLAGS"].get("LIBS", []) + ["resolv"] + env["PLATFORM_FLAGS"]["LIBS"] = env["PLATFORM_FLAGS"].get("LIBS", []) + ["resolv"] if env["PLATFORM"] != "win32" : - if conf.CheckLib("pthread") : - env["PLATFORM_FLAGS"]["LIBS"] = env["PLATFORM_FLAGS"].get("LIBS", []) + ["pthread"] + if conf.CheckLib("pthread") : + env["PLATFORM_FLAGS"]["LIBS"] = env["PLATFORM_FLAGS"].get("LIBS", []) + ["pthread"] if conf.CheckLib("dl") : - env["PLATFORM_FLAGS"]["LIBS"] = env["PLATFORM_FLAGS"].get("LIBS", []) + ["dl"] + env["PLATFORM_FLAGS"]["LIBS"] = env["PLATFORM_FLAGS"].get("LIBS", []) + ["dl"] if conf.CheckLib("m") : - env["PLATFORM_FLAGS"]["LIBS"] = env["PLATFORM_FLAGS"].get("LIBS", []) + ["m"] + env["PLATFORM_FLAGS"]["LIBS"] = env["PLATFORM_FLAGS"].get("LIBS", []) + ["m"] if conf.CheckLib("c") : - env["PLATFORM_FLAGS"]["LIBS"] = env["PLATFORM_FLAGS"].get("LIBS", []) + ["c"] + env["PLATFORM_FLAGS"]["LIBS"] = env["PLATFORM_FLAGS"].get("LIBS", []) + ["c"] # Even if you find stdc++ on HP-UX, it is the wrong one for aCC if env["PLATFORM"] != "hpux" : - if conf.CheckLib("stdc++", language='CXX') : - env["PLATFORM_FLAGS"]["LIBS"] = env["PLATFORM_FLAGS"].get("LIBS", []) + ["stdc++"] + if conf.CheckLib("stdc++", language='CXX') : + env["PLATFORM_FLAGS"]["LIBS"] = env["PLATFORM_FLAGS"].get("LIBS", []) + ["stdc++"] conf.Finish() # Boost boost_conf_env = conf_env.Clone() boost_flags = {} if env.get("boost_libdir", None) : - boost_flags["LIBPATH"] = [env["boost_libdir"]] + boost_flags["LIBPATH"] = [env["boost_libdir"]] if env.get("boost_includedir", None) : - if env["PLATFORM"] == "win32" or env["PLATFORM"] == "hpux" or env["PLATFORM"] == "sunos" : - boost_flags["CPPPATH"] = [env["boost_includedir"]] - else : - # Using isystem to avoid getting warnings from a system boost - # Unfortunately, this also disables dependency tracking - boost_flags["CPPFLAGS"] = [("-isystem", env["boost_includedir"])] + if env["PLATFORM"] == "win32" or env["PLATFORM"] == "hpux" or env["PLATFORM"] == "sunos" : + boost_flags["CPPPATH"] = [env["boost_includedir"]] + else : + # Using isystem to avoid getting warnings from a system boost + # Unfortunately, this also disables dependency tracking + boost_flags["CPPFLAGS"] = [("-isystem", env["boost_includedir"])] boost_conf_env.MergeFlags(boost_flags) conf = Configure(boost_conf_env) boostLibs = [("signals", None), ("system", "system/system_error.hpp"), ("thread", None), ("regex", None), ("program_options", None), ("filesystem", None), ("serialization", "archive/text_oarchive.hpp"), ("date_time", "date_time/date.hpp")] allLibsPresent = True libNames = [] for (lib, header) in boostLibs : - if header : - header = "boost/" + header - else : - header = "boost/" + lib + ".hpp" - if not conf.CheckCXXHeader(header) : - allLibsPresent = False - break - if env["PLATFORM"] != "win32" : - libName = "boost_" + lib - if not conf.CheckLib(libName, language='CXX') : - libName += "-mt" - if not conf.CheckLib(libName, language='CXX') : - allLibsPresent = False - break - libNames.append(libName) + if header : + header = "boost/" + header + else : + header = "boost/" + lib + ".hpp" + if not conf.CheckCXXHeader(header) : + allLibsPresent = False + break + if env["PLATFORM"] != "win32" : + libName = "boost_" + lib + if not conf.CheckLib(libName, language='CXX') : + libName += "-mt" + if not conf.CheckLib(libName, language='CXX') : + allLibsPresent = False + break + libNames.append(libName) if allLibsPresent : - env["BOOST_FLAGS"] = boost_flags - if env["PLATFORM"] != "win32" : - env["BOOST_FLAGS"].update({"LIBS": libNames}) - if not conf.CheckCXXHeader("boost/uuid/uuid.hpp") : - # FIXME: Remove this workaround when UUID is available in most distros - env["BOOST_BUNDLED_UUID_ONLY"] = True + env["BOOST_FLAGS"] = boost_flags + if env["PLATFORM"] != "win32" : + env["BOOST_FLAGS"].update({"LIBS": libNames}) + if not conf.CheckCXXHeader("boost/uuid/uuid.hpp") : + # FIXME: Remove this workaround when UUID is available in most distros + env["BOOST_BUNDLED_UUID_ONLY"] = True elif not env.get("boost_bundled_enable", True) : - print "Error: Boost not found and boost_bundled_enable is false" - Exit(1) + print "Error: Boost not found and boost_bundled_enable is false" + Exit(1) else : - env["BOOST_BUNDLED"] = True + env["BOOST_BUNDLED"] = True conf.Finish() # Xss env["HAVE_XSS"] = 0 if env["PLATFORM"] != "win32" and env["PLATFORM"] != "darwin" : - xss_flags = { - "LIBPATH": ["/usr/X11R6/lib"], - "LIBS": ["Xss"] - } - xss_env = conf_env.Clone() - xss_env.MergeFlags(xss_flags) - conf = Configure(xss_env) - if conf.CheckFunc("XScreenSaverQueryExtension") : - env["HAVE_XSS"] = 1 - env["XSS_FLAGS"] = xss_flags - conf.Finish() + xss_flags = { + "LIBPATH": ["/usr/X11R6/lib"], + "LIBS": ["Xss"] + } + xss_env = conf_env.Clone() + xss_env.MergeFlags(xss_flags) + conf = Configure(xss_env) + if conf.CheckFunc("XScreenSaverQueryExtension") : + env["HAVE_XSS"] = 1 + env["XSS_FLAGS"] = xss_flags + conf.Finish() # GConf env["HAVE_GCONF"] = 0 if env.get("try_gconf", True) and env["PLATFORM"] != "win32" and env["PLATFORM"] != "darwin" : - gconf_env = conf_env.Clone() - conf = Configure(gconf_env, custom_tests = {"CheckPKG": CheckPKG}) - if conf.CheckPKG("gconf-2.0") : - gconf_bare_env = Environment() - gconf_bare_env.ParseConfig('pkg-config --cflags gconf-2.0 gobject-2.0 --libs gconf-2.0 gobject-2.0') - gconf_flags = { - "LIBS": gconf_bare_env["LIBS"], - "CCFLAGS": gconf_bare_env["CCFLAGS"], - "CPPPATH": gconf_bare_env["CPPPATH"], - "CPPDEFINES": gconf_bare_env.get("CPPDEFINES", []), - } - gconf_env.MergeFlags(gconf_flags) - if conf.CheckCHeader("gconf/gconf-client.h") and conf.CheckLib("gconf-2") : - env["HAVE_GCONF"] = 1 - env["GCONF_FLAGS"] = { - "LIBS": gconf_env["LIBS"], - "CCFLAGS": gconf_env["CCFLAGS"], - "CPPPATH": gconf_env["CPPPATH"], - "CPPDEFINES": gconf_env.get("CPPDEFINES", []), - } - conf.Finish() + gconf_env = conf_env.Clone() + conf = Configure(gconf_env, custom_tests = {"CheckPKG": CheckPKG}) + if conf.CheckPKG("gconf-2.0") : + gconf_bare_env = Environment() + gconf_bare_env.ParseConfig('pkg-config --cflags gconf-2.0 gobject-2.0 --libs gconf-2.0 gobject-2.0') + gconf_flags = { + "LIBS": gconf_bare_env["LIBS"], + "CCFLAGS": gconf_bare_env["CCFLAGS"], + "CPPPATH": gconf_bare_env["CPPPATH"], + "CPPDEFINES": gconf_bare_env.get("CPPDEFINES", []), + } + gconf_env.MergeFlags(gconf_flags) + if conf.CheckCHeader("gconf/gconf-client.h") and conf.CheckLib("gconf-2") : + env["HAVE_GCONF"] = 1 + env["GCONF_FLAGS"] = { + "LIBS": gconf_env["LIBS"], + "CCFLAGS": gconf_env["CCFLAGS"], + "CPPPATH": gconf_env["CPPPATH"], + "CPPDEFINES": gconf_env.get("CPPDEFINES", []), + } + conf.Finish() # Sparkle env["HAVE_SPARKLE"] = 0 if env["PLATFORM"] == "darwin" : - sparkle_flags = { - "FRAMEWORKPATH": ["/Library/Frameworks"], - "FRAMEWORKS": ["Sparkle"] - } - sparkle_env = conf_env.Clone() - sparkle_env.MergeFlags(sparkle_flags) - conf = Configure(sparkle_env, custom_tests = { "CheckObjCHeader" : checkObjCHeader }) - if conf.CheckObjCHeader("Sparkle/Sparkle.h") : - env["HAVE_SPARKLE"] = 1 - env["SPARKLE_FLAGS"] = sparkle_flags - env["SPARKLE_FRAMEWORK"] = "/Library/Frameworks/Sparkle.framework" - conf.Finish() + sparkle_flags = { + "FRAMEWORKPATH": ["/Library/Frameworks"], + "FRAMEWORKS": ["Sparkle"] + } + sparkle_env = conf_env.Clone() + sparkle_env.MergeFlags(sparkle_flags) + conf = Configure(sparkle_env, custom_tests = { "CheckObjCHeader" : checkObjCHeader }) + if conf.CheckObjCHeader("Sparkle/Sparkle.h") : + env["HAVE_SPARKLE"] = 1 + env["SPARKLE_FLAGS"] = sparkle_flags + env["SPARKLE_FRAMEWORK"] = "/Library/Frameworks/Sparkle.framework" + conf.Finish() # Growl env["HAVE_GROWL"] = 0 if env["PLATFORM"] == "darwin" : - growl_flags = { - "FRAMEWORKPATH": ["/Library/Frameworks"], - "FRAMEWORKS": ["Growl"] - } - growl_env = conf_env.Clone() - growl_env.MergeFlags(growl_flags) - conf = Configure(growl_env, custom_tests = { "CheckObjCHeader" : checkObjCHeader }) - if conf.CheckObjCHeader("Growl/Growl.h") : - env["HAVE_GROWL"] = 1 - env["GROWL_FLAGS"] = growl_flags - env["GROWL_FRAMEWORK"] = "/Library/Frameworks/Growl.framework" - conf.Finish() + growl_flags = { + "FRAMEWORKPATH": ["/Library/Frameworks"], + "FRAMEWORKS": ["Growl"] + } + growl_env = conf_env.Clone() + growl_env.MergeFlags(growl_flags) + conf = Configure(growl_env, custom_tests = { "CheckObjCHeader" : checkObjCHeader }) + if conf.CheckObjCHeader("Growl/Growl.h") : + env["HAVE_GROWL"] = 1 + env["GROWL_FLAGS"] = growl_flags + env["GROWL_FRAMEWORK"] = "/Library/Frameworks/Growl.framework" + conf.Finish() # Snarl if env["PLATFORM"] == "win32" : - env["HAVE_SNARL"] = True + env["HAVE_SNARL"] = True # LibXML conf = Configure(conf_env, custom_tests = {"CheckVersion": CheckVersion}) if env.get("try_libxml", True) and conf.CheckCHeader("libxml/parser.h") and conf.CheckLib("xml2") : #and conf.CheckVersion("LibXML", "2.6.23", "LIBXML_VERSION", "libxml/xmlversion.h", 20623) : - env["HAVE_LIBXML"] = 1 - env["LIBXML_FLAGS"] = { "LIBS": ["xml2"] } + env["HAVE_LIBXML"] = 1 + env["LIBXML_FLAGS"] = { "LIBS": ["xml2"] } conf.Finish() if env.get("try_libxml", True) and not env.get("HAVE_LIBXML", 0) : - libxml_env = conf_env.Clone() - libxml_env.Append(CPPPATH = ["/usr/include/libxml2"]) - conf = Configure(libxml_env, custom_tests = {"CheckVersion": CheckVersion}) - if conf.CheckCHeader("libxml/parser.h") and conf.CheckLib("xml2") : -# and conf.CheckVersion("LibXML", "2.6.23", "LIBXML_VERSION", "libxml/xmlversion.h", 20623): - env["HAVE_LIBXML"] = 1 - libxml_env.Append() - if os.path.basename(env["CC"]) in ("clang", "gcc"): - env["LIBXML_FLAGS"] = { "CXXFLAGS": ["-isystem/usr/include/libxml2"], "LIBS": ["xml2"] } - else: - env["LIBXML_FLAGS"] = { "CPPPATH": ["/usr/include/libxml2"], "LIBS": ["xml2"] } - conf.Finish() + libxml_env = conf_env.Clone() + libxml_env.Append(CPPPATH = ["/usr/include/libxml2"]) + conf = Configure(libxml_env, custom_tests = {"CheckVersion": CheckVersion}) + if conf.CheckCHeader("libxml/parser.h") and conf.CheckLib("xml2") : +# and conf.CheckVersion("LibXML", "2.6.23", "LIBXML_VERSION", "libxml/xmlversion.h", 20623): + env["HAVE_LIBXML"] = 1 + libxml_env.Append() + if os.path.basename(env["CC"]) in ("clang", "gcc"): + env["LIBXML_FLAGS"] = { "CXXFLAGS": ["-isystem/usr/include/libxml2"], "LIBS": ["xml2"] } + else: + env["LIBXML_FLAGS"] = { "CPPPATH": ["/usr/include/libxml2"], "LIBS": ["xml2"] } + conf.Finish() # Expat if env.get("try_expat", True) and not env.get("HAVE_LIBXML",0) : - expat_conf_env = conf_env.Clone() - expat_flags = {} - if env.get("expat_libdir", None) : - expat_flags["LIBPATH"] = [env["expat_libdir"]] - if env.get("expat_includedir", None) : - expat_flags["CPPPATH"] = [env["expat_includedir"]] - expat_conf_env.MergeFlags(expat_flags) - conf = Configure(expat_conf_env) - if conf.CheckCHeader("expat.h") and conf.CheckLib(env["expat_libname"]) : - env["HAVE_EXPAT"] = 1 - env["EXPAT_FLAGS"] = { "LIBS": [env["expat_libname"]] } - env["EXPAT_FLAGS"].update(expat_flags) - conf.Finish() + expat_conf_env = conf_env.Clone() + expat_flags = {} + if env.get("expat_libdir", None) : + expat_flags["LIBPATH"] = [env["expat_libdir"]] + if env.get("expat_includedir", None) : + expat_flags["CPPPATH"] = [env["expat_includedir"]] + expat_conf_env.MergeFlags(expat_flags) + conf = Configure(expat_conf_env) + if conf.CheckCHeader("expat.h") and conf.CheckLib(env["expat_libname"]) : + env["HAVE_EXPAT"] = 1 + env["EXPAT_FLAGS"] = { "LIBS": [env["expat_libname"]] } + env["EXPAT_FLAGS"].update(expat_flags) + conf.Finish() # Bundled expat bundledExpat = False if not env.get("HAVE_EXPAT", 0) and not env.get("HAVE_LIBXML", 0) : - print "Expat or LibXML not found. Using bundled Expat" - SConscript("#/3rdParty/Expat/SConscript") - env["HAVE_EXPAT"] = 1 - env["EXPAT_BUNDLED"] = True + print "Expat or LibXML not found. Using bundled Expat" + SConscript("#/3rdParty/Expat/SConscript") + env["HAVE_EXPAT"] = 1 + env["EXPAT_BUNDLED"] = True ################################################################################ # IDN library @@ -373,172 +373,172 @@ icu_env = conf_env.Clone() use_icu = bool(env["icu"]) icu_prefix = "" if isinstance(env["icu"], str) : - icu_prefix = env["icu"] + icu_prefix = env["icu"] icu_flags = {} if icu_prefix : - icu_flags = { "CPPPATH": [os.path.join(icu_prefix, "include")] } - icu_flags["LIBPATH"] = [os.path.join(icu_prefix, "lib")] - icu_env.MergeFlags(icu_flags) + icu_flags = { "CPPPATH": [os.path.join(icu_prefix, "include")] } + icu_flags["LIBPATH"] = [os.path.join(icu_prefix, "lib")] + icu_env.MergeFlags(icu_flags) icu_conf = Configure(icu_env) if use_icu and icu_conf.CheckCHeader("unicode/usprep.h") : - env["HAVE_ICU"] = 1 - env["ICU_FLAGS"] = icu_flags - env["ICU_FLAGS"]["LIBS"] = ["icuuc"] + env["HAVE_ICU"] = 1 + env["ICU_FLAGS"] = icu_flags + env["ICU_FLAGS"]["LIBS"] = ["icuuc"] icu_conf.Finish() # LibIDN libidn_conf_env = conf_env.Clone() libidn_flags = {} if env.get("libidn_libdir", None) : - libidn_flags["LIBPATH"] = [env["libidn_libdir"]] + libidn_flags["LIBPATH"] = [env["libidn_libdir"]] if env.get("libidn_includedir", None) : - libidn_flags["CPPPATH"] = [env["libidn_includedir"]] + libidn_flags["CPPPATH"] = [env["libidn_includedir"]] libidn_conf_env.MergeFlags(libidn_flags) conf = Configure(libidn_conf_env) if env.get("try_libidn", True) and not env.get("HAVE_ICU") and conf.CheckCHeader("idna.h") and conf.CheckLib(env["libidn_libname"]) : - env["HAVE_LIBIDN"] = 1 - env["LIBIDN_FLAGS"] = { "LIBS": [env["libidn_libname"]] } - env["LIBIDN_FLAGS"].update(libidn_flags) + env["HAVE_LIBIDN"] = 1 + env["LIBIDN_FLAGS"] = { "LIBS": [env["libidn_libname"]] } + env["LIBIDN_FLAGS"].update(libidn_flags) conf.Finish() # Fallback to bundled LibIDN if not env.get("HAVE_ICU", False) and not env.get("HAVE_LIBIDN", False) : - if env.get("libidn_bundled_enable", True) : - env["HAVE_LIBIDN"] = 1 - env["LIBIDN_BUNDLED"] = 1 - elif env.get("need_idn", True): - print "Error: ICU and LIBIDN not found, and libidn_bundled_enable is false" - Exit(1) - else: - print "Proceeding without an IDN library because need_idn was false. This will break all internal binaries" + if env.get("libidn_bundled_enable", True) : + env["HAVE_LIBIDN"] = 1 + env["LIBIDN_BUNDLED"] = 1 + elif env.get("need_idn", True): + print "Error: ICU and LIBIDN not found, and libidn_bundled_enable is false" + Exit(1) + else: + print "Proceeding without an IDN library because need_idn was false. This will break all internal binaries" # Unbound if env["unbound"] : - env["LDNS_BUNDLED"] = 1 - env["UNBOUND_BUNDLED"] = 1 + env["LDNS_BUNDLED"] = 1 + env["UNBOUND_BUNDLED"] = 1 else : - env["LDNS_FLAGS"] = {} - env["UNBOUND_FLAGS"] = {} + env["LDNS_FLAGS"] = {} + env["UNBOUND_FLAGS"] = {} # LibMiniUPnPc if env["experimental_ft"] : - libminiupnpc_flags = {"CPPPATH": ["/usr/include/miniupnpc/"]} - libminiupnpc_conf_env = conf_env.Clone() - if env.get("libminiupnpc_libdir", None) : - libminiupnpc_flags["LIBPATH"] = [env["libminiupnpc_libdir"]] - if env.get("libminiupnpc_includedir", None) : - libminiupnpc_flags["CPPPATH"] = [env["libminiupnpc_includedir"]] - libminiupnpc_conf_env.MergeFlags(libminiupnpc_flags) - conf = Configure(libminiupnpc_conf_env) - if conf.CheckCHeader("miniupnpc.h") and conf.CheckLib(env["libminiupnpc_libname"]) and False : - # ^ False because APIs aren't stable - env["HAVE_LIBMINIUPNPC"] = 1 - env["LIBMINIUPNPC_FLAGS"] = { "LIBS": ["miniupnpc"] } - env["LIBMINIUPNPC_FLAGS"].update(libminiupnpc_flags) - else : - env["LIBMINIUPNPC_BUNDLED"] = 1 - conf.Finish() + libminiupnpc_flags = {"CPPPATH": ["/usr/include/miniupnpc/"]} + libminiupnpc_conf_env = conf_env.Clone() + if env.get("libminiupnpc_libdir", None) : + libminiupnpc_flags["LIBPATH"] = [env["libminiupnpc_libdir"]] + if env.get("libminiupnpc_includedir", None) : + libminiupnpc_flags["CPPPATH"] = [env["libminiupnpc_includedir"]] + libminiupnpc_conf_env.MergeFlags(libminiupnpc_flags) + conf = Configure(libminiupnpc_conf_env) + if conf.CheckCHeader("miniupnpc.h") and conf.CheckLib(env["libminiupnpc_libname"]) and False : + # ^ False because APIs aren't stable + env["HAVE_LIBMINIUPNPC"] = 1 + env["LIBMINIUPNPC_FLAGS"] = { "LIBS": ["miniupnpc"] } + env["LIBMINIUPNPC_FLAGS"].update(libminiupnpc_flags) + else : + env["LIBMINIUPNPC_BUNDLED"] = 1 + conf.Finish() else : - env["LIBMINIUPNPC_FLAGS"] = {} + env["LIBMINIUPNPC_FLAGS"] = {} # LibNATPMP if env["experimental_ft"] : - libnatpmp_flags = {} - libnatpmp_conf_env = conf_env.Clone() - if env.get("libnatpmp_libdir", None) : - libnatpmp_flags["LIBPATH"] = [env["libnatpmp_libdir"]] - if env.get("libnatpmp_includedir", None) : - libnatpmp_flags["CPPPATH"] = [env["libnatpmp_includedir"]] - libnatpmp_conf_env.MergeFlags(libnatpmp_flags) - conf = Configure(libnatpmp_conf_env) - if conf.CheckCHeader("natpmp.h") and conf.CheckLib(env["libnatpmp_libname"]) and False: - # ^ False because APIs aren't stable - env["HAVE_LIBNATPMP"] = 1 - env["LIBNATPMP_FLAGS"] = { "LIBS": ["natpmp"] } - env["LIBNATPMP_FLAGS"].update(libnatpmp_flags) - else : - env["LIBNATPMP_BUNDLED"] = 1 - conf.Finish() + libnatpmp_flags = {} + libnatpmp_conf_env = conf_env.Clone() + if env.get("libnatpmp_libdir", None) : + libnatpmp_flags["LIBPATH"] = [env["libnatpmp_libdir"]] + if env.get("libnatpmp_includedir", None) : + libnatpmp_flags["CPPPATH"] = [env["libnatpmp_includedir"]] + libnatpmp_conf_env.MergeFlags(libnatpmp_flags) + conf = Configure(libnatpmp_conf_env) + if conf.CheckCHeader("natpmp.h") and conf.CheckLib(env["libnatpmp_libname"]) and False: + # ^ False because APIs aren't stable + env["HAVE_LIBNATPMP"] = 1 + env["LIBNATPMP_FLAGS"] = { "LIBS": ["natpmp"] } + env["LIBNATPMP_FLAGS"].update(libnatpmp_flags) + else : + env["LIBNATPMP_BUNDLED"] = 1 + conf.Finish() else : - env["LIBNATPMP_FLAGS"] = {} + env["LIBNATPMP_FLAGS"] = {} # SQLite if env["experimental"] : - sqlite_conf_env = conf_env.Clone() - sqlite_flags = {} - if env.get("sqlite_libdir", None) : - sqlite_flags["LIBPATH"] = [env["sqlite_libdir"]] - if env.get("sqlite_includedir", None) : - sqlite_flags["CPPPATH"] = [env["sqlite_includedir"]] - sqlite_conf_env.MergeFlags(sqlite_flags) - conf = Configure(sqlite_conf_env) - if conf.CheckCHeader("sqlite3.h") and conf.CheckLib(env["sqlite_libname"]) and not env.get("sqlite_force_bundled", False): - env["HAVE_SQLITE"] = 1 - env["SQLITE_FLAGS"] = { "LIBS": [env["sqlite_libname"]] } - env["SQLITE_FLAGS"].update(sqlite_flags) - else : - env["SQLITE_BUNDLED"] = 1 - conf.Finish() + sqlite_conf_env = conf_env.Clone() + sqlite_flags = {} + if env.get("sqlite_libdir", None) : + sqlite_flags["LIBPATH"] = [env["sqlite_libdir"]] + if env.get("sqlite_includedir", None) : + sqlite_flags["CPPPATH"] = [env["sqlite_includedir"]] + sqlite_conf_env.MergeFlags(sqlite_flags) + conf = Configure(sqlite_conf_env) + if conf.CheckCHeader("sqlite3.h") and conf.CheckLib(env["sqlite_libname"]) and not env.get("sqlite_force_bundled", False): + env["HAVE_SQLITE"] = 1 + env["SQLITE_FLAGS"] = { "LIBS": [env["sqlite_libname"]] } + env["SQLITE_FLAGS"].update(sqlite_flags) + else : + env["SQLITE_BUNDLED"] = 1 + conf.Finish() else : - env["SQLITE_FLAGS"] = {} + env["SQLITE_FLAGS"] = {} # Lua lua_conf_env = conf_env.Clone() lua_flags = {} if env.get("lua_libdir", None) : - lua_flags["LIBPATH"] = [env["lua_libdir"]] + lua_flags["LIBPATH"] = [env["lua_libdir"]] if env.get("lua_includedir", None) : - lua_flags["CPPPATH"] = [env["lua_includedir"]] + lua_flags["CPPPATH"] = [env["lua_includedir"]] lua_conf_env.MergeFlags(lua_flags) conf = Configure(lua_conf_env) if not env.get("lua_force_bundled", False) and conf.CheckLibWithHeader(env["lua_libname"], "lua.hpp", "cxx", autoadd = 0) : - env["HAVE_LUA"] = 1 - env["LUA_FLAGS"] = { "LIBS": [env["lua_libname"]] } - lua_version = GetVersion(conf, "LUA_VERSION_NUM", "lua.h") - if lua_version > 0 : - env["LUA_FLAGS"]["LUA_VERSION"] = str(lua_version // 100) + "." + str(lua_version % 100) - else : - print "Warning: Unable to determine Lua version. Not installing Lua libraries." - env["LUA_FLAGS"].update(lua_flags) + env["HAVE_LUA"] = 1 + env["LUA_FLAGS"] = { "LIBS": [env["lua_libname"]] } + lua_version = GetVersion(conf, "LUA_VERSION_NUM", "lua.h") + if lua_version > 0 : + env["LUA_FLAGS"]["LUA_VERSION"] = str(lua_version // 100) + "." + str(lua_version % 100) + else : + print "Warning: Unable to determine Lua version. Not installing Lua libraries." + env["LUA_FLAGS"].update(lua_flags) else : - env["LUA_BUNDLED"] = 1 + env["LUA_BUNDLED"] = 1 conf.Finish() # Readline editline_conf_env = conf_env.Clone() editline_flags = {} if env.get("editline_libdir", None) : - editline_flags["LIBPATH"] = [env["editline_libdir"]] + editline_flags["LIBPATH"] = [env["editline_libdir"]] if env.get("editline_includedir", None) : - editline_flags["CPPPATH"] = [env["editline_includedir"]] + editline_flags["CPPPATH"] = [env["editline_includedir"]] editline_conf_env.MergeFlags(editline_flags) conf = Configure(editline_conf_env) if conf.CheckLibWithHeader(env["editline_libname"], ["stdio.h", "editline/readline.h"], "c") : - env["HAVE_EDITLINE"] = 1 - env["EDITLINE_FLAGS"] = { "LIBS": [env["editline_libname"]] } - env["EDITLINE_FLAGS"].update(editline_flags) + env["HAVE_EDITLINE"] = 1 + env["EDITLINE_FLAGS"] = { "LIBS": [env["editline_libname"]] } + env["EDITLINE_FLAGS"].update(editline_flags) conf.Finish() # Avahi avahi_conf_env = conf_env.Clone() avahi_flags = {} if env.get("avahi_libdir", None) : - avahi_flags["LIBPATH"] = [env["avahi_libdir"]] + avahi_flags["LIBPATH"] = [env["avahi_libdir"]] if env.get("avahi_includedir", None) : - avahi_flags["CPPPATH"] = [env["avahi_includedir"]] + avahi_flags["CPPPATH"] = [env["avahi_includedir"]] avahi_conf_env.MergeFlags(avahi_flags) conf = Configure(avahi_conf_env) if env.get("try_avahi", True) and conf.CheckCHeader("avahi-client/client.h") and conf.CheckLib("avahi-client") and conf.CheckLib("avahi-common") : - env["HAVE_AVAHI"] = True - env["AVAHI_FLAGS"] = { "LIBS": ["avahi-client", "avahi-common"] } - env["AVAHI_FLAGS"].update(avahi_flags) + env["HAVE_AVAHI"] = True + env["AVAHI_FLAGS"] = { "LIBS": ["avahi-client", "avahi-common"] } + env["AVAHI_FLAGS"].update(avahi_flags) conf.Finish() # Qt if env["qt"] : - env["QTDIR"] = env["qt"] + env["QTDIR"] = env["qt"] ################################################################################ @@ -546,123 +546,123 @@ if env["qt"] : ################################################################################ env["OPENSSL_FLAGS"] = {} if env.get("tls_backend") == "native" : - if env["PLATFORM"] == "win32" : - env["HAVE_SCHANNEL"] = True - elif env["PLATFORM"] == "darwin" and env["target"] == "native": - env["HAVE_SECURETRANSPORT"] = True - elif env["target"] in ("iphone-device", "iphone-simulator", "xcode", "android") : - env["tls_backend"] = "openssl_bundled" - else : - env["tls_backend"] = "openssl" + if env["PLATFORM"] == "win32" : + env["HAVE_SCHANNEL"] = True + elif env["PLATFORM"] == "darwin" and env["target"] == "native": + env["HAVE_SECURETRANSPORT"] = True + elif env["target"] in ("iphone-device", "iphone-simulator", "xcode", "android") : + env["tls_backend"] = "openssl_bundled" + else : + env["tls_backend"] = "openssl" # OpenSSL if env.get("tls_backend") == "openssl_bundled" : - env["OPENSSL_BUNDLED"] = True - env["HAVE_OPENSSL"] = True + env["OPENSSL_BUNDLED"] = True + env["HAVE_OPENSSL"] = True elif env.get("tls_backend") == "openssl" : - openssl_env = conf_env.Clone() - use_openssl = bool(env["openssl"]) - openssl_prefix = "" - if isinstance(env["openssl"], str) : - openssl_prefix = env["openssl"] - openssl_flags = {} - if openssl_prefix : - openssl_include = env.get("openssl_include") - openssl_libdir = env.get("openssl_libdir") - if openssl_include: - openssl_flags = {"CPPPATH":[openssl_include]} - else: - openssl_flags = { "CPPPATH": [os.path.join(openssl_prefix, "include")] } - if openssl_libdir: - openssl_flags["LIBPATH"] = [openssl_libdir] - env["OPENSSL_DIR"] = openssl_prefix - elif env["PLATFORM"] == "win32" : - openssl_flags["LIBPATH"] = [os.path.join(openssl_prefix, "lib", "VC")] - env["OPENSSL_DIR"] = openssl_prefix - else : - openssl_flags["LIBPATH"] = [os.path.join(openssl_prefix, "lib")] - openssl_env.MergeFlags(openssl_flags) - - openssl_conf = Configure(openssl_env) - if use_openssl and openssl_conf.CheckCHeader("openssl/ssl.h") : - env["HAVE_OPENSSL"] = 1 - env["OPENSSL_FLAGS"] = openssl_flags - openssl_libnames = env.get("openssl_libnames") - if openssl_libnames: - env["OPENSSL_FLAGS"]["LIBS"] = openssl_libnames.split(',') - elif env["PLATFORM"] == "win32" : - env["OPENSSL_FLAGS"]["LIBS"] = ["libeay32MD", "ssleay32MD"] - else: - env["OPENSSL_FLAGS"]["LIBS"] = ["ssl", "crypto"] - if env["PLATFORM"] == "darwin" : - if platform.mac_ver()[0].startswith("10.5") : - env["OPENSSL_FLAGS"]["FRAMEWORKS"] = ["Security"] - openssl_conf.Finish() + openssl_env = conf_env.Clone() + use_openssl = bool(env["openssl"]) + openssl_prefix = "" + if isinstance(env["openssl"], str) : + openssl_prefix = env["openssl"] + openssl_flags = {} + if openssl_prefix : + openssl_include = env.get("openssl_include") + openssl_libdir = env.get("openssl_libdir") + if openssl_include: + openssl_flags = {"CPPPATH":[openssl_include]} + else: + openssl_flags = { "CPPPATH": [os.path.join(openssl_prefix, "include")] } + if openssl_libdir: + openssl_flags["LIBPATH"] = [openssl_libdir] + env["OPENSSL_DIR"] = openssl_prefix + elif env["PLATFORM"] == "win32" : + openssl_flags["LIBPATH"] = [os.path.join(openssl_prefix, "lib", "VC")] + env["OPENSSL_DIR"] = openssl_prefix + else : + openssl_flags["LIBPATH"] = [os.path.join(openssl_prefix, "lib")] + openssl_env.MergeFlags(openssl_flags) + + openssl_conf = Configure(openssl_env) + if use_openssl and openssl_conf.CheckCHeader("openssl/ssl.h") : + env["HAVE_OPENSSL"] = 1 + env["OPENSSL_FLAGS"] = openssl_flags + openssl_libnames = env.get("openssl_libnames") + if openssl_libnames: + env["OPENSSL_FLAGS"]["LIBS"] = openssl_libnames.split(',') + elif env["PLATFORM"] == "win32" : + env["OPENSSL_FLAGS"]["LIBS"] = ["libeay32MD", "ssleay32MD"] + else: + env["OPENSSL_FLAGS"]["LIBS"] = ["ssl", "crypto"] + if env["PLATFORM"] == "darwin" : + if platform.mac_ver()[0].startswith("10.5") : + env["OPENSSL_FLAGS"]["FRAMEWORKS"] = ["Security"] + openssl_conf.Finish() if env["PLATFORM"] == "win32" : - # On Windows link to secur32. It is needed by Swiften/SASL/WindowsAuthentication - env.Append(LIBS = ["secur32"]) + # On Windows link to secur32. It is needed by Swiften/SASL/WindowsAuthentication + env.Append(LIBS = ["secur32"]) #Hunspell hunspell_env = conf_env.Clone() hunspell_prefix = isinstance(env.get("hunspell_prefix", False), str) and env["hunspell_prefix"] or "" hunspell_flags = {} if hunspell_prefix : - hunspell_flags = {"CPPPATH":[os.path.join(hunspell_prefix, "include")], "LIBPATH":[os.path.join(hunspell_prefix, "lib")]} + hunspell_flags = {"CPPPATH":[os.path.join(hunspell_prefix, "include")], "LIBPATH":[os.path.join(hunspell_prefix, "lib")]} hunspell_env.MergeFlags(hunspell_flags) env["HAVE_HUNSPELL"] = 0; if env.get("hunspell_enable", False) : - hunspell_conf = Configure(hunspell_env) - if hunspell_conf.CheckCXXHeader("hunspell/hunspell.hxx") and hunspell_conf.CheckLib("hunspell") : - env["HAVE_HUNSPELL"] = 1 - hunspell_flags["LIBS"] = ["hunspell"] - env["HUNSPELL_FLAGS"] = hunspell_flags - hunspell_conf.Finish() + hunspell_conf = Configure(hunspell_env) + if hunspell_conf.CheckCXXHeader("hunspell/hunspell.hxx") and hunspell_conf.CheckLib("hunspell") : + env["HAVE_HUNSPELL"] = 1 + hunspell_flags["LIBS"] = ["hunspell"] + env["HUNSPELL_FLAGS"] = hunspell_flags + hunspell_conf.Finish() # Bonjour if env["PLATFORM"] == "darwin" and env["target"] == "native" : - env["HAVE_BONJOUR"] = 1 + env["HAVE_BONJOUR"] = 1 elif env.get("bonjour", False) : - bonjour_env = conf_env.Clone() - bonjour_conf = Configure(bonjour_env) - bonjour_flags = {} - if env.get("bonjour") != True : - bonjour_prefix = env["bonjour"] - bonjour_flags["CPPPATH"] = [os.path.join(bonjour_prefix, "include")] - bonjour_flags["LIBPATH"] = [os.path.join(bonjour_prefix, "lib", "win32")] - bonjour_env.MergeFlags(bonjour_flags) - if bonjour_conf.CheckCHeader("dns_sd.h") and bonjour_conf.CheckLib("dnssd") : - env["HAVE_BONJOUR"] = 1 - env["BONJOUR_FLAGS"] = bonjour_flags - env["BONJOUR_FLAGS"]["LIBS"] = ["dnssd"] - bonjour_conf.Finish() + bonjour_env = conf_env.Clone() + bonjour_conf = Configure(bonjour_env) + bonjour_flags = {} + if env.get("bonjour") != True : + bonjour_prefix = env["bonjour"] + bonjour_flags["CPPPATH"] = [os.path.join(bonjour_prefix, "include")] + bonjour_flags["LIBPATH"] = [os.path.join(bonjour_prefix, "lib", "win32")] + bonjour_env.MergeFlags(bonjour_flags) + if bonjour_conf.CheckCHeader("dns_sd.h") and bonjour_conf.CheckLib("dnssd") : + env["HAVE_BONJOUR"] = 1 + env["BONJOUR_FLAGS"] = bonjour_flags + env["BONJOUR_FLAGS"]["LIBS"] = ["dnssd"] + bonjour_conf.Finish() # Cocoa & IOKit if env["PLATFORM"] == "darwin" : - cocoa_conf = Configure(conf_env) - if cocoa_conf.CheckCHeader("IOKit/IOKitLib.h") : - env["HAVE_IOKIT"] = True - cocoa_conf.Finish() + cocoa_conf = Configure(conf_env) + if cocoa_conf.CheckCHeader("IOKit/IOKitLib.h") : + env["HAVE_IOKIT"] = True + cocoa_conf.Finish() # Qt try : - myenv = env.Clone() - myenv.Tool("qt4", toolpath = ["#/BuildTools/SCons/Tools"]) - env["HAVE_QT"] = True + myenv = env.Clone() + myenv.Tool("qt4", toolpath = ["#/BuildTools/SCons/Tools"]) + env["HAVE_QT"] = True except SCons.Errors.StopError: - env["HAVE_QT"] = False + env["HAVE_QT"] = False except Exception as e: - print "Info: %s" % str(e) - env["HAVE_QT"] = False + print "Info: %s" % str(e) + env["HAVE_QT"] = False ################################################################################ # DocBook setup ################################################################################ if env.get("docbook_xml") : - env["DOCBOOK_XML_DIR"] = env["docbook_xml"] + env["DOCBOOK_XML_DIR"] = env["docbook_xml"] if env.get("docbook_xsl") : - env["DOCBOOK_XSL_DIR"] = env["docbook_xsl"] + env["DOCBOOK_XSL_DIR"] = env["docbook_xsl"] ################################################################################ @@ -670,11 +670,11 @@ if env.get("docbook_xsl") : ################################################################################ try: - if env.Dir("#/.git").exists() : - if not env.GetOption("clean") and env.get("install_git_hooks", True) : - env.Install("#/.git/hooks", Glob("#/BuildTools/Git/Hooks/*")) + if env.Dir("#/.git").exists() : + if not env.GetOption("clean") and env.get("install_git_hooks", True) : + env.Install("#/.git/hooks", Glob("#/BuildTools/Git/Hooks/*")) except TypeError: - print "You seem to be using Swift in a Git submodule. Not installing hooks." + print "You seem to be using Swift in a Git submodule. Not installing hooks." ################################################################################ @@ -682,23 +682,23 @@ except TypeError: ################################################################################ if ARGUMENTS.get("replace_pragma_once", False) : - env.Tool("ReplacePragmaOnce", toolpath = ["#/BuildTools/SCons/Tools"]) - - def relpath(path, start) : - i = len(os.path.commonprefix([path, start])) - return path[i+1:] - - for actual_root, dirs, files in os.walk(root) : - if "3rdParty" in actual_root : - continue - for file in files : - if not file.endswith(".h") : - continue - include = relpath(os.path.join(actual_root, file), root) - env.ReplacePragmaOnce("#/include/" + include, "#/" + include) - env.Append(CPPPATH = ["#/include"]) + env.Tool("ReplacePragmaOnce", toolpath = ["#/BuildTools/SCons/Tools"]) + + def relpath(path, start) : + i = len(os.path.commonprefix([path, start])) + return path[i+1:] + + for actual_root, dirs, files in os.walk(root) : + if "3rdParty" in actual_root : + continue + for file in files : + if not file.endswith(".h") : + continue + include = relpath(os.path.join(actual_root, file), root) + env.ReplacePragmaOnce("#/include/" + include, "#/" + include) + env.Append(CPPPATH = ["#/include"]) else : - env.Append(CPPPATH = [root]) + env.Append(CPPPATH = [root]) ################################################################################ @@ -706,29 +706,29 @@ else : ################################################################################ if ARGUMENTS.get("dump_trace", False) : - env.SetOption("no_exec", True) - env["TEST"] = True - env["BOOST_BUILD_BCP"] = True - env.Decider(lambda x, y, z : True) - SCons.Node.Python.Value.changed_since_last_build = (lambda x, y, z: True) + env.SetOption("no_exec", True) + env["TEST"] = True + env["BOOST_BUILD_BCP"] = True + env.Decider(lambda x, y, z : True) + SCons.Node.Python.Value.changed_since_last_build = (lambda x, y, z: True) # Modules modules = [] if os.path.isdir(Dir("#/3rdParty").abspath) : - for dir in os.listdir(Dir("#/3rdParty").abspath) : - full_dir = os.path.join(Dir("#/3rdParty").abspath, dir) - if not os.path.isdir(full_dir) : - continue - sconscript = os.path.join(full_dir, "SConscript") - if os.path.isfile(sconscript) : - modules.append("3rdParty/" + dir) + for dir in os.listdir(Dir("#/3rdParty").abspath) : + full_dir = os.path.join(Dir("#/3rdParty").abspath, dir) + if not os.path.isdir(full_dir) : + continue + sconscript = os.path.join(full_dir, "SConscript") + if os.path.isfile(sconscript) : + modules.append("3rdParty/" + dir) for dir in os.listdir(Dir("#").abspath) : - full_dir = os.path.join(Dir("#").abspath, dir) - if not os.path.isdir(full_dir) : - continue - sconscript = os.path.join(full_dir, "SConscript") - if os.path.isfile(sconscript) : - modules.append(dir) + full_dir = os.path.join(Dir("#").abspath, dir) + if not os.path.isdir(full_dir) : + continue + sconscript = os.path.join(full_dir, "SConscript") + if os.path.isfile(sconscript) : + modules.append(dir) # QA comes last modules.remove("QA") @@ -737,13 +737,13 @@ modules.append("QA") # Flags env["PROJECTS"] = [m for m in modules if m not in ["Documentation", "QA", "SwifTools"] and not m.startswith("3rdParty")] for stage in ["flags", "build"] : - env["SCONS_STAGE"] = stage - SConscript(dirs = map(lambda x : root + "/" + x, modules)) + env["SCONS_STAGE"] = stage + SConscript(dirs = map(lambda x : root + "/" + x, modules)) # SLOCCount if ARGUMENTS.get("sloccount", False) : - for project in env["PROJECTS"] : - env.SLOCCount("#/" + project) + for project in env["PROJECTS"] : + env.SLOCCount("#/" + project) ################################################################################ @@ -756,11 +756,11 @@ print " -------------------" parsers = [] if env.get("HAVE_LIBXML", 0): - parsers.append("LibXML") + parsers.append("LibXML") if env.get("HAVE_EXPAT", 0): - parsers.append("Expat") - if env.get("EXPAT_BUNDLED", False) : - parsers.append("(Bundled)") + parsers.append("Expat") + if env.get("EXPAT_BUNDLED", False) : + parsers.append("(Bundled)") print " Projects: " + ' '.join(env["PROJECTS"]) print "" print " XML Parsers: " + ' '.join(parsers) @@ -768,3 +768,8 @@ print " XML Parsers: " + ' '.join(parsers) print " TLS Support: " + (env.get("HAVE_OPENSSL",0) and "OpenSSL" or env.get("HAVE_SECURETRANSPORT",0) and "Secure Transport" or env.get("HAVE_SCHANNEL", 0) and "Schannel" or "Disabled") print " DNSSD Support: " + (env.get("HAVE_BONJOUR") and "Bonjour" or (env.get("HAVE_AVAHI") and "Avahi" or "Disabled")) print + +if not GetOption("help") and not env.get("HAVE_OPENSSL", 0) and not env.get("HAVE_SCHANNEL", 0) and not env.get("HAVE_SECURETRANSPORT", 0): + print "Error: A working TLS backend is required. Please check the documentation for more information." + Exit(1) + |