1
0
mirror of https://github.com/haiwen/libsearpc.git synced 2025-08-31 20:37:07 +00:00
This commit is contained in:
Samuel Marks
2025-03-27 07:57:14 +07:00
committed by GitHub
15 changed files with 361 additions and 0 deletions

4
.gitignore vendored
View File

@@ -55,3 +55,7 @@ tests/clar.suite
tests/.clarcache
tests/*.trs
test-driver
.idea
*_export.h
*build*

98
CMakeLists.txt Normal file
View 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

Binary file not shown.

7
cmake/CTestConfig.cmake Normal file
View 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
View File

@@ -0,0 +1,4 @@
@PACKAGE_INIT@
include ( "${CMAKE_CURRENT_LIST_DIR}/libumkaTargets.cmake" )

BIN
cmake/CustomVolumeIcon.icns Normal file

Binary file not shown.

14
cmake/Info.plist Normal file
View 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>

View 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
View File

@@ -0,0 +1 @@
Searpc is a simple C language RPC framework based on GObject system.

3
cmake/Welcome.txt Normal file
View 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
View 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 */

View 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
View 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
View 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
View 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")