From fbe102bada583f308450c27e256053b51643a532 Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Mon, 6 Sep 2010 14:54:16 +0200 Subject: [PATCH] threads: Build a libssh threading library. --- ConfigureChecks.cmake | 2 - include/libssh/threads.h | 6 +- src/CMakeLists.txt | 3 + src/threads/CMakeLists.txt | 109 +++++++++++++++++++++++++++++++++++++ src/threads/native.c | 4 ++ src/threads/pthread.c | 3 + tests/CMakeLists.txt | 8 ++- 7 files changed, 129 insertions(+), 6 deletions(-) create mode 100644 src/threads/CMakeLists.txt create mode 100644 src/threads/native.c diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake index d6f67df7..fc17f61d 100644 --- a/ConfigureChecks.cmake +++ b/ConfigureChecks.cmake @@ -128,8 +128,6 @@ endif (Z_LIBRARY) if (CMAKE_HAVE_THREADS_LIBRARY) if (CMAKE_HAVE_PTHREADS_CREATE OR CMAKE_HAVE_PTHREAD_CREATE) set(HAVE_PTHREAD 1) - - set(LIBSSH_REQUIRED_LIBRARIES ${LIBSSH_REQUIRED_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) endif (CMAKE_HAVE_PTHREADS_CREATE OR CMAKE_HAVE_PTHREAD_CREATE) endif (CMAKE_HAVE_THREADS_LIBRARY) diff --git a/include/libssh/threads.h b/include/libssh/threads.h index d83e4219..78149d90 100644 --- a/include/libssh/threads.h +++ b/include/libssh/threads.h @@ -22,10 +22,10 @@ #ifndef THREADS_H_ #define THREADS_H_ +#include #include -int ssh_threads_init(void); -void ssh_threads_finalize(void); - +LIBSSH_API int ssh_threads_init(void); +LIBSSH_API void ssh_threads_finalize(void); #endif /* THREADS_H_ */ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b158ae6c..8f20c7b8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -202,3 +202,6 @@ if (WITH_STATIC_LIB) ) endif (WITH_STATIC_LIB) +if (CMAKE_HAVE_THREADS_LIBRARY) + add_subdirectory(threads) +endif (CMAKE_HAVE_THREADS_LIBRARY) diff --git a/src/threads/CMakeLists.txt b/src/threads/CMakeLists.txt new file mode 100644 index 00000000..1cf3d7b1 --- /dev/null +++ b/src/threads/CMakeLists.txt @@ -0,0 +1,109 @@ +project(libssh-threads C) + +set(LIBSSH_THREADS_PUBLIC_INCLUDE_DIRS + ${CMAKE_SOURCE_DIR}/include + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_SOURCE_DIR} + CACHE INTERNAL "libssh public include directories" +) + +set(LIBSSH_PRIVATE_INCLUDE_DIRS + ${CMAKE_BINARY_DIR} +) + +set(LIBSSH_THREADS_SHARED_LIBRARY + ssh_threads_shared + CACHE INTERNAL "libssh threads shared library" +) + +if (WITH_STATIC_LIB) + set(LIBSSH_THREADS_STATIC_LIBRARY + ssh_threads_static + CACHE INTERNAL "libssh threads static library" + ) +endif (WITH_STATIC_LIB) + +set(LIBSSH_THREADS_LINK_LIBRARIES + ${LIBSSH_LINK_LIBRARIES} +) + +set(LIBSSH_THREADS_LINK_LIBRARIES + ${LIBSSH_THREADS_LINK_LIBRARIES} + CACHE INTERNAL "libssh threads link libraries" +) + +set(libssh_threads_SRCS + native.c +) + +# build and link pthread +if (CMAKE_HAVE_PTHREADS_CREATE OR CMAKE_HAVE_PTHREAD_CREATE) + set(libssh_threads_SRCS + ${libssh_threads_SRCS} + pthread.c + ) + + set(LIBSSH_THREADS_LINK_LIBRARIES + ${LIBSSH_THREADS_LINK_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT} + ) +endif (CMAKE_HAVE_PTHREADS_CREATE OR CMAKE_HAVE_PTHREAD_CREATE) + +include_directories( + ${LIBSSH_THREADS_PUBLIC_INCLUDE_DIRS} + ${LIBSSH_THREADS_PRIVATE_INCLUDE_DIRS} +) + +add_library(${LIBSSH_THREADS_SHARED_LIBRARY} SHARED ${libssh_threads_SRCS}) + +target_link_libraries(${LIBSSH_THREADS_SHARED_LIBRARY} ${LIBSSH_THREADS_LINK_LIBRARIES}) + +set_target_properties( + ${LIBSSH_THREADS_SHARED_LIBRARY} + PROPERTIES + VERSION + ${LIBRARY_VERSION} + SOVERSION + ${LIBRARY_SOVERSION} + OUTPUT_NAME + ssh_threads + DEFINE_SYMBOL + LIBSSH_EXPORTS +) + +if (WITH_VISIBILITY_HIDDEN) + set_target_properties(${LIBSSH_THREADS_SHARED_LIBRARY} PROPERTIES COMPILE_FLAGS "-fvisibility=hidden") +endif (WITH_VISIBILITY_HIDDEN) + +install( + TARGETS + ${LIBSSH_THREADS_SHARED_LIBRARY} + RUNTIME DESTINATION ${BIN_INSTALL_DIR} + LIBRARY DESTINATION ${LIB_INSTALL_DIR} + ARCHIVE DESTINATION ${LIB_INSTALL_DIR} + COMPONENT libraries +) + +if (WITH_STATIC_LIB) + add_library(${LIBSSH_THREADS_STATIC_LIBRARY} STATIC ${libssh_threads_SRCS}) + + set_target_properties( + ${LIBSSH_THREADS_STATIC_LIBRARY} + PROPERTIES + VERSION + ${LIBRARY_VERSION} + SOVERSION + ${LIBRARY_SOVERSION} + COMPILE_FLAGS + "-DLIBSSH_STATIC" + ) + + install( + TARGETS + ${LIBSSH_THREADS_STATIC_LIBRARY} + DESTINATION + ${LIB_INSTALL_DIR} + COMPONENT + libraries + ) +endif (WITH_STATIC_LIB) diff --git a/src/threads/native.c b/src/threads/native.c new file mode 100644 index 00000000..c65c18e4 --- /dev/null +++ b/src/threads/native.c @@ -0,0 +1,4 @@ +#include "config.h" +#include + +struct ssh_threads_callbacks_struct ssh_pthread_callbacks; diff --git a/src/threads/pthread.c b/src/threads/pthread.c index 2f62ad3c..35589cc7 100644 --- a/src/threads/pthread.c +++ b/src/threads/pthread.c @@ -20,10 +20,12 @@ */ #include "config.h" +#include #ifdef HAVE_PTHREAD #include +#include #include /** @brief Defines the needed callbacks for pthread. Use this if your @@ -81,4 +83,5 @@ static struct ssh_threads_callbacks_struct name= \ } SSH_THREADS_PTHREAD(ssh_pthread_user_callbacks); + #endif /* HAVE_PTHREAD */ diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 64811e29..8d1cb1e0 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -16,7 +16,13 @@ include_directories( # create test library add_library(${TORTURE_LIBRARY} SHARED torture.c cmdline.c) -target_link_libraries(${TORTURE_LIBRARY} ${CHECK_LIBRARIES} ${LIBSSH_STATIC_LIBRARY} ${LIBSSH_LINK_LIBRARIES} ${ARGP_LIBRARIES}) +target_link_libraries(${TORTURE_LIBRARY} + ${CHECK_LIBRARIES} + ${LIBSSH_STATIC_LIBRARY} + ${LIBSSH_THREADS_STATIC_LIBRARY} + ${LIBSSH_LINK_LIBRARIES} + ${ARGP_LIBRARIES} +) set(TEST_TARGET_LIBRARIES ${SUPPORT_LIBRARY} ${LIBSSH_LINK_LIBRARIES})