- fixed SCons build on Windows: only build static library (support static/dynamic at the same time requires significant changes)
- renamed SCons glob tool to globtool to avoid clash with python glob module. This prevented running the tests.
- check target now works with SCons 1.x
diff --git a/SConstruct b/SConstruct
index 0043523..de06710 100644
--- a/SConstruct
+++ b/SConstruct
@@ -137,24 +137,29 @@
     for tool in ['msvc', 'msvs', 'mslink', 'masm', 'mslib']:
         env.Tool( tool )
     env['CXXFLAGS']='-GR -GX /nologo /MT'
+    env['SHARED_LIB_ENABLED'] = False
 elif platform == 'msvc70':
     env['MSVS_VERSION']='7.0'
     for tool in ['msvc', 'msvs', 'mslink', 'masm', 'mslib']:
         env.Tool( tool )
     env['CXXFLAGS']='-GR -GX /nologo /MT'
+    env['SHARED_LIB_ENABLED'] = False
 elif platform == 'msvc71':
     env['MSVS_VERSION']='7.1'
     for tool in ['msvc', 'msvs', 'mslink', 'masm', 'mslib']:
         env.Tool( tool )
     env['CXXFLAGS']='-GR -GX /nologo /MT'
+    env['SHARED_LIB_ENABLED'] = False
 elif platform == 'msvc80':
     env['MSVS_VERSION']='8.0'
     for tool in ['msvc', 'msvs', 'mslink', 'masm', 'mslib']:
         env.Tool( tool )
     env['CXXFLAGS']='-GR -EHsc /nologo /MT'
+    env['SHARED_LIB_ENABLED'] = False
 elif platform == 'mingw':
     env.Tool( 'mingw' )
     env.Append( CPPDEFINES=[ "WIN32", "NDEBUG", "_MT" ] )
+    env['SHARED_LIB_ENABLED'] = False
 elif platform.startswith('linux-gcc'):
     env.Tool( 'default' )
     env.Append( LIBS = ['pthread'], CCFLAGS = "-Wall" )
@@ -166,13 +171,16 @@
 env.Tool('substinfile')
 env.Tool('targz')
 env.Tool('srcdist')
-env.Tool('glob')
+env.Tool('globtool')
 
 env.Append( CPPPATH = ['#include'],
             LIBPATH = lib_dir )
 short_platform = platform
 if short_platform.startswith('msvc'):
     short_platform = short_platform[2:]
+# Notes: on Windows you need to rebuild the source for each variant
+# Build script does not support that yet so we only build static libraries.
+env['SHARED_LIB_ENABLED'] = env.get('SHARED_LIB_ENABLED', True)
 env['LIB_PLATFORM'] = short_platform
 env['LIB_LINK_TYPE'] = 'lib'    # static
 env['LIB_CRUNTIME'] = 'mt'
@@ -210,11 +218,12 @@
 def buildLibrary( env, target_sources, target_name ):
     static_lib = env.StaticLibrary( target=target_name + '_${LIB_NAME_SUFFIX}',
                                     source=target_sources )
-    shared_lib = env.SharedLibrary( target=target_name + '_${LIB_NAME_SUFFIX}',
-                                    source=target_sources )
     global lib_dir
     env.Install( lib_dir, static_lib )
-    env.Install( lib_dir, shared_lib )
+    if env['SHARED_LIB_ENABLED']:
+        shared_lib = env.SharedLibrary( target=target_name + '_${LIB_NAME_SUFFIX}',
+                                        source=target_sources )
+        env.Install( lib_dir, shared_lib )
     env['SRCDIST_ADD']( source=[target_sources] )
 
 Export( 'env env_testing buildJSONExample buildLibrary buildJSONTests' )
@@ -232,10 +241,10 @@
     jsontest_path = Dir( '#test' ).abspath
     sys.path.insert( 0, jsontest_path )
     import runjsontests
-    return runjsontests.runAllTests( os.path.abspath(source), jsontest_path )
+    return runjsontests.runAllTests( os.path.abspath(source[0].path), jsontest_path )
 
 def runJSONTests_string( target, source = None, env = None ):
-    return 'RunJSONTests("%s")' % source
+    return 'RunJSONTests("%s")' % source[0]
 
 import SCons.Action
 ActionFactory = SCons.Action.ActionFactory
diff --git a/scons-tools/doxygen.py b/scons-tools/doxygen.py
index 927fd29..5ace420 100644
--- a/scons-tools/doxygen.py
+++ b/scons-tools/doxygen.py
@@ -9,7 +9,6 @@
 
 import os
 import os.path
-import glob
 from fnmatch import fnmatch
 import SCons
 
diff --git a/scons-tools/glob.py b/scons-tools/globtool.py
similarity index 100%
rename from scons-tools/glob.py
rename to scons-tools/globtool.py
diff --git a/scons-tools/srcdist.py b/scons-tools/srcdist.py
index 17f029f..3c6a151 100644
--- a/scons-tools/srcdist.py
+++ b/scons-tools/srcdist.py
@@ -1,6 +1,5 @@
 import os
 import os.path
-import glob
 from fnmatch import fnmatch
 import targz
 
diff --git a/test/jsontestrunner.py b/test/jsontestrunner.py
index a076d0c..504f3db 100644
--- a/test/jsontestrunner.py
+++ b/test/jsontestrunner.py
@@ -44,15 +44,15 @@
         assert False and "Unexpected value type"
         
 def parseAndSaveValueTree( input, actual_path ):
-    root = json.read( input )
+    root = json.loads( input )
     fout = file( actual_path, 'wt' )
     valueTreeToString( fout, root )
     fout.close()
     return root
 
 def rewriteValueTree( value, rewrite_path ):
-    rewrite = json.write( value )
-    rewrite = rewrite[1:-1]  # Somehow the string is quoted ! jsonpy bug ?
+    rewrite = json.dumps( value )
+    #rewrite = rewrite[1:-1]  # Somehow the string is quoted ! jsonpy bug ?
     file( rewrite_path, 'wt').write( rewrite + '\n' )
     return rewrite
     
diff --git a/test/runjsontests.py b/test/runjsontests.py
index 38bfd6e..2cf37e2 100644
--- a/test/runjsontests.py
+++ b/test/runjsontests.py
@@ -1,7 +1,7 @@
 import sys
 import os
 import os.path
-import glob
+from glob import glob
 
 
 def compareOutputs( expected, actual, message ):
@@ -38,30 +38,49 @@
 def runAllTests( jsontest_executable_path, input_dir = None ):
     if not input_dir:
         input_dir = os.getcwd()
-    tests = glob.glob( os.path.join( input_dir, '*.json' ) )
+    tests = glob( os.path.join( input_dir, '*.json' ) )
+    test_jsonchecker = glob( os.path.join( input_dir, 'jsonchecker', '*.json' ) )
     failed_tests = []
-    for input_path in tests:
+    for input_path in tests + test_jsonchecker:
+        is_json_checker_test = input_path in test_jsonchecker
         print 'TESTING:', input_path,
-        pipe = os.popen( "%s %s" % (jsontest_executable_path, input_path) )
+        options = is_json_checker_test and '--json-checker' or ''
+        pipe = os.popen( "%s %s %s" % (jsontest_executable_path, options,
+                                       input_path) )
         process_output = pipe.read()
         status = pipe.close()
-        base_path = os.path.splitext(input_path)[0]
-        actual_output = safeReadFile( base_path + '.actual' )
-        actual_rewrite_output = safeReadFile( base_path + '.actual-rewrite' )
-        file(base_path + '.process-output','wt').write( process_output )
-        if status:
-            print 'parsing failed'
-            failed_tests.append( (input_path, 'Parsing failed:\n' + process_output) )
-        else:
-            expected_output_path = os.path.splitext(input_path)[0] + '.expected'
-            expected_output = file( expected_output_path, 'rt' ).read()
-            detail = ( compareOutputs( expected_output, actual_output, 'input' )
-                        or compareOutputs( expected_output, actual_rewrite_output, 'rewrite' ) )
-            if detail:
-                print 'FAILED'
-                failed_tests.append( (input_path, detail) )
+        if is_json_checker_test:
+            expect_failure = os.path.basename( input_path ).startswith( 'fail' )
+            if expect_failure:
+                if status is None:
+                    print 'FAILED'
+                    failed_tests.append( (input_path, 'Parsing should have failed') )
+                else:
+                    print 'OK'
             else:
-                print 'OK'
+                if status is not None:
+                    print 'FAILED'
+                    failed_tests.append( (input_path, 'Parsing failed:\n' + process_output) )
+                else:
+                    print 'OK'
+        else:
+            base_path = os.path.splitext(input_path)[0]
+            actual_output = safeReadFile( base_path + '.actual' )
+            actual_rewrite_output = safeReadFile( base_path + '.actual-rewrite' )
+            file(base_path + '.process-output','wt').write( process_output )
+            if status:
+                print 'parsing failed'
+                failed_tests.append( (input_path, 'Parsing failed:\n' + process_output) )
+            else:
+                expected_output_path = os.path.splitext(input_path)[0] + '.expected'
+                expected_output = file( expected_output_path, 'rt' ).read()
+                detail = ( compareOutputs( expected_output, actual_output, 'input' )
+                            or compareOutputs( expected_output, actual_rewrite_output, 'rewrite' ) )
+                if detail:
+                    print 'FAILED'
+                    failed_tests.append( (input_path, detail) )
+                else:
+                    print 'OK'
 
     if failed_tests:
         print