10 changed files with 851 additions and 0 deletions
Split View
Diff Options
-
1.gitignore
-
21.travis.yml
-
131CMakeLists.txt
-
0build/.gitkeep
-
295cmake/config.h.cmake
-
191cmake/configure.cmake
-
14cmake/shadowsocks-libev.pc.cmake
-
8docker/build/builder.Dockerfile
-
5docker/build/dockerbuild.sh
-
185src/CMakeLists.txt
@ -0,0 +1,131 @@ |
|||
cmake_minimum_required(VERSION 2.8) |
|||
|
|||
set(PROJECT_NAME shadowsocks-libev) |
|||
set(RELEASE_DATE 2017-2-17) |
|||
set(PROJECT_VERSION "3.0.2") |
|||
set(PROJECT_DESC "a lightweight secured socks5 proxy") |
|||
set(PROJECT_URL "https://shadowsocks.org") |
|||
set(PROJECT_ISSUES_URL "https://github.com/shadowsocks/shadowsocks-libev") |
|||
project(${PROJECT_NAME}) |
|||
|
|||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99") |
|||
|
|||
#set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/out) |
|||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) |
|||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) |
|||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) |
|||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake) |
|||
set(CMAKE_MACOSX_RPATH TRUE) |
|||
|
|||
if (NOT CMAKE_BUILD_TYPE) |
|||
set(CMAKE_BUILD_TYPE Debug) |
|||
endif () |
|||
# Detect linux |
|||
if (UNIX AND NOT APPLE) |
|||
set(LINUX TRUE) |
|||
endif () |
|||
|
|||
message(STATUS "Running cmake version ${CMAKE_VERSION}") |
|||
|
|||
# Will set GIT_EXECUTABLE and GIT_FOUND |
|||
# find_package(Git) |
|||
|
|||
# Run platform tests |
|||
include(${CMAKE_SOURCE_DIR}/cmake/configure.cmake) |
|||
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h) |
|||
add_definitions(-DHAVE_CONFIG_H) |
|||
|
|||
# pkg-config |
|||
configure_file( |
|||
"${CMAKE_SOURCE_DIR}/cmake/shadowsocks-libev.pc.cmake" |
|||
"${CMAKE_BINARY_DIR}/pkgconfig/shadowsocks-libev.pc" |
|||
@ONLY |
|||
) |
|||
install(FILES |
|||
"${CMAKE_BINARY_DIR}/pkgconfig/shadowsocks-libev.pc" |
|||
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig" |
|||
) |
|||
|
|||
# We need libcork,libipset headers |
|||
include_directories(libcork/include) |
|||
include_directories(libipset/include) |
|||
include_directories(libbloom/murmur2) |
|||
include_directories(libbloom) |
|||
|
|||
set(LIBCORK_SOURCE |
|||
libcork/src/libcork/cli/commands.c |
|||
libcork/src/libcork/core/allocator.c |
|||
libcork/src/libcork/core/error.c |
|||
libcork/src/libcork/core/gc.c |
|||
libcork/src/libcork/core/hash.c |
|||
libcork/src/libcork/core/ip-address.c |
|||
libcork/src/libcork/core/mempool.c |
|||
libcork/src/libcork/core/timestamp.c |
|||
libcork/src/libcork/core/u128.c |
|||
libcork/src/libcork/core/version.c |
|||
libcork/src/libcork/ds/array.c |
|||
libcork/src/libcork/ds/bitset.c |
|||
libcork/src/libcork/ds/buffer.c |
|||
libcork/src/libcork/ds/dllist.c |
|||
libcork/src/libcork/ds/file-stream.c |
|||
libcork/src/libcork/ds/hash-table.c |
|||
libcork/src/libcork/ds/managed-buffer.c |
|||
libcork/src/libcork/ds/ring-buffer.c |
|||
libcork/src/libcork/ds/slice.c |
|||
libcork/src/libcork/posix/directory-walker.c |
|||
libcork/src/libcork/posix/env.c |
|||
libcork/src/libcork/posix/exec.c |
|||
libcork/src/libcork/posix/files.c |
|||
libcork/src/libcork/posix/process.c |
|||
libcork/src/libcork/posix/subprocess.c |
|||
libcork/src/libcork/pthreads/thread.c |
|||
) |
|||
|
|||
add_library(cork STATIC ${LIBCORK_SOURCE}) |
|||
target_compile_definitions(cork PUBLIC -DCORK_API=CORK_LOCAL) |
|||
|
|||
add_library(cork-shared SHARED ${LIBCORK_SOURCE}) |
|||
target_compile_definitions(cork-shared PUBLIC -DCORK_API=CORK_EXPORT) |
|||
set_target_properties(cork-shared PROPERTIES OUTPUT_NAME cork) |
|||
|
|||
set(LIBIPSET_SOURCE |
|||
libipset/src/libipset/general.c |
|||
libipset/src/libipset/bdd/assignments.c |
|||
libipset/src/libipset/bdd/basics.c |
|||
libipset/src/libipset/bdd/bdd-iterator.c |
|||
libipset/src/libipset/bdd/expanded.c |
|||
libipset/src/libipset/bdd/reachable.c |
|||
libipset/src/libipset/bdd/read.c |
|||
libipset/src/libipset/bdd/write.c |
|||
libipset/src/libipset/map/allocation.c |
|||
libipset/src/libipset/map/inspection.c |
|||
libipset/src/libipset/map/ipv4_map.c |
|||
libipset/src/libipset/map/ipv6_map.c |
|||
libipset/src/libipset/map/storage.c |
|||
libipset/src/libipset/set/allocation.c |
|||
libipset/src/libipset/set/inspection.c |
|||
libipset/src/libipset/set/ipv4_set.c |
|||
libipset/src/libipset/set/ipv6_set.c |
|||
libipset/src/libipset/set/iterator.c |
|||
libipset/src/libipset/set/storage.c |
|||
) |
|||
|
|||
add_library(ipset STATIC ${LIBIPSET_SOURCE}) |
|||
|
|||
add_library(ipset-shared SHARED ${LIBIPSET_SOURCE}) |
|||
set_target_properties(ipset-shared PROPERTIES OUTPUT_NAME ipset) |
|||
|
|||
set(LIBBLOOM_SOURCE |
|||
libbloom/bloom.c |
|||
libbloom/murmur2/MurmurHash2.c |
|||
) |
|||
|
|||
add_library(bloom STATIC ${LIBBLOOM_SOURCE}) |
|||
target_link_libraries(ipset cork bloom) |
|||
|
|||
add_library(bloom-shared SHARED ${LIBBLOOM_SOURCE}) |
|||
target_link_libraries(ipset-shared cork-shared bloom-shared) |
|||
set_target_properties(bloom-shared PROPERTIES OUTPUT_NAME bloom) |
|||
|
|||
add_subdirectory(src) |
|||
|
@ -0,0 +1,295 @@ |
|||
#ifndef _SHADOWSOCKS_CONFIG_H |
|||
#define _SHADOWSOCKS_CONFIG_H |
|||
|
|||
/* Define if building universal (internal helper macro) */ |
|||
#cmakedefine AC_APPLE_UNIVERSAL_BUILD |
|||
|
|||
/* errno for incomplete non-blocking connect(2) */ |
|||
#cmakedefine CONNECT_IN_PROGRESS @CONNECT_IN_PROGRESS@ |
|||
|
|||
/* Define to 1 if you have the <arpa/inet.h> header file. */ |
|||
#cmakedefine HAVE_ARPA_INET_H 1 |
|||
|
|||
/* Define to 1 if you have the declaration of `inet_ntop', and to 0 if you |
|||
don't. */ |
|||
#cmakedefine HAVE_DECL_INET_NTOP 1 |
|||
|
|||
/* Define to 1 if you have the <dlfcn.h> header file. */ |
|||
#cmakedefine HAVE_DLFCN_H 1 |
|||
|
|||
/* Define to 1 if you have the <ev.h> header file. */ |
|||
#cmakedefine HAVE_EV_H 1 |
|||
|
|||
/* Define to 1 if you have the <fcntl.h> header file. */ |
|||
#cmakedefine HAVE_FCNTL_H 1 |
|||
|
|||
/* Define to 1 if you have the `fork' function. */ |
|||
#cmakedefine HAVE_FORK 1 |
|||
|
|||
/* Define to 1 if you have the `getpwnam_r' function. */ |
|||
#cmakedefine HAVE_GETPWNAM_R 1 |
|||
|
|||
/* Define to 1 if you have the `inet_ntop' function. */ |
|||
#cmakedefine HAVE_INET_NTOP 1 |
|||
|
|||
/* Define to 1 if you have the <inttypes.h> header file. */ |
|||
#cmakedefine HAVE_INTTYPES_H 1 |
|||
|
|||
/* Enable IPv6 support in libudns */ |
|||
#cmakedefine HAVE_IPv6 1 |
|||
|
|||
/* Define to 1 if you have the <langinfo.h> header file. */ |
|||
#cmakedefine HAVE_LANGINFO_H 1 |
|||
|
|||
/* Compiling with pcre support */ |
|||
#cmakedefine HAVE_LIBPCRE 1 |
|||
|
|||
/* Define to 1 if you have the `socket' library (-lsocket). */ |
|||
#cmakedefine HAVE_LIBSOCKET 1 |
|||
|
|||
/* Define to 1 if you have the <limits.h> header file. */ |
|||
#cmakedefine HAVE_LIMITS_H 1 |
|||
|
|||
/* Define to 1 if you have the <linux/if.h> header file. */ |
|||
#cmakedefine HAVE_LINUX_IF_H 1 |
|||
|
|||
/* Define to 1 if you have the <linux/netfilter_ipv4.h> header file. */ |
|||
#cmakedefine HAVE_LINUX_NETFILTER_IPV4_H 1 |
|||
|
|||
/* Define to 1 if you have the <linux/netfilter_ipv6/ip6_tables.h> header |
|||
file. */ |
|||
#cmakedefine HAVE_LINUX_NETFILTER_IPV6_IP6_TABLES_H 1 |
|||
|
|||
/* Define to 1 if you have the <locale.h> header file. */ |
|||
#cmakedefine HAVE_LOCALE_H 1 |
|||
|
|||
/* Define to 1 if you have the `malloc' function. */ |
|||
#cmakedefine HAVE_MALLOC 1 |
|||
|
|||
/* Define to 1 if you have the <memory.h> header file. */ |
|||
#cmakedefine HAVE_MEMORY_H 1 |
|||
|
|||
/* Define to 1 if you have the `memset' function. */ |
|||
#cmakedefine HAVE_MEMSET 1 |
|||
|
|||
/* Define to 1 if you have the <netdb.h> header file. */ |
|||
#cmakedefine HAVE_NETDB_H 1 |
|||
|
|||
/* Define to 1 if you have the <netinet/in.h> header file. */ |
|||
#cmakedefine HAVE_NETINET_IN_H 1 |
|||
|
|||
/* Define to 1 if you have the <net/if.h> header file. */ |
|||
#cmakedefine HAVE_NET_IF_H 1 |
|||
|
|||
/* Define to 1 if you have the <pcre.h> header file. */ |
|||
#cmakedefine HAVE_PCRE_H 1 |
|||
|
|||
/* Define to 1 if you have the <pcre/pcre.h> header file. */ |
|||
#cmakedefine HAVE_PCRE_PCRE_H 1 |
|||
|
|||
/* Have PTHREAD_PRIO_INHERIT. */ |
|||
#cmakedefine HAVE_PTHREAD_PRIO_INHERIT 1 |
|||
|
|||
/* Define to 1 if you have the `select' function. */ |
|||
#cmakedefine HAVE_SELECT 1 |
|||
|
|||
/* Define to 1 if you have the `setresuid' function. */ |
|||
#cmakedefine HAVE_SETRESUID 1 |
|||
|
|||
/* Define to 1 if you have the `setreuid' function. */ |
|||
#cmakedefine HAVE_SETREUID 1 |
|||
|
|||
/* Define to 1 if you have the `setrlimit' function. */ |
|||
#cmakedefine HAVE_SETRLIMIT 1 |
|||
|
|||
/* Define to 1 if you have the `socket' function. */ |
|||
#cmakedefine HAVE_SOCKET 1 |
|||
|
|||
/* Define to 1 if you have the <stdint.h> header file. */ |
|||
#cmakedefine HAVE_STDINT_H 1 |
|||
|
|||
/* Define to 1 if you have the <stdlib.h> header file. */ |
|||
#cmakedefine HAVE_STDLIB_H 1 |
|||
|
|||
/* Define to 1 if you have the `strerror' function. */ |
|||
#cmakedefine HAVE_STRERROR 1 |
|||
|
|||
/* Define to 1 if you have the <strings.h> header file. */ |
|||
#cmakedefine HAVE_STRINGS_H 1 |
|||
|
|||
/* Define to 1 if you have the <string.h> header file. */ |
|||
#cmakedefine HAVE_STRING_H 1 |
|||
|
|||
/* Define to 1 if you have the <sys/ioctl.h> header file. */ |
|||
#cmakedefine HAVE_SYS_IOCTL_H 1 |
|||
|
|||
/* Define to 1 if you have the <sys/select.h> header file. */ |
|||
#cmakedefine HAVE_SYS_SELECT_H 1 |
|||
|
|||
/* Define to 1 if you have the <sys/socket.h> header file. */ |
|||
#cmakedefine HAVE_SYS_SOCKET_H 1 |
|||
|
|||
/* Define to 1 if you have the <sys/stat.h> header file. */ |
|||
#cmakedefine HAVE_SYS_STAT_H 1 |
|||
|
|||
/* Define to 1 if you have the <sys/types.h> header file. */ |
|||
#cmakedefine HAVE_SYS_TYPES_H 1 |
|||
|
|||
/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */ |
|||
#cmakedefine HAVE_SYS_WAIT_H 1 |
|||
|
|||
/* Define to 1 if you have the <udns.h> header file. */ |
|||
#cmakedefine HAVE_UDNS_H 1 |
|||
|
|||
/* Define to 1 if you have the <unistd.h> header file. */ |
|||
#cmakedefine HAVE_UNISTD_H 1 |
|||
|
|||
/* Define to 1 if you have the `vfork' function. */ |
|||
#cmakedefine HAVE_VFORK 1 |
|||
|
|||
/* Define to 1 if you have the <vfork.h> header file. */ |
|||
#cmakedefine HAVE_VFORK_H 1 |
|||
|
|||
/* Define to 1 if `fork' works. */ |
|||
#cmakedefine HAVE_WORKING_FORK 1 |
|||
|
|||
/* Define to 1 if `vfork' works. */ |
|||
#cmakedefine HAVE_WORKING_VFORK 1 |
|||
|
|||
/* Define to the sub-directory where libtool stores uninstalled libraries. */ |
|||
#cmakedefine LT_OBJDIR "@LT_OBJDIR@" |
|||
|
|||
/* Define to 1 if assertions should be disabled. */ |
|||
#cmakedefine NDEBUG 1 |
|||
|
|||
/* Name of package */ |
|||
#define PACKAGE "@PROJECT_NAME@" |
|||
|
|||
/* Define to the address where bug reports for this package should be sent. */ |
|||
#define PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@" |
|||
|
|||
/* Define to the full name of this package. */ |
|||
#define PACKAGE_NAME "@PROJECT_NAME@" |
|||
|
|||
/* Define to the full name and version of this package. */ |
|||
#define PACKAGE_STRING "@PROJECT_NAME@ @PROJECT_VERSION@" |
|||
|
|||
/* Define to the one symbol short name of this package. */ |
|||
#define PACKAGE_TARNAME "@PROJECT_NAME@" |
|||
|
|||
/* Define to the home page for this package. */ |
|||
#define PACKAGE_URL "@PACKAGE_URL@" |
|||
|
|||
/* Define to the version of this package. */ |
|||
#define PACKAGE_VERSION "@PROJECT_VERSION@" |
|||
|
|||
/* Define to necessary symbol if this constant uses a non-standard name on |
|||
your system. */ |
|||
#cmakedefine PTHREAD_CREATE_JOINABLE 1 |
|||
|
|||
/* Define as the return type of signal handlers (`int' or `void'). */ |
|||
#cmakedefine RETSIGTYPE @RETSIGTYPE@ |
|||
|
|||
/* Define to the type of arg 1 for `select'. */ |
|||
#cmakedefine SELECT_TYPE_ARG1 @SELECT_TYPE_ARG1@ |
|||
|
|||
/* Define to the type of args 2, 3 and 4 for `select'. */ |
|||
#cmakedefine SELECT_TYPE_ARG234 @SELECT_TYPE_ARG234@ |
|||
|
|||
/* Define to the type of arg 5 for `select'. */ |
|||
#cmakedefine SELECT_TYPE_ARG5 @SELECT_TYPE_ARG5@ |
|||
|
|||
/* Define to 1 if you have the ANSI C header files. */ |
|||
#cmakedefine STDC_HEADERS 1 |
|||
|
|||
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */ |
|||
#cmakedefine TIME_WITH_SYS_TIME 1 |
|||
|
|||
/* If the compiler supports a TLS storage class define it to that here */ |
|||
#cmakedefine TLS @TLS@ |
|||
|
|||
/* Enable extensions on AIX 3, Interix. */ |
|||
#ifndef _ALL_SOURCE |
|||
#cmakedefine _ALL_SOURCE 1 |
|||
#endif |
|||
/* Enable GNU extensions on systems that have them. */ |
|||
#ifndef _GNU_SOURCE |
|||
#cmakedefine _GNU_SOURCE 1 |
|||
#endif |
|||
/* Enable threading extensions on Solaris. */ |
|||
#ifndef _POSIX_PTHREAD_SEMANTICS |
|||
#cmakedefine _POSIX_PTHREAD_SEMANTICS 1 |
|||
#endif |
|||
/* Enable extensions on HP NonStop. */ |
|||
#ifndef _TANDEM_SOURCE |
|||
#cmakedefine _TANDEM_SOURCE 1 |
|||
#endif |
|||
/* Enable general extensions on Solaris. */ |
|||
#ifndef __EXTENSIONS__ |
|||
#cmakedefine __EXTENSIONS__ 1 |
|||
#endif |
|||
|
|||
|
|||
/* Define if use system shared lib. */ |
|||
#cmakedefine USE_SYSTEM_SHARED_LIB 1 |
|||
|
|||
/* Version number of package */ |
|||
#define VERSION "@PROJECT_VERSION@" |
|||
|
|||
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most |
|||
significant byte first (like Motorola and SPARC, unlike Intel). */ |
|||
#if defined AC_APPLE_UNIVERSAL_BUILD |
|||
# if defined __BIG_ENDIAN__ |
|||
# define WORDS_BIGENDIAN 1 |
|||
# endif |
|||
#else |
|||
# ifndef WORDS_BIGENDIAN |
|||
#cmakedefine WORDS_BIGENDIAN 1 |
|||
# endif |
|||
#endif |
|||
|
|||
/* Define to 1 if on MINIX. */ |
|||
#cmakedefine _MINIX 1 |
|||
|
|||
/* Define to 2 if the system does not provide POSIX.1 features except with |
|||
this defined. */ |
|||
#cmakedefine _POSIX_1_SOURCE 1 |
|||
|
|||
/* Define to 1 if you need to in order for `stat' and other things to work. */ |
|||
#cmakedefine _POSIX_SOURCE 1 |
|||
|
|||
/* Define for Solaris 2.5.1 so the uint8_t typedef from <sys/synch.h>, |
|||
<pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the |
|||
#define below would cause a syntax error. */ |
|||
#cmakedefine _UINT8_T 1 |
|||
|
|||
/* Define to empty if `const' does not conform to ANSI C. */ |
|||
#cmakedefine const 1 |
|||
|
|||
/* Define to `__inline__' or `__inline' if that's what the C compiler |
|||
calls it, or to nothing if 'inline' is not supported under any name. */ |
|||
#ifndef __cplusplus |
|||
#cmakedefine inline 1 |
|||
#endif |
|||
|
|||
/* Define to `int' if <sys/types.h> does not define. */ |
|||
#cmakedefine pid_t @pid_t@ |
|||
|
|||
/* Define to `unsigned int' if <sys/types.h> does not define. */ |
|||
#cmakedefine size_t unsigned int |
|||
|
|||
/* Define to `int' if <sys/types.h> does not define. */ |
|||
#cmakedefine ssize_t int |
|||
|
|||
/* Define to the type of an unsigned integer type of width exactly 16 bits if |
|||
such a type exists and the standard includes do not define it. */ |
|||
#cmakedefine uint16_t @uint16_t@ |
|||
|
|||
/* Define to the type of an unsigned integer type of width exactly 8 bits if |
|||
such a type exists and the standard includes do not define it. */ |
|||
#cmakedefine uint8_t @uint8_t@ |
|||
|
|||
/* Define as `fork' if `vfork' does not work. */ |
|||
#cmakedefine vfork |
|||
|
|||
#endif |
@ -0,0 +1,191 @@ |
|||
|
|||
# ------------------------------------------------------------- |
|||
# config.h |
|||
|
|||
# If we generate config.h by automake |
|||
#include_directories(.) |
|||
|
|||
# Use cmake to generate config.h |
|||
include(CheckIncludeFiles) |
|||
include(CheckFunctionExists) |
|||
include(CheckSymbolExists) |
|||
include(CheckLibraryExists) |
|||
include(CheckTypeSize) |
|||
include(CheckCSourceCompiles) |
|||
|
|||
# Define if building universal (internal helper macro) |
|||
# AC_APPLE_UNIVERSAL_BUILD |
|||
set(CONNECT_IN_PROGRESS "EINPROGRESS") |
|||
set(CONNECT_IN_PROGRESS "EINPROGRESS" CACHE STRING "") |
|||
|
|||
|
|||
check_include_files(dlfcn.h HAVE_DLFCN_H) |
|||
check_include_files(ev.h HAVE_EV_H) |
|||
check_include_files(fcntl.h HAVE_FCNTL_H) |
|||
check_function_exists(fork HAVE_FORK) |
|||
check_function_exists(getpwnam_r HAVE_GETPWNAM_R) |
|||
check_function_exists(inet_ntop HAVE_INET_NTOP) |
|||
check_include_files(inttypes.h HAVE_INTTYPES_H) |
|||
set(HAVE_IPv6 1) |
|||
check_include_files(langinfo.h HAVE_LANGINFO_H) |
|||
set(HAVE_LIBPCRE 1) |
|||
check_library_exists(socket socket "" HAVE_LIBSOCKET) |
|||
check_include_files(limits.h HAVE_LIMITS_H) |
|||
check_include_files(linux/if.h HAVE_LINUX_IF_H) |
|||
check_include_files(linux/netfilter_ipv4.h HAVE_LINUX_NETFILTER_IPV4_H) |
|||
check_include_files(linux/netfilter_ipv6/ip6_tables.h HAVE_LINUX_NETFILTER_IPV6_IP6_TABLES_H) |
|||
check_include_files(locale.h HAVE_LOCALE_H) |
|||
|
|||
|
|||
check_function_exists(malloc HAVE_MALLOC) |
|||
check_include_files(memory.h HAVE_MEMORY_H) |
|||
check_function_exists(memset HAVE_MEMSET) |
|||
|
|||
check_include_files(netdb.h HAVE_NETDB_H) |
|||
check_include_files(netinet/in.h HAVE_NETINET_IN_H) |
|||
check_include_files(net/if.h HAVE_NET_IF_H) |
|||
check_include_files(pcre.h HAVE_PCRE_H) |
|||
check_include_files(pcre/pcre.h HAVE_PCRE_PCRE_H) |
|||
check_symbol_exists(PTHREAD_PRIO_INHERIT pthread.h HAVE_PTHREAD_PRIO_INHERIT) |
|||
|
|||
check_function_exists(select HAVE_SELECT) |
|||
check_function_exists(setresuid HAVE_SETRESUID) |
|||
check_function_exists(setreuid HAVE_SETREUID) |
|||
check_function_exists(setrlimit HAVE_SETRLIMIT) |
|||
check_function_exists(socket HAVE_SOCKET) |
|||
|
|||
check_include_files(stdint.h HAVE_STDINT_H) |
|||
check_include_files(stdlib.h HAVE_STDLIB_H) |
|||
|
|||
check_function_exists(strerror HAVE_STRERROR) |
|||
|
|||
check_include_files(strings.h HAVE_STRINGS_H) |
|||
check_include_files(string.h HAVE_STRING_H) |
|||
check_include_files(sys/ioctl.h HAVE_SYS_IOCTL_H) |
|||
check_include_files(sys/select.h HAVE_SYS_SELECT_H) |
|||
check_include_files(sys/socket.h HAVE_SYS_SOCKET_H) |
|||
check_include_files(sys/stat.h HAVE_SYS_STAT_H) |
|||
check_include_files(sys/types.h HAVE_SYS_TYPES_H) |
|||
check_include_files(sys/wait.h HAVE_SYS_WAIT_H) |
|||
check_include_files(udns.h HAVE_UDNS_H) |
|||
check_include_files(unistd.h HAVE_UNISTD_H) |
|||
|
|||
check_function_exists(fork HAVE_FORK) |
|||
check_function_exists(vfork HAVE_VFORK) |
|||
check_include_files(vfork.h HAVE_VFORK_H) |
|||
if (HAVE_VFORK) |
|||
set(HAVE_WORKING_VFORK 1) |
|||
endif () |
|||
if (HAVE_FORK) |
|||
set(HAVE_WORKING_FORK 1) |
|||
endif () |
|||
|
|||
|
|||
# Define to the sub-directory where libtool stores uninstalled libraries. |
|||
set(LT_OBJDIR ".libs/") |
|||
set(NDEBUG 1) |
|||
set(PACKAGE ${PROJECT_NAME}) |
|||
set(PACKAGE_BUGREPORT max.c.lv@gmail.com) |
|||
set(PACKAGE_NAME ${PROJECT_NAME}) |
|||
#set(PACKAGE_VERSION ${PROJECT_VERSION}) |
|||
set(PACKAGE_VERSION 3.0.2) |
|||
set(PACKAGE_STRING "${PROJECT_NAME} ${PACKAGE_VERSION}") |
|||
set(PACKAGE_TARNAME ${PROJECT_NAME}) |
|||
set(PACKAGE_URL "") |
|||
|
|||
#message(${PACKAGE_NAME} - v${PACKAGE_VERSION} - v${PROJECT_VERSION}) |
|||
|
|||
# PTHREAD_CREATE_JOINABLE |
|||
|
|||
# Define as the return type of signal handlers (`int' or `void'). |
|||
set(RETSIGTYPE void) |
|||
|
|||
# Define to the type of arg 1 for `select'. |
|||
set(SELECT_TYPE_ARG1 int) |
|||
|
|||
# Define to the type of args 2, 3 and 4 for `select'. |
|||
set(SELECT_TYPE_ARG234 "(fd_set *)") |
|||
|
|||
# Define to the type of arg 5 for `select'. |
|||
set(SELECT_TYPE_ARG5 "(struct timeval *)") |
|||
|
|||
# Define to 1 if you have the ANSI C header files. |
|||
set(STDC_HEADERS 1) |
|||
|
|||
|
|||
check_include_files(sys/time.h time.h TIME_WITH_SYS_TIME) |
|||
|
|||
|
|||
# If the compiler supports a TLS storage class define it to that here |
|||
check_c_source_compiles(" |
|||
__thread int tls; |
|||
int main(void) { return 0; }" |
|||
HAVE_GCC_THREAD_LOCAL_STORAGE) |
|||
if (HAVE_GCC_THREAD_LOCAL_STORAGE) |
|||
set(TLS __thread) |
|||
endif () |
|||
|
|||
set(_ALL_SOURCE 1) |
|||
set(_GNU_SOURCE 1) |
|||
set(_POSIX_PTHREAD_SEMANTICS 1) |
|||
set(_TANDEM_SOURCE 1) |
|||
set(__EXTENSIONS__ 1) |
|||
# USE_SYSTEM_SHARED_LIB |
|||
set(VERSION ${PACKAGE_VERSION}) |
|||
# TODO WORDS_BIGENDIAN |
|||
# _MINIX |
|||
# _POSIX_1_SOURCE |
|||
# _POSIX_SOURCE |
|||
# _UINT8_T |
|||
|
|||
# Define to empty if `const' does not conform to ANSI C. |
|||
# undef const |
|||
|
|||
# Define to `__inline__' or `__inline' if that's what the C compiler |
|||
# calls it, or to nothing if 'inline' is not supported under any name. |
|||
#ifndef __cplusplus |
|||
#undef inline |
|||
#endif |
|||
# TODO Assume we got inline support |
|||
# https://cmake.org/Wiki/CMakeTestInline |
|||
|
|||
# Define to `int' if <sys/types.h> does not define. |
|||
# undef pid_t |
|||
# Define to the type of an unsigned integer type of width exactly 16 bits if |
|||
# such a type exists and the standard includes do not define it. |
|||
# undef uint16_t |
|||
# Define to the type of an unsigned integer type of width exactly 8 bits if |
|||
# such a type exists and the standard includes do not define it. |
|||
# undef uint8_t |
|||
set(CMAKE_EXTRA_INCLUDE_FILES sys/types.h) |
|||
check_type_size(pid_t PID_T) |
|||
check_type_size(size_t SIZE_T) |
|||
check_type_size(ssize_t SSIZE_T) |
|||
set(CMAKE_EXTRA_INCLUDE_FILES) |
|||
|
|||
check_type_size(uint16_t UINT16_T) |
|||
check_type_size(uint8_t UINT8_T) |
|||
|
|||
## Inverse |
|||
if (NOT HAVE_PID_T) |
|||
set(pid_t int) |
|||
endif () |
|||
if (NOT HAVE_SIZE_T) |
|||
set(size_t "unsigned int") |
|||
endif () |
|||
if (NOT HAVE_SSIZE_T) |
|||
set(ssize_t int) |
|||
endif () |
|||
|
|||
if (NOT HAVE_UINT8_T) |
|||
set(uint8_t "unsigned char") |
|||
endif () |
|||
if (NOT HAVE_UINT16_T) |
|||
set(uint16_t "unsigned short") |
|||
endif () |
|||
|
|||
|
|||
# Define as `fork' if `vfork' does not work. |
|||
if (NOT HAVE_WORKING_VFORK) |
|||
set(vfork fork) |
|||
endif () |
@ -0,0 +1,14 @@ |
|||
prefix=@prefix@ |
|||
exec_prefix=${prefix}/@CMAKE_INSTALL_BINDIR@ |
|||
libdir=${exec_prefix}/@CMAKE_INSTALL_FULL_LIBDIR@ |
|||
includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@ |
|||
sharedir=${prefix}/@CMAKE_INSTALL_DATAROOTDIR@ |
|||
mandir=${prefix}/@CMAKE_INSTALL_MANDIR@ |
|||
|
|||
Name: @PROJECT_NAME@ |
|||
Description: @PROJECT_DESC@ |
|||
URL: @PROJECT_URL@ |
|||
Version: @PROJECT_VERSION@ |
|||
Requires: |
|||
Cflags: -I${includedir} |
|||
Libs: -L${libdir} -lshadowsocks-libev -lcrypto |
@ -0,0 +1,8 @@ |
|||
# Alpine with China mirror |
|||
FROM alpine |
|||
MAINTAINER wener <wenermail@gmail.com> |
|||
|
|||
# Better for cache and dev |
|||
RUN apk add --no-cache --virtual .build-deps \ |
|||
alpine-sdk cmake \ |
|||
linux-headers libev-dev libsodium-dev mbedtls-static mbedtls-dev pcre-dev udns-dev |
@ -0,0 +1,5 @@ |
|||
#!/bin/sh |
|||
set -e |
|||
set -o xtrace |
|||
|
|||
cmake -DBUILD_STATIC=OFF . && make && make install |
@ -0,0 +1,185 @@ |
|||
# redir need linux/* stuff |
|||
if (LINUX) |
|||
option(WITH_SS_REDIR "Build ss-redir" ON) |
|||
else () |
|||
option(WITH_SS_REDIR "Build ss-redir" OFF) |
|||
endif () |
|||
|
|||
|
|||
set(SS_SNI_SOURCE |
|||
http.c |
|||
tls.c |
|||
rule.c |
|||
) |
|||
|
|||
set(SS_CRYPTO_SOURCE |
|||
crypto.c |
|||
aead.c |
|||
stream.c |
|||
base64.c |
|||
) |
|||
|
|||
set(SS_PLUGIN_SOURCE |
|||
plugin.c |
|||
) |
|||
|
|||
set(SS_SHARED_SOURCES |
|||
ppbloom.c |
|||
utils.c |
|||
jconf.c |
|||
json.c |
|||
netutils.c |
|||
) |
|||
|
|||
set(LIBSHADOWSOCKS_LIBEV_SOURCE |
|||
${SS_SHARED_SOURCES} |
|||
udprelay.c |
|||
cache.c |
|||
acl.c |
|||
local.c |
|||
${SS_CRYPTO_SOURCE} |
|||
${SS_PLUGIN_SOURCE} |
|||
${SS_SNI_SOURCE}) |
|||
|
|||
set(SS_LOCAL_SOURCE |
|||
${LIBSHADOWSOCKS_LIBEV_SOURCE} |
|||
|
|||
) |
|||
|
|||
set(SS_TUNNEL_SOURCE |
|||
${SS_SHARED_SOURCES} |
|||
udprelay.c |
|||
cache.c |
|||
tunnel.c |
|||
${SS_CRYPTO_SOURCE} |
|||
${SS_PLUGIN_SOURCE} |
|||
) |
|||
|
|||
set(SS_SERVER_SOURCE |
|||
${SS_SHARED_SOURCES} |
|||
udprelay.c |
|||
cache.c |
|||
acl.c |
|||
resolv.c |
|||
server.c |
|||
${SS_CRYPTO_SOURCE} |
|||
${SS_PLUGIN_SOURCE} |
|||
${SS_SNI_SOURCE} |
|||
) |
|||
|
|||
set(SS_MANAGER_SOURCE |
|||
${SS_SHARED_SOURCES} |
|||
manager.c |
|||
) |
|||
|
|||
set(SS_REDIR_SOURCE |
|||
${SS_SHARED_SOURCES} |
|||
udprelay.c |
|||
cache.c |
|||
redir.c |
|||
${SS_CRYPTO_SOURCE} |
|||
${SS_PLUGIN_SOURCE} |
|||
${SS_SNI_SOURCE} |
|||
) |
|||
|
|||
|
|||
find_library(LIBSODIUM libsodium.a) |
|||
find_library(LIBMBEDTLS libmbedtls.a) |
|||
find_library(LIBMBEDCRYPTO libmbedcrypto.a) |
|||
find_library(LIBEV libev.a) |
|||
find_library(LIBUDNS libudns.a) |
|||
find_library(LIBPCRE libpcre.a) |
|||
|
|||
find_library(LIBSODIUM_SHARED sodium) |
|||
find_library(LIBMBEDTLS_SHARED mbedtls) |
|||
find_library(LIBMBEDCRYPTO_SHARED mbedcrypto) |
|||
find_library(LIBEV_SHARED ev) |
|||
find_library(LIBUDNS_SHARED udns) |
|||
find_library(LIBPCRE_SHARED pcre) |
|||
|
|||
list(APPEND DEPS bloom m ${LIBEV} ${LIBUDNS} ${LIBPCRE} ${LIBSODIUM} ${LIBMBEDTLS} ${LIBMBEDCRYPTO}) |
|||
list(APPEND DEPS_SHARED bloom-shared m ${LIBEV_SHARED} ${LIBUDNS_SHARED} ${LIBPCRE_SHARED} ${LIBSODIUM_SHARED} |
|||
${LIBMBEDTLS_SHARED} ${LIBMBEDCRYPTO_SHARED}) |
|||
|
|||
find_package (Threads) |
|||
|
|||
# Add our targets |
|||
add_executable(ss-server ${SS_SERVER_SOURCE}) |
|||
add_executable(ss-tunnel ${SS_TUNNEL_SOURCE}) |
|||
add_executable(ss-manager ${SS_MANAGER_SOURCE}) |
|||
add_executable(ss-local ${SS_LOCAL_SOURCE}) |
|||
if (WITH_SS_REDIR) |
|||
add_executable(ss-redir ${SS_REDIR_SOURCE}) |
|||
else () |
|||
add_executable(ss-redir EXCLUDE_FROM_ALL ${SS_REDIR_SOURCE}) |
|||
endif () |
|||
add_library(shadowsocks-libev STATIC ${LIBSHADOWSOCKS_LIBEV_SOURCE}) |
|||
|
|||
|
|||
target_compile_definitions(ss-server PUBLIC -DMODULE_REMOTE) |
|||
target_compile_definitions(ss-tunnel PUBLIC -DMODULE_TUNNEL) |
|||
target_compile_definitions(ss-manager PUBLIC -DMODULE_MANAGER) |
|||
target_compile_definitions(ss-local PUBLIC -DMODULE_LOCAL) |
|||
target_compile_definitions(ss-redir PUBLIC -DMODULE_REDIR) |
|||
target_compile_definitions(shadowsocks-libev PUBLIC -DMODULE_LOCAL) |
|||
|
|||
target_link_libraries(ss-server cork ipset ${DEPS}) |
|||
target_link_libraries(ss-tunnel cork ${DEPS}) |
|||
target_link_libraries(ss-manager m bloom cork ${LIBEV} ${LIBUDNS}) |
|||
target_link_libraries(ss-local cork ipset ${DEPS}) |
|||
target_link_libraries(ss-redir cork ipset ${DEPS}) |
|||
target_link_libraries(shadowsocks-libev cork ipset ${DEPS}) |
|||
|
|||
# ------------------------------------------------------------------ |
|||
# Shared |
|||
add_executable(ss-server-shared ${SS_SERVER_SOURCE}) |
|||
add_executable(ss-tunnel-shared ${SS_TUNNEL_SOURCE}) |
|||
add_executable(ss-manager-shared ${SS_MANAGER_SOURCE}) |
|||
add_executable(ss-local-shared ${SS_LOCAL_SOURCE}) |
|||
if (WITH_SS_REDIR) |
|||
add_executable(ss-redir-shared ${SS_REDIR_SOURCE}) |
|||
else () |
|||
add_executable(ss-redir-shared EXCLUDE_FROM_ALL ${SS_REDIR_SOURCE}) |
|||
endif () |
|||
add_library(shadowsocks-libev-shared SHARED ${LIBSHADOWSOCKS_LIBEV_SOURCE}) |
|||
|
|||
target_compile_definitions(ss-server-shared PUBLIC -DMODULE_REMOTE) |
|||
target_compile_definitions(ss-tunnel-shared PUBLIC -DMODULE_TUNNEL) |
|||
target_compile_definitions(ss-manager-shared PUBLIC -DMODULE_MANAGER) |
|||
target_compile_definitions(ss-local-shared PUBLIC -DMODULE_LOCAL) |
|||
target_compile_definitions(ss-redir-shared PUBLIC -DMODULE_REDIR) |
|||
target_compile_definitions(shadowsocks-libev-shared PUBLIC -DMODULE_LOCAL) |
|||
|
|||
target_link_libraries(ss-server-shared cork-shared ipset-shared ${DEPS_SHARED}) |
|||
target_link_libraries(ss-tunnel-shared cork-shared ${DEPS_SHARED}) |
|||
target_link_libraries(ss-manager-shared m bloom-shared cork-shared ${CMAKE_THREAD_LIBS_INIT} ${LIBEV_SHARED} ${LIBUDNS_SHARED}) |
|||
target_link_libraries(ss-local-shared cork-shared ipset-shared ${DEPS_SHARED}) |
|||
target_link_libraries(ss-redir-shared cork-shared ipset-shared ${DEPS_SHARED}) |
|||
target_link_libraries(shadowsocks-libev-shared cork-shared ipset-shared ${DEPS_SHARED}) |
|||
|
|||
set_target_properties(ss-server-shared PROPERTIES OUTPUT_NAME ss-server) |
|||
set_target_properties(ss-tunnel-shared PROPERTIES OUTPUT_NAME ss-tunnel) |
|||
set_target_properties(ss-manager-shared PROPERTIES OUTPUT_NAME ss-manager) |
|||
set_target_properties(ss-local-shared PROPERTIES OUTPUT_NAME ss-local) |
|||
set_target_properties(ss-redir-shared PROPERTIES OUTPUT_NAME ss-redir) |
|||
|
|||
set_target_properties(ss-server-shared ss-tunnel-shared ss-manager-shared ss-local-shared ss-redir-shared |
|||
PROPERTIES |
|||
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/shared/bin" |
|||
) |
|||
|
|||
set_target_properties(shadowsocks-libev-shared PROPERTIES OUTPUT_NAME shadowsocks-libev) |
|||
target_compile_definitions(shadowsocks-libev-shared PUBLIC -DMODULE_LOCAL) |
|||
target_link_libraries(shadowsocks-libev-shared cork-shared ipset-shared ${DEPS_SHARED}) |
|||
|
|||
|
|||
install(DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} |
|||
DESTINATION bin |
|||
FILES_MATCHING PATTERN "ss-*") |
|||
|
|||
|
|||
add_custom_target(distclean |
|||
COMMAND ${CMAKE_COMMAND} -E echo WARNING: distclean target is not functional |
|||
COMMAND ${CMAKE_COMMAND} -E echo Use 'git clean -fdx' instead |
|||
VERBATIM |
|||
) |
Write
Preview
Loading…
Cancel
Save