mirror of
https://github.com/haiwen/libsearpc.git
synced 2025-08-31 20:37:07 +00:00
Merge 9de49efc38
into 6f06843849
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@@ -55,3 +55,7 @@ tests/clar.suite
|
||||
tests/.clarcache
|
||||
tests/*.trs
|
||||
test-driver
|
||||
|
||||
.idea
|
||||
*_export.h
|
||||
*build*
|
||||
|
98
CMakeLists.txt
Normal file
98
CMakeLists.txt
Normal file
@@ -0,0 +1,98 @@
|
||||
cmake_minimum_required(VERSION 3.0)
|
||||
project(searpc VERSION 0.0.1 LANGUAGES C)
|
||||
|
||||
set(CMAKE_C_STANDARD 90)
|
||||
cmake_policy(SET CMP0063 NEW)
|
||||
set(CMAKE_C_VISIBILITY_PRESET hidden)
|
||||
set(CMAKE_VISIBILITY_INLINES_HIDDEN YES)
|
||||
|
||||
option(BUILD_SHARED_LIBS "Build using shared libraries" OFF)
|
||||
if (BUILD_SHARED_LIBS)
|
||||
set(LIBRARY_TYPE_FLAG "SHARED")
|
||||
else ()
|
||||
set(LIBRARY_TYPE_FLAG "STATIC")
|
||||
endif ()
|
||||
|
||||
# control where the static and shared libraries are built so that on windows
|
||||
# we don't need to tinker with the path to run the executable
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")
|
||||
|
||||
add_library("${PROJECT_NAME}_compiler_flags" INTERFACE)
|
||||
target_compile_features("${PROJECT_NAME}_compiler_flags" INTERFACE "c_std_${CMAKE_C_STANDARD}")
|
||||
|
||||
set(gcc_like "$<COMPILE_LANG_AND_ID:C,CXX,ARMClang,AppleClang,Clang,GNU>")
|
||||
set(msvc "$<COMPILE_LANG_AND_ID:C,CXX,MSVC>")
|
||||
# -g -fsanitize=address -fno-omit-frame-pointer
|
||||
target_compile_options(
|
||||
"${PROJECT_NAME}_compiler_flags"
|
||||
INTERFACE
|
||||
"$<${gcc_like}:$<BUILD_INTERFACE:-Wall;-Wextra;-Wshadow;-Wformat=2;-Wunused;-pedantic->>"
|
||||
"$<${msvc}:$<BUILD_INTERFACE:-W3;-WX;-Zi;-permissive->>"
|
||||
)
|
||||
if (CMAKE_C_COMPILER_ID STREQUAL "Clang" OR CMAKE_C_COMPILER_ID STREQUAL "AppleClang")
|
||||
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address")
|
||||
set(CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address")
|
||||
endif()
|
||||
|
||||
# configure a header file to pass the version number only
|
||||
configure_file(
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/config.h.in"
|
||||
"${PROJECT_NAME}Config.h"
|
||||
)
|
||||
|
||||
add_subdirectory("lib")
|
||||
|
||||
option(BUILD_TESTS "Build tests" ON)
|
||||
if (BUILD_TESTS)
|
||||
add_subdirectory("tests")
|
||||
endif (BUILD_TESTS)
|
||||
|
||||
install(
|
||||
FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.h"
|
||||
DESTINATION "include"
|
||||
)
|
||||
|
||||
include(InstallRequiredSystemLibraries)
|
||||
set(CPACK_BUNDLE_NAME "${PROJECT_NAME}")
|
||||
set(CPACK_PACKAGE_VENDOR "seafile.com")
|
||||
set(CPACK_PACKAGE_DESCRIPTION "A simple C language RPC framework (including both server side & client side). Python binding is also provided.")
|
||||
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Searpc is a simple C language RPC framework based on GObject system.")
|
||||
if (APPLE)
|
||||
set(CPACK_BUNDLE_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Info.plist")
|
||||
set(CPACK_BUNDLE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Info.plist")
|
||||
set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/cmake/CustomVolumeIcon.icns")
|
||||
endif()
|
||||
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt")
|
||||
set(CPACK_PACKAGE_VERSION_MAJOR "${${PROJECT_NAME}_VERSION_MAJOR}")
|
||||
set(CPACK_PACKAGE_VERSION_MINOR "${${PROJECT_NAME}_VERSION_MINOR}")
|
||||
set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/cmake/README.txt")
|
||||
set(CPACK_RESOURCE_FILE_WELCOME "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Welcome.txt")
|
||||
set(CPACK_PACKAGE_CONTACT "https://github.com/haiwen/lib${PROJECT_NAME}")
|
||||
|
||||
include(CPack)
|
||||
include(CMakePackageConfigHelpers)
|
||||
|
||||
option(BUILD_SHARED_LIBS "Build using shared libraries" ON)
|
||||
if (BUILD_SHARED_LIBS)
|
||||
set(LIBRARY_TYPE_FLAG "SHARED")
|
||||
else ()
|
||||
set(LIBRARY_TYPE_FLAG "STATIC")
|
||||
endif ()
|
||||
|
||||
# generate the config file that is includes the exports
|
||||
configure_package_config_file(
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/Config.cmake.in"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
|
||||
INSTALL_DESTINATION "lib/cmake/example"
|
||||
NO_SET_AND_CHECK_MACRO
|
||||
NO_CHECK_REQUIRED_COMPONENTS_MACRO
|
||||
)
|
||||
|
||||
# generate the version file for the config file
|
||||
write_basic_package_version_file(
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
|
||||
VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}"
|
||||
COMPATIBILITY AnyNewerVersion
|
||||
)
|
BIN
cmake/BundleIcon.icns
Normal file
BIN
cmake/BundleIcon.icns
Normal file
Binary file not shown.
7
cmake/CTestConfig.cmake
Normal file
7
cmake/CTestConfig.cmake
Normal file
@@ -0,0 +1,7 @@
|
||||
set(CTEST_PROJECT_NAME "searpc")
|
||||
set(CTEST_NIGHTLY_START_TIME "00:00:00 EST")
|
||||
|
||||
set(CTEST_DROP_METHOD "http")
|
||||
set(CTEST_DROP_SITE "my.cdash.org")
|
||||
set(CTEST_DROP_LOCATION "/submit.php?project=searpc")
|
||||
set(CTEST_DROP_SITE_CDASH TRUE)
|
4
cmake/Config.cmake.in
Normal file
4
cmake/Config.cmake.in
Normal file
@@ -0,0 +1,4 @@
|
||||
|
||||
@PACKAGE_INIT@
|
||||
|
||||
include ( "${CMAKE_CURRENT_LIST_DIR}/libumkaTargets.cmake" )
|
BIN
cmake/CustomVolumeIcon.icns
Normal file
BIN
cmake/CustomVolumeIcon.icns
Normal file
Binary file not shown.
14
cmake/Info.plist
Normal file
14
cmake/Info.plist
Normal file
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>BundleGeneratorTest</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>BundleGeneratorTest.icns</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
</dict>
|
||||
</plist>
|
6
cmake/MultiCPackConfig.cmake
Normal file
6
cmake/MultiCPackConfig.cmake
Normal file
@@ -0,0 +1,6 @@
|
||||
include("release/CPackConfig.cmake")
|
||||
|
||||
set(CPACK_INSTALL_CMAKE_PROJECTS
|
||||
"debug;searpc;ALL;/"
|
||||
"release;searpc;ALL;/"
|
||||
)
|
1
cmake/README.txt
Normal file
1
cmake/README.txt
Normal file
@@ -0,0 +1 @@
|
||||
Searpc is a simple C language RPC framework based on GObject system.
|
3
cmake/Welcome.txt
Normal file
3
cmake/Welcome.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
Searpc is a simple C language RPC framework based on GObject system.
|
||||
|
||||
http://www.seafile.com
|
9
cmake/config.h.in
Normal file
9
cmake/config.h.in
Normal file
@@ -0,0 +1,9 @@
|
||||
#ifndef SEARPC_CONFIG_H
|
||||
#define SEARPC_CONFIG_H
|
||||
|
||||
#define SEARPC_VERSION_MAJOR @SEARPC_VERSION_MAJOR@
|
||||
#define SEARPC_VERSION_MINOR @SEARPC_VERSION_MINOR@
|
||||
#define SEARPC_VERSION_PATCH @SEARPC_VERSION_PATCH@
|
||||
#define SEARPC_VERSION "@SEARPC_VERSION@"
|
||||
|
||||
#endif /* SEARPC_CONFIG_H */
|
41
cmake/modules/FindJansson.cmake
Normal file
41
cmake/modules/FindJansson.cmake
Normal file
@@ -0,0 +1,41 @@
|
||||
# FROM: https://fossies.org/linux/www/nghttp2-1.46.0.tar.gz/nghttp2-1.46.0/cmake/FindJansson.cmake?m=t
|
||||
# - Try to find jansson
|
||||
# Once done this will define
|
||||
# JANSSON_FOUND - System has jansson
|
||||
# JANSSON_INCLUDE_DIRS - The jansson include directories
|
||||
# JANSSON_LIBRARIES - The libraries needed to use jansson
|
||||
|
||||
find_package(PkgConfig QUIET)
|
||||
pkg_check_modules(PC_JANSSON QUIET jansson)
|
||||
|
||||
find_path(JANSSON_INCLUDE_DIR
|
||||
NAMES jansson.h
|
||||
HINTS ${PC_JANSSON_INCLUDE_DIRS}
|
||||
)
|
||||
find_library(JANSSON_LIBRARY
|
||||
NAMES jansson
|
||||
HINTS ${PC_JANSSON_LIBRARY_DIRS}
|
||||
)
|
||||
|
||||
if(JANSSON_INCLUDE_DIR)
|
||||
set(_version_regex "^#define[ \t]+JANSSON_VERSION[ \t]+\"([^\"]+)\".*")
|
||||
file(STRINGS "${JANSSON_INCLUDE_DIR}/jansson.h"
|
||||
JANSSON_VERSION REGEX "${_version_regex}")
|
||||
string(REGEX REPLACE "${_version_regex}" "\\1"
|
||||
JANSSON_VERSION "${JANSSON_VERSION}")
|
||||
unset(_version_regex)
|
||||
endif()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
# handle the QUIETLY and REQUIRED arguments and set JANSSON_FOUND to TRUE
|
||||
# if all listed variables are TRUE and the requested version matches.
|
||||
find_package_handle_standard_args(Jansson REQUIRED_VARS
|
||||
JANSSON_LIBRARY JANSSON_INCLUDE_DIR
|
||||
VERSION_VAR JANSSON_VERSION)
|
||||
|
||||
if(JANSSON_FOUND)
|
||||
set(JANSSON_LIBRARIES ${JANSSON_LIBRARY})
|
||||
set(JANSSON_INCLUDE_DIRS ${JANSSON_INCLUDE_DIR})
|
||||
endif()
|
||||
|
||||
mark_as_advanced(JANSSON_INCLUDE_DIR JANSSON_LIBRARY)
|
64
lib/CMakeLists.txt
Normal file
64
lib/CMakeLists.txt
Normal file
@@ -0,0 +1,64 @@
|
||||
set(LIBRARY_NAME "searpc")
|
||||
|
||||
set(Header_Files
|
||||
"searpc-client.h"
|
||||
"searpc-named-pipe-transport.h"
|
||||
"searpc-server.h"
|
||||
"searpc-utils.h"
|
||||
"searpc.h"
|
||||
)
|
||||
source_group("Header Files" FILES "${Header_Files}")
|
||||
|
||||
set(Source_Files
|
||||
"searpc-client.c"
|
||||
"searpc-named-pipe-transport.c"
|
||||
"searpc-server.c"
|
||||
"searpc-utils.c"
|
||||
)
|
||||
source_group("Source Files" FILES "${Source_Files}")
|
||||
|
||||
add_library("${LIBRARY_NAME}" "${LIBRARY_TYPE_FLAG}" "${Header_Files}" "${Source_Files}")
|
||||
|
||||
include(FindPkgConfig)
|
||||
pkg_check_modules (GLIB2 glib-2.0)
|
||||
include("../cmake/modules/FindJansson.cmake")
|
||||
if (NOT JANSSON_FOUND)
|
||||
message(FATAL_ERROR "JANSSON required")
|
||||
endif ()
|
||||
|
||||
target_include_directories(
|
||||
"${LIBRARY_NAME}"
|
||||
PUBLIC
|
||||
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
|
||||
"$<INSTALL_INTERFACE:include>"
|
||||
"${GLIB2_STATIC_INCLUDE_DIRS}"
|
||||
"${JANSSON_INCLUDE_DIRS}"
|
||||
)
|
||||
target_link_libraries("${LIBRARY_NAME}" PUBLIC "${GLIB2_LINK_LIBRARIES}" "${JANSSON_LIBRARIES}")
|
||||
set_target_properties(
|
||||
"${LIBRARY_NAME}"
|
||||
PROPERTIES
|
||||
LINKER_LANGUAGE
|
||||
C
|
||||
)
|
||||
|
||||
# Symbol exporter
|
||||
include(GenerateExportHeader)
|
||||
set(_export_file "${CMAKE_CURRENT_SOURCE_DIR}/${LIBRARY_NAME}_export.h")
|
||||
generate_export_header("${LIBRARY_NAME}" EXPORT_FILE_NAME "${_export_file}")
|
||||
|
||||
# install rules
|
||||
|
||||
# setup the version numbering
|
||||
set_property(TARGET "${LIBRARY_NAME}" PROPERTY VERSION "1.0.0")
|
||||
set_property(TARGET "${LIBRARY_NAME}" PROPERTY SOVERSION "1")
|
||||
|
||||
set(installable_libs "${LIBRARY_NAME}" "${EXEC_NAME}" "${PROJECT_NAME}_compiler_flags")
|
||||
install(FILES "${Header_Files}" DESTINATION "include")
|
||||
|
||||
if (TARGET "${DEPENDANT_LIBRARY}")
|
||||
list(APPEND installable_libs "${DEPENDANT_LIBRARY}")
|
||||
endif ()
|
||||
install(TARGETS ${installable_libs}
|
||||
DESTINATION "lib"
|
||||
EXPORT "${LIBRARY_NAME}Targets")
|
58
tests/CMakeLists.txt
Normal file
58
tests/CMakeLists.txt
Normal file
@@ -0,0 +1,58 @@
|
||||
set(LIBRARY_NAME "searpctests")
|
||||
set(EXEC_NAME "searpctest")
|
||||
|
||||
set(Header_Files
|
||||
"clar.h"
|
||||
"clar_test.h"
|
||||
)
|
||||
source_group("Header Files" FILES "${Header_Files}")
|
||||
|
||||
set(Source_Files
|
||||
"clar.c"
|
||||
"searpc.c"
|
||||
)
|
||||
source_group("Source Files" FILES "${Source_Files}")
|
||||
|
||||
add_library("${LIBRARY_NAME}" "${LIBRARY_TYPE_FLAG}" "${Header_Files}" "${Source_Files}")
|
||||
|
||||
target_include_directories(
|
||||
"${LIBRARY_NAME}"
|
||||
PUBLIC
|
||||
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
|
||||
"$<INSTALL_INTERFACE:include>"
|
||||
)
|
||||
target_link_libraries("${LIBRARY_NAME}" PUBLIC "clar" "searpc")
|
||||
set_target_properties(
|
||||
"${LIBRARY_NAME}"
|
||||
PROPERTIES
|
||||
LINKER_LANGUAGE
|
||||
C
|
||||
)
|
||||
|
||||
# Symbol exporter
|
||||
include(GenerateExportHeader)
|
||||
set(_export_file "${CMAKE_CURRENT_SOURCE_DIR}/${LIBRARY_NAME}_export.h")
|
||||
generate_export_header("${LIBRARY_NAME}" EXPORT_FILE_NAME "${_export_file}")
|
||||
|
||||
# Exec target
|
||||
|
||||
source_group("${EXEC_NAME} Source Files" FILES "main.c")
|
||||
add_executable("${EXEC_NAME}" "main.c")
|
||||
|
||||
target_link_libraries("${EXEC_NAME}" PRIVATE "${LIBRARY_NAME}")
|
||||
|
||||
# install rules
|
||||
|
||||
# setup the version numbering
|
||||
set_property(TARGET "${LIBRARY_NAME}" PROPERTY VERSION "1.0.0")
|
||||
set_property(TARGET "${LIBRARY_NAME}" PROPERTY SOVERSION "1")
|
||||
|
||||
set(installable_libs "${LIBRARY_NAME}" "${EXEC_NAME}" "${PROJECT_NAME}_compiler_flags")
|
||||
install(FILES "${Header_Files}" DESTINATION "include")
|
||||
|
||||
if (TARGET "${DEPENDANT_LIBRARY}")
|
||||
list(APPEND installable_libs "${DEPENDANT_LIBRARY}")
|
||||
endif ()
|
||||
install(TARGETS ${installable_libs}
|
||||
DESTINATION "lib"
|
||||
EXPORT "${LIBRARY_NAME}Targets")
|
52
tests/clar/CMakeLists.txt
Normal file
52
tests/clar/CMakeLists.txt
Normal file
@@ -0,0 +1,52 @@
|
||||
set(LIBRARY_NAME "clar")
|
||||
|
||||
set(Header_Files
|
||||
"fixtures.h"
|
||||
"fs.h"
|
||||
"print.h"
|
||||
"sandbox.h"
|
||||
)
|
||||
source_group("Header Files" FILES "${Header_Files}")
|
||||
|
||||
add_library("${LIBRARY_NAME}" INTERFACE "${Header_Files}")
|
||||
|
||||
target_include_directories(
|
||||
"${LIBRARY_NAME}"
|
||||
PUBLIC
|
||||
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
|
||||
"$<INSTALL_INTERFACE:include>"
|
||||
)
|
||||
set_target_properties(
|
||||
"${LIBRARY_NAME}"
|
||||
PROPERTIES
|
||||
LINKER_LANGUAGE
|
||||
C
|
||||
)
|
||||
|
||||
# Symbol exporter
|
||||
include(GenerateExportHeader)
|
||||
set(_export_file "${CMAKE_CURRENT_SOURCE_DIR}/${LIBRARY_NAME}_export.h")
|
||||
generate_export_header("${LIBRARY_NAME}" EXPORT_FILE_NAME "${_export_file}")
|
||||
|
||||
# Exec target
|
||||
|
||||
source_group("${EXEC_NAME} Source Files" FILES "main.c")
|
||||
add_executable("${EXEC_NAME}" "main.c")
|
||||
|
||||
target_link_libraries("${EXEC_NAME}" PRIVATE "${LIBRARY_NAME}")
|
||||
|
||||
# install rules
|
||||
|
||||
# setup the version numbering
|
||||
set_property(TARGET "${LIBRARY_NAME}" PROPERTY VERSION "1.0.0")
|
||||
set_property(TARGET "${LIBRARY_NAME}" PROPERTY SOVERSION "1")
|
||||
|
||||
set(installable_libs "${LIBRARY_NAME}" "${EXEC_NAME}" "${PROJECT_NAME}_compiler_flags")
|
||||
install(FILES "${Header_Files}" DESTINATION "include")
|
||||
|
||||
if (TARGET "${DEPENDANT_LIBRARY}")
|
||||
list(APPEND installable_libs "${DEPENDANT_LIBRARY}")
|
||||
endif ()
|
||||
install(TARGETS ${installable_libs}
|
||||
DESTINATION "lib"
|
||||
EXPORT "${LIBRARY_NAME}Targets")
|
Reference in New Issue
Block a user