Hi,
here's a diff to fix cmake to make it correctly detect -pthread (atm it
tries -lpthread & is happy with it), in order to have cmake-using ports
correctly link with -pthread, by forcing CMAKE_USE_PTHREADS_INIT.
it went in a bulk build run by jasper@ without fallouts... so i'm asking
for comments and oks here.
Ah, and before someone asks, no i'm not working on cmake 2.6, and won't
:)
Landry
Index: Makefile
===================================================================
RCS file: /cvs/ports/devel/cmake/Makefile,v
retrieving revision 1.16
diff -u -r1.16 Makefile
--- Makefile 14 Mar 2009 18:59:36 -0000 1.16
+++ Makefile 4 Sep 2009 08:50:20 -0000
@@ -4,7 +4,7 @@
CATEGORIES= devel
COMMENT= portable build system
DISTNAME= cmake-2.4.8
-PKGNAME= ${DISTNAME}p1
+PKGNAME= ${DISTNAME}p2
MASTER_SITES= ${HOMEPAGE}files/v2.4/
MAINTAINER= Marc Espie <[email protected]>
Index: patches/patch-Modules_FindThreads_cmake
===================================================================
RCS file: patches/patch-Modules_FindThreads_cmake
diff -N patches/patch-Modules_FindThreads_cmake
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-Modules_FindThreads_cmake 4 Sep 2009 08:50:20 -0000
@@ -0,0 +1,68 @@
+$OpenBSD$
+don't test for -lpthread, so it fallbacks to -pthread
+--- Modules/FindThreads.cmake.orig Mon Jan 21 19:59:51 2008
++++ Modules/FindThreads.cmake Fri Sep 4 10:30:59 2009
+@@ -24,60 +24,9 @@ ELSE(CMAKE_HAVE_SPROC_H)
+ IF(CMAKE_HAVE_PTHREAD_H)
+ # We have pthread.h
+ # Let's check for the library now.
+- SET(CMAKE_HAVE_THREADS_LIBRARY)
+- IF(NOT THREADS_HAVE_PTHREAD_ARG)
+- # Do we have -lpthreads
+- CHECK_LIBRARY_EXISTS(pthreads pthread_create ""
CMAKE_HAVE_PTHREADS_CREATE)
+- IF(CMAKE_HAVE_PTHREADS_CREATE)
+- SET(CMAKE_THREAD_LIBS_INIT "-lpthreads")
+- SET(CMAKE_HAVE_THREADS_LIBRARY 1)
+- ENDIF(CMAKE_HAVE_PTHREADS_CREATE)
+- # Ok, how about -lpthread
+- CHECK_LIBRARY_EXISTS(pthread pthread_create ""
CMAKE_HAVE_PTHREAD_CREATE)
+- IF(CMAKE_HAVE_PTHREAD_CREATE)
+- SET(CMAKE_THREAD_LIBS_INIT "-lpthread")
+- SET(CMAKE_HAVE_THREADS_LIBRARY 1)
+- ENDIF(CMAKE_HAVE_PTHREAD_CREATE)
+- IF(CMAKE_SYSTEM MATCHES "SunOS.*")
+- # On sun also check for -lthread
+- CHECK_LIBRARY_EXISTS(thread thr_create "" CMAKE_HAVE_THR_CREATE)
+- IF(CMAKE_HAVE_THR_CREATE)
+- SET(CMAKE_THREAD_LIBS_INIT "-lthread")
+- SET(CMAKE_HAVE_THREADS_LIBRARY 1)
+- ENDIF(CMAKE_HAVE_THR_CREATE)
+- ENDIF(CMAKE_SYSTEM MATCHES "SunOS.*")
+- ENDIF(NOT THREADS_HAVE_PTHREAD_ARG)
+-
+- IF(NOT CMAKE_HAVE_THREADS_LIBRARY)
+- # If we did not found -lpthread, -lpthread, or -lthread, look for
-pthread
+- IF("THREADS_HAVE_PTHREAD_ARG" MATCHES "^THREADS_HAVE_PTHREAD_ARG")
+- MESSAGE(STATUS "Check if compiler accepts -pthread")
+- TRY_RUN(THREADS_PTHREAD_ARG THREADS_HAVE_PTHREAD_ARG
+- ${CMAKE_BINARY_DIR}
+- ${CMAKE_ROOT}/Modules/CheckForPthreads.c
+- CMAKE_FLAGS -DLINK_LIBRARIES:STRING=-pthread
+- OUTPUT_VARIABLE OUTPUT)
+- IF(THREADS_HAVE_PTHREAD_ARG)
+- IF(THREADS_PTHREAD_ARG MATCHES "^2$")
+- MESSAGE(STATUS "Check if compiler accepts -pthread - yes")
+- ELSE(THREADS_PTHREAD_ARG MATCHES "^2$")
+- MESSAGE(STATUS "Check if compiler accepts -pthread - no")
+- FILE(APPEND
+- ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+- "Determining if compiler accepts -pthread returned
${THREADS_PTHREAD_ARG} instead of 2. The compiler had the following
output:\n${OUTPUT}\n\n")
+- ENDIF(THREADS_PTHREAD_ARG MATCHES "^2$")
+- ELSE(THREADS_HAVE_PTHREAD_ARG)
+- MESSAGE(STATUS "Check if compiler accepts -pthread - no")
+- FILE(APPEND
+- ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+- "Determining if compiler accepts -pthread failed with the
following output:\n${OUTPUT}\n\n")
+- ENDIF(THREADS_HAVE_PTHREAD_ARG)
+- ENDIF("THREADS_HAVE_PTHREAD_ARG" MATCHES "^THREADS_HAVE_PTHREAD_ARG")
+- IF(THREADS_HAVE_PTHREAD_ARG)
+- SET(CMAKE_THREAD_LIBS_INIT "-pthread")
+- ELSE(THREADS_HAVE_PTHREAD_ARG)
+- ENDIF(THREADS_HAVE_PTHREAD_ARG)
+- ENDIF(NOT CMAKE_HAVE_THREADS_LIBRARY)
++ SET(CMAKE_HAVE_PTHREAD_CREATE 1)
++ SET(CMAKE_HAVE_THREADS_LIBRARY 1)
++ SET(CMAKE_THREAD_LIBS_INIT "-pthread")
+ ENDIF(CMAKE_HAVE_PTHREAD_H)
+ ENDIF(CMAKE_HAVE_SPROC_H)
+