include $(top_srcdir)/Makefile.tool-tests.am

dist_noinst_SCRIPTS =		    \
	compare_error_count_with    \
	filter_annotate_barrier_xml \
	filter_error_count	    \
	filter_error_summary	    \
	filter_stderr               \
	filter_stderr_and_thread_no \
	filter_stderr_and_thread_no_and_offset \
	filter_stderr_solaris       \
	filter_thread_no	    \
	filter_thread_name_xml      \
	filter_xml_and_thread_no    \
	run_openmp_test             \
	supported_libpthread	    \
	supported_sem_init

noinst_HEADERS =                                    \
	tsan_thread_wrappers_pthread.h		    \
	unified_annotations.h

EXTRA_DIST =                                        \
	annotate_barrier.stderr.exp		    \
	annotate_barrier.vgtest			    \
	annotate_barrier_xml.stderr.exp		    \
	annotate_barrier_xml.vgtest		    \
	annotate_hb_err.stderr.exp		    \
	annotate_hb_err.vgtest			    \
	annotate_hb_race.stderr.exp		    \
	annotate_hb_race.vgtest			    \
	annotate_hbefore.stderr.exp		    \
	annotate_hbefore.vgtest			    \
	annotate_order_1.stderr.exp		    \
	annotate_order_1.vgtest			    \
	annotate_order_2.stderr.exp		    \
	annotate_order_2.vgtest			    \
	annotate_order_3.stderr.exp		    \
	annotate_order_3.vgtest			    \
	annotate_publish_hg.stderr.exp		    \
	annotate_publish_hg.vgtest		    \
	annotate_sem.stderr.exp                     \
	annotate_sem.vgtest                         \
	annotate_smart_pointer.stderr.exp	    \
	annotate_smart_pointer.vgtest		    \
	annotate_smart_pointer2.stderr.exp	    \
	annotate_smart_pointer2.stderr.exp-darwin   \
	annotate_smart_pointer2.vgtest		    \
	annotate_spinlock.stderr.exp		    \
	annotate_spinlock.vgtest		    \
	annotate_rwlock.stderr.exp		    \
	annotate_rwlock.vgtest			    \
	annotate_rwlock_hg.stderr.exp		    \
	annotate_rwlock_hg.vgtest		    \
	annotate_ignore_read.stderr.exp		    \
	annotate_ignore_read.vgtest		    \
	annotate_ignore_rw.stderr.exp		    \
	annotate_ignore_rw.vgtest		    \
	annotate_ignore_rw2.stderr.exp		    \
	annotate_ignore_rw2.stderr.exp-solaris	    \
	annotate_ignore_rw2.vgtest		    \
	annotate_ignore_write.stderr.exp	    \
	annotate_ignore_write.stderr.exp-solaris    \
	annotate_ignore_write.vgtest		    \
	annotate_ignore_write2.stderr.exp	    \
	annotate_ignore_write2.stderr.exp-solaris   \
	annotate_ignore_write2.vgtest		    \
	annotate_trace_memory.stderr.exp-32bit	    \
	annotate_trace_memory.stderr.exp-64bit	    \
	annotate_trace_memory.stderr.exp-mips32	   \
	annotate_trace_memory.vgtest		    \
	annotate_trace_memory_xml.stderr.exp-32bit  \
	annotate_trace_memory_xml.stderr.exp-64bit  \
	annotate_trace_memory_xml.stderr.exp-mips32 \
	annotate_trace_memory_xml.vgtest	    \
	annotate_sem.stderr.exp                     \
	annotate_sem.vgtest                         \
	annotate_static.stderr.exp	            \
	annotate_static.vgtest		            \
	atomic_var.stderr.exp			    \
	atomic_var.vgtest			    \
	bar_bad.stderr.exp			    \
	bar_bad.vgtest				    \
	bar_bad_xml.stderr.exp			    \
	bar_bad_xml.vgtest			    \
	bar_trivial.stderr.exp			    \
	bar_trivial.stdout.exp			    \
	bar_trivial.vgtest			    \
	boost_thread.stderr.exp			    \
	boost_thread.vgtest			    \
	bug-235681.stderr.exp			    \
	bug-235681.vgtest			    \
	circular_buffer.stderr.exp		    \
	circular_buffer.vgtest			    \
	concurrent_close.stderr.exp		    \
	concurrent_close.vgtest			    \
	custom_alloc.stderr.exp			    \
	custom_alloc.vgtest			    \
	custom_alloc_fiw.stderr.exp		    \
	custom_alloc_fiw.vgtest			    \
	fp_race.stderr.exp                          \
	fp_race.stderr.exp-mips32-be                \
	fp_race.stderr.exp-mips32-le                \
	fp_race.vgtest                              \
	fp_race2.stderr.exp                         \
	fp_race2.vgtest                             \
	fp_race_xml.stderr.exp                      \
	fp_race_xml.stderr.exp-mips32-be            \
	fp_race_xml.stderr.exp-mips32-le            \
	fp_race_xml.stderr.exp-solaris              \
	fp_race_xml.vgtest                          \
	free_is_write.stderr.exp		    \
	free_is_write.vgtest			    \
	free_is_write2.stderr.exp		    \
	free_is_write2.vgtest			    \
	hg01_all_ok.stderr.exp                      \
	hg01_all_ok.vgtest                          \
	hg02_deadlock.stderr.exp                    \
	hg02_deadlock.vgtest                        \
	hg03_inherit.stderr.exp                     \
	hg03_inherit.vgtest                         \
	hg04_race.stderr.exp                        \
	hg04_race.vgtest                            \
	hg05_race2.stderr.exp                       \
	hg05_race2.stderr.exp-powerpc               \
	hg05_race2.vgtest                           \
	hg06_readshared.stderr.exp                  \
	hg06_readshared.vgtest                      \
	hold_lock_1.stderr.exp                      \
	hold_lock_1.vgtest                          \
	hold_lock_2.stderr.exp                      \
	hold_lock_2.vgtest                          \
	linuxthreads_det.stderr.exp                 \
	linuxthreads_det.stderr.exp-linuxthreads    \
	linuxthreads_det.stdout.exp                 \
	linuxthreads_det.stdout.exp-linuxthreads    \
	linuxthreads_det.vgtest                     \
	local_static.stderr.exp                     \
	local_static.vgtest                         \
	matinv.stderr.exp                           \
	matinv.stdout.exp                           \
	matinv.vgtest                               \
	memory_allocation.stderr.exp		    \
	memory_allocation.vgtest		    \
	monitor_example.stderr.exp		    \
	monitor_example.vgtest			    \
	new_delete.stderr.exp                       \
	new_delete.vgtest                           \
	omp_matinv.stderr.exp                       \
	omp_matinv.stdout.exp                       \
	omp_matinv.vgtest                           \
	omp_matinv_racy.stderr.exp                  \
	omp_matinv_racy.stdout.exp                  \
	omp_matinv_racy.vgtest                      \
	omp_prime_racy.stderr.exp                   \
	omp_prime_racy.vgtest                       \
	omp_printf.stderr.exp                       \
	omp_printf.vgtest                           \
	pth_barrier.stderr.exp                      \
	pth_barrier.vgtest                          \
	pth_barrier2.stderr.exp                     \
	pth_barrier2.vgtest                         \
	pth_barrier3.stderr.exp                     \
	pth_barrier3.vgtest                         \
	pth_barrier_race.stderr.exp                 \
	pth_barrier_race.vgtest                     \
	pth_barrier_reinit.stderr.exp               \
	pth_barrier_reinit.vgtest                   \
	pth_barrier_thr_cr.stderr.exp               \
	pth_barrier_thr_cr.vgtest                   \
	pth_barrier_thr_cr.supp                     \
	pth_broadcast.stderr.exp                    \
	pth_broadcast.vgtest                        \
	pth_cancel_locked.stderr.exp		    \
	pth_cancel_locked.stderr.exp-darwin	    \
	pth_cancel_locked.vgtest		    \
	pth_cleanup_handler.stderr.exp		    \
	pth_cleanup_handler.vgtest		    \
	pth_cond_destroy_busy.stderr.exp            \
	pth_cond_destroy_busy.stderr.exp-solaris    \
	pth_cond_destroy_busy.vgtest                \
	pth_cond_race.stderr.exp                    \
	pth_cond_race.vgtest                        \
	pth_cond_race2.stderr.exp                   \
	pth_cond_race2.vgtest                       \
	pth_cond_race3.stderr.exp                   \
	pth_cond_race3.vgtest                       \
	pth_create_chain.stderr.exp                 \
	pth_create_chain.vgtest                     \
	pth_create_glibc_2_0.stderr.exp             \
	pth_create_glibc_2_0.vgtest                 \
	pth_detached.stderr.exp                     \
	pth_detached.stdout.exp                     \
	pth_detached.vgtest                         \
	pth_detached2.stderr.exp                    \
	pth_detached2.stdout.exp                    \
	pth_detached2.vgtest                        \
	pth_detached3.stderr.exp1                   \
	pth_detached3.stderr.exp2                   \
	pth_detached3.vgtest                        \
	pth_detached_sem.stderr.exp                 \
	pth_detached_sem.stdout.exp                 \
	pth_detached_sem.vgtest                     \
	pth_inconsistent_cond_wait.stderr.exp1      \
	pth_inconsistent_cond_wait.stderr.exp2      \
	pth_inconsistent_cond_wait.vgtest           \
	pth_mutex_reinit.stderr.exp		    \
	pth_mutex_reinit.vgtest			    \
	pth_once.stderr.exp			    \
	pth_once.vgtest				    \
	pth_process_shared_mutex.stderr.exp         \
	pth_process_shared_mutex.vgtest             \
	pth_spinlock.stderr.exp                     \
	pth_spinlock.vgtest                         \
	pth_uninitialized_cond.stderr.exp           \
	pth_uninitialized_cond.vgtest               \
	read_and_free_race.stderr.exp		    \
	read_and_free_race.vgtest		    \
	recursive_mutex.stderr.exp-linux            \
	recursive_mutex.stderr.exp-darwin           \
	recursive_mutex.stderr.exp-solaris          \
	recursive_mutex.vgtest                      \
	rwlock_race.stderr.exp	                    \
	rwlock_race.stderr.exp2	                    \
	rwlock_race.vgtest                          \
	rwlock_test.stderr.exp	                    \
	rwlock_test.vgtest                          \
	rwlock_type_checking.stderr.exp	            \
	rwlock_type_checking.vgtest                 \
	sem_as_mutex.stderr.exp                     \
	sem_as_mutex.stderr.exp-mips32-be           \
	sem_as_mutex.stderr.exp-mips32-le           \
	sem_as_mutex.vgtest                         \
	sem_as_mutex2.stderr.exp                    \
	sem_as_mutex2.vgtest                        \
	sem_as_mutex3.stderr.exp                    \
	sem_as_mutex3.stderr.exp-mips32-be          \
	sem_as_mutex3.stderr.exp-mips32-le          \
	sem_as_mutex3.vgtest                        \
	sem_open.stderr.exp                         \
	sem_open.stderr.exp-mips32-be               \
	sem_open.stderr.exp-mips32-le               \
	sem_open.vgtest                             \
	sem_open2.stderr.exp                        \
	sem_open2.vgtest                            \
	sem_open3.stderr.exp                        \
	sem_open3.stderr.exp-mips32-be              \
	sem_open3.stderr.exp-mips32-le              \
	sem_open3.vgtest                            \
	sem_open_traced.stderr.exp                  \
	sem_open_traced.vgtest                      \
	sem_wait.stderr.exp                         \
	sem_wait.vgtest                             \
	sigalrm.stderr.exp                          \
	sigalrm.vgtest                              \
	sigaltstack.stderr.exp                      \
	sigaltstack.vgtest                          \
	std_atomic.stderr.exp		  	    \
	std_atomic.vgtest			            \
	std_list.stderr.exp		  	    \
	std_list.vgtest			            \
	std_string.stderr.exp		  	    \
	std_string.vgtest			    \
	std_thread.stderr.exp		  	    \
	std_thread.vgtest			    \
	std_thread2.stderr.exp		  	    \
	std_thread2.vgtest			    \
	std_thread2.supp			    \
	str_tester.stderr.exp		  	    \
	str_tester.vgtest			    \
	tc01_simple_race.stderr.exp                 \
	tc01_simple_race.vgtest                     \
	tc02_simple_tls.stderr.exp                  \
	tc02_simple_tls.vgtest                      \
	tc03_re_excl.stderr.exp                     \
	tc03_re_excl.vgtest                         \
	tc04_free_lock.stderr.exp-x86               \
	tc04_free_lock.stderr.exp-ppc               \
	tc04_free_lock.stderr.exp-s390              \
	tc04_free_lock.vgtest                       \
	tc05_simple_race.stderr.exp                 \
	tc05_simple_race.vgtest                     \
	tc06_two_races.stderr.exp                   \
	tc06_two_races.vgtest                       \
	tc07_hbl1.stderr.exp                        \
	tc07_hbl1.stdout.exp                        \
	tc07_hbl1.vgtest                            \
	tc08_hbl2.stderr.exp                        \
	tc08_hbl2.stdout.exp                        \
	tc08_hbl2.vgtest                            \
	tc09_bad_unlock.stderr.exp-x86              \
	tc09_bad_unlock.stderr.exp-ppc              \
	tc09_bad_unlock.stderr.exp-glibc2.8         \
	tc09_bad_unlock.stderr.exp-s390             \
	tc09_bad_unlock.stderr.exp-solaris          \
	tc09_bad_unlock.vgtest                      \
	tc10_rec_lock.stderr.exp                    \
	tc10_rec_lock.vgtest                        \
	tc11_XCHG.stderr.exp tc11_XCHG.stdout.exp   \
	tc11_XCHG.vgtest                            \
	tc12_rwl_trivial.stderr.exp                 \
	tc12_rwl_trivial.vgtest                     \
	tc13_laog1.stderr.exp                       \
	tc13_laog1.vgtest                           \
	tc15_laog_lockdel.stderr.exp                \
	tc15_laog_lockdel.vgtest                    \
	tc16_byterace.stderr.exp                    \
	tc16_byterace.vgtest                        \
	tc17_sembar.stderr.exp                      \
	tc17_sembar.vgtest                          \
	tc18_semabuse.stderr.exp                    \
	tc18_semabuse.stderr.exp-solaris            \
	tc18_semabuse.vgtest                        \
	tc19_shadowmem.stderr.exp-32bit             \
	tc19_shadowmem.stderr.exp-64bit             \
	tc19_shadowmem.vgtest                       \
	tc21_pthonce.stderr.exp                     \
	tc21_pthonce.stdout.exp                     \
	tc21_pthonce.vgtest                         \
	tc22_exit_w_lock.stderr.exp-32bit	    \
	tc22_exit_w_lock.stderr.exp-64bit           \
	tc22_exit_w_lock.vgtest                     \
	tc23_bogus_condwait.stderr.exp-linux-x86    \
	tc23_bogus_condwait.stderr.exp-linux-ppc    \
	tc23_bogus_condwait.stderr.exp-darwin-x86   \
	tc23_bogus_condwait.stderr.exp-darwin-amd64 \
	tc23_bogus_condwait.vgtest                  \
	tc24_nonzero_sem.stderr.exp                 \
	tc24_nonzero_sem.vgtest                     \
	thread_name.stderr.exp			    \
	thread_name.vgtest			    \
	thread_name_xml.stderr.exp		    \
	thread_name_xml.vgtest			    \
	threaded-fork.stderr.exp		    \
	threaded-fork.vgtest			    \
	threaded-fork-vcs.stderr.exp		    \
	threaded-fork-vcs.vgtest		    \
	tls_threads.stderr.exp			    \
	tls_threads.vgtest			    \
	trylock.stderr.exp                          \
	trylock.vgtest				    \
	unit_bitmap.stderr.exp                      \
	unit_bitmap.vgtest                          \
	unit_vc.stderr.exp                          \
	unit_vc.vgtest


check_PROGRAMS =      \
  annotate_hb_err     \
  annotate_hb_race    \
  annotate_ignore_rw  \
  annotate_ignore_write \
  annotate_publish_hg \
  annotate_static     \
  annotate_trace_memory \
  bug-235681          \
  custom_alloc        \
  concurrent_close    \
  fp_race             \
  free_is_write	      \
  hold_lock           \
  linuxthreads_det    \
  local_static        \
  memory_allocation   \
  monitor_example     \
  new_delete          \
  pth_broadcast       \
  pth_cancel_locked   \
  pth_cleanup_handler \
  pth_cond_destroy_busy \
  pth_cond_race       \
  pth_create_chain    \
  pth_detached        \
  pth_detached_sem    \
  pth_detached3       \
  pth_inconsistent_cond_wait \
  pth_mutex_reinit    \
  pth_process_shared_mutex   \
  pth_uninitialized_cond \
  recursive_mutex     \
  rwlock_race         \
  rwlock_test         \
  rwlock_type_checking \
  sem_as_mutex        \
  sem_open            \
  sigalrm             \
  threaded-fork       \
  trylock             \
  unit_bitmap         \
  unit_vc

if HAVE_BOOST_1_35
check_PROGRAMS += boost_thread
endif

if HAVE_BUILTIN_ATOMIC
check_PROGRAMS +=        \
  annotate_barrier       \
  annotate_rwlock        \
  annotate_sem           \
  atomic_var             \
  circular_buffer
endif

if HAVE_BUILTIN_ATOMIC_CXX
check_PROGRAMS +=        \
  annotate_smart_pointer \
  tsan_unittest
endif

# clang 3.3 will generate errors about libstdc++ headers from 
# gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
if CXX_CAN_INCLUDE_THREAD_HEADER
if HAVE_SHARED_POINTER_ANNOTATION
check_PROGRAMS += \
  std_atomic      \
  std_list        \
  std_string      \
  std_thread      \
  std_thread2
endif
endif

if HAVE_OPENMP
check_PROGRAMS += omp_matinv omp_prime omp_printf
endif

if HAVE_PTHREAD_BARRIER
check_PROGRAMS += matinv pth_barrier pth_barrier_race pth_barrier_reinit \
	pth_barrier_thr_cr thread_name
endif

if HAVE_PTHREAD_CREATE_GLIBC_2_0
check_PROGRAMS += pth_create_glibc_2_0
endif

if HAVE_PTHREAD_SPINLOCK
check_PROGRAMS += pth_spinlock
endif

if !VGCONF_OS_IS_DARWIN
check_PROGRAMS += sem_wait
endif


AM_CFLAGS   += $(AM_FLAG_M3264_PRI) @FLAG_W_EXTRA@ -Wno-inline -Wno-unused-parameter
AM_CXXFLAGS += $(AM_FLAG_M3264_PRI) @FLAG_W_EXTRA@ -Wno-inline -Wno-unused-parameter

LDADD = -lpthread


concurrent_close_SOURCES    = concurrent_close.cpp
monitor_example_SOURCES     = monitor_example.cpp
new_delete_SOURCES          = new_delete.cpp
new_delete_CXXFLAGS         = $(AM_CXXFLAGS) @FLAG_W_NO_MISMATCHED_NEW_DELETE@

free_is_write_CFLAGS        = $(AM_CFLAGS)
pth_barrier_CFLAGS          = $(AM_CFLAGS)
if VGCONF_OS_IS_SOLARIS
free_is_write_CFLAGS        += -D__EXTENSIONS__
pth_barrier_CFLAGS          += -D__EXTENSIONS__
endif

pth_create_chain_CFLAGS     = $(AM_CFLAGS)
pth_detached_CFLAGS         = $(AM_CFLAGS)
if VGCONF_OS_IS_SOLARIS
pth_create_chain_CFLAGS     += -D__EXTENSIONS__
pth_detached_CFLAGS         += -D__EXTENSIONS__
endif

tsan_unittest_SOURCES       = tsan_unittest.cpp
tsan_unittest_CXXFLAGS      = $(AM_CXXFLAGS) \
			-DTHREAD_WRAPPERS='"tsan_thread_wrappers_pthread.h"'

unit_bitmap_CFLAGS          = $(AM_CFLAGS) -O2 \
                              -DENABLE_DRD_CONSISTENCY_CHECKS \
                              @FLAG_UNLIMITED_INLINE_UNIT_GROWTH@
unit_bitmap_LDADD           = # nothing, i.e. not -lpthread

unit_vc_CFLAGS              = $(AM_CFLAGS) -DENABLE_DRD_CONSISTENCY_CHECKS
unit_vc_LDADD               = # nothing, i.e. not -lpthread

if HAVE_BOOST_1_35
boost_thread_SOURCES        = boost_thread.cpp
boost_thread_CXXFLAGS       = $(AM_CXXFLAGS) $(BOOST_CFLAGS)
boost_thread_LDADD          = $(BOOST_LIBS)
endif

if HAVE_BUILTIN_ATOMIC
annotate_smart_pointer_SOURCES = annotate_smart_pointer.cpp
endif

annotate_static_SOURCES     = annotate_static.cpp
annotate_static_CXXFLAGS    = $(AM_CXXFLAGS) @FLAG_W_NO_UNUSED_FUNCTION@

local_static_SOURCES        = local_static.cpp

if HAVE_OPENMP
omp_matinv_CFLAGS           = $(AM_CFLAGS) -fopenmp
omp_matinv_LDFLAGS          = -fopenmp
omp_matinv_LDADD            = $(LDADD) -lm

if VGCONF_OS_IS_SOLARIS
omp_matinv_CFLAGS           += -std=gnu99
endif

omp_prime_CFLAGS            = $(AM_CFLAGS) -fopenmp
omp_prime_LDFLAGS           = -fopenmp
omp_prime_LDADD             = $(LDADD) -lm

omp_printf_CFLAGS           = $(AM_CFLAGS) -fopenmp
omp_printf_LDFLAGS          = -fopenmp
omp_printf_LDADD            = $(LDADD) -lm
endif

matinv_CFLAGS               = $(AM_CFLAGS)
if VGCONF_OS_IS_SOLARIS
matinv_CFLAGS               += -std=gnu99 -D__EXTENSIONS__
endif
if HAVE_PTHREAD_BARRIER
matinv_LDADD                = $(LDADD) -lm
endif

rwlock_test_CFLAGS          = $(AM_CFLAGS)
if VGCONF_OS_IS_SOLARIS
rwlock_test_CFLAGS          += -D__EXTENSIONS__
endif

std_atomic_SOURCES          = std_atomic.cpp
std_atomic_CXXFLAGS         = $(AM_CXXFLAGS) -std=c++0x -Wno-sign-compare

std_list_SOURCES            = std_list.cpp
std_list_CXXFLAGS           = $(AM_CXXFLAGS) -std=c++0x -Wno-sign-compare

std_string_SOURCES          = std_string.cpp
std_string_CXXFLAGS         = $(AM_CXXFLAGS) -std=c++0x -Wno-sign-compare

# Note: -Wl,--no-as-needed is a workaround for
# https://bugs.launchpad.net/ubuntu/+source/gcc-defaults/+bug/1228201

std_thread_SOURCES          = std_thread.cpp
std_thread_CXXFLAGS         = $(AM_CXXFLAGS) -std=c++0x
if !VGCONF_OS_IS_SOLARIS
std_thread_LDFLAGS          = -Wl,--no-as-needed
endif

std_thread2_SOURCES          = std_thread2.cpp
std_thread2_CXXFLAGS         = $(AM_CXXFLAGS) -std=c++0x
if !VGCONF_OS_IS_SOLARIS
std_thread2_LDFLAGS          = -Wl,--no-as-needed
endif

sem_wait_SOURCES            = sem_wait.cpp