From d9862364be5cdbc1f5ec0c3e5709f8c4f7a2f2f0 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 11 Jul 2013 10:57:21 -0400 Subject: [PATCH] Add --single-tests option to also build each libardour test as a separate program --- libs/ardour/run-profiling.sh | 20 +----- libs/ardour/run-tests.sh | 52 +++++++------- libs/ardour/wscript | 129 ++++++++++++++++++++++------------- wscript | 4 ++ 4 files changed, 115 insertions(+), 90 deletions(-) diff --git a/libs/ardour/run-profiling.sh b/libs/ardour/run-profiling.sh index 30daac9e6e..541c7254ce 100644 --- a/libs/ardour/run-profiling.sh +++ b/libs/ardour/run-profiling.sh @@ -3,30 +3,12 @@ # Run libardour profiling tests. # -if [ ! -f './tempo.cc' ]; then - echo "This script must be run from within the libs/ardour directory"; - exit 1; -fi - if [ "$1" == "" ]; then echo "Syntax: run-profiling.sh [flag] []" exit 1; fi -cd ../.. -top=`pwd` -cd build - -libs='libs' - -export LD_LIBRARY_PATH=$libs/audiographer:$libs/vamp-sdk:$libs/surfaces:$libs/surfaces/control_protocol:$libs/ardour:$libs/midi++2:$libs/pbd:$libs/rubberband:$libs/soundtouch:$libs/gtkmm2ext:$libs/appleutility:$libs/taglib:$libs/evoral:$libs/evoral/src/libsmf:$libs/timecode:/usr/local/lib:/usr/local/lib64:$LD_LIBRARY_PATH - -export ARDOUR_CONFIG_PATH=$top:$top/gtk2_ardour:$libs/..:$libs/../gtk2_ardour -export ARDOUR_PANNER_PATH=$libs/panners/2in2out:$libs/panners/1in2out:$libs/panners/vbap -export ARDOUR_SURFACES_PATH=$libs/surfaces/osc:$libs/surfaces/generic_midi:$libs/surfaces/tranzport:$libs/surfaces/powermate:$libs/surfaces/mackie -export ARDOUR_MCP_PATH="../mcp" -export ARDOUR_DLL_PATH=$libs -export ARDOUR_DATA_PATH=$top/gtk2_ardour:$top/build/gtk2_ardour:. +. test-env.sh export LD_PRELOAD=/home/carl/src/libfakejack/libjack.so # session='32tracks' diff --git a/libs/ardour/run-tests.sh b/libs/ardour/run-tests.sh index b31751991c..fc7d68a8a5 100755 --- a/libs/ardour/run-tests.sh +++ b/libs/ardour/run-tests.sh @@ -3,30 +3,32 @@ # Run libardour test suite. # -if [ ! -f './tempo.cc' ]; then - echo "This script must be run from within the libs/ardour directory"; - exit 1; -fi - -cd ../.. -top=`pwd` -cd build - -libs='libs' - -export LD_LIBRARY_PATH=$libs/audiographer:$libs/vamp-sdk:$libs/surfaces:$libs/surfaces/control_protocol:$libs/ardour:$libs/midi++2:$libs/pbd:$libs/rubberband:$libs/soundtouch:$libs/gtkmm2ext:$libs/appleutility:$libs/taglib:$libs/evoral:$libs/evoral/src/libsmf:$libs/timecode:$libs/libltc:/usr/local/lib:/usr/local/lib64:$LD_LIBRARY_PATH - -export ARDOUR_CONFIG_PATH=$top:$top/gtk2_ardour:$libs/..:$libs/../gtk2_ardour -export ARDOUR_PANNER_PATH=$libs/panners/2in2out:$libs/panners/1in2out:$libs/panners/vbap -export ARDOUR_SURFACES_PATH=$libs/surfaces/osc:$libs/surfaces/generic_midi:$libs/surfaces/tranzport:$libs/surfaces/powermate:$libs/surfaces/mackie -export ARDOUR_MCP_PATH="../mcp" -export ARDOUR_DLL_PATH=$libs -export ARDOUR_DATA_PATH=$top/gtk2_ardour:$top/build/gtk2_ardour:. - -if [ "$1" == "--debug" ]; then - gdb ./libs/ardour/run-tests -elif [ "$1" == "--valgrind" ]; then - valgrind ./libs/ardour/run-tests +if [ "$1" == "--single" ] || [ "$2" == "--single" ]; then + if [ "$1" == "--single" ]; then + TESTS="test_*$2*" + elif [ "$2" == "--single" ]; then + TESTS="test_*$3*" + else + TESTS='test_*' + fi + for test_program in `find libs/ardour -name "$TESTS" -type f -perm /u+x`; + do + echo "Running $test_program..." + if [ "$1" == "--debug" ]; then + gdb ./"$test_program" + elif [ "$1" == "--valgrind" ]; then + valgrind ./"$test_program" + else + ./"$test_program" + fi + done else - ./libs/ardour/run-tests $* + if [ "$1" == "--debug" ]; then + gdb ./libs/ardour/run-tests + elif [ "$1" == "--valgrind" ]; then + valgrind ./libs/ardour/run-tests + else + ./libs/ardour/run-tests $* + fi fi + diff --git a/libs/ardour/wscript b/libs/ardour/wscript index e6ed8f7a1f..ea8bbc8682 100644 --- a/libs/ardour/wscript +++ b/libs/ardour/wscript @@ -440,29 +440,65 @@ def build(bld): if bld.env['BUILD_TESTS'] and bld.is_defined('HAVE_CPPUNIT'): # Unit tests - testobj = bld(features = 'cxx cxxprogram') - testobj.source = ''' - test/dummy_lxvst.cc - test/test_util.cc - test/test_needing_session.cc - test/audio_region_test.cc - test/test_globals.cc - test/automation_list_property_test.cc - test/bbt_test.cc - test/tempo_test.cc - test/interpolation_test.cc - test/midi_clock_slave_test.cc - test/resampled_source_test.cc - test/framewalk_to_beats_test.cc - test/framepos_plus_beats_test.cc - test/framepos_minus_beats_test.cc - test/playlist_layering_test.cc - test/playlist_equivalent_regions_test.cc - test/control_surfaces_test.cc - test/region_naming_test.cc - test/load_sessions_test.cc - test/mtdm_test.cc - test/testrunner.cc + # only build these common sources once + testcommon = bld(features = 'cxx') + testcommon.includes = obj.includes + ['test', '../pbd', '..'] + testcommon.source = ['test/test_globals.cc', 'test/testrunner.cc', 'test/test_needing_session.cc', + 'test/dummy_lxvst.cc', 'test/audio_region_test.cc', 'test/test_util.cc' ] + testcommon.uselib = ['CPPUNIT','SIGCPP','JACK','GLIBMM','GTHREAD', + 'SAMPLERATE','XML','LRDF','COREAUDIO'] + testcommon.use = ['libpbd','libmidipp','libevoral','libvamphost', + 'libvampplugin','libtaglib','librubberband', + 'libaudiographer','libltc','ardour'] + testcommon.defines = [ + 'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"', + 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"', + 'LOCALEDIR="' + os.path.join( + os.path.normpath(bld.env['DATADIR']), 'locale') + '"', + 'VAMP_DIR="' + os.path.join( + os.path.normpath(bld.env['LIBDIR']), 'ardour3', 'vamp') + '"' + ] + testcommon.name = 'testcommon' + + if bld.env['FPU_OPTIMIZATION']: + testcommon.source += [ 'sse_functions_xmm.cc' ] + if (bld.env['build_target'] == 'i386' + or bld.env['build_target'] == 'i686'): + testcommon.source += [ 'sse_functions.s' ] + elif bld.env['build_target'] == 'x86_64': + testcommon.source += [ 'sse_functions_64bit.s' ] + + if bld.env['SINGLE_TESTS']: + create_ardour_test_program(bld, obj.includes, 'automation_list_property_test', 'test_automation_list_property', ['test/automation_list_property_test.cc']) + create_ardour_test_program(bld, obj.includes, 'bbt', 'test_bbt', ['test/bbt_test.cc']) + create_ardour_test_program(bld, obj.includes, 'tempo', 'test_tempo', ['test/tempo_test.cc']) + create_ardour_test_program(bld, obj.includes, 'interpolation', 'test_interpolation', ['test/interpolation_test.cc']) + create_ardour_test_program(bld, obj.includes, 'midi_clock_slave', 'test_midi_clock_slave', ['test/midi_clock_slave_test.cc']) + create_ardour_test_program(bld, obj.includes, 'resampled_source', 'test_resampled_source', ['test/resampled_source_test.cc']) + create_ardour_test_program(bld, obj.includes, 'framewalk_to_beats', 'test_framewalk_to_beats', ['test/framewalk_to_beats_test.cc']) + create_ardour_test_program(bld, obj.includes, 'framepos_plus_beats', 'test_framepos_plus_beats', ['test/framepos_plus_beats_test.cc']) + create_ardour_test_program(bld, obj.includes, 'framepos_minus_beats', 'test_framepos_minus_beats', ['test/framepos_minus_beats_test.cc']) + create_ardour_test_program(bld, obj.includes, 'playlist_equivalent_regions', 'test_playlist_equivalent_regions', ['test/playlist_equivalent_regions_test.cc']) + create_ardour_test_program(bld, obj.includes, 'playlist_layering', 'test_playlist_layering', ['test/playlist_layering_test.cc']) + create_ardour_test_program(bld, obj.includes, 'region_naming', 'test_region_naming', ['test/region_naming_test.cc']) + create_ardour_test_program(bld, obj.includes, 'control_surface', 'test_control_surfaces', ['test/control_surfaces_test.cc']) + create_ardour_test_program(bld, obj.includes, 'mtdm_test', 'test_mtdm', ['test/mtdm_test.cc']) + + test_sources = ''' + test/automation_list_property_test.cc + test/bbt_test.cc + test/tempo_test.cc + test/interpolation_test.cc + test/midi_clock_slave_test.cc + test/resampled_source_test.cc + test/framewalk_to_beats_test.cc + test/framepos_plus_beats_test.cc + test/framepos_minus_beats_test.cc + test/playlist_equivalent_regions_test.cc + test/playlist_layering_test.cc + test/region_naming_test.cc + test/control_surfaces_test.cc + test/mtdm_test.cc '''.split() # Tests that don't work @@ -471,29 +507,7 @@ def build(bld): # test/combine_regions_test.cc # test/mantis_3356_test.cc - testobj.includes = obj.includes + ['test', '../pbd', '../libltc', '../audiographer'] - testobj.uselib = ['CPPUNIT','SIGCPP','JACK','GLIBMM','GTHREAD', - 'SAMPLERATE','XML','LRDF','COREAUDIO'] - testobj.use = ['libpbd','libmidipp','ardour','libltc','libaudiographer'] - testobj.name = 'libardour-tests' - testobj.target = 'run-tests' - testobj.install_path = '' - testobj.defines = [ - 'PACKAGE="libardour3test"', - 'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"', - 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"', - 'LOCALEDIR="' + os.path.join( - os.path.normpath(bld.env['DATADIR']), 'locale') + '"', - 'VAMP_DIR="' + os.path.join( - os.path.normpath(bld.env['LIBDIR']), 'ardour3', 'vamp') + '"' - ] - if bld.env['FPU_OPTIMIZATION']: - testobj.source += [ 'sse_functions_xmm.cc' ] - if (bld.env['build_target'] == 'i386' - or bld.env['build_target'] == 'i686'): - testobj.source += [ 'sse_functions.s' ] - elif bld.env['build_target'] == 'x86_64': - testobj.source += [ 'sse_functions_64bit.s' ] + create_ardour_test_program(bld, obj.includes, 'libardour-tests', 'run-tests', test_sources) # Tester to just load a session session_load_tester = bld(features = 'cxx cxxprogram') @@ -563,6 +577,29 @@ def build(bld): elif bld.env['build_target'] == 'x86_64': profilingobj.source += [ 'sse_functions_64bit.s' ] +def create_ardour_test_program(bld, includes, name, target, sources): + testobj = bld(features = 'cxx cxxprogram') + testobj.includes = includes + ['test', '../pbd', '..'] + testobj.source = sources + testobj.uselib = ['CPPUNIT','SIGCPP','JACK','GLIBMM','GTHREAD', + 'SAMPLERATE','XML','LRDF','COREAUDIO'] + testobj.use = ['libpbd','libmidipp','libevoral','libvamphost', + 'libvampplugin','libtaglib','librubberband', + 'libaudiographer','libltc','ardour','testcommon'] + testobj.name = name + testobj.target = target + # not sure about install path + testobj.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3') + testobj.defines = [ + 'PACKAGE="libardour3test"', + 'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"', + 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"', + 'LOCALEDIR="' + os.path.join( + os.path.normpath(bld.env['DATADIR']), 'locale') + '"', + 'VAMP_DIR="' + os.path.join( + os.path.normpath(bld.env['LIBDIR']), 'ardour3', 'vamp') + '"' + ] + def shutdown(): autowaf.shutdown() diff --git a/wscript b/wscript index dc9c37525f..efe00a347e 100644 --- a/wscript +++ b/wscript @@ -432,6 +432,8 @@ def options(opt): help='Raise a floating point exception if a denormal is detected') opt.add_option('--test', action='store_true', default=False, dest='build_tests', help="Build unit tests") + opt.add_option('--single-tests', action='store_true', default=False, dest='single_tests', + help="Build a single executable for each unit test") #opt.add_option('--tranzport', action='store_true', default=False, dest='tranzport', # help='Compile with support for Frontier Designs Tranzport (if libusb is available)') opt.add_option('--universal', action='store_true', default=False, dest='universal', @@ -629,6 +631,8 @@ def configure(conf): conf.env['ENABLE_NLS'] = True if opts.build_tests: conf.env['BUILD_TESTS'] = opts.build_tests + if opts.single_tests: + conf.env['SINGLE_TESTS'] = opts.single_tests #if opts.tranzport: # conf.env['TRANZPORT'] = 1 if opts.windows_vst: