1
0
mirror of https://github.com/shadowsocks/shadowsocks-libev.git synced 2026-09-24 00:45:06 +00:00

Rename project to shadowsocks-c with legacy library compatibility

This commit is contained in:
Max Lv
2026-09-11 14:05:42 +08:00
parent e13d7b7ac5
commit a8493250eb
22 changed files with 162 additions and 59 deletions

View File

@@ -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$'

View File

@@ -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

View File

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

View File

@@ -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

View File

@@ -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 $<TARGET_FILE:${target}>
DESTINATION ${CMAKE_INSTALL_LIBDIR}/shadowsocks-libev)
list(APPEND private_links "\${_ss_libdir}/shadowsocks-libev/$<TARGET_FILE_NAME:${target}>")
string(APPEND SS_PC_PRIVATE " \${libdir}/shadowsocks-libev/$<TARGET_FILE_NAME:${target}>")
DESTINATION ${CMAKE_INSTALL_LIBDIR}/shadowsocks-c)
list(APPEND private_links "\${_ss_libdir}/shadowsocks-c/$<TARGET_FILE_NAME:${target}>")
string(APPEND SS_PC_PRIVATE " \${libdir}/shadowsocks-c/$<TARGET_FILE_NAME:${target}>")
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)

50
cmake/LegacyPackage.cmake Normal file
View File

@@ -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 \"$<TARGET_FILE_NAME:${target}>\"
\"\$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}" "$<TARGET_FILE:${target}>")
ss_legacy_library(${target} "${CMAKE_INSTALL_LIBDIR}"
"${CMAKE_IMPORT_LIBRARY_PREFIX}shadowsocks-c${CMAKE_IMPORT_LIBRARY_SUFFIX}" "$<TARGET_LINKER_FILE:${target}>")
elseif(kind STREQUAL "STATIC")
ss_legacy_library(${target} "${CMAKE_INSTALL_LIBDIR}"
"${CMAKE_STATIC_LIBRARY_PREFIX}shadowsocks-c${CMAKE_STATIC_LIBRARY_SUFFIX}" "$<TARGET_FILE:${target}>")
else()
ss_legacy_library(${target} "${CMAKE_INSTALL_LIBDIR}"
"${CMAKE_SHARED_LIBRARY_PREFIX}shadowsocks-c${CMAKE_SHARED_LIBRARY_SUFFIX}" "$<TARGET_FILE:${target}>")
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}" "$<TARGET_FILE:${target}>")
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()

View File

@@ -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)

View File

@@ -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@

View File

@@ -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/

View File

@@ -1 +1,2 @@
usr/lib/*/libshadowsocks-libev.so.*
usr/lib/*/libshadowsocks-c.so.*

View File

@@ -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/

View File

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

View File

@@ -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 <encrypt_method>::
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,

View File

@@ -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
```

View File

@@ -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.

View File

@@ -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

View File

@@ -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 ("", ".", ".."):

View File

@@ -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
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
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()

View File

@@ -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 <max.c.lv@gmail.com> and Linus Yang <laokongzi@gmail.com>\n\n");
printf(" usage:\n\n");

View File

@@ -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()

View File

@@ -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

View File

@@ -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()