diff --git a/SConstruct b/SConstruct index 0043523..de06710 100644 --- a/SConstruct +++ b/SConstruct @@ -137,24 +137,29 @@ elif platform == 'msvc6': 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('doxygen') 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 buildJSONTests( env, target_sources, target_name ): 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 @@ def runJSONTests_action( target, source = None, env = None ): 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 @@ def valueTreeToString( fout, value, path = '.' ): 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 safeReadFile( path ): 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