diff options
-rw-r--r-- | Swiften/.gitignore | 1 | ||||
-rw-r--r-- | Swiften/SConscript | 46 |
2 files changed, 34 insertions, 13 deletions
diff --git a/Swiften/.gitignore b/Swiften/.gitignore index de234f5..262a301 100644 --- a/Swiften/.gitignore +++ b/Swiften/.gitignore @@ -1,4 +1,5 @@ *.a *.o Swiften.h Version.h +libSwiften.so.* diff --git a/Swiften/SConscript b/Swiften/SConscript index 46b901b..9c91c0d 100644 --- a/Swiften/SConscript +++ b/Swiften/SConscript @@ -12,22 +12,35 @@ if env["SCONS_STAGE"] == "flags" : env["SWIFTEN_VERSION"] = Version.getBuildVersion(env.Dir("#").abspath, "swift") version_match = re.match("(\d+)\.(\d+).*", env["SWIFTEN_VERSION"]) if version_match : env["SWIFTEN_VERSION_MAJOR"] = int(version_match.group(1)) env["SWIFTEN_VERSION_MINOR"] = int(version_match.group(2)) else : env["SWIFTEN_VERSION_MAJOR"] = 0 env["SWIFTEN_VERSION_MINOR"] = 0 env["SWIFTEN_VERSION_PATCH"] = 0 + env["SWIFTEN_LIBRARY_ALIASES"] = [] + if env["PLATFORM"] == "win32" : + env["SWIFTEN_LIBRARY"] = "Swiften$SWIFTEN_VERSION_MAJOR" + env["SWIFTEN_LIBRARY_NAME"] = "Swiften$SWIFTEN_VERSION_MAJOR" + if env["PLATFORM"] == "darwin" : + env["SWIFTEN_LIBRARY"] = "Swiften$SWIFTEN_VERSION_MAJOR" + env["SWIFTEN_LIBRARY_NAME"] = "Swiften$SWIFTEN_VERSION_MAJOR" + else : + env["SWIFTEN_LIBRARY"] = "Swiften" + env["SWIFTEN_LIBRARY_NAME"] = "Swiften" + if ARGUMENTS.get("swiften_dll", False) : + env["SWIFTEN_LIBRARY_NAME"] = "libSwiften.so.$SWIFTEN_VERSION_MAJOR" + env["SWIFTEN_LIBRARY_ALIASES"] = ["libSwiften.so", "libSwiften.so.${SWIFTEN_VERSION_MAJOR}.${SWIFTEN_VERSION_MINOR}"] swiften_env = env.Clone() swiften_env["LIBPATH"] = [Dir(".")] - swiften_env["LIBS"] = ["Swiften" + str(swiften_env["SWIFTEN_VERSION_MAJOR"])] + swiften_env["LIBS"] = [swiften_env["SWIFTEN_LIBRARY"]] dep_env = env.Clone() for module in swiften_dep_modules : if env.get(module + "_BUNDLED", False) : swiften_env.UseFlags(env.get(module + "_FLAGS", {})) else : dep_env.UseFlags(env.get(module + "_FLAGS", {})) dep_env.UseFlags(dep_env["PLATFORM_FLAGS"]) for var, e in [("SWIFTEN_FLAGS", swiften_env), ("SWIFTEN_DEP_FLAGS", dep_env)] : @@ -42,29 +55,28 @@ if env["SCONS_STAGE"] == "flags" : ################################################################################ # Build ################################################################################ if env["SCONS_STAGE"] == "build" : swiften_env = env.Clone() for module in swiften_dep_modules : swiften_env.UseFlags(swiften_env.get(module + "_FLAGS", {})) swiften_env.UseFlags(swiften_env["PLATFORM_FLAGS"]) - def buildObject(env, sources) : - if ARGUMENTS.get("swiften_dll", False) : - return env.SharedObject(sources) - else : - return env.StaticObject(sources) - swiften_env.AddMethod(buildObject, "SwiftenObject") - + + if ARGUMENTS.get("swiften_dll", False) : + swiften_env.AddMethod(lambda e,s : e.SharedObject(s), "SwiftenObject") + swiften_env.AddMethod(lambda e,l,o : e.SharedLibrary(l,o), "SwiftenLibrary") + else : + swiften_env.AddMethod(lambda e,s : e.StaticObject(s), "SwiftenObject") + swiften_env.AddMethod(lambda e,l,o : e.StaticLibrary(l,o), "SwiftenLibrary") Export("swiften_env") # TODO: Move all this to a submodule SConscript - myenv = swiften_env.Clone() sources = [ "Chat/ChatStateTracker.cpp", "Chat/ChatStateNotifier.cpp", "Client/ClientSessionStanzaChannel.cpp", "Client/CoreClient.cpp", "Client/Client.cpp", "Client/ClientSession.cpp", "Client/MemoryStorages.cpp", "Client/FileStorages.cpp", @@ -181,22 +193,28 @@ if env["SCONS_STAGE"] == "build" : "Config", ]) SConscript(test_only = True, dirs = [ "QA", ]) SConscript(dirs = [ "Examples" ]) - if ARGUMENTS.get("swiften_dll", False) : - swiften_lib = myenv.SharedLibrary("Swiften" + str(swiften_env["SWIFTEN_VERSION_MAJOR"]), sources + swiften_env["SWIFTEN_OBJECTS"]) - else : - swiften_lib = myenv.StaticLibrary("Swiften" + str(swiften_env["SWIFTEN_VERSION_MAJOR"]), sources + swiften_env["SWIFTEN_OBJECTS"]) + myenv = swiften_env.Clone() + if ARGUMENTS.get("swiften_dll", False) and myenv["PLATFORM"] == "posix" : + myenv.Append(LINKFLAGS = ["-Wl,-soname,$SWIFTEN_LIBRARY_NAME"]) + swiften_lib = myenv.SwiftenLibrary(swiften_env["SWIFTEN_LIBRARY_NAME"], sources + swiften_env["SWIFTEN_OBJECTS"]) + def symlink(env, target, source) : + if os.path.exists(str(target[0])) : + os.unlink(str(target[0])) + os.symlink(source[0].get_contents(), str(target[0])) + for alias in myenv["SWIFTEN_LIBRARY_ALIASES"] : + myenv.Command(myenv.File(alias), [myenv.Value(swiften_lib[0].name), swiften_lib[0]], symlink) env.Append(UNITTEST_SOURCES = [ File("Avatars/UnitTest/VCardUpdateAvatarManagerTest.cpp"), File("Avatars/UnitTest/VCardAvatarManagerTest.cpp"), File("Avatars/UnitTest/CombinedAvatarProviderTest.cpp"), File("Base/UnitTest/IDGeneratorTest.cpp"), File("Base/UnitTest/StringTest.cpp"), File("Base/UnitTest/ByteArrayTest.cpp"), File("Chat/UnitTest/ChatStateNotifierTest.cpp"), @@ -340,11 +358,13 @@ if env["SCONS_STAGE"] == "build" : version_header = "#pragma once\n\n" version_header += "#define SWIFTEN_VERSION 0x%02X%02X%02X\n" % (swiften_env["SWIFTEN_VERSION_MAJOR"], swiften_env["SWIFTEN_VERSION_MINOR"], swiften_env["SWIFTEN_VERSION_PATCH"]) swiften_env.WriteVal("Version.h", swiften_env.Value(version_header)) swiften_includes.append("Swiften/Version.h") # Install swiften if swiften_env.get("SWIFTEN_INSTALLDIR", "") : swiften_env.Install(os.path.join(swiften_env["SWIFTEN_INSTALLDIR"], "lib"), swiften_lib) + for alias in myenv["SWIFTEN_LIBRARY_ALIASES"] : + myenv.Command(myenv.File(os.path.join(swiften_env["SWIFTEN_INSTALLDIR"], "lib", alias)), [env.Value(swiften_lib[0].name), swiften_lib[0]], symlink) for include in swiften_includes : swiften_env.Install(os.path.join(swiften_env["SWIFTEN_INSTALLDIR"], "include", os.path.dirname(include)), "#/" + include) |