From 625d6a9f18c2377cdc3180e74b773ce3cbb2dcba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Remko=20Tron=C3=A7on?= Date: Sun, 28 Mar 2010 14:37:13 +0200 Subject: Moved SConscript guts to BuildTools dir. diff --git a/BuildTools/SCons/SConstruct b/BuildTools/SCons/SConstruct new file mode 100644 index 0000000..b730e98 --- /dev/null +++ b/BuildTools/SCons/SConstruct @@ -0,0 +1,412 @@ +import sys, os +sys.path.append(Dir("BuildTools/SCons").abspath) +import SCons.SConf + +################################################################################ +# Build variables +################################################################################ + +vars = Variables(os.path.join(Dir("#").abspath, "config.py")) +vars.Add('ccflags', "Extra C(++) compiler flags") +vars.Add('linkflags', "Extra linker flags") +vars.Add(EnumVariable("test", "Compile and run tests", "none", ["none", "all", "unit", "system"])) +vars.Add(BoolVariable("optimize", "Compile with optimizations turned on", "no")) +vars.Add(BoolVariable("debug", "Compile with debug information", "yes" if os.name != "nt" else "no")) +vars.Add(BoolVariable("warnings", "Compile with warnings turned on", + "yes" if os.name != "nt" else "no")) +vars.Add(BoolVariable("max_jobs", "Build with maximum number of parallel jobs", "no")) +vars.Add(EnumVariable("target", "Choose a target platform for compilation", "native", ["native", "iphone-simulator", "iphone-device"])) +if os.name != "nt" : + vars.Add(BoolVariable("coverage", "Compile with coverage information", "no")) +if os.name == "posix" : + vars.Add(BoolVariable("valgrind", "Run tests with valgrind", "no")) +if os.name == "mac" or (os.name == "posix" and os.uname()[0] == "Darwin"): + vars.Add(BoolVariable("universal", "Create universal binaries", "no")) +if os.name == "nt" : + vars.Add(PathVariable("vcredist", "MSVC redistributable dir", "", PathVariable.PathAccept)) +if os.name == "nt" : + vars.Add(PackageVariable("bonjour", "Bonjour SDK location", "yes")) +vars.Add(PackageVariable("openssl", "OpenSSL location", "yes")) +vars.Add(PathVariable("qt", "Qt location", "", PathVariable.PathAccept)) + +################################################################################ +# Set up default build & configure environment +################################################################################ + +env = Environment(CPPPATH = "#", ENV = {'PATH' : os.environ['PATH']}, variables = vars) + +Help(vars.GenerateHelpText(env)) + +env.Alias("dist", ["."]) + +# Default custom tools +env.Tool("Test", toolpath = ["#/BuildTools/SCons/Tools"]) +env.Tool("WriteVal", toolpath = ["#/BuildTools/SCons/Tools"]) +env.Tool("BuildVersion", toolpath = ["#/BuildTools/SCons/Tools"]) +if env["PLATFORM"] == "darwin" : + env.Tool("Nib", toolpath = ["#/BuildTools/SCons/Tools"]) + env.Tool("AppBundle", toolpath = ["#/BuildTools/SCons/Tools"]) +if env["PLATFORM"] == "win32" : + env.Tool("WindowsBundle", toolpath = ["#/BuildTools/SCons/Tools"]) + +# 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) + +# Max out the number of jobs +if env["max_jobs"] : + try : + import multiprocessing + SetOption("num_jobs", multiprocessing.cpu_count()) + except NotImplementedError : + pass + +# Default compiler flags +env["CCFLAGS"] = env.get("ccflags", []) +env["LINKFLAGS"] = env.get("linkflags", []) +if env["optimize"] : + env.Append(CCFLAGS = "-O2") + if env["PLATFORM"] == "win32" : + env.Append(CCFLAGS = ["GL"]) + env.Append(LINKFLAGS = ["/INCREMENTAL:NO", "/LTCG"]) + +if env["debug"] : + if env["PLATFORM"] == "win32" : + env.Append(CCFLAGS = ["/Zi", "/MDd"]) + env.Append(LINKFLAGS = ["/DEBUG"]) + else : + env.Append(CCFLAGS = "-g") +elif env["PLATFORM"] == "win32" : + env.Append(CCFLAGS = ["/MD"]) + +if env.get("universal", 0) : + assert(env["PLATFORM"] == "darwin") + env.Append(CCFLAGS = [ + "-isysroot", "/Developer/SDKs/MacOSX10.4u.sdk", + "-arch", "i386", + "-arch", "ppc"]) + env.Append(LINKFLAGS = [ + "-mmacosx-version-min=10.4", + "-Wl", "-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk", + "-arch", "i386", + "-arch", "ppc"]) + +if env["warnings"] : + if env["PLATFORM"] == "win32" : + env.Append(CCFLAGS = ["/Wall"]) + else : + env.Append(CCFLAGS = ["-W", "-Wall"]) + #env.Append(CCFLAGS = ["-W", "-Wall", "-Wredundant-decls", "-pedantic", "-Wno-long-long", "-Woverloaded-virtual", "-Wundef", "-Wfloat-equal", "-Wold-style-cast"]) + +if env.get("coverage", 0) : + assert(env["PLATFORM"] != "win32") + env.Append(CCFLAGS = ["-fprofile-arcs", "-ftest-coverage"]) + env.Append(LINKFLAGS = ["-fprofile-arcs", "-ftest-coverage"]) + +if env["PLATFORM"] == "win32" : + env.Append(LIBS = ["user32", "dnsapi", "ws2_32", "wsock32"]) + env.Append(CCFLAGS = ["/EHsc", "/nologo"]) + env["LINKCOM"] = [env["LINKCOM"], 'mt.exe -nologo -manifest ${TARGET}.manifest -outputresource:$TARGET;1'] + env["SHLINKCOM"] = [env["SHLINKCOM"], 'mt.exe -nologo -manifest ${TARGET}.manifest -outputresource:$TARGET;2'] + +if env["PLATFORM"] == "darwin" : + env.Append(FRAMEWORKS = ["IOKit", "AppKit"]) + +# Testing +env["TEST_TYPE"] = env["test"] +env.Alias("check", ".") +if "check" in ARGUMENTS or "check" in COMMAND_LINE_TARGETS : + env["TEST_TYPE"] = "unit" +env["TEST"] = (env["TEST_TYPE"] != "none") or env.GetOption("clean") +if env.get("valgrind", 0) : + env["TEST_RUNNER"] = "valgrind --suppressions=QA/valgrind.supp -q --leak-check=full --track-origins=yes " + +# Packaging +if ARGUMENTS.get("SWIFT_INSTALLDIR", "") : + env["SWIFT_INSTALLDIR"] = Dir(ARGUMENTS["SWIFT_INSTALLDIR"]).abspath + +# cross-compiling +target = env["target"] +if target in ("iphone-device", "iphone-simulator"): + if target == "iphone-device": + sdkPart = "iPhoneOS" + env["CC"] = "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin9-gcc-4.0.1" + env["CXX"] = "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin9-g++-4.0.1" + env["PATH"] = "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/" + env["LD"] = env["CC"] +# env["openssl"] = "#/3rdParty/openssl-0.9.8l-arm" + targetIncludesArch = "arm" + + if target == "iphone-simulator": + sdkPart = "iPhoneSimulator" + env.Append(CCFLAGS = ["-arch", "i386"]) + env.Append(LINKFLAGS = ["-arch", "i386"]) + targetIncludesArch = "i686" + + sdkVer = "3.0" + sdk = "/Developer/Platforms/" + sdkPart + ".platform/Developer/SDKs/" + sdkPart + sdkVer + ".sdk" + + env["FRAMEWORKS"] = ["CoreFoundation", "Foundation", "UIKit", "CoreGraphics"] + env.Append(LINKFLAGS = ["-L\"" + sdk + "/usr/lib\"", "-F\"" + sdk + "/System/Library/Frameworks\"", "-F\"" + sdk + "/System/Library/PrivateFrameworks\""]) + env["CPPPATH"] = ["/Users/kismith/devel/swift/iPhone/Swiftly/swift/", "/Developer/Platforms/" + sdkPart + ".platform/Developer/usr/lib/gcc/" + targetIncludesArch + "-apple-darwin9/4.0.1/include/", sdk + "/usr/include", sdk + "/usr/include/c++/4.0.0/" + targetIncludesArch + "-apple-darwin9", sdk + "/usr/include/c++/4.0.0", "/Developer/Platforms/" + sdkPart + ".platform/Developer/usr/include/"] + +# end cross compiling stuff + + +conf_env = env.Clone() + +Export("env") +Export("conf_env") + + +################################################################################ +# Extend the default build environment (not affecting the configure env) +# +# Keeping both environments separated mostly because of SCons Issue 2391, +# although it doesn't hurt to separate them (e.g. not have pretty printed +# strings in config.log) +################################################################################ + +#if env["PLATFORM"] == "win32" : +# 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 + +if int(ARGUMENTS.get("V", 0)) == 0: + env["CCCOMSTR"] = colorize("CC", "$TARGET", "green") + env["CXXCOMSTR"] = colorize("CXX", "$TARGET", "green") + env["LINKCOMSTR"] = colorize("LINK", "$TARGET", "red") + env["ARCOMSTR"] = colorize("AR", "$TARGET", "red") + env["RANLIBCOMSTR"] = colorize("RANLIB", "$TARGET", "red") + 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["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") + #Progress(colorize("DEP", "$TARGET", "red") + +def checkObjCHeader(context, header) : + context.Message("Checking for Objective-C header " + header + " ... ") + ret = context.TryCompile("#include \n#include <" + header + ">", ".m") + context.Result(ret) + return ret + +################################################################################ +# Platform configuration +################################################################################ + +if ARGUMENTS.get("force-configure", 0) : + SCons.SConf.SetCacheMode("force") + +conf = Configure(conf_env) + +if not conf.CheckCXX() or not conf.CheckCC() : + print "Error: You need a working compiler" + Exit(1) + +if conf.CheckLib("z") : + env.Append(LIBS = "z") + env["ZLIB_FLAGS"] = "" +else : + SConscript("#/3rdParty/ZLib/SConscript") + +if conf.CheckLib("dl") : + env.Append(LIBS = ["dl"]) + +if conf.CheckLib("c") : + env.Append(LIBS = ["c"]) + +if conf.CheckLib("resolv") : + env.Append(LIBS = ["resolv"]) + +# Expat +if conf.CheckCHeader("expat.h") and conf.CheckLib("expat") : + env["HAVE_EXPAT"] = 1 + env["EXPAT_FLAGS"] = { "LIBS": ["expat"] } + +conf.Finish() + +# Xss +env["HAVE_XSS"] = 0 +if env["PLATFORM"] != "win32" and env["PLATFORM"] != "darwin" : + xss_flags = { + "LIBPATH": ["/usr/X11R6/lib"], + "LIBS": ["X11", "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() + +# 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() + +# LibXML +conf = Configure(conf_env) +if conf.CheckCHeader("libxml/parser.h") and conf.CheckLib("xml2") : + env["HAVE_LIBXML"] = 1 + env["LIBXML_FLAGS"] = { "LIBS": ["xml2"] } +conf.Finish() + +if not env.get("HAVE_LIBXML", 0) : + libxml_env = conf_env.Clone() + libxml_env.Append(CPPPATH = ["/usr/include/libxml2"]) + conf = Configure(libxml_env) + if conf.CheckCHeader("libxml/parser.h") and conf.CheckLib("xml2") : + env["HAVE_LIBXML"] = 1 + env["LIBXML_FLAGS"] = { "CPPPATH": ["/usr/include/libxml2"], "LIBS": ["xml2"] } + conf.Finish() + +# Bundled expat +bundledExpat = False +if not env.get("HAVE_EXPAT", 0) : + print "Expat or LibXML not found. Using bundled Expat" + SConscript("#/3rdParty/Expat/SConscript") + env["HAVE_EXPAT"] = 1 + bundledExpat = True + +# Qt +if env["qt"] : + env["QTDIR"] = env["qt"] + +# OpenSSL +openssl_env = conf_env.Clone() +use_openssl = bool(env["openssl"]) +openssl_prefix = env["openssl"] if isinstance(env["openssl"], str) else "" +openssl_flags = {} +if openssl_prefix : + openssl_flags = { "CPPPATH": [os.path.join(openssl_prefix, "include")] } + if 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 + if env["PLATFORM"] == "win32" : + env["OPENSSL_FLAGS"]["LIBS"] = ["libeay32MT", "ssleay32MT"] + else: + env["OPENSSL_FLAGS"]["LIBS"] = ["ssl", "crypto"] +else : + env["OPENSSL_FLAGS"] = "" + +openssl_conf.Finish() + +# Bonjour +if env["PLATFORM"] == "darwin" : + 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() + +################################################################################ +# Project files +# FIXME: We need to explicitly list the order of libraries here, because of +# the exported FLAGS. We should put FLAGS in separate SConscript files, and +# read these in before anything else, such that we don't need to manually +# list modules in order. +################################################################################ + +# Third-party modules +SConscript(dirs = [ + "#/3rdParty/CppUnit", + "#/3rdParty/Boost", + "#/3rdParty/LibIDN" + ]) + +if env.get("target", 0) == "native": + SConscript(dirs = [ + "#/3rdParty/CAres", + "#/3rdParty/SQLite" + ]) + +# Checker +SConscript(dirs = ["#/QA/Checker"], test_only = True) + +# Libraries +SConscript(dirs = [ + "#/Swiften", + "#/SwifTools" + ]) + +# Projects +for dir in os.listdir(Dir("#").abspath) : + full_dir = os.path.join(Dir("#").abspath, dir) + if not os.path.isdir(full_dir) : + continue + if dir in ["QA", "Swiften", "SwifTools"] : + continue + sconscript = os.path.join(full_dir, "SConscript") + if os.path.isfile(sconscript) : + SConscript(sconscript) + +# Unit test runner +SConscript(dirs = ["#/QA/UnitTest"], test_only = True) + +################################################################################ +# Print summary +################################################################################ + +print +print " Build Configuration" +print " -------------------" + +parsers = [] +if env.get("HAVE_LIBXML", 0): + parsers.append("LibXML") +if env.get("HAVE_EXPAT", 0): + parsers.append("Expat") + if bundledExpat: + parsers.append("(Bundled)") +print " XML Parsers: " + ' '.join(parsers) + +print " TLS Support: " + ("OpenSSL" if env.get("HAVE_OPENSSL",0) else "Disabled") +print " DNSSD Support: " + ("Bonjour" if env.get("HAVE_BONJOUR") else ("Avahi" if env.get("HAVE_AVAHI") else "Disabled")) +print diff --git a/SConstruct b/SConstruct index 3e9b178..bad221a 100644 --- a/SConstruct +++ b/SConstruct @@ -1,406 +1 @@ -import sys, os -sys.path.append(Dir("BuildTools/SCons").abspath) -import SCons.SConf - -################################################################################ -# Build variables -################################################################################ - -vars = Variables("config.py") -vars.Add('ccflags', "Extra C(++) compiler flags") -vars.Add('linkflags', "Extra linker flags") -vars.Add(EnumVariable("test", "Compile and run tests", "none", ["none", "all", "unit", "system"])) -vars.Add(BoolVariable("optimize", "Compile with optimizations turned on", "no")) -vars.Add(BoolVariable("debug", "Compile with debug information", "yes" if os.name != "nt" else "no")) -vars.Add(BoolVariable("warnings", "Compile with warnings turned on", - "yes" if os.name != "nt" else "no")) -vars.Add(BoolVariable("max_jobs", "Build with maximum number of parallel jobs", "no")) -vars.Add(EnumVariable("target", "Choose a target platform for compilation", "native", ["native", "iphone-simulator", "iphone-device"])) -if os.name != "nt" : - vars.Add(BoolVariable("coverage", "Compile with coverage information", "no")) -if os.name == "posix" : - vars.Add(BoolVariable("valgrind", "Run tests with valgrind", "no")) -if os.name == "mac" or (os.name == "posix" and os.uname()[0] == "Darwin"): - vars.Add(BoolVariable("universal", "Create universal binaries", "no")) -if os.name == "nt" : - vars.Add(PathVariable("vcredist", "MSVC redistributable dir", "", PathVariable.PathAccept)) -if os.name == "nt" : - vars.Add(PackageVariable("bonjour", "Bonjour SDK location", "yes")) -vars.Add(PackageVariable("openssl", "OpenSSL location", "yes")) -vars.Add(PathVariable("qt", "Qt location", "", PathVariable.PathAccept)) - -################################################################################ -# Set up default build & configure environment -################################################################################ - -env = Environment(CPPPATH = "#", ENV = {'PATH' : os.environ['PATH']}, variables = vars) - -Help(vars.GenerateHelpText(env)) - -env.Alias("dist", ["."]) - -# Default custom tools -env.Tool("Test", toolpath = ["#/BuildTools/SCons/Tools"]) -env.Tool("WriteVal", toolpath = ["#/BuildTools/SCons/Tools"]) -env.Tool("BuildVersion", toolpath = ["#/BuildTools/SCons/Tools"]) -if env["PLATFORM"] == "darwin" : - env.Tool("Nib", toolpath = ["#/BuildTools/SCons/Tools"]) - env.Tool("AppBundle", toolpath = ["#/BuildTools/SCons/Tools"]) -if env["PLATFORM"] == "win32" : - env.Tool("WindowsBundle", toolpath = ["#/BuildTools/SCons/Tools"]) - -# 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) - -# Max out the number of jobs -if env["max_jobs"] : - try : - import multiprocessing - SetOption("num_jobs", multiprocessing.cpu_count()) - except NotImplementedError : - pass - -# Default compiler flags -env["CCFLAGS"] = env.get("ccflags", []) -env["LINKFLAGS"] = env.get("linkflags", []) -if env["optimize"] : - env.Append(CCFLAGS = "-O2") - if env["PLATFORM"] == "win32" : - env.Append(CCFLAGS = ["GL"]) - env.Append(LINKFLAGS = ["/INCREMENTAL:NO", "/LTCG"]) - -if env["debug"] : - if env["PLATFORM"] == "win32" : - env.Append(CCFLAGS = ["/Zi", "/MDd"]) - env.Append(LINKFLAGS = ["/DEBUG"]) - else : - env.Append(CCFLAGS = "-g") -elif env["PLATFORM"] == "win32" : - env.Append(CCFLAGS = ["/MD"]) - -if env.get("universal", 0) : - assert(env["PLATFORM"] == "darwin") - env.Append(CCFLAGS = [ - "-isysroot", "/Developer/SDKs/MacOSX10.4u.sdk", - "-arch", "i386", - "-arch", "ppc"]) - env.Append(LINKFLAGS = [ - "-mmacosx-version-min=10.4", - "-Wl", "-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk", - "-arch", "i386", - "-arch", "ppc"]) - -if env["warnings"] : - if env["PLATFORM"] == "win32" : - env.Append(CCFLAGS = ["/Wall"]) - else : - env.Append(CCFLAGS = ["-W", "-Wall"]) - #env.Append(CCFLAGS = ["-W", "-Wall", "-Wredundant-decls", "-pedantic", "-Wno-long-long", "-Woverloaded-virtual", "-Wundef", "-Wfloat-equal", "-Wold-style-cast"]) - -if env.get("coverage", 0) : - assert(env["PLATFORM"] != "win32") - env.Append(CCFLAGS = ["-fprofile-arcs", "-ftest-coverage"]) - env.Append(LINKFLAGS = ["-fprofile-arcs", "-ftest-coverage"]) - -if env["PLATFORM"] == "win32" : - env.Append(LIBS = ["user32", "dnsapi", "ws2_32", "wsock32"]) - env.Append(CCFLAGS = ["/EHsc", "/nologo"]) - env["LINKCOM"] = [env["LINKCOM"], 'mt.exe -nologo -manifest ${TARGET}.manifest -outputresource:$TARGET;1'] - env["SHLINKCOM"] = [env["SHLINKCOM"], 'mt.exe -nologo -manifest ${TARGET}.manifest -outputresource:$TARGET;2'] - -if env["PLATFORM"] == "darwin" : - env.Append(FRAMEWORKS = ["IOKit", "AppKit"]) - -# Testing -env["TEST_TYPE"] = env["test"] -env.Alias("check", ".") -if "check" in ARGUMENTS or "check" in COMMAND_LINE_TARGETS : - env["TEST_TYPE"] = "unit" -env["TEST"] = (env["TEST_TYPE"] != "none") or env.GetOption("clean") -if env.get("valgrind", 0) : - env["TEST_RUNNER"] = "valgrind --suppressions=QA/valgrind.supp -q --leak-check=full --track-origins=yes " - -# Packaging -if ARGUMENTS.get("SWIFT_INSTALLDIR", "") : - env["SWIFT_INSTALLDIR"] = Dir(ARGUMENTS["SWIFT_INSTALLDIR"]).abspath - -# cross-compiling -target = env["target"] -if target in ("iphone-device", "iphone-simulator"): - if target == "iphone-device": - sdkPart = "iPhoneOS" - env["CC"] = "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin9-gcc-4.0.1" - env["CXX"] = "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin9-g++-4.0.1" - env["PATH"] = "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/" - env["LD"] = env["CC"] -# env["openssl"] = "3rdParty/openssl-0.9.8l-arm" - targetIncludesArch = "arm" - - if target == "iphone-simulator": - sdkPart = "iPhoneSimulator" - env.Append(CCFLAGS = ["-arch", "i386"]) - env.Append(LINKFLAGS = ["-arch", "i386"]) - targetIncludesArch = "i686" - - sdkVer = "3.0" - sdk = "/Developer/Platforms/" + sdkPart + ".platform/Developer/SDKs/" + sdkPart + sdkVer + ".sdk" - - env["FRAMEWORKS"] = ["CoreFoundation", "Foundation", "UIKit", "CoreGraphics"] - env.Append(LINKFLAGS = ["-L\"" + sdk + "/usr/lib\"", "-F\"" + sdk + "/System/Library/Frameworks\"", "-F\"" + sdk + "/System/Library/PrivateFrameworks\""]) - env["CPPPATH"] = ["/Users/kismith/devel/swift/iPhone/Swiftly/swift/", "/Developer/Platforms/" + sdkPart + ".platform/Developer/usr/lib/gcc/" + targetIncludesArch + "-apple-darwin9/4.0.1/include/", sdk + "/usr/include", sdk + "/usr/include/c++/4.0.0/" + targetIncludesArch + "-apple-darwin9", sdk + "/usr/include/c++/4.0.0", "/Developer/Platforms/" + sdkPart + ".platform/Developer/usr/include/"] - -# end cross compiling stuff - - -conf_env = env.Clone() - -Export("env") -Export("conf_env") - - -################################################################################ -# Extend the default build environment (not affecting the configure env) -# -# Keeping both environments separated mostly because of SCons Issue 2391, -# although it doesn't hurt to separate them (e.g. not have pretty printed -# strings in config.log) -################################################################################ - -#if env["PLATFORM"] == "win32" : -# 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 - -if int(ARGUMENTS.get("V", 0)) == 0: - env["CCCOMSTR"] = colorize("CC", "$TARGET", "green") - env["CXXCOMSTR"] = colorize("CXX", "$TARGET", "green") - env["LINKCOMSTR"] = colorize("LINK", "$TARGET", "red") - env["ARCOMSTR"] = colorize("AR", "$TARGET", "red") - env["RANLIBCOMSTR"] = colorize("RANLIB", "$TARGET", "red") - 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["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") - #Progress(colorize("DEP", "$TARGET", "red") - -def checkObjCHeader(context, header) : - context.Message("Checking for Objective-C header " + header + " ... ") - ret = context.TryCompile("#include \n#include <" + header + ">", ".m") - context.Result(ret) - return ret - -################################################################################ -# Platform configuration -################################################################################ - -if ARGUMENTS.get("force-configure", 0) : - SCons.SConf.SetCacheMode("force") - -conf = Configure(conf_env) - -if not conf.CheckCXX() or not conf.CheckCC() : - print "Error: You need a working compiler" - Exit(1) - -if conf.CheckLib("z") : - env.Append(LIBS = "z") - env["ZLIB_FLAGS"] = "" -else : - SConscript("3rdParty/ZLib/SConscript") - -if conf.CheckLib("dl") : - env.Append(LIBS = ["dl"]) - -if conf.CheckLib("c") : - env.Append(LIBS = ["c"]) - -if conf.CheckLib("resolv") : - env.Append(LIBS = ["resolv"]) - -# Expat -if conf.CheckCHeader("expat.h") and conf.CheckLib("expat") : - env["HAVE_EXPAT"] = 1 - env["EXPAT_FLAGS"] = { "LIBS": ["expat"] } - -conf.Finish() - -# Xss -env["HAVE_XSS"] = 0 -if env["PLATFORM"] != "win32" and env["PLATFORM"] != "darwin" : - xss_flags = { - "LIBPATH": ["/usr/X11R6/lib"], - "LIBS": ["X11", "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() - -# 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() - -# LibXML -conf = Configure(conf_env) -if conf.CheckCHeader("libxml/parser.h") and conf.CheckLib("xml2") : - env["HAVE_LIBXML"] = 1 - env["LIBXML_FLAGS"] = { "LIBS": ["xml2"] } -conf.Finish() - -if not env.get("HAVE_LIBXML", 0) : - libxml_env = conf_env.Clone() - libxml_env.Append(CPPPATH = ["/usr/include/libxml2"]) - conf = Configure(libxml_env) - if conf.CheckCHeader("libxml/parser.h") and conf.CheckLib("xml2") : - env["HAVE_LIBXML"] = 1 - env["LIBXML_FLAGS"] = { "CPPPATH": ["/usr/include/libxml2"], "LIBS": ["xml2"] } - conf.Finish() - -# Bundled expat -bundledExpat = False -if not env.get("HAVE_EXPAT", 0) : - print "Expat or LibXML not found. Using bundled Expat" - SConscript("3rdParty/Expat/SConscript") - env["HAVE_EXPAT"] = 1 - bundledExpat = True - -# Qt -if env["qt"] : - env["QTDIR"] = env["qt"] - -# OpenSSL -openssl_env = conf_env.Clone() -use_openssl = bool(env["openssl"]) -openssl_prefix = env["openssl"] if isinstance(env["openssl"], str) else "" -openssl_flags = {} -if openssl_prefix : - openssl_flags = { "CPPPATH": [os.path.join(openssl_prefix, "include")] } - if 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 - if env["PLATFORM"] == "win32" : - env["OPENSSL_FLAGS"]["LIBS"] = ["libeay32MT", "ssleay32MT"] - else: - env["OPENSSL_FLAGS"]["LIBS"] = ["ssl", "crypto"] -else : - env["OPENSSL_FLAGS"] = "" - -openssl_conf.Finish() - -# Bonjour -if env["PLATFORM"] == "darwin" : - 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() - -################################################################################ -# Project files -# FIXME: We need to explicitly list the order of libraries here, because of -# the exported FLAGS. We should put FLAGS in separate SConscript files, and -# read these in before anything else, such that we don't need to manually -# list modules in order. -################################################################################ - -# Third-party modules -third_party_dirs = ["3rdParty/CppUnit", - "3rdParty/Boost", - "3rdParty/LibIDN"] -if env.get("target", 0) == "native": - third_party_dirs += ["3rdParty/CAres", - "3rdParty/SQLite"] - -SConscript(dirs=third_party_dirs) - -# Checker -SConscript(dirs = ["QA/Checker"], test_only = True) - -# Libraries -SConscript(dirs = [ - "Swiften", - "SwifTools" - ]) - -# Projects -for dir in os.listdir(".") : - if dir in ["QA", "Swiften", "SwifTools"] : - continue - sconscript = os.path.join(dir, "SConscript") - if os.path.isfile(sconscript) : - SConscript(sconscript) - -# Unit test runner -SConscript(dirs = ["QA/UnitTest"], test_only = True) - -################################################################################ -# Print summary -################################################################################ - -print -print " Build Configuration" -print " -------------------" - -parsers = [] -if env.get("HAVE_LIBXML", 0): - parsers.append("LibXML") -if env.get("HAVE_EXPAT", 0): - parsers.append("Expat") - if bundledExpat: - parsers.append("(Bundled)") -print " XML Parsers: " + ' '.join(parsers) - -print " TLS Support: " + ("OpenSSL" if env.get("HAVE_OPENSSL",0) else "Disabled") -print " DNSSD Support: " + ("Bonjour" if env.get("HAVE_BONJOUR") else ("Avahi" if env.get("HAVE_AVAHI") else "Disabled")) -print +SConscript("BuildTools/SCons/SConstruct") -- cgit v0.10.2-6-g49f6