File: FindPthreads.cmake

package info (click to toggle)
casacore 3.8.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 51,912 kB
  • sloc: cpp: 471,569; fortran: 16,372; ansic: 7,416; yacc: 4,714; lex: 2,346; sh: 1,865; python: 629; perl: 531; sed: 499; csh: 201; makefile: 32
file content (91 lines) | stat: -rw-r--r-- 2,924 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# Find the Pthreads library
# This module searches for the Pthreads library (including the
# pthreads-win32 port).
#
# This module defines these variables:
#
#  PTHREADS_FOUND       - True if the Pthreads library was found
#  PTHREADS_LIBRARY     - The location of the Pthreads library
#  PTHREADS_INCLUDE_DIR - The include directory of the Pthreads library
#  PTHREADS_DEFINITIONS - Preprocessor definitions to define (HAVE_PTHREAD_H is a fairly common one)
#
# This module responds to the PTHREADS_EXCEPTION_SCHEME
# variable on Win32 to allow the user to control the
# library linked against.  The Pthreads-win32 port
# provides the ability to link against a version of the
# library with exception handling.	IT IS NOT RECOMMENDED
# THAT YOU CHANGE PTHREADS_EXCEPTION_SCHEME TO ANYTHING OTHER THAN
# "C" because most POSIX thread implementations do not support stack
# unwinding.
#
#  PTHREADS_EXCEPTION_SCHEME
#	   C  = no exceptions (default)
#		  (NOTE: This is the default scheme on most POSIX thread
#		   implementations and what you should probably be using)
#	   CE = C++ Exception Handling
#	   SE = Structure Exception Handling (MSVC only)
#

#
# Define a default exception scheme to link against
# and validate user choice.
#
IF(NOT DEFINED PTHREADS_EXCEPTION_SCHEME)
	# Assign default if needed
	SET(PTHREADS_EXCEPTION_SCHEME "C")
ELSE(NOT DEFINED PTHREADS_EXCEPTION_SCHEME)
	# Validate
	IF(NOT PTHREADS_EXCEPTION_SCHEME STREQUAL "C" AND
	   NOT PTHREADS_EXCEPTION_SCHEME STREQUAL "CE" AND
	   NOT PTHREADS_EXCEPTION_SCHEME STREQUAL "SE")

	MESSAGE(FATAL_ERROR "See documentation for FindPthreads.cmake, only C, CE, and SE modes are allowed")

	ENDIF(NOT PTHREADS_EXCEPTION_SCHEME STREQUAL "C" AND
		  NOT PTHREADS_EXCEPTION_SCHEME STREQUAL "CE" AND
		  NOT PTHREADS_EXCEPTION_SCHEME STREQUAL "SE")

	 IF(NOT MSVC AND PTHREADS_EXCEPTION_SCHEME STREQUAL "SE")
		 MESSAGE(FATAL_ERROR "Structured Exception Handling is only allowed for MSVC")
	 ENDIF(NOT MSVC AND PTHREADS_EXCEPTION_SCHEME STREQUAL "SE")

ENDIF(NOT DEFINED PTHREADS_EXCEPTION_SCHEME)

#
# Find the header file
#
FIND_PATH(PTHREADS_INCLUDE_DIR pthread.h)

#
# Find the library
#
SET(names)
IF(MSVC)
	SET(names
			pthreadV${PTHREADS_EXCEPTION_SCHEME}2
			pthread
	)
ELSEIF(MINGW)
	SET(names
			pthreadG${PTHREADS_EXCEPTION_SCHEME}2
			pthread
	)
ELSE(MSVC) # Unix / Cygwin / Apple / Etc.
	SET(names pthread)
ENDIF(MSVC)
	
FIND_LIBRARY(PTHREADS_LIBRARY ${names}
	DOC "The Portable Threads Library")

INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Pthreads DEFAULT_MSG
	PTHREADS_LIBRARY PTHREADS_INCLUDE_DIR)

IF(PTHREADS_INCLUDE_DIR AND PTHREADS_LIBRARY)
	SET(PTHREADS_DEFINITIONS -DHAVE_PTHREAD_H)
	SET(PTHREADS_INCLUDE_DIRS ${PTHREADS_INCLUDE_DIR})
	SET(PTHREADS_LIBRARIES	  ${PTHREADS_LIBRARY})
ENDIF(PTHREADS_INCLUDE_DIR AND PTHREADS_LIBRARY)

MARK_AS_ADVANCED(PTHREADS_INCLUDE_DIR)
MARK_AS_ADVANCED(PTHREADS_LIBRARY)