mirror of
https://github.com/opnsense/src.git
synced 2026-04-28 17:49:22 -04:00
152 lines
5 KiB
CMake
152 lines
5 KiB
CMake
# ==============================================================================
|
|
# This is a heavily modified version of FindPthreads.cmake for the pcap project.
|
|
# It's meant to find Pthreads-w32, an implementation of the
|
|
# Threads component of the POSIX 1003.1c 1995 Standard (or later)
|
|
# for Microsoft's WIndows.
|
|
#
|
|
# Apart from this notice, this module "enjoys" the following modifications:
|
|
#
|
|
# - changed its name to FindPthreads-w32.cmake to not conflict with FindThreads.cmake
|
|
#
|
|
# - users may be able to use the environment variable PTHREADS_ROOT to point
|
|
# cmake to the *root* of their Pthreads-w32 installation.
|
|
# Alternatively, PTHREADS_ROOT may also be set from cmake command line or GUI
|
|
# (-DPTHREADS_ROOT=/path/to/Pthreads-w32)
|
|
# Two other variables that can be defined in a similar fashion are
|
|
# PTHREAD_INCLUDE_PATH and PTHREAD_LIBRARY_PATH.
|
|
#
|
|
# - added some additional status/error messages
|
|
#
|
|
# - changed formating (uppercase to lowercare + indentation)
|
|
#
|
|
# - removed some stuff
|
|
#
|
|
# - when searching for Pthreads-win32 libraries, the directory structure of the
|
|
# pre-build binaries folder found in the pthreads-win32 CVS code repository is
|
|
# considered (e.i /Pre-built.2/lib/x64 /Pre-built.2/lib/x86)
|
|
#
|
|
# Send suggestion, patches, gifts and praises to pcap's developers.
|
|
# ==============================================================================
|
|
#
|
|
# Find the Pthreads library
|
|
# This module searches for the Pthreads-win32 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)
|
|
|
|
if(PTHREADS_ROOT)
|
|
set(PTHREADS_ROOT PATHS ${PTHREADS_ROOT} NO_DEFAULT_PATH)
|
|
else()
|
|
set(PTHREADS_ROOT $ENV{PTHREADS_ROOT})
|
|
endif(PTHREADS_ROOT)
|
|
|
|
#
|
|
# Find the header file
|
|
#
|
|
find_path(PTHREADS_INCLUDE_DIR
|
|
NAMES pthread.h
|
|
HINTS
|
|
$ENV{PTHREAD_INCLUDE_PATH}
|
|
${PTHREADS_ROOT}/include
|
|
)
|
|
|
|
if(PTHREADS_INCLUDE_DIR)
|
|
message(STATUS "Found pthread.h: ${PTHREADS_INCLUDE_DIR}")
|
|
# else()
|
|
# message(FATAL_ERROR "Could not find pthread.h. See README.Win32 for more information.")
|
|
endif(PTHREADS_INCLUDE_DIR)
|
|
|
|
#
|
|
# Find the library
|
|
#
|
|
set(names)
|
|
if(MSVC)
|
|
set(names
|
|
pthreadV${PTHREADS_EXCEPTION_SCHEME}2
|
|
libpthread
|
|
)
|
|
elseif(MINGW)
|
|
set(names
|
|
pthreadG${PTHREADS_EXCEPTION_SCHEME}2
|
|
pthread
|
|
)
|
|
endif(MSVC)
|
|
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
set(SUBDIR "/x86")
|
|
elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
set(SUBDIR "/x64")
|
|
endif()
|
|
|
|
find_library(PTHREADS_LIBRARY NAMES ${names}
|
|
DOC "The Portable Threads Library"
|
|
HINTS
|
|
${CMAKE_SOURCE_DIR}/lib
|
|
$ENV{PTHREAD_LIBRARY_PATH}
|
|
${PTHREADS_ROOT}
|
|
C:/MinGW/lib/
|
|
PATH_SUFFIXES lib/${SUBDIR}
|
|
)
|
|
|
|
if(PTHREADS_LIBRARY)
|
|
message(STATUS "Found PTHREADS library: ${PTHREADS_LIBRARY} (PTHREADS Exception Scheme: ${PTHREADS_EXCEPTION_SCHEME})")
|
|
# else()
|
|
# message(FATAL_ERROR "Could not find PTHREADS LIBRARY. See README.Win32 for more information.")
|
|
endif(PTHREADS_LIBRARY)
|
|
|
|
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})
|
|
set(PTHREADS_FOUND TRUE)
|
|
endif(PTHREADS_INCLUDE_DIR AND PTHREADS_LIBRARY)
|
|
|
|
mark_as_advanced(PTHREADS_INCLUDE_DIR PTHREADS_LIBRARY)
|