1# 2# SRT - Secure, Reliable, Transport 3# Copyright (c) 2021 Haivision Systems Inc. 4# 5# This Source Code Form is subject to the terms of the Mozilla Public 6# License, v. 2.0. If a copy of the MPL was not distributed with this 7# file, You can obtain one at http://mozilla.org/MPL/2.0/. 8# 9 10# Check for pthread_getname_np(3) and pthread_setname_np(3) 11# used in srtcore/threadname.h. 12# 13# Some BSD distros need to include <pthread_np.h> for pthread_getname_np(). 14# 15# TODO: Some BSD distros have pthread_get_name_np() and pthread_set_name_np() 16# instead of pthread_getname_np() and pthread_setname_np(). 17# 18# Sets: 19# HAVE_PTHREAD_GETNAME_NP_IN_PTHREAD_NP_H 20# HAVE_PTHREAD_SETNAME_NP_IN_PTHREAD_NP_H 21# HAVE_PTHREAD_GETNAME_NP 22# HAVE_PTHREAD_SETNAME_NP 23# Sets as appropriate: 24# add_definitions(-DHAVE_PTHREAD_GETNAME_NP_IN_PTHREAD_NP_H=1) 25# add_definitions(-DHAVE_PTHREAD_SETNAME_NP_IN_PTHREAD_NP_H=1) 26# add_definitions(-DHAVE_PTHREAD_GETNAME_NP=1) 27# add_definitions(-DHAVE_PTHREAD_SETNAME_NP=1) 28 29include(CheckSymbolExists) 30 31function(FindPThreadGetSetName) 32 33 unset(HAVE_PTHREAD_GETNAME_NP_IN_PTHREAD_NP_H CACHE) 34 unset(HAVE_PTHREAD_SETNAME_NP_IN_PTHREAD_NP_H CACHE) 35 unset(HAVE_PTHREAD_GETNAME_NP CACHE) 36 unset(HAVE_PTHREAD_SETNAME_NP CACHE) 37 38 set(CMAKE_REQUIRED_DEFINITIONS 39 -D_GNU_SOURCE -D_DARWIN_C_SOURCE -D_POSIX_SOURCE=1) 40 set(CMAKE_REQUIRED_FLAGS "-pthread") 41 42 message(STATUS "Checking for pthread_(g/s)etname_np in 'pthread_np.h':") 43 check_symbol_exists( 44 pthread_getname_np "pthread_np.h" HAVE_PTHREAD_GETNAME_NP_IN_PTHREAD_NP_H) 45 if (HAVE_PTHREAD_GETNAME_NP_IN_PTHREAD_NP_H) 46 add_definitions(-DHAVE_PTHREAD_GETNAME_NP_IN_PTHREAD_NP_H=1) 47 endif() 48 check_symbol_exists( 49 pthread_setname_np "pthread_np.h" HAVE_PTHREAD_SETNAME_NP_IN_PTHREAD_NP_H) 50 if (HAVE_PTHREAD_SETNAME_NP_IN_PTHREAD_NP_H) 51 add_definitions(-DHAVE_PTHREAD_SETNAME_NP_IN_PTHREAD_NP_H=1) 52 endif() 53 54 message(STATUS "Checking for pthread_(g/s)etname_np in 'pthread.h':") 55 check_symbol_exists(pthread_getname_np "pthread.h" HAVE_PTHREAD_GETNAME_NP) 56 if (HAVE_PTHREAD_GETNAME_NP_IN_PTHREAD_NP_H) 57 set(HAVE_PTHREAD_GETNAME_NP 1 CACHE INTERNAL "" FORCE) 58 endif() 59 check_symbol_exists(pthread_setname_np "pthread.h" HAVE_PTHREAD_SETNAME_NP) 60 if (HAVE_PTHREAD_SETNAME_NP_IN_PTHREAD_NP_H) 61 set(HAVE_PTHREAD_SETNAME_NP 1 CACHE INTERNAL "" FORCE) 62 endif() 63 if (HAVE_PTHREAD_GETNAME_NP) 64 add_definitions(-DHAVE_PTHREAD_GETNAME_NP=1) 65 endif() 66 if (HAVE_PTHREAD_SETNAME_NP) 67 add_definitions(-DHAVE_PTHREAD_SETNAME_NP=1) 68 endif() 69 70 unset(CMAKE_REQUIRED_DEFINITIONS) 71 unset(CMAKE_REQUIRED_FLAGS) 72 73endfunction(FindPThreadGetSetName) 74