mirror of
https://github.com/shadowsocks/shadowsocks-libev.git
synced 2026-10-23 08:03:54 +00:00
Merge branch 'cmake'
This commit is contained in:
@@ -11,6 +11,7 @@ m4/ltsugar.m4
|
||||
m4/ltversion.m4
|
||||
m4/lt~obsolete.m4
|
||||
src/Makefile.in
|
||||
src/config.h
|
||||
|
||||
# Ignore files generated by configure
|
||||
build/
|
||||
|
||||
+21
@@ -20,6 +20,8 @@ before_install:
|
||||
- make
|
||||
- sudo make install
|
||||
- popd
|
||||
# Load cached docker images
|
||||
- if [[ -d $HOME/docker ]]; then ls $HOME/docker/*.tar.gz | xargs -I {file} sh -c "zcat {file} | docker load"; fi
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
@@ -32,6 +34,9 @@ addons:
|
||||
script:
|
||||
- ./autogen.sh
|
||||
- ./configure && make
|
||||
# Test cmake using our builder
|
||||
- cd docker/build && docker build -f builder.Dockerfile -t builder . && cd -
|
||||
- docker run --rm -it -v $PWD:/src -w /src builder sh -c /src/docker/build/dockerbuild.sh
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
@@ -41,3 +46,19 @@ notifications:
|
||||
email:
|
||||
on_success: change
|
||||
on_failure: always
|
||||
|
||||
# Use cache to speedup next build
|
||||
services:
|
||||
- docker
|
||||
|
||||
before_cache:
|
||||
# Save tagged docker images
|
||||
- >
|
||||
mkdir -p $HOME/docker && docker images -a --filter='dangling=false' --format '{{.Repository}}:{{.Tag}} {{.ID}}'
|
||||
| xargs -n 2 -t sh -c 'test -e $HOME/docker/$1.tar.gz || docker save $0 | gzip -2 > $HOME/docker/$1.tar.gz'
|
||||
|
||||
cache:
|
||||
bundler: true
|
||||
directories:
|
||||
- $HOME/docker
|
||||
|
||||
|
||||
+131
@@ -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
|
||||
Executable
+5
@@ -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
|
||||
)
|
||||
Reference in New Issue
Block a user