From a8493250eb6dc66d9f7958ae16d8ef5c58d44814 Mon Sep 17 00:00:00 2001 From: Max Lv Date: Fri, 11 Sep 2026 14:05:42 +0800 Subject: [PATCH] Rename project to shadowsocks-c with legacy library compatibility --- .clang-tidy | 2 +- .github/workflows/portability.yml | 14 +++++- CMakeLists.txt | 2 +- README.md | 15 ++++-- cmake/InstallPackage.cmake | 48 +++++++++--------- cmake/LegacyPackage.cmake | 50 +++++++++++++++++++ ...cmake.in => shadowsocks-c-config.cmake.in} | 2 +- ...-libev.pc.cmake => shadowsocks-c.pc.cmake} | 2 +- debian/libshadowsocks-libev-dev.install | 5 +- debian/libshadowsocks-libev2.install | 1 + debian/shadowsocks-libev.install | 4 +- doc/CMakeLists.txt | 5 +- ...-libev.asciidoc => shadowsocks-c.asciidoc} | 14 +++--- docker/static/README.md | 4 +- docs/modernization.md | 15 +++++- scripts/git_archive.sh | 2 +- scripts/source_archive.py | 2 +- src/CMakeLists.txt | 5 +- src/utils.c | 2 +- tests/consumer/CMakeLists.txt | 15 +++++- tests/test_deb_build.sh | 6 +-- third_party/CMakeLists.txt | 6 +-- 22 files changed, 162 insertions(+), 59 deletions(-) create mode 100644 cmake/LegacyPackage.cmake rename cmake/{shadowsocks-libev-config.cmake.in => shadowsocks-c-config.cmake.in} (97%) rename cmake/{shadowsocks-libev.pc.cmake => shadowsocks-c.pc.cmake} (89%) rename doc/{shadowsocks-libev.asciidoc => shadowsocks-c.asciidoc} (96%) diff --git a/.clang-tidy b/.clang-tidy index b98f3bb8..6bb01cef 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -1,4 +1,4 @@ -# clang-tidy configuration for shadowsocks-libev project sources (src/ only). +# clang-tidy configuration for shadowsocks-c project sources (src/ only). # Bundled sources under third_party/ and src/blake3/ are third-party code and # are excluded by the file regex used in CI: # run-clang-tidy -p build '/src/[^/]+\.c$' diff --git a/.github/workflows/portability.yml b/.github/workflows/portability.yml index 763a8b1e..37eee2bd 100644 --- a/.github/workflows/portability.yml +++ b/.github/workflows/portability.yml @@ -37,6 +37,10 @@ jobs: cmake --build consumer ./consumer/consumer_static ./consumer/consumer_shared + cmake -S tests/consumer -B consumer-legacy -DSS_PACKAGE_NAME=shadowsocks-libev -DCMAKE_PREFIX_PATH="$PWD/relocated" + cmake --build consumer-legacy + ./consumer-legacy/consumer_static + ./consumer-legacy/consumer_shared windows: runs-on: windows-latest @@ -67,6 +71,8 @@ jobs: cmake --install build --prefix "$PWD/install" cmake -S tests/consumer -B consumer -G Ninja -DCMAKE_PREFIX_PATH="$PWD/install" cmake --build consumer + cmake -S tests/consumer -B consumer-legacy -G Ninja -DSS_PACKAGE_NAME=shadowsocks-libev -DCMAKE_PREFIX_PATH="$PWD/install" + cmake --build consumer-legacy - name: Run installed consumers without toolchain DLLs shell: pwsh run: | @@ -75,6 +81,10 @@ jobs: if ($LASTEXITCODE -ne 0) { throw "Static consumer failed: $LASTEXITCODE" } & ./consumer/consumer_shared.exe if ($LASTEXITCODE -ne 0) { throw "Shared consumer failed: $LASTEXITCODE" } + & ./consumer-legacy/consumer_static.exe + if ($LASTEXITCODE -ne 0) { throw "Legacy static consumer failed: $LASTEXITCODE" } + & ./consumer-legacy/consumer_shared.exe + if ($LASTEXITCODE -ne 0) { throw "Legacy shared consumer failed: $LASTEXITCODE" } static-macos: runs-on: macos-latest @@ -189,7 +199,7 @@ jobs: steps: - uses: actions/checkout@v6 - name: Source archive - run: python3 scripts/source_archive.py release/shadowsocks-libev.tar.gz + run: python3 scripts/source_archive.py release/shadowsocks-c.tar.gz - name: Prepare compiler image run: | printf 'FROM alpine:3.24\nRUN apk add --no-cache build-base cmake python3 linux-headers\n' > /tmp/ss-toolchain.Dockerfile @@ -198,7 +208,7 @@ jobs: run: | docker run --rm --network none -v "$PWD/release:/release:ro" ss-toolchain sh -ec ' mkdir /src - tar xzf /release/shadowsocks-libev.tar.gz -C /src --strip-components=1 + tar xzf /release/shadowsocks-c.tar.gz -C /src --strip-components=1 cmake -S /src -B /build -DCMAKE_DISABLE_FIND_PACKAGE_Python3=TRUE cmake --build /build --parallel 4 ctest --test-dir /build -L "unit|vendor" --output-on-failure --no-tests=error diff --git a/CMakeLists.txt b/CMakeLists.txt index e6661179..e3732e69 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.20) -set(PROJECT_NAME shadowsocks-libev) +set(PROJECT_NAME shadowsocks-c) set(RELEASE_DATE 2026-02-09) set(PROJECT_VERSION "3.3.6") set(PROJECT_DESC "a lightweight secured socks5 proxy") diff --git a/README.md b/README.md index b3e0ba3d..a42c34b7 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ -# shadowsocks-libev +# shadowsocks-c [![Build Status](https://travis-ci.com/shadowsocks/shadowsocks-libev.svg?branch=master)](https://travis-ci.com/shadowsocks/shadowsocks-libev) [![Snap Status](https://snapcraft.io/shadowsocks-libev/badge.svg)](https://snapcraft.io/shadowsocks-libev) ## Intro -[Shadowsocks-libev](https://shadowsocks.org) is a lightweight secured SOCKS5 +[shadowsocks-c](https://shadowsocks.org) is a lightweight secured SOCKS5 proxy for embedded devices and low-end boxes. It is a port of [Shadowsocks](https://github.com/shadowsocks/shadowsocks) @@ -15,12 +15,19 @@ Current version: 3.3.6 | [Changelog](debian/changelog) ## Features -Shadowsocks-libev is written in pure C and depends on [libuv](https://libuv.org/). It's designed +shadowsocks-c is written in pure C and depends on [libuv](https://libuv.org/). It's designed to be a lightweight implementation of shadowsocks protocol, in order to keep the resource usage as low as possible. For a full list of feature comparison between different versions of shadowsocks, refer to the [Wiki page](https://github.com/shadowsocks/shadowsocks/wiki/Feature-Comparison-across-Different-Versions). +The project is now **shadowsocks-c**. Commands (`ss-local`, `ss-server`, etc.) +and the `shadowsocks.h` API remain compatible. New builds produce +`libshadowsocks-c` with CMake/pkg-config package `shadowsocks-c`; legacy library +filenames and package lookup names remain available as compatibility aliases. +Existing configuration paths, distro package names and service names are retained. +Repository links below still point to the current GitHub repository. + ## Quick Start Snap is the recommended way to install the latest binaries. @@ -110,7 +117,7 @@ Use `-DCMAKE_PREFIX_PATH=/opt/homebrew/opt/mbedtls@3` when needed on macOS. | `ENABLE_SANITIZERS` | `OFF` | AddressSanitizer and UndefinedBehaviorSanitizer | | `ENABLE_CONNMARKTOS` / `ENABLE_NFTABLES` | `OFF` | Optional Linux firewall integrations | -CMake consumers can use `find_package(shadowsocks-libev CONFIG REQUIRED)` and +CMake consumers can use `find_package(shadowsocks-c CONFIG REQUIRED)` and link `shadowsocks::static`, `shadowsocks::shared`, or `shadowsocks::shadowsocks` (which prefers the shared library when installed). A pkg-config file is also installed. Dependency provenance and update instructions are in diff --git a/cmake/InstallPackage.cmake b/cmake/InstallPackage.cmake index e70fd895..16cc97ef 100644 --- a/cmake/InstallPackage.cmake +++ b/cmake/InstallPackage.cmake @@ -24,13 +24,13 @@ if(SS_BUILD_STATIC_LIBRARY) string(APPEND SS_PC_PRIVATE " -lsodium -lmbedcrypto -lcares") install(FILES cmake/FindMbedTLS.cmake cmake/FindSodium.cmake cmake/FindCares.cmake cmake/FindPCRE2.cmake cmake/mbedtls_version_check.c - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/shadowsocks-libev/modules) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/shadowsocks-c/modules) endif() foreach(target IN LISTS private_targets) install(FILES $ - DESTINATION ${CMAKE_INSTALL_LIBDIR}/shadowsocks-libev) - list(APPEND private_links "\${_ss_libdir}/shadowsocks-libev/$") - string(APPEND SS_PC_PRIVATE " \${libdir}/shadowsocks-libev/$") + DESTINATION ${CMAKE_INSTALL_LIBDIR}/shadowsocks-c) + list(APPEND private_links "\${_ss_libdir}/shadowsocks-c/$") + string(APPEND SS_PC_PRIVATE " \${libdir}/shadowsocks-c/$") endforeach() if(SS_DEPENDENCY_MODE STREQUAL "system") list(APPEND private_links "\${SS_CONSUMER_UV}") @@ -52,35 +52,37 @@ if(SS_BUILD_STATIC_LIBRARY) string(APPEND SS_PC_PRIVATE " -lrt") endif() # Resolve libdir relative to this installed config, supporting --prefix relocation. - file(RELATIVE_PATH libdir_from_config "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/cmake/shadowsocks-libev" "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}") + file(RELATIVE_PATH libdir_from_config "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/cmake/shadowsocks-c" "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}") string(APPEND private_content "get_filename_component(_ss_libdir \"\${CMAKE_CURRENT_LIST_DIR}/${libdir_from_config}\" ABSOLUTE)\n") string(APPEND private_content "set_property(TARGET shadowsocks::static PROPERTY INTERFACE_LINK_LIBRARIES \"${private_links}\")\n") endif() file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/package/shadowsocks-private.cmake" CONTENT "${private_content}") install(FILES "${CMAKE_CURRENT_BINARY_DIR}/package/shadowsocks-private.cmake" - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/shadowsocks-libev) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/shadowsocks-c) -set(SS_STATIC_FILENAME "${CMAKE_STATIC_LIBRARY_PREFIX}shadowsocks-libev${CMAKE_STATIC_LIBRARY_SUFFIX}") -set(SS_SHARED_FILENAME "${CMAKE_SHARED_LIBRARY_PREFIX}shadowsocks-libev${CMAKE_SHARED_LIBRARY_SUFFIX}") -set(SS_SHARED_IMPLIB "${CMAKE_IMPORT_LIBRARY_PREFIX}shadowsocks-libev${CMAKE_IMPORT_LIBRARY_SUFFIX}") -configure_package_config_file(cmake/shadowsocks-libev-config.cmake.in - "${CMAKE_CURRENT_BINARY_DIR}/package/shadowsocks-libev-config.cmake" - INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/shadowsocks-libev +set(SS_STATIC_FILENAME "${CMAKE_STATIC_LIBRARY_PREFIX}shadowsocks-c${CMAKE_STATIC_LIBRARY_SUFFIX}") +set(SS_SHARED_FILENAME "${CMAKE_SHARED_LIBRARY_PREFIX}shadowsocks-c${CMAKE_SHARED_LIBRARY_SUFFIX}") +set(SS_SHARED_IMPLIB "${CMAKE_IMPORT_LIBRARY_PREFIX}shadowsocks-c${CMAKE_IMPORT_LIBRARY_SUFFIX}") +configure_package_config_file(cmake/shadowsocks-c-config.cmake.in + "${CMAKE_CURRENT_BINARY_DIR}/package/shadowsocks-c-config.cmake" + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/shadowsocks-c PATH_VARS CMAKE_INSTALL_LIBDIR CMAKE_INSTALL_BINDIR CMAKE_INSTALL_INCLUDEDIR) -write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/package/shadowsocks-libev-config-version.cmake" +write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/package/shadowsocks-c-config-version.cmake" VERSION ${PROJECT_VERSION} COMPATIBILITY SameMajorVersion) -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/package/shadowsocks-libev-config.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/package/shadowsocks-libev-config-version.cmake" - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/shadowsocks-libev) +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/package/shadowsocks-c-config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/package/shadowsocks-c-config-version.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/shadowsocks-c) file(RELATIVE_PATH SS_PC_PREFIX_RELATIVE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/pkgconfig" "${CMAKE_CURRENT_BINARY_DIR}") -configure_file(cmake/shadowsocks-libev.pc.cmake "${CMAKE_CURRENT_BINARY_DIR}/package/shadowsocks-libev.pc.in" @ONLY) -file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/shadowsocks-libev.pc" - INPUT "${CMAKE_CURRENT_BINARY_DIR}/package/shadowsocks-libev.pc.in") -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/shadowsocks-libev.pc" DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) +configure_file(cmake/shadowsocks-c.pc.cmake "${CMAKE_CURRENT_BINARY_DIR}/package/shadowsocks-c.pc.in" @ONLY) +file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/shadowsocks-c.pc" + INPUT "${CMAKE_CURRENT_BINARY_DIR}/package/shadowsocks-c.pc.in") +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/shadowsocks-c.pc" DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) endif() install(FILES COPYING LICENSE third_party/README.md third_party/manifest.json - DESTINATION ${CMAKE_INSTALL_DATADIR}/licenses/shadowsocks-libev) -install(FILES third_party/bloom/LICENSE DESTINATION ${CMAKE_INSTALL_DATADIR}/licenses/shadowsocks-libev/bloom) -install(DIRECTORY src/blake3/ DESTINATION ${CMAKE_INSTALL_DATADIR}/licenses/shadowsocks-libev/blake3 + DESTINATION ${CMAKE_INSTALL_DATADIR}/licenses/shadowsocks-c) +install(FILES third_party/bloom/LICENSE DESTINATION ${CMAKE_INSTALL_DATADIR}/licenses/shadowsocks-c/bloom) +install(DIRECTORY src/blake3/ DESTINATION ${CMAKE_INSTALL_DATADIR}/licenses/shadowsocks-c/blake3 FILES_MATCHING PATTERN "LICENSE*") + +include(${PROJECT_SOURCE_DIR}/cmake/LegacyPackage.cmake) diff --git a/cmake/LegacyPackage.cmake b/cmake/LegacyPackage.cmake new file mode 100644 index 00000000..9aa02ff9 --- /dev/null +++ b/cmake/LegacyPackage.cmake @@ -0,0 +1,50 @@ +# Preserve installed library filenames for existing build scripts and binaries. +# Unix aliases are relative symlinks so the installation remains relocatable. +# Windows uses copies because creating symlinks may require elevated privileges. +function(ss_legacy_library target directory filename source) + # filename is supplied with its canonical project name replaced below. + string(REPLACE "shadowsocks-c" "shadowsocks-libev" legacy "${filename}") + if(WIN32) + install(FILES "${source}" DESTINATION "${directory}" RENAME "${legacy}") + else() + install(CODE "file(MAKE_DIRECTORY \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${directory}\") + file(CREATE_LINK \"$\" + \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${directory}/${legacy}\" SYMBOLIC)") + endif() +endfunction() + +foreach(kind STATIC SHARED) + if(SS_BUILD_${kind}_LIBRARY) + string(TOLOWER "${kind}" suffix) + set(target shadowsocks-c-${suffix}) + if(WIN32 AND kind STREQUAL "SHARED") + ss_legacy_library(${target} "${CMAKE_INSTALL_BINDIR}" + "${CMAKE_SHARED_LIBRARY_PREFIX}shadowsocks-c${CMAKE_SHARED_LIBRARY_SUFFIX}" "$") + ss_legacy_library(${target} "${CMAKE_INSTALL_LIBDIR}" + "${CMAKE_IMPORT_LIBRARY_PREFIX}shadowsocks-c${CMAKE_IMPORT_LIBRARY_SUFFIX}" "$") + elseif(kind STREQUAL "STATIC") + ss_legacy_library(${target} "${CMAKE_INSTALL_LIBDIR}" + "${CMAKE_STATIC_LIBRARY_PREFIX}shadowsocks-c${CMAKE_STATIC_LIBRARY_SUFFIX}" "$") + else() + ss_legacy_library(${target} "${CMAKE_INSTALL_LIBDIR}" + "${CMAKE_SHARED_LIBRARY_PREFIX}shadowsocks-c${CMAKE_SHARED_LIBRARY_SUFFIX}" "$") + if(APPLE) + set(legacy_soname "${CMAKE_SHARED_LIBRARY_PREFIX}shadowsocks-c.2${CMAKE_SHARED_LIBRARY_SUFFIX}") + else() + set(legacy_soname "${CMAKE_SHARED_LIBRARY_PREFIX}shadowsocks-c${CMAKE_SHARED_LIBRARY_SUFFIX}.2") + endif() + ss_legacy_library(${target} "${CMAKE_INSTALL_LIBDIR}" "${legacy_soname}" "$") + endif() + endif() +endforeach() + +if(SS_BUILD_STATIC_LIBRARY OR SS_BUILD_SHARED_LIBRARY) + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/package/shadowsocks-libev-config.cmake" + "include(CMakeFindDependencyMacro)\nfind_dependency(shadowsocks-c \${shadowsocks-libev_FIND_VERSION} CONFIG PATHS \"\${CMAKE_CURRENT_LIST_DIR}/../shadowsocks-c\" NO_DEFAULT_PATH)\n") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/package/shadowsocks-libev-config.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/shadowsocks-libev) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/package/shadowsocks-c-config-version.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/shadowsocks-libev RENAME shadowsocks-libev-config-version.cmake) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/shadowsocks-c.pc" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig RENAME shadowsocks-libev.pc) +endif() diff --git a/cmake/shadowsocks-libev-config.cmake.in b/cmake/shadowsocks-c-config.cmake.in similarity index 97% rename from cmake/shadowsocks-libev-config.cmake.in rename to cmake/shadowsocks-c-config.cmake.in index 6708b8fe..708089f9 100644 --- a/cmake/shadowsocks-libev-config.cmake.in +++ b/cmake/shadowsocks-c-config.cmake.in @@ -31,4 +31,4 @@ if(NOT TARGET shadowsocks::shadowsocks) add_library(shadowsocks::shadowsocks ALIAS shadowsocks::static) endif() endif() -check_required_components(shadowsocks-libev) +check_required_components(shadowsocks-c) diff --git a/cmake/shadowsocks-libev.pc.cmake b/cmake/shadowsocks-c.pc.cmake similarity index 89% rename from cmake/shadowsocks-libev.pc.cmake rename to cmake/shadowsocks-c.pc.cmake index eb1dfa33..3303d18a 100644 --- a/cmake/shadowsocks-libev.pc.cmake +++ b/cmake/shadowsocks-c.pc.cmake @@ -9,5 +9,5 @@ URL: @PROJECT_URL@ Version: @PROJECT_VERSION@ Requires: Cflags: -I${includedir} -Libs: -L${libdir} -lshadowsocks-libev +Libs: -L${libdir} -lshadowsocks-c Libs.private: @SS_PC_PRIVATE@ diff --git a/debian/libshadowsocks-libev-dev.install b/debian/libshadowsocks-libev-dev.install index 60b6f646..49fcd1c5 100644 --- a/debian/libshadowsocks-libev-dev.install +++ b/debian/libshadowsocks-libev-dev.install @@ -1,6 +1,9 @@ usr/include/ usr/lib/*/libshadowsocks-libev.so usr/lib/*/libshadowsocks-libev.a -usr/lib/*/shadowsocks-libev/ +usr/lib/*/shadowsocks-c/ usr/lib/*/cmake/shadowsocks-libev/ usr/lib/*/pkgconfig/ +usr/lib/*/libshadowsocks-c.so +usr/lib/*/libshadowsocks-c.a +usr/lib/*/cmake/shadowsocks-c/ diff --git a/debian/libshadowsocks-libev2.install b/debian/libshadowsocks-libev2.install index 590078a3..8b8b1860 100644 --- a/debian/libshadowsocks-libev2.install +++ b/debian/libshadowsocks-libev2.install @@ -1 +1,2 @@ usr/lib/*/libshadowsocks-libev.so.* +usr/lib/*/libshadowsocks-c.so.* diff --git a/debian/shadowsocks-libev.install b/debian/shadowsocks-libev.install index cad7d5a6..c7de4983 100644 --- a/debian/shadowsocks-libev.install +++ b/debian/shadowsocks-libev.install @@ -4,5 +4,5 @@ debian/config.json usr/share/shadowsocks-libev debian/shadowsocks-libev-*.service lib/systemd/system usr/bin/ usr/share/man/ -usr/share/doc/shadowsocks-libev/ -usr/share/licenses/shadowsocks-libev/ +usr/share/doc/shadowsocks-c/ +usr/share/licenses/shadowsocks-c/ diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 8c47c85f..b996f9ee 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -27,7 +27,7 @@ set(ASCIIDOC_XML_OPTS -b docbook -d manpage -f ${DOC_DIR}/asciidoc.conf -aversio set(ASCIIDOC_HTML_OPTS -b html4 -d article -f ${DOC_DIR}/asciidoc.conf -aversion=${PROJECT_VERSION}) -set(MAN_NAMES ss-local.1 ss-manager.1 ss-nat.1 ss-redir.1 ss-server.1 ss-tunnel.1 shadowsocks-libev.8) +set(MAN_NAMES ss-local.1 ss-manager.1 ss-nat.1 ss-redir.1 ss-server.1 ss-tunnel.1 shadowsocks-c.8) set(MAN_FILES) set(HTML_FILES) @@ -86,3 +86,6 @@ endif () # This is required for custom command file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/man) file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/html) + +# Retain the former manual lookup name. +file(WRITE "${PROJECT_BINARY_DIR}/man/shadowsocks-libev.8" ".so man8/shadowsocks-c.8\n") diff --git a/doc/shadowsocks-libev.asciidoc b/doc/shadowsocks-c.asciidoc similarity index 96% rename from doc/shadowsocks-libev.asciidoc rename to doc/shadowsocks-c.asciidoc index 078b0849..9ca5d9fd 100644 --- a/doc/shadowsocks-libev.asciidoc +++ b/doc/shadowsocks-c.asciidoc @@ -1,9 +1,9 @@ -shadowsocks-libev(8) -==================== +shadowsocks-c(8) +================ NAME ---- -shadowsocks-libev - a lightweight and secure socks5 proxy +shadowsocks-c - a lightweight and secure socks5 proxy SYNOPSIS -------- @@ -13,12 +13,12 @@ SYNOPSIS DESCRIPTION ----------- -*Shadowsocks-libev* is a lightweight and secure socks5 proxy. +*shadowsocks-c* is a lightweight and secure socks5 proxy. It is a port of the original shadowsocks created by clowwindy. -*Shadowsocks-libev* is written in pure C and takes advantage of *libev* +*shadowsocks-c* is written in pure C and takes advantage of *libev* to achieve both high performance and low resource consumption. -*Shadowsocks-libev* consists of five components. One is `ss-server`(1) +*shadowsocks-c* consists of five components. One is `ss-server`(1) that runs on a remote server to provide secured tunnel service. `ss-local`(1) and `ss-redir`(1) are clients on your local machines to proxy traffic(TCP/UDP or both). @@ -56,7 +56,7 @@ Not available in manager mode. -m :: Set the cipher. + -*Shadowsocks-libev* accepts 22 different ciphers: +*shadowsocks-c* accepts 22 different ciphers: + 2022-blake3-aes-128-gcm, 2022-blake3-aes-256-gcm, 2022-blake3-chacha20-poly1305, diff --git a/docker/static/README.md b/docker/static/README.md index a946206e..c8765c0f 100644 --- a/docker/static/README.md +++ b/docker/static/README.md @@ -29,9 +29,9 @@ Build the scratch runtime image using the same cached build stage: ```sh docker build --platform linux/arm64 -f docker/static/Dockerfile \ - --target runtime -t shadowsocks-libev:static-arm64 . + --target runtime -t shadowsocks-c:static-arm64 . docker run --rm -p 8388:8388/tcp -p 8388:8388/udp \ - shadowsocks-libev:static-arm64 \ + shadowsocks-c:static-arm64 \ -s 0.0.0.0 -p 8388 -k example-password -m aes-256-gcm -u ``` diff --git a/docs/modernization.md b/docs/modernization.md index ae52bcaf..ed8f19f9 100644 --- a/docs/modernization.md +++ b/docs/modernization.md @@ -59,7 +59,7 @@ SS_BUILD_EXECUTABLES, SS_BUILD_STATIC_LIBRARY and SS_BUILD_SHARED_LIBRARY contro outputs independently. Docs and platform shell tools are explicit opt-ins. Bundled mode is the default and the `bundled` / `minimal` presets exercise it. Maintainers stage the intended source files, then run -`scripts/source_archive.py build-artifacts/shadowsocks-libev.tar.gz`. +`scripts/source_archive.py build-artifacts/shadowsocks-c.tar.gz`. The archive includes tracked working-tree contents (so uncommitted changes are included); record the final commit with a published release and use a clean checkout for publishing. No submodules are accepted in the archive. @@ -197,3 +197,16 @@ resolution remains synchronous before serving traffic. Tests use a local delayed DNS server to verify both address families, NXDOMAIN, cancellation, exactly-once callbacks, and timer progress while requests wait. Hostname ACL integration uses an unreachable proxy upstream so successful transfers prove direct resolution. + +## Project name and compatibility + +The project is named **shadowsocks-c**. New library outputs are +`libshadowsocks-c`, and CMake/pkg-config consumers use `shadowsocks-c`. +`shadowsocks.h`, its ABI version, and all `ss-*` commands remain stable. +Legacy library filenames are installed as relative symlinks on Unix and copies +on Windows; `find_package(shadowsocks-libev)` and the old pkg-config name resolve +to the new library. Private dependency archives and license files install under +`shadowsocks-c`. Source archives and the main manual use the new name. + +Existing configuration paths, Debian package identifiers and service names +remain compatible. GitHub URLs retain the current repository location. diff --git a/scripts/git_archive.sh b/scripts/git_archive.sh index 5b365b99..e24e6253 100755 --- a/scripts/git_archive.sh +++ b/scripts/git_archive.sh @@ -2,7 +2,7 @@ # Backward-compatible maintainer entrypoint for the offline release archive. set -euo pipefail root=$(git rev-parse --show-toplevel) -name=shadowsocks-libev +name=shadowsocks-c directory=$root while getopts "n:o:" opt; do case "$opt" in diff --git a/scripts/source_archive.py b/scripts/source_archive.py index dd2e2fb0..921b0bda 100755 --- a/scripts/source_archive.py +++ b/scripts/source_archive.py @@ -16,7 +16,7 @@ import tarfile def main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("output", type=Path) - parser.add_argument("--prefix", default="shadowsocks-libev-3.3.6") + parser.add_argument("--prefix", default="shadowsocks-c-3.3.6") args = parser.parse_args() root = Path(__file__).resolve().parents[1] if "/" in args.prefix or args.prefix in ("", ".", ".."): diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 28ba0fa5..255bd791 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -149,14 +149,15 @@ endif() foreach(kind STATIC SHARED) if(SS_BUILD_${kind}_LIBRARY) string(TOLOWER "${kind}" suffix) - set(target shadowsocks-libev-${suffix}) + set(target shadowsocks-c-${suffix}) add_library(${target} ${kind} ${LIBSHADOWSOCKS_LIBEV_SOURCE}) + add_library(shadowsocks-libev-${suffix} ALIAS ${target}) target_compile_definitions(${target} PRIVATE MODULE_LOCAL LIB_ONLY) target_include_directories(${target} PUBLIC $ $) target_link_libraries(${target} PRIVATE ${SS_CORE_DEPS} ${SS_ACL_DEPS}) - set_target_properties(${target} PROPERTIES OUTPUT_NAME shadowsocks-libev) + set_target_properties(${target} PROPERTIES OUTPUT_NAME shadowsocks-c) if(kind STREQUAL "SHARED") set_target_properties(${target} PROPERTIES VERSION 2.0.0 SOVERSION 2) endif() diff --git a/src/utils.c b/src/utils.c index 75acd862..5d22ff61 100644 --- a/src/utils.c +++ b/src/utils.c @@ -321,7 +321,7 @@ void usage() { printf("\n"); - printf("shadowsocks-libev %s\n\n", VERSION); + printf("shadowsocks-c %s\n\n", VERSION); printf( " maintained by Max Lv and Linus Yang \n\n"); printf(" usage:\n\n"); diff --git a/tests/consumer/CMakeLists.txt b/tests/consumer/CMakeLists.txt index 6f635b87..0bbe775f 100644 --- a/tests/consumer/CMakeLists.txt +++ b/tests/consumer/CMakeLists.txt @@ -1,8 +1,21 @@ cmake_minimum_required(VERSION 3.20) project(shadowsocks_consumer LANGUAGES C) -find_package(shadowsocks-libev CONFIG REQUIRED) +set(SS_PACKAGE_NAME shadowsocks-c CACHE STRING "Installed package to test") +find_package(${SS_PACKAGE_NAME} CONFIG REQUIRED) foreach(kind shared static) if(TARGET shadowsocks::${kind}) + if(SS_PACKAGE_NAME STREQUAL "shadowsocks-libev") + # Exercise legacy filenames as well as legacy package discovery. + foreach(property IMPORTED_LOCATION IMPORTED_IMPLIB) + get_target_property(location shadowsocks::${kind} ${property}) + if(location) + get_filename_component(directory "${location}" DIRECTORY) + get_filename_component(filename "${location}" NAME) + string(REPLACE "shadowsocks-c" "shadowsocks-libev" filename "${filename}") + set_property(TARGET shadowsocks::${kind} PROPERTY ${property} "${directory}/${filename}") + endif() + endforeach() + endif() add_executable(consumer_${kind} main.c) target_link_libraries(consumer_${kind} PRIVATE shadowsocks::${kind}) endif() diff --git a/tests/test_deb_build.sh b/tests/test_deb_build.sh index 7dbca66d..92294ed6 100644 --- a/tests/test_deb_build.sh +++ b/tests/test_deb_build.sh @@ -172,10 +172,10 @@ done # Shared library should be findable by ldconfig sudo ldconfig -if ldconfig -p | grep -q libshadowsocks-libev; then - check_pass "libshadowsocks-libev found by ldconfig" +if ldconfig -p | grep -q libshadowsocks-c; then + check_pass "libshadowsocks-c found by ldconfig" else - check_fail "libshadowsocks-libev not found by ldconfig" + check_fail "libshadowsocks-c not found by ldconfig" fi # Header should be in the include path diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt index 921d1b64..68178963 100644 --- a/third_party/CMakeLists.txt +++ b/third_party/CMakeLists.txt @@ -74,9 +74,9 @@ include(${PROJECT_SOURCE_DIR}/cmake/EventLoop.cmake) include(Sodium.cmake) foreach(name sodium uv mbedtls) - install(FILES "${${name}_SOURCE}/LICENSE" DESTINATION "${CMAKE_INSTALL_DATADIR}/licenses/shadowsocks-libev/${name}") + install(FILES "${${name}_SOURCE}/LICENSE" DESTINATION "${CMAKE_INSTALL_DATADIR}/licenses/shadowsocks-c/${name}") endforeach() -install(FILES "${cares_SOURCE}/LICENSE.md" DESTINATION "${CMAKE_INSTALL_DATADIR}/licenses/shadowsocks-libev/cares") +install(FILES "${cares_SOURCE}/LICENSE.md" DESTINATION "${CMAKE_INSTALL_DATADIR}/licenses/shadowsocks-c/cares") if(SS_ENABLE_REGEX) - install(FILES "${pcre2_SOURCE}/LICENCE.md" DESTINATION "${CMAKE_INSTALL_DATADIR}/licenses/shadowsocks-libev/pcre2") + install(FILES "${pcre2_SOURCE}/LICENCE.md" DESTINATION "${CMAKE_INSTALL_DATADIR}/licenses/shadowsocks-c/pcre2") endif()