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 <es...@openbsd.org>
 
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)
+ 

Reply via email to