From f07d6fae0debd9b2b3229101045f012f9d036b9e Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sat, 16 May 2026 18:31:12 +0200 Subject: [PATCH 01/41] Don't poison the cache --- CMakeLists.txt | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8ad2ac9..c727402 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,16 +18,6 @@ else() set (COMPILER_INDICATOR "G") endif() -# Set the possible values of build type for cmake-gui -if (CMAKE_CONFIGURATION_TYPES) - set (CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE - STRING "Semicolon separated list of supported configuration types, only supports debug and release, anything else will be ignored" FORCE - ) - - set_property (CACHE CMAKE_CONFIGURATION_TYPES PROPERTY STRINGS - "Debug" "Release" - ) -endif() if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) message (STATUS "Setting build type to '${DEFAULT_BUILD_TYPE}' as none was specified.") From 416d7f5538cf8863e793f1cd5b0f1465d1ad0d11 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sat, 16 May 2026 18:32:03 +0200 Subject: [PATCH 02/41] Change option to be able to group --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c727402..bc4c77f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,10 +27,10 @@ if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) ) endif() -option (BUILD_TESTING "Run Tests after compile" ON) option (PTHREADS4W_BUILD_C "Build lib with no exceptions - uses setjmp/longjmp" ON) option (PTHREADS4W_BUILD_CE "Build lib with C++ Error Handling" OFF) option (PTHREADS4W_BUILD_SE "Build lib with structured Error Handling" OFF) +option (PTHREADS4W_BUILD_TESTING "Run Tests after compile" ON) option (PTHREADS4W_BUILD_ALL "Build all 3 flavours of the libs" OFF) if (PTHREADS4W_BUILD_ALL) @@ -440,7 +440,7 @@ install (FILES DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ ) -if (BUILD_TESTING) +if (PTHREADS4W_BUILD_TESTING) enable_testing() add_subdirectory (tests) endif() From 060fea8a8501747648d8aae4edc516272c6a8dc7 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sat, 16 May 2026 18:32:19 +0200 Subject: [PATCH 03/41] Resort options --- CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bc4c77f..66636a6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,6 @@ else() set (COMPILER_INDICATOR "G") endif() - if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) message (STATUS "Setting build type to '${DEFAULT_BUILD_TYPE}' as none was specified.") @@ -27,11 +26,11 @@ if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) ) endif() +option (PTHREADS4W_BUILD_ALL "Build all 3 flavours of the libs" OFF) option (PTHREADS4W_BUILD_C "Build lib with no exceptions - uses setjmp/longjmp" ON) option (PTHREADS4W_BUILD_CE "Build lib with C++ Error Handling" OFF) option (PTHREADS4W_BUILD_SE "Build lib with structured Error Handling" OFF) option (PTHREADS4W_BUILD_TESTING "Run Tests after compile" ON) -option (PTHREADS4W_BUILD_ALL "Build all 3 flavours of the libs" OFF) if (PTHREADS4W_BUILD_ALL) set (PTHREADS4W_BUILD_C TRUE) From 1fac5f4c2b357f4f0cfb4cd10bcbe501afdd81a2 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sat, 16 May 2026 18:32:38 +0200 Subject: [PATCH 04/41] Use prokect-specific var --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 66636a6..639c835 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -444,5 +444,5 @@ if (PTHREADS4W_BUILD_TESTING) add_subdirectory (tests) endif() -set (CPACK_RESOURCE_FILE_LICENSE ${PROJECT_SOURCE_DIR}/LICENSE) +set (CPACK_RESOURCE_FILE_LICENSE ${PTHREADS4W_SOURCE_DIR}/LICENSE) include (CPack) From 9368795f46093882677193f5eadf45e4e185cb12 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sat, 16 May 2026 18:32:52 +0200 Subject: [PATCH 05/41] add headers for guis --- CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 639c835..de83af2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -195,6 +195,7 @@ set (PTHREAD_HEADERS if (PTHREADS4W_BUILD_C) add_library (pthread${COMPILER_INDICATOR}C SHARED ${PTHREAD_SOURCES} + ${PTHREAD_HEADERS} ) add_library (Threads::Threads ALIAS pthread${COMPILER_INDICATOR}C) @@ -232,6 +233,7 @@ if (PTHREADS4W_BUILD_C) add_library (pthread${COMPILER_INDICATOR}C-static STATIC ${PTHREAD_SOURCES} + ${PTHREAD_HEADERS} ) add_library (Threads::Static ALIAS pthread${COMPILER_INDICATOR}C-static) @@ -268,6 +270,7 @@ endif() if (PTHREADS4W_BUILD_CE) add_library (pthread${COMPILER_INDICATOR}CE SHARED ${PTHREAD_SOURCES} + ${PTHREAD_HEADERS} ) add_library (Threads::CEShared ALIAS pthread${COMPILER_INDICATOR}CE) @@ -309,6 +312,7 @@ if (PTHREADS4W_BUILD_CE) add_library (pthread${COMPILER_INDICATOR}CE-static STATIC ${PTHREAD_SOURCES} + ${PTHREAD_HEADERS} ) add_library (Threads::CEStatic ALIAS pthread${COMPILER_INDICATOR}CE-static) @@ -349,6 +353,7 @@ endif() if (PTHREADS4W_BUILD_SE) add_library (pthread${COMPILER_INDICATOR}SE SHARED ${PTHREAD_SOURCES} + ${PTHREAD_HEADERS} ) add_library (Threads::SEShared ALIAS pthread${COMPILER_INDICATOR}SE) @@ -384,6 +389,7 @@ if (PTHREADS4W_BUILD_SE) add_library (pthread${COMPILER_INDICATOR}SE-static STATIC ${PTHREAD_SOURCES} + ${PTHREAD_HEADERS} ) add_library (Threads::SEStatic ALIAS pthread${COMPILER_INDICATOR}SE-static) From 432f328eab63f84f52338ef52c3aff4da7e401d4 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sat, 16 May 2026 22:59:43 +0200 Subject: [PATCH 06/41] Added options for shared/static --- CMakeLists.txt | 17 ++++++++++--- tests/CMakeLists.txt | 58 +++++++++++++++++++++++--------------------- 2 files changed, 45 insertions(+), 30 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index de83af2..233ef87 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,6 +30,8 @@ option (PTHREADS4W_BUILD_ALL "Build all 3 flavours of the libs" OFF) option (PTHREADS4W_BUILD_C "Build lib with no exceptions - uses setjmp/longjmp" ON) option (PTHREADS4W_BUILD_CE "Build lib with C++ Error Handling" OFF) option (PTHREADS4W_BUILD_SE "Build lib with structured Error Handling" OFF) +option (PTHREADS4W_BUILD_SHARED "Build shared libs" ON) +option (PTHREADS4W_BUILD_STATIC "Build static libs" ON) option (PTHREADS4W_BUILD_TESTING "Run Tests after compile" ON) if (PTHREADS4W_BUILD_ALL) @@ -193,6 +195,7 @@ set (PTHREAD_HEADERS ) if (PTHREADS4W_BUILD_C) + if(PTHREADS4W_BUILD_SHARED) add_library (pthread${COMPILER_INDICATOR}C SHARED ${PTHREAD_SOURCES} ${PTHREAD_HEADERS} @@ -230,7 +233,8 @@ if (PTHREADS4W_BUILD_C) COMPONENT Development DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread ) - + endif(PTHREADS4W_BUILD_SHARED) + if(PTHREADS4W_BUILD_STATIC) add_library (pthread${COMPILER_INDICATOR}C-static STATIC ${PTHREAD_SOURCES} ${PTHREAD_HEADERS} @@ -265,9 +269,11 @@ if (PTHREADS4W_BUILD_C) LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread ) + endif(PTHREADS4W_BUILD_STATIC) endif() if (PTHREADS4W_BUILD_CE) + if(PTHREADS4W_BUILD_SHARED) add_library (pthread${COMPILER_INDICATOR}CE SHARED ${PTHREAD_SOURCES} ${PTHREAD_HEADERS} @@ -309,7 +315,8 @@ if (PTHREADS4W_BUILD_CE) COMPONENT Development DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread ) - + endif(PTHREADS4W_BUILD_SHARED) + if(PTHREADS4W_BUILD_STATIC) add_library (pthread${COMPILER_INDICATOR}CE-static STATIC ${PTHREAD_SOURCES} ${PTHREAD_HEADERS} @@ -348,9 +355,11 @@ if (PTHREADS4W_BUILD_CE) LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread ) + endif(PTHREADS4W_BUILD_STATIC) endif() if (PTHREADS4W_BUILD_SE) + if(PTHREADS4W_BUILD_SHARED) add_library (pthread${COMPILER_INDICATOR}SE SHARED ${PTHREAD_SOURCES} ${PTHREAD_HEADERS} @@ -386,7 +395,8 @@ if (PTHREADS4W_BUILD_SE) COMPONENT Development DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread ) - + endif(PTHREADS4W_BUILD_SHARED) + if(PTHREADS4W_BUILD_STATIC) add_library (pthread${COMPILER_INDICATOR}SE-static STATIC ${PTHREAD_SOURCES} ${PTHREAD_HEADERS} @@ -421,6 +431,7 @@ if (PTHREADS4W_BUILD_SE) LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread ) + endif(PTHREADS4W_BUILD_STATIC) endif() include (CMakePackageConfigHelpers) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 5df9b09..c694d08 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -6,6 +6,7 @@ function (PT4WCREATE_TEST TESTNAME) cmake_parse_arguments (PARSE_ARGV 1 PT4WCT "${OPTS}" "${OVA}" "${MVA}") foreach (SUFFIX ${SUFFIXES}) + if(PTHREADS4W_BUILD_SHARED) add_executable (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME} ${TESTNAME}.c ${PT4WCT_ADDITIONAL_SOURCE} @@ -30,8 +31,9 @@ function (PT4WCREATE_TEST TESTNAME) FIXTURES_REQUIRED "${PT4WCT_DEPENDS}${COMPILER_INDICATOR}${SUFFIX}" ) endif() - + endif(PTHREADS4W_BUILD_SHARED) if (PT4WCT_NEEDS_LINK) + if(PTHREADS4W_BUILD_STATIC) add_executable (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static ${TESTNAME}.c ${PT4WCT_ADDITIONAL_SOURCE} @@ -61,41 +63,43 @@ function (PT4WCREATE_TEST TESTNAME) PRIVATE ${PROJECT_SOURCE_DIR} ) + target_link_libraries (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static + PRIVATE pthread${COMPILER_INDICATOR}${SUFFIX}-static + PRIVATE ${PT4WCT_ADITIONAL_LIB} + ) + + target_link_libraries (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib + PRIVATE ${PT4WCT_ADITIONAL_LIB} + ) + set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static PROPERTIES + FIXTURES_SETUP ${TESTNAME}${COMPILER_INDICATOR}${SUFFIX}-static + ) + + set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib PROPERTIES + FIXTURES_SETUP ${TESTNAME}${COMPILER_INDICATOR}${SUFFIX}-static-nolib + ) + + if (PT4WCT_DEPENDS) + set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static PROPERTIES + FIXTURES_REQUIRED "${PT4WCT_DEPENDS}${COMPILER_INDICATOR}${SUFFIX}-static" + ) + + set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib PROPERTIES + FIXTURES_REQUIRED "${PT4WCT_DEPENDS}${COMPILER_INDICATOR}${SUFFIX}-static-nolib" + ) + endif() + endif(PTHREADS4W_BUILD_STATIC) + if(PTHREADS4W_BUILD_SHARED) target_link_libraries (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME} PRIVATE pthread${COMPILER_INDICATOR}${SUFFIX} PRIVATE ${PT4WCT_ADITIONAL_LIB} ) - target_link_libraries (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static - PRIVATE pthread${COMPILER_INDICATOR}${SUFFIX}-static - PRIVATE ${PT4WCT_ADITIONAL_LIB} - ) - - target_link_libraries (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib - PRIVATE ${PT4WCT_ADITIONAL_LIB} - ) set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME} PROPERTIES ENVIRONMENT "PATH=$\;%PATH%" ) - - set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static PROPERTIES - FIXTURES_SETUP ${TESTNAME}${COMPILER_INDICATOR}${SUFFIX}-static - ) - - set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib PROPERTIES - FIXTURES_SETUP ${TESTNAME}${COMPILER_INDICATOR}${SUFFIX}-static-nolib - ) - - if (PT4WCT_DEPENDS) - set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static PROPERTIES - FIXTURES_REQUIRED "${PT4WCT_DEPENDS}${COMPILER_INDICATOR}${SUFFIX}-static" - ) - - set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib PROPERTIES - FIXTURES_REQUIRED "${PT4WCT_DEPENDS}${COMPILER_INDICATOR}${SUFFIX}-static-nolib" - ) - endif() + endif(PTHREADS4W_BUILD_SHARED) endif() endforeach() endfunction() From 771a485abce759e47b763f9ea29eba05a4545df3 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sun, 17 May 2026 07:11:58 +0200 Subject: [PATCH 07/41] reformat --- CMakeLists.txt | 799 +++++++++++++++++++------------------- tests/CMakeLists.txt | 906 ++++++++++++++++++------------------------- 2 files changed, 774 insertions(+), 931 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 233ef87..aa4e8a4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,29 +1,30 @@ cmake_minimum_required (VERSION 3.11) project (PTHREADS4W - VERSION 3.0.3.0 - LANGUAGES C -) + VERSION 3.0.3.0 + LANGUAGES C) include (GNUInstallDirs) set (CMAKE_DEBUG_POSTFIX d) if (EXISTS "${CMAKE_SOURCE_DIR}/.git") - set (DEFAULT_BUILD_TYPE "Debug") + set (DEFAULT_BUILD_TYPE "Debug") endif() if (MSVC) - set (COMPILER_INDICATOR "V") + set (COMPILER_INDICATOR "V") else() - set (COMPILER_INDICATOR "G") + set (COMPILER_INDICATOR "G") endif() if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - message (STATUS "Setting build type to '${DEFAULT_BUILD_TYPE}' as none was specified.") + message (STATUS "Setting build type to '${DEFAULT_BUILD_TYPE}' as none was specified.") - set (CMAKE_BUILD_TYPE "${DEFAULT_BUILD_TYPE}" CACHE - STRING "Choose the type of build." FORCE - ) + set (CMAKE_BUILD_TYPE + "${DEFAULT_BUILD_TYPE}" + CACHE + STRING "Choose the type of build." + FORCE) endif() option (PTHREADS4W_BUILD_ALL "Build all 3 flavours of the libs" OFF) @@ -35,430 +36,414 @@ option (PTHREADS4W_BUILD_STATIC "Build static libs" ON) option (PTHREADS4W_BUILD_TESTING "Run Tests after compile" ON) if (PTHREADS4W_BUILD_ALL) - set (PTHREADS4W_BUILD_C TRUE) - set (PTHREADS4W_BUILD_CE TRUE) - set (PTHREADS4W_BUILD_SE TRUE) + set (PTHREADS4W_BUILD_C TRUE) + set (PTHREADS4W_BUILD_CE TRUE) + set (PTHREADS4W_BUILD_SE TRUE) endif() set (PTHREAD_SOURCES - cleanup.c - create.c - dll.c - errno.c - global.c - pthread_attr_destroy.c - pthread_attr_getaffinity_np.c - pthread_attr_getdetachstate.c - pthread_attr_getinheritsched.c - pthread_attr_getname_np.c - pthread_attr_getschedparam.c - pthread_attr_getschedpolicy.c - pthread_attr_getscope.c - pthread_attr_getstackaddr.c - pthread_attr_getstacksize.c - pthread_attr_init.c - pthread_attr_setaffinity_np.c - pthread_attr_setdetachstate.c - pthread_attr_setinheritsched.c - pthread_attr_setname_np.c - pthread_attr_setschedparam.c - pthread_attr_setschedpolicy.c - pthread_attr_setscope.c - pthread_attr_setstackaddr.c - pthread_attr_setstacksize.c - pthread_barrier_destroy.c - pthread_barrier_init.c - pthread_barrier_wait.c - pthread_barrierattr_destroy.c - pthread_barrierattr_getpshared.c - pthread_barrierattr_init.c - pthread_barrierattr_setpshared.c - pthread_cancel.c - pthread_cond_destroy.c - pthread_cond_init.c - pthread_cond_signal.c - pthread_cond_wait.c - pthread_condattr_destroy.c - pthread_condattr_getpshared.c - pthread_condattr_init.c - pthread_condattr_setpshared.c - pthread_delay_np.c - pthread_detach.c - pthread_equal.c - pthread_exit.c - pthread_getconcurrency.c - pthread_getname_np.c - pthread_getschedparam.c - pthread_getspecific.c - pthread_getunique_np.c - pthread_getw32threadhandle_np.c - pthread_join.c - pthread_key_create.c - pthread_key_delete.c - pthread_kill.c - pthread_mutex_consistent.c - pthread_mutex_destroy.c - pthread_mutex_init.c - pthread_mutex_lock.c - pthread_mutex_timedlock.c - pthread_mutex_trylock.c - pthread_mutex_unlock.c - pthread_mutexattr_destroy.c - pthread_mutexattr_getkind_np.c - pthread_mutexattr_getpshared.c - pthread_mutexattr_getrobust.c - pthread_mutexattr_gettype.c - pthread_mutexattr_init.c - pthread_mutexattr_setkind_np.c - pthread_mutexattr_setpshared.c - pthread_mutexattr_setrobust.c - pthread_mutexattr_settype.c - pthread_num_processors_np.c - pthread_once.c - pthread_rwlock_destroy.c - pthread_rwlock_init.c - pthread_rwlock_rdlock.c - pthread_rwlock_timedrdlock.c - pthread_rwlock_timedwrlock.c - pthread_rwlock_tryrdlock.c - pthread_rwlock_trywrlock.c - pthread_rwlock_unlock.c - pthread_rwlock_wrlock.c - pthread_rwlockattr_destroy.c - pthread_rwlockattr_getpshared.c - pthread_rwlockattr_init.c - pthread_rwlockattr_setpshared.c - pthread_self.c - pthread_setaffinity.c - pthread_setcancelstate.c - pthread_setcanceltype.c - pthread_setconcurrency.c - pthread_setname_np.c - pthread_setschedparam.c - pthread_setspecific.c - pthread_spin_destroy.c - pthread_spin_init.c - pthread_spin_lock.c - pthread_spin_trylock.c - pthread_spin_unlock.c - pthread_testcancel.c - pthread_timechange_handler_np.c - pthread_timedjoin_np.c - pthread_tryjoin_np.c - pthread_win32_attach_detach_np.c - ptw32_calloc.c - ptw32_callUserDestroyRoutines.c - ptw32_cond_check_need_init.c - ptw32_getprocessors.c - ptw32_is_attr.c - ptw32_MCS_lock.c - ptw32_mutex_check_need_init.c - ptw32_new.c - ptw32_processInitialize.c - ptw32_processTerminate.c - ptw32_relmillisecs.c - ptw32_reuse.c - ptw32_rwlock_cancelwrwait.c - ptw32_rwlock_check_need_init.c - ptw32_semwait.c - ptw32_spinlock_check_need_init.c - ptw32_threadDestroy.c - ptw32_threadStart.c - ptw32_throw.c - ptw32_timespec.c - ptw32_tkAssocCreate.c - ptw32_tkAssocDestroy.c - sched_get_priority_max.c - sched_get_priority_min.c - sched_getscheduler.c - sched_setaffinity.c - sched_setscheduler.c - sched_yield.c - sem_close.c - sem_destroy.c - sem_getvalue.c - sem_init.c - sem_open.c - sem_post_multiple.c - sem_post.c - sem_timedwait.c - sem_trywait.c - sem_unlink.c - sem_wait.c - w32_CancelableWait.c -) + cleanup.c + create.c + dll.c + errno.c + global.c + pthread_attr_destroy.c + pthread_attr_getaffinity_np.c + pthread_attr_getdetachstate.c + pthread_attr_getinheritsched.c + pthread_attr_getname_np.c + pthread_attr_getschedparam.c + pthread_attr_getschedpolicy.c + pthread_attr_getscope.c + pthread_attr_getstackaddr.c + pthread_attr_getstacksize.c + pthread_attr_init.c + pthread_attr_setaffinity_np.c + pthread_attr_setdetachstate.c + pthread_attr_setinheritsched.c + pthread_attr_setname_np.c + pthread_attr_setschedparam.c + pthread_attr_setschedpolicy.c + pthread_attr_setscope.c + pthread_attr_setstackaddr.c + pthread_attr_setstacksize.c + pthread_barrier_destroy.c + pthread_barrier_init.c + pthread_barrier_wait.c + pthread_barrierattr_destroy.c + pthread_barrierattr_getpshared.c + pthread_barrierattr_init.c + pthread_barrierattr_setpshared.c + pthread_cancel.c + pthread_cond_destroy.c + pthread_cond_init.c + pthread_cond_signal.c + pthread_cond_wait.c + pthread_condattr_destroy.c + pthread_condattr_getpshared.c + pthread_condattr_init.c + pthread_condattr_setpshared.c + pthread_delay_np.c + pthread_detach.c + pthread_equal.c + pthread_exit.c + pthread_getconcurrency.c + pthread_getname_np.c + pthread_getschedparam.c + pthread_getspecific.c + pthread_getunique_np.c + pthread_getw32threadhandle_np.c + pthread_join.c + pthread_key_create.c + pthread_key_delete.c + pthread_kill.c + pthread_mutex_consistent.c + pthread_mutex_destroy.c + pthread_mutex_init.c + pthread_mutex_lock.c + pthread_mutex_timedlock.c + pthread_mutex_trylock.c + pthread_mutex_unlock.c + pthread_mutexattr_destroy.c + pthread_mutexattr_getkind_np.c + pthread_mutexattr_getpshared.c + pthread_mutexattr_getrobust.c + pthread_mutexattr_gettype.c + pthread_mutexattr_init.c + pthread_mutexattr_setkind_np.c + pthread_mutexattr_setpshared.c + pthread_mutexattr_setrobust.c + pthread_mutexattr_settype.c + pthread_num_processors_np.c + pthread_once.c + pthread_rwlock_destroy.c + pthread_rwlock_init.c + pthread_rwlock_rdlock.c + pthread_rwlock_timedrdlock.c + pthread_rwlock_timedwrlock.c + pthread_rwlock_tryrdlock.c + pthread_rwlock_trywrlock.c + pthread_rwlock_unlock.c + pthread_rwlock_wrlock.c + pthread_rwlockattr_destroy.c + pthread_rwlockattr_getpshared.c + pthread_rwlockattr_init.c + pthread_rwlockattr_setpshared.c + pthread_self.c + pthread_setaffinity.c + pthread_setcancelstate.c + pthread_setcanceltype.c + pthread_setconcurrency.c + pthread_setname_np.c + pthread_setschedparam.c + pthread_setspecific.c + pthread_spin_destroy.c + pthread_spin_init.c + pthread_spin_lock.c + pthread_spin_trylock.c + pthread_spin_unlock.c + pthread_testcancel.c + pthread_timechange_handler_np.c + pthread_timedjoin_np.c + pthread_tryjoin_np.c + pthread_win32_attach_detach_np.c + ptw32_calloc.c + ptw32_callUserDestroyRoutines.c + ptw32_cond_check_need_init.c + ptw32_getprocessors.c + ptw32_is_attr.c + ptw32_MCS_lock.c + ptw32_mutex_check_need_init.c + ptw32_new.c + ptw32_processInitialize.c + ptw32_processTerminate.c + ptw32_relmillisecs.c + ptw32_reuse.c + ptw32_rwlock_cancelwrwait.c + ptw32_rwlock_check_need_init.c + ptw32_semwait.c + ptw32_spinlock_check_need_init.c + ptw32_threadDestroy.c + ptw32_threadStart.c + ptw32_throw.c + ptw32_timespec.c + ptw32_tkAssocCreate.c + ptw32_tkAssocDestroy.c + sched_get_priority_max.c + sched_get_priority_min.c + sched_getscheduler.c + sched_setaffinity.c + sched_setscheduler.c + sched_yield.c + sem_close.c + sem_destroy.c + sem_getvalue.c + sem_init.c + sem_open.c + sem_post_multiple.c + sem_post.c + sem_timedwait.c + sem_trywait.c + sem_unlink.c + sem_wait.c + w32_CancelableWait.c) set (PTHREAD_HEADERS - _ptw32.h - pthread.h - sched.h -) + _ptw32.h + pthread.h + sched.h) if (PTHREADS4W_BUILD_C) - if(PTHREADS4W_BUILD_SHARED) - add_library (pthread${COMPILER_INDICATOR}C SHARED - ${PTHREAD_SOURCES} - ${PTHREAD_HEADERS} - ) - - add_library (Threads::Threads ALIAS pthread${COMPILER_INDICATOR}C) - add_library (Threads::Shared ALIAS pthread${COMPILER_INDICATOR}C) - - target_include_directories (pthread${COMPILER_INDICATOR}C - INTERFACE $ - PUBLIC $ - ) - - set_target_properties (pthread${COMPILER_INDICATOR}C PROPERTIES - OUTPUT_NAME pthreadV${COMPILER_INDICATOR}${PTHREADS4W_VERSION_MAJOR} - EXPORT_NAME Threads::Threads - VERSION ${PTHREADS4W_VERSION} - SOVERSION ${PTHREADS4W_VERSION_MAJOR} - PUBLIC_HEADER "${PTHREAD_HEADERS}" - ) - - target_compile_definitions (pthread${COMPILER_INDICATOR}C - PUBLIC CLEANUP=__PTW32_CLEANUP_C - PRIVATE __PTW32_BUILD_INLINED - PRIVATE HAVE_CONFIG_H - ) - - install (TARGETS pthread${COMPILER_INDICATOR}C - DESTINATION ${CMAKE_INSTALL_LIBDIR} - COMPONENT Runtime - EXPORT PTHREADS4W - LIBRARY - DESTINATION ${CMAKE_INSTALL_LIBDIR} - PUBLIC_HEADER - COMPONENT Development - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread - ) - endif(PTHREADS4W_BUILD_SHARED) - if(PTHREADS4W_BUILD_STATIC) - add_library (pthread${COMPILER_INDICATOR}C-static STATIC - ${PTHREAD_SOURCES} - ${PTHREAD_HEADERS} - ) - - add_library (Threads::Static ALIAS pthread${COMPILER_INDICATOR}C-static) - - target_include_directories (pthread${COMPILER_INDICATOR}C-static - INTERFACE $ - PUBLIC $ - ) - - set_target_properties (pthread${COMPILER_INDICATOR}C-static PROPERTIES - OUTPUT_NAME libpthread${COMPILER_INDICATOR}C${PTHREADS4W_VERSION_MAJOR} - EXPORT_NAME Threads::Static - VERSION ${PTHREADS4W_VERSION} - SOVERSION ${PTHREADS4W_VERSION_MAJOR} - PUBLIC_HEADER "${PTHREAD_HEADERS}" - ) - - target_compile_definitions (pthread${COMPILER_INDICATOR}C-static - PUBLIC CLEANUP=__PTW32_CLEANUP_C - PRIVATE __PTW32_BUILD_INLINED - PRIVATE __PTW32_STATIC_LIB - PRIVATE HAVE_CONFIG_H - ) - - install (TARGETS pthread${COMPILER_INDICATOR}C-static - COMPONENT Development - DESTINATION ${CMAKE_INSTALL_LIBDIR} - EXPORT PTHREADS4W - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread - ) - endif(PTHREADS4W_BUILD_STATIC) + if(PTHREADS4W_BUILD_SHARED) + add_library (pthread${COMPILER_INDICATOR}C SHARED + ${PTHREAD_SOURCES} + ${PTHREAD_HEADERS}) + + add_library (Threads::Threads ALIAS pthread${COMPILER_INDICATOR}C) + add_library (Threads::Shared ALIAS pthread${COMPILER_INDICATOR}C) + + target_include_directories (pthread${COMPILER_INDICATOR}C + INTERFACE $ + PUBLIC $) + + set_target_properties (pthread${COMPILER_INDICATOR}C + PROPERTIES + OUTPUT_NAME pthreadV${COMPILER_INDICATOR}${PTHREADS4W_VERSION_MAJOR} + EXPORT_NAME Threads::Threads + VERSION ${PTHREADS4W_VERSION} + SOVERSION ${PTHREADS4W_VERSION_MAJOR} + PUBLIC_HEADER "${PTHREAD_HEADERS}") + + target_compile_definitions (pthread${COMPILER_INDICATOR}C + PUBLIC CLEANUP=__PTW32_CLEANUP_C + PRIVATE + __PTW32_BUILD_INLINED + HAVE_CONFIG_H) + + install (TARGETS pthread${COMPILER_INDICATOR}C + DESTINATION ${CMAKE_INSTALL_LIBDIR} + COMPONENT Runtime + EXPORT PTHREADS4W + LIBRARY + DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER + COMPONENT Development + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) + endif(PTHREADS4W_BUILD_SHARED) + + if(PTHREADS4W_BUILD_STATIC) + add_library (pthread${COMPILER_INDICATOR}C-static STATIC + ${PTHREAD_SOURCES} + ${PTHREAD_HEADERS}) + + add_library (Threads::Static ALIAS pthread${COMPILER_INDICATOR}C-static) + + target_include_directories (pthread${COMPILER_INDICATOR}C-static + INTERFACE $ + PUBLIC $) + + set_target_properties (pthread${COMPILER_INDICATOR}C-static + PROPERTIES + OUTPUT_NAME libpthread${COMPILER_INDICATOR}C${PTHREADS4W_VERSION_MAJOR} + EXPORT_NAME Threads::Static + VERSION ${PTHREADS4W_VERSION} + SOVERSION ${PTHREADS4W_VERSION_MAJOR} + PUBLIC_HEADER "${PTHREAD_HEADERS}") + + target_compile_definitions (pthread${COMPILER_INDICATOR}C-static + PUBLIC CLEANUP=__PTW32_CLEANUP_C + PRIVATE + __PTW32_BUILD_INLINED + __PTW32_STATIC_LIB + HAVE_CONFIG_H) + + install (TARGETS pthread${COMPILER_INDICATOR}C-static + COMPONENT Development + DESTINATION ${CMAKE_INSTALL_LIBDIR} + EXPORT PTHREADS4W + LIBRARY + DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) + endif(PTHREADS4W_BUILD_STATIC) endif() if (PTHREADS4W_BUILD_CE) - if(PTHREADS4W_BUILD_SHARED) - add_library (pthread${COMPILER_INDICATOR}CE SHARED - ${PTHREAD_SOURCES} - ${PTHREAD_HEADERS} - ) - - add_library (Threads::CEShared ALIAS pthread${COMPILER_INDICATOR}CE) - - target_include_directories (pthread${COMPILER_INDICATOR}CE - INTERFACE $ - PUBLIC $ - ) - - set_target_properties (pthread${COMPILER_INDICATOR}CE PROPERTIES - OUTPUT_NAME pthread${COMPILER_INDICATOR}CE${PTHREADS4W_VERSION_MAJOR} - EXPORT_NAME Threads::CEShared - VERSION ${PTHREADS4W_VERSION} - SOVERSION ${PTHREADS4W_VERSION_MAJOR} - PUBLIC_HEADER "${PTHREAD_HEADERS}" - ) - - target_compile_definitions (pthread${COMPILER_INDICATOR}CE - PUBLIC CLEANUP=__PTW32_CLEANUP_CXX - PRIVATE __PTW32_BUILD_INLINED - PRIVATE HAVE_CONFIG_H - ) - - target_compile_options (pthread${COMPILER_INDICATOR}CE - PRIVATE "/EHs" - PRIVATE "/TP" - ) - - install (TARGETS pthread${COMPILER_INDICATOR}CE - DESTINATION ${CMAKE_INSTALL_LIBDIR} - COMPONENT Runtime - EXPORT PTHREADS4W - LIBRARY - DESTINATION ${CMAKE_INSTALL_LIBDIR} - PUBLIC_HEADER - COMPONENT Development - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread - ) - endif(PTHREADS4W_BUILD_SHARED) - if(PTHREADS4W_BUILD_STATIC) - add_library (pthread${COMPILER_INDICATOR}CE-static STATIC - ${PTHREAD_SOURCES} - ${PTHREAD_HEADERS} - ) - - add_library (Threads::CEStatic ALIAS pthread${COMPILER_INDICATOR}CE-static) - - target_include_directories (pthread${COMPILER_INDICATOR}CE-static - INTERFACE $ - PUBLIC $ - ) - - set_target_properties (pthread${COMPILER_INDICATOR}CE-static PROPERTIES - OUTPUT_NAME libpthreadVCE${PTHREADS4W_VERSION_MAJOR} - EXPORT_NAME Threads::CEStatic - VERSION ${PTHREADS4W_VERSION} - SOVERSION ${PTHREADS4W_VERSION_MAJOR} - PUBLIC_HEADER "${PTHREAD_HEADERS}" - ) - - target_compile_definitions (pthread${COMPILER_INDICATOR}CE-static - PUBLIC CLEANUP=__PTW32_CLEANUP_CXX - PRIVATE __PTW32_BUILD_INLINED - PRIVATE __PTW32_STATIC_LIB - PRIVATE HAVE_CONFIG_H - ) - - target_compile_options (pthread${COMPILER_INDICATOR}CE-static - PRIVATE "/EHs" - PRIVATE "/TP" - ) - install (TARGETS pthread${COMPILER_INDICATOR}CE-static - COMPONENT Development - DESTINATION ${CMAKE_INSTALL_LIBDIR} - EXPORT PTHREADS4W - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread - ) + if(PTHREADS4W_BUILD_SHARED) + add_library (pthread${COMPILER_INDICATOR}CE SHARED + ${PTHREAD_SOURCES} + ${PTHREAD_HEADERS}) + + add_library (Threads::CEShared ALIAS pthread${COMPILER_INDICATOR}CE) + + target_include_directories (pthread${COMPILER_INDICATOR}CE + INTERFACE $ + PUBLIC $) + + set_target_properties (pthread${COMPILER_INDICATOR}CE + PROPERTIES + OUTPUT_NAME pthread${COMPILER_INDICATOR}CE${PTHREADS4W_VERSION_MAJOR} + EXPORT_NAME Threads::CEShared + VERSION ${PTHREADS4W_VERSION} + SOVERSION ${PTHREADS4W_VERSION_MAJOR} + PUBLIC_HEADER "${PTHREAD_HEADERS}") + + target_compile_definitions (pthread${COMPILER_INDICATOR}CE + PUBLIC CLEANUP=__PTW32_CLEANUP_CXX + PRIVATE + __PTW32_BUILD_INLINED + HAVE_CONFIG_H) + + target_compile_options (pthread${COMPILER_INDICATOR}CE + PRIVATE + "/EHs" + "/TP") + + install (TARGETS pthread${COMPILER_INDICATOR}CE + DESTINATION ${CMAKE_INSTALL_LIBDIR} + COMPONENT Runtime + EXPORT PTHREADS4W + LIBRARY + DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER + COMPONENT Development + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) + endif(PTHREADS4W_BUILD_SHARED) + + if(PTHREADS4W_BUILD_STATIC) + add_library (pthread${COMPILER_INDICATOR}CE-static STATIC + ${PTHREAD_SOURCES} + ${PTHREAD_HEADERS}) + + add_library (Threads::CEStatic ALIAS pthread${COMPILER_INDICATOR}CE-static) + + target_include_directories (pthread${COMPILER_INDICATOR}CE-static + INTERFACE $ + PUBLIC $) + + set_target_properties (pthread${COMPILER_INDICATOR}CE-static + PROPERTIES + OUTPUT_NAME libpthreadVCE${PTHREADS4W_VERSION_MAJOR} + EXPORT_NAME Threads::CEStatic + VERSION ${PTHREADS4W_VERSION} + SOVERSION ${PTHREADS4W_VERSION_MAJOR} + PUBLIC_HEADER "${PTHREAD_HEADERS}") + + target_compile_definitions (pthread${COMPILER_INDICATOR}CE-static + PUBLIC CLEANUP=__PTW32_CLEANUP_CXX + PRIVATE + __PTW32_BUILD_INLINED + __PTW32_STATIC_LIB + HAVE_CONFIG_H) + + target_compile_options (pthread${COMPILER_INDICATOR}CE-static + PRIVATE + "/EHs" + "/TP") + + install (TARGETS pthread${COMPILER_INDICATOR}CE-static + COMPONENT Development + DESTINATION ${CMAKE_INSTALL_LIBDIR} + EXPORT PTHREADS4W + LIBRARY + DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) endif(PTHREADS4W_BUILD_STATIC) endif() if (PTHREADS4W_BUILD_SE) - if(PTHREADS4W_BUILD_SHARED) - add_library (pthread${COMPILER_INDICATOR}SE SHARED - ${PTHREAD_SOURCES} - ${PTHREAD_HEADERS} - ) - - add_library (Threads::SEShared ALIAS pthread${COMPILER_INDICATOR}SE) - - target_include_directories (pthreadVSE - INTERFACE $ - PUBLIC $ - ) - - set_target_properties (pthread${COMPILER_INDICATOR}SE PROPERTIES - OUTPUT_NAME pthreadVSE${PTHREADS4W_VERSION_MAJOR} - EXPORT_NAME Threads::SEShared - VERSION ${PTHREADS4W_VERSION} - SOVERSION ${PTHREADS4W_VERSION_MAJOR} - PUBLIC_HEADER "${PTHREAD_HEADERS}" - ) - - target_compile_definitions (pthread${COMPILER_INDICATOR}SE - PUBLIC CLEANUP=__PTW32_CLEANUP_SEH - PRIVATE __PTW32_BUILD_INLINED - PRIVATE HAVE_CONFIG_H - ) - - install (TARGETS pthread${COMPILER_INDICATOR}SE - DESTINATION ${CMAKE_INSTALL_LIBDIR} - COMPONENT Runtime - EXPORT PTHREADS4W - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - PUBLIC_HEADER - COMPONENT Development - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread - ) - endif(PTHREADS4W_BUILD_SHARED) - if(PTHREADS4W_BUILD_STATIC) - add_library (pthread${COMPILER_INDICATOR}SE-static STATIC - ${PTHREAD_SOURCES} - ${PTHREAD_HEADERS} - ) - - add_library (Threads::SEStatic ALIAS pthread${COMPILER_INDICATOR}SE-static) - - target_include_directories (pthread${COMPILER_INDICATOR}SE-static - INTERFACE $ - PUBLIC $ - ) - - set_target_properties (pthread${COMPILER_INDICATOR}SE-static PROPERTIES - OUTPUT_NAME libpthreadVSE${PTHREADS4W_VERSION_MAJOR} - EXPORT_NAME Threads::SEStatic - VERSION ${PTHREADS4W_VERSION} - SOVERSION ${PTHREADS4W_VERSION_MAJOR} - PUBLIC_HEADER "${PTHREAD_HEADERS}" - ) - - target_compile_definitions (pthread${COMPILER_INDICATOR}SE-static - PUBLIC CLEANUP=__PTW32_CLEANUP_SEH - PRIVATE __PTW32_BUILD_INLINED - PRIVATE __PTW32_STATIC_LIB - PRIVATE HAVE_CONFIG_H - ) - - install (TARGETS pthread${COMPILER_INDICATOR}SE-static - COMPONENT Development - DESTINATION ${CMAKE_INSTALL_LIBDIR} - EXPORT PTHREADS4W - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread - ) - endif(PTHREADS4W_BUILD_STATIC) + if(PTHREADS4W_BUILD_SHARED) + add_library (pthread${COMPILER_INDICATOR}SE SHARED + ${PTHREAD_SOURCES} + ${PTHREAD_HEADERS}) + + add_library (Threads::SEShared ALIAS pthread${COMPILER_INDICATOR}SE) + + target_include_directories (pthreadVSE + INTERFACE $ + PUBLIC $) + + set_target_properties (pthread${COMPILER_INDICATOR}SE + PROPERTIES + OUTPUT_NAME pthreadVSE${PTHREADS4W_VERSION_MAJOR} + EXPORT_NAME Threads::SEShared + VERSION ${PTHREADS4W_VERSION} + SOVERSION ${PTHREADS4W_VERSION_MAJOR} + PUBLIC_HEADER "${PTHREAD_HEADERS}") + + target_compile_definitions (pthread${COMPILER_INDICATOR}SE + PUBLIC CLEANUP=__PTW32_CLEANUP_SEH + PRIVATE + __PTW32_BUILD_INLINED + HAVE_CONFIG_H) + + install (TARGETS pthread${COMPILER_INDICATOR}SE + DESTINATION ${CMAKE_INSTALL_LIBDIR} + COMPONENT Runtime + EXPORT PTHREADS4W + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER + COMPONENT Development + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) + endif(PTHREADS4W_BUILD_SHARED) + + if(PTHREADS4W_BUILD_STATIC) + add_library (pthread${COMPILER_INDICATOR}SE-static STATIC + ${PTHREAD_SOURCES} + ${PTHREAD_HEADERS}) + + add_library (Threads::SEStatic ALIAS pthread${COMPILER_INDICATOR}SE-static) + + target_include_directories (pthread${COMPILER_INDICATOR}SE-static + INTERFACE $ + PUBLIC $) + + set_target_properties (pthread${COMPILER_INDICATOR}SE-static + PROPERTIES + OUTPUT_NAME libpthreadVSE${PTHREADS4W_VERSION_MAJOR} + EXPORT_NAME Threads::SEStatic + VERSION ${PTHREADS4W_VERSION} + SOVERSION ${PTHREADS4W_VERSION_MAJOR} + PUBLIC_HEADER "${PTHREAD_HEADERS}") + + target_compile_definitions (pthread${COMPILER_INDICATOR}SE-static + PUBLIC CLEANUP=__PTW32_CLEANUP_SEH + PRIVATE + __PTW32_BUILD_INLINED + PRIVATE __PTW32_STATIC_LIB + PRIVATE HAVE_CONFIG_H) + + install (TARGETS pthread${COMPILER_INDICATOR}SE-static + COMPONENT Development + DESTINATION ${CMAKE_INSTALL_LIBDIR} + EXPORT PTHREADS4W + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) + endif(PTHREADS4W_BUILD_STATIC) endif() include (CMakePackageConfigHelpers) configure_package_config_file ( - PTHREADS.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/PTHREADS4WConfig.cmake - INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ -) + PTHREADS.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/PTHREADS4WConfig.cmake + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/) WRITE_BASIC_PACKAGE_VERSION_FILE (PTHREADS4WConfigVersion.cmake - VERSION ${PTHREADS4W_VERSION} - COMPATIBILITY SameMajorVersion -) + VERSION ${PTHREADS4W_VERSION} + COMPATIBILITY SameMajorVersion) install (EXPORT PTHREADS4W - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake -) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) install (FILES - ${CMAKE_CURRENT_BINARY_DIR}/PTHREADS4WConfig.cmake - ${CMAKE_CURRENT_BINARY_DIR}/PTHREADS4WConfigVersion.cmake - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ -) + ${CMAKE_CURRENT_BINARY_DIR}/PTHREADS4WConfig.cmake + ${CMAKE_CURRENT_BINARY_DIR}/PTHREADS4WConfigVersion.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/) if (PTHREADS4W_BUILD_TESTING) - enable_testing() - add_subdirectory (tests) + enable_testing() + add_subdirectory (tests) endif() set (CPACK_RESOURCE_FILE_LICENSE ${PTHREADS4W_SOURCE_DIR}/LICENSE) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index c694d08..b794ccf 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,836 +1,694 @@ function (PT4WCREATE_TEST TESTNAME) - set (OPTS NEEDS_LINK NEEDS_ROOT_INCL) - set (OVA ADDITIONAL_SOURCE ADITIONAL_LIB) - set (MVA DEPENDS) - - cmake_parse_arguments (PARSE_ARGV 1 PT4WCT "${OPTS}" "${OVA}" "${MVA}") - - foreach (SUFFIX ${SUFFIXES}) - if(PTHREADS4W_BUILD_SHARED) - add_executable (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME} - ${TESTNAME}.c - ${PT4WCT_ADDITIONAL_SOURCE} - ) - - if (PT4WCT_NEEDS_ROOT_INCL) - target_include_directories (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME} - PRIVATE ${PROJECT_SOURCE_DIR} - ) - endif() - - add_test (NAME pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME} - COMMAND test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME} - ) - - set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME} PROPERTIES - FIXTURES_SETUP ${TESTNAME}${COMPILER_INDICATOR}${SUFFIX} - ) - - if (PT4WCT_DEPENDS) - set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME} PROPERTIES - FIXTURES_REQUIRED "${PT4WCT_DEPENDS}${COMPILER_INDICATOR}${SUFFIX}" - ) - endif() - endif(PTHREADS4W_BUILD_SHARED) - if (PT4WCT_NEEDS_LINK) - if(PTHREADS4W_BUILD_STATIC) - add_executable (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static - ${TESTNAME}.c - ${PT4WCT_ADDITIONAL_SOURCE} - ) - - add_test (NAME pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static - COMMAND test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static - ) - - add_executable (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib - ${TESTNAME}.c - ${PROJECT_SOURCE_DIR}/pthread.c - ${PT4WCT_ADDITIONAL_SOURCE} - ) - - add_test (NAME pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib - COMMAND test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib - ) - - target_compile_definitions (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib - PRIVATE __PTW32_DLLPORT= - PRIVATE __PTW32_CONFIG_H - PRIVATE __PTW32_STATIC_LIB - ) - - target_include_directories (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib - PRIVATE ${PROJECT_SOURCE_DIR} - ) - - target_link_libraries (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static - PRIVATE pthread${COMPILER_INDICATOR}${SUFFIX}-static - PRIVATE ${PT4WCT_ADITIONAL_LIB} - ) - - target_link_libraries (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib - PRIVATE ${PT4WCT_ADITIONAL_LIB} - ) - set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static PROPERTIES - FIXTURES_SETUP ${TESTNAME}${COMPILER_INDICATOR}${SUFFIX}-static - ) - - set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib PROPERTIES - FIXTURES_SETUP ${TESTNAME}${COMPILER_INDICATOR}${SUFFIX}-static-nolib - ) - - if (PT4WCT_DEPENDS) - set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static PROPERTIES - FIXTURES_REQUIRED "${PT4WCT_DEPENDS}${COMPILER_INDICATOR}${SUFFIX}-static" - ) - - set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib PROPERTIES - FIXTURES_REQUIRED "${PT4WCT_DEPENDS}${COMPILER_INDICATOR}${SUFFIX}-static-nolib" - ) - endif() - endif(PTHREADS4W_BUILD_STATIC) - if(PTHREADS4W_BUILD_SHARED) - target_link_libraries (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME} - PRIVATE pthread${COMPILER_INDICATOR}${SUFFIX} - PRIVATE ${PT4WCT_ADITIONAL_LIB} - ) - - - set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME} PROPERTIES - ENVIRONMENT "PATH=$\;%PATH%" - ) - endif(PTHREADS4W_BUILD_SHARED) - endif() - endforeach() + set (OPTS NEEDS_LINK NEEDS_ROOT_INCL) + set (OVA ADDITIONAL_SOURCE ADITIONAL_LIB) + set (MVA DEPENDS) + + cmake_parse_arguments (PARSE_ARGV 1 PT4WCT "${OPTS}" "${OVA}" "${MVA}") + + foreach (SUFFIX ${SUFFIXES}) + if(PTHREADS4W_BUILD_SHARED) + add_executable (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME} + ${TESTNAME}.c + ${PT4WCT_ADDITIONAL_SOURCE}) + + if (PT4WCT_NEEDS_ROOT_INCL) + target_include_directories (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME} + PRIVATE ${PROJECT_SOURCE_DIR}) + endif() + + add_test (NAME pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME} + COMMAND test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}) + + set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME} + PROPERTIES + FIXTURES_SETUP ${TESTNAME}${COMPILER_INDICATOR}${SUFFIX}) + + if (PT4WCT_DEPENDS) + set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME} + PROPERTIES + FIXTURES_REQUIRED "${PT4WCT_DEPENDS}${COMPILER_INDICATOR}${SUFFIX}") + endif() + endif(PTHREADS4W_BUILD_SHARED) + + if (PT4WCT_NEEDS_LINK) + if(PTHREADS4W_BUILD_STATIC) + add_executable (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static + ${TESTNAME}.c + ${PT4WCT_ADDITIONAL_SOURCE}) + + add_test (NAME pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static + COMMAND test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static) + + add_executable (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib + ${TESTNAME}.c + ${PROJECT_SOURCE_DIR}/pthread.c + ${PT4WCT_ADDITIONAL_SOURCE}) + + add_test (NAME pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib + COMMAND test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib) + + target_compile_definitions (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib + PRIVATE + __PTW32_DLLPORT= + __PTW32_CONFIG_H + __PTW32_STATIC_LIB) + + target_include_directories (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib + PRIVATE ${PROJECT_SOURCE_DIR}) + + target_link_libraries (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static + PRIVATE + pthread${COMPILER_INDICATOR}${SUFFIX}-static + ${PT4WCT_ADITIONAL_LIB}) + + target_link_libraries (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib + PRIVATE ${PT4WCT_ADITIONAL_LIB}) + + set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static + PROPERTIES + FIXTURES_SETUP ${TESTNAME}${COMPILER_INDICATOR}${SUFFIX}-static) + + set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib + PROPERTIES + FIXTURES_SETUP ${TESTNAME}${COMPILER_INDICATOR}${SUFFIX}-static-nolib) + + if (PT4WCT_DEPENDS) + set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static + PROPERTIES + FIXTURES_REQUIRED "${PT4WCT_DEPENDS}${COMPILER_INDICATOR}${SUFFIX}-static") + + set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib + PROPERTIES + FIXTURES_REQUIRED "${PT4WCT_DEPENDS}${COMPILER_INDICATOR}${SUFFIX}-static-nolib") + endif() + endif(PTHREADS4W_BUILD_STATIC) + + if(PTHREADS4W_BUILD_SHARED) + target_link_libraries (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME} + PRIVATE + pthread${COMPILER_INDICATOR}${SUFFIX} + ${PT4WCT_ADITIONAL_LIB}) + + set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME} + PROPERTIES + ENVIRONMENT "PATH=$\;%PATH%") + endif(PTHREADS4W_BUILD_SHARED) + endif(PT4WCT_NEEDS_LINK) + endforeach() endfunction() if (PTHREADS4W_BUILD_C) - list (APPEND SUFFIXES "C") + list (APPEND SUFFIXES "C") endif() if (PTHREADS4W_BUILD_CE) - list (APPEND SUFFIXES "CE") + list (APPEND SUFFIXES "CE") endif() if (PTHREADS4W_BUILD_SE) - list (APPEND SUFFIXES "SE") + list (APPEND SUFFIXES "SE") endif() PT4WCREATE_TEST (affinity1 NEEDS_LINK) PT4WCREATE_TEST (affinity2 NEEDS_LINK) PT4WCREATE_TEST (affinity3 - NEEDS_LINK - DEPENDS self1 -) + NEEDS_LINK + DEPENDS self1) PT4WCREATE_TEST (affinity4 - NEEDS_LINK - DEPENDS self1) + NEEDS_LINK + DEPENDS self1) PT4WCREATE_TEST (affinity5 - NEEDS_LINK - DEPENDS join0 self1 -) + NEEDS_LINK + DEPENDS join0 self1) PT4WCREATE_TEST (affinity6 - NEEDS_LINK - DEPENDS join0 self1 -) + NEEDS_LINK + DEPENDS join0 self1) PT4WCREATE_TEST (barrier1 NEEDS_LINK) PT4WCREATE_TEST (barrier2 - NEEDS_LINK - DEPENDS barrier1 -) + NEEDS_LINK + DEPENDS barrier1) PT4WCREATE_TEST (barrier3 - NEEDS_LINK - DEPENDS barrier1 join0 -) + NEEDS_LINK + DEPENDS barrier1 join0) PT4WCREATE_TEST (barrier4 - NEEDS_LINK - DEPENDS barrier1 join0 mutex1 -) + NEEDS_LINK + DEPENDS barrier1 join0 mutex1) PT4WCREATE_TEST (barrier5 - NEEDS_LINK - DEPENDS barrier1 join0 -) + NEEDS_LINK + DEPENDS barrier1 join0) PT4WCREATE_TEST (barrier6 - NEEDS_LINK - DEPENDS barrier1 join0 mutex1 -) + NEEDS_LINK + DEPENDS barrier1 join0 mutex1) PT4WCREATE_TEST (benchtest1 - NEEDS_LINK - ADDITIONAL_SOURCE benchlib.c - DEPENDS mutex5 -) + NEEDS_LINK + ADDITIONAL_SOURCE benchlib.c + DEPENDS mutex5) PT4WCREATE_TEST (benchtest2 - NEEDS_LINK - ADDITIONAL_SOURCE benchlib.c - DEPENDS join0 mutex5 -) + NEEDS_LINK + ADDITIONAL_SOURCE benchlib.c + DEPENDS join0 mutex5) PT4WCREATE_TEST (benchtest3 - NEEDS_LINK - ADDITIONAL_SOURCE benchlib.c - DEPENDS join0 mutex3 mutex5 -) + NEEDS_LINK + ADDITIONAL_SOURCE benchlib.c + DEPENDS join0 mutex3 mutex5) PT4WCREATE_TEST (benchtest4 - NEEDS_LINK - ADDITIONAL_SOURCE benchlib.c - DEPENDS mutex3 mutex5 -) + NEEDS_LINK + ADDITIONAL_SOURCE benchlib.c + DEPENDS mutex3 mutex5) PT4WCREATE_TEST (benchtest5 - NEEDS_LINK - DEPENDS semaphore5 -) + NEEDS_LINK + DEPENDS semaphore5) PT4WCREATE_TEST (cancel1 - NEEDS_LINK - DEPENDS create1 self1 -) + NEEDS_LINK + DEPENDS create1 self1) PT4WCREATE_TEST (cancel3 - NEEDS_LINK - DEPENDS cancel1 join0 mutex1 -)#- quserex.dll and alertdrv.sys are not available. + NEEDS_LINK + DEPENDS cancel1 join0 mutex1) + +#- quserex.dll and alertdrv.sys are not available. PT4WCREATE_TEST (cancel4 - NEEDS_LINK - DEPENDS cancel3 -) + NEEDS_LINK + DEPENDS cancel3) PT4WCREATE_TEST (cancel5 - NEEDS_LINK - DEPENDS cancel3 -) + NEEDS_LINK + DEPENDS cancel3) PT4WCREATE_TEST (cancel6a - NEEDS_LINK - DEPENDS cancel3 -) + NEEDS_LINK + DEPENDS cancel3) PT4WCREATE_TEST (cancel6d - NEEDS_LINK - DEPENDS cancel3 -) + NEEDS_LINK + DEPENDS cancel3) PT4WCREATE_TEST (cancel7 - NEEDS_LINK - DEPENDS cancel3 kill1 -) + NEEDS_LINK + DEPENDS cancel3 kill1) PT4WCREATE_TEST (cancel8 - NEEDS_LINK - DEPENDS cleanup0 condvar4 kill1 -) + NEEDS_LINK + DEPENDS cleanup0 condvar4 kill1) PT4WCREATE_TEST (cancel9 - NEEDS_LINK - ADITIONAL_LIB ws2_32 - DEPENDS cancel3 -) + NEEDS_LINK + ADITIONAL_LIB ws2_32 + DEPENDS cancel3) PT4WCREATE_TEST (cleanup0 - NEEDS_LINK - DEPENDS cancel3 -) + NEEDS_LINK + DEPENDS cancel3) PT4WCREATE_TEST (cleanup1 - NEEDS_LINK - DEPENDS cleanup0 -) + NEEDS_LINK + DEPENDS cleanup0) PT4WCREATE_TEST (cleanup2 - NEEDS_LINK - DEPENDS cleanup0 -) + NEEDS_LINK + DEPENDS cleanup0) PT4WCREATE_TEST (cleanup3 - NEEDS_LINK - DEPENDS cleanup0 -) + NEEDS_LINK + DEPENDS cleanup0) PT4WCREATE_TEST (condvar1 NEEDS_LINK) PT4WCREATE_TEST (condvar1_1 - NEEDS_LINK - DEPENDS condvar1 -) + NEEDS_LINK + DEPENDS condvar1) PT4WCREATE_TEST (condvar1_2 - NEEDS_LINK - DEPENDS condvar1 join0 -) + NEEDS_LINK + DEPENDS condvar1 join0) PT4WCREATE_TEST (condvar2 - NEEDS_LINK - DEPENDS condvar1 mutex1 -) + NEEDS_LINK + DEPENDS condvar1 mutex1) PT4WCREATE_TEST (condvar2_1 - NEEDS_LINK - DEPENDS condvar2 join0 -) + NEEDS_LINK + DEPENDS condvar2 join0) PT4WCREATE_TEST (condvar3 - NEEDS_LINK - DEPENDS condvar2 join0 self1 -) + NEEDS_LINK + DEPENDS condvar2 join0 self1) PT4WCREATE_TEST (condvar3_1 - NEEDS_LINK - DEPENDS condvar3 -) + NEEDS_LINK + DEPENDS condvar3) PT4WCREATE_TEST (condvar3_2 - NEEDS_LINK - DEPENDS condvar5 -) + NEEDS_LINK + DEPENDS condvar5) PT4WCREATE_TEST (condvar3_3 - NEEDS_LINK - DEPENDS condvar3 -) + NEEDS_LINK + DEPENDS condvar3) PT4WCREATE_TEST (condvar4 - NEEDS_LINK - DEPENDS condvar3 -) + NEEDS_LINK + DEPENDS condvar3) PT4WCREATE_TEST (condvar5 - NEEDS_LINK - DEPENDS condvar4 -) + NEEDS_LINK + DEPENDS condvar4) PT4WCREATE_TEST (condvar6 - NEEDS_LINK - DEPENDS condvar5 -) + NEEDS_LINK + DEPENDS condvar5) PT4WCREATE_TEST (condvar7 - NEEDS_LINK - DEPENDS condvar5 -) + NEEDS_LINK + DEPENDS condvar5) PT4WCREATE_TEST (condvar8 - NEEDS_LINK - DEPENDS condvar5 -) + NEEDS_LINK + DEPENDS condvar5) PT4WCREATE_TEST (condvar9 - NEEDS_LINK - DEPENDS condvar5 -) + NEEDS_LINK + DEPENDS condvar5) PT4WCREATE_TEST (context1 - NEEDS_LINK - DEPENDS create1 exit1 -) + NEEDS_LINK + DEPENDS create1 exit1) PT4WCREATE_TEST (count1 - NEEDS_LINK - DEPENDS join0 mutex1 -) + NEEDS_LINK + DEPENDS join0 mutex1) PT4WCREATE_TEST (create1 NEEDS_LINK) PT4WCREATE_TEST (create2 - NEEDS_LINK - DEPENDS join0 -) + NEEDS_LINK + DEPENDS join0) PT4WCREATE_TEST (create3 - NEEDS_LINK - DEPENDS create2 -) + NEEDS_LINK + DEPENDS create2) PT4WCREATE_TEST (delay1 NEEDS_LINK) PT4WCREATE_TEST (delay2 - NEEDS_LINK - DEPENDS cleanup0 delay1 -) + NEEDS_LINK + DEPENDS cleanup0 delay1) PT4WCREATE_TEST (detach1 - NEEDS_LINK - DEPENDS create1 exit1 kill1 -) + NEEDS_LINK + DEPENDS create1 exit1 kill1) PT4WCREATE_TEST (equal0 - NEEDS_LINK - DEPENDS self1 -) + NEEDS_LINK + DEPENDS self1) PT4WCREATE_TEST (equal1 - NEEDS_LINK - DEPENDS create1 equal0 -) + NEEDS_LINK + DEPENDS create1 equal0) PT4WCREATE_TEST (errno0 - NEEDS_LINK - DEPENDS semaphore5 -) + NEEDS_LINK + DEPENDS semaphore5) PT4WCREATE_TEST (errno1 - NEEDS_LINK - DEPENDS create1 mutex1 self1 -) + NEEDS_LINK + DEPENDS create1 mutex1 self1) PT4WCREATE_TEST (exception1 - NEEDS_LINK - DEPENDS cancel3 self1 -) + NEEDS_LINK + DEPENDS cancel3 self1) PT4WCREATE_TEST (exception2 - NEEDS_LINK - DEPENDS exception1 -) + NEEDS_LINK + DEPENDS exception1) PT4WCREATE_TEST (exception3 - NEEDS_ROOT_INCL - DEPENDS exception1 exit1 mutex5 -) + NEEDS_ROOT_INCL + DEPENDS exception1 exit1 mutex5) PT4WCREATE_TEST (exception3_0 - NEEDS_ROOT_INCL - DEPENDS exception3 -) + NEEDS_ROOT_INCL + DEPENDS exception3) PT4WCREATE_TEST (exit1 NEEDS_LINK) PT4WCREATE_TEST (exit2 - NEEDS_LINK - DEPENDS create1 exit1 -) + NEEDS_LINK + DEPENDS create1 exit1) PT4WCREATE_TEST (exit3 - NEEDS_LINK - DEPENDS create1 exit1 -) + NEEDS_LINK + DEPENDS create1 exit1) PT4WCREATE_TEST (exit4 - NEEDS_LINK - DEPENDS cancel3 exit1 -) + NEEDS_LINK + DEPENDS cancel3 exit1) PT4WCREATE_TEST (exit5 - NEEDS_LINK - DEPENDS cancel3 exit1 kill1 -) + NEEDS_LINK + DEPENDS cancel3 exit1 kill1) PT4WCREATE_TEST (exit6 NEEDS_LINK) PT4WCREATE_TEST (eyal1 - NEEDS_LINK - DEPENDS join0 mutex3 -) + NEEDS_LINK + DEPENDS join0 mutex3) PT4WCREATE_TEST (inherit1 - NEEDS_LINK - DEPENDS join0 priority1 -) + NEEDS_LINK + DEPENDS join0 priority1) PT4WCREATE_TEST (join0 - NEEDS_LINK - DEPENDS create1 exit1 -) + NEEDS_LINK + DEPENDS create1 exit1) PT4WCREATE_TEST (join1 - NEEDS_LINK - DEPENDS join0 -) + NEEDS_LINK + DEPENDS join0) PT4WCREATE_TEST (join2 - NEEDS_LINK - DEPENDS join0 -) + NEEDS_LINK + DEPENDS join0) PT4WCREATE_TEST (join3 - NEEDS_LINK - DEPENDS join0 -) + NEEDS_LINK + DEPENDS join0) PT4WCREATE_TEST (join4 - NEEDS_LINK - DEPENDS create1 -) + NEEDS_LINK + DEPENDS create1) PT4WCREATE_TEST (kill1 - NEEDS_LINK - DEPENDS self1 -) + NEEDS_LINK + DEPENDS self1) PT4WCREATE_TEST (mutex1 NEEDS_LINK) PT4WCREATE_TEST (mutex1e - NEEDS_LINK - DEPENDS mutex1 mutex5 -) + NEEDS_LINK + DEPENDS mutex1 mutex5) PT4WCREATE_TEST (mutex1n - NEEDS_LINK - DEPENDS mutex1 mutex5 -) + NEEDS_LINK + DEPENDS mutex1 mutex5) PT4WCREATE_TEST (mutex1r - NEEDS_LINK - DEPENDS mutex1 mutex5 -) + NEEDS_LINK + DEPENDS mutex1 mutex5) PT4WCREATE_TEST (mutex2 - NEEDS_LINK - DEPENDS mutex1 -) + NEEDS_LINK + DEPENDS mutex1) PT4WCREATE_TEST (mutex2e - NEEDS_LINK - DEPENDS mutex1 -) + NEEDS_LINK + DEPENDS mutex1) PT4WCREATE_TEST (mutex2r - NEEDS_LINK - DEPENDS mutex1 -) + NEEDS_LINK + DEPENDS mutex1) PT4WCREATE_TEST (mutex3 - NEEDS_LINK - DEPENDS join0 mutex1 -) + NEEDS_LINK + DEPENDS join0 mutex1) PT4WCREATE_TEST (mutex3e - NEEDS_LINK - DEPENDS join0 mutex3 -) + NEEDS_LINK + DEPENDS join0 mutex3) PT4WCREATE_TEST (mutex3r - NEEDS_LINK - DEPENDS join0 mutex3 -) + NEEDS_LINK + DEPENDS join0 mutex3) PT4WCREATE_TEST (mutex4 - NEEDS_LINK - DEPENDS join0 mutex3 mutex5 -) + NEEDS_LINK + DEPENDS join0 mutex3 mutex5) PT4WCREATE_TEST (mutex5 NEEDS_LINK) PT4WCREATE_TEST (mutex6 - NEEDS_LINK - DEPENDS create1 mutex3 -) + NEEDS_LINK + DEPENDS create1 mutex3) PT4WCREATE_TEST (mutex6e - NEEDS_LINK - DEPENDS join0 mutex1 mutex5 -) + NEEDS_LINK + DEPENDS join0 mutex1 mutex5) PT4WCREATE_TEST (mutex6es - NEEDS_LINK - DEPENDS join0 mutex1 mutex5 -) + NEEDS_LINK + DEPENDS join0 mutex1 mutex5) PT4WCREATE_TEST (mutex6n - NEEDS_LINK - DEPENDS create1 mutex1 mutex5 -) + NEEDS_LINK + DEPENDS create1 mutex1 mutex5) PT4WCREATE_TEST (mutex6r - NEEDS_LINK - DEPENDS join0 mutex1 mutex5 -) + NEEDS_LINK + DEPENDS join0 mutex1 mutex5) PT4WCREATE_TEST (mutex6rs - NEEDS_LINK - DEPENDS join0 mutex1 mutex5 -) + NEEDS_LINK + DEPENDS join0 mutex1 mutex5) PT4WCREATE_TEST (mutex6s - NEEDS_LINK - DEPENDS create3 -) + NEEDS_LINK + DEPENDS create3) PT4WCREATE_TEST (mutex7 - NEEDS_LINK - DEPENDS create1 mutex3 -) + NEEDS_LINK + DEPENDS create1 mutex3) PT4WCREATE_TEST (mutex7e - NEEDS_LINK - DEPENDS join0 mutex3 mutex5 -) + NEEDS_LINK + DEPENDS join0 mutex3 mutex5) PT4WCREATE_TEST (mutex7n - NEEDS_LINK - DEPENDS create1 mutex3 mutex5 -) + NEEDS_LINK + DEPENDS create1 mutex3 mutex5) PT4WCREATE_TEST (mutex7r - NEEDS_LINK - DEPENDS join0 mutex3 mutex5 -) + NEEDS_LINK + DEPENDS join0 mutex3 mutex5) PT4WCREATE_TEST (mutex8 - NEEDS_LINK - DEPENDS create1 mutex1 -) + NEEDS_LINK + DEPENDS create1 mutex1) PT4WCREATE_TEST (mutex8e - NEEDS_LINK - DEPENDS create1 mutex5 mutex8 -) + NEEDS_LINK + DEPENDS create1 mutex5 mutex8) PT4WCREATE_TEST (mutex8n - NEEDS_LINK - DEPENDS create1 mutex5 mutex8 -) + NEEDS_LINK + DEPENDS create1 mutex5 mutex8) PT4WCREATE_TEST (mutex8r - NEEDS_LINK - DEPENDS create1 mutex5 mutex8 -) + NEEDS_LINK + DEPENDS create1 mutex5 mutex8) PT4WCREATE_TEST (name_np1 - NEEDS_LINK - DEPENDS barrier1 join0 self1 -) + NEEDS_LINK + DEPENDS barrier1 join0 self1) PT4WCREATE_TEST (name_np2 - NEEDS_LINK - DEPENDS name_np1 -) + NEEDS_LINK + DEPENDS name_np1) PT4WCREATE_TEST (once1 - NEEDS_LINK - DEPENDS create1 -) + NEEDS_LINK + DEPENDS create1) PT4WCREATE_TEST (once2 - NEEDS_LINK - DEPENDS join0 once1 -) + NEEDS_LINK + DEPENDS join0 once1) PT4WCREATE_TEST (once3 - NEEDS_LINK - DEPENDS cancel3 once1 self1 -) + NEEDS_LINK + DEPENDS cancel3 once1 self1) PT4WCREATE_TEST (once4 - NEEDS_LINK - DEPENDS cleanup0 once1 priority1 -) + NEEDS_LINK + DEPENDS cleanup0 once1 priority1) PT4WCREATE_TEST (priority1 - NEEDS_LINK - DEPENDS join0 self1 -) + NEEDS_LINK + DEPENDS join0 self1) PT4WCREATE_TEST (priority2 - NEEDS_LINK - DEPENDS barrier1 inherit1 join0 -) + NEEDS_LINK + DEPENDS barrier1 inherit1 join0) PT4WCREATE_TEST (reinit1 - NEEDS_LINK - DEPENDS join0 rwlock3 sequence1 -) + NEEDS_LINK + DEPENDS join0 rwlock3 sequence1) PT4WCREATE_TEST (reuse1 - NEEDS_LINK - DEPENDS equal0 join0 -) + NEEDS_LINK + DEPENDS equal0 join0) PT4WCREATE_TEST (reuse2 - NEEDS_LINK - DEPENDS create2 -) + NEEDS_LINK + DEPENDS create2) PT4WCREATE_TEST (robust1 - NEEDS_LINK - DEPENDS join0 mutex1 mutex5 -) + NEEDS_LINK + DEPENDS join0 mutex1 mutex5) PT4WCREATE_TEST (robust2 - NEEDS_LINK - DEPENDS join0 mutex1 mutex5 -) + NEEDS_LINK + DEPENDS join0 mutex1 mutex5) PT4WCREATE_TEST (robust3 - NEEDS_LINK - DEPENDS join0 mutex1 mutex5 -) + NEEDS_LINK + DEPENDS join0 mutex1 mutex5) PT4WCREATE_TEST (robust4 - NEEDS_LINK - DEPENDS join0 mutex1 mutex5 -) + NEEDS_LINK + DEPENDS join0 mutex1 mutex5) PT4WCREATE_TEST (robust5 - NEEDS_LINK - DEPENDS join0 mutex1 mutex5 -) + NEEDS_LINK + DEPENDS join0 mutex1 mutex5) PT4WCREATE_TEST (rwlock1 NEEDS_LINK) PT4WCREATE_TEST (rwlock2 - NEEDS_LINK - DEPENDS rwlock1 -) + NEEDS_LINK + DEPENDS rwlock1) PT4WCREATE_TEST (rwlock2_t - NEEDS_LINK - DEPENDS rwlock2 -) + NEEDS_LINK + DEPENDS rwlock2) PT4WCREATE_TEST (rwlock3 - NEEDS_LINK - DEPENDS join0 rwlock2 -) + NEEDS_LINK + DEPENDS join0 rwlock2) PT4WCREATE_TEST (rwlock3_t - NEEDS_LINK - DEPENDS create1 rwlock2 -) + NEEDS_LINK + DEPENDS create1 rwlock2) PT4WCREATE_TEST (rwlock4 - NEEDS_LINK - DEPENDS join0 rwlock2 -) + NEEDS_LINK + DEPENDS join0 rwlock2) PT4WCREATE_TEST (rwlock4_t - NEEDS_LINK - DEPENDS create1 rwlock2_t -) + NEEDS_LINK + DEPENDS create1 rwlock2_t) PT4WCREATE_TEST (rwlock5 - NEEDS_LINK - DEPENDS join0 rwlock2 -) + NEEDS_LINK + DEPENDS join0 rwlock2) PT4WCREATE_TEST (rwlock5_t - NEEDS_LINK - DEPENDS create1 rwlock2_t -) + NEEDS_LINK + DEPENDS create1 rwlock2_t) PT4WCREATE_TEST (rwlock6 - NEEDS_LINK - DEPENDS join0 rwlock3 -) + NEEDS_LINK + DEPENDS join0 rwlock3) PT4WCREATE_TEST (rwlock6_t - NEEDS_LINK - DEPENDS join0 rwlock2_t rwlock3 -) + NEEDS_LINK + DEPENDS join0 rwlock2_t rwlock3) PT4WCREATE_TEST (rwlock6_t2 - NEEDS_LINK - DEPENDS join0 rwlock2_t rwlock3_t -) + NEEDS_LINK + DEPENDS join0 rwlock2_t rwlock3_t) PT4WCREATE_TEST (self1 - NEEDS_LINK - DEPENDS exit6 -) + NEEDS_LINK + DEPENDS exit6) PT4WCREATE_TEST (self2 - NEEDS_LINK - DEPENDS create1 equal0 exit6 self1 -) + NEEDS_LINK + DEPENDS create1 equal0 exit6 self1) PT4WCREATE_TEST (semaphore1 - NEEDS_LINK - DEPENDS join0 -) + NEEDS_LINK + DEPENDS join0) PT4WCREATE_TEST (semaphore2 NEEDS_LINK) PT4WCREATE_TEST (semaphore3 - NEEDS_LINK - DEPENDS join0 semaphore2 -) + NEEDS_LINK + DEPENDS join0 semaphore2) PT4WCREATE_TEST (semaphore4 - NEEDS_LINK - DEPENDS cancel3 semaphore2 -) + NEEDS_LINK + DEPENDS cancel3 semaphore2) PT4WCREATE_TEST (semaphore4t - NEEDS_LINK - DEPENDS cancel4 semaphore2 -) + NEEDS_LINK + DEPENDS cancel4 semaphore2) PT4WCREATE_TEST (semaphore5 - NEEDS_LINK - DEPENDS join0 -) + NEEDS_LINK + DEPENDS join0) PT4WCREATE_TEST (sequence1 - NEEDS_LINK - DEPENDS create2 self1 -) + NEEDS_LINK + DEPENDS create2 self1) PT4WCREATE_TEST (sizes - NEEDS_ROOT_INCL - DEPENDS once1 -) + NEEDS_ROOT_INCL + DEPENDS once1) PT4WCREATE_TEST (spin1 NEEDS_LINK) PT4WCREATE_TEST (spin2 - NEEDS_LINK - DEPENDS join0 spin1 -) + NEEDS_LINK + DEPENDS join0 spin1) PT4WCREATE_TEST (spin3 - NEEDS_LINK - DEPENDS join0 spin1 -) + NEEDS_LINK + DEPENDS join0 spin1) PT4WCREATE_TEST (spin4 - NEEDS_LINK - DEPENDS join0 spin1 -) + NEEDS_LINK + DEPENDS join0 spin1) PT4WCREATE_TEST (stress1 - NEEDS_LINK - DEPENDS barrier1 condvar4 -) + NEEDS_LINK + DEPENDS barrier1 condvar4) PT4WCREATE_TEST (timeouts - NEEDS_LINK - DEPENDS condvar2 mutex5 -) + NEEDS_LINK + DEPENDS condvar2 mutex5) PT4WCREATE_TEST (tsd1 - NEEDS_LINK - DEPENDS barrier1 exit6 join0 once1 self1 -) + NEEDS_LINK + DEPENDS barrier1 exit6 join0 once1 self1) PT4WCREATE_TEST (tsd2 - NEEDS_LINK - DEPENDS barrier1 exit6 join0 once1 self1 -) + NEEDS_LINK + DEPENDS barrier1 exit6 join0 once1 self1) PT4WCREATE_TEST (tsd3 - NEEDS_LINK - DEPENDS barrier1 exit6 join0 once1 self1 -) + NEEDS_LINK + DEPENDS barrier1 exit6 join0 once1 self1) PT4WCREATE_TEST (valid1 - NEEDS_LINK - DEPENDS join0 kill1 -) + NEEDS_LINK + DEPENDS join0 kill1) PT4WCREATE_TEST (valid2 - NEEDS_LINK - DEPENDS kill1 -) + NEEDS_LINK + DEPENDS kill1) From f3f88b0395182f765b20bf1f239a4500ea83b3fc Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sun, 17 May 2026 07:14:45 +0200 Subject: [PATCH 08/41] Default build-type is Release and value is not cached anymore --- CMakeLists.txt | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index aa4e8a4..c9da263 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,10 +7,6 @@ project (PTHREADS4W include (GNUInstallDirs) set (CMAKE_DEBUG_POSTFIX d) -if (EXISTS "${CMAKE_SOURCE_DIR}/.git") - set (DEFAULT_BUILD_TYPE "Debug") -endif() - if (MSVC) set (COMPILER_INDICATOR "V") else() @@ -18,13 +14,9 @@ else() endif() if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - message (STATUS "Setting build type to '${DEFAULT_BUILD_TYPE}' as none was specified.") + message (STATUS "Setting build type to Release as none was specified.") - set (CMAKE_BUILD_TYPE - "${DEFAULT_BUILD_TYPE}" - CACHE - STRING "Choose the type of build." - FORCE) + set (CMAKE_BUILD_TYPE "Release") endif() option (PTHREADS4W_BUILD_ALL "Build all 3 flavours of the libs" OFF) From d7a6be435ef33dcd93da63d3c901ac788eef9a61 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sun, 17 May 2026 07:41:16 +0200 Subject: [PATCH 09/41] No need to name based upon used compiler --- CMakeLists.txt | 88 +++++++++++++++++++++----------------------- tests/CMakeLists.txt | 62 +++++++++++++++---------------- 2 files changed, 72 insertions(+), 78 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c9da263..38b321f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,12 +7,6 @@ project (PTHREADS4W include (GNUInstallDirs) set (CMAKE_DEBUG_POSTFIX d) -if (MSVC) - set (COMPILER_INDICATOR "V") -else() - set (COMPILER_INDICATOR "G") -endif() - if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) message (STATUS "Setting build type to Release as none was specified.") @@ -187,32 +181,32 @@ set (PTHREAD_HEADERS if (PTHREADS4W_BUILD_C) if(PTHREADS4W_BUILD_SHARED) - add_library (pthread${COMPILER_INDICATOR}C SHARED + add_library (pthreadC SHARED ${PTHREAD_SOURCES} ${PTHREAD_HEADERS}) - add_library (Threads::Threads ALIAS pthread${COMPILER_INDICATOR}C) - add_library (Threads::Shared ALIAS pthread${COMPILER_INDICATOR}C) + add_library (Threads::Threads ALIAS pthreadC) + add_library (Threads::Shared ALIAS pthreadC) - target_include_directories (pthread${COMPILER_INDICATOR}C + target_include_directories (pthreadC INTERFACE $ PUBLIC $) - set_target_properties (pthread${COMPILER_INDICATOR}C + set_target_properties (pthreadC PROPERTIES - OUTPUT_NAME pthreadV${COMPILER_INDICATOR}${PTHREADS4W_VERSION_MAJOR} + OUTPUT_NAME pthreadV${PTHREADS4W_VERSION_MAJOR} EXPORT_NAME Threads::Threads VERSION ${PTHREADS4W_VERSION} SOVERSION ${PTHREADS4W_VERSION_MAJOR} PUBLIC_HEADER "${PTHREAD_HEADERS}") - target_compile_definitions (pthread${COMPILER_INDICATOR}C + target_compile_definitions (pthreadC PUBLIC CLEANUP=__PTW32_CLEANUP_C PRIVATE __PTW32_BUILD_INLINED HAVE_CONFIG_H) - install (TARGETS pthread${COMPILER_INDICATOR}C + install (TARGETS pthreadC DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT Runtime EXPORT PTHREADS4W @@ -224,32 +218,32 @@ if (PTHREADS4W_BUILD_C) endif(PTHREADS4W_BUILD_SHARED) if(PTHREADS4W_BUILD_STATIC) - add_library (pthread${COMPILER_INDICATOR}C-static STATIC + add_library (pthreadC-static STATIC ${PTHREAD_SOURCES} ${PTHREAD_HEADERS}) - add_library (Threads::Static ALIAS pthread${COMPILER_INDICATOR}C-static) + add_library (Threads::Static ALIAS pthreadC-static) - target_include_directories (pthread${COMPILER_INDICATOR}C-static + target_include_directories (pthreadC-static INTERFACE $ PUBLIC $) - set_target_properties (pthread${COMPILER_INDICATOR}C-static + set_target_properties (pthreadC-static PROPERTIES - OUTPUT_NAME libpthread${COMPILER_INDICATOR}C${PTHREADS4W_VERSION_MAJOR} + OUTPUT_NAME libpthreadC${PTHREADS4W_VERSION_MAJOR} EXPORT_NAME Threads::Static VERSION ${PTHREADS4W_VERSION} SOVERSION ${PTHREADS4W_VERSION_MAJOR} PUBLIC_HEADER "${PTHREAD_HEADERS}") - target_compile_definitions (pthread${COMPILER_INDICATOR}C-static + target_compile_definitions (pthreadC-static PUBLIC CLEANUP=__PTW32_CLEANUP_C PRIVATE __PTW32_BUILD_INLINED __PTW32_STATIC_LIB HAVE_CONFIG_H) - install (TARGETS pthread${COMPILER_INDICATOR}C-static + install (TARGETS pthreadC-static COMPONENT Development DESTINATION ${CMAKE_INSTALL_LIBDIR} EXPORT PTHREADS4W @@ -262,36 +256,36 @@ endif() if (PTHREADS4W_BUILD_CE) if(PTHREADS4W_BUILD_SHARED) - add_library (pthread${COMPILER_INDICATOR}CE SHARED + add_library (pthreadCE SHARED ${PTHREAD_SOURCES} ${PTHREAD_HEADERS}) - add_library (Threads::CEShared ALIAS pthread${COMPILER_INDICATOR}CE) + add_library (Threads::CEShared ALIAS pthreadCE) - target_include_directories (pthread${COMPILER_INDICATOR}CE + target_include_directories (pthreadCE INTERFACE $ PUBLIC $) - set_target_properties (pthread${COMPILER_INDICATOR}CE + set_target_properties (pthreadCE PROPERTIES - OUTPUT_NAME pthread${COMPILER_INDICATOR}CE${PTHREADS4W_VERSION_MAJOR} + OUTPUT_NAME pthreadCE${PTHREADS4W_VERSION_MAJOR} EXPORT_NAME Threads::CEShared VERSION ${PTHREADS4W_VERSION} SOVERSION ${PTHREADS4W_VERSION_MAJOR} PUBLIC_HEADER "${PTHREAD_HEADERS}") - target_compile_definitions (pthread${COMPILER_INDICATOR}CE + target_compile_definitions (pthreadCE PUBLIC CLEANUP=__PTW32_CLEANUP_CXX PRIVATE __PTW32_BUILD_INLINED HAVE_CONFIG_H) - target_compile_options (pthread${COMPILER_INDICATOR}CE + target_compile_options (pthreadCE PRIVATE "/EHs" "/TP") - install (TARGETS pthread${COMPILER_INDICATOR}CE + install (TARGETS pthreadCE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT Runtime EXPORT PTHREADS4W @@ -303,17 +297,17 @@ if (PTHREADS4W_BUILD_CE) endif(PTHREADS4W_BUILD_SHARED) if(PTHREADS4W_BUILD_STATIC) - add_library (pthread${COMPILER_INDICATOR}CE-static STATIC + add_library (pthreadCE-static STATIC ${PTHREAD_SOURCES} ${PTHREAD_HEADERS}) - add_library (Threads::CEStatic ALIAS pthread${COMPILER_INDICATOR}CE-static) + add_library (Threads::CEStatic ALIAS pthreadCE-static) - target_include_directories (pthread${COMPILER_INDICATOR}CE-static + target_include_directories (pthreadCE-static INTERFACE $ PUBLIC $) - set_target_properties (pthread${COMPILER_INDICATOR}CE-static + set_target_properties (pthreadCE-static PROPERTIES OUTPUT_NAME libpthreadVCE${PTHREADS4W_VERSION_MAJOR} EXPORT_NAME Threads::CEStatic @@ -321,19 +315,19 @@ if (PTHREADS4W_BUILD_CE) SOVERSION ${PTHREADS4W_VERSION_MAJOR} PUBLIC_HEADER "${PTHREAD_HEADERS}") - target_compile_definitions (pthread${COMPILER_INDICATOR}CE-static + target_compile_definitions (pthreadCE-static PUBLIC CLEANUP=__PTW32_CLEANUP_CXX PRIVATE __PTW32_BUILD_INLINED __PTW32_STATIC_LIB HAVE_CONFIG_H) - target_compile_options (pthread${COMPILER_INDICATOR}CE-static + target_compile_options (pthreadCE-static PRIVATE "/EHs" "/TP") - install (TARGETS pthread${COMPILER_INDICATOR}CE-static + install (TARGETS pthreadCE-static COMPONENT Development DESTINATION ${CMAKE_INSTALL_LIBDIR} EXPORT PTHREADS4W @@ -346,17 +340,17 @@ endif() if (PTHREADS4W_BUILD_SE) if(PTHREADS4W_BUILD_SHARED) - add_library (pthread${COMPILER_INDICATOR}SE SHARED + add_library (pthreadSE SHARED ${PTHREAD_SOURCES} ${PTHREAD_HEADERS}) - add_library (Threads::SEShared ALIAS pthread${COMPILER_INDICATOR}SE) + add_library (Threads::SEShared ALIAS pthreadSE) target_include_directories (pthreadVSE INTERFACE $ PUBLIC $) - set_target_properties (pthread${COMPILER_INDICATOR}SE + set_target_properties (pthreadSE PROPERTIES OUTPUT_NAME pthreadVSE${PTHREADS4W_VERSION_MAJOR} EXPORT_NAME Threads::SEShared @@ -364,13 +358,13 @@ if (PTHREADS4W_BUILD_SE) SOVERSION ${PTHREADS4W_VERSION_MAJOR} PUBLIC_HEADER "${PTHREAD_HEADERS}") - target_compile_definitions (pthread${COMPILER_INDICATOR}SE + target_compile_definitions (pthreadSE PUBLIC CLEANUP=__PTW32_CLEANUP_SEH PRIVATE __PTW32_BUILD_INLINED HAVE_CONFIG_H) - install (TARGETS pthread${COMPILER_INDICATOR}SE + install (TARGETS pthreadSE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT Runtime EXPORT PTHREADS4W @@ -381,17 +375,17 @@ if (PTHREADS4W_BUILD_SE) endif(PTHREADS4W_BUILD_SHARED) if(PTHREADS4W_BUILD_STATIC) - add_library (pthread${COMPILER_INDICATOR}SE-static STATIC + add_library (pthreadSE-static STATIC ${PTHREAD_SOURCES} ${PTHREAD_HEADERS}) - add_library (Threads::SEStatic ALIAS pthread${COMPILER_INDICATOR}SE-static) + add_library (Threads::SEStatic ALIAS pthreadSE-static) - target_include_directories (pthread${COMPILER_INDICATOR}SE-static + target_include_directories (pthreadSE-static INTERFACE $ PUBLIC $) - set_target_properties (pthread${COMPILER_INDICATOR}SE-static + set_target_properties (pthreadSE-static PROPERTIES OUTPUT_NAME libpthreadVSE${PTHREADS4W_VERSION_MAJOR} EXPORT_NAME Threads::SEStatic @@ -399,14 +393,14 @@ if (PTHREADS4W_BUILD_SE) SOVERSION ${PTHREADS4W_VERSION_MAJOR} PUBLIC_HEADER "${PTHREAD_HEADERS}") - target_compile_definitions (pthread${COMPILER_INDICATOR}SE-static + target_compile_definitions (pthreadSE-static PUBLIC CLEANUP=__PTW32_CLEANUP_SEH PRIVATE __PTW32_BUILD_INLINED PRIVATE __PTW32_STATIC_LIB PRIVATE HAVE_CONFIG_H) - install (TARGETS pthread${COMPILER_INDICATOR}SE-static + install (TARGETS pthreadSE-static COMPONENT Development DESTINATION ${CMAKE_INSTALL_LIBDIR} EXPORT PTHREADS4W diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index b794ccf..7729f9d 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -7,91 +7,91 @@ function (PT4WCREATE_TEST TESTNAME) foreach (SUFFIX ${SUFFIXES}) if(PTHREADS4W_BUILD_SHARED) - add_executable (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME} + add_executable (test-pthread4w${SUFFIX}-${TESTNAME} ${TESTNAME}.c ${PT4WCT_ADDITIONAL_SOURCE}) if (PT4WCT_NEEDS_ROOT_INCL) - target_include_directories (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME} + target_include_directories (test-pthread4w${SUFFIX}-${TESTNAME} PRIVATE ${PROJECT_SOURCE_DIR}) endif() - add_test (NAME pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME} - COMMAND test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}) + add_test (NAME pthread4w_${SUFFIX}-${TESTNAME} + COMMAND test-pthread4w${SUFFIX}-${TESTNAME}) - set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME} + set_tests_properties (pthread4w_${SUFFIX}-${TESTNAME} PROPERTIES - FIXTURES_SETUP ${TESTNAME}${COMPILER_INDICATOR}${SUFFIX}) + FIXTURES_SETUP ${TESTNAME}${SUFFIX}) if (PT4WCT_DEPENDS) - set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME} + set_tests_properties (pthread4w_${SUFFIX}-${TESTNAME} PROPERTIES - FIXTURES_REQUIRED "${PT4WCT_DEPENDS}${COMPILER_INDICATOR}${SUFFIX}") + FIXTURES_REQUIRED "${PT4WCT_DEPENDS}${SUFFIX}") endif() endif(PTHREADS4W_BUILD_SHARED) if (PT4WCT_NEEDS_LINK) if(PTHREADS4W_BUILD_STATIC) - add_executable (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static + add_executable (test-pthread4w${SUFFIX}-${TESTNAME}-static ${TESTNAME}.c ${PT4WCT_ADDITIONAL_SOURCE}) - add_test (NAME pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static - COMMAND test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static) + add_test (NAME pthread4w_${SUFFIX}-${TESTNAME}-static + COMMAND test-pthread4w${SUFFIX}-${TESTNAME}-static) - add_executable (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib + add_executable (test-pthread4w${SUFFIX}-${TESTNAME}-static-nolib ${TESTNAME}.c ${PROJECT_SOURCE_DIR}/pthread.c ${PT4WCT_ADDITIONAL_SOURCE}) - add_test (NAME pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib - COMMAND test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib) + add_test (NAME pthread4w_${SUFFIX}-${TESTNAME}-static-nolib + COMMAND test-pthread4w${SUFFIX}-${TESTNAME}-static-nolib) - target_compile_definitions (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib + target_compile_definitions (test-pthread4w${SUFFIX}-${TESTNAME}-static-nolib PRIVATE __PTW32_DLLPORT= __PTW32_CONFIG_H __PTW32_STATIC_LIB) - target_include_directories (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib + target_include_directories (test-pthread4w${SUFFIX}-${TESTNAME}-static-nolib PRIVATE ${PROJECT_SOURCE_DIR}) - target_link_libraries (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static + target_link_libraries (test-pthread4w${SUFFIX}-${TESTNAME}-static PRIVATE - pthread${COMPILER_INDICATOR}${SUFFIX}-static + pthread${SUFFIX}-static ${PT4WCT_ADITIONAL_LIB}) - target_link_libraries (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib + target_link_libraries (test-pthread4w${SUFFIX}-${TESTNAME}-static-nolib PRIVATE ${PT4WCT_ADITIONAL_LIB}) - set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static + set_tests_properties (pthread4w_${SUFFIX}-${TESTNAME}-static PROPERTIES - FIXTURES_SETUP ${TESTNAME}${COMPILER_INDICATOR}${SUFFIX}-static) + FIXTURES_SETUP ${TESTNAME}${SUFFIX}-static) - set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib + set_tests_properties (pthread4w_${SUFFIX}-${TESTNAME}-static-nolib PROPERTIES - FIXTURES_SETUP ${TESTNAME}${COMPILER_INDICATOR}${SUFFIX}-static-nolib) + FIXTURES_SETUP ${TESTNAME}${SUFFIX}-static-nolib) if (PT4WCT_DEPENDS) - set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static + set_tests_properties (pthread4w_${SUFFIX}-${TESTNAME}-static PROPERTIES - FIXTURES_REQUIRED "${PT4WCT_DEPENDS}${COMPILER_INDICATOR}${SUFFIX}-static") + FIXTURES_REQUIRED "${PT4WCT_DEPENDS}${SUFFIX}-static") - set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME}-static-nolib + set_tests_properties (pthread4w_${SUFFIX}-${TESTNAME}-static-nolib PROPERTIES - FIXTURES_REQUIRED "${PT4WCT_DEPENDS}${COMPILER_INDICATOR}${SUFFIX}-static-nolib") + FIXTURES_REQUIRED "${PT4WCT_DEPENDS}${SUFFIX}-static-nolib") endif() endif(PTHREADS4W_BUILD_STATIC) if(PTHREADS4W_BUILD_SHARED) - target_link_libraries (test-pthread4w${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME} + target_link_libraries (test-pthread4w${SUFFIX}-${TESTNAME} PRIVATE - pthread${COMPILER_INDICATOR}${SUFFIX} + pthread${SUFFIX} ${PT4WCT_ADITIONAL_LIB}) - set_tests_properties (pthread4w_${COMPILER_INDICATOR}${SUFFIX}-${TESTNAME} + set_tests_properties (pthread4w_${SUFFIX}-${TESTNAME} PROPERTIES - ENVIRONMENT "PATH=$\;%PATH%") + ENVIRONMENT "PATH=$\;%PATH%") endif(PTHREADS4W_BUILD_SHARED) endif(PT4WCT_NEEDS_LINK) endforeach() From bed964f2317215f38d63203c7b595ff5887f5aca Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sun, 17 May 2026 17:04:55 +0200 Subject: [PATCH 10/41] added openmp1 to tests --- tests/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 7729f9d..f6cb113 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -527,6 +527,9 @@ PT4WCREATE_TEST (once4 NEEDS_LINK DEPENDS cleanup0 once1 priority1) +PT4WCREATE_TEST (openmp1 + NEEDS_LINK) + PT4WCREATE_TEST (priority1 NEEDS_LINK DEPENDS join0 self1) From b25e5b763c00220ed1f8fcfd2bf11f15d55ec6dd Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sun, 17 May 2026 18:11:36 +0200 Subject: [PATCH 11/41] fixed test naming --- tests/CMakeLists.txt | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index f6cb113..bee5f79 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -7,24 +7,24 @@ function (PT4WCREATE_TEST TESTNAME) foreach (SUFFIX ${SUFFIXES}) if(PTHREADS4W_BUILD_SHARED) - add_executable (test-pthread4w${SUFFIX}-${TESTNAME} + add_executable (pthreads4w${SUFFIX}-${TESTNAME} ${TESTNAME}.c ${PT4WCT_ADDITIONAL_SOURCE}) if (PT4WCT_NEEDS_ROOT_INCL) - target_include_directories (test-pthread4w${SUFFIX}-${TESTNAME} + target_include_directories (pthreads4w${SUFFIX}-${TESTNAME} PRIVATE ${PROJECT_SOURCE_DIR}) endif() - add_test (NAME pthread4w_${SUFFIX}-${TESTNAME} - COMMAND test-pthread4w${SUFFIX}-${TESTNAME}) + add_test (NAME pthreads4w_${SUFFIX}-${TESTNAME} + COMMAND pthreads4w${SUFFIX}-${TESTNAME}) - set_tests_properties (pthread4w_${SUFFIX}-${TESTNAME} + set_tests_properties (pthreads4w_${SUFFIX}-${TESTNAME} PROPERTIES FIXTURES_SETUP ${TESTNAME}${SUFFIX}) if (PT4WCT_DEPENDS) - set_tests_properties (pthread4w_${SUFFIX}-${TESTNAME} + set_tests_properties (pthreads4w_${SUFFIX}-${TESTNAME} PROPERTIES FIXTURES_REQUIRED "${PT4WCT_DEPENDS}${SUFFIX}") endif() @@ -32,64 +32,64 @@ function (PT4WCREATE_TEST TESTNAME) if (PT4WCT_NEEDS_LINK) if(PTHREADS4W_BUILD_STATIC) - add_executable (test-pthread4w${SUFFIX}-${TESTNAME}-static + add_executable (pthreads4w${SUFFIX}-${TESTNAME}-static ${TESTNAME}.c ${PT4WCT_ADDITIONAL_SOURCE}) - add_test (NAME pthread4w_${SUFFIX}-${TESTNAME}-static - COMMAND test-pthread4w${SUFFIX}-${TESTNAME}-static) + add_test (NAME pthreads4w_${SUFFIX}-${TESTNAME}-static + COMMAND pthreads4w${SUFFIX}-${TESTNAME}-static) - add_executable (test-pthread4w${SUFFIX}-${TESTNAME}-static-nolib + add_executable (pthreads4w${SUFFIX}-${TESTNAME}-static-nolib ${TESTNAME}.c ${PROJECT_SOURCE_DIR}/pthread.c ${PT4WCT_ADDITIONAL_SOURCE}) - add_test (NAME pthread4w_${SUFFIX}-${TESTNAME}-static-nolib - COMMAND test-pthread4w${SUFFIX}-${TESTNAME}-static-nolib) + add_test (NAME pthreads4w_${SUFFIX}-${TESTNAME}-static-nolib + COMMAND pthreads4w${SUFFIX}-${TESTNAME}-static-nolib) - target_compile_definitions (test-pthread4w${SUFFIX}-${TESTNAME}-static-nolib + target_compile_definitions (pthreads4w${SUFFIX}-${TESTNAME}-static-nolib PRIVATE __PTW32_DLLPORT= __PTW32_CONFIG_H __PTW32_STATIC_LIB) - target_include_directories (test-pthread4w${SUFFIX}-${TESTNAME}-static-nolib + target_include_directories (pthreads4w${SUFFIX}-${TESTNAME}-static-nolib PRIVATE ${PROJECT_SOURCE_DIR}) - target_link_libraries (test-pthread4w${SUFFIX}-${TESTNAME}-static + target_link_libraries (pthreads4w${SUFFIX}-${TESTNAME}-static PRIVATE pthread${SUFFIX}-static ${PT4WCT_ADITIONAL_LIB}) - target_link_libraries (test-pthread4w${SUFFIX}-${TESTNAME}-static-nolib + target_link_libraries (pthreads4w${SUFFIX}-${TESTNAME}-static-nolib PRIVATE ${PT4WCT_ADITIONAL_LIB}) - set_tests_properties (pthread4w_${SUFFIX}-${TESTNAME}-static + set_tests_properties (pthreads4w_${SUFFIX}-${TESTNAME}-static PROPERTIES FIXTURES_SETUP ${TESTNAME}${SUFFIX}-static) - set_tests_properties (pthread4w_${SUFFIX}-${TESTNAME}-static-nolib + set_tests_properties (pthreads4w_${SUFFIX}-${TESTNAME}-static-nolib PROPERTIES FIXTURES_SETUP ${TESTNAME}${SUFFIX}-static-nolib) if (PT4WCT_DEPENDS) - set_tests_properties (pthread4w_${SUFFIX}-${TESTNAME}-static + set_tests_properties (pthreads4w_${SUFFIX}-${TESTNAME}-static PROPERTIES FIXTURES_REQUIRED "${PT4WCT_DEPENDS}${SUFFIX}-static") - set_tests_properties (pthread4w_${SUFFIX}-${TESTNAME}-static-nolib + set_tests_properties (pthreads4w_${SUFFIX}-${TESTNAME}-static-nolib PROPERTIES FIXTURES_REQUIRED "${PT4WCT_DEPENDS}${SUFFIX}-static-nolib") endif() endif(PTHREADS4W_BUILD_STATIC) if(PTHREADS4W_BUILD_SHARED) - target_link_libraries (test-pthread4w${SUFFIX}-${TESTNAME} + target_link_libraries (pthreads4w${SUFFIX}-${TESTNAME} PRIVATE pthread${SUFFIX} ${PT4WCT_ADITIONAL_LIB}) - set_tests_properties (pthread4w_${SUFFIX}-${TESTNAME} + set_tests_properties (pthreads4w_${SUFFIX}-${TESTNAME} PROPERTIES ENVIRONMENT "PATH=$\;%PATH%") endif(PTHREADS4W_BUILD_SHARED) From fe54d73778a2df27e013a1d2c1016c880029b240 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sun, 17 May 2026 18:12:06 +0200 Subject: [PATCH 12/41] fixed config install location --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 38b321f..eccd46e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -420,12 +420,12 @@ WRITE_BASIC_PACKAGE_VERSION_FILE (PTHREADS4WConfigVersion.cmake COMPATIBILITY SameMajorVersion) install (EXPORT PTHREADS4W - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PTHREADS4W) install (FILES ${CMAKE_CURRENT_BINARY_DIR}/PTHREADS4WConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/PTHREADS4WConfigVersion.cmake - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PTHREADS4W) if (PTHREADS4W_BUILD_TESTING) enable_testing() From d5249c7658a2e27516f79493fa3e3cae8bee489e Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sun, 17 May 2026 18:12:42 +0200 Subject: [PATCH 13/41] fixed output-names of libs --- CMakeLists.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index eccd46e..8ca3634 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -194,7 +194,7 @@ if (PTHREADS4W_BUILD_C) set_target_properties (pthreadC PROPERTIES - OUTPUT_NAME pthreadV${PTHREADS4W_VERSION_MAJOR} + OUTPUT_NAME pthreadC${PTHREADS4W_VERSION_MAJOR} EXPORT_NAME Threads::Threads VERSION ${PTHREADS4W_VERSION} SOVERSION ${PTHREADS4W_VERSION_MAJOR} @@ -230,7 +230,7 @@ if (PTHREADS4W_BUILD_C) set_target_properties (pthreadC-static PROPERTIES - OUTPUT_NAME libpthreadC${PTHREADS4W_VERSION_MAJOR} + OUTPUT_NAME libpthreadC${PTHREADS4W_VERSION_MAJOR}s EXPORT_NAME Threads::Static VERSION ${PTHREADS4W_VERSION} SOVERSION ${PTHREADS4W_VERSION_MAJOR} @@ -309,7 +309,7 @@ if (PTHREADS4W_BUILD_CE) set_target_properties (pthreadCE-static PROPERTIES - OUTPUT_NAME libpthreadVCE${PTHREADS4W_VERSION_MAJOR} + OUTPUT_NAME libpthreadCE${PTHREADS4W_VERSION_MAJOR}s EXPORT_NAME Threads::CEStatic VERSION ${PTHREADS4W_VERSION} SOVERSION ${PTHREADS4W_VERSION_MAJOR} @@ -346,13 +346,13 @@ if (PTHREADS4W_BUILD_SE) add_library (Threads::SEShared ALIAS pthreadSE) - target_include_directories (pthreadVSE + target_include_directories (pthreadSE INTERFACE $ PUBLIC $) set_target_properties (pthreadSE PROPERTIES - OUTPUT_NAME pthreadVSE${PTHREADS4W_VERSION_MAJOR} + OUTPUT_NAME pthreadSE${PTHREADS4W_VERSION_MAJOR} EXPORT_NAME Threads::SEShared VERSION ${PTHREADS4W_VERSION} SOVERSION ${PTHREADS4W_VERSION_MAJOR} @@ -387,7 +387,7 @@ if (PTHREADS4W_BUILD_SE) set_target_properties (pthreadSE-static PROPERTIES - OUTPUT_NAME libpthreadVSE${PTHREADS4W_VERSION_MAJOR} + OUTPUT_NAME libpthreadSE${PTHREADS4W_VERSION_MAJOR}s EXPORT_NAME Threads::SEStatic VERSION ${PTHREADS4W_VERSION} SOVERSION ${PTHREADS4W_VERSION_MAJOR} From e8bfa17a29cb8245cc9512c2753596290a45d0ee Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sun, 17 May 2026 19:58:58 +0200 Subject: [PATCH 14/41] added integration-tests --- tests/CMakeLists.txt | 133 +++++++++++++++++++ tests/add_subdirectory_exclude_test.cmake.in | 54 ++++++++ tests/add_subdirectory_test.cmake.in | 53 ++++++++ tests/find_package_test.cmake.in | 52 ++++++++ 4 files changed, 292 insertions(+) create mode 100644 tests/add_subdirectory_exclude_test.cmake.in create mode 100644 tests/add_subdirectory_test.cmake.in create mode 100644 tests/find_package_test.cmake.in diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index bee5f79..4a6bdd1 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -695,3 +695,136 @@ PT4WCREATE_TEST (valid1 PT4WCREATE_TEST (valid2 NEEDS_LINK DEPENDS kill1) + +add_test( + NAME pthreads4w_install + COMMAND ${CMAKE_COMMAND} --install ${PTHREADS4W_BINARY_DIR} --prefix + ${CMAKE_CURRENT_BINARY_DIR}/test_install --config $ + WORKING_DIRECTORY ${PTHREADS4W_BINARY_DIR}) + +set_tests_properties(pthreads4w_install + PROPERTIES + FIXTURES_SETUP pthreads4w_install) + +file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test) +file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test) +file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/find_package_test) + +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/add_subdirectory_exclude_test.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test/CMakeLists.txt + @ONLY) + +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/add_subdirectory_test.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test/CMakeLists.txt + @ONLY) + +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/find_package_test.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/find_package_test/CMakeLists.txt + @ONLY) + +set(GENERATOR ${CMAKE_GENERATOR_PLATFORM}) + +if(GENERATOR) + set(PLATFORM "-A ${GENERATOR}") +endif(GENERATOR) + +# +# add_subdirectory_exclude_test +# +add_test( + NAME pthreads4w_add_subdirectory_exclude_configure + COMMAND + ${CMAKE_COMMAND} + ${PLATFORM} + -B${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test_build + -DCMAKE_BUILD_TYPE=$ + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} + -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/test_install + -G "${CMAKE_GENERATOR}" + -S${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test) + +add_test( + NAME pthreads4w_add_subdirectory_exclude_build + COMMAND ${CMAKE_COMMAND} --build . --config $ + WORKING_DIRECTORY + ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test_build) + +set_tests_properties( + pthreads4w_add_subdirectory_exclude_configure + PROPERTIES + FIXTURES_REQUIRED pthreads4w_install + FIXTURES_SETUP asx_config) + +set_tests_properties( + pthreads4w_add_subdirectory_exclude_build + PROPERTIES + FIXTURES_REQUIRED as_config + FIXTURES_SETUP asx_build) + +# +# add_subdirectory_test +# +add_test( + NAME pthreads4w_add_subdirectory_configure + COMMAND + ${CMAKE_COMMAND} + ${PLATFORM} + -B${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test_build + -DCMAKE_BUILD_TYPE=$ + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} + -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/test_install + -G "${CMAKE_GENERATOR}" + -S${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test) + +add_test( + NAME pthreads4w_add_subdirectory_build + COMMAND ${CMAKE_COMMAND} --build . --config $ + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test_build) + +set_tests_properties( + pthreads4w_add_subdirectory_configure + PROPERTIES + FIXTURES_REQUIRED pthreads4w_install + FIXTURES_SETUP as_config) + +set_tests_properties( + pthreads4w_add_subdirectory_build + PROPERTIES + FIXTURES_REQUIRED as_config + FIXTURES_SETUP as_build) + +# +# findpackage_test +# +add_test(NAME pthreads4w_find_package_configure + COMMAND + ${CMAKE_COMMAND} + ${PLATFORM} + -B${CMAKE_CURRENT_BINARY_DIR}/findpackage_test_build + -DCMAKE_BUILD_TYPE=$ + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} + -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/test_install + -G "${CMAKE_GENERATOR}" + -S${CMAKE_CURRENT_BINARY_DIR}/find_package_test) + +add_test( + NAME pthreads4w_find_package_build + COMMAND ${CMAKE_COMMAND} --build . --config $ + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/findpackage_test_build) + +set_tests_properties(pthreads4w_find_package_configure + PROPERTIES + FIXTURES_REQUIRED pthreads4w_install + FIXTURES_SETUP fp_config) + +set_tests_properties(pthreads4w_find_package_build + PROPERTIES + FIXTURES_REQUIRED fp_config + FIXTURES_SETUP fp_build) + diff --git a/tests/add_subdirectory_exclude_test.cmake.in b/tests/add_subdirectory_exclude_test.cmake.in new file mode 100644 index 0000000..7b7f7d5 --- /dev/null +++ b/tests/add_subdirectory_exclude_test.cmake.in @@ -0,0 +1,54 @@ +cmake_minimum_required(VERSION 3.11...3.31) + +project( + pt4w_add_subdirectory_exclude_test + LANGUAGES C + VERSION @PTHREADS4W_VERSION@) + +option(PTHREADS4W_BUILD_C "" @PTHREADS4W_BUILD_C@) +option(PTHREADS4W_BUILD_CE "" @PTHREADS4W_BUILD_CE@) +option(PTHREADS4W_BUILD_SE "" @PTHREADS4W_BUILD_SE@) +option(PTHREADS4W_BUILD_TESTING "" OFF) +option(PTHREADS4W_BUILD_SHARED "" @PTHREADS4W_BUILD_SHARED@) +option(PTHREADS4W_BUILD_STATIC "" @PTHREADS4W_BUILD_STATIC@) + +add_subdirectory(@PTHREADS4W_SOURCE_DIR@ + ${CMAKE_CURRENT_BINARY_DIR}/pt4w + EXCLUDE_FROM_ALL) + +if(PTHREADS4W_BUILD_SHARED) + if(PTHREADS4W_BUILD_C) + add_executable(test_affinity1C @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) + target_link_libraries(test_affinity1C Threads::Threads) + + add_executable(test_affinity1CS @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) + target_link_libraries(test_affinity1CS Threads::Shared) + endif() + + if(PTHREADS4W_BUILD_CE) + add_executable(test_affinity1CE @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) + target_link_libraries(test_affinity1CE Threads::CEShared) + endif() + + if(PTHREADS4W_BUILD_SE) + add_executable(test_affinity1SE @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) + target_link_libraries(test_affinity1SE Threads::SEShared) + endif() +endif(PTHREADS4W_BUILD_SHARED) + +if(PTHREADS4W_BUILD_STATIC) + if(PTHREADS4W_BUILD_C) + add_executable(test_affinity1CStatic @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) + target_link_libraries(test_affinity1CStatic Threads::Static) + endif() + + if(PTHREADS4W_BUILD_CE) + add_executable(test_affinity1CEStatic @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) + target_link_libraries(test_affinity1CEStatic Threads::CEStatic) + endif() + + if(PTHREADS4W_BUILD_SE) + add_executable(test_affinity1SEStatic @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) + target_link_libraries(test_affinity1SEStatic Threads::SEStatic) + endif() +endif(PTHREADS4W_BUILD_STATIC) \ No newline at end of file diff --git a/tests/add_subdirectory_test.cmake.in b/tests/add_subdirectory_test.cmake.in new file mode 100644 index 0000000..9da9d6e --- /dev/null +++ b/tests/add_subdirectory_test.cmake.in @@ -0,0 +1,53 @@ +cmake_minimum_required(VERSION 3.11...3.31) + +project( + pt4w_add_subdirectory_test + LANGUAGES C + VERSION @PTHREADS4W_VERSION@) + +option(PTHREADS4W_BUILD_C "" @PTHREADS4W_BUILD_C@) +option(PTHREADS4W_BUILD_CE "" @PTHREADS4W_BUILD_CE@) +option(PTHREADS4W_BUILD_SE "" @PTHREADS4W_BUILD_SE@) +option(PTHREADS4W_BUILD_TESTING "" OFF) +option(PTHREADS4W_BUILD_SHARED "" @PTHREADS4W_BUILD_SHARED@) +option(PTHREADS4W_BUILD_STATIC "" @PTHREADS4W_BUILD_STATIC@) + +add_subdirectory(@PTHREADS4W_SOURCE_DIR@ + ${CMAKE_CURRENT_BINARY_DIR}/pt4w) + +if(PTHREADS4W_BUILD_SHARED) + if(PTHREADS4W_BUILD_C) + add_executable(test_affinity1C @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) + target_link_libraries(test_affinity1C Threads::Threads) + + add_executable(test_affinity1CS @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) + target_link_libraries(test_affinity1CS Threads::Shared) + endif() + + if(PTHREADS4W_BUILD_CE) + add_executable(test_affinity1CE @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) + target_link_libraries(test_affinity1CE Threads::CEShared) + endif() + + if(PTHREADS4W_BUILD_SE) + add_executable(test_affinity1SE @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) + target_link_libraries(test_affinity1SE Threads::SEShared) + endif() +endif(PTHREADS4W_BUILD_SHARED) + +if(PTHREADS4W_BUILD_STATIC) + if(PTHREADS4W_BUILD_C) + add_executable(test_affinity1CStatic @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) + target_link_libraries(test_affinity1CStatic Threads::Static) + endif() + + if(PTHREADS4W_BUILD_CE) + add_executable(test_affinity1CEStatic @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) + target_link_libraries(test_affinity1CEStatic Threads::CEStatic) + endif() + + if(PTHREADS4W_BUILD_SE) + add_executable(test_affinity1SEStatic @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) + target_link_libraries(test_affinity1SEStatic Threads::SEStatic) + endif() +endif(PTHREADS4W_BUILD_STATIC) \ No newline at end of file diff --git a/tests/find_package_test.cmake.in b/tests/find_package_test.cmake.in new file mode 100644 index 0000000..fcea7b7 --- /dev/null +++ b/tests/find_package_test.cmake.in @@ -0,0 +1,52 @@ +cmake_minimum_required(VERSION 3.11...3.31) + +project( + pt4w_add_find_package_test + LANGUAGES C + VERSION @PTHREADS4W_VERSION@) + +option(PTHREADS4W_BUILD_C "" @PTHREADS4W_BUILD_C@) +option(PTHREADS4W_BUILD_CE "" @PTHREADS4W_BUILD_CE@) +option(PTHREADS4W_BUILD_SE "" @PTHREADS4W_BUILD_SE@) +option(PTHREADS4W_BUILD_TESTING "" OFF) +option(PTHREADS4W_BUILD_SHARED "" @PTHREADS4W_BUILD_SHARED@) +option(PTHREADS4W_BUILD_STATIC "" @PTHREADS4W_BUILD_STATIC@) + +find_package(PTHREADS4W @PTHREADS4W_VERSION@ CONFIG REQUIRED) + +if(PTHREADS4W_BUILD_SHARED) + if(PTHREADS4W_BUILD_C) + add_executable(test_affinity1C @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) + target_link_libraries(test_affinity1C Threads::Threads) + + add_executable(test_affinity1CS @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) + target_link_libraries(test_affinity1CS Threads::Shared) + endif() + + if(PTHREADS4W_BUILD_CE) + add_executable(test_affinity1CE @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) + target_link_libraries(test_affinity1CE Threads::CEShared) + endif() + + if(PTHREADS4W_BUILD_SE) + add_executable(test_affinity1SE @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) + target_link_libraries(test_affinity1SE Threads::SEShared) + endif() +endif(PTHREADS4W_BUILD_SHARED) + +if(PTHREADS4W_BUILD_STATIC) + if(PTHREADS4W_BUILD_C) + add_executable(test_affinity1CStatic @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) + target_link_libraries(test_affinity1CStatic Threads::Static) + endif() + + if(PTHREADS4W_BUILD_CE) + add_executable(test_affinity1CEStatic @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) + target_link_libraries(test_affinity1CEStatic Threads::CEStatic) + endif() + + if(PTHREADS4W_BUILD_SE) + add_executable(test_affinity1SEStatic @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) + target_link_libraries(test_affinity1SEStatic Threads::SEStatic) + endif() +endif(PTHREADS4W_BUILD_STATIC) \ No newline at end of file From 9a3442359f8213f82fe1a1d754ffdabd955c8e9a Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Tue, 19 May 2026 14:14:05 +0200 Subject: [PATCH 15/41] Check wether macros __GNUC__ and _POSIX_C_SOURCE are defined befrore using them Pulled from upstream --- pthread.h | 6 ++++-- sched.h | 45 ++++++++++++++++++++------------------------- 2 files changed, 24 insertions(+), 27 deletions(-) diff --git a/pthread.h b/pthread.h index a270e6c..ab6ca92 100644 --- a/pthread.h +++ b/pthread.h @@ -80,13 +80,15 @@ #undef __PTW32_LEVEL_MAX #define __PTW32_LEVEL_MAX 3 -#if _POSIX_C_SOURCE >= 200112L /* POSIX.1-2001 and later */ +#if defined _POSIX_C_SOURCE && _POSIX_C_SOURCE >= 200112L +/* POSIX.1-2001 and later */ # define __PTW32_LEVEL __PTW32_LEVEL_MAX /* include everything */ #elif defined INCLUDE_NP /* earlier than POSIX.1-2001, but... */ # define __PTW32_LEVEL 2 /* include non-portable extensions */ -#elif _POSIX_C_SOURCE >= 199309L /* POSIX.1-1993 */ +#elif defined _POSIX_C_SOURCE && _POSIX_C_SOURCE >= 199309L +/* POSIX.1-1993 */ # define __PTW32_LEVEL 1 /* include 1b, 1c, and 1d */ #elif defined _POSIX_SOURCE /* early POSIX */ diff --git a/sched.h b/sched.h index 81630d9..8f0c9ee 100644 --- a/sched.h +++ b/sched.h @@ -56,21 +56,21 @@ typedef int pid_t; #endif -#if __GNUC__ < 4 -/* GCC v4.0 and later, (as used by MinGW), allows us to repeat a +#if !defined __GNUC__ || __GNUC__ < 4 + /* GCC v4.0 and later, (as used by MinGW), allows us to repeat a * typedef, provided every duplicate is consistent; only set this * multiple definition guard when we cannot be certain that it is * permissable to repeat typedefs. */ -#define __have_typedef_pid_t 1 +#define __have_typedef_pid_t 1 #endif #endif -/* POSIX.1-1993 says that WILL expose all of + /* POSIX.1-1993 says that WILL expose all of */ #undef __SCHED_H_SOURCED__ #if _POSIX_C_SOURCE >= 200112L -/* POSIX.1-2001 and later revises this to say only that it MAY do so; + /* POSIX.1-2001 and later revises this to say only that it MAY do so; * only struct timespec, and associated time_t are actually required, * so prefer to be selective; (MinGW.org's offers an option * for selective #inclusion, when __SCHED_H_SOURCED__ is defined): @@ -82,46 +82,41 @@ #include #if defined __MINGW64__ || _MSC_VER >= 1900 -/* These are known to define struct timespec, when has been + /* These are known to define struct timespec, when has been * #included, but may not, (probably don't), follow the convention of * defining __struct_timespec_defined, as adopted by MinGW.org; for * these cases, we unconditionally assume that struct timespec has * been defined, otherwise, if MinGW.org's criterion has not been * satisfied... */ -#elif ! defined __struct_timespec_defined -# ifndef _TIMESPEC_DEFINED -# define _TIMESPEC_DEFINED +#elif !defined __struct_timespec_defined +#ifndef _TIMESPEC_DEFINED +#define _TIMESPEC_DEFINED struct timespec { /* ...we fall back on this explicit definition. */ time_t tv_sec; int tv_nsec; }; -# endif +#endif #endif -/* + /* * Microsoft VC++6.0 lacks these *_PTR types */ -#if defined(_MSC_VER) && _MSC_VER < 1300 && !defined (__PTW32_HAVE_DWORD_PTR) -typedef unsigned long ULONG_PTR; -typedef ULONG_PTR DWORD_PTR; +#if defined(_MSC_VER) && _MSC_VER < 1300 && !defined(__PTW32_HAVE_DWORD_PTR) + typedef unsigned long ULONG_PTR; + typedef ULONG_PTR DWORD_PTR; #endif -/* Thread scheduling policies */ + /* Thread scheduling policies */ -enum -{ SCHED_OTHER = 0, - SCHED_FIFO, - SCHED_RR, - SCHED_MIN = SCHED_OTHER, - SCHED_MAX = SCHED_RR -}; + enum { SCHED_OTHER = 0, SCHED_FIFO, SCHED_RR, SCHED_MIN = SCHED_OTHER, SCHED_MAX = SCHED_RR }; -struct sched_param -{ int sched_priority; -}; + struct sched_param + { + int sched_priority; + }; /* * CPU affinity From 16789444e154c51184df496a23321fdd574731f1 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Tue, 19 May 2026 14:49:07 +0200 Subject: [PATCH 16/41] Fix arm64 build, originally from https://github.com/ice0 Pulled from upstream and adjusted libnames --- version.rc | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/version.rc b/version.rc index aa0596c..accc8bf 100644 --- a/version.rc +++ b/version.rc @@ -43,26 +43,37 @@ #if defined (__PTW32_RC_MSC) # if defined (__PTW32_ARCHx64) || defined (__PTW32_ARCHX64) || defined (__PTW32_ARCHAMD64) # if defined(__PTW32_CLEANUP_C) -# define __PTW32_VERSIONINFO_NAME "pthreadVC2.DLL\0" +# define __PTW32_VERSIONINFO_NAME "pthreadC3.DLL\0" # define __PTW32_VERSIONINFO_DESCRIPTION "MS C x64\0" # elif defined(__PTW32_CLEANUP_CXX) -# define __PTW32_VERSIONINFO_NAME "pthreadVCE2.DLL\0" +# define __PTW32_VERSIONINFO_NAME "pthreadCE3.DLL\0" # define __PTW32_VERSIONINFO_DESCRIPTION "MS C++ x64\0" # elif defined(__PTW32_CLEANUP_SEH) -# define __PTW32_VERSIONINFO_NAME "pthreadVSE2.DLL\0" +# define __PTW32_VERSIONINFO_NAME "pthreadSE3.DLL\0" # define __PTW32_VERSIONINFO_DESCRIPTION "MS C SEH x64\0" # endif # elif defined (__PTW32_ARCHx86) || defined (__PTW32_ARCHX86) # if defined(__PTW32_CLEANUP_C) -# define __PTW32_VERSIONINFO_NAME "pthreadVC2.DLL\0" +# define __PTW32_VERSIONINFO_NAME "pthreadC3.DLL\0" # define __PTW32_VERSIONINFO_DESCRIPTION "MS C x86\0" # elif defined(__PTW32_CLEANUP_CXX) -# define __PTW32_VERSIONINFO_NAME "pthreadVCE2.DLL\0" +# define __PTW32_VERSIONINFO_NAME "pthreadCE3.DLL\0" # define __PTW32_VERSIONINFO_DESCRIPTION "MS C++ x86\0" # elif defined(__PTW32_CLEANUP_SEH) -# define __PTW32_VERSIONINFO_NAME "pthreadVSE2.DLL\0" +# define __PTW32_VERSIONINFO_NAME "pthreadSE3.DLL\0" # define __PTW32_VERSIONINFO_DESCRIPTION "MS C SEH x86\0" # endif +# elif defined(__PTW32_ARCHARM64) +# if defined(__PTW32_CLEANUP_C) +# define __PTW32_VERSIONINFO_NAME "pthreadC3.DLL\0" +# define __PTW32_VERSIONINFO_DESCRIPTION "MS C arm64\0" +# elif defined(__PTW32_CLEANUP_CXX) +# define __PTW32_VERSIONINFO_NAME "pthreadCE3.DLL\0" +# define __PTW32_VERSIONINFO_DESCRIPTION "MS C++ arm64\0" +# elif defined(__PTW32_CLEANUP_SEH) +# define __PTW32_VERSIONINFO_NAME "pthreadSE3.DLL\0" +# define __PTW32_VERSIONINFO_DESCRIPTION "MS C SEH arm64\0" +# endif # endif #elif defined(__GNUC__) # if defined(_M_X64) @@ -71,10 +82,10 @@ # define __PTW32_ARCH "x86 (mingw32)" # endif # if defined(__PTW32_CLEANUP_C) -# define __PTW32_VERSIONINFO_NAME "pthreadGC2.DLL\0" +# define __PTW32_VERSIONINFO_NAME "pthreadC3.DLL\0" # define __PTW32_VERSIONINFO_DESCRIPTION "GNU C " __PTW32_ARCH "\0" # elif defined(__PTW32_CLEANUP_CXX) -# define __PTW32_VERSIONINFO_NAME "pthreadGCE2.DLL\0" +# define __PTW32_VERSIONINFO_NAME "pthreadCE3.DLL\0" # define __PTW32_VERSIONINFO_DESCRIPTION "GNU C++ " __PTW32_ARCH "\0" # else # error Resource compiler doesn't know which cleanup style you're using - see version.rc From 9468c892d38dea59bc5f8bd64875501886761fd0 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sat, 23 May 2026 17:25:43 +0200 Subject: [PATCH 17/41] Chaged export for Components --- PTHREADS.cmake.in | 73 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 70 insertions(+), 3 deletions(-) diff --git a/PTHREADS.cmake.in b/PTHREADS.cmake.in index 6403dae..c67c0be 100644 --- a/PTHREADS.cmake.in +++ b/PTHREADS.cmake.in @@ -1,5 +1,72 @@ @PACKAGE_INIT@ -INCLUDE (${CMAKE_CURRENT_LIST_DIR}/PTHREADS4W.cmake) -INCLUDE (CMakeFindDependencyMacro) -ADD_LIBRARY (Threads::Shared ALIAS Threads::Threads) +set(_pthreads4w_available_components) + +if(@PTHREADS4W_BUILD_C@) + if(@PTHREADS4W_BUILD_SHARED@) + list(APPEND _pthreads4w_available_components Shared) + endif() + + if(@PTHREADS4W_BUILD_STATIC@) + list(APPEND _pthreads4w_available_components Static) + endif() +endif() + +if(@PTHREADS4W_BUILD_CE@) + if(@PTHREADS4W_BUILD_SHARED@) + list(APPEND _pthreads4w_available_components CEShared) + endif() + + if(@PTHREADS4W_BUILD_STATIC@) + list(APPEND _pthreads4w_available_components CEStatic) + endif() +endif() + +if(@PTHREADS4W_BUILD_SE@) + if(@PTHREADS4W_BUILD_SHARED@) + list(APPEND _pthreads4w_available_components SEShared) + endif() + + if(@PTHREADS4W_BUILD_STATIC@) + list(APPEND _pthreads4w_available_components SEStatic) + endif() +endif() + +if(PTHREADS4W_FIND_COMPONENTS) + set(_valid_components + Shared + Static + CEShared + CEStatic + SEShared + SEStatic) + + foreach(comp IN LISTS PTHREADS4W_FIND_COMPONENTS) + if(NOT comp IN_LIST _valid_components) + set(PTHREADS4W_FOUND FALSE) + set(PTHREADS4W_NOT_FOUND_MESSAGE + "Unknown component: ${comp}") + return() + endif() + endforeach() +endif() + +include(${CMAKE_CURRENT_LIST_DIR}/PTHREADS4W.cmake) + +if(NOT PTHREADS4W_FIND_COMPONENTS) + set(PTHREADS4W_FOUND TRUE) +else() + foreach(comp IN LISTS PTHREADS4W_FIND_COMPONENTS) + list(FIND _pthreads4w_available_components "${comp}" _idx) + + if(_idx EQUAL -1) + set(PTHREADS4W_FOUND FALSE) + set(PTHREADS4W_NOT_FOUND_MESSAGE + "Component ${comp} is not available in this build") + endif() + endforeach() +endif() + +if(TARGET Threads::Shared) + add_library(Threads::Threads ALIAS Threads::Shared) +endif() \ No newline at end of file From 58d11779f5684b982c6917ecee0c01e4ae1ce859 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sat, 23 May 2026 17:26:41 +0200 Subject: [PATCH 18/41] removed ifdef as openmp1 is only built when openmp is available --- tests/openmp1.c | 69 ++++++++++++++++++------------------------------- 1 file changed, 25 insertions(+), 44 deletions(-) mode change 100755 => 100644 tests/openmp1.c diff --git a/tests/openmp1.c b/tests/openmp1.c old mode 100755 new mode 100644 index b5791e2..57cbe45 --- a/tests/openmp1.c +++ b/tests/openmp1.c @@ -1,8 +1,6 @@ #include #include -#ifdef _OPENMP -# include -#endif +#include #include enum { @@ -20,17 +18,13 @@ void *_thread(void* Id) { int i; int x[Size]; -#ifdef _OPENMP -# pragma omp parallel for -#endif - for ( i = 0; i < Size; i++ ) { -#ifdef _OPENMP - if (Verbose && i%1000==0) { - int tid = omp_get_thread_num(); -# pragma omp critical - printf("thread %d : tid %d handles %d\n",(int)(size_t)Id,tid,i); - } -#endif +#pragma omp parallel for +for ( i = 0; i < Size; i++ ) { + if (Verbose && i%1000==0) { + int tid = omp_get_thread_num(); +#pragma omp critical + printf("thread %d : tid %d handles %d\n",(int)(size_t)Id,tid,i); + } x[i] = i; } @@ -40,9 +34,7 @@ void *_thread(void* Id) { Sum += x[i]; } if (Verbose) { -#ifdef _OPENMP -# pragma omp critical -#endif +#pragma omp critical printf("Id %d : %s : %d(should be %d)\n",(int)(size_t)Id, __FUNCTION__, Sum,ShouldSum); } if (Sum == ShouldSum) ThreadOK[(int)(size_t)Id] = 1; @@ -53,16 +45,12 @@ void *_thread(void* Id) { void MainThread() { int i; -#ifdef _OPENMP -# pragma omp parallel for -#endif +#pragma omp parallel for for ( i = 0; i < 4; i++ ) { -#ifdef _OPENMP - int tid = omp_get_thread_num(); -# pragma omp critical - printf("Main : tid %d\n",tid); - _thread((void *)(size_t)tid); -#endif + int tid = omp_get_thread_num(); +#pragma omp critical + printf("Main : tid %d\n",tid); + _thread((void *)(size_t)tid); } return; } @@ -75,10 +63,8 @@ int main(int argc, char *argv[]) { if (argc>1) Verbose = 1; -#ifdef _OPENMP omp_set_nested(-1); printf("%s%s%s\n", "Nested parallel blocks are ", omp_get_nested()?" ":"NOT ", "supported."); -#endif MainThread(); @@ -88,9 +74,6 @@ int main(int argc, char *argv[]) { pthread_t b_thr; int status; - printf("%s:%d - %s - a_thr:%p - b_thr:%p\n", - __FILE__,__LINE__,__FUNCTION__,a_thr.p,b_thr.p); - status = pthread_create(&a_thr, NULL, _thread, (void*) 1 ); if ( status != 0 ) { printf("Failed to create thread 1\n"); @@ -103,6 +86,9 @@ int main(int argc, char *argv[]) { return (-1); } + printf("%s:%d - %s - a_thr:%p - b_thr:%p\n", + __FILE__,__LINE__,__FUNCTION__,a_thr.p,b_thr.p); + status = pthread_join(a_thr, NULL); if ( status != 0 ) { printf("Failed to join thread 1\n"); @@ -120,21 +106,16 @@ int main(int argc, char *argv[]) { #endif // SPAWN_THREADS short OK = 0; - // Check that we have OpenMP before declaring things OK formally. -#ifdef _OPENMP - OK = 1; - { - short i; - for (i=0;i<3;i++) OK &= ThreadOK[i]; - } - if (OK) printf("OMP : All looks good\n"); - else printf("OMP : Error\n"); -#else - printf("OpenMP seems not enabled ...\n"); -#endif + + OK = 1; + { + short i; + for (i=0;i<3;i++) OK &= ThreadOK[i]; + } + if (OK) printf("OMP : All looks good\n"); + else printf("OMP : Error\n"); return OK?0:1; } //g++ -fopenmp omp_test.c -o omp_test -lpthread - From 49227f47b48de38b09b924e9657165c44b9b6310 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sat, 23 May 2026 17:27:26 +0200 Subject: [PATCH 19/41] rewrote almost everything to get a clean separation between C/C++ --- CMakeLists.txt | 765 +++++----- c-se/CMakeLists.txt | 151 ++ ce/CMakeLists.txt | 93 ++ tests/CMakeLists.txt | 1378 ++++++++++-------- tests/add_subdirectory_exclude_test.cmake.in | 23 +- tests/add_subdirectory_test.cmake.in | 23 +- tests/c-se/CMakeLists.txt | 13 + tests/ce/CMakeLists.txt | 9 + tests/find_package_test.cmake.in | 53 +- 9 files changed, 1527 insertions(+), 981 deletions(-) create mode 100644 c-se/CMakeLists.txt create mode 100644 ce/CMakeLists.txt create mode 100644 tests/c-se/CMakeLists.txt create mode 100644 tests/ce/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 8ca3634..73a8700 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required (VERSION 3.11) project (PTHREADS4W VERSION 3.0.3.0 - LANGUAGES C) + LANGUAGES C CXX) include (GNUInstallDirs) set (CMAKE_DEBUG_POSTFIX d) @@ -28,385 +28,398 @@ if (PTHREADS4W_BUILD_ALL) endif() set (PTHREAD_SOURCES - cleanup.c - create.c - dll.c - errno.c - global.c - pthread_attr_destroy.c - pthread_attr_getaffinity_np.c - pthread_attr_getdetachstate.c - pthread_attr_getinheritsched.c - pthread_attr_getname_np.c - pthread_attr_getschedparam.c - pthread_attr_getschedpolicy.c - pthread_attr_getscope.c - pthread_attr_getstackaddr.c - pthread_attr_getstacksize.c - pthread_attr_init.c - pthread_attr_setaffinity_np.c - pthread_attr_setdetachstate.c - pthread_attr_setinheritsched.c - pthread_attr_setname_np.c - pthread_attr_setschedparam.c - pthread_attr_setschedpolicy.c - pthread_attr_setscope.c - pthread_attr_setstackaddr.c - pthread_attr_setstacksize.c - pthread_barrier_destroy.c - pthread_barrier_init.c - pthread_barrier_wait.c - pthread_barrierattr_destroy.c - pthread_barrierattr_getpshared.c - pthread_barrierattr_init.c - pthread_barrierattr_setpshared.c - pthread_cancel.c - pthread_cond_destroy.c - pthread_cond_init.c - pthread_cond_signal.c - pthread_cond_wait.c - pthread_condattr_destroy.c - pthread_condattr_getpshared.c - pthread_condattr_init.c - pthread_condattr_setpshared.c - pthread_delay_np.c - pthread_detach.c - pthread_equal.c - pthread_exit.c - pthread_getconcurrency.c - pthread_getname_np.c - pthread_getschedparam.c - pthread_getspecific.c - pthread_getunique_np.c - pthread_getw32threadhandle_np.c - pthread_join.c - pthread_key_create.c - pthread_key_delete.c - pthread_kill.c - pthread_mutex_consistent.c - pthread_mutex_destroy.c - pthread_mutex_init.c - pthread_mutex_lock.c - pthread_mutex_timedlock.c - pthread_mutex_trylock.c - pthread_mutex_unlock.c - pthread_mutexattr_destroy.c - pthread_mutexattr_getkind_np.c - pthread_mutexattr_getpshared.c - pthread_mutexattr_getrobust.c - pthread_mutexattr_gettype.c - pthread_mutexattr_init.c - pthread_mutexattr_setkind_np.c - pthread_mutexattr_setpshared.c - pthread_mutexattr_setrobust.c - pthread_mutexattr_settype.c - pthread_num_processors_np.c - pthread_once.c - pthread_rwlock_destroy.c - pthread_rwlock_init.c - pthread_rwlock_rdlock.c - pthread_rwlock_timedrdlock.c - pthread_rwlock_timedwrlock.c - pthread_rwlock_tryrdlock.c - pthread_rwlock_trywrlock.c - pthread_rwlock_unlock.c - pthread_rwlock_wrlock.c - pthread_rwlockattr_destroy.c - pthread_rwlockattr_getpshared.c - pthread_rwlockattr_init.c - pthread_rwlockattr_setpshared.c - pthread_self.c - pthread_setaffinity.c - pthread_setcancelstate.c - pthread_setcanceltype.c - pthread_setconcurrency.c - pthread_setname_np.c - pthread_setschedparam.c - pthread_setspecific.c - pthread_spin_destroy.c - pthread_spin_init.c - pthread_spin_lock.c - pthread_spin_trylock.c - pthread_spin_unlock.c - pthread_testcancel.c - pthread_timechange_handler_np.c - pthread_timedjoin_np.c - pthread_tryjoin_np.c - pthread_win32_attach_detach_np.c - ptw32_calloc.c - ptw32_callUserDestroyRoutines.c - ptw32_cond_check_need_init.c - ptw32_getprocessors.c - ptw32_is_attr.c - ptw32_MCS_lock.c - ptw32_mutex_check_need_init.c - ptw32_new.c - ptw32_processInitialize.c - ptw32_processTerminate.c - ptw32_relmillisecs.c - ptw32_reuse.c - ptw32_rwlock_cancelwrwait.c - ptw32_rwlock_check_need_init.c - ptw32_semwait.c - ptw32_spinlock_check_need_init.c - ptw32_threadDestroy.c - ptw32_threadStart.c - ptw32_throw.c - ptw32_timespec.c - ptw32_tkAssocCreate.c - ptw32_tkAssocDestroy.c - sched_get_priority_max.c - sched_get_priority_min.c - sched_getscheduler.c - sched_setaffinity.c - sched_setscheduler.c - sched_yield.c - sem_close.c - sem_destroy.c - sem_getvalue.c - sem_init.c - sem_open.c - sem_post_multiple.c - sem_post.c - sem_timedwait.c - sem_trywait.c - sem_unlink.c - sem_wait.c - w32_CancelableWait.c) + ${PTHREADS4W_SOURCE_DIR}/cleanup.c + ${PTHREADS4W_SOURCE_DIR}/create.c + ${PTHREADS4W_SOURCE_DIR}/dll.c + ${PTHREADS4W_SOURCE_DIR}/errno.c + ${PTHREADS4W_SOURCE_DIR}/global.c + ${PTHREADS4W_SOURCE_DIR}/pthread_attr_destroy.c + ${PTHREADS4W_SOURCE_DIR}/pthread_attr_getaffinity_np.c + ${PTHREADS4W_SOURCE_DIR}/pthread_attr_getdetachstate.c + ${PTHREADS4W_SOURCE_DIR}/pthread_attr_getinheritsched.c + ${PTHREADS4W_SOURCE_DIR}/pthread_attr_getname_np.c + ${PTHREADS4W_SOURCE_DIR}/pthread_attr_getschedparam.c + ${PTHREADS4W_SOURCE_DIR}/pthread_attr_getschedpolicy.c + ${PTHREADS4W_SOURCE_DIR}/pthread_attr_getscope.c + ${PTHREADS4W_SOURCE_DIR}/pthread_attr_getstackaddr.c + ${PTHREADS4W_SOURCE_DIR}/pthread_attr_getstacksize.c + ${PTHREADS4W_SOURCE_DIR}/pthread_attr_init.c + ${PTHREADS4W_SOURCE_DIR}/pthread_attr_setaffinity_np.c + ${PTHREADS4W_SOURCE_DIR}/pthread_attr_setdetachstate.c + ${PTHREADS4W_SOURCE_DIR}/pthread_attr_setinheritsched.c + ${PTHREADS4W_SOURCE_DIR}/pthread_attr_setname_np.c + ${PTHREADS4W_SOURCE_DIR}/pthread_attr_setschedparam.c + ${PTHREADS4W_SOURCE_DIR}/pthread_attr_setschedpolicy.c + ${PTHREADS4W_SOURCE_DIR}/pthread_attr_setscope.c + ${PTHREADS4W_SOURCE_DIR}/pthread_attr_setstackaddr.c + ${PTHREADS4W_SOURCE_DIR}/pthread_attr_setstacksize.c + ${PTHREADS4W_SOURCE_DIR}/pthread_barrier_destroy.c + ${PTHREADS4W_SOURCE_DIR}/pthread_barrier_init.c + ${PTHREADS4W_SOURCE_DIR}/pthread_barrier_wait.c + ${PTHREADS4W_SOURCE_DIR}/pthread_barrierattr_destroy.c + ${PTHREADS4W_SOURCE_DIR}/pthread_barrierattr_getpshared.c + ${PTHREADS4W_SOURCE_DIR}/pthread_barrierattr_init.c + ${PTHREADS4W_SOURCE_DIR}/pthread_barrierattr_setpshared.c + ${PTHREADS4W_SOURCE_DIR}/pthread_cancel.c + ${PTHREADS4W_SOURCE_DIR}/pthread_cond_destroy.c + ${PTHREADS4W_SOURCE_DIR}/pthread_cond_init.c + ${PTHREADS4W_SOURCE_DIR}/pthread_cond_signal.c + ${PTHREADS4W_SOURCE_DIR}/pthread_cond_wait.c + ${PTHREADS4W_SOURCE_DIR}/pthread_condattr_destroy.c + ${PTHREADS4W_SOURCE_DIR}/pthread_condattr_getpshared.c + ${PTHREADS4W_SOURCE_DIR}/pthread_condattr_init.c + ${PTHREADS4W_SOURCE_DIR}/pthread_condattr_setpshared.c + ${PTHREADS4W_SOURCE_DIR}/pthread_delay_np.c + ${PTHREADS4W_SOURCE_DIR}/pthread_detach.c + ${PTHREADS4W_SOURCE_DIR}/pthread_equal.c + ${PTHREADS4W_SOURCE_DIR}/pthread_exit.c + ${PTHREADS4W_SOURCE_DIR}/pthread_getconcurrency.c + ${PTHREADS4W_SOURCE_DIR}/pthread_getname_np.c + ${PTHREADS4W_SOURCE_DIR}/pthread_getschedparam.c + ${PTHREADS4W_SOURCE_DIR}/pthread_getspecific.c + ${PTHREADS4W_SOURCE_DIR}/pthread_getunique_np.c + ${PTHREADS4W_SOURCE_DIR}/pthread_getw32threadhandle_np.c + ${PTHREADS4W_SOURCE_DIR}/pthread_join.c + ${PTHREADS4W_SOURCE_DIR}/pthread_key_create.c + ${PTHREADS4W_SOURCE_DIR}/pthread_key_delete.c + ${PTHREADS4W_SOURCE_DIR}/pthread_kill.c + ${PTHREADS4W_SOURCE_DIR}/pthread_mutex_consistent.c + ${PTHREADS4W_SOURCE_DIR}/pthread_mutex_destroy.c + ${PTHREADS4W_SOURCE_DIR}/pthread_mutex_init.c + ${PTHREADS4W_SOURCE_DIR}/pthread_mutex_lock.c + ${PTHREADS4W_SOURCE_DIR}/pthread_mutex_timedlock.c + ${PTHREADS4W_SOURCE_DIR}/pthread_mutex_trylock.c + ${PTHREADS4W_SOURCE_DIR}/pthread_mutex_unlock.c + ${PTHREADS4W_SOURCE_DIR}/pthread_mutexattr_destroy.c + ${PTHREADS4W_SOURCE_DIR}/pthread_mutexattr_getkind_np.c + ${PTHREADS4W_SOURCE_DIR}/pthread_mutexattr_getpshared.c + ${PTHREADS4W_SOURCE_DIR}/pthread_mutexattr_getrobust.c + ${PTHREADS4W_SOURCE_DIR}/pthread_mutexattr_gettype.c + ${PTHREADS4W_SOURCE_DIR}/pthread_mutexattr_init.c + ${PTHREADS4W_SOURCE_DIR}/pthread_mutexattr_setkind_np.c + ${PTHREADS4W_SOURCE_DIR}/pthread_mutexattr_setpshared.c + ${PTHREADS4W_SOURCE_DIR}/pthread_mutexattr_setrobust.c + ${PTHREADS4W_SOURCE_DIR}/pthread_mutexattr_settype.c + ${PTHREADS4W_SOURCE_DIR}/pthread_num_processors_np.c + ${PTHREADS4W_SOURCE_DIR}/pthread_once.c + ${PTHREADS4W_SOURCE_DIR}/pthread_rwlock_destroy.c + ${PTHREADS4W_SOURCE_DIR}/pthread_rwlock_init.c + ${PTHREADS4W_SOURCE_DIR}/pthread_rwlock_rdlock.c + ${PTHREADS4W_SOURCE_DIR}/pthread_rwlock_timedrdlock.c + ${PTHREADS4W_SOURCE_DIR}/pthread_rwlock_timedwrlock.c + ${PTHREADS4W_SOURCE_DIR}/pthread_rwlock_tryrdlock.c + ${PTHREADS4W_SOURCE_DIR}/pthread_rwlock_trywrlock.c + ${PTHREADS4W_SOURCE_DIR}/pthread_rwlock_unlock.c + ${PTHREADS4W_SOURCE_DIR}/pthread_rwlock_wrlock.c + ${PTHREADS4W_SOURCE_DIR}/pthread_rwlockattr_destroy.c + ${PTHREADS4W_SOURCE_DIR}/pthread_rwlockattr_getpshared.c + ${PTHREADS4W_SOURCE_DIR}/pthread_rwlockattr_init.c + ${PTHREADS4W_SOURCE_DIR}/pthread_rwlockattr_setpshared.c + ${PTHREADS4W_SOURCE_DIR}/pthread_self.c + ${PTHREADS4W_SOURCE_DIR}/pthread_setaffinity.c + ${PTHREADS4W_SOURCE_DIR}/pthread_setcancelstate.c + ${PTHREADS4W_SOURCE_DIR}/pthread_setcanceltype.c + ${PTHREADS4W_SOURCE_DIR}/pthread_setconcurrency.c + ${PTHREADS4W_SOURCE_DIR}/pthread_setname_np.c + ${PTHREADS4W_SOURCE_DIR}/pthread_setschedparam.c + ${PTHREADS4W_SOURCE_DIR}/pthread_setspecific.c + ${PTHREADS4W_SOURCE_DIR}/pthread_spin_destroy.c + ${PTHREADS4W_SOURCE_DIR}/pthread_spin_init.c + ${PTHREADS4W_SOURCE_DIR}/pthread_spin_lock.c + ${PTHREADS4W_SOURCE_DIR}/pthread_spin_trylock.c + ${PTHREADS4W_SOURCE_DIR}/pthread_spin_unlock.c + ${PTHREADS4W_SOURCE_DIR}/pthread_testcancel.c + ${PTHREADS4W_SOURCE_DIR}/pthread_timechange_handler_np.c + ${PTHREADS4W_SOURCE_DIR}/pthread_timedjoin_np.c + ${PTHREADS4W_SOURCE_DIR}/pthread_tryjoin_np.c + ${PTHREADS4W_SOURCE_DIR}/pthread_win32_attach_detach_np.c + ${PTHREADS4W_SOURCE_DIR}/ptw32_calloc.c + ${PTHREADS4W_SOURCE_DIR}/ptw32_callUserDestroyRoutines.c + ${PTHREADS4W_SOURCE_DIR}/ptw32_cond_check_need_init.c + ${PTHREADS4W_SOURCE_DIR}/ptw32_getprocessors.c + ${PTHREADS4W_SOURCE_DIR}/ptw32_is_attr.c + ${PTHREADS4W_SOURCE_DIR}/ptw32_MCS_lock.c + ${PTHREADS4W_SOURCE_DIR}/ptw32_mutex_check_need_init.c + ${PTHREADS4W_SOURCE_DIR}/ptw32_new.c + ${PTHREADS4W_SOURCE_DIR}/ptw32_processInitialize.c + ${PTHREADS4W_SOURCE_DIR}/ptw32_processTerminate.c + ${PTHREADS4W_SOURCE_DIR}/ptw32_relmillisecs.c + ${PTHREADS4W_SOURCE_DIR}/ptw32_reuse.c + ${PTHREADS4W_SOURCE_DIR}/ptw32_rwlock_cancelwrwait.c + ${PTHREADS4W_SOURCE_DIR}/ptw32_rwlock_check_need_init.c + ${PTHREADS4W_SOURCE_DIR}/ptw32_semwait.c + ${PTHREADS4W_SOURCE_DIR}/ptw32_spinlock_check_need_init.c + ${PTHREADS4W_SOURCE_DIR}/ptw32_threadDestroy.c + ${PTHREADS4W_SOURCE_DIR}/ptw32_threadStart.c + ${PTHREADS4W_SOURCE_DIR}/ptw32_throw.c + ${PTHREADS4W_SOURCE_DIR}/ptw32_timespec.c + ${PTHREADS4W_SOURCE_DIR}/ptw32_tkAssocCreate.c + ${PTHREADS4W_SOURCE_DIR}/ptw32_tkAssocDestroy.c + ${PTHREADS4W_SOURCE_DIR}/sched_get_priority_max.c + ${PTHREADS4W_SOURCE_DIR}/sched_get_priority_min.c + ${PTHREADS4W_SOURCE_DIR}/sched_getscheduler.c + ${PTHREADS4W_SOURCE_DIR}/sched_setaffinity.c + ${PTHREADS4W_SOURCE_DIR}/sched_setscheduler.c + ${PTHREADS4W_SOURCE_DIR}/sched_yield.c + ${PTHREADS4W_SOURCE_DIR}/sem_close.c + ${PTHREADS4W_SOURCE_DIR}/sem_destroy.c + ${PTHREADS4W_SOURCE_DIR}/sem_getvalue.c + ${PTHREADS4W_SOURCE_DIR}/sem_init.c + ${PTHREADS4W_SOURCE_DIR}/sem_open.c + ${PTHREADS4W_SOURCE_DIR}/sem_post_multiple.c + ${PTHREADS4W_SOURCE_DIR}/sem_post.c + ${PTHREADS4W_SOURCE_DIR}/sem_timedwait.c + ${PTHREADS4W_SOURCE_DIR}/sem_trywait.c + ${PTHREADS4W_SOURCE_DIR}/sem_unlink.c + ${PTHREADS4W_SOURCE_DIR}/sem_wait.c + ${PTHREADS4W_SOURCE_DIR}/w32_CancelableWait.c) set (PTHREAD_HEADERS - _ptw32.h - pthread.h - sched.h) - -if (PTHREADS4W_BUILD_C) - if(PTHREADS4W_BUILD_SHARED) - add_library (pthreadC SHARED - ${PTHREAD_SOURCES} - ${PTHREAD_HEADERS}) - - add_library (Threads::Threads ALIAS pthreadC) - add_library (Threads::Shared ALIAS pthreadC) - - target_include_directories (pthreadC - INTERFACE $ - PUBLIC $) - - set_target_properties (pthreadC - PROPERTIES - OUTPUT_NAME pthreadC${PTHREADS4W_VERSION_MAJOR} - EXPORT_NAME Threads::Threads - VERSION ${PTHREADS4W_VERSION} - SOVERSION ${PTHREADS4W_VERSION_MAJOR} - PUBLIC_HEADER "${PTHREAD_HEADERS}") - - target_compile_definitions (pthreadC - PUBLIC CLEANUP=__PTW32_CLEANUP_C - PRIVATE - __PTW32_BUILD_INLINED - HAVE_CONFIG_H) - - install (TARGETS pthreadC - DESTINATION ${CMAKE_INSTALL_LIBDIR} - COMPONENT Runtime - EXPORT PTHREADS4W - LIBRARY - DESTINATION ${CMAKE_INSTALL_LIBDIR} - PUBLIC_HEADER - COMPONENT Development - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) - endif(PTHREADS4W_BUILD_SHARED) - - if(PTHREADS4W_BUILD_STATIC) - add_library (pthreadC-static STATIC - ${PTHREAD_SOURCES} - ${PTHREAD_HEADERS}) - - add_library (Threads::Static ALIAS pthreadC-static) - - target_include_directories (pthreadC-static - INTERFACE $ - PUBLIC $) - - set_target_properties (pthreadC-static - PROPERTIES - OUTPUT_NAME libpthreadC${PTHREADS4W_VERSION_MAJOR}s - EXPORT_NAME Threads::Static - VERSION ${PTHREADS4W_VERSION} - SOVERSION ${PTHREADS4W_VERSION_MAJOR} - PUBLIC_HEADER "${PTHREAD_HEADERS}") - - target_compile_definitions (pthreadC-static - PUBLIC CLEANUP=__PTW32_CLEANUP_C - PRIVATE - __PTW32_BUILD_INLINED - __PTW32_STATIC_LIB - HAVE_CONFIG_H) - - install (TARGETS pthreadC-static - COMPONENT Development - DESTINATION ${CMAKE_INSTALL_LIBDIR} - EXPORT PTHREADS4W - LIBRARY - DESTINATION ${CMAKE_INSTALL_LIBDIR} - PUBLIC_HEADER - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) - endif(PTHREADS4W_BUILD_STATIC) -endif() - -if (PTHREADS4W_BUILD_CE) - if(PTHREADS4W_BUILD_SHARED) - add_library (pthreadCE SHARED - ${PTHREAD_SOURCES} - ${PTHREAD_HEADERS}) - - add_library (Threads::CEShared ALIAS pthreadCE) - - target_include_directories (pthreadCE - INTERFACE $ - PUBLIC $) - - set_target_properties (pthreadCE - PROPERTIES - OUTPUT_NAME pthreadCE${PTHREADS4W_VERSION_MAJOR} - EXPORT_NAME Threads::CEShared - VERSION ${PTHREADS4W_VERSION} - SOVERSION ${PTHREADS4W_VERSION_MAJOR} - PUBLIC_HEADER "${PTHREAD_HEADERS}") - - target_compile_definitions (pthreadCE - PUBLIC CLEANUP=__PTW32_CLEANUP_CXX - PRIVATE - __PTW32_BUILD_INLINED - HAVE_CONFIG_H) - - target_compile_options (pthreadCE - PRIVATE - "/EHs" - "/TP") - - install (TARGETS pthreadCE - DESTINATION ${CMAKE_INSTALL_LIBDIR} - COMPONENT Runtime - EXPORT PTHREADS4W - LIBRARY - DESTINATION ${CMAKE_INSTALL_LIBDIR} - PUBLIC_HEADER - COMPONENT Development - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) - endif(PTHREADS4W_BUILD_SHARED) - - if(PTHREADS4W_BUILD_STATIC) - add_library (pthreadCE-static STATIC - ${PTHREAD_SOURCES} - ${PTHREAD_HEADERS}) - - add_library (Threads::CEStatic ALIAS pthreadCE-static) - - target_include_directories (pthreadCE-static - INTERFACE $ - PUBLIC $) - - set_target_properties (pthreadCE-static - PROPERTIES - OUTPUT_NAME libpthreadCE${PTHREADS4W_VERSION_MAJOR}s - EXPORT_NAME Threads::CEStatic - VERSION ${PTHREADS4W_VERSION} - SOVERSION ${PTHREADS4W_VERSION_MAJOR} - PUBLIC_HEADER "${PTHREAD_HEADERS}") - - target_compile_definitions (pthreadCE-static - PUBLIC CLEANUP=__PTW32_CLEANUP_CXX - PRIVATE - __PTW32_BUILD_INLINED - __PTW32_STATIC_LIB - HAVE_CONFIG_H) - - target_compile_options (pthreadCE-static - PRIVATE - "/EHs" - "/TP") - - install (TARGETS pthreadCE-static - COMPONENT Development - DESTINATION ${CMAKE_INSTALL_LIBDIR} - EXPORT PTHREADS4W - LIBRARY - DESTINATION ${CMAKE_INSTALL_LIBDIR} - PUBLIC_HEADER - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) - endif(PTHREADS4W_BUILD_STATIC) + ${PTHREADS4W_SOURCE_DIR}/_ptw32.h + ${PTHREADS4W_SOURCE_DIR}/pthread.h + ${PTHREADS4W_SOURCE_DIR}/sched.h) + +#set_source_files_properties(${PTHREAD_SOURCES} +# PROPERTIES LANGUAGE C) + +#if (PTHREADS4W_BUILD_C) +# if(PTHREADS4W_BUILD_SHARED) +# add_library (pthreadC SHARED +# ${PTHREAD_SOURCES} +# ${PTHREAD_HEADERS}) +# +# add_library (Threads::Threads ALIAS pthreadC) +# add_library (Threads::Shared ALIAS pthreadC) +# +# target_include_directories (pthreadC +# INTERFACE $ +# PUBLIC $) +# +# set_target_properties (pthreadC +# PROPERTIES +# OUTPUT_NAME pthreadC${PTHREADS4W_VERSION_MAJOR} +# EXPORT_NAME Threads::Shared +# VERSION ${PTHREADS4W_VERSION} +# SOVERSION ${PTHREADS4W_VERSION_MAJOR} +# PUBLIC_HEADER "${PTHREAD_HEADERS}") +# +# target_compile_definitions (pthreadC +# PUBLIC CLEANUP=__PTW32_CLEANUP_C +# PRIVATE +# __PTW32_BUILD_INLINED +# HAVE_CONFIG_H) +# +# install (TARGETS pthreadC +# DESTINATION ${CMAKE_INSTALL_LIBDIR} +# COMPONENT Runtime +# EXPORT PTHREADS4W +# LIBRARY +# DESTINATION ${CMAKE_INSTALL_LIBDIR} +# PUBLIC_HEADER +# COMPONENT Development +# DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) +# endif(PTHREADS4W_BUILD_SHARED) +# +# if(PTHREADS4W_BUILD_STATIC) +# add_library (pthreadC-static STATIC +# ${PTHREAD_SOURCES} +# ${PTHREAD_HEADERS}) +# +# add_library (Threads::Static ALIAS pthreadC-static) +# +# target_include_directories (pthreadC-static +# INTERFACE $ +# PUBLIC $) +# +# set_target_properties (pthreadC-static +# PROPERTIES +# OUTPUT_NAME libpthreadC${PTHREADS4W_VERSION_MAJOR}s +# EXPORT_NAME Threads::Static +# VERSION ${PTHREADS4W_VERSION} +# SOVERSION ${PTHREADS4W_VERSION_MAJOR} +# PUBLIC_HEADER "${PTHREAD_HEADERS}") +# +# target_compile_definitions (pthreadC-static +# PUBLIC CLEANUP=__PTW32_CLEANUP_C +# PRIVATE +# __PTW32_BUILD_INLINED +# __PTW32_STATIC_LIB +# HAVE_CONFIG_H) +# +# install (TARGETS pthreadC-static +# COMPONENT Development +# DESTINATION ${CMAKE_INSTALL_LIBDIR} +# EXPORT PTHREADS4W +# LIBRARY +# DESTINATION ${CMAKE_INSTALL_LIBDIR} +# PUBLIC_HEADER +# DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) +# endif(PTHREADS4W_BUILD_STATIC) +#endif() +# +#if (PTHREADS4W_BUILD_CE) +# if(PTHREADS4W_BUILD_SHARED) +# add_library (pthreadCE SHARED +# ${PTHREAD_SOURCES} +# ${PTHREAD_HEADERS}) +# +# add_library (Threads::CEShared ALIAS pthreadCE) +# +# target_include_directories (pthreadCE +# INTERFACE $ +# PUBLIC $) +# +# set_target_properties (pthreadCE +# PROPERTIES +# OUTPUT_NAME pthreadCE${PTHREADS4W_VERSION_MAJOR} +# EXPORT_NAME Threads::CEShared +# VERSION ${PTHREADS4W_VERSION} +# SOVERSION ${PTHREADS4W_VERSION_MAJOR} +# PUBLIC_HEADER "${PTHREAD_HEADERS}") +# +# target_compile_definitions (pthreadCE +# PUBLIC __PTW32_CLEANUP_CXX +# PRIVATE +# HAVE_CONFIG_H) +# +# target_compile_options (pthreadCE +# PRIVATE "/EHa") +# +# set_source_files_properties(${PTHREAD_SOURCES} +# TARGET_DIRECTORY pthreadCE +# PROPERTIES LANGUAGE CXX) +# +# install (TARGETS pthreadCE +# DESTINATION ${CMAKE_INSTALL_LIBDIR} +# COMPONENT Runtime +# EXPORT PTHREADS4W +# LIBRARY +# DESTINATION ${CMAKE_INSTALL_LIBDIR} +# PUBLIC_HEADER +# COMPONENT Development +# DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) +# endif(PTHREADS4W_BUILD_SHARED) +# +# if(PTHREADS4W_BUILD_STATIC) +# add_library (pthreadCE-static STATIC +# ${PTHREAD_SOURCES} +# ${PTHREAD_HEADERS}) +# +# add_library (Threads::CEStatic ALIAS pthreadCE-static) +# +# target_include_directories (pthreadCE-static +# INTERFACE $ +# PUBLIC $) +# +# set_target_properties (pthreadCE-static +# PROPERTIES +# OUTPUT_NAME libpthreadCE${PTHREADS4W_VERSION_MAJOR}s +# EXPORT_NAME Threads::CEStatic +# VERSION ${PTHREADS4W_VERSION} +# SOVERSION ${PTHREADS4W_VERSION_MAJOR} +# PUBLIC_HEADER "${PTHREAD_HEADERS}") +# +# target_compile_definitions (pthreadCE-static +# PUBLIC __PTW32_CLEANUP_CXX +# PRIVATE +# __PTW32_STATIC_LIB +# HAVE_CONFIG_H) +# +# target_compile_options (pthreadCE-static +# PRIVATE "/EHa") +# +# set_source_files_properties(${PTHREAD_SOURCES} +# TARGET_DIRECTORY pthreadCE-static +# PROPERTIES LANGUAGE CXX) +# +# install (TARGETS pthreadCE-static +# COMPONENT Development +# DESTINATION ${CMAKE_INSTALL_LIBDIR} +# EXPORT PTHREADS4W +# LIBRARY +# DESTINATION ${CMAKE_INSTALL_LIBDIR} +# PUBLIC_HEADER +# DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) +# endif(PTHREADS4W_BUILD_STATIC) +#endif() + +#if (PTHREADS4W_BUILD_SE) +# if(PTHREADS4W_BUILD_SHARED) +# add_library (pthreadSE SHARED +# ${PTHREAD_SOURCES} +# ${PTHREAD_HEADERS}) +# +# add_library (Threads::SEShared ALIAS pthreadSE) +# +# target_include_directories (pthreadSE +# INTERFACE $ +# PUBLIC $) +# +# set_target_properties (pthreadSE +# PROPERTIES +# OUTPUT_NAME pthreadSE${PTHREADS4W_VERSION_MAJOR} +# EXPORT_NAME Threads::SEShared +# VERSION ${PTHREADS4W_VERSION} +# SOVERSION ${PTHREADS4W_VERSION_MAJOR} +# PUBLIC_HEADER "${PTHREAD_HEADERS}") +# +# target_compile_definitions (pthreadSE +# PUBLIC __PTW32_CLEANUP_SEH +# PRIVATE +# __PTW32_BUILD_INLINED +# HAVE_CONFIG_H) +# +# install (TARGETS pthreadSE +# DESTINATION ${CMAKE_INSTALL_LIBDIR} +# COMPONENT Runtime +# EXPORT PTHREADS4W +# LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} +# PUBLIC_HEADER +# COMPONENT Development +# DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) +# endif(PTHREADS4W_BUILD_SHARED) +# +# if(PTHREADS4W_BUILD_STATIC) +# add_library (pthreadSE-static STATIC +# ${PTHREAD_SOURCES} +# ${PTHREAD_HEADERS}) +# +# add_library (Threads::SEStatic ALIAS pthreadSE-static) +# +# target_include_directories (pthreadSE-static +# INTERFACE $ +# PUBLIC $) +# +# set_target_properties (pthreadSE-static +# PROPERTIES +# OUTPUT_NAME libpthreadSE${PTHREADS4W_VERSION_MAJOR}s +# EXPORT_NAME Threads::SEStatic +# VERSION ${PTHREADS4W_VERSION} +# SOVERSION ${PTHREADS4W_VERSION_MAJOR} +# PUBLIC_HEADER "${PTHREAD_HEADERS}") +# +# target_compile_definitions (pthreadSE-static +# PUBLIC __PTW32_CLEANUP_SEH +# PRIVATE +# __PTW32_BUILD_INLINED +# PRIVATE __PTW32_STATIC_LIB +# PRIVATE HAVE_CONFIG_H) +# +# install (TARGETS pthreadSE-static +# COMPONENT Development +# DESTINATION ${CMAKE_INSTALL_LIBDIR} +# EXPORT PTHREADS4W +# LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} +# PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) +# endif(PTHREADS4W_BUILD_STATIC) +#endif() + +if(PTHREADS4W_BUILD_C OR PTHREADS4W_BUILD_SE) + add_subdirectory(c-se/) endif() -if (PTHREADS4W_BUILD_SE) - if(PTHREADS4W_BUILD_SHARED) - add_library (pthreadSE SHARED - ${PTHREAD_SOURCES} - ${PTHREAD_HEADERS}) - - add_library (Threads::SEShared ALIAS pthreadSE) - - target_include_directories (pthreadSE - INTERFACE $ - PUBLIC $) - - set_target_properties (pthreadSE - PROPERTIES - OUTPUT_NAME pthreadSE${PTHREADS4W_VERSION_MAJOR} - EXPORT_NAME Threads::SEShared - VERSION ${PTHREADS4W_VERSION} - SOVERSION ${PTHREADS4W_VERSION_MAJOR} - PUBLIC_HEADER "${PTHREAD_HEADERS}") - - target_compile_definitions (pthreadSE - PUBLIC CLEANUP=__PTW32_CLEANUP_SEH - PRIVATE - __PTW32_BUILD_INLINED - HAVE_CONFIG_H) - - install (TARGETS pthreadSE - DESTINATION ${CMAKE_INSTALL_LIBDIR} - COMPONENT Runtime - EXPORT PTHREADS4W - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - PUBLIC_HEADER - COMPONENT Development - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) - endif(PTHREADS4W_BUILD_SHARED) - - if(PTHREADS4W_BUILD_STATIC) - add_library (pthreadSE-static STATIC - ${PTHREAD_SOURCES} - ${PTHREAD_HEADERS}) - - add_library (Threads::SEStatic ALIAS pthreadSE-static) - - target_include_directories (pthreadSE-static - INTERFACE $ - PUBLIC $) - - set_target_properties (pthreadSE-static - PROPERTIES - OUTPUT_NAME libpthreadSE${PTHREADS4W_VERSION_MAJOR}s - EXPORT_NAME Threads::SEStatic - VERSION ${PTHREADS4W_VERSION} - SOVERSION ${PTHREADS4W_VERSION_MAJOR} - PUBLIC_HEADER "${PTHREAD_HEADERS}") - - target_compile_definitions (pthreadSE-static - PUBLIC CLEANUP=__PTW32_CLEANUP_SEH - PRIVATE - __PTW32_BUILD_INLINED - PRIVATE __PTW32_STATIC_LIB - PRIVATE HAVE_CONFIG_H) - - install (TARGETS pthreadSE-static - COMPONENT Development - DESTINATION ${CMAKE_INSTALL_LIBDIR} - EXPORT PTHREADS4W - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) - endif(PTHREADS4W_BUILD_STATIC) +if(PTHREADS4W_BUILD_CE) + add_subdirectory(ce/) endif() include (CMakePackageConfigHelpers) diff --git a/c-se/CMakeLists.txt b/c-se/CMakeLists.txt new file mode 100644 index 0000000..034aee4 --- /dev/null +++ b/c-se/CMakeLists.txt @@ -0,0 +1,151 @@ +cmake_minimum_required (VERSION 3.11) + +project (PTHREADS4W_C_SE + VERSION 3.0.3.0 + LANGUAGES C) + +if (PTHREADS4W_BUILD_C) + if(PTHREADS4W_BUILD_SHARED) + add_library (pthreadC SHARED + ${PTHREAD_SOURCES} + ${PTHREAD_HEADERS}) + + add_library (Threads::Threads ALIAS pthreadC) + add_library (Threads::Shared ALIAS pthreadC) + + target_include_directories (pthreadC + INTERFACE $ + PUBLIC $) + + set_target_properties (pthreadC + PROPERTIES + OUTPUT_NAME pthreadC${PTHREADS4W_VERSION_MAJOR} + EXPORT_NAME Threads::Shared + VERSION ${PTHREADS4W_VERSION} + SOVERSION ${PTHREADS4W_VERSION_MAJOR} + PUBLIC_HEADER "${PTHREAD_HEADERS}") + + target_compile_definitions (pthreadC + PUBLIC CLEANUP=__PTW32_CLEANUP_C + PRIVATE + __PTW32_BUILD_INLINED + HAVE_CONFIG_H) + + install (TARGETS pthreadC + DESTINATION ${CMAKE_INSTALL_LIBDIR} + COMPONENT Runtime + EXPORT PTHREADS4W + LIBRARY + DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER + COMPONENT Development + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) + endif(PTHREADS4W_BUILD_SHARED) + + if(PTHREADS4W_BUILD_STATIC) + add_library (pthreadC-static STATIC + ${PTHREAD_SOURCES} + ${PTHREAD_HEADERS}) + + add_library (Threads::Static ALIAS pthreadC-static) + + target_include_directories (pthreadC-static + INTERFACE $ + PUBLIC $) + + set_target_properties (pthreadC-static + PROPERTIES + OUTPUT_NAME libpthreadC${PTHREADS4W_VERSION_MAJOR}s + EXPORT_NAME Threads::Static + VERSION ${PTHREADS4W_VERSION} + SOVERSION ${PTHREADS4W_VERSION_MAJOR} + PUBLIC_HEADER "${PTHREAD_HEADERS}") + + target_compile_definitions (pthreadC-static + PUBLIC CLEANUP=__PTW32_CLEANUP_C + PRIVATE + __PTW32_BUILD_INLINED + __PTW32_STATIC_LIB + HAVE_CONFIG_H) + + install (TARGETS pthreadC-static + COMPONENT Development + DESTINATION ${CMAKE_INSTALL_LIBDIR} + EXPORT PTHREADS4W + LIBRARY + DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) + endif(PTHREADS4W_BUILD_STATIC) +endif() + +if (PTHREADS4W_BUILD_SE) + if(PTHREADS4W_BUILD_SHARED) + add_library (pthreadSE SHARED + ${PTHREAD_SOURCES} + ${PTHREAD_HEADERS}) + + add_library (Threads::SEShared ALIAS pthreadSE) + + target_include_directories (pthreadSE + INTERFACE $ + PUBLIC $) + + set_target_properties (pthreadSE + PROPERTIES + OUTPUT_NAME pthreadSE${PTHREADS4W_VERSION_MAJOR} + EXPORT_NAME Threads::SEShared + VERSION ${PTHREADS4W_VERSION} + SOVERSION ${PTHREADS4W_VERSION_MAJOR} + PUBLIC_HEADER "${PTHREAD_HEADERS}") + + target_compile_definitions (pthreadSE + PUBLIC __PTW32_CLEANUP_SEH + PRIVATE + __PTW32_BUILD_INLINED + HAVE_CONFIG_H) + + install (TARGETS pthreadSE + DESTINATION ${CMAKE_INSTALL_LIBDIR} + COMPONENT Runtime + EXPORT PTHREADS4W + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER + COMPONENT Development + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) + endif(PTHREADS4W_BUILD_SHARED) + + if(PTHREADS4W_BUILD_STATIC) + add_library (pthreadSE-static STATIC + ${PTHREAD_SOURCES} + ${PTHREAD_HEADERS}) + + add_library (Threads::SEStatic ALIAS pthreadSE-static) + + target_include_directories (pthreadSE-static + INTERFACE $ + PUBLIC $) + + set_target_properties (pthreadSE-static + PROPERTIES + OUTPUT_NAME libpthreadSE${PTHREADS4W_VERSION_MAJOR}s + EXPORT_NAME Threads::SEStatic + VERSION ${PTHREADS4W_VERSION} + SOVERSION ${PTHREADS4W_VERSION_MAJOR} + PUBLIC_HEADER "${PTHREAD_HEADERS}") + + target_compile_definitions (pthreadSE-static + PUBLIC __PTW32_CLEANUP_SEH + PRIVATE + __PTW32_BUILD_INLINED + PRIVATE __PTW32_STATIC_LIB + PRIVATE HAVE_CONFIG_H) + + install (TARGETS pthreadSE-static + COMPONENT Development + DESTINATION ${CMAKE_INSTALL_LIBDIR} + EXPORT PTHREADS4W + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) + endif(PTHREADS4W_BUILD_STATIC) +endif() diff --git a/ce/CMakeLists.txt b/ce/CMakeLists.txt new file mode 100644 index 0000000..28e094a --- /dev/null +++ b/ce/CMakeLists.txt @@ -0,0 +1,93 @@ +cmake_minimum_required (VERSION 3.11) + +project (PTHREADS4W_CE + VERSION 3.0.3.0 + LANGUAGES CXX) + +string(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + +if(PTHREADS4W_BUILD_SHARED) + add_library (pthreadCE SHARED + ${PTHREAD_SOURCES} + ${PTHREAD_HEADERS}) + + add_library (Threads::CEShared ALIAS pthreadCE) + + target_include_directories (pthreadCE + INTERFACE $ + PUBLIC $) + + set_target_properties (pthreadCE + PROPERTIES + OUTPUT_NAME pthreadCE${PTHREADS4W_VERSION_MAJOR} + EXPORT_NAME Threads::CEShared + VERSION ${PTHREADS4W_VERSION} + SOVERSION ${PTHREADS4W_VERSION_MAJOR} + PUBLIC_HEADER "${PTHREAD_HEADERS}") + + target_compile_definitions (pthreadCE + PUBLIC __PTW32_CLEANUP_CXX + PRIVATE + HAVE_CONFIG_H) + + target_compile_options(pthreadCE + PRIVATE + $<$:/EHa>) + + set_source_files_properties(${PTHREAD_SOURCES} + TARGET_DIRECTORY pthreadCE + PROPERTIES LANGUAGE CXX) + + install (TARGETS pthreadCE + DESTINATION ${CMAKE_INSTALL_LIBDIR} + COMPONENT Runtime + EXPORT PTHREADS4W + LIBRARY + DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER + COMPONENT Development + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) +endif(PTHREADS4W_BUILD_SHARED) + +if(PTHREADS4W_BUILD_STATIC) + add_library (pthreadCE-static STATIC + ${PTHREAD_SOURCES} + ${PTHREAD_HEADERS}) + + add_library (Threads::CEStatic ALIAS pthreadCE-static) + + target_include_directories (pthreadCE-static + INTERFACE $ + PUBLIC $) + + set_target_properties (pthreadCE-static + PROPERTIES + OUTPUT_NAME libpthreadCE${PTHREADS4W_VERSION_MAJOR}s + EXPORT_NAME Threads::CEStatic + VERSION ${PTHREADS4W_VERSION} + SOVERSION ${PTHREADS4W_VERSION_MAJOR} + PUBLIC_HEADER "${PTHREAD_HEADERS}") + + target_compile_definitions (pthreadCE-static + PUBLIC __PTW32_CLEANUP_CXX + PRIVATE + __PTW32_STATIC_LIB + HAVE_CONFIG_H) + + target_compile_options(pthreadCE-static + PRIVATE + $<$:/EHa>) + + set_source_files_properties(${PTHREAD_SOURCES} + TARGET_DIRECTORY pthreadCE-static + PROPERTIES LANGUAGE CXX) + + install (TARGETS pthreadCE-static + COMPONENT Development + DESTINATION ${CMAKE_INSTALL_LIBDIR} + EXPORT PTHREADS4W + LIBRARY + DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) +endif(PTHREADS4W_BUILD_STATIC) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 4a6bdd1..d2d4cf6 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,5 +1,5 @@ function (PT4WCREATE_TEST TESTNAME) - set (OPTS NEEDS_LINK NEEDS_ROOT_INCL) + set (OPTS NEEDS_LINK NEEDS_OPENMP NEEDS_ROOT_INCL) set (OVA ADDITIONAL_SOURCE ADITIONAL_LIB) set (MVA DEPENDS) @@ -7,13 +7,26 @@ function (PT4WCREATE_TEST TESTNAME) foreach (SUFFIX ${SUFFIXES}) if(PTHREADS4W_BUILD_SHARED) + if(SUFFIX STREQUAL "CE") + set_source_files_properties( + ${PTHREADS4W_SOURCE_DIR}/tests/${TESTNAME}.c + ${PTHREADS4W_SOURCE_DIR}/tests/${PT4WCT_ADDITIONAL_SOURCE} + ${PTHREADS4W_SOURCE_DIR}/pthread.c + PROPERTIES LANGUAGE CXX) + endif() + add_executable (pthreads4w${SUFFIX}-${TESTNAME} - ${TESTNAME}.c - ${PT4WCT_ADDITIONAL_SOURCE}) + ${PTHREADS4W_SOURCE_DIR}/tests/${TESTNAME}.c + ${PTHREADS4W_SOURCE_DIR}/tests/${PT4WCT_ADDITIONAL_SOURCE}) + + if(SUFFIX STREQUAL "CE") + target_compile_options(pthreads4w${SUFFIX}-${TESTNAME} + PRIVATE $<$:/EHa>) + endif() if (PT4WCT_NEEDS_ROOT_INCL) target_include_directories (pthreads4w${SUFFIX}-${TESTNAME} - PRIVATE ${PROJECT_SOURCE_DIR}) + PRIVATE ${PTHREADS4W_SOURCE_DIR}) endif() add_test (NAME pthreads4w_${SUFFIX}-${TESTNAME} @@ -33,53 +46,91 @@ function (PT4WCREATE_TEST TESTNAME) if (PT4WCT_NEEDS_LINK) if(PTHREADS4W_BUILD_STATIC) add_executable (pthreads4w${SUFFIX}-${TESTNAME}-static - ${TESTNAME}.c - ${PT4WCT_ADDITIONAL_SOURCE}) + ${PTHREADS4W_SOURCE_DIR}/tests/${TESTNAME}.c + ${PTHREADS4W_SOURCE_DIR}/tests/${PT4WCT_ADDITIONAL_SOURCE}) add_test (NAME pthreads4w_${SUFFIX}-${TESTNAME}-static COMMAND pthreads4w${SUFFIX}-${TESTNAME}-static) - add_executable (pthreads4w${SUFFIX}-${TESTNAME}-static-nolib - ${TESTNAME}.c - ${PROJECT_SOURCE_DIR}/pthread.c - ${PT4WCT_ADDITIONAL_SOURCE}) + if(NOT ${SUFFIX} STREQUAL "SE") + add_executable (pthreads4w${SUFFIX}-${TESTNAME}-static-nolib + ${PTHREADS4W_SOURCE_DIR}/tests/${TESTNAME}.c + ${PTHREADS4W_SOURCE_DIR}/tests/${PT4WCT_ADDITIONAL_SOURCE} + ${PTHREADS4W_SOURCE_DIR}/pthread.c) - add_test (NAME pthreads4w_${SUFFIX}-${TESTNAME}-static-nolib - COMMAND pthreads4w${SUFFIX}-${TESTNAME}-static-nolib) + target_include_directories(pthreads4w${SUFFIX}-${TESTNAME}-static-nolib + PRIVATE ${PTHREADS4W_SOURCE_DIR}) - target_compile_definitions (pthreads4w${SUFFIX}-${TESTNAME}-static-nolib - PRIVATE - __PTW32_DLLPORT= - __PTW32_CONFIG_H - __PTW32_STATIC_LIB) + add_test (NAME pthreads4w_${SUFFIX}-${TESTNAME}-static-nolib + COMMAND pthreads4w${SUFFIX}-${TESTNAME}-static-nolib) + + target_compile_definitions (pthreads4w${SUFFIX}-${TESTNAME}-static-nolib + PRIVATE + __PTW32_DLLPORT= + __PTW32_CONFIG_H + __PTW32_STATIC_LIB + $<$:__PTW32_CLEANUP_C> + $<$:__PTW32_CLEANUP_CXX>) + target_include_directories (pthreads4w${SUFFIX}-${TESTNAME}-static-nolib + PRIVATE ${PROJECT_SOURCE_DIR}) - target_include_directories (pthreads4w${SUFFIX}-${TESTNAME}-static-nolib - PRIVATE ${PROJECT_SOURCE_DIR}) + target_link_libraries (pthreads4w${SUFFIX}-${TESTNAME}-static-nolib + PRIVATE ${PT4WCT_ADITIONAL_LIB}) + + set_tests_properties (pthreads4w_${SUFFIX}-${TESTNAME}-static-nolib + PROPERTIES + FIXTURES_SETUP ${TESTNAME}${SUFFIX}-static-nolib) + endif() + + if(SUFFIX STREQUAL "CE") + target_compile_definitions (pthreads4w${SUFFIX}-${TESTNAME}-static-nolib + PRIVATE + __PtW32NoCatchWarn) + target_compile_definitions (pthreads4w${SUFFIX}-${TESTNAME}-static + PRIVATE + __PtW32NoCatchWarn) + + target_compile_options(pthreads4w${SUFFIX}-${TESTNAME}-static + PRIVATE $<$:/EHa>) + target_compile_options(pthreads4w${SUFFIX}-${TESTNAME}-static-nolib + PRIVATE $<$:/EHa>) + + set_source_files_properties(${TESTNAME}.c + TARGET_DIRECTORY pthreads4w${SUFFIX}-${TESTNAME}-static + PROPERTIES LANGUAGE CXX) + set_source_files_properties(${TESTNAME}.c + TARGET_DIRECTORY pthreads4w${SUFFIX}-${TESTNAME}-static-nolib + PROPERTIES LANGUAGE CXX) + if(PT4WCT_ADDITIONAL_SOURCE) + set_source_files_properties(${PT4WCT_ADDITIONAL_SOURCE} + TARGET_DIRECTORY pthreads4w${SUFFIX}-${TESTNAME}-static + PROPERTIES LANGUAGE CXX) + set_source_files_properties(${PT4WCT_ADDITIONAL_SOURCE} + TARGET_DIRECTORY pthreads4w${SUFFIX}-${TESTNAME}-static-nolib + PROPERTIES LANGUAGE CXX) + endif() + endif() target_link_libraries (pthreads4w${SUFFIX}-${TESTNAME}-static PRIVATE pthread${SUFFIX}-static ${PT4WCT_ADITIONAL_LIB}) - target_link_libraries (pthreads4w${SUFFIX}-${TESTNAME}-static-nolib - PRIVATE ${PT4WCT_ADITIONAL_LIB}) - set_tests_properties (pthreads4w_${SUFFIX}-${TESTNAME}-static PROPERTIES FIXTURES_SETUP ${TESTNAME}${SUFFIX}-static) - set_tests_properties (pthreads4w_${SUFFIX}-${TESTNAME}-static-nolib - PROPERTIES - FIXTURES_SETUP ${TESTNAME}${SUFFIX}-static-nolib) if (PT4WCT_DEPENDS) set_tests_properties (pthreads4w_${SUFFIX}-${TESTNAME}-static PROPERTIES FIXTURES_REQUIRED "${PT4WCT_DEPENDS}${SUFFIX}-static") - set_tests_properties (pthreads4w_${SUFFIX}-${TESTNAME}-static-nolib - PROPERTIES - FIXTURES_REQUIRED "${PT4WCT_DEPENDS}${SUFFIX}-static-nolib") + if(NOT ${SUFFIX} STREQUAL "SE") + set_tests_properties (pthreads4w_${SUFFIX}-${TESTNAME}-static-nolib + PROPERTIES + FIXTURES_REQUIRED "${PT4WCT_DEPENDS}${SUFFIX}-static-nolib") + endif() endif() endif(PTHREADS4W_BUILD_STATIC) @@ -89,612 +140,646 @@ function (PT4WCREATE_TEST TESTNAME) pthread${SUFFIX} ${PT4WCT_ADITIONAL_LIB}) + if(SUFFIX STREQUAL "CE") + target_compile_definitions (pthreads4w${SUFFIX}-${TESTNAME} + PRIVATE + __PtW32NoCatchWarn) + set_source_files_properties(${TESTNAME}.c + TARGET_DIRECTORY pthreads4w${SUFFIX}-${TESTNAME} + PROPERTIES LANGUAGE CXX) + if(PT4WCT_ADDITIONAL_SOURCE) + set_source_files_properties(${PT4WCT_ADDITIONAL_SOURCE} + TARGET_DIRECTORY pthreads4w${SUFFIX}-${TESTNAME} + PROPERTIES LANGUAGE CXX) + endif() + + set (_omp_lib OpenMP::OpenMP_CXX) + endif() + set_tests_properties (pthreads4w_${SUFFIX}-${TESTNAME} PROPERTIES ENVIRONMENT "PATH=$\;%PATH%") + else() + set (_omp_lib OpenMP::OpenMP_C) endif(PTHREADS4W_BUILD_SHARED) endif(PT4WCT_NEEDS_LINK) - endforeach() -endfunction() - -if (PTHREADS4W_BUILD_C) - list (APPEND SUFFIXES "C") -endif() - -if (PTHREADS4W_BUILD_CE) - list (APPEND SUFFIXES "CE") -endif() - -if (PTHREADS4W_BUILD_SE) - list (APPEND SUFFIXES "SE") -endif() - -PT4WCREATE_TEST (affinity1 NEEDS_LINK) -PT4WCREATE_TEST (affinity2 NEEDS_LINK) - -PT4WCREATE_TEST (affinity3 - NEEDS_LINK - DEPENDS self1) - -PT4WCREATE_TEST (affinity4 - NEEDS_LINK - DEPENDS self1) - -PT4WCREATE_TEST (affinity5 - NEEDS_LINK - DEPENDS join0 self1) - -PT4WCREATE_TEST (affinity6 - NEEDS_LINK - DEPENDS join0 self1) - -PT4WCREATE_TEST (barrier1 NEEDS_LINK) -PT4WCREATE_TEST (barrier2 - NEEDS_LINK - DEPENDS barrier1) + if(PT4WCT_NEEDS_OPENMP) + if(PTHREADS4W_BUILD_SHARED) + target_link_libraries(pthreads4w${SUFFIX}-${TESTNAME} + PRIVATE ${_omp_lib}) + endif() -PT4WCREATE_TEST (barrier3 - NEEDS_LINK - DEPENDS barrier1 join0) + if(PTHREADS4W_BUILD_STATIC) + target_link_libraries(pthreads4w${SUFFIX}-${TESTNAME}-static + PRIVATE ${_omp_lib}) + if(NOT ${SUFFIX} STREQUAL "SE") + target_link_libraries(pthreads4w${SUFFIX}-${TESTNAME}-static-nolib + PRIVATE ${_omp_lib}) + endif() + endif() + endif() + endforeach() +endfunction() -PT4WCREATE_TEST (barrier4 - NEEDS_LINK - DEPENDS barrier1 join0 mutex1) +macro(PT4W_make_tests) + PT4WCREATE_TEST (affinity1 NEEDS_LINK) + PT4WCREATE_TEST (affinity2 NEEDS_LINK) -PT4WCREATE_TEST (barrier5 - NEEDS_LINK - DEPENDS barrier1 join0) + PT4WCREATE_TEST (affinity3 + NEEDS_LINK + DEPENDS self1) -PT4WCREATE_TEST (barrier6 - NEEDS_LINK - DEPENDS barrier1 join0 mutex1) + PT4WCREATE_TEST (affinity4 + NEEDS_LINK + DEPENDS self1) -PT4WCREATE_TEST (benchtest1 - NEEDS_LINK - ADDITIONAL_SOURCE benchlib.c - DEPENDS mutex5) + PT4WCREATE_TEST (affinity5 + NEEDS_LINK + DEPENDS join0 self1) -PT4WCREATE_TEST (benchtest2 - NEEDS_LINK - ADDITIONAL_SOURCE benchlib.c - DEPENDS join0 mutex5) + PT4WCREATE_TEST (affinity6 + NEEDS_LINK + DEPENDS join0 self1) -PT4WCREATE_TEST (benchtest3 - NEEDS_LINK - ADDITIONAL_SOURCE benchlib.c - DEPENDS join0 mutex3 mutex5) + PT4WCREATE_TEST (barrier1 NEEDS_LINK) -PT4WCREATE_TEST (benchtest4 - NEEDS_LINK - ADDITIONAL_SOURCE benchlib.c - DEPENDS mutex3 mutex5) + PT4WCREATE_TEST (barrier2 + NEEDS_LINK + DEPENDS barrier1) -PT4WCREATE_TEST (benchtest5 - NEEDS_LINK - DEPENDS semaphore5) + PT4WCREATE_TEST (barrier3 + NEEDS_LINK + DEPENDS barrier1 join0) -PT4WCREATE_TEST (cancel1 - NEEDS_LINK - DEPENDS create1 self1) + PT4WCREATE_TEST (barrier4 + NEEDS_LINK + DEPENDS barrier1 join0 mutex1) -PT4WCREATE_TEST (cancel3 - NEEDS_LINK - DEPENDS cancel1 join0 mutex1) + PT4WCREATE_TEST (barrier5 + NEEDS_LINK + DEPENDS barrier1 join0) -#- quserex.dll and alertdrv.sys are not available. + PT4WCREATE_TEST (barrier6 + NEEDS_LINK + DEPENDS barrier1 join0 mutex1) -PT4WCREATE_TEST (cancel4 - NEEDS_LINK - DEPENDS cancel3) + PT4WCREATE_TEST (benchtest1 + NEEDS_LINK + ADDITIONAL_SOURCE benchlib.c + DEPENDS mutex5) -PT4WCREATE_TEST (cancel5 - NEEDS_LINK - DEPENDS cancel3) + PT4WCREATE_TEST (benchtest2 + NEEDS_LINK + ADDITIONAL_SOURCE benchlib.c + DEPENDS join0 mutex5) -PT4WCREATE_TEST (cancel6a - NEEDS_LINK - DEPENDS cancel3) + PT4WCREATE_TEST (benchtest3 + NEEDS_LINK + ADDITIONAL_SOURCE benchlib.c + DEPENDS join0 mutex3 mutex5) -PT4WCREATE_TEST (cancel6d - NEEDS_LINK - DEPENDS cancel3) + PT4WCREATE_TEST (benchtest4 + NEEDS_LINK + ADDITIONAL_SOURCE benchlib.c + DEPENDS mutex3 mutex5) -PT4WCREATE_TEST (cancel7 - NEEDS_LINK - DEPENDS cancel3 kill1) + PT4WCREATE_TEST (benchtest5 + NEEDS_LINK + DEPENDS semaphore5) -PT4WCREATE_TEST (cancel8 - NEEDS_LINK - DEPENDS cleanup0 condvar4 kill1) + PT4WCREATE_TEST (cancel1 + NEEDS_LINK + DEPENDS create1 self1) -PT4WCREATE_TEST (cancel9 - NEEDS_LINK - ADITIONAL_LIB ws2_32 - DEPENDS cancel3) + PT4WCREATE_TEST (cancel3 + NEEDS_LINK + DEPENDS cancel1 join0 mutex1) -PT4WCREATE_TEST (cleanup0 - NEEDS_LINK - DEPENDS cancel3) + PT4WCREATE_TEST (cancel4 + NEEDS_LINK + DEPENDS cancel3) -PT4WCREATE_TEST (cleanup1 - NEEDS_LINK - DEPENDS cleanup0) + PT4WCREATE_TEST (cancel5 + NEEDS_LINK + DEPENDS cancel3) -PT4WCREATE_TEST (cleanup2 - NEEDS_LINK - DEPENDS cleanup0) + PT4WCREATE_TEST (cancel6a + NEEDS_LINK + DEPENDS cancel3) -PT4WCREATE_TEST (cleanup3 - NEEDS_LINK - DEPENDS cleanup0) + PT4WCREATE_TEST (cancel6d + NEEDS_LINK + DEPENDS cancel3) -PT4WCREATE_TEST (condvar1 NEEDS_LINK) + PT4WCREATE_TEST (cancel7 + NEEDS_LINK + DEPENDS cancel3 kill1) -PT4WCREATE_TEST (condvar1_1 - NEEDS_LINK - DEPENDS condvar1) + PT4WCREATE_TEST (cancel8 + NEEDS_LINK + DEPENDS cleanup0 condvar4 kill1) -PT4WCREATE_TEST (condvar1_2 - NEEDS_LINK - DEPENDS condvar1 join0) + PT4WCREATE_TEST (cancel9 + NEEDS_LINK + ADITIONAL_LIB ws2_32 + DEPENDS cancel3) -PT4WCREATE_TEST (condvar2 - NEEDS_LINK - DEPENDS condvar1 mutex1) + PT4WCREATE_TEST (cleanup0 + NEEDS_LINK + DEPENDS cancel3) -PT4WCREATE_TEST (condvar2_1 - NEEDS_LINK - DEPENDS condvar2 join0) + PT4WCREATE_TEST (cleanup1 + NEEDS_LINK + DEPENDS cleanup0) -PT4WCREATE_TEST (condvar3 - NEEDS_LINK - DEPENDS condvar2 join0 self1) + PT4WCREATE_TEST (cleanup2 + NEEDS_LINK + DEPENDS cleanup0) -PT4WCREATE_TEST (condvar3_1 - NEEDS_LINK - DEPENDS condvar3) + PT4WCREATE_TEST (cleanup3 + NEEDS_LINK + DEPENDS cleanup0) -PT4WCREATE_TEST (condvar3_2 - NEEDS_LINK - DEPENDS condvar5) + PT4WCREATE_TEST (condvar1 NEEDS_LINK) -PT4WCREATE_TEST (condvar3_3 - NEEDS_LINK - DEPENDS condvar3) + PT4WCREATE_TEST (condvar1_1 + NEEDS_LINK + DEPENDS condvar1) -PT4WCREATE_TEST (condvar4 - NEEDS_LINK - DEPENDS condvar3) + PT4WCREATE_TEST (condvar1_2 + NEEDS_LINK + DEPENDS condvar1 join0) -PT4WCREATE_TEST (condvar5 - NEEDS_LINK - DEPENDS condvar4) + PT4WCREATE_TEST (condvar2 + NEEDS_LINK + DEPENDS condvar1 mutex1) -PT4WCREATE_TEST (condvar6 - NEEDS_LINK - DEPENDS condvar5) + PT4WCREATE_TEST (condvar2_1 + NEEDS_LINK + DEPENDS condvar2 join0) + + PT4WCREATE_TEST (condvar3 + NEEDS_LINK + DEPENDS condvar2 join0 self1) + + PT4WCREATE_TEST (condvar3_1 + NEEDS_LINK + DEPENDS condvar3) + + PT4WCREATE_TEST (condvar3_2 + NEEDS_LINK + DEPENDS condvar5) + + PT4WCREATE_TEST (condvar3_3 + NEEDS_LINK + DEPENDS condvar3) + + PT4WCREATE_TEST (condvar4 + NEEDS_LINK + DEPENDS condvar3) -PT4WCREATE_TEST (condvar7 - NEEDS_LINK - DEPENDS condvar5) + PT4WCREATE_TEST (condvar5 + NEEDS_LINK + DEPENDS condvar4) -PT4WCREATE_TEST (condvar8 - NEEDS_LINK - DEPENDS condvar5) + PT4WCREATE_TEST (condvar6 + NEEDS_LINK + DEPENDS condvar5) -PT4WCREATE_TEST (condvar9 - NEEDS_LINK - DEPENDS condvar5) + PT4WCREATE_TEST (condvar7 + NEEDS_LINK + DEPENDS condvar5) -PT4WCREATE_TEST (context1 - NEEDS_LINK - DEPENDS create1 exit1) + PT4WCREATE_TEST (condvar8 + NEEDS_LINK + DEPENDS condvar5) -PT4WCREATE_TEST (count1 - NEEDS_LINK - DEPENDS join0 mutex1) + PT4WCREATE_TEST (condvar9 + NEEDS_LINK + DEPENDS condvar5) -PT4WCREATE_TEST (create1 NEEDS_LINK) + PT4WCREATE_TEST (context1 + NEEDS_LINK + DEPENDS create1 exit1) -PT4WCREATE_TEST (create2 - NEEDS_LINK - DEPENDS join0) + PT4WCREATE_TEST (count1 + NEEDS_LINK + DEPENDS join0 mutex1) -PT4WCREATE_TEST (create3 - NEEDS_LINK - DEPENDS create2) + PT4WCREATE_TEST (create1 NEEDS_LINK) + + PT4WCREATE_TEST (create2 + NEEDS_LINK + DEPENDS join0) + + PT4WCREATE_TEST (create3 + NEEDS_LINK + DEPENDS create2) + + PT4WCREATE_TEST (delay1 NEEDS_LINK) -PT4WCREATE_TEST (delay1 NEEDS_LINK) + PT4WCREATE_TEST (delay2 + NEEDS_LINK + DEPENDS cleanup0 delay1) -PT4WCREATE_TEST (delay2 - NEEDS_LINK - DEPENDS cleanup0 delay1) + PT4WCREATE_TEST (detach1 + NEEDS_LINK + DEPENDS create1 exit1 kill1) -PT4WCREATE_TEST (detach1 - NEEDS_LINK - DEPENDS create1 exit1 kill1) + PT4WCREATE_TEST (equal0 + NEEDS_LINK + DEPENDS self1) -PT4WCREATE_TEST (equal0 - NEEDS_LINK - DEPENDS self1) + PT4WCREATE_TEST (equal1 + NEEDS_LINK + DEPENDS create1 equal0) -PT4WCREATE_TEST (equal1 - NEEDS_LINK - DEPENDS create1 equal0) + PT4WCREATE_TEST (errno0 + NEEDS_LINK + DEPENDS semaphore5) -PT4WCREATE_TEST (errno0 - NEEDS_LINK - DEPENDS semaphore5) + PT4WCREATE_TEST (errno1 + NEEDS_LINK + DEPENDS create1 mutex1 self1) -PT4WCREATE_TEST (errno1 - NEEDS_LINK - DEPENDS create1 mutex1 self1) + PT4WCREATE_TEST (exception1 + NEEDS_LINK + DEPENDS cancel3 self1) -PT4WCREATE_TEST (exception1 - NEEDS_LINK - DEPENDS cancel3 self1) + PT4WCREATE_TEST (exception2 + NEEDS_LINK + DEPENDS exception1) -PT4WCREATE_TEST (exception2 - NEEDS_LINK - DEPENDS exception1) +if("${SUFFIXES}" STREQUAL "CE") + PT4WCREATE_TEST (exception3 + NEEDS_LINK + NEEDS_ROOT_INCL + DEPENDS exception1 exit1 mutex5) +else() + PT4WCREATE_TEST (exception3 + NEEDS_ROOT_INCL + DEPENDS exception1 exit1 mutex5) +endif() -PT4WCREATE_TEST (exception3 - NEEDS_ROOT_INCL - DEPENDS exception1 exit1 mutex5) + PT4WCREATE_TEST (exception3_0 + NEEDS_ROOT_INCL + DEPENDS exception3) -PT4WCREATE_TEST (exception3_0 - NEEDS_ROOT_INCL - DEPENDS exception3) + PT4WCREATE_TEST (exit1 NEEDS_LINK) -PT4WCREATE_TEST (exit1 NEEDS_LINK) + PT4WCREATE_TEST (exit2 + NEEDS_LINK + DEPENDS create1 exit1) -PT4WCREATE_TEST (exit2 - NEEDS_LINK - DEPENDS create1 exit1) + PT4WCREATE_TEST (exit3 + NEEDS_LINK + DEPENDS create1 exit1) -PT4WCREATE_TEST (exit3 - NEEDS_LINK - DEPENDS create1 exit1) + PT4WCREATE_TEST (exit4 + NEEDS_LINK + DEPENDS cancel3 exit1) -PT4WCREATE_TEST (exit4 - NEEDS_LINK - DEPENDS cancel3 exit1) + PT4WCREATE_TEST (exit5 + NEEDS_LINK + DEPENDS cancel3 exit1 kill1) -PT4WCREATE_TEST (exit5 - NEEDS_LINK - DEPENDS cancel3 exit1 kill1) + PT4WCREATE_TEST (exit6 NEEDS_LINK) -PT4WCREATE_TEST (exit6 NEEDS_LINK) + PT4WCREATE_TEST (eyal1 + NEEDS_LINK + DEPENDS join0 mutex3) -PT4WCREATE_TEST (eyal1 - NEEDS_LINK - DEPENDS join0 mutex3) + PT4WCREATE_TEST (inherit1 + NEEDS_LINK + DEPENDS join0 priority1) -PT4WCREATE_TEST (inherit1 - NEEDS_LINK - DEPENDS join0 priority1) + PT4WCREATE_TEST (join0 + NEEDS_LINK + DEPENDS create1 exit1) -PT4WCREATE_TEST (join0 - NEEDS_LINK - DEPENDS create1 exit1) + PT4WCREATE_TEST (join1 + NEEDS_LINK + DEPENDS join0) -PT4WCREATE_TEST (join1 - NEEDS_LINK - DEPENDS join0) + PT4WCREATE_TEST (join2 + NEEDS_LINK + DEPENDS join0) -PT4WCREATE_TEST (join2 - NEEDS_LINK - DEPENDS join0) + PT4WCREATE_TEST (join3 + NEEDS_LINK + DEPENDS join0) -PT4WCREATE_TEST (join3 - NEEDS_LINK - DEPENDS join0) + PT4WCREATE_TEST (join4 + NEEDS_LINK + DEPENDS create1) -PT4WCREATE_TEST (join4 - NEEDS_LINK - DEPENDS create1) + PT4WCREATE_TEST (kill1 + NEEDS_LINK + DEPENDS self1) -PT4WCREATE_TEST (kill1 - NEEDS_LINK - DEPENDS self1) + PT4WCREATE_TEST (mutex1 NEEDS_LINK) -PT4WCREATE_TEST (mutex1 NEEDS_LINK) + PT4WCREATE_TEST (mutex1e + NEEDS_LINK + DEPENDS mutex1 mutex5) -PT4WCREATE_TEST (mutex1e - NEEDS_LINK - DEPENDS mutex1 mutex5) + PT4WCREATE_TEST (mutex1n + NEEDS_LINK + DEPENDS mutex1 mutex5) -PT4WCREATE_TEST (mutex1n - NEEDS_LINK - DEPENDS mutex1 mutex5) + PT4WCREATE_TEST (mutex1r + NEEDS_LINK + DEPENDS mutex1 mutex5) -PT4WCREATE_TEST (mutex1r - NEEDS_LINK - DEPENDS mutex1 mutex5) + PT4WCREATE_TEST (mutex2 + NEEDS_LINK + DEPENDS mutex1) -PT4WCREATE_TEST (mutex2 - NEEDS_LINK - DEPENDS mutex1) + PT4WCREATE_TEST (mutex2e + NEEDS_LINK + DEPENDS mutex1) -PT4WCREATE_TEST (mutex2e - NEEDS_LINK - DEPENDS mutex1) + PT4WCREATE_TEST (mutex2r + NEEDS_LINK + DEPENDS mutex1) -PT4WCREATE_TEST (mutex2r - NEEDS_LINK - DEPENDS mutex1) + PT4WCREATE_TEST (mutex3 + NEEDS_LINK + DEPENDS join0 mutex1) -PT4WCREATE_TEST (mutex3 - NEEDS_LINK - DEPENDS join0 mutex1) + PT4WCREATE_TEST (mutex3e + NEEDS_LINK + DEPENDS join0 mutex3) -PT4WCREATE_TEST (mutex3e - NEEDS_LINK - DEPENDS join0 mutex3) + PT4WCREATE_TEST (mutex3r + NEEDS_LINK + DEPENDS join0 mutex3) -PT4WCREATE_TEST (mutex3r - NEEDS_LINK - DEPENDS join0 mutex3) + PT4WCREATE_TEST (mutex4 + NEEDS_LINK + DEPENDS join0 mutex3 mutex5) -PT4WCREATE_TEST (mutex4 - NEEDS_LINK - DEPENDS join0 mutex3 mutex5) + PT4WCREATE_TEST (mutex5 NEEDS_LINK) -PT4WCREATE_TEST (mutex5 NEEDS_LINK) + PT4WCREATE_TEST (mutex6 + NEEDS_LINK + DEPENDS create1 mutex3) -PT4WCREATE_TEST (mutex6 - NEEDS_LINK - DEPENDS create1 mutex3) + PT4WCREATE_TEST (mutex6e + NEEDS_LINK + DEPENDS join0 mutex1 mutex5) -PT4WCREATE_TEST (mutex6e - NEEDS_LINK - DEPENDS join0 mutex1 mutex5) + PT4WCREATE_TEST (mutex6es + NEEDS_LINK + DEPENDS join0 mutex1 mutex5) -PT4WCREATE_TEST (mutex6es - NEEDS_LINK - DEPENDS join0 mutex1 mutex5) + PT4WCREATE_TEST (mutex6n + NEEDS_LINK + DEPENDS create1 mutex1 mutex5) -PT4WCREATE_TEST (mutex6n - NEEDS_LINK - DEPENDS create1 mutex1 mutex5) + PT4WCREATE_TEST (mutex6r + NEEDS_LINK + DEPENDS join0 mutex1 mutex5) -PT4WCREATE_TEST (mutex6r - NEEDS_LINK - DEPENDS join0 mutex1 mutex5) + PT4WCREATE_TEST (mutex6rs + NEEDS_LINK + DEPENDS join0 mutex1 mutex5) -PT4WCREATE_TEST (mutex6rs - NEEDS_LINK - DEPENDS join0 mutex1 mutex5) + PT4WCREATE_TEST (mutex6s + NEEDS_LINK + DEPENDS create3) -PT4WCREATE_TEST (mutex6s - NEEDS_LINK - DEPENDS create3) + PT4WCREATE_TEST (mutex7 + NEEDS_LINK + DEPENDS create1 mutex3) -PT4WCREATE_TEST (mutex7 - NEEDS_LINK - DEPENDS create1 mutex3) + PT4WCREATE_TEST (mutex7e + NEEDS_LINK + DEPENDS join0 mutex3 mutex5) -PT4WCREATE_TEST (mutex7e - NEEDS_LINK - DEPENDS join0 mutex3 mutex5) + PT4WCREATE_TEST (mutex7n + NEEDS_LINK + DEPENDS create1 mutex3 mutex5) -PT4WCREATE_TEST (mutex7n - NEEDS_LINK - DEPENDS create1 mutex3 mutex5) + PT4WCREATE_TEST (mutex7r + NEEDS_LINK + DEPENDS join0 mutex3 mutex5) -PT4WCREATE_TEST (mutex7r - NEEDS_LINK - DEPENDS join0 mutex3 mutex5) + PT4WCREATE_TEST (mutex8 + NEEDS_LINK + DEPENDS create1 mutex1) -PT4WCREATE_TEST (mutex8 - NEEDS_LINK - DEPENDS create1 mutex1) + PT4WCREATE_TEST (mutex8e + NEEDS_LINK + DEPENDS create1 mutex5 mutex8) -PT4WCREATE_TEST (mutex8e - NEEDS_LINK - DEPENDS create1 mutex5 mutex8) + PT4WCREATE_TEST (mutex8n + NEEDS_LINK + DEPENDS create1 mutex5 mutex8) -PT4WCREATE_TEST (mutex8n - NEEDS_LINK - DEPENDS create1 mutex5 mutex8) + PT4WCREATE_TEST (mutex8r + NEEDS_LINK + DEPENDS create1 mutex5 mutex8) -PT4WCREATE_TEST (mutex8r - NEEDS_LINK - DEPENDS create1 mutex5 mutex8) + PT4WCREATE_TEST (name_np1 + NEEDS_LINK + DEPENDS barrier1 join0 self1) -PT4WCREATE_TEST (name_np1 - NEEDS_LINK - DEPENDS barrier1 join0 self1) + PT4WCREATE_TEST (name_np2 + NEEDS_LINK + DEPENDS name_np1) -PT4WCREATE_TEST (name_np2 - NEEDS_LINK - DEPENDS name_np1) + PT4WCREATE_TEST (once1 + NEEDS_LINK + DEPENDS create1) -PT4WCREATE_TEST (once1 - NEEDS_LINK - DEPENDS create1) + PT4WCREATE_TEST (once2 + NEEDS_LINK + DEPENDS join0 once1) -PT4WCREATE_TEST (once2 - NEEDS_LINK - DEPENDS join0 once1) + PT4WCREATE_TEST (once3 + NEEDS_LINK + DEPENDS cancel3 once1 self1) -PT4WCREATE_TEST (once3 - NEEDS_LINK - DEPENDS cancel3 once1 self1) + PT4WCREATE_TEST (once4 + NEEDS_LINK + DEPENDS cleanup0 once1 priority1) -PT4WCREATE_TEST (once4 - NEEDS_LINK - DEPENDS cleanup0 once1 priority1) + find_package(OpenMP QUIET) -PT4WCREATE_TEST (openmp1 - NEEDS_LINK) + if(OpenMP_FOUND) + PT4WCREATE_TEST (openmp1 + NEEDS_LINK + NEEDS_OPENMP) + endif() -PT4WCREATE_TEST (priority1 - NEEDS_LINK - DEPENDS join0 self1) + PT4WCREATE_TEST (priority1 + NEEDS_LINK + DEPENDS join0 self1) -PT4WCREATE_TEST (priority2 - NEEDS_LINK - DEPENDS barrier1 inherit1 join0) + PT4WCREATE_TEST (priority2 + NEEDS_LINK + DEPENDS barrier1 inherit1 join0) -PT4WCREATE_TEST (reinit1 - NEEDS_LINK - DEPENDS join0 rwlock3 sequence1) + PT4WCREATE_TEST (reinit1 + NEEDS_LINK + DEPENDS join0 rwlock3 sequence1) -PT4WCREATE_TEST (reuse1 - NEEDS_LINK - DEPENDS equal0 join0) + PT4WCREATE_TEST (reuse1 + NEEDS_LINK + DEPENDS equal0 join0) -PT4WCREATE_TEST (reuse2 - NEEDS_LINK - DEPENDS create2) + PT4WCREATE_TEST (reuse2 + NEEDS_LINK + DEPENDS create2) -PT4WCREATE_TEST (robust1 - NEEDS_LINK - DEPENDS join0 mutex1 mutex5) + PT4WCREATE_TEST (robust1 + NEEDS_LINK + DEPENDS join0 mutex1 mutex5) -PT4WCREATE_TEST (robust2 - NEEDS_LINK - DEPENDS join0 mutex1 mutex5) + PT4WCREATE_TEST (robust2 + NEEDS_LINK + DEPENDS join0 mutex1 mutex5) -PT4WCREATE_TEST (robust3 - NEEDS_LINK - DEPENDS join0 mutex1 mutex5) + PT4WCREATE_TEST (robust3 + NEEDS_LINK + DEPENDS join0 mutex1 mutex5) -PT4WCREATE_TEST (robust4 - NEEDS_LINK - DEPENDS join0 mutex1 mutex5) + PT4WCREATE_TEST (robust4 + NEEDS_LINK + DEPENDS join0 mutex1 mutex5) -PT4WCREATE_TEST (robust5 - NEEDS_LINK - DEPENDS join0 mutex1 mutex5) + PT4WCREATE_TEST (robust5 + NEEDS_LINK + DEPENDS join0 mutex1 mutex5) -PT4WCREATE_TEST (rwlock1 NEEDS_LINK) + PT4WCREATE_TEST (rwlock1 NEEDS_LINK) -PT4WCREATE_TEST (rwlock2 - NEEDS_LINK - DEPENDS rwlock1) + PT4WCREATE_TEST (rwlock2 + NEEDS_LINK + DEPENDS rwlock1) -PT4WCREATE_TEST (rwlock2_t - NEEDS_LINK - DEPENDS rwlock2) + PT4WCREATE_TEST (rwlock2_t + NEEDS_LINK + DEPENDS rwlock2) -PT4WCREATE_TEST (rwlock3 - NEEDS_LINK - DEPENDS join0 rwlock2) + PT4WCREATE_TEST (rwlock3 + NEEDS_LINK + DEPENDS join0 rwlock2) -PT4WCREATE_TEST (rwlock3_t - NEEDS_LINK - DEPENDS create1 rwlock2) + PT4WCREATE_TEST (rwlock3_t + NEEDS_LINK + DEPENDS create1 rwlock2) -PT4WCREATE_TEST (rwlock4 - NEEDS_LINK - DEPENDS join0 rwlock2) + PT4WCREATE_TEST (rwlock4 + NEEDS_LINK + DEPENDS join0 rwlock2) -PT4WCREATE_TEST (rwlock4_t - NEEDS_LINK - DEPENDS create1 rwlock2_t) + PT4WCREATE_TEST (rwlock4_t + NEEDS_LINK + DEPENDS create1 rwlock2_t) -PT4WCREATE_TEST (rwlock5 - NEEDS_LINK - DEPENDS join0 rwlock2) + PT4WCREATE_TEST (rwlock5 + NEEDS_LINK + DEPENDS join0 rwlock2) -PT4WCREATE_TEST (rwlock5_t - NEEDS_LINK - DEPENDS create1 rwlock2_t) + PT4WCREATE_TEST (rwlock5_t + NEEDS_LINK + DEPENDS create1 rwlock2_t) -PT4WCREATE_TEST (rwlock6 - NEEDS_LINK - DEPENDS join0 rwlock3) + PT4WCREATE_TEST (rwlock6 + NEEDS_LINK + DEPENDS join0 rwlock3) -PT4WCREATE_TEST (rwlock6_t - NEEDS_LINK - DEPENDS join0 rwlock2_t rwlock3) + PT4WCREATE_TEST (rwlock6_t + NEEDS_LINK + DEPENDS join0 rwlock2_t rwlock3) -PT4WCREATE_TEST (rwlock6_t2 - NEEDS_LINK - DEPENDS join0 rwlock2_t rwlock3_t) + PT4WCREATE_TEST (rwlock6_t2 + NEEDS_LINK + DEPENDS join0 rwlock2_t rwlock3_t) -PT4WCREATE_TEST (self1 - NEEDS_LINK - DEPENDS exit6) + PT4WCREATE_TEST (self1 + NEEDS_LINK + DEPENDS exit6) -PT4WCREATE_TEST (self2 - NEEDS_LINK - DEPENDS create1 equal0 exit6 self1) + PT4WCREATE_TEST (self2 + NEEDS_LINK + DEPENDS create1 equal0 exit6 self1) -PT4WCREATE_TEST (semaphore1 - NEEDS_LINK - DEPENDS join0) + PT4WCREATE_TEST (semaphore1 + NEEDS_LINK + DEPENDS join0) -PT4WCREATE_TEST (semaphore2 NEEDS_LINK) + PT4WCREATE_TEST (semaphore2 NEEDS_LINK) -PT4WCREATE_TEST (semaphore3 - NEEDS_LINK - DEPENDS join0 semaphore2) + PT4WCREATE_TEST (semaphore3 + NEEDS_LINK + DEPENDS join0 semaphore2) -PT4WCREATE_TEST (semaphore4 - NEEDS_LINK - DEPENDS cancel3 semaphore2) + PT4WCREATE_TEST (semaphore4 + NEEDS_LINK + DEPENDS cancel3 semaphore2) -PT4WCREATE_TEST (semaphore4t - NEEDS_LINK - DEPENDS cancel4 semaphore2) + PT4WCREATE_TEST (semaphore4t + NEEDS_LINK + DEPENDS cancel4 semaphore2) -PT4WCREATE_TEST (semaphore5 - NEEDS_LINK - DEPENDS join0) + PT4WCREATE_TEST (semaphore5 + NEEDS_LINK + DEPENDS join0) -PT4WCREATE_TEST (sequence1 - NEEDS_LINK - DEPENDS create2 self1) + PT4WCREATE_TEST (sequence1 + NEEDS_LINK + DEPENDS create2 self1) -PT4WCREATE_TEST (sizes - NEEDS_ROOT_INCL - DEPENDS once1) + PT4WCREATE_TEST (sizes + NEEDS_ROOT_INCL + DEPENDS once1) -PT4WCREATE_TEST (spin1 NEEDS_LINK) + PT4WCREATE_TEST (spin1 NEEDS_LINK) -PT4WCREATE_TEST (spin2 - NEEDS_LINK - DEPENDS join0 spin1) + PT4WCREATE_TEST (spin2 + NEEDS_LINK + DEPENDS join0 spin1) -PT4WCREATE_TEST (spin3 - NEEDS_LINK - DEPENDS join0 spin1) + PT4WCREATE_TEST (spin3 + NEEDS_LINK + DEPENDS join0 spin1) -PT4WCREATE_TEST (spin4 - NEEDS_LINK - DEPENDS join0 spin1) + PT4WCREATE_TEST (spin4 + NEEDS_LINK + DEPENDS join0 spin1) -PT4WCREATE_TEST (stress1 - NEEDS_LINK - DEPENDS barrier1 condvar4) + PT4WCREATE_TEST (stress1 + NEEDS_LINK + DEPENDS barrier1 condvar4) -PT4WCREATE_TEST (timeouts - NEEDS_LINK - DEPENDS condvar2 mutex5) + PT4WCREATE_TEST (timeouts + NEEDS_LINK + DEPENDS condvar2 mutex5) -PT4WCREATE_TEST (tsd1 - NEEDS_LINK - DEPENDS barrier1 exit6 join0 once1 self1) + PT4WCREATE_TEST (tsd1 + NEEDS_LINK + DEPENDS barrier1 exit6 join0 once1 self1) -PT4WCREATE_TEST (tsd2 - NEEDS_LINK - DEPENDS barrier1 exit6 join0 once1 self1) + PT4WCREATE_TEST (tsd2 + NEEDS_LINK + DEPENDS barrier1 exit6 join0 once1 self1) -PT4WCREATE_TEST (tsd3 - NEEDS_LINK - DEPENDS barrier1 exit6 join0 once1 self1) + PT4WCREATE_TEST (tsd3 + NEEDS_LINK + DEPENDS barrier1 exit6 join0 once1 self1) -PT4WCREATE_TEST (valid1 - NEEDS_LINK - DEPENDS join0 kill1) + PT4WCREATE_TEST (valid1 + NEEDS_LINK + DEPENDS join0 kill1) -PT4WCREATE_TEST (valid2 - NEEDS_LINK - DEPENDS kill1) + PT4WCREATE_TEST (valid2 + NEEDS_LINK + DEPENDS kill1) +endmacro() add_test( NAME pthreads4w_install @@ -706,125 +791,274 @@ set_tests_properties(pthreads4w_install PROPERTIES FIXTURES_SETUP pthreads4w_install) -file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test) -file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test) -file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/find_package_test) +set(GENERATOR ${CMAKE_GENERATOR_PLATFORM}) + +if(GENERATOR) + set(PLATFORM "-A ${GENERATOR}") +endif(GENERATOR) + +if (PTHREADS4W_BUILD_C OR PTHREADS4W_BUILD_SE) + add_subdirectory(c-se/) + + file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test_C-SE) + file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test_C-SE) + file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/find_package_test_C-SE) -configure_file( + configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/add_subdirectory_exclude_test.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test/CMakeLists.txt + ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test_C-SE/CMakeLists.txt @ONLY) -configure_file( + configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/add_subdirectory_test.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test/CMakeLists.txt + ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test_C-SE/CMakeLists.txt @ONLY) -configure_file( + configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/find_package_test.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/find_package_test/CMakeLists.txt + ${CMAKE_CURRENT_BINARY_DIR}/find_package_test_C-SE/CMakeLists.txt @ONLY) -set(GENERATOR ${CMAKE_GENERATOR_PLATFORM}) - -if(GENERATOR) - set(PLATFORM "-A ${GENERATOR}") -endif(GENERATOR) - # # add_subdirectory_exclude_test # -add_test( - NAME pthreads4w_add_subdirectory_exclude_configure - COMMAND - ${CMAKE_COMMAND} - ${PLATFORM} - -B${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test_build - -DCMAKE_BUILD_TYPE=$ - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} - -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/test_install - -G "${CMAKE_GENERATOR}" - -S${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test) - -add_test( - NAME pthreads4w_add_subdirectory_exclude_build - COMMAND ${CMAKE_COMMAND} --build . --config $ - WORKING_DIRECTORY - ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test_build) - -set_tests_properties( - pthreads4w_add_subdirectory_exclude_configure - PROPERTIES - FIXTURES_REQUIRED pthreads4w_install - FIXTURES_SETUP asx_config) + add_test( + NAME pthreads4w_add_subdirectory_exclude_configure_C-SE + COMMAND + ${CMAKE_COMMAND} + ${PLATFORM} + -B${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test_build_C-SE + -DCMAKE_BUILD_TYPE=$ + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} + -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/test_install + -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} + -DPTHREADS4W_BUILD_C=${PTHREADS4W_BUILD_C} + -DPTHREADS4W_BUILD_CE=OFF + -DPTHREADS4W_BUILD_SE=${PTHREADS4W_BUILD_S} + -G "${CMAKE_GENERATOR}" + -S${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test_C-SE) + + add_test( + NAME pthreads4w_add_subdirectory_exclude_build_C-SE + COMMAND ${CMAKE_COMMAND} --build . --config $ + WORKING_DIRECTORY + ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test_build_C-SE) -set_tests_properties( - pthreads4w_add_subdirectory_exclude_build + set_tests_properties( + pthreads4w_add_subdirectory_exclude_configure_C-SE PROPERTIES - FIXTURES_REQUIRED as_config - FIXTURES_SETUP asx_build) + FIXTURES_REQUIRED pthreads4w_install + FIXTURES_SETUP asx_config_c-se) + + set_tests_properties( + pthreads4w_add_subdirectory_exclude_build_C-SE + PROPERTIES + FIXTURES_REQUIRED asx_config_c-se + FIXTURES_SETUP asx_build_c-se) # # add_subdirectory_test # -add_test( - NAME pthreads4w_add_subdirectory_configure - COMMAND - ${CMAKE_COMMAND} - ${PLATFORM} - -B${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test_build - -DCMAKE_BUILD_TYPE=$ - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} - -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/test_install - -G "${CMAKE_GENERATOR}" - -S${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test) + add_test( + NAME pthreads4w_add_subdirectory_configure_C-SE + COMMAND + ${CMAKE_COMMAND} + ${PLATFORM} + -B${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test_build_C-SE + -DCMAKE_BUILD_TYPE=$ + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} + -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/test_install + -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} + -DPTHREADS4W_BUILD_C=${PTHREADS4W_BUILD_C} + -DPTHREADS4W_BUILD_CE=OFF + -DPTHREADS4W_BUILD_SE=${PTHREADS4W_BUILD_S} + -G "${CMAKE_GENERATOR}" + -S${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test_C-SE) + + add_test( + NAME pthreads4w_add_subdirectory_build_C-SE + COMMAND ${CMAKE_COMMAND} --build . --config $ + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test_build_C-SE) -add_test( - NAME pthreads4w_add_subdirectory_build - COMMAND ${CMAKE_COMMAND} --build . --config $ - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test_build) + set_tests_properties( + pthreads4w_add_subdirectory_configure_C-SE + PROPERTIES + FIXTURES_REQUIRED pthreads4w_install + FIXTURES_SETUP as_config_c-se) + + set_tests_properties( + pthreads4w_add_subdirectory_build_C-SE + PROPERTIES + FIXTURES_REQUIRED as_config_c-se + FIXTURES_SETUP as_build_c-se) -set_tests_properties( - pthreads4w_add_subdirectory_configure +# +# findpackage_test +# + add_test(NAME pthreads4w_find_package_configure_C-SE + COMMAND + ${CMAKE_COMMAND} + ${PLATFORM} + -B${CMAKE_CURRENT_BINARY_DIR}/findpackage_test_build_C-SE + -DCMAKE_BUILD_TYPE=$ + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} + -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/test_install + -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} + -DPTHREADS4W_BUILD_C=${PTHREADS4W_BUILD_C} + -DPTHREADS4W_BUILD_CE=OFF + -DPTHREADS4W_BUILD_SE=${PTHREADS4W_BUILD_S} + -DPTHREADS4W_ROOT=${CMAKE_CURRENT_BINARY_DIR}/test_install + -G "${CMAKE_GENERATOR}" + -S${CMAKE_CURRENT_BINARY_DIR}/find_package_test_C-SE) + + add_test( + NAME pthreads4w_find_package_build_C-SE + COMMAND ${CMAKE_COMMAND} --build . --config $ + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/findpackage_test_build_C-SE) + + set_tests_properties(pthreads4w_find_package_configure_C-SE PROPERTIES FIXTURES_REQUIRED pthreads4w_install - FIXTURES_SETUP as_config) + FIXTURES_SETUP fp_config_c-se) -set_tests_properties( - pthreads4w_add_subdirectory_build + set_tests_properties(pthreads4w_find_package_build_C-SE PROPERTIES - FIXTURES_REQUIRED as_config - FIXTURES_SETUP as_build) + FIXTURES_REQUIRED fp_config_c-se + FIXTURES_SETUP fp_build_c-se) +endif() + +if(PTHREADS4W_BUILD_CE) + add_subdirectory(ce/) + + file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test_CE) + file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test_CE) + file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/find_package_test_CE) + + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/add_subdirectory_exclude_test.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test_CE/CMakeLists.txt + @ONLY) + + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/add_subdirectory_test.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test_CE/CMakeLists.txt + @ONLY) + + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/find_package_test.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/find_package_test_CE/CMakeLists.txt + @ONLY) # -# findpackage_test +# add_subdirectory_exclude_test # -add_test(NAME pthreads4w_find_package_configure - COMMAND - ${CMAKE_COMMAND} - ${PLATFORM} - -B${CMAKE_CURRENT_BINARY_DIR}/findpackage_test_build - -DCMAKE_BUILD_TYPE=$ - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} - -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/test_install - -G "${CMAKE_GENERATOR}" - -S${CMAKE_CURRENT_BINARY_DIR}/find_package_test) + add_test( + NAME pthreads4w_add_subdirectory_exclude_configure_CE + COMMAND + ${CMAKE_COMMAND} + ${PLATFORM} + -B${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test_build_CE + -DCMAKE_BUILD_TYPE=$ + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} + -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/test_install + -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} + -DPTHREADS4W_BUILD_C=OFF + -DPTHREADS4W_BUILD_CE=${PTHREADS4W_BUILD_CE} + -DPTHREADS4W_BUILD_SE=OFF + -G "${CMAKE_GENERATOR}" + -S${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test_CE) + + add_test( + NAME pthreads4w_add_subdirectory_exclude_build_CE + COMMAND ${CMAKE_COMMAND} --build . --config $ + WORKING_DIRECTORY + ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test_build_CE) -add_test( - NAME pthreads4w_find_package_build + set_tests_properties( + pthreads4w_add_subdirectory_exclude_configure_CE + PROPERTIES + FIXTURES_REQUIRED pthreads4w_install + FIXTURES_SETUP asx_config_ce) + + set_tests_properties( + pthreads4w_add_subdirectory_exclude_build_CE + PROPERTIES + FIXTURES_REQUIRED asx_config_ce + FIXTURES_SETUP asx_build_ce) + +# +# add_subdirectory_test +# + add_test( + NAME pthreads4w_add_subdirectory_configure_CE + COMMAND + ${CMAKE_COMMAND} + ${PLATFORM} + -B${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test_build_CE + -DCMAKE_BUILD_TYPE=$ + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} + -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/test_install + -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} + -DPTHREADS4W_BUILD_C=OFF + -DPTHREADS4W_BUILD_CE=${PTHREADS4W_BUILD_CE} + -DPTHREADS4W_BUILD_SE=OFF + -G "${CMAKE_GENERATOR}" + -S${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test_CE) + + add_test( + NAME pthreads4w_add_subdirectory_build_CE COMMAND ${CMAKE_COMMAND} --build . --config $ - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/findpackage_test_build) + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test_build_CE) -set_tests_properties(pthreads4w_find_package_configure - PROPERTIES - FIXTURES_REQUIRED pthreads4w_install - FIXTURES_SETUP fp_config) + set_tests_properties( + pthreads4w_add_subdirectory_configure_CE + PROPERTIES + FIXTURES_REQUIRED pthreads4w_install + FIXTURES_SETUP as_config_ce) -set_tests_properties(pthreads4w_find_package_build - PROPERTIES - FIXTURES_REQUIRED fp_config - FIXTURES_SETUP fp_build) + set_tests_properties( + pthreads4w_add_subdirectory_build_CE + PROPERTIES + FIXTURES_REQUIRED as_config_ce + FIXTURES_SETUP as_build_ce) + +# +# findpackage_test +# + add_test(NAME pthreads4w_find_package_configure_CE + COMMAND + ${CMAKE_COMMAND} + ${PLATFORM} + -B${CMAKE_CURRENT_BINARY_DIR}/findpackage_test_build_CE + -DCMAKE_BUILD_TYPE=$ + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} + -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/test_install + -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} + -DPTHREADS4W_BUILD_C=OFF + -DPTHREADS4W_BUILD_CE=${PTHREADS4W_BUILD_CE} + -DPTHREADS4W_BUILD_SE=OFF + -DPTHREADS4W_ROOT=${CMAKE_CURRENT_BINARY_DIR}/test_install + -G "${CMAKE_GENERATOR}" + -S${CMAKE_CURRENT_BINARY_DIR}/find_package_test_CE) + + add_test( + NAME pthreads4w_find_package_build_CE + COMMAND ${CMAKE_COMMAND} --build . --config $ + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/findpackage_test_build_CE) + + set_tests_properties(pthreads4w_find_package_configure_CE + PROPERTIES + FIXTURES_REQUIRED pthreads4w_install + FIXTURES_SETUP fp_config_ce) + set_tests_properties(pthreads4w_find_package_build_CE + PROPERTIES + FIXTURES_REQUIRED fp_config_ce + FIXTURES_SETUP fp_build_ce) +endif() \ No newline at end of file diff --git a/tests/add_subdirectory_exclude_test.cmake.in b/tests/add_subdirectory_exclude_test.cmake.in index 7b7f7d5..17933af 100644 --- a/tests/add_subdirectory_exclude_test.cmake.in +++ b/tests/add_subdirectory_exclude_test.cmake.in @@ -1,13 +1,20 @@ cmake_minimum_required(VERSION 3.11...3.31) -project( - pt4w_add_subdirectory_exclude_test - LANGUAGES C - VERSION @PTHREADS4W_VERSION@) - -option(PTHREADS4W_BUILD_C "" @PTHREADS4W_BUILD_C@) -option(PTHREADS4W_BUILD_CE "" @PTHREADS4W_BUILD_CE@) -option(PTHREADS4W_BUILD_SE "" @PTHREADS4W_BUILD_SE@) +if(PTHREADS4W_BUILD_CE) + project( + pt4w_add_subdirectory_exclude_test + LANGUAGES CXX + VERSION @PTHREADS4W_VERSION@) + + set_source_files_properties(@PTHREADS4W_SOURCE_DIR@/tests/openmp1.c + PROPERTIES LANGUAGE CXX) +else() + project( + pt4w_add_subdirectory_exclude_test + LANGUAGES C + VERSION @PTHREADS4W_VERSION@) +endif() + option(PTHREADS4W_BUILD_TESTING "" OFF) option(PTHREADS4W_BUILD_SHARED "" @PTHREADS4W_BUILD_SHARED@) option(PTHREADS4W_BUILD_STATIC "" @PTHREADS4W_BUILD_STATIC@) diff --git a/tests/add_subdirectory_test.cmake.in b/tests/add_subdirectory_test.cmake.in index 9da9d6e..806b135 100644 --- a/tests/add_subdirectory_test.cmake.in +++ b/tests/add_subdirectory_test.cmake.in @@ -1,13 +1,20 @@ cmake_minimum_required(VERSION 3.11...3.31) -project( - pt4w_add_subdirectory_test - LANGUAGES C - VERSION @PTHREADS4W_VERSION@) - -option(PTHREADS4W_BUILD_C "" @PTHREADS4W_BUILD_C@) -option(PTHREADS4W_BUILD_CE "" @PTHREADS4W_BUILD_CE@) -option(PTHREADS4W_BUILD_SE "" @PTHREADS4W_BUILD_SE@) +if(PTHREADS4W_BUILD_CE) + project( + pt4w_add_subdirectory_test + LANGUAGES CXX + VERSION @PTHREADS4W_VERSION@) + + set_source_files_properties(@PTHREADS4W_SOURCE_DIR@/tests/openmp1.c + PROPERTIES LANGUAGE CXX) +else() + project( + pt4w_add_subdirectory_test + LANGUAGES C + VERSION @PTHREADS4W_VERSION@) +endif() + option(PTHREADS4W_BUILD_TESTING "" OFF) option(PTHREADS4W_BUILD_SHARED "" @PTHREADS4W_BUILD_SHARED@) option(PTHREADS4W_BUILD_STATIC "" @PTHREADS4W_BUILD_STATIC@) diff --git a/tests/c-se/CMakeLists.txt b/tests/c-se/CMakeLists.txt new file mode 100644 index 0000000..3739d0f --- /dev/null +++ b/tests/c-se/CMakeLists.txt @@ -0,0 +1,13 @@ +project (PTHREADS4W_C_SE-Tests + VERSION 3.0.3.0 + LANGUAGES C) + +if (PTHREADS4W_BUILD_C) + list (APPEND SUFFIXES "C") +endif() + +if (PTHREADS4W_BUILD_SE) + list (APPEND SUFFIXES "SE") +endif() + +PT4W_make_tests() \ No newline at end of file diff --git a/tests/ce/CMakeLists.txt b/tests/ce/CMakeLists.txt new file mode 100644 index 0000000..da1cb12 --- /dev/null +++ b/tests/ce/CMakeLists.txt @@ -0,0 +1,9 @@ +project (PTHREADS4W_C_SE-Tests + VERSION 3.0.3.0 + LANGUAGES CXX) + +string(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + +set(SUFFIXES "CE") + +PT4W_make_tests() \ No newline at end of file diff --git a/tests/find_package_test.cmake.in b/tests/find_package_test.cmake.in index fcea7b7..75f2cd3 100644 --- a/tests/find_package_test.cmake.in +++ b/tests/find_package_test.cmake.in @@ -1,14 +1,17 @@ cmake_minimum_required(VERSION 3.11...3.31) -project( - pt4w_add_find_package_test - LANGUAGES C - VERSION @PTHREADS4W_VERSION@) - -option(PTHREADS4W_BUILD_C "" @PTHREADS4W_BUILD_C@) -option(PTHREADS4W_BUILD_CE "" @PTHREADS4W_BUILD_CE@) -option(PTHREADS4W_BUILD_SE "" @PTHREADS4W_BUILD_SE@) -option(PTHREADS4W_BUILD_TESTING "" OFF) +if(PTHREADS4W_BUILD_CE) + project( + pt4w_find_package_test + LANGUAGES CXX + VERSION @PTHREADS4W_VERSION@) +else() + project( + pt4w_find_package_test + LANGUAGES C + VERSION @PTHREADS4W_VERSION@) +endif() + option(PTHREADS4W_BUILD_SHARED "" @PTHREADS4W_BUILD_SHARED@) option(PTHREADS4W_BUILD_STATIC "" @PTHREADS4W_BUILD_STATIC@) @@ -16,21 +19,37 @@ find_package(PTHREADS4W @PTHREADS4W_VERSION@ CONFIG REQUIRED) if(PTHREADS4W_BUILD_SHARED) if(PTHREADS4W_BUILD_C) - add_executable(test_affinity1C @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) - target_link_libraries(test_affinity1C Threads::Threads) + add_executable(test_openMP1C @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) + target_link_libraries(test_openMP1C Threads::Threads) + + target_compile_definitions (test_openMP1C + PRIVATE __PTW32_CLEANUP_C) + + add_executable(test_openMP1CS @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) + target_link_libraries(test_openMP1CS Threads::Shared) - add_executable(test_affinity1CS @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) - target_link_libraries(test_affinity1CS Threads::Shared) + target_compile_definitions (test_openMP1CS + PRIVATE __PTW32_CLEANUP_C) endif() if(PTHREADS4W_BUILD_CE) - add_executable(test_affinity1CE @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) - target_link_libraries(test_affinity1CE Threads::CEShared) + set_source_files_properties(@PTHREADS4W_SOURCE_DIR@/tests/openmp1.c + PROPERTIES + LANGUAGE CXX) + + add_executable(test_openMP1CE @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) + target_link_libraries(test_openMP1CE Threads::CEShared) + + target_compile_definitions (test_openMP1CE + PRIVATE __PTW32_CLEANUP_CXX>) endif() if(PTHREADS4W_BUILD_SE) - add_executable(test_affinity1SE @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) - target_link_libraries(test_affinity1SE Threads::SEShared) + add_executable(test_openMP1SE @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) + target_link_libraries(test_openMP1SE Threads::SEShared) + + target_compile_definitions (test_openMP1SE + PRIVATE __PTW32_CLEANUP_SEH) endif() endif(PTHREADS4W_BUILD_SHARED) From 076b84350a2a20acf76714ecb09dcb851648b75b Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sat, 23 May 2026 17:47:29 +0200 Subject: [PATCH 20/41] Expanded CI --- .github/workflows/ccpp.yml | 150 +++++++++++++++++++++++++++++++------ 1 file changed, 126 insertions(+), 24 deletions(-) diff --git a/.github/workflows/ccpp.yml b/.github/workflows/ccpp.yml index 24e3bcc..039479a 100644 --- a/.github/workflows/ccpp.yml +++ b/.github/workflows/ccpp.yml @@ -1,34 +1,136 @@ -name: Build +name: CI -on: [push, pull_request] +on: + push: + pull_request: jobs: - windows: - name: Build (${{ matrix.os }} - ${{ matrix.type }}) - runs-on: ${{ matrix.os }} + + msvc: + name: msvc-${{ matrix.variant }}-${{ matrix.link }} + runs-on: windows-latest strategy: + fail-fast: false matrix: - os: [windows-2022, windows-2019] - type: [Debug, Release] - exception: [No-Exceptions, C++-Exceptions, structured-Exceptions] + variant: [C, SE, CE] + link: [static, shared] + + steps: + - uses: actions/checkout@v4 + - uses: microsoft/setup-msbuild@v1 + + - name: Configure + run: > + cmake -S . -B build + -G "Visual Studio 17 2022" + -DPTHREADS4W_BUILD_${{ matrix.variant }}=ON + -DPTHREADS4W_BUILD_SHARED=${{ matrix.link == 'shared' && 'ON' || 'OFF' }} + + - name: Build + run: cmake --build build --config Release + + - name: Test + run: ctest --test-dir build -C Release --output-on-failure + + msys: + name: msys-${{ matrix.sys }}-${{ matrix.variant }} + runs-on: ${{ matrix.os || 'windows-latest' }} + + strategy: fail-fast: false + matrix: + sys: [mingw32, mingw64, ucrt64, clang64, clangarm64] + variant: [C, CE] + include: + - sys: clangarm64 + os: windows-11-arm + + defaults: + run: + shell: msys2 {0} steps: - - uses: actions/checkout@v2 - - - if: matrix.exception == 'No-Exceptions' - name: Configure - run: cmake -S . -B build - - if: matrix.exception == 'C++-Exceptions' - name: Configure - run: cmake -S . -B build -DPTHREADS4W_BUILD_C=FALSE -DPTHREADS4W_BUILD_CE=TRUE - - if: matrix.exception == 'structured-Exceptions' - name: Configure - run: cmake -S . -B build -DPTHREADS4W_BUILD_C=FALSE -DPTHREADS4W_BUILD_SE=TRUE - - name: Build ${{ matrix.type }} - run: cmake --build build --config ${{ matrix.type }} - - name: Test ${{ matrix.type }} + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup MSYS2 + uses: msys2/setup-msys2@v2 + with: + msystem: ${{ matrix.sys }} + update: true + install: >- + make + pacboy: >- + toolchain:p + cmake:p + + - name: Configure + if: matrix.sys != 'clang64' && matrix.sys != 'clangarm64' + run: | + cmake -G "Unix Makefiles" \ + -S . \ + -B build \ + -DCMAKE_VERBOSE_MAKEFILE=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DPTHREADS4W_BUILD_${{ matrix.variant }}=ON + + - name: Configure clang + if: matrix.sys == 'clang64' || matrix.sys == 'clangarm64' run: | - cd build - ctest -C ${{ matrix.type }} + CC=clang CXX=clang++ \ + cmake -G "Unix Makefiles" \ + -S . \ + -B build \ + -DCMAKE_VERBOSE_MAKEFILE=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DPTHREADS4W_BUILD_${{ matrix.variant }}=ON + + - name: Build + run: cmake --build build + + - name: Test + run: ctest --output-on-failure --test-dir build + + cygwin: + name: cygwin-${{ matrix.variant }} + runs-on: windows-latest + + strategy: + fail-fast: false + matrix: + variant: [C, CE] + + defaults: + run: + shell: C:\cygwin\bin\bash.exe --login -o igncr '{0}' + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Cygwin + uses: cygwin/cygwin-install-action@master + with: + packages: >- + cmake + make + gcc-core + gcc-g++ + + - name: Configure + run: | + cmake "$GITHUB_WORKSPACE" \ + -B build \ + -G "Unix Makefiles" \ + -DPTHREADS4W_BUILD_${{ matrix.variant }}=ON + + - name: Build + run: cmake --build build + + - name: Test + run: ctest --output-on-failure --test-dir build From d937d714c40cf1523845ba0b69fafddf7ae28f54 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sun, 24 May 2026 12:04:08 +0200 Subject: [PATCH 21/41] SEH doesn't work on non-MSVC --- CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 73a8700..c0d581a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,6 +27,10 @@ if (PTHREADS4W_BUILD_ALL) set (PTHREADS4W_BUILD_SE TRUE) endif() +if(MSVC AND PTHREADS4W_BUILD_SE) + message(FATAL_ERROR "SEH is only on MSVC fully supported") +endif() + set (PTHREAD_SOURCES ${PTHREADS4W_SOURCE_DIR}/cleanup.c ${PTHREADS4W_SOURCE_DIR}/create.c From ed1b58c0ad153cb715da8ff59f18218c7a849c93 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sun, 24 May 2026 12:05:51 +0200 Subject: [PATCH 22/41] added check for stdint.h and use it --- CMakeLists.txt | 3 +++ c-se/CMakeLists.txt | 16 ++++++++++++---- ce/CMakeLists.txt | 8 ++++++-- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c0d581a..95e5cd2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -183,6 +183,9 @@ set (PTHREAD_HEADERS ${PTHREADS4W_SOURCE_DIR}/pthread.h ${PTHREADS4W_SOURCE_DIR}/sched.h) +include(CheckIncludeFile) +check_include_file(stdint.h HAVE_STDINT_H) + #set_source_files_properties(${PTHREAD_SOURCES} # PROPERTIES LANGUAGE C) diff --git a/c-se/CMakeLists.txt b/c-se/CMakeLists.txt index 034aee4..c005604 100644 --- a/c-se/CMakeLists.txt +++ b/c-se/CMakeLists.txt @@ -26,7 +26,9 @@ if (PTHREADS4W_BUILD_C) PUBLIC_HEADER "${PTHREAD_HEADERS}") target_compile_definitions (pthreadC - PUBLIC CLEANUP=__PTW32_CLEANUP_C + PUBLIC + CLEANUP=__PTW32_CLEANUP_C + $<$:HAVE_STDINT_H=1> PRIVATE __PTW32_BUILD_INLINED HAVE_CONFIG_H) @@ -62,7 +64,9 @@ if (PTHREADS4W_BUILD_C) PUBLIC_HEADER "${PTHREAD_HEADERS}") target_compile_definitions (pthreadC-static - PUBLIC CLEANUP=__PTW32_CLEANUP_C + PUBLIC + CLEANUP=__PTW32_CLEANUP_C + $<$:HAVE_STDINT_H=1> PRIVATE __PTW32_BUILD_INLINED __PTW32_STATIC_LIB @@ -100,7 +104,9 @@ if (PTHREADS4W_BUILD_SE) PUBLIC_HEADER "${PTHREAD_HEADERS}") target_compile_definitions (pthreadSE - PUBLIC __PTW32_CLEANUP_SEH + PUBLIC + __PTW32_CLEANUP_SEH + $<$:HAVE_STDINT_H=1> PRIVATE __PTW32_BUILD_INLINED HAVE_CONFIG_H) @@ -135,7 +141,9 @@ if (PTHREADS4W_BUILD_SE) PUBLIC_HEADER "${PTHREAD_HEADERS}") target_compile_definitions (pthreadSE-static - PUBLIC __PTW32_CLEANUP_SEH + PUBLIC + __PTW32_CLEANUP_SEH + $<$:HAVE_STDINT_H=1> PRIVATE __PTW32_BUILD_INLINED PRIVATE __PTW32_STATIC_LIB diff --git a/ce/CMakeLists.txt b/ce/CMakeLists.txt index 28e094a..2510478 100644 --- a/ce/CMakeLists.txt +++ b/ce/CMakeLists.txt @@ -26,7 +26,9 @@ if(PTHREADS4W_BUILD_SHARED) PUBLIC_HEADER "${PTHREAD_HEADERS}") target_compile_definitions (pthreadCE - PUBLIC __PTW32_CLEANUP_CXX + PUBLIC + __PTW32_CLEANUP_CXX + $<$:HAVE_STDINT_H=1> PRIVATE HAVE_CONFIG_H) @@ -69,7 +71,9 @@ if(PTHREADS4W_BUILD_STATIC) PUBLIC_HEADER "${PTHREAD_HEADERS}") target_compile_definitions (pthreadCE-static - PUBLIC __PTW32_CLEANUP_CXX + PUBLIC + __PTW32_CLEANUP_CXX + $<$:HAVE_STDINT_H=1> PRIVATE __PTW32_STATIC_LIB HAVE_CONFIG_H) From de3bb1ac7d284d7fa600206cc70fe0dbaa9443b3 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sun, 24 May 2026 12:07:00 +0200 Subject: [PATCH 23/41] use __PTW32_BUILD_INLINED only on MSVC --- c-se/CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/c-se/CMakeLists.txt b/c-se/CMakeLists.txt index c005604..94cd6a2 100644 --- a/c-se/CMakeLists.txt +++ b/c-se/CMakeLists.txt @@ -30,8 +30,8 @@ if (PTHREADS4W_BUILD_C) CLEANUP=__PTW32_CLEANUP_C $<$:HAVE_STDINT_H=1> PRIVATE - __PTW32_BUILD_INLINED - HAVE_CONFIG_H) + HAVE_CONFIG_H + $<$:__PTW32_BUILD_INLINED>) install (TARGETS pthreadC DESTINATION ${CMAKE_INSTALL_LIBDIR} @@ -68,9 +68,9 @@ if (PTHREADS4W_BUILD_C) CLEANUP=__PTW32_CLEANUP_C $<$:HAVE_STDINT_H=1> PRIVATE - __PTW32_BUILD_INLINED __PTW32_STATIC_LIB - HAVE_CONFIG_H) + HAVE_CONFIG_H + $<$:__PTW32_BUILD_INLINED>) install (TARGETS pthreadC-static COMPONENT Development From 7ddd780621a6ee27025ff1b78852cf74f4d91eff Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sun, 24 May 2026 12:07:55 +0200 Subject: [PATCH 24/41] don't use register anymore --- create.c | 2 +- pthread_spin_destroy.c | 2 +- pthread_spin_lock.c | 2 +- pthread_spin_trylock.c | 2 +- pthread_spin_unlock.c | 2 +- ptw32_mutex_check_need_init.c | 4 ++-- sem_getvalue.c | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/create.c b/create.c index 3ed7ca9..a96c463 100644 --- a/create.c +++ b/create.c @@ -88,7 +88,7 @@ pthread_create (pthread_t * tid, pthread_t thread; __ptw32_thread_t * tp; __ptw32_thread_t * sp; - register pthread_attr_t a; + pthread_attr_t a; HANDLE threadH = 0; int result = EAGAIN; int run = __PTW32_TRUE; diff --git a/pthread_spin_destroy.c b/pthread_spin_destroy.c index c25873a..544b5bc 100644 --- a/pthread_spin_destroy.c +++ b/pthread_spin_destroy.c @@ -43,7 +43,7 @@ int pthread_spin_destroy (pthread_spinlock_t * lock) { - register pthread_spinlock_t s; + pthread_spinlock_t s; int result = 0; if (lock == NULL || *lock == NULL) diff --git a/pthread_spin_lock.c b/pthread_spin_lock.c index 54e7281..531e83b 100644 --- a/pthread_spin_lock.c +++ b/pthread_spin_lock.c @@ -43,7 +43,7 @@ int pthread_spin_lock (pthread_spinlock_t * lock) { - register pthread_spinlock_t s; + pthread_spinlock_t s; if (NULL == lock || NULL == *lock) { diff --git a/pthread_spin_trylock.c b/pthread_spin_trylock.c index b177f6a..fdb70b4 100644 --- a/pthread_spin_trylock.c +++ b/pthread_spin_trylock.c @@ -43,7 +43,7 @@ int pthread_spin_trylock (pthread_spinlock_t * lock) { - register pthread_spinlock_t s; + pthread_spinlock_t s; if (NULL == lock || NULL == *lock) { diff --git a/pthread_spin_unlock.c b/pthread_spin_unlock.c index 5c9d548..c02fb60 100644 --- a/pthread_spin_unlock.c +++ b/pthread_spin_unlock.c @@ -43,7 +43,7 @@ int pthread_spin_unlock (pthread_spinlock_t * lock) { - register pthread_spinlock_t s; + pthread_spinlock_t s; if (NULL == lock || NULL == *lock) { diff --git a/ptw32_mutex_check_need_init.c b/ptw32_mutex_check_need_init.c index c7b1301..119da5e 100644 --- a/ptw32_mutex_check_need_init.c +++ b/ptw32_mutex_check_need_init.c @@ -50,8 +50,8 @@ static pthread_mutexattr_t __ptw32_errorcheck_mutexattr = &__ptw32_errorcheck_mu INLINE int __ptw32_mutex_check_need_init (pthread_mutex_t * mutex) { - register int result = 0; - register pthread_mutex_t mtx; + int result = 0; + pthread_mutex_t mtx; __ptw32_mcs_local_node_t node; __ptw32_mcs_lock_acquire(&__ptw32_mutex_test_init_lock, &node); diff --git a/sem_getvalue.c b/sem_getvalue.c index 2e043db..82d8901 100644 --- a/sem_getvalue.c +++ b/sem_getvalue.c @@ -82,7 +82,7 @@ sem_getvalue (sem_t * sem, int *sval) int result = 0; __ptw32_mcs_local_node_t node; - register sem_t s = *sem; + sem_t s = *sem; __ptw32_mcs_lock_acquire(&s->lock, &node); *sval = s->value; From 483a560890949a0d32061d7944c333060bfbb1ca Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sun, 24 May 2026 12:09:02 +0200 Subject: [PATCH 25/41] use _aatribute__ correct for ctor/dtor --- dll.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/dll.c b/dll.c index 674f7c7..04ab95c 100644 --- a/dll.c +++ b/dll.c @@ -140,8 +140,15 @@ extern int __ptw32_on_process_exit(void) } #if defined(__GNUC__) -__attribute__((section(".ctors"), used)) extern int (*gcc_ctor)(void) = __ptw32_on_process_init; -__attribute__((section(".dtors"), used)) extern int (*gcc_dtor)(void) = __ptw32_on_process_exit; +__attribute__((constructor)) +static void ptw32_init_ctor(void) { + __ptw32_on_process_init(); +} + +__attribute__((destructor)) +static void ptw32_fini_dtor(void) { + __ptw32_on_process_exit(); +} #elif defined(_MSC_VER) # if _MSC_VER >= 1400 /* MSVC8+ */ # pragma section(".CRT$XCU", long, read) From 3a580f3a946e4c27c852e99fbce440582961e1ab Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sun, 24 May 2026 12:09:38 +0200 Subject: [PATCH 26/41] if user wants exceptions, user has to catch them (at least on non-MSVC --- pthread.h | 6 ------ 1 file changed, 6 deletions(-) diff --git a/pthread.h b/pthread.h index ab6ca92..428ad66 100644 --- a/pthread.h +++ b/pthread.h @@ -1209,12 +1209,6 @@ __PTW32_DLLPORT unsigned long __PTW32_CDECL __ptw32_get_exception_services_code catch( __ptw32_exception & ) { throw; } \ catch( ... ) -#else /* _MSC_VER */ - -#define catch( E ) \ - catch( __ptw32_exception & ) { throw; } \ - catch( E ) - #endif /* _MSC_VER */ #endif /* __PTW32_CLEANUP_CXX */ From f5ea0b105c4098bb20181abf028293bcbc5282a5 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sun, 24 May 2026 12:10:23 +0200 Subject: [PATCH 27/41] terminated is defined in exception, not new --- ptw32_callUserDestroyRoutines.c | 2 +- ptw32_threadStart.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ptw32_callUserDestroyRoutines.c b/ptw32_callUserDestroyRoutines.c index 9d85e05..4933fe6 100644 --- a/ptw32_callUserDestroyRoutines.c +++ b/ptw32_callUserDestroyRoutines.c @@ -50,7 +50,7 @@ # if defined(__GNUC__) && __GNUC__ < 3 # include # else -# include +# include using std::terminate; # endif diff --git a/ptw32_threadStart.c b/ptw32_threadStart.c index fc41ca2..99a550e 100644 --- a/ptw32_threadStart.c +++ b/ptw32_threadStart.c @@ -95,7 +95,7 @@ ExceptionFilter (EXCEPTION_POINTERS * ep, DWORD * ei) # if defined(__GNUC__) && __GNUC__ < 3 # include # else -# include +# include using std::terminate; using From 90073109785617ae213741c5a7c8f7c592f7d789 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sun, 24 May 2026 13:00:51 +0200 Subject: [PATCH 28/41] also use stdint.h for nolib tests --- tests/CMakeLists.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index d2d4cf6..33ea545 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -70,7 +70,8 @@ function (PT4WCREATE_TEST TESTNAME) __PTW32_CONFIG_H __PTW32_STATIC_LIB $<$:__PTW32_CLEANUP_C> - $<$:__PTW32_CLEANUP_CXX>) + $<$:__PTW32_CLEANUP_CXX> + $<$:HAVE_STDINT_H=1>) target_include_directories (pthreads4w${SUFFIX}-${TESTNAME}-static-nolib PRIVATE ${PROJECT_SOURCE_DIR}) @@ -85,7 +86,8 @@ function (PT4WCREATE_TEST TESTNAME) if(SUFFIX STREQUAL "CE") target_compile_definitions (pthreads4w${SUFFIX}-${TESTNAME}-static-nolib PRIVATE - __PtW32NoCatchWarn) + __PtW32NoCatchWarn + $<$:HAVE_STDINT_H=1>) target_compile_definitions (pthreads4w${SUFFIX}-${TESTNAME}-static PRIVATE __PtW32NoCatchWarn) From e6fd86b6dd7767c7324cb20ceda88b6533ef93cc Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sun, 24 May 2026 13:01:15 +0200 Subject: [PATCH 29/41] remove commented before-rewrite code --- CMakeLists.txt | 235 ------------------------------------------------- 1 file changed, 235 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 95e5cd2..4c5bdf8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -186,241 +186,6 @@ set (PTHREAD_HEADERS include(CheckIncludeFile) check_include_file(stdint.h HAVE_STDINT_H) -#set_source_files_properties(${PTHREAD_SOURCES} -# PROPERTIES LANGUAGE C) - -#if (PTHREADS4W_BUILD_C) -# if(PTHREADS4W_BUILD_SHARED) -# add_library (pthreadC SHARED -# ${PTHREAD_SOURCES} -# ${PTHREAD_HEADERS}) -# -# add_library (Threads::Threads ALIAS pthreadC) -# add_library (Threads::Shared ALIAS pthreadC) -# -# target_include_directories (pthreadC -# INTERFACE $ -# PUBLIC $) -# -# set_target_properties (pthreadC -# PROPERTIES -# OUTPUT_NAME pthreadC${PTHREADS4W_VERSION_MAJOR} -# EXPORT_NAME Threads::Shared -# VERSION ${PTHREADS4W_VERSION} -# SOVERSION ${PTHREADS4W_VERSION_MAJOR} -# PUBLIC_HEADER "${PTHREAD_HEADERS}") -# -# target_compile_definitions (pthreadC -# PUBLIC CLEANUP=__PTW32_CLEANUP_C -# PRIVATE -# __PTW32_BUILD_INLINED -# HAVE_CONFIG_H) -# -# install (TARGETS pthreadC -# DESTINATION ${CMAKE_INSTALL_LIBDIR} -# COMPONENT Runtime -# EXPORT PTHREADS4W -# LIBRARY -# DESTINATION ${CMAKE_INSTALL_LIBDIR} -# PUBLIC_HEADER -# COMPONENT Development -# DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) -# endif(PTHREADS4W_BUILD_SHARED) -# -# if(PTHREADS4W_BUILD_STATIC) -# add_library (pthreadC-static STATIC -# ${PTHREAD_SOURCES} -# ${PTHREAD_HEADERS}) -# -# add_library (Threads::Static ALIAS pthreadC-static) -# -# target_include_directories (pthreadC-static -# INTERFACE $ -# PUBLIC $) -# -# set_target_properties (pthreadC-static -# PROPERTIES -# OUTPUT_NAME libpthreadC${PTHREADS4W_VERSION_MAJOR}s -# EXPORT_NAME Threads::Static -# VERSION ${PTHREADS4W_VERSION} -# SOVERSION ${PTHREADS4W_VERSION_MAJOR} -# PUBLIC_HEADER "${PTHREAD_HEADERS}") -# -# target_compile_definitions (pthreadC-static -# PUBLIC CLEANUP=__PTW32_CLEANUP_C -# PRIVATE -# __PTW32_BUILD_INLINED -# __PTW32_STATIC_LIB -# HAVE_CONFIG_H) -# -# install (TARGETS pthreadC-static -# COMPONENT Development -# DESTINATION ${CMAKE_INSTALL_LIBDIR} -# EXPORT PTHREADS4W -# LIBRARY -# DESTINATION ${CMAKE_INSTALL_LIBDIR} -# PUBLIC_HEADER -# DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) -# endif(PTHREADS4W_BUILD_STATIC) -#endif() -# -#if (PTHREADS4W_BUILD_CE) -# if(PTHREADS4W_BUILD_SHARED) -# add_library (pthreadCE SHARED -# ${PTHREAD_SOURCES} -# ${PTHREAD_HEADERS}) -# -# add_library (Threads::CEShared ALIAS pthreadCE) -# -# target_include_directories (pthreadCE -# INTERFACE $ -# PUBLIC $) -# -# set_target_properties (pthreadCE -# PROPERTIES -# OUTPUT_NAME pthreadCE${PTHREADS4W_VERSION_MAJOR} -# EXPORT_NAME Threads::CEShared -# VERSION ${PTHREADS4W_VERSION} -# SOVERSION ${PTHREADS4W_VERSION_MAJOR} -# PUBLIC_HEADER "${PTHREAD_HEADERS}") -# -# target_compile_definitions (pthreadCE -# PUBLIC __PTW32_CLEANUP_CXX -# PRIVATE -# HAVE_CONFIG_H) -# -# target_compile_options (pthreadCE -# PRIVATE "/EHa") -# -# set_source_files_properties(${PTHREAD_SOURCES} -# TARGET_DIRECTORY pthreadCE -# PROPERTIES LANGUAGE CXX) -# -# install (TARGETS pthreadCE -# DESTINATION ${CMAKE_INSTALL_LIBDIR} -# COMPONENT Runtime -# EXPORT PTHREADS4W -# LIBRARY -# DESTINATION ${CMAKE_INSTALL_LIBDIR} -# PUBLIC_HEADER -# COMPONENT Development -# DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) -# endif(PTHREADS4W_BUILD_SHARED) -# -# if(PTHREADS4W_BUILD_STATIC) -# add_library (pthreadCE-static STATIC -# ${PTHREAD_SOURCES} -# ${PTHREAD_HEADERS}) -# -# add_library (Threads::CEStatic ALIAS pthreadCE-static) -# -# target_include_directories (pthreadCE-static -# INTERFACE $ -# PUBLIC $) -# -# set_target_properties (pthreadCE-static -# PROPERTIES -# OUTPUT_NAME libpthreadCE${PTHREADS4W_VERSION_MAJOR}s -# EXPORT_NAME Threads::CEStatic -# VERSION ${PTHREADS4W_VERSION} -# SOVERSION ${PTHREADS4W_VERSION_MAJOR} -# PUBLIC_HEADER "${PTHREAD_HEADERS}") -# -# target_compile_definitions (pthreadCE-static -# PUBLIC __PTW32_CLEANUP_CXX -# PRIVATE -# __PTW32_STATIC_LIB -# HAVE_CONFIG_H) -# -# target_compile_options (pthreadCE-static -# PRIVATE "/EHa") -# -# set_source_files_properties(${PTHREAD_SOURCES} -# TARGET_DIRECTORY pthreadCE-static -# PROPERTIES LANGUAGE CXX) -# -# install (TARGETS pthreadCE-static -# COMPONENT Development -# DESTINATION ${CMAKE_INSTALL_LIBDIR} -# EXPORT PTHREADS4W -# LIBRARY -# DESTINATION ${CMAKE_INSTALL_LIBDIR} -# PUBLIC_HEADER -# DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) -# endif(PTHREADS4W_BUILD_STATIC) -#endif() - -#if (PTHREADS4W_BUILD_SE) -# if(PTHREADS4W_BUILD_SHARED) -# add_library (pthreadSE SHARED -# ${PTHREAD_SOURCES} -# ${PTHREAD_HEADERS}) -# -# add_library (Threads::SEShared ALIAS pthreadSE) -# -# target_include_directories (pthreadSE -# INTERFACE $ -# PUBLIC $) -# -# set_target_properties (pthreadSE -# PROPERTIES -# OUTPUT_NAME pthreadSE${PTHREADS4W_VERSION_MAJOR} -# EXPORT_NAME Threads::SEShared -# VERSION ${PTHREADS4W_VERSION} -# SOVERSION ${PTHREADS4W_VERSION_MAJOR} -# PUBLIC_HEADER "${PTHREAD_HEADERS}") -# -# target_compile_definitions (pthreadSE -# PUBLIC __PTW32_CLEANUP_SEH -# PRIVATE -# __PTW32_BUILD_INLINED -# HAVE_CONFIG_H) -# -# install (TARGETS pthreadSE -# DESTINATION ${CMAKE_INSTALL_LIBDIR} -# COMPONENT Runtime -# EXPORT PTHREADS4W -# LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} -# PUBLIC_HEADER -# COMPONENT Development -# DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) -# endif(PTHREADS4W_BUILD_SHARED) -# -# if(PTHREADS4W_BUILD_STATIC) -# add_library (pthreadSE-static STATIC -# ${PTHREAD_SOURCES} -# ${PTHREAD_HEADERS}) -# -# add_library (Threads::SEStatic ALIAS pthreadSE-static) -# -# target_include_directories (pthreadSE-static -# INTERFACE $ -# PUBLIC $) -# -# set_target_properties (pthreadSE-static -# PROPERTIES -# OUTPUT_NAME libpthreadSE${PTHREADS4W_VERSION_MAJOR}s -# EXPORT_NAME Threads::SEStatic -# VERSION ${PTHREADS4W_VERSION} -# SOVERSION ${PTHREADS4W_VERSION_MAJOR} -# PUBLIC_HEADER "${PTHREAD_HEADERS}") -# -# target_compile_definitions (pthreadSE-static -# PUBLIC __PTW32_CLEANUP_SEH -# PRIVATE -# __PTW32_BUILD_INLINED -# PRIVATE __PTW32_STATIC_LIB -# PRIVATE HAVE_CONFIG_H) -# -# install (TARGETS pthreadSE-static -# COMPONENT Development -# DESTINATION ${CMAKE_INSTALL_LIBDIR} -# EXPORT PTHREADS4W -# LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} -# PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pthread) -# endif(PTHREADS4W_BUILD_STATIC) -#endif() - if(PTHREADS4W_BUILD_C OR PTHREADS4W_BUILD_SE) add_subdirectory(c-se/) endif() From ed68ab442ac5ee0a3321ca0afb17b61d0e0075a8 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sun, 24 May 2026 13:23:45 +0200 Subject: [PATCH 30/41] convert to const char* not char* --- tests/benchtest1.c | 2 +- tests/benchtest2.c | 2 +- tests/benchtest3.c | 2 +- tests/benchtest4.c | 2 +- tests/benchtest5.c | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/benchtest1.c b/tests/benchtest1.c index 23e8d72..f392ef6 100644 --- a/tests/benchtest1.c +++ b/tests/benchtest1.c @@ -74,7 +74,7 @@ int iter; void -runTest (char * testNameString, int mType) +runTest (const char * testNameString, int mType) { #ifdef __PTW32_MUTEX_TYPES assert(pthread_mutexattr_settype(&ma, mType) == 0); diff --git a/tests/benchtest2.c b/tests/benchtest2.c index e28c10e..4666d0a 100644 --- a/tests/benchtest2.c +++ b/tests/benchtest2.c @@ -138,7 +138,7 @@ CSThread(void * arg) } void -runTest (char * testNameString, int mType) +runTest (const char * testNameString, int mType) { #ifdef __PTW32_MUTEX_TYPES assert(pthread_mutexattr_settype(&ma, mType) == 0); diff --git a/tests/benchtest3.c b/tests/benchtest3.c index 1bc5a04..3dd54e3 100644 --- a/tests/benchtest3.c +++ b/tests/benchtest3.c @@ -93,7 +93,7 @@ oldTrylockThread (void * arg) void -runTest (char * testNameString, int mType) +runTest (const char * testNameString, int mType) { pthread_t t; diff --git a/tests/benchtest4.c b/tests/benchtest4.c index 51cd256..7a2b82a 100644 --- a/tests/benchtest4.c +++ b/tests/benchtest4.c @@ -77,7 +77,7 @@ oldRunTest (char * testNameString, int mType) void -runTest (char * testNameString, int mType) +runTest (const char * testNameString, int mType) { #ifdef __PTW32_MUTEX_TYPES pthread_mutexattr_settype(&ma, mType); diff --git a/tests/benchtest5.c b/tests/benchtest5.c index d4fd515..ebadde6 100644 --- a/tests/benchtest5.c +++ b/tests/benchtest5.c @@ -72,7 +72,7 @@ int zero = 0; void -reportTest (char * testNameString) +reportTest (const char * testNameString) { durationMilliSecs = GetDurationMilliSecs(currSysTimeStart, currSysTimeStop) - overHeadMilliSecs; From a0cfa1fcb269d08035bc1420ef26fed620e0ce25 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sun, 24 May 2026 13:41:59 +0200 Subject: [PATCH 31/41] use also for set_terminate --- tests/exception3.c | 2 +- tests/exception3_0.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/exception3.c b/tests/exception3.c index f7ae311..b035d35 100644 --- a/tests/exception3.c +++ b/tests/exception3.c @@ -85,7 +85,7 @@ # if defined(__GNUC__) && __GNUC__ < 3 # include # else -# include +# include using std::set_terminate; # endif #endif diff --git a/tests/exception3_0.c b/tests/exception3_0.c index b331de7..da9e271 100644 --- a/tests/exception3_0.c +++ b/tests/exception3_0.c @@ -85,7 +85,7 @@ # if defined(__GNUC__) && __GNUC__ < 3 # include # else -# include +# include using std::set_terminate; # endif #endif From bf5bbc69675fb2702908c6f242e2ecd301bc3ee3 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sun, 24 May 2026 13:54:19 +0200 Subject: [PATCH 32/41] Moved _omp_lib into the right place --- tests/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 33ea545..120fb45 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -156,13 +156,13 @@ function (PT4WCREATE_TEST TESTNAME) endif() set (_omp_lib OpenMP::OpenMP_CXX) + else() + set (_omp_lib OpenMP::OpenMP_C) endif() set_tests_properties (pthreads4w_${SUFFIX}-${TESTNAME} PROPERTIES ENVIRONMENT "PATH=$\;%PATH%") - else() - set (_omp_lib OpenMP::OpenMP_C) endif(PTHREADS4W_BUILD_SHARED) endif(PT4WCT_NEEDS_LINK) From 76e2b6314f508802acabe0f5ec26956c8501809e Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sun, 24 May 2026 13:54:34 +0200 Subject: [PATCH 33/41] migrated to newer omp-api --- tests/openmp1.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/openmp1.c b/tests/openmp1.c index 57cbe45..842080d 100644 --- a/tests/openmp1.c +++ b/tests/openmp1.c @@ -63,8 +63,10 @@ int main(int argc, char *argv[]) { if (argc>1) Verbose = 1; - omp_set_nested(-1); - printf("%s%s%s\n", "Nested parallel blocks are ", omp_get_nested()?" ":"NOT ", "supported."); + printf("%s%s%s\n", + "Nested parallel blocks are ", + omp_get_max_active_levels() > 1 ? " " : "NOT ", + "supported."); MainThread(); From 552c69a10733a2e0d1687de0eb0ef6ecb9edb842 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sun, 24 May 2026 14:12:53 +0200 Subject: [PATCH 34/41] fix workflow --- .github/workflows/ccpp.yml | 52 +++----------------------------------- 1 file changed, 4 insertions(+), 48 deletions(-) diff --git a/.github/workflows/ccpp.yml b/.github/workflows/ccpp.yml index 039479a..21b899b 100644 --- a/.github/workflows/ccpp.yml +++ b/.github/workflows/ccpp.yml @@ -28,20 +28,19 @@ jobs: -DPTHREADS4W_BUILD_SHARED=${{ matrix.link == 'shared' && 'ON' || 'OFF' }} - name: Build - run: cmake --build build --config Release + run: cmake --build build --config Release -- /verbosity:detailed - name: Test run: ctest --test-dir build -C Release --output-on-failure msys: - name: msys-${{ matrix.sys }}-${{ matrix.variant }} + name: msys-${{ matrix.sys }} runs-on: ${{ matrix.os || 'windows-latest' }} strategy: fail-fast: false matrix: sys: [mingw32, mingw64, ucrt64, clang64, clangarm64] - variant: [C, CE] include: - sys: clangarm64 os: windows-11-arm @@ -74,8 +73,7 @@ jobs: -S . \ -B build \ -DCMAKE_VERBOSE_MAKEFILE=ON \ - -DCMAKE_BUILD_TYPE=Release \ - -DPTHREADS4W_BUILD_${{ matrix.variant }}=ON + -DCMAKE_BUILD_TYPE=Release - name: Configure clang if: matrix.sys == 'clang64' || matrix.sys == 'clangarm64' @@ -85,49 +83,7 @@ jobs: -S . \ -B build \ -DCMAKE_VERBOSE_MAKEFILE=ON \ - -DCMAKE_BUILD_TYPE=Release \ - -DPTHREADS4W_BUILD_${{ matrix.variant }}=ON - - - name: Build - run: cmake --build build - - - name: Test - run: ctest --output-on-failure --test-dir build - - cygwin: - name: cygwin-${{ matrix.variant }} - runs-on: windows-latest - - strategy: - fail-fast: false - matrix: - variant: [C, CE] - - defaults: - run: - shell: C:\cygwin\bin\bash.exe --login -o igncr '{0}' - - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Cygwin - uses: cygwin/cygwin-install-action@master - with: - packages: >- - cmake - make - gcc-core - gcc-g++ - - - name: Configure - run: | - cmake "$GITHUB_WORKSPACE" \ - -B build \ - -G "Unix Makefiles" \ - -DPTHREADS4W_BUILD_${{ matrix.variant }}=ON + -DCMAKE_BUILD_TYPE=Release - name: Build run: cmake --build build From 2f9816c2976475b971047bce97c184e24f0f9877 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Wed, 27 May 2026 15:02:43 +0200 Subject: [PATCH 35/41] c++ does also not work in mingw --- CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4c5bdf8..2ef7e6a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,7 +27,11 @@ if (PTHREADS4W_BUILD_ALL) set (PTHREADS4W_BUILD_SE TRUE) endif() -if(MSVC AND PTHREADS4W_BUILD_SE) +if(PTHREADS4W_BUILD_CE AND NOT MSVC) + message(FATAL_ERROR "Native pthreads conflicts with this and breaks everything.") +endif() + +if(PTHREADS4W_BUILD_SE AND NOT MSVC) message(FATAL_ERROR "SEH is only on MSVC fully supported") endif() From 1f1bbc4ae5b6e81fc5de43c3473022fed14278d1 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Wed, 27 May 2026 15:03:28 +0200 Subject: [PATCH 36/41] use atomics instead of fragile asm replacements from the olden days --- implement.h | 261 ++++++++++++++++++++-------------------------------- 1 file changed, 101 insertions(+), 160 deletions(-) diff --git a/implement.h b/implement.h index 81c5f29..0f41706 100644 --- a/implement.h +++ b/implement.h @@ -779,173 +779,114 @@ __PTW32_END_C_DECLS # define __PTW32_TO_VLONG64PTR(ptr) (ptr) #endif -#if defined(__GNUC__) -# if defined(_WIN64) -# define __PTW32_INTERLOCKED_COMPARE_EXCHANGE_64(location, value, comparand) \ - ({ \ - __typeof (value) _result; \ - __asm__ __volatile__ \ - ( \ - "lock\n\t" \ - "cmpxchgq %2,(%1)" \ - :"=a" (_result) \ - :"r" (location), "r" (value), "a" (comparand) \ - :"memory", "cc"); \ - _result; \ - }) -# define __PTW32_INTERLOCKED_EXCHANGE_64(location, value) \ - ({ \ - __typeof (value) _result; \ - __asm__ __volatile__ \ - ( \ - "xchgq %0,(%1)" \ - :"=r" (_result) \ - :"r" (location), "0" (value) \ - :"memory", "cc"); \ - _result; \ - }) -# define __PTW32_INTERLOCKED_EXCHANGE_ADD_64(location, value) \ - ({ \ - __typeof (value) _result; \ - __asm__ __volatile__ \ - ( \ - "lock\n\t" \ - "xaddq %0,(%1)" \ - :"=r" (_result) \ - :"r" (location), "0" (value) \ - :"memory", "cc"); \ - _result; \ - }) -# define __PTW32_INTERLOCKED_INCREMENT_64(location) \ - ({ \ - __PTW32_INTERLOCKED_LONG _temp = 1; \ - __asm__ __volatile__ \ - ( \ - "lock\n\t" \ - "xaddq %0,(%1)" \ - :"+r" (_temp) \ - :"r" (location) \ - :"memory", "cc"); \ - ++_temp; \ - }) -# define __PTW32_INTERLOCKED_DECREMENT_64(location) \ - ({ \ - __PTW32_INTERLOCKED_LONG _temp = -1; \ - __asm__ __volatile__ \ - ( \ - "lock\n\t" \ - "xaddq %2,(%1)" \ - :"+r" (_temp) \ - :"r" (location) \ - :"memory", "cc"); \ - --_temp; \ - }) -#endif -# define __PTW32_INTERLOCKED_COMPARE_EXCHANGE_LONG(location, value, comparand) \ - ({ \ - __typeof (value) _result; \ - __asm__ __volatile__ \ - ( \ - "lock\n\t" \ - "cmpxchgl %2,(%1)" \ - :"=a" (_result) \ - :"r" (location), "r" (value), "a" (comparand) \ - :"memory", "cc"); \ - _result; \ - }) -# define __PTW32_INTERLOCKED_EXCHANGE_LONG(location, value) \ - ({ \ - __typeof (value) _result; \ - __asm__ __volatile__ \ - ( \ - "xchgl %0,(%1)" \ - :"=r" (_result) \ - :"r" (location), "0" (value) \ - :"memory", "cc"); \ - _result; \ +#if defined(__GNUC__) || defined(__clang__) + +/* 32-bit long */ + +#define __PTW32_INTERLOCKED_INCREMENT_LONG(p) __atomic_add_fetch((p), 1, __ATOMIC_SEQ_CST) + +#define __PTW32_INTERLOCKED_DECREMENT_LONG(p) __atomic_sub_fetch((p), 1, __ATOMIC_SEQ_CST) + +#define __PTW32_INTERLOCKED_EXCHANGE_ADD_LONG(p, v) __atomic_fetch_add((p), (v), __ATOMIC_SEQ_CST) + +#define __PTW32_INTERLOCKED_EXCHANGE_LONG(p, v) __atomic_exchange_n((p), (v), __ATOMIC_SEQ_CST) + +#define __PTW32_INTERLOCKED_COMPARE_EXCHANGE_LONG(p, v, c) \ + ({ \ + __PTW32_INTERLOCKED_LONG __expected = (c); \ + __atomic_compare_exchange_n((p), &__expected, (v), 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); \ + __expected; \ }) -# define __PTW32_INTERLOCKED_EXCHANGE_ADD_LONG(location, value) \ - ({ \ - __typeof (value) _result; \ - __asm__ __volatile__ \ - ( \ - "lock\n\t" \ - "xaddl %0,(%1)" \ - :"=r" (_result) \ - :"r" (location), "0" (value) \ - :"memory", "cc"); \ - _result; \ + +/* 64-bit */ + +#define __PTW32_INTERLOCKED_INCREMENT_64(p) __atomic_add_fetch((p), 1, __ATOMIC_SEQ_CST) + +#define __PTW32_INTERLOCKED_DECREMENT_64(p) __atomic_sub_fetch((p), 1, __ATOMIC_SEQ_CST) + +#define __PTW32_INTERLOCKED_EXCHANGE_ADD_64(p, v) __atomic_fetch_add((p), (v), __ATOMIC_SEQ_CST) + +#define __PTW32_INTERLOCKED_EXCHANGE_64(p, v) __atomic_exchange_n((p), (v), __ATOMIC_SEQ_CST) + +#define __PTW32_INTERLOCKED_COMPARE_EXCHANGE_64(p, v, c) \ + ({ \ + __PTW32_INTERLOCKED_SIZE __expected = (c); \ + __atomic_compare_exchange_n((p), &__expected, (v), 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); \ + __expected; \ }) -# define __PTW32_INTERLOCKED_INCREMENT_LONG(location) \ - ({ \ - __PTW32_INTERLOCKED_LONG _temp = 1; \ - __asm__ __volatile__ \ - ( \ - "lock\n\t" \ - "xaddl %0,(%1)" \ - :"+r" (_temp) \ - :"r" (location) \ - :"memory", "cc"); \ - ++_temp; \ + +/* Pointer */ + +#define __PTW32_INTERLOCKED_EXCHANGE_PTR(p, v) __atomic_exchange_n((p), (v), __ATOMIC_SEQ_CST) + +#define __PTW32_INTERLOCKED_COMPARE_EXCHANGE_PTR(p, v, c) \ + ({ \ + void *__expected = (c); \ + __atomic_compare_exchange_n((p), &__expected, (v), 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); \ + __expected; \ }) -# define __PTW32_INTERLOCKED_DECREMENT_LONG(location) \ - ({ \ - __PTW32_INTERLOCKED_LONG _temp = -1; \ - __asm__ __volatile__ \ - ( \ - "lock\n\t" \ - "xaddl %0,(%1)" \ - :"+r" (_temp) \ - :"r" (location) \ - :"memory", "cc"); \ - --_temp; \ + +#define __PTW32_INTERLOCKED_COMPARE_EXCHANGE_SIZE(p, v, c) \ + ({ \ + __PTW32_INTERLOCKED_SIZE __expected = (c); \ + __atomic_compare_exchange_n((p), &__expected, (v), 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); \ + __expected; \ }) -# define __PTW32_INTERLOCKED_COMPARE_EXCHANGE_PTR(location, value, comparand) \ - __PTW32_INTERLOCKED_COMPARE_EXCHANGE_SIZE ((__PTW32_INTERLOCKED_SIZEPTR)location, \ - (__PTW32_INTERLOCKED_SIZE)value, \ - (__PTW32_INTERLOCKED_SIZE)comparand) -# define __PTW32_INTERLOCKED_EXCHANGE_PTR(location, value) \ - __PTW32_INTERLOCKED_EXCHANGE_SIZE ((__PTW32_INTERLOCKED_SIZEPTR)location, \ - (__PTW32_INTERLOCKED_SIZE)value) + +#define __PTW32_INTERLOCKED_EXCHANGE_ADD_SIZE(p, v) __atomic_fetch_add((p), (v), __ATOMIC_SEQ_CST) + +#define __PTW32_INTERLOCKED_EXCHANGE_SIZE(p, v) __atomic_exchange_n((p), (v), __ATOMIC_SEQ_CST) + +#define __PTW32_INTERLOCKED_INCREMENT_SIZE(p) __atomic_add_fetch((p), 1, __ATOMIC_SEQ_CST) + +#define __PTW32_INTERLOCKED_DECREMENT_SIZE(p) __atomic_sub_fetch((p), 1, __ATOMIC_SEQ_CST) #else -# if defined(_WIN64) -# define __PTW32_INTERLOCKED_COMPARE_EXCHANGE_64(p,v,c) InterlockedCompareExchange64 (__PTW32_TO_VLONG64PTR(p),(v),(c)) -# define __PTW32_INTERLOCKED_EXCHANGE_64(p,v) InterlockedExchange64 (__PTW32_TO_VLONG64PTR(p),(v)) -# define __PTW32_INTERLOCKED_EXCHANGE_ADD_64(p,v) InterlockedExchangeAdd64 (__PTW32_TO_VLONG64PTR(p),(v)) -# define __PTW32_INTERLOCKED_INCREMENT_64(p) InterlockedIncrement64 (__PTW32_TO_VLONG64PTR(p)) -# define __PTW32_INTERLOCKED_DECREMENT_64(p) InterlockedDecrement64 (__PTW32_TO_VLONG64PTR(p)) -# endif -# if defined (__PTW32_CONFIG_MSVC6) && !defined(_WIN64) -# define __PTW32_INTERLOCKED_COMPARE_EXCHANGE_LONG(location, value, comparand) \ - ((LONG)InterlockedCompareExchange((PVOID *)(location), (PVOID)(value), (PVOID)(comparand))) -# else -# define __PTW32_INTERLOCKED_COMPARE_EXCHANGE_LONG InterlockedCompareExchange -# endif -# define __PTW32_INTERLOCKED_EXCHANGE_LONG(p,v) InterlockedExchange((p),(v)) -# define __PTW32_INTERLOCKED_EXCHANGE_ADD_LONG(p,v) InterlockedExchangeAdd((p),(v)) -# define __PTW32_INTERLOCKED_INCREMENT_LONG(p) InterlockedIncrement((p)) -# define __PTW32_INTERLOCKED_DECREMENT_LONG(p) InterlockedDecrement((p)) -# if defined (__PTW32_CONFIG_MSVC6) && !defined(_WIN64) -# define __PTW32_INTERLOCKED_COMPARE_EXCHANGE_PTR InterlockedCompareExchange -# define __PTW32_INTERLOCKED_EXCHANGE_PTR(location, value) \ - ((PVOID)InterlockedExchange((LPLONG)(location), (LONG)(value))) -# else -# define __PTW32_INTERLOCKED_COMPARE_EXCHANGE_PTR(p,v,c) InterlockedCompareExchangePointer((p),(v),(c)) -# define __PTW32_INTERLOCKED_EXCHANGE_PTR(p,v) InterlockedExchangePointer((p),(v)) -# endif -#endif +/* MSVC fallback */ + +#define __PTW32_INTERLOCKED_DECREMENT_LONG(p) InterlockedDecrement((p)) +#define __PTW32_INTERLOCKED_EXCHANGE_ADD_LONG(p, v) InterlockedExchangeAdd((p), (v)) +#define __PTW32_INTERLOCKED_EXCHANGE_LONG(p, v) InterlockedExchange((p), (v)) +#define __PTW32_INTERLOCKED_EXCHANGE_PTR(p, v) InterlockedExchangePointer((p), (v)) +#define __PTW32_INTERLOCKED_INCREMENT_LONG(p) InterlockedIncrement((p)) + +#define __PTW32_INTERLOCKED_COMPARE_EXCHANGE_LONG(p, v, c) InterlockedCompareExchange((p), (v), (c)) + +#define __PTW32_INTERLOCKED_COMPARE_EXCHANGE_PTR(p, v, c) \ + InterlockedCompareExchangePointer((p), (v), (c)) + #if defined(_WIN64) -# define __PTW32_INTERLOCKED_COMPARE_EXCHANGE_SIZE(p,v,c) __PTW32_INTERLOCKED_COMPARE_EXCHANGE_64 (__PTW32_TO_VLONG64PTR(p),(v),(c)) -# define __PTW32_INTERLOCKED_EXCHANGE_SIZE(p,v) __PTW32_INTERLOCKED_EXCHANGE_64 (__PTW32_TO_VLONG64PTR(p),(v)) -# define __PTW32_INTERLOCKED_EXCHANGE_ADD_SIZE(p,v) __PTW32_INTERLOCKED_EXCHANGE_ADD_64 (__PTW32_TO_VLONG64PTR(p),(v)) -# define __PTW32_INTERLOCKED_INCREMENT_SIZE(p) __PTW32_INTERLOCKED_INCREMENT_64 (__PTW32_TO_VLONG64PTR(p)) -# define __PTW32_INTERLOCKED_DECREMENT_SIZE(p) __PTW32_INTERLOCKED_DECREMENT_64 (__PTW32_TO_VLONG64PTR(p)) + +#define __PTW32_INTERLOCKED_COMPARE_EXCHANGE_64(p, v, c) \ + InterlockedCompareExchange64((volatile LONG64 *) (p), (v), (c)) + +#define __PTW32_INTERLOCKED_INCREMENT_64(p) InterlockedIncrement64((volatile LONG64 *) (p)) + +#define __PTW32_INTERLOCKED_DECREMENT_64(p) InterlockedDecrement64((volatile LONG64 *) (p)) + +#define __PTW32_INTERLOCKED_EXCHANGE_64(p, v) InterlockedExchange64((volatile LONG64 *) (p), (v)) + +#define __PTW32_INTERLOCKED_EXCHANGE_ADD_64(p, v) \ + InterlockedExchangeAdd64((volatile LONG64 *) (p), (v)) + +#define __PTW32_INTERLOCKED_EXCHANGE_ADD_SIZE(p, v) __PTW32_INTERLOCKED_EXCHANGE_ADD_64((p), (v)) + +#define __PTW32_INTERLOCKED_COMPARE_EXCHANGE_SIZE(p, v, c) \ + __PTW32_INTERLOCKED_COMPARE_EXCHANGE_64((p), (v), (c)) + +#define __PTW32_INTERLOCKED_COMPARE_EXCHANGE_ADD_SIZE(p, cmp, add) \ + __PTW32_INTERLOCKED_COMPARE_EXCHANGE_SIZE((p), (cmp), (cmp) + (add)) + #else -# define __PTW32_INTERLOCKED_COMPARE_EXCHANGE_SIZE(p,v,c) __PTW32_INTERLOCKED_COMPARE_EXCHANGE_LONG((p),(v),(c)) -# define __PTW32_INTERLOCKED_EXCHANGE_SIZE(p,v) __PTW32_INTERLOCKED_EXCHANGE_LONG((p),(v)) -# define __PTW32_INTERLOCKED_EXCHANGE_ADD_SIZE(p,v) __PTW32_INTERLOCKED_EXCHANGE_ADD_LONG((p),(v)) -# define __PTW32_INTERLOCKED_INCREMENT_SIZE(p) __PTW32_INTERLOCKED_INCREMENT_LONG((p)) -# define __PTW32_INTERLOCKED_DECREMENT_SIZE(p) __PTW32_INTERLOCKED_DECREMENT_LONG((p)) + +#define __PTW32_INTERLOCKED_EXCHANGE_ADD_SIZE(p, v) __PTW32_INTERLOCKED_EXCHANGE_ADD_LONG((p), (v)) + +#define __PTW32_INTERLOCKED_COMPARE_EXCHANGE_SIZE(p, v, c) \ + __PTW32_INTERLOCKED_COMPARE_EXCHANGE_LONG((p), (v), (c)) + +#define __PTW32_INTERLOCKED_COMPARE_EXCHANGE_ADD_SIZE(p, cmp, add) \ + __PTW32_INTERLOCKED_COMPARE_EXCHANGE_SIZE((p), (cmp), (cmp) + (add)) + +#endif #endif #if defined(NEED_CREATETHREAD) From fb8be645da5ba9ea63a370f1dc13d05737e3f1ac Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Wed, 27 May 2026 15:05:01 +0200 Subject: [PATCH 37/41] Fix linking with openMP --- tests/CMakeLists.txt | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 120fb45..df97bad 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -154,19 +154,34 @@ function (PT4WCREATE_TEST TESTNAME) TARGET_DIRECTORY pthreads4w${SUFFIX}-${TESTNAME} PROPERTIES LANGUAGE CXX) endif() - - set (_omp_lib OpenMP::OpenMP_CXX) - else() - set (_omp_lib OpenMP::OpenMP_C) endif() - set_tests_properties (pthreads4w_${SUFFIX}-${TESTNAME} + get_filename_component(COMPILER_DIR "${CMAKE_C_COMPILER}" DIRECTORY) + + set(TEST_PATH "PATH=${COMPILER_DIR}\;$\;%PATH%") + set_tests_properties(pthreads4w_${SUFFIX}-${TESTNAME} PROPERTIES - ENVIRONMENT "PATH=$\;%PATH%") + ENVIRONMENT "${TEST_PATH}") endif(PTHREADS4W_BUILD_SHARED) endif(PT4WCT_NEEDS_LINK) if(PT4WCT_NEEDS_OPENMP) + if(SUFFIX STREQUAL "CE") + set (_omp_lib OpenMP::OpenMP_CXX) + + #Working around broken omp targets + if (MSVC) + target_link_libraries(OpenMP::OpenMP_CXX INTERFACE vcomp) + endif() + else() + set (_omp_lib OpenMP::OpenMP_C) + + #Working around broken omp targets + if (MSVC) + target_link_libraries(OpenMP::OpenMP_C INTERFACE vcomp) + endif() + endif() + if(PTHREADS4W_BUILD_SHARED) target_link_libraries(pthreads4w${SUFFIX}-${TESTNAME} PRIVATE ${_omp_lib}) From d9e82d1c75cfe150415c588244ef48b4abf2c927 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Wed, 27 May 2026 15:06:05 +0200 Subject: [PATCH 38/41] build a new test-source instead of unreliable openmp source --- tests/add_subdirectory_exclude_test.cmake.in | 44 ++++++++++------ tests/add_subdirectory_test.cmake.in | 44 ++++++++++------ tests/find_package_test.cmake.in | 55 ++++++++++++-------- 3 files changed, 89 insertions(+), 54 deletions(-) diff --git a/tests/add_subdirectory_exclude_test.cmake.in b/tests/add_subdirectory_exclude_test.cmake.in index 17933af..eeebe3d 100644 --- a/tests/add_subdirectory_exclude_test.cmake.in +++ b/tests/add_subdirectory_exclude_test.cmake.in @@ -6,56 +6,68 @@ if(PTHREADS4W_BUILD_CE) LANGUAGES CXX VERSION @PTHREADS4W_VERSION@) - set_source_files_properties(@PTHREADS4W_SOURCE_DIR@/tests/openmp1.c - PROPERTIES LANGUAGE CXX) + set(PTW32_TEST_SRC_FILE "${CMAKE_BINARY_DIR}/ptw32_test.cpp") else() project( pt4w_add_subdirectory_exclude_test LANGUAGES C VERSION @PTHREADS4W_VERSION@) + + set(PTW32_TEST_SRC_FILE "${CMAKE_BINARY_DIR}/ptw32_test.c") endif() option(PTHREADS4W_BUILD_TESTING "" OFF) option(PTHREADS4W_BUILD_SHARED "" @PTHREADS4W_BUILD_SHARED@) option(PTHREADS4W_BUILD_STATIC "" @PTHREADS4W_BUILD_STATIC@) +file(WRITE "${PTW32_TEST_SRC_FILE}" " +#include + +int main(void) { + pthread_mutex_t m; + pthread_mutex_init(&m, 0); + pthread_mutex_destroy(&m); + return 0; +} +") + add_subdirectory(@PTHREADS4W_SOURCE_DIR@ ${CMAKE_CURRENT_BINARY_DIR}/pt4w EXCLUDE_FROM_ALL) if(PTHREADS4W_BUILD_SHARED) if(PTHREADS4W_BUILD_C) - add_executable(test_affinity1C @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) - target_link_libraries(test_affinity1C Threads::Threads) + add_executable(test_C ${PTW32_TEST_SRC_FILE}) + target_link_libraries(test_C Threads::Threads) - add_executable(test_affinity1CS @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) - target_link_libraries(test_affinity1CS Threads::Shared) + add_executable(test_CS ${PTW32_TEST_SRC_FILE}) + target_link_libraries(test_CS Threads::Shared) endif() if(PTHREADS4W_BUILD_CE) - add_executable(test_affinity1CE @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) - target_link_libraries(test_affinity1CE Threads::CEShared) + add_executable(test_CE ${PTW32_TEST_SRC_FILE}) + target_link_libraries(test_CE Threads::CEShared) endif() if(PTHREADS4W_BUILD_SE) - add_executable(test_affinity1SE @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) - target_link_libraries(test_affinity1SE Threads::SEShared) + add_executable(test_SE ${PTW32_TEST_SRC_FILE}) + target_link_libraries(test_SE Threads::SEShared) endif() endif(PTHREADS4W_BUILD_SHARED) if(PTHREADS4W_BUILD_STATIC) if(PTHREADS4W_BUILD_C) - add_executable(test_affinity1CStatic @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) - target_link_libraries(test_affinity1CStatic Threads::Static) + add_executable(test_CStatic ${PTW32_TEST_SRC_FILE}) + target_link_libraries(test_CStatic Threads::Static) endif() if(PTHREADS4W_BUILD_CE) - add_executable(test_affinity1CEStatic @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) - target_link_libraries(test_affinity1CEStatic Threads::CEStatic) + add_executable(test_CEStatic ${PTW32_TEST_SRC_FILE}) + target_link_libraries(test_CEStatic Threads::CEStatic) endif() if(PTHREADS4W_BUILD_SE) - add_executable(test_affinity1SEStatic @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) - target_link_libraries(test_affinity1SEStatic Threads::SEStatic) + add_executable(test_SEStatic ${PTW32_TEST_SRC_FILE}) + target_link_libraries(test_SEStatic Threads::SEStatic) endif() endif(PTHREADS4W_BUILD_STATIC) \ No newline at end of file diff --git a/tests/add_subdirectory_test.cmake.in b/tests/add_subdirectory_test.cmake.in index 806b135..e39e040 100644 --- a/tests/add_subdirectory_test.cmake.in +++ b/tests/add_subdirectory_test.cmake.in @@ -6,55 +6,67 @@ if(PTHREADS4W_BUILD_CE) LANGUAGES CXX VERSION @PTHREADS4W_VERSION@) - set_source_files_properties(@PTHREADS4W_SOURCE_DIR@/tests/openmp1.c - PROPERTIES LANGUAGE CXX) + set(PTW32_TEST_SRC_FILE "${CMAKE_BINARY_DIR}/ptw32_test.cpp") else() project( pt4w_add_subdirectory_test LANGUAGES C VERSION @PTHREADS4W_VERSION@) + + set(PTW32_TEST_SRC_FILE "${CMAKE_BINARY_DIR}/ptw32_test.c") endif() option(PTHREADS4W_BUILD_TESTING "" OFF) option(PTHREADS4W_BUILD_SHARED "" @PTHREADS4W_BUILD_SHARED@) option(PTHREADS4W_BUILD_STATIC "" @PTHREADS4W_BUILD_STATIC@) +file(WRITE "${PTW32_TEST_SRC_FILE}" " +#include + +int main(void) { + pthread_mutex_t m; + pthread_mutex_init(&m, 0); + pthread_mutex_destroy(&m); + return 0; +} +") + add_subdirectory(@PTHREADS4W_SOURCE_DIR@ ${CMAKE_CURRENT_BINARY_DIR}/pt4w) if(PTHREADS4W_BUILD_SHARED) if(PTHREADS4W_BUILD_C) - add_executable(test_affinity1C @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) - target_link_libraries(test_affinity1C Threads::Threads) + add_executable(test_C ${PTW32_TEST_SRC_FILE}) + target_link_libraries(test_C Threads::Threads) - add_executable(test_affinity1CS @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) - target_link_libraries(test_affinity1CS Threads::Shared) + add_executable(test_CS ${PTW32_TEST_SRC_FILE}) + target_link_libraries(test_CS Threads::Shared) endif() if(PTHREADS4W_BUILD_CE) - add_executable(test_affinity1CE @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) - target_link_libraries(test_affinity1CE Threads::CEShared) + add_executable(test_CE ${PTW32_TEST_SRC_FILE}) + target_link_libraries(test_CE Threads::CEShared) endif() if(PTHREADS4W_BUILD_SE) - add_executable(test_affinity1SE @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) - target_link_libraries(test_affinity1SE Threads::SEShared) + add_executable(test_SE ${PTW32_TEST_SRC_FILE}) + target_link_libraries(test_SE Threads::SEShared) endif() endif(PTHREADS4W_BUILD_SHARED) if(PTHREADS4W_BUILD_STATIC) if(PTHREADS4W_BUILD_C) - add_executable(test_affinity1CStatic @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) - target_link_libraries(test_affinity1CStatic Threads::Static) + add_executable(test_CStatic ${PTW32_TEST_SRC_FILE}) + target_link_libraries(test_CStatic Threads::Static) endif() if(PTHREADS4W_BUILD_CE) - add_executable(test_affinity1CEStatic @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) - target_link_libraries(test_affinity1CEStatic Threads::CEStatic) + add_executable(test_CEStatic ${PTW32_TEST_SRC_FILE}) + target_link_libraries(test_CEStatic Threads::CEStatic) endif() if(PTHREADS4W_BUILD_SE) - add_executable(test_affinity1SEStatic @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) - target_link_libraries(test_affinity1SEStatic Threads::SEStatic) + add_executable(test_SEStatic ${PTW32_TEST_SRC_FILE}) + target_link_libraries(test_SEStatic Threads::SEStatic) endif() endif(PTHREADS4W_BUILD_STATIC) \ No newline at end of file diff --git a/tests/find_package_test.cmake.in b/tests/find_package_test.cmake.in index 75f2cd3..9f80a25 100644 --- a/tests/find_package_test.cmake.in +++ b/tests/find_package_test.cmake.in @@ -5,11 +5,15 @@ if(PTHREADS4W_BUILD_CE) pt4w_find_package_test LANGUAGES CXX VERSION @PTHREADS4W_VERSION@) + + set(PTW32_TEST_SRC_FILE "${CMAKE_BINARY_DIR}/ptw32_test.cpp") else() project( pt4w_find_package_test LANGUAGES C VERSION @PTHREADS4W_VERSION@) + + set(PTW32_TEST_SRC_FILE "${CMAKE_BINARY_DIR}/ptw32_test.c") endif() option(PTHREADS4W_BUILD_SHARED "" @PTHREADS4W_BUILD_SHARED@) @@ -17,55 +21,62 @@ option(PTHREADS4W_BUILD_STATIC "" @PTHREADS4W_BUILD_STATIC@) find_package(PTHREADS4W @PTHREADS4W_VERSION@ CONFIG REQUIRED) +file(WRITE "${PTW32_TEST_SRC_FILE}" " +#include + +int main(void) { + pthread_mutex_t m; + pthread_mutex_init(&m, 0); + pthread_mutex_destroy(&m); + return 0; +} +") + if(PTHREADS4W_BUILD_SHARED) if(PTHREADS4W_BUILD_C) - add_executable(test_openMP1C @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) - target_link_libraries(test_openMP1C Threads::Threads) + add_executable(test_C ${PTW32_TEST_SRC_FILE}) + target_link_libraries(test_C Threads::Threads) - target_compile_definitions (test_openMP1C + target_compile_definitions (test_C PRIVATE __PTW32_CLEANUP_C) - add_executable(test_openMP1CS @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) - target_link_libraries(test_openMP1CS Threads::Shared) + add_executable(test_CS ${PTW32_TEST_SRC_FILE}) + target_link_libraries(test_CS Threads::Shared) - target_compile_definitions (test_openMP1CS + target_compile_definitions (test_CS PRIVATE __PTW32_CLEANUP_C) endif() if(PTHREADS4W_BUILD_CE) - set_source_files_properties(@PTHREADS4W_SOURCE_DIR@/tests/openmp1.c - PROPERTIES - LANGUAGE CXX) - - add_executable(test_openMP1CE @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) - target_link_libraries(test_openMP1CE Threads::CEShared) + add_executable(test_CE ${PTW32_TEST_SRC_FILE}) + target_link_libraries(test_CE Threads::CEShared) - target_compile_definitions (test_openMP1CE + target_compile_definitions (test_CE PRIVATE __PTW32_CLEANUP_CXX>) endif() if(PTHREADS4W_BUILD_SE) - add_executable(test_openMP1SE @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) - target_link_libraries(test_openMP1SE Threads::SEShared) + add_executable(test_SE ${PTW32_TEST_SRC_FILE}) + target_link_libraries(test_SE Threads::SEShared) - target_compile_definitions (test_openMP1SE + target_compile_definitions (test_SE PRIVATE __PTW32_CLEANUP_SEH) endif() endif(PTHREADS4W_BUILD_SHARED) if(PTHREADS4W_BUILD_STATIC) if(PTHREADS4W_BUILD_C) - add_executable(test_affinity1CStatic @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) - target_link_libraries(test_affinity1CStatic Threads::Static) + add_executable(test_CStatic ${PTW32_TEST_SRC_FILE}) + target_link_libraries(test_CStatic Threads::Static) endif() if(PTHREADS4W_BUILD_CE) - add_executable(test_affinity1CEStatic @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) - target_link_libraries(test_affinity1CEStatic Threads::CEStatic) + add_executable(test_CEStatic ${PTW32_TEST_SRC_FILE}) + target_link_libraries(test_CEStatic Threads::CEStatic) endif() if(PTHREADS4W_BUILD_SE) - add_executable(test_affinity1SEStatic @PTHREADS4W_SOURCE_DIR@/tests/openmp1.c) - target_link_libraries(test_affinity1SEStatic Threads::SEStatic) + add_executable(test_SEStatic ${PTW32_TEST_SRC_FILE}) + target_link_libraries(test_SEStatic Threads::SEStatic) endif() endif(PTHREADS4W_BUILD_STATIC) \ No newline at end of file From a292a2fcc1a1d98168c3eee7feda322a919fa1dc Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Wed, 27 May 2026 15:06:38 +0200 Subject: [PATCH 39/41] added fallback for openMP < 3 --- tests/openmp1.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tests/openmp1.c b/tests/openmp1.c index 842080d..0bcc907 100644 --- a/tests/openmp1.c +++ b/tests/openmp1.c @@ -3,6 +3,23 @@ #include #include +#if defined(_MSC_VER) && !defined(__clang__) + +/* MSVC OpenMP is limited to 2.0 – no nested levels API */ + +#pragma message("Warning: using legacy OpenMP API (MSVC runtime lacks omp_get_max_active_levels)") + +static int ptw32_omp_get_max_active_levels(void) +{ + /* no nested parallelism info available → degrade gracefully */ + return 1; +} + +/* optional: map symbol */ +#define omp_get_max_active_levels ptw32_omp_get_max_active_levels + +#endif + enum { Size = 10000 }; From 2ff03bb4df63c05e7c026c2f6566cb7289b7b5e4 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Wed, 27 May 2026 20:04:25 +0200 Subject: [PATCH 40/41] removed too noisy build in ci --- .github/workflows/ccpp.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ccpp.yml b/.github/workflows/ccpp.yml index 21b899b..2ad6b86 100644 --- a/.github/workflows/ccpp.yml +++ b/.github/workflows/ccpp.yml @@ -28,7 +28,7 @@ jobs: -DPTHREADS4W_BUILD_SHARED=${{ matrix.link == 'shared' && 'ON' || 'OFF' }} - name: Build - run: cmake --build build --config Release -- /verbosity:detailed + run: cmake --build build --config Release - name: Test run: ctest --test-dir build -C Release --output-on-failure From a4d26ded29beba37c6520e90a51fe3884c9a93a8 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Wed, 27 May 2026 20:04:47 +0200 Subject: [PATCH 41/41] Fixed building of static-only CE --- tests/CMakeLists.txt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index df97bad..68368a6 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -6,15 +6,15 @@ function (PT4WCREATE_TEST TESTNAME) cmake_parse_arguments (PARSE_ARGV 1 PT4WCT "${OPTS}" "${OVA}" "${MVA}") foreach (SUFFIX ${SUFFIXES}) - if(PTHREADS4W_BUILD_SHARED) - if(SUFFIX STREQUAL "CE") - set_source_files_properties( - ${PTHREADS4W_SOURCE_DIR}/tests/${TESTNAME}.c - ${PTHREADS4W_SOURCE_DIR}/tests/${PT4WCT_ADDITIONAL_SOURCE} - ${PTHREADS4W_SOURCE_DIR}/pthread.c - PROPERTIES LANGUAGE CXX) + if(SUFFIX STREQUAL "CE") + set_source_files_properties( + ${PTHREADS4W_SOURCE_DIR}/tests/${TESTNAME}.c + ${PTHREADS4W_SOURCE_DIR}/tests/${PT4WCT_ADDITIONAL_SOURCE} + ${PTHREADS4W_SOURCE_DIR}/pthread.c + PROPERTIES LANGUAGE CXX) endif() + if(PTHREADS4W_BUILD_SHARED) add_executable (pthreads4w${SUFFIX}-${TESTNAME} ${PTHREADS4W_SOURCE_DIR}/tests/${TESTNAME}.c ${PTHREADS4W_SOURCE_DIR}/tests/${PT4WCT_ADDITIONAL_SOURCE})