Improve SConstruct file.

Thanks to Elan Ruusamäe and Milan Bouchet-Valat.

The current version doesn't allow to switch configurations yet.

BUG=42
diff --git a/AUTHORS b/AUTHORS
index a5c45a2..88b38ae 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -11,3 +11,4 @@
 Mike Hommey <mhommey@mozilla.com>
 Martin Olsson <mnemo@minimum.se>
 Kent Williams <chaircrusher@gmail.com>
+Elan Ruusamäe <glen@delfi.ee>
diff --git a/Changelog b/Changelog
index 7125a70..6ee539e 100644
--- a/Changelog
+++ b/Changelog
@@ -1,3 +1,6 @@
+2013-12-23:
+  Improved SConstruct file. Thanks to Milan Bouchet-Valat and Elan Ruusamäe.
+
 2013-11-09:
   Tagged v2.0.0.
   String-to-Double|Float: ALLOW_LEADING_SPACES and similar flags now include
diff --git a/SConstruct b/SConstruct
index 3c51288..72e688e 100644
--- a/SConstruct
+++ b/SConstruct
@@ -1,14 +1,46 @@
+# vim:ft=python
+import os
+
 double_conversion_sources = ['src/' + x for x in SConscript('src/SConscript')]
 double_conversion_test_sources = ['test/cctest/' + x for x in SConscript('test/cctest/SConscript')]
-test = double_conversion_sources + double_conversion_test_sources
-print(test)
-env = Environment(CPPPATH='#/src', LIBS=['m', 'stdc++'])
+
+DESTDIR = ARGUMENTS.get('DESTDIR', '')
+prefix = ARGUMENTS.get('prefix', '/usr/local')
+lib = ARGUMENTS.get('libsuffix', 'lib')
+libdir = os.path.join(DESTDIR + prefix, lib)
+
+env = Environment(CPPPATH='#/src', LIBS=['m', 'stdc++'],
+    CXXFLAGS=ARGUMENTS.get('CXXFLAGS', ''))
 debug = ARGUMENTS.get('debug', 0)
 optimize = ARGUMENTS.get('optimize', 0)
+env.Replace(CXX = ARGUMENTS.get('CXX', 'g++'))
+
+# for shared lib, requires scons 2.3.0
+env['SHLIBVERSION'] = '0.0.0'
+
+CCFLAGS = []
 if int(debug):
-  env.Append(CCFLAGS = '-g -Wall -Werror')
+  CCFLAGS.append(ARGUMENTS.get('CXXFLAGS', '-g -Wall -Werror'))
 if int(optimize):
-  env.Append(CCFLAGS = '-O3')
-print double_conversion_sources
-print double_conversion_test_sources
-env.Program('run_tests', double_conversion_sources + double_conversion_test_sources)
+  CCFLAGS.append(ARGUMENTS.get('CXXFLAGS', '-O3'))
+
+env.Append(CCFLAGS = " ".join(CCFLAGS))
+
+double_conversion_shared_objects = [
+    env.SharedObject(src) for src in double_conversion_sources]
+double_conversion_static_objects = [
+    env.StaticObject(src) for src in double_conversion_sources]
+
+library_name = 'double-conversion'
+
+static_lib = env.StaticLibrary(library_name, double_conversion_static_objects)
+static_lib_pic = env.StaticLibrary(library_name + '_pic', double_conversion_shared_objects)
+shared_lib = env.SharedLibrary(library_name, double_conversion_shared_objects)
+
+env.Program('run_tests', double_conversion_test_sources, LIBS=[static_lib])
+
+env.InstallVersionedLib(libdir, shared_lib)
+env.Install(libdir, static_lib)
+env.Install(libdir, static_lib_pic)
+
+env.Alias('install', libdir)