diff options
author | Kevin Smith <git@kismith.co.uk> | 2014-10-02 11:34:50 (GMT) |
---|---|---|
committer | Kevin Smith <git@kismith.co.uk> | 2014-10-06 14:37:20 (GMT) |
commit | e2385da3debfdd372630fa36f70e2440f9c13ac4 (patch) | |
tree | f0c9da71120d9d84b80dbc732f165251ab7ad057 | |
parent | 9d9dc201b24109c8d7fd8f85553659888c1d7747 (diff) | |
download | swift-contrib-e2385da3debfdd372630fa36f70e2440f9c13ac4.zip swift-contrib-e2385da3debfdd372630fa36f70e2440f9c13ac4.tar.bz2 |
Allow scons to not require an IDN library
This will clearly break all the tests, Swift, Sluift etc., but is useful
if someone wants to use Swiften and inject their own IDN provider.
Test-information:
Compiles with Isode's IDN provider
Change-Id: Ia55991054f42f332bf34b653d7b55f64f654820e
-rw-r--r-- | BuildTools/SCons/SConscript.boot | 1 | ||||
-rw-r--r-- | BuildTools/SCons/SConstruct | 6 | ||||
-rw-r--r-- | Swiften/IDN/PlatformIDNConverter.cpp | 2 | ||||
-rw-r--r-- | Swiften/IDN/SConscript | 2 |
4 files changed, 10 insertions, 1 deletions
diff --git a/BuildTools/SCons/SConscript.boot b/BuildTools/SCons/SConscript.boot index 51be9ab..0a4eb33 100644 --- a/BuildTools/SCons/SConscript.boot +++ b/BuildTools/SCons/SConscript.boot @@ -60,18 +60,19 @@ vars.Add(BoolVariable("try_expat", "Try configuring for expat?", "true")) vars.Add(PathVariable("expat_includedir", "Expat headers location", None, PathVariable.PathAccept)) vars.Add(PathVariable("expat_libdir", "Expat library location", None, PathVariable.PathAccept)) vars.Add("expat_libname", "Expat library name", os.name == "nt" and "libexpat" or "expat") vars.Add(PackageVariable("icu", "ICU library location", "no")) vars.Add(BoolVariable("libidn_bundled_enable", "Allow use of bunded Expat", "true")) vars.Add(BoolVariable("try_libidn", "Try configuring for LibIDN?", "true")) vars.Add(PathVariable("libidn_includedir", "LibIDN headers location", None, PathVariable.PathAccept)) vars.Add(PathVariable("libidn_libdir", "LibIDN library location", None, PathVariable.PathAccept)) vars.Add("libidn_libname", "LibIDN library name", os.name == "nt" and "libidn" or "idn") +vars.Add(BoolVariable("need_idn", "Whether an IDN library is required. Without this, most internal binaries will fail", "true")) vars.Add(PathVariable("libminiupnpc_includedir", "LibMiniUPNPC headers location", None, PathVariable.PathAccept)) vars.Add(PathVariable("libminiupnpc_libdir", "LibMiniUPNPC library location", None, PathVariable.PathAccept)) vars.Add("libminiupnpc_libname", "LibMiniUPNPC library name", "libminiupnpc" if os.name == "nt" else "miniupnpc") vars.Add(PathVariable("libnatpmp_includedir", "LibNATPMP headers location", None, PathVariable.PathAccept)) vars.Add(PathVariable("libnatpmp_libdir", "LibNATPMP library location", None, PathVariable.PathAccept)) vars.Add("libnatpmp_libname", "LibNATPMP library name", "libnatpmp" if os.name == "nt" else "natpmp") vars.Add(PathVariable("sqlite_includedir", "SQLite headers location", None, PathVariable.PathAccept)) vars.Add(PathVariable("sqlite_libdir", "SQLite library location", None, PathVariable.PathAccept)) vars.Add("sqlite_libname", "SQLite library name", os.name == "nt" and "libsqlite3" or "sqlite3") diff --git a/BuildTools/SCons/SConstruct b/BuildTools/SCons/SConstruct index 7bda9c1..5db30f8 100644 --- a/BuildTools/SCons/SConstruct +++ b/BuildTools/SCons/SConstruct @@ -322,18 +322,20 @@ 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 ################################################################################ # IDN library ################################################################################ +env["NEED_IDN"] = env.get("need_idn", True) + # ICU icu_env = conf_env.Clone() use_icu = bool(env["icu"]) icu_prefix = "" if isinstance(env["icu"], str) : icu_prefix = env["icu"] icu_flags = {} if icu_prefix : icu_flags = { "CPPPATH": [os.path.join(icu_prefix, "include")] } @@ -361,21 +363,23 @@ if env.get("try_libidn", True) and not env.get("HAVE_ICU") and conf.CheckCHeader 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 - else : + 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 else : env["LDNS_FLAGS"] = {} env["UNBOUND_FLAGS"] = {} diff --git a/Swiften/IDN/PlatformIDNConverter.cpp b/Swiften/IDN/PlatformIDNConverter.cpp index 6d9cff7..4882b60 100644 --- a/Swiften/IDN/PlatformIDNConverter.cpp +++ b/Swiften/IDN/PlatformIDNConverter.cpp @@ -13,15 +13,17 @@ namespace Swift { IDNConverter* PlatformIDNConverter::create() { #if defined(HAVE_LIBIDN) return new LibIDNConverter(); #elif defined(HAVE_ICU) return new ICUConverter(); #else +#if defined(NEED_IDN) #error "No IDN implementation" +#endif return 0; #endif } } diff --git a/Swiften/IDN/SConscript b/Swiften/IDN/SConscript index 9d3b8f9..4c1a71d 100644 --- a/Swiften/IDN/SConscript +++ b/Swiften/IDN/SConscript @@ -1,15 +1,17 @@ Import("swiften_env", "env") objects = swiften_env.SwiftenObject(["IDNConverter.cpp"]) myenv = swiften_env.Clone() +if myenv.get("NEED_IDN"): + myenv.Append(CPPDEFINES = ["NEED_IDN"]) if myenv.get("HAVE_ICU") : myenv.MergeFlags(swiften_env["ICU_FLAGS"]) myenv.Append(CPPDEFINES = ["HAVE_ICU"]) objects += myenv.SwiftenObject(["ICUConverter.cpp"]) if myenv.get("HAVE_LIBIDN") : myenv.MergeFlags(swiften_env["LIBIDN_FLAGS"]) myenv.Append(CPPDEFINES = ["HAVE_LIBIDN"]) objects += myenv.SwiftenObject(["LibIDNConverter.cpp"]) objects += myenv.SwiftenObject(["PlatformIDNConverter.cpp"]) |