parent
ff50e0beda
commit
229ebd2ff2
@ -0,0 +1,246 @@ |
|||||||
|
# Updated FindThreads.cmake that supports pthread-win32 |
||||||
|
# Downloaded from http://www.vtk.org/Bug/bug_view_advanced_page.php?bug_id=6399 |
||||||
|
|
||||||
|
# - This module determines the thread library of the system. |
||||||
|
# |
||||||
|
# The following variables are set |
||||||
|
# CMAKE_THREAD_LIBS_INIT - the thread library |
||||||
|
# CMAKE_USE_SPROC_INIT - are we using sproc? |
||||||
|
# CMAKE_USE_WIN32_THREADS_INIT - using WIN32 threads? |
||||||
|
# CMAKE_USE_PTHREADS_INIT - are we using pthreads |
||||||
|
# CMAKE_HP_PTHREADS_INIT - are we using hp pthreads |
||||||
|
# |
||||||
|
# If use of pthreads-win32 is desired, the following variables |
||||||
|
# can be set. |
||||||
|
# |
||||||
|
# THREADS_USE_PTHREADS_WIN32 - |
||||||
|
# Setting this to true searches for the pthreads-win32 |
||||||
|
# port (since CMake 2.8.0) |
||||||
|
# |
||||||
|
# THREADS_PTHREADS_WIN32_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) |
||||||
|
# (NOTE: Changing this option from the default may affect |
||||||
|
# the portability of your application. See pthreads-win32 |
||||||
|
# documentation for more details.) |
||||||
|
# |
||||||
|
#====================================================== |
||||||
|
# Example usage where threading library |
||||||
|
# is provided by the system: |
||||||
|
# |
||||||
|
# find_package(Threads REQUIRED) |
||||||
|
# add_executable(foo foo.cc) |
||||||
|
# target_link_libraries(foo ${CMAKE_THREAD_LIBS_INIT}) |
||||||
|
# |
||||||
|
# Example usage if pthreads-win32 is desired on Windows |
||||||
|
# or a system provided thread library: |
||||||
|
# |
||||||
|
# set(THREADS_USE_PTHREADS_WIN32 true) |
||||||
|
# find_package(Threads REQUIRED) |
||||||
|
# include_directories(${THREADS_PTHREADS_INCLUDE_DIR}) |
||||||
|
# |
||||||
|
# add_executable(foo foo.cc) |
||||||
|
# target_link_libraries(foo ${CMAKE_THREAD_LIBS_INIT}) |
||||||
|
# |
||||||
|
|
||||||
|
INCLUDE (CheckIncludeFiles) |
||||||
|
INCLUDE (CheckLibraryExists) |
||||||
|
SET(Threads_FOUND FALSE) |
||||||
|
|
||||||
|
IF(WIN32 AND NOT CYGWIN AND THREADS_USE_PTHREADS_WIN32) |
||||||
|
SET(_Threads_ptwin32 true) |
||||||
|
ENDIF() |
||||||
|
|
||||||
|
# Do we have sproc? |
||||||
|
IF(CMAKE_SYSTEM MATCHES IRIX) |
||||||
|
CHECK_INCLUDE_FILES("sys/types.h;sys/prctl.h" CMAKE_HAVE_SPROC_H) |
||||||
|
ENDIF() |
||||||
|
|
||||||
|
IF(CMAKE_HAVE_SPROC_H) |
||||||
|
# We have sproc |
||||||
|
SET(CMAKE_USE_SPROC_INIT 1) |
||||||
|
|
||||||
|
ELSEIF(_Threads_ptwin32) |
||||||
|
|
||||||
|
IF(NOT DEFINED THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME) |
||||||
|
# Assign the default scheme |
||||||
|
SET(THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME "C") |
||||||
|
ELSE() |
||||||
|
# Validate the scheme specified by the user |
||||||
|
IF(NOT THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME STREQUAL "C" AND |
||||||
|
NOT THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME STREQUAL "CE" AND |
||||||
|
NOT THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME STREQUAL "SE") |
||||||
|
MESSAGE(FATAL_ERROR "See documentation for FindPthreads.cmake, only C, CE, and SE modes are allowed") |
||||||
|
ENDIF() |
||||||
|
IF(NOT MSVC AND THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME STREQUAL "SE") |
||||||
|
MESSAGE(FATAL_ERROR "Structured Exception Handling is only allowed for MSVC") |
||||||
|
ENDIF(NOT MSVC AND THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME STREQUAL "SE") |
||||||
|
ENDIF() |
||||||
|
|
||||||
|
FIND_PATH(THREADS_PTHREADS_INCLUDE_DIR pthread.h) |
||||||
|
|
||||||
|
# Determine the library filename |
||||||
|
IF(MSVC) |
||||||
|
SET(_Threads_pthreads_libname |
||||||
|
pthreadV${THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME}2) |
||||||
|
ELSEIF(MINGW) |
||||||
|
SET(_Threads_pthreads_libname |
||||||
|
pthreadG${THREADS_PTHREADS_WIN32_EXCEPTION_SCHEME}2) |
||||||
|
ELSE() |
||||||
|
MESSAGE(FATAL_ERROR "This should never happen") |
||||||
|
ENDIF() |
||||||
|
|
||||||
|
# Use the include path to help find the library if possible |
||||||
|
SET(_Threads_lib_paths "") |
||||||
|
IF(THREADS_PTHREADS_INCLUDE_DIR) |
||||||
|
GET_FILENAME_COMPONENT(_Threads_root_dir |
||||||
|
${THREADS_PTHREADS_INCLUDE_DIR} PATH) |
||||||
|
SET(_Threads_lib_paths ${_Threads_root_dir}/lib) |
||||||
|
ENDIF() |
||||||
|
FIND_LIBRARY(THREADS_PTHREADS_WIN32_LIBRARY |
||||||
|
NAMES ${_Threads_pthreads_libname} |
||||||
|
PATHS ${_Threads_lib_paths} |
||||||
|
DOC "The Portable Threads Library for Win32" |
||||||
|
NO_SYSTEM_PATH |
||||||
|
) |
||||||
|
|
||||||
|
IF(THREADS_PTHREADS_INCLUDE_DIR AND THREADS_PTHREADS_WIN32_LIBRARY) |
||||||
|
MARK_AS_ADVANCED(THREADS_PTHREADS_INCLUDE_DIR) |
||||||
|
SET(CMAKE_THREAD_LIBS_INIT ${THREADS_PTHREADS_WIN32_LIBRARY}) |
||||||
|
SET(CMAKE_HAVE_THREADS_LIBRARY 1) |
||||||
|
SET(Threads_FOUND TRUE) |
||||||
|
ENDIF() |
||||||
|
|
||||||
|
MARK_AS_ADVANCED(THREADS_PTHREADS_WIN32_LIBRARY) |
||||||
|
|
||||||
|
ELSE() |
||||||
|
# Do we have pthreads? |
||||||
|
CHECK_INCLUDE_FILES("pthread.h" CMAKE_HAVE_PTHREAD_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) |
||||||
|
SET(Threads_FOUND TRUE) |
||||||
|
ENDIF() |
||||||
|
|
||||||
|
# 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(Threads_FOUND TRUE) |
||||||
|
SET(CMAKE_HAVE_THREADS_LIBRARY 1) |
||||||
|
ENDIF() |
||||||
|
|
||||||
|
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) |
||||||
|
SET(Threads_FOUND TRUE) |
||||||
|
ENDIF() |
||||||
|
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 |
||||||
|
COMPILE_OUTPUT_VARIABLE OUTPUT) |
||||||
|
|
||||||
|
IF(THREADS_HAVE_PTHREAD_ARG) |
||||||
|
IF(THREADS_PTHREAD_ARG MATCHES "^2$") |
||||||
|
SET(Threads_FOUND TRUE) |
||||||
|
MESSAGE(STATUS "Check if compiler accepts -pthread - yes") |
||||||
|
ELSE() |
||||||
|
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() |
||||||
|
ELSE() |
||||||
|
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() |
||||||
|
|
||||||
|
ENDIF("THREADS_HAVE_PTHREAD_ARG" MATCHES "^THREADS_HAVE_PTHREAD_ARG") |
||||||
|
|
||||||
|
IF(THREADS_HAVE_PTHREAD_ARG) |
||||||
|
SET(Threads_FOUND TRUE) |
||||||
|
SET(CMAKE_THREAD_LIBS_INIT "-pthread") |
||||||
|
ENDIF() |
||||||
|
|
||||||
|
ENDIF(NOT CMAKE_HAVE_THREADS_LIBRARY) |
||||||
|
ENDIF(CMAKE_HAVE_PTHREAD_H) |
||||||
|
ENDIF() |
||||||
|
|
||||||
|
IF(CMAKE_THREAD_LIBS_INIT) |
||||||
|
SET(CMAKE_USE_PTHREADS_INIT 1) |
||||||
|
SET(Threads_FOUND TRUE) |
||||||
|
ENDIF() |
||||||
|
|
||||||
|
IF(CMAKE_SYSTEM MATCHES "Windows" |
||||||
|
AND NOT THREADS_USE_PTHREADS_WIN32) |
||||||
|
SET(CMAKE_USE_WIN32_THREADS_INIT 1) |
||||||
|
SET(Threads_FOUND TRUE) |
||||||
|
ENDIF() |
||||||
|
|
||||||
|
IF(CMAKE_USE_PTHREADS_INIT) |
||||||
|
IF(CMAKE_SYSTEM MATCHES "HP-UX-*") |
||||||
|
# Use libcma if it exists and can be used. It provides more |
||||||
|
# symbols than the plain pthread library. CMA threads |
||||||
|
# have actually been deprecated: |
||||||
|
# http://docs.hp.com/en/B3920-90091/ch12s03.html#d0e11395 |
||||||
|
# http://docs.hp.com/en/947/d8.html |
||||||
|
# but we need to maintain compatibility here. |
||||||
|
# The CMAKE_HP_PTHREADS setting actually indicates whether CMA threads |
||||||
|
# are available. |
||||||
|
CHECK_LIBRARY_EXISTS(cma pthread_attr_create "" CMAKE_HAVE_HP_CMA) |
||||||
|
IF(CMAKE_HAVE_HP_CMA) |
||||||
|
SET(CMAKE_THREAD_LIBS_INIT "-lcma") |
||||||
|
SET(CMAKE_HP_PTHREADS_INIT 1) |
||||||
|
SET(Threads_FOUND TRUE) |
||||||
|
ENDIF(CMAKE_HAVE_HP_CMA) |
||||||
|
SET(CMAKE_USE_PTHREADS_INIT 1) |
||||||
|
ENDIF() |
||||||
|
|
||||||
|
IF(CMAKE_SYSTEM MATCHES "OSF1-V*") |
||||||
|
SET(CMAKE_USE_PTHREADS_INIT 0) |
||||||
|
SET(CMAKE_THREAD_LIBS_INIT ) |
||||||
|
ENDIF() |
||||||
|
|
||||||
|
IF(CMAKE_SYSTEM MATCHES "CYGWIN_NT*") |
||||||
|
SET(CMAKE_USE_PTHREADS_INIT 1) |
||||||
|
SET(Threads_FOUND TRUE) |
||||||
|
SET(CMAKE_THREAD_LIBS_INIT ) |
||||||
|
SET(CMAKE_USE_WIN32_THREADS_INIT 0) |
||||||
|
ENDIF() |
||||||
|
ENDIF(CMAKE_USE_PTHREADS_INIT) |
||||||
|
|
||||||
|
INCLUDE(FindPackageHandleStandardArgs) |
||||||
|
IF(_Threads_ptwin32) |
||||||
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Threads DEFAULT_MSG |
||||||
|
THREADS_PTHREADS_WIN32_LIBRARY THREADS_PTHREADS_INCLUDE_DIR) |
||||||
|
ELSE() |
||||||
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Threads DEFAULT_MSG Threads_FOUND) |
||||||
|
ENDIF() |
@ -0,0 +1,29 @@ |
|||||||
|
#ifndef RTLSDR_EXPORT_H |
||||||
|
#define RTLSDR_EXPORT_H |
||||||
|
|
||||||
|
#if defined __GNUC__ |
||||||
|
# if __GNUC__ >= 4 |
||||||
|
# define __SDR_EXPORT __attribute__((visibility("default"))) |
||||||
|
# define __SDR_IMPORT __attribute__((visibility("default"))) |
||||||
|
# else |
||||||
|
# define __SDR_EXPORT |
||||||
|
# define __SDR_IMPORT |
||||||
|
# endif |
||||||
|
#elif _MSC_VER |
||||||
|
# define __SDR_EXPORT __declspec(dllexport) |
||||||
|
# define __SDR_IMPORT __declspec(dllimport) |
||||||
|
#else |
||||||
|
# define __SDR_EXPORT |
||||||
|
# define __SDR_IMPORT |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifndef rtlsdr_STATIC |
||||||
|
# ifdef rtlsdr_EXPORTS |
||||||
|
# define RTLSDR_API __SDR_EXPORT |
||||||
|
# else |
||||||
|
# define RTLSDR_API __SDR_IMPORT |
||||||
|
# endif |
||||||
|
#else |
||||||
|
#define RTLSDR_API |
||||||
|
#endif |
||||||
|
#endif /* RTLSDR_EXPORT_H */ |
Loading…
Reference in new issue