From 8f57b066892be057f9001ad8dd388bd474596230 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Fri, 24 Mar 2023 10:08:49 -0700 Subject: [PATCH 01/22] add initial partialy working cmake configuration Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com> --- .gitignore | 3 + CMakeLists.txt | 950 ++++++++++++++++ cmake/FindCPPUNIT.cmake | 66 ++ cmake/FindDocutils.cmake | 34 + cmake/FindGMP.cmake | 38 + cmake/FindJemalloc.cmake | 34 + cmake/FindLibGcrypt.cmake | 146 +++ cmake/FindLibSSH2.cmake | 31 + cmake/FindLibUV.cmake | 56 + cmake/FindLibcares.cmake | 49 + cmake/FindNettle.cmake | 50 + cmake/FindSphinx.cmake | 20 + cmake/FindTcmalloc.cmake | 42 + deps/CMakeLists.txt | 16 + deps/wslay/CMakeLists.txt | 38 + deps/wslay/lib/CMakeLists.txt | 81 ++ deps/wslay/lib/includes/CMakeLists.txt | 33 + deps/wslay/tests/CMakeLists.txt | 81 ++ doc/CMakeLists.txt | 28 + doc/manual-src/CMakeLists.txt | 16 + doc/manual-src/en/CMakeLists.txt | 163 +++ doc/manual-src/pt/CMakeLists.txt | 157 +++ doc/manual-src/ru/CMakeLists.txt | 158 +++ lib/CMakeLists.txt | 11 + src/CMakeLists.txt | 1455 ++++++++++++++++++++++++ src/includes/CMakeLists.txt | 12 + test/CMakeLists.txt | 359 ++++++ 27 files changed, 4127 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 cmake/FindCPPUNIT.cmake create mode 100644 cmake/FindDocutils.cmake create mode 100644 cmake/FindGMP.cmake create mode 100644 cmake/FindJemalloc.cmake create mode 100644 cmake/FindLibGcrypt.cmake create mode 100644 cmake/FindLibSSH2.cmake create mode 100644 cmake/FindLibUV.cmake create mode 100644 cmake/FindLibcares.cmake create mode 100644 cmake/FindNettle.cmake create mode 100644 cmake/FindSphinx.cmake create mode 100644 cmake/FindTcmalloc.cmake create mode 100644 deps/CMakeLists.txt create mode 100644 deps/wslay/CMakeLists.txt create mode 100644 deps/wslay/lib/CMakeLists.txt create mode 100644 deps/wslay/lib/includes/CMakeLists.txt create mode 100644 deps/wslay/tests/CMakeLists.txt create mode 100644 doc/CMakeLists.txt create mode 100644 doc/manual-src/CMakeLists.txt create mode 100644 doc/manual-src/en/CMakeLists.txt create mode 100644 doc/manual-src/pt/CMakeLists.txt create mode 100644 doc/manual-src/ru/CMakeLists.txt create mode 100644 lib/CMakeLists.txt create mode 100644 src/CMakeLists.txt create mode 100644 src/includes/CMakeLists.txt create mode 100644 test/CMakeLists.txt diff --git a/.gitignore b/.gitignore index 282ebe32..26e10524 100644 --- a/.gitignore +++ b/.gitignore @@ -44,3 +44,6 @@ compile main.log main.trs test-suite.log +compile_commands.json +/build +/.cache diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..589513c8 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,950 @@ +cmake_minimum_required(VERSION 3.15) + +project(aria2 LANGUAGES CXX C VERSION 1.36.0) + +# include(ConfigureChecks.cmake) + +set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/") + +######## Set compiler flags ######## +set(CMAKE_CXX_STANDARD_REQUIRED true) +set(CMAKE_C_STANDARD_REQUIRED true) +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_C_STANDARD 11) +include(GenerateExportHeader) + +if (WIN32) + + set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -D_POSIX_C_SOURCE=1) + set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} -Wl,--dynamicbase -Wl,--nxcompat) + set(CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS} -Wl,--dynamicbase -Wl,--nxcompat) + set(CMAKE_STATIC_LINKER_FLAGS_LINKER_FLAGS ${CMAKE_STATIC_LINKER_FLAGS} -Wl,--dynamicbase -Wl,--nxcompat) + + set(EXTRALIBS -lws2_32 -lwsock32 -lgdi32 -liphlpapi -lpsapi ${EXTRALIBS}) + +endif() + +option(WITH_LIBUV "Build with libuv" off) +option(WITH_APPLETLS "Build with appletls" on) +option(WITH_WINTLS "Build with wintls" on) +option(WITH_GNUTLS "Build with gnutls" on) +option(WITH_LIBNETTLE "Build with libnettle" on) +option(WITH_LIBGMP "Build with libgmp" on) +option(WITH_LIBGCRYPT "Build with libgcrypt" on) +option(WITH_OPENSSL "Build with openssl" on) +option(WITH_SQLITE3 "Build with SQLite3" on) +option(WITH_LIBXML2 "Build with libxml2" on) +option(WITH_LIBEXPAT "Build with libexpat" on) +option(WITH_LIBCARES "Build with libcares" on) +option(WITH_LIBZ "Build with libz" on) +option(WITH_TCMALLOC "Build with tcmalloc" off) +option(WITH_JEMALLOC "Build with jemalloc" off) +option(WITH_LIBSSH2 "Build with libssh2" on) + +option(ENABLE_SSL "Build with ssl support" on) +option(ENABLE_BITTORRENT "Build with bittorrent support" on) +option(ENABLE_METALINK "Build with metalink support" on) +option(ENABLE_WEBSOCKET "Build with websocket support" on) +option(ENABLE_EPOLL "Build with epoll support" on) +option(ENABLE_LIBARIA2 "Build the libaria2 shared library" off) +option(ENABLE_WERROR "Builld with werror" off) + +set(CA_BUNDLE "" CACHE FILEPATH "Define to choose default CA bundle.[Use FILE as default CA bundle.") +set(DISK_CACHE "" CACHE STRING "Define to choose default disk-cache size") +set(BASHCOMPLETIONDIR "" CACHE STRING "Directory to install bash_completion file") + +if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + # using Clang +elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + # using GCC + set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -pipe) + +elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + # using Intel C++ +elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + # using Visual Studio C++ +endif() + +if (CMAKE_C_COMPILER_ID STREQUAL "GNU") + set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} -pipe) +endif() + +option(ARIA2_STATIC "Set 'on' to build a statically linked aria2" off) + +# i686-w64-mingw32-g++ 4.6 does not support override keyword. For +# those compilers, define CXX11_OVERRIDE to empty string. Otherwise +# define it as override. Use CXX11_OVERRIDE instead of override. +message(STATUS "Checking whether the C++ compiler supports `override` keyword") +set(_tmp_src +"\ +struct Base { +virtual void f() = 0; +}; +struct Derived : Base { +virtual void f() override {} +}; + +int main(int argc, char* argv[]) { + Derived x; +} +") +try_compile(CXX11_OVERRIDE + SOURCE_FROM_VAR cx11_override.cc _tmp_src +) +unset(_tmp_src) +if(CXX11_OVERRIDE) + add_compile_definitions(CXX11_OVERRIDE=override) + message(STATUS "Checking whether the C++ compiler supports `override` keyword - yes") +else() + add_compile_definitions(CXX11_OVERRIDE=) + message(STATUS "Checking whether the C++ compiler supports `override` keyword - no") +endif() + +if (ARIA2_STATIC) + if (WIN32) + # Define _USE_32BIT_TIME_T because 32bit library of MinGW-w64 + # does not implement many 64bit version functions. + set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -D_USE_32BIT_TIME_T) + endif() +endif() + +option(ENABLE_GNUTIL_SYSTEM_CRYPTO_POLICY "Enable gnutls system wide crypto policy" off) +if(ENABLE_GNUTIL_SYSTEM_CRYPTO_POLICY) + set(USE_GNUTLS_SYSTEM_CRYPTO_POLICY yes CACHE BOOL "Define to 1 if using gnutls system wide crypto policy .") +endif() + +##### Check for Libraries ##### + +include(CheckLibraryExists) +include(CheckSymbolExists) +include(CheckCXXSymbolExists) +include(CheckIncludeFiles) +include(CheckTypeSize) +include(CheckFunctionExists) + +find_package(CPPUNIT) +if(CPPUNIT_FOUND) + set(HAVE_CPPUNIT yes CACHE BOOL "Define if you have CPPUNIT" FORCE) +else() + set(HAVE_CPPUNIT no CACHE BOOL "Define if you have CPPUNIT" FORCE) +endif() + +find_package(ZLIB 1.2.3) +if(ZLIB_FOUND) + set(HAVE_ZLIB yes CACHE BOOL "Define if you have zlib" FORCE) + set(ZLIB_CFLAGS "") + set(ZLIB_LIBS ${ZLIB_LIBRARIES}) + add_compile_definitions(HAVE_ZLIB=1) + + set(save_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) + set(save_CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES}) + set(CMAKE_REQUIRED_LIBRARIES ${ZLIB_LIBRARIES}) + set(CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIRS}) + + check_cxx_symbol_exists(gzbuffer zlib.h HAVE_GZBUFFER) + if(HAVE_GZBUFFER) + add_compile_definitions(HAVE_GZBUFFER) + endif() + + check_cxx_symbol_exists(gzsetparams zlib.h HAVE_GZSETPARAMS) + if(HAVE_GZSETPARAMS) + add_compile_definitions(HAVE_GZSETPARAMS) + endif() + + set(CMAKE_REQUIRED_LIBRARIES ${save_CMAKE_REQUIRED_LIBRARIES}) + set(CMAKE_REQUIRED_INCLUDES ${save_CMAKE_REQUIRED_INCLUDES}) + + set(aria2_LIBS ${ZLIB_LIBRARIES} ${aria2_LIBS}) +else() + set(HAVE_ZLIB no CACHE BOOL "Define if you have zlib" FORCE) +endif() + +find_package(LibUV 1.13) +if(LIBUV_FOUND) + set(HAVE_LIBUV yes CACHE BOOL "Define if you have libuv" FORCE) + set(LIBUV_CFLAGS "") + set(LIBUV_LIBS ${LIBUV_LIBRARIES}) + add_compile_definitions(HAVE_LIBUV=1) +else() + set(HAVE_LIBUV no CACHE BOOL "Define if you have libuv" FORCE) +endif() + +find_package(LibXml2) +if(LibXml2_FOUND) + set(HAVE_LIBXML2 yes CACHE BOOL "Define if you have libxml2" FORCE) + set(LIBXML2_CFLAGS "") + set(LIBXML2_LIBS ${LIBXML2_LIBRARIES}) + add_compile_definitions(HAVE_LIBXML2=1) +else() + set(HAVE_LIBXML2 no CACHE BOOL "Define if you have libxml2" FORCE) +endif() + +find_package(EXPAT) +if(EXPAT_FOUND) + set(HAVE_LIBEXPAT yes CACHE BOOL "Define if you have libexpat" FORCE) + set(LIBEXPAT_CFLAGS "") + set(LIBEXPAT_LIBS ${EXPAT_LIBRARIES}) + add_compile_definitions(HAVE_LIBEXPAT=1) +else() + set(HAVE_LIBEXPAT no CACHE BOOL "Define if you have libexpat" FORCE) +endif() + +find_package(SQLite3) +if(SQLite3_FOUND) + set(HAVE_SQLITE3 yes CACHE BOOL "Define if you have sqlite3" FORCE) + set(SQLITE3_CFLAGS "") + set(SQLITE3_LIBS ${SQLite3_LIBRARIES}) + add_compile_definitions(HAVE_SQLITE3=1) + + set(save_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) + set(save_CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES}) + set(CMAKE_REQUIRED_LIBRARIES ${SQLite3_LIBRARIES}) + set(CMAKE_REQUIRED_INCLUDES ${SQLite3_INCLUDE_DIRS}) + + check_cxx_symbol_exists(sqlite3_open_v2 sqlite3.h HAVE_SQLITE3_OPEN_V2) + if(HAVE_SQLITE3_OPEN_V2) + add_compile_definitions(HAVE_SQLITE3_OPEN_V2) + endif() + + set(CMAKE_REQUIRED_LIBRARIES ${save_CMAKE_REQUIRED_LIBRARIES}) + set(CMAKE_REQUIRED_INCLUDES ${save_CMAKE_REQUIRED_INCLUDES}) +else() + set(HAVE_SQLITE3 no CACHE BOOL "Define if you have sqlite3" FORCE) +endif() + +if (APPLE) + set(HAVE_OSX yes CACHE BOOL "On Mac OS X" FORCE) +else() + set(HAVE_OSX no CACHE BOOL "On Mac OS X" FORCE) +endif() + +if(WIN32) + set(WIN_BUILD yes) + set(_check_headers + windows.h + winsock2.h + ws2tcpip.h + mmsystem.h + io.h + iphlpapi. + winioctl.h + share.h + ) + + foreach (header ${_check_headers}) + string(TOUPPER ${header} header_var) + string(REPLACE "." "_" header_var ${header_var}) + string(REPLACE "/" "_" header_var ${header_var}) + set(header_var "HAVE_${header_var}") + set(${header_var}) + check_include_file(${header} ${header_var}) + if (${header_var}) + add_compile_definitions(${header_var}) + else() + endif() + endforeach() + unset(_check_headers) + +else() + set(WIN_BUILD no) +endif() + +set(HAVE_APPLETLS no CACHE BOOL "Define if you have Apple TLS" FORCE) +if(WITH_APPLETLS) + if(HAVE_OSX) + set(HAVE_APPLETLS yes CACHE BOOL "Define if you have Apple TLS" FORCE) + add_compile_definitions(HAVE_APPLETLS=1) + set(APPLETLS_LD_FLAGS "-framework CoreFoundation" "-framework Security") + set(HAVE_SSL yes CACHE BOOL "Have SSL support" FORCE) + set(HAVE_NATIVETLS yes CACHE BOOL "Have Native TLS" FORCE) + message(STATUS "Enable Mac OS X native SSL/TLS support") + endif() +endif() + +set(HAVE_WINTLS no CACHE BOOL "Define if you have Windows TLS support" FORCE) +if(WITH_WINTLS) + if(WIN32) + find_library(HAVE_WINTLS_LIBS crypt32) + find_library(HAVE_WINTLS_LIBS secur32) + find_library(HAVE_WINTLS_LIBS advapi32) + check_include_file(wincrypt.h HAVE_WINTLS_HEADERS) + check_include_file(security.h HAVE_WINTLS_HEADERS) + + if(HAVE_WINTLS_LIBS AND HAVE_WINTLS_HEADERS) + set(HAVE_WINTLS yes CACHE BOOL "Define if you have Windows TLS support" FORCE) + add_compile_definitions(HAVE_WINTLS=1) + add_compile_definitions(SECURITY_WIN32=1) # Use security.h in WIN32 mode + set(WINTLS_LIBS "-lcrypt32 -lsecur32 -ladvapi32") + set(HAVE_SSL yes CACHE BOOL "Have SSL support" FORCE) + set(HAVE_NATIVETLS yes CACHE BOOL "Have Native TLS" FORCE) + message(STATUS "Enable Windows native SSL/TLS support") + endif() + endif() +endif() + +set(HAVE_LIBGNUTLS no CACHE BOOL "Define if you have libguntls" FORCE) +if(WITH_GNUTLS) + find_package(GnuTLS 2.2.0) + if(GNUTLS_FOUND AND NOT HAVE_SSL) + set(HAVE_LIBGNUTLS yes CACHE BOOL "Define if you have libguntls" FORCE) + set(LIBGNUTLS_CFLAGS "${GNUTLS_DEFINITIONS}") + set(LIBGNUTLS_LIBS ${GNUTLS_LIBRARIES}) + add_compile_definitions(HAVE_LIBGNUTLS=1) + set(HAVE_SSL yes CACHE BOOL "Have SSL support" FORCE) + + set(save_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) + set(save_CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES}) + set(save_CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}) + set(CMAKE_REQUIRED_LIBRARIES ${GNUTLS_LIBRARIES}) + set(CMAKE_REQUIRED_INCLUDES ${GNUTLS_INCLUDE_DIR}) + set(CMAKE_REQUIRED_DEFINITIONS ${GNUTLS_DEFINITIONS}) + + check_cxx_symbol_exists(gnutls_certificate_set_x509_system_trust gnutls/gnutls.h HAVE_GNUTLS_CERTIFICATE_SET_X509_SYSTEM_TRUST) + if(HAVE_GNUTLS_CERTIFICATE_SET_X509_SYSTEM_TRUST) + add_compile_definitions(HAVE_GNUTLS_CERTIFICATE_SET_X509_SYSTEM_TRUST) + endif() + + set(CMAKE_REQUIRED_LIBRARIES ${save_CMAKE_REQUIRED_LIBRARIES}) + set(CMAKE_REQUIRED_INCLUDES ${save_CMAKE_REQUIRED_INCLUDES}) + set(CMAKE_REQUIRED_DEFINITIONS ${save_CMAKE_REQUIRED_DEFINITIONS}) + endif() +endif() + +set(HAVE_OPENSSL no CACHE BOOL "Define is you have openssl" FORCE) +if(WITH_OPENSSL) + find_package(OpenSSL) + if(OPENSSL_FOUND AND NOT HAVE_SSL) + set(HAVE_OPENSSL yes CACHE BOOL "Define is you have openssl" FORCE) + add_compile_definitions(HAVE_OPENSSL=1) + + set(save_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) + set(save_CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES}) + set(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_LIBRARIES}) + set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR}) + + check_cxx_symbol_exists(EVP_DigestInit_ex evp.h HAVE_EVP_DIGESTINIT_EX) + if(HAVE_EVP_DIGESTINIT_EX) + set(HAVE_OLD_OPENSSL yes CACHE BOOL "Define if you have old openssl" FORCE) + add_compile_definitions(HAVE_OLD_OPENSSL=1) + endif() + + check_cxx_symbol_exists(EVP_sha224 evp.h HAVE_EVP_SHA224) + if(HAVE_EVP_SHA224) + add_compile_definitions(HAVE_EVP_SHA224) + endif() + + check_cxx_symbol_exists(EVP_sha256 evp.h HAVE_EVP_SHA256) + if(HAVE_EVP_SHA256) + add_compile_definitions(HAVE_EVP_SHA256) + endif() + + check_cxx_symbol_exists(EVP_sha384 evp.h HAVE_EVP_SHA384) + if(HAVE_EVP_SHA384) + add_compile_definitions(HAVE_EVP_SHA384) + endif() + + check_cxx_symbol_exists(EVP_sha512 evp.h HAVE_EVP_SHA512) + if(HAVE_EVP_SHA512) + add_compile_definitions(HAVE_EVP_SHA512) + endif() + + set(CMAKE_REQUIRED_LIBRARIES ${save_CMAKE_REQUIRED_LIBRARIES}) + set(CMAKE_REQUIRED_INCLUDES ${save_CMAKE_REQUIRED_INCLUDES}) + + endif() +endif() + +set(HAVE_LIBNETTLE no CACHE BOOL "Define if you have libnettle" FORCE) +set(HAVE_LIBGMP no CACHE BOOL "Define if you have GNU Multiple Precision Arithmetis Library (GMP)" FORCE) +set(HAVE_LIBGCRYPT no CACHE BOOL "Define is you have LibGcrypt" FORCE) +if(NOT HAVE_OPENSSL) + if(WITH_LIBNETTLE) + find_package(Nettle) + if(NETTLE_FOUND AND NOT HAVE_NATIVETLS) + set(HAVE_LIBNETTLE yes CACHE BOOL "Define if you have libnettle" FORCE) + set(LIBNETTLE_CFLAGS "") + set(LIBNETTLE_LIBS ${NETTLE_LIBRARIES}) + add_compile_definitions(HAVE_LIBNETTLE=1) + endif() + endif() + + if(WITH_LIBGMP) + find_package(GMP) + if(GMP_FOUND AND (HAVE_LIBNETTLE OR HAVE_NATIVETLS) AND ENABLE_BITTORRENT) + set(LIBGMP_LIBS ${GMP_LIBRARIES} ) + set(LIBGMP_CFLAGS "" ) + set(HAVE_LIBGMP yes CACHE BOOL "Define if you have GNU Multiple Precision Arithmetis Library (GMP)" FORCE) + add_compile_definitions(HAVE_LIBGMP=1) + set(save_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) + set(save_CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES}) + set(CMAKE_REQUIRED_LIBRARIES ${GMP_LIBRARIES}) + set(CMAKE_REQUIRED_INCLUDES ${GMP_INCLUDE_DIR}) + check_cxx_symbol_exists(__gmpz_powm_sec gmp.h HAVE_MPZ_POWM_SEC) + if(HAVE_MPZ_POWM_SEC) + add_compile_definitions(HAVE_GMP_SEC=1) + endif() + set(CMAKE_REQUIRED_LIBRARIES ${save_CMAKE_REQUIRED_LIBRARIES}) + set(CMAKE_REQUIRED_INCLUDES ${save_CMAKE_REQUIRED_INCLUDES}) + endif() + endif() + + if(WITH_LIBGCRYPT) + find_package(LibGcrypt) + if(LibGcrypt_FOUND AND NOT HAVE_NATIVETLS AND NOT HAVE_LIBNETTLE) + set(LIBGCRYPT_CFLAGS "") + set(LIBGCRYPT_LIBS ${LibGcrypt_LIBRARIES}) + set(HAVE_LIBGCRYPT yes CACHE BOOL "Define is you have LibGcrypt" FORCE) + add_compile_definitions(HAVE_LIBGCRYPT=1) + endif() + endif() + +endif() + +set(HAVE_LIBSSH2 no CACHE BOOL "Define if you have LibSSH2" FORCE) +if(WITH_LIBSSH2) + find_package(LibSSH2) + if(LIBSSH2_FOUND) + set(HAVE_LIBSSH2 yes CACHE BOOL "Define if you have LibSSH2" FORCE) + set(LIBSSH2_CFLAGS "") + set(LIBSSH2_LIBS ${LIBSSH2_LIBRARIES}) + add_compile_definitions(HAVE_LIBSSH2=1) + endif() +endif() + +set(HAVE_LIBCARES no CACHE BOOL "Define if you hae libcares" FORCE) +if(WITH_LIBCARES) + find_package(Libcares) + if(LIBCARES_FOUND) + set(HAVE_LIBCARES yes CACHE BOOL "Define if you hae libcares" FORCE) + set(LIBCARES_CFLAGS "") + set(LIBCARES_LIBS ${LIBCARES_LIBRARIES}) + add_compile_definitions(HAVE_LIBCARES=1) + + set(save_CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES}) + set(save_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) + set(save_CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES}) + + set(CMAKE_REQUIRED_LIBRARIES ${LIBCARES_LIBRARIES}) + set(CMAKE_REQUIRED_INCLUDES ${LIBCARES_INCLUDE_DIR}) + set(CMAKE_EXTRA_INCLUDE_FILES ares.h) + check_type_size(ares_addr_node ARES_ADDR_NODE LANGUAGE CXX) + check_type_size(ares_set_servers ARES_SET_SERVERS LANGUAGE C) + if(ARES_ADDR_NODE) + add_compile_definitions(HAVE_ARES_ADDR_NODE) + endif() + if(ARES_SET_SERVERS) + add_compile_definitions(HAVE_ARES_SET_SERVERS) + endif() + set(CMAKE_REQUIRED_LIBRARIES ${save_CMAKE_REQUIRED_LIBRARIES}) + set(CMAKE_REQUIRED_INCLUDES ${save_CMAKE_REQUIRED_INCLUDES}) + set(CMAKE_EXTRA_INCLUDE_FILES ${save_CMAKE_EXTRA_INCLUDE_FILES}) + endif() +endif() + +set(USE_MD "" CACHE STRING "What message digest implementation to use") +if(HAVE_APPLETLS) + set(USE_MD "apple" CACHE STRING "What message digest implementation to use" FORCE) + add_compile_definitions(USE_APPLE_MD=1) +elseif(HAVE_LIBNETTLE) + set(USE_MD "libnettle" CACHE STRING "What message digest implementation to use" FORCE) + add_compile_definitions(USE_LIBNETTLE_MD=1) +elseif(HAVE_LIBGCRYPT) + set(USE_MD "libgcrypt" CACHE STRING "What message digest implementation to use" FORCE) + add_compile_definitions(USE_LIBGCRYPT_MD=1) +elseif(HAVE_OPENSSL) + set(USE_MD "openssl" CACHE STRING "What message digest implementation to use" FORCE) + add_compile_definitions(USE_OPEMSSL_MD=1) +else() + set(USE_MD "internal" CACHE STRING "What message digest implementation to use" FORCE) + add_compile_definitions(USE_INTERNAL_MD=1) +endif() + +if(HAVE_SSL) + set(ENABLE_SSL yes CACHE BOOL "If SSL support is enabled" FORCE) +else() + set(ENABLE_SSL no CACHE BOOL "If SSL support is enabled" FORCE) +endif() +if(ENABLE_SSL) + add_compile_definitions(ENABLE_SSL=1) +endif() + +if(HAVE_LIBGMP OR HAVE_LIBGCRYPT OR HAVE_OPENSSL) + set(USE_INTERNAL_BIGNUM no) +else() + set(USE_INTERNAL_BIGNUM yes) +endif() +if(USE_INTERNAL_BIGNUM) + add_compile_definitions(USE_INTERNAL_BIGNUM=1) +endif() + +if(HAVE_LIBNETTLE OR HAVE_LIBGCRYPT OR HAVE_OPENSSL) + set(USE_INTERNAL_ARC4 no) +else() + set(USE_INTERNAL_ARC4 yes) +endif() +if(USE_INTERNAL_ARC4) + add_compile_definitions(USE_INTERNAL_ARC4) +endif() + +if(ENABLE_BITTORRENT) + add_compile_definitions(ENABLE_BITTORRENT=1) +endif() + +if((HAVE_LIBXML2 OR HAVE_LIBEXPAT) AND ENABLE_METALINK) + add_compile_definitions(ENABLE_METALINK=1) +endif() + +if(HAVE_LIBXML2 OR HAVE_LIBEXPAT) + set(HAVE_SOME_XMLLIB yes CACHE BOOL "either libxml2 or libxpax present" FORCE) + add_compile_definitions(HAVE_SOME_XMLLIB=1) + set(ENABLE_XML_RPC yes CACHE BOOL "XML RPC Enabled") +else() + set(HAVE_SOME_XMLLIB no CACHE BOOL "either libxml2 or libxpax present" FORCE) + set(ENABLE_XML_RPC no CACHE BOOL "XML RPC Enabled" FORCE) +endif() +if(ENABLE_XML_RPC) + add_compile_definitions(ENABLE_XML_RPC=1) +endif() + +if(HAVE_LIBCARES) + set(ENABLE_ASYNC_DNS yes CACHE BOOL "Async DNS Enabled") +else() + set(ENABLE_ASYNC_DNS no CACHE BOOL "Async DNS Enabled" FORCE) +endif() +if(ENABLE_ASYNC_DNS) + add_compile_definitions(ENABLE_ASYNC_DNS=1) +endif() + +check_cxx_symbol_exists(alloca "alloca.h;stdlib.h;cstdlib;malloc.h" HAVE_ALLOCA_H) +if(HAVE_ALLOCA_H) + add_compile_definitions(HAVE_ALLOCA_H) +endif() + +set(_check_headers + argz.h + arpa/inet.h + fcntl.h + float.h + inttypes.h + langinfo.h + libintl.h + limits.h + locale.h + malloc.h + netdb.h + netinet/in.h + netinet/tcp.h + poll.h + port.h + signal.h + stddef.h + stdint.h + stdio_ext.h + stdlib.h + string.h + strings.h + sys/ioctl.h + sys/param.h + sys/resource.h + sys/signal.h + sys/socket.h + sys/time.h + sys/types.h + sys/uio.h + sys/utsname.h + termios.h + unistd.h + utime.h + wchar.h + ifaddrs.h + pwd.h +) + +foreach (header ${_check_headers}) + string(TOUPPER ${header} header_var) + string(REPLACE "." "_" header_var ${header_var}) + string(REPLACE "/" "_" header_var ${header_var}) + set(header_var "HAVE_${header_var}") + set(${header_var}) + check_include_file(${header} ${header_var}) + if (${header_var}) + add_compile_definitions(${header_var}) + else() + endif() +endforeach() +unset(_check_headers) + +check_include_file(stdbool.h HAVE_STDBOOL_H) +if(HAVE_STDBOOL_H) + add_compile_definitions(HAVE_STDBOOL_H=1) +endif() + +if(cxx_constexpr IN_LIST CMAKE_CXX_COMPILE_FEATURES) + message(STATUS "ANSI C-confirming const - yes") +else() + message(STATUS "ANSI C-confirming const - no") +endif() + +set(save_CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES}) +set(CMAKE_EXTRA_INCLUDE_FILES "time.h") +check_type_size("struct timespec" HAVE_A2_STRUCT_TIMESPEC LANGUAGE CXX) +set(CMAKE_EXTRA_INCLUDE_FILES ${save_CMAKE_EXTRA_INCLUDE_FILES}) + +if(HAVE_A2_STRUCT_TIMESPEC) + add_compile_definitions(HAVE_A2_STRUCT_TIMESPEC) +endif() + +find_package(Gettext) + +set(_check_funcs + __argz_count + __argz_next + __argz_stringify + atexit + ftruncate + getcwd + getentropy + gethostbyaddr + gethostbyname + getifaddrs + getpagesize + memchr + memmove + mempcpy + memset + mkdir + mmap + munmap + nl_langinfo + posix_fadvise + posix_memalign + pow + putenv + rmdir + select + setlocale + sigaction + sleep + socket + stpcpy + strcasecmp + strchr + strcspn + strdup + strerror + strncasecmp + strstr + strtol + strtoul + strtoull + tzset + unsetenv + usleep + utime + utimes +) + +foreach (func ${_check_funcs}) + string(TOUPPER ${func} func_var) + set(func_var "HAVE_${func_var}") + set(${func_var}) + check_function_exists (${func} ${func_var}) + if (${func_var}) + add_compile_definitions(${func_var}) + else() + endif() +endforeach() +unset(_check_funcs) + +if(WITH_TCMALLOC AND WITH_JEMALLOC) + message(FATAL_ERROR "Cannot use both, tcmalloc and jemalloc!") +endif() + +set(HAVE_TCMALLOC no CACHE BOOL "If you have tcmalloc" FORCE) +if(WITH_TCMALLOC) + find_package(Tcmalloc) + if(Tcmalloc_FOUND) + set(HAVE_TCMALLOC yes CACHE BOOL "If you have tcmalloc" FORCE) + endif() +endif() + +set(HAVE_JEMALLOC no CACHE BOOL "if you have jemalloc" FORCE) +if(WITH_JEMALLOC) + find_package(Jemalloc) + if(Jemalloc_FOUND) + set(HAVE_JEMALLOC yes CACHE BOOL "if you have jemalloc" FORCE) + endif() +endif() + +if(ENABLE_EPOLL) + check_function_exists(epoll_create HAVE_EPOLL) + if(HAVE_EPOLL) + add_compile_definitions(HAVE_EPOLL=1) + endif() +endif() + +check_function_exists(posix_fallocate HAVE_POSIX_FALLOCATE) +if(HAVE_POSIX_FALLOCATE OR HAVE_FALLOCATE OR HAVE_OSX OR WIN_BUILD) + set(HAVE_SOME_FALLOCATE yes CACHE BOOL "if there is some fallocate support" FORCE) + add_compile_definitions(HAVE_SOME_FALLOCATE=1) +else() + set(HAVE_SOME_FALLOCATE no CACHE BOOL "if there is some fallocate support" FORCE) +endif() + +check_cxx_symbol_exists(asctime_r time.h HAVE_ASCTIME_R) +if(HAVE_ASCTIME_R) + add_compile_definitions(HAVE_ASCTIME_R=1) +endif() + +check_cxx_symbol_exists(localtime_r time.h HAVE_LOCALTIME_R) +if(HAVE_LOCALTIME_R) + add_compile_definitions(HAVE_LOCALTIME_R=1) +endif() + +set(_check_funcs + basename + gai_strerror + getaddrinfo + gettimeofday + strptime + daemon + poll + port_associate + kqueue +) + +foreach (func ${_check_funcs}) + string(TOUPPER ${func} func_var) + set(func_var "HAVE_${func_var}") + set(${func_var}) + check_function_exists (${func} ${func_var}) + if (${func_var}) + add_compile_definitions(${func_var}) + else() + endif() +endforeach() +unset(_check_funcs) + +if(HAVE_KQUEUE) + message(STATUS "Checking whether struct kevent.udata is intptr_t") + set(_tmp_src +"\ +#include +#include +#include +int main(int argc, char* argv[]) { + struct kevent event; + event.udata = reinterpret_cast(&event); +} +" + ) + try_compile(KEVENT_UDATA_INTPTR_T + SOURCE_FROM_VAR kevent_udata_intptr_t_src.c _tmp_src + ) + unset(_tmp_src) + if(KEVENT_UDATA_INTPTR_T) + message(STATUS "Checking whether struct kevent.udata is intptr_t - yes") + add_compile_definitions(KEVENT_UDATA_INTPTR_T=1) + else() + message(STATUS "Checking whether struct kevent.udata is intptr_t - no") + endif() +endif() + +set(save_CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES}) +set(CMAKE_EXTRA_INCLUDE_FILES sys/types.h sys/socket.h netinet/in.h) +check_type_size("struct sockaddr_in.sin_len" HAVE_SOCKADDR_IN_SIN_LEN) +if(HAVE_SOCKADDR_IN_SIN_LEN) + add_compile_definitions(HAVE_SOCKADDR_IN_SIN_LEN=1) +endif() +check_type_size("struct sockaddr_in6.sin6_len" HAVE_SOCKADDR_IN6_SIN6_LEN) +if(HAVE_SOCKADDR_IN6_SIN6_LEN) + add_compile_definitions(HAVE_SOCKADDR_IN6_SIN6_LEN=1) +endif() +set(CMAKE_EXTRA_INCLUDE_FILES ${save_CMAKE_EXTRA_INCLUDE_FILES}) + +message(STATUS "Checking whether struct option.name is assignable from const char*") +set(_tmp_src +"\ +#include +#include +int main(int argc, char* argv[]) { + const char* s = \"const char\"; + struct option op; + op.name = s; +} +" +) +try_compile(HAVE_OPTION_CONST_NAME + SOURCE_FROM_VAR option_const_name.c _tmp_src +) +unset(_tmp_src) +if(HAVE_OPTION_CONST_NAME) + message(STATUS "Checking whether struct option.name is assignable from const char* - yes") + add_compile_definitions(HAVE_OPTION_CONST_NAME=1) +else() + message(STATUS "Checking whether struct option.name is assignable from const char* - no") +endif() + +if(ENABLE_WEBSOCKET) + add_compile_definitions(ENABLE_WEBSOCKET=1) +endif() + +if (ARIA2_STATIC) + if (NOT WIN32 AND NOT APPLE) + set(EXTRALIBS -lpthread -ldl -lrt ${EXTRALIBS}) + endif() +endif() + +if(ENABLE_WERROR) + add_compile_options( -Wall -Werror -Wformat-security) +endif() + +add_link_options(${EXTRALIBS}) + +# add_subdirectory(po) +add_subdirectory(lib) +add_subdirectory(deps) +add_subdirectory(src) +# add_subdirectory(doc) +# add_subdirectory(test) + +message(STATUS "summary of build options: \n\ + +Build: ${BUILD} +Host: ${HOST} +Target: ${TARGET} +Install prefix: ${PREFIX} +CC: ${CC} +CXX: ${CXX} +CPP: ${CPP} +CXXFLAGS: ${CXXFLAGS} +CFLAGS: ${CFLAGS} +CPPFLAGS: ${CPPFLAGS} +LDFLAGS: ${LDFLAGS} +LIBS: ${LIBS} +DEFS: ${DEFS} +CXX1XCXXFLAGS: ${CXX1XCXXFLAGS} +EXTRACXXFLAGS: ${EXTRACXXFLAGS} +EXTRACFLAGS: ${EXTRACFLAGS} +EXTRACPPFLAGS: ${EXTRACPPFLAGS} +EXTRALDFLAGS: ${EXTRALDFLAGS} +EXTRALIBS: ${EXTRALIBS} +WARNCXXFLAGS: ${WARNCXXFLAGS} +LibUV: ${HAVE_LIBUV} (CFLAGS='${LIBUV_CFLAGS}' LIBS='${LIBUV_LIBS}') +SQLite3: ${HAVE_SQLITE3} (CFLAGS='${SQLITE3_CFLAGS}' LIBS='${SQLITE3_LIBS}') +SSL Support: ${HAVE_SSL} +AppleTLS: ${HAVE_APPLETLS} (LDFLAGS='${APPLETLS_LDFLAGS}') +WinTLS: ${HAVE_WINTLS} (LIBS='${WINTLS_LIBS}') +GnuTLS: ${HAVE_LIBGNUTLS} (CFLAGS='${LIBGNUTLS_CFLAGS}' LIBS='${LIBGNUTLS_LIBS}') +OpenSSL: ${HAVE_OPENSSL} (CFLAGS='${OPENSSL_CFLAGS}' LIBS='${OPENSSL_LIBS}') +CA Bundle: ${CA_BUNDLE} +LibNettle: ${HAVE_LIBNETTLE} (CFLAGS='${LIBNETTLE_CFLAGS}' LIBS='${LIBNETTLE_LIBS}') +LibGmp: ${HAVE_LIBGMP} (CFLAGS='${LIBGMP_CFLAGS}' LIBS='${LIBGMP_LIBS}') +LibGcrypt: ${HAVE_LIBGCRYPT} (CFLAGS='${LIBGCRYPT_CFLAGS}' LIBS='${LIBGCRYPT_LIBS}') +LibXML2: ${HAVE_LIBXML2} (CFLAGS='${LIBXML2_CFLAGS}' LIBS='${LIBXML2_LIBS}') +LibExpat: ${HAVE_LIBEXPAT} (CFLAGS='${EXPAT_CFLAGS}' LIBS='${EXPAT_LIBS}') +LibCares: ${HAVE_LIBCARES} (CFLAGS='${LIBCARES_CFLAGS}' LIBS='${LIBCARES_LIBS}') +Zlib: ${HAVE_ZLIB} (CFLAGS='${ZLIB_CFLAGS}' LIBS='${ZLIB_LIBS}') +Libssh2: ${HAVE_LIBSSH2} (CFLAGS='${LIBSSH2_CFLAGS}' LIBS='${LIBSSH2_LIBS}') +Tcmalloc: ${HAVE_TCMALLOC} (CFLAGS='${TCMALLOC_CFLAGS}' LIBS='${TCMALLOC_LIBS}') +Jemalloc: ${HAVE_JEMALLOC} (CFLAGS='${JEMALLOC_CFLAGS}' LIBS='${JEMALLOC_LIBS}') +Epoll: ${HAVE_EPOLL} +Bittorrent: ${ENABLE_BITTORRENT} +Metalink: ${ENABLE_METALINK} +XML-RPC: ${ENABLE_XML_RPC} +Message Digest: ${USE_MD} +WebSocket: ${ENABLE_WEBSOCKET} (CFLAGS='${WSLAY_CFLAGS}' LIBS='${WSLAY_LIBS}') +Libaria2: ${ENABLE_LIBARIA2} (shared=${enable_shared} static=${enable_static}) +bash_completion dir: ${BASHCOMPLETIONDIR} +Static build: ${ARIA2_STATIC} +") + + + + + +##### README Generation ##### +find_package(Docutils) + +if (Docutils_FOUND) + if (WIN32) + find_package(PythonInterp) + endif() + add_custom_command( + OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/README.html + COMMAND ${PYTHON_EXECUTABLE} ${RST2HTML_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/README.rst ${CMAKE_CURRENT_SOURCE_DIR}/README.html + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/README.rst + MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/README.rst + ) +add_custom_target(readme_html ALL DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/README.html) +else() + message(WARNING "rst2html not installed. Placing only a dummy file for README.html") + write_file(${CMAKE_CURRENT_SOURCE_DIR}/README.html + "\n" + "

Readme has not been built!.
Instead see README.rst

" + ) +endif() + +file(GLOB ALL_SOURCE_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/src/*.c + ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cc + ${CMAKE_CURRENT_SOURCE_DIR}/src/*.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/includes/aria2/*.h + ${CMAKE_CURRENT_SOURCE_DIR}/examples/*.cc + ${CMAKE_CURRENT_SOURCE_DIR}/test/*.cc + ${CMAKE_CURRENT_SOURCE_DIR}/test/*.h +) + +add_custom_target(clang-format + COMMAND clang-format -i ${ALL_SOURCE_FILES} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +) + +########### install files ############### + +install(FILES README README.rst README.html DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) +install(FILES LICENSE.OpenSSL DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + + + +#original Makefile.am contents follow: + +#SUBDIRS = po lib deps src doc test +# +#ACLOCAL_AMFLAGS = -I m4 --install +#RST2HTML = @RST2HTML@ +# +#EXTRA_DIST = config.rpath \ +# script-helper \ +# makerelease \ +# mingw-config mingw-release mingw-build-memo \ +# android-config \ +# makerelease-osx.mk osx-package/DS_Store osx-package/etc/paths.d/aria2c osx-package/etc/manpaths.d/aria2 \ +# Dockerfile.mingw \ +# Dockerfile.raspberrypi \ +# examples/libaria2ex.cc examples/libaria2wx.cc +# +#dist_doc_DATA = README README.rst README.html +# +#.PHONY: clang-format +# +#if HAVE_RST2HTML +#README.html: README.rst +# $(RST2HTML) $< > $@ +#else # !HAVE_RST2HTML +#README.html: README.rst +# @echo Warning: rst2html not installed. Placing only a dummy file for $@ +# echo "" > $@ +# echo "

Readme has not been built!.
Instead see README.rst

" >> $@ +#endif # !HAVE_RST2HTML +# +#dist_noinst_DATA = LICENSE.OpenSSL +# +## Format source files using clang-format. Don't format source files +## under deps directory since we are not responsible for their coding +## style. +#clang-format: +# CLANGFORMAT=`git config --get clangformat.binary`; \ +# test -z $${CLANGFORMAT} && CLANGFORMAT="clang-format"; \ +# $${CLANGFORMAT} -i $(top_srcdir)/src/*.{c,cc,h} $(top_srcdir)/src/includes/aria2/*.h \ +# $(top_srcdir)/examples/*.cc $(top_srcdir)/test/*.{cc,h} diff --git a/cmake/FindCPPUNIT.cmake b/cmake/FindCPPUNIT.cmake new file mode 100644 index 00000000..7f685223 --- /dev/null +++ b/cmake/FindCPPUNIT.cmake @@ -0,0 +1,66 @@ +find_package(PackageHandleStandardArgs) + + +FIND_PATH(CPPUNIT_INCLUDE_DIR + cppunit/TestCase.h + PATHS + cppunit/include + /usr/local/include + /usr/include + ${CMAKE_BINARY_DIR}/cppunit-src/include + ${CMAKE_BINARY_DIR}/cppunit-build/include/cppunit +) + +# With Win32, important to have both +IF(${CMAKE_GENERATOR} MATCHES "Visual Studio") + FIND_LIBRARY(CPPUNIT_LIBRARY cppunit + ${CPPUNIT_INCLUDE_DIR}/../lib + /usr/local/lib + /usr/lib + ${CMAKE_BINARY_DIR}/cppunit-src/lib/Release + ) + + FIND_LIBRARY(CPPUNIT_DEBUG_LIBRARY cppunitd + ${CPPUNIT_INCLUDE_DIR}/../lib + /usr/local/lib + /usr/lib + ${CMAKE_BINARY_DIR}/cppunit-src/lib/Debug + ) +else() + # On unix system, debug and release have the same name + FIND_LIBRARY(CPPUNIT_LIBRARY cppunit + ${CPPUNIT_INCLUDE_DIR}/../lib + /usr/local/lib + /usr/lib + ${CMAKE_BINARY_DIR}/cppunit-src/lib + ) + FIND_LIBRARY(CPPUNIT_DEBUG_LIBRARY cppunit + ${CPPUNIT_INCLUDE_DIR}/../lib + /usr/local/lib + /usr/lib + ${CMAKE_BINARY_DIR}/cppunit-src/lib + ) +endif() + +if(CPPUNIT_INCLUDE_DIR) + if(CPPUNIT_LIBRARY) + set(CPPUNIT_LIBRARIES ${CPPUNIT_LIBRARY} ${CMAKE_DL_LIBS}) + set(CPPUNIT_DEBUG_LIBRARIES ${CPPUNIT_DEBUG_LIBRARY} ${CMAKE_DL_LIBS}) + endif() + + set(_version_regex "^#define[ \t]+CPPUNIT_PACKAGE_VERSION[ \t]+\"([^\"]+)\".*") + file(STRINGS "${CPPUNIT_INCLUDE_DIR}/cppunit/config-auto.h" CPPUNIT_VERSION REGEX "${_version_regex}") + string(REGEX REPLACE "${_version_regex}" "\\1" CPPUNIT_VERSION ${CPPUNIT_VERSION}) + unset(_version_regex) +endif() + + + +include(FindPackageHandleStandardArgs) + +find_package_handle_standard_args(CPPUNIT + REQUIRED_VARS CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIR CPPUNIT_LIBRARY CPPUNIT_DEBUG_LIBRARY + VERSION_VAR CPPUNIT_VERSION +) +mark_as_advanced(CPPUNIT_INCLUDE_DIR CPPUNIT_LIBRARY CPPUNIT_DEBUG_LIBRARY CPPUNIT_LIBRARIES CPPUNIT_VERSION) + diff --git a/cmake/FindDocutils.cmake b/cmake/FindDocutils.cmake new file mode 100644 index 00000000..54c32022 --- /dev/null +++ b/cmake/FindDocutils.cmake @@ -0,0 +1,34 @@ +find_package(PackageHandleStandardArgs) + +find_program( RST2HTML_EXECUTABLE NAMES rst2html.py rst2html DOC "Python Docutils reStructuredText to HTML converter") + +if (RST2HTML_EXECUTABLE) + if (WIN32) + find_package(PythonInterp) + if (NOT PYTHON_EXECUTABLE) + message(FATAL_ERROR "Can't find Python interpreter, required by Docutils") + endif() + execute_process(COMMAND ${PYTHON_EXECUTABLE} ${RST2HTML_EXECUTABLE} --version OUTPUT_VARIABLE DOCUTILS_VERSION_STR) + else() + execute_process(COMMAND ${RST2HTML_EXECUTABLE} --version OUTPUT_VARIABLE DOCUTILS_VERSION_STR) + endif() + + if (NOT "${DOCUTILS_VERSION_STR}" STREQUAL "") + string(REGEX MATCHALL "([^\ ]+\ |[^\ ]+$)" DOCUTILS_VERSION_PARTS "${DOCUTILS_VERSION_STR}") + list(GET DOCUTILS_VERSION_PARTS 2 DOCUTILS_VERSION_STR) + string(REGEX REPLACE "[ \t]+$" "" DOCUTILS_VERSION_STR ${DOCUTILS_VERSION_STR}) + string(REGEX REPLACE "^[ \t]+" "" DOCUTILS_VERSION_STR ${DOCUTILS_VERSION_STR}) + string(REGEX REPLACE ",$" "" DOCUTILS_VERSION_STR ${DOCUTILS_VERSION_STR}) + + set(DOCUTILS_VERSION ${DOCUTILS_VERSION_STR}) + endif() +endif() + +include(FindPackageHandleStandardArgs) + +find_package_handle_standard_args(Docutils + REQUIRED_VARS RST2HTML_EXECUTABLE DOCUTILS_VERSION + VERSION_VAR DOCUTILS_VERSION +) + +mark_as_advanced(RST2HTML_EXECUTABLE) diff --git a/cmake/FindGMP.cmake b/cmake/FindGMP.cmake new file mode 100644 index 00000000..f55bd234 --- /dev/null +++ b/cmake/FindGMP.cmake @@ -0,0 +1,38 @@ +# Try to find the GNU Multiple Precision Arithmetic Library (GMP) +# See http://gmplib.org/ + +if (GMP_INCLUDES AND GMP_LIBRARIES) + set(GMP_FIND_QUIETLY TRUE) +endif (GMP_INCLUDES AND GMP_LIBRARIES) + +find_path(GMP_INCLUDE_DIR + NAMES + gmp.h + PATHS + $ENV{GMPDIR} + ${INCLUDE_INSTALL_DIR} +) + +find_library(GMP_LIBRARY gmp PATHS $ENV{GMPDIR} ${LIB_INSTALL_DIR}) + +if(GMP_LIBRARY) + set(GMP_LIBRARIES ${GMP_LIBRARY}) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + GMP + REQUIRED_VARS GMP_INCLUDE_DIR GMP_LIBRARIES +) + +if(GMP_FOUND) + add_library(GMP::GMP UNKNOWN IMPORTED GLOBAL) + set_target_properties(GMP::GMP PROPERTIES + IMPORTED_LOCATION "${GMP_LIBRARY}" + INTERFACE_COMPILE_OPTIONS "${GMP_COMPILE_OPTIONS}" + INTERFACE_INCLUDE_DIRECTORIES "${GMP_INCLUDE_DIR}" + ) + +endif() +mark_as_advanced(GMP_INCLUDES GMP_LIBRARIES) + diff --git a/cmake/FindJemalloc.cmake b/cmake/FindJemalloc.cmake new file mode 100644 index 00000000..fc98bc8a --- /dev/null +++ b/cmake/FindJemalloc.cmake @@ -0,0 +1,34 @@ +FIND_PATH( Jemalloc_INCLUDE_DIR + NAMES + jemalloc/jemalloc.h + PATHS + /usr/include + /usr/include/jemalloc + /usr/local/include + /usr/local/include/jemalloc + $ENV{JEMALLOC_ROOT} + $ENV{JEMALLOC_ROOT}/include + ${CMAKE_SOURCE_DIR}/externals/jemalloc +) +FIND_LIBRARY(Jemalloc_LIBRARY + NAMES + jemalloc libjemalloc JEMALLOC + PATHS + /usr/lib + /usr/lib/jemalloc + /usr/local/lib + /usr/local/lib/jemalloc + /usr/local/jemalloc/lib + $ENV{JEMALLOC_ROOT}/lib + $ENV{JEMALLOC_ROOT} +) + +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS( + Jemalloc + REQUIRED_VARS + Jemalloc_LIBRARY + Jemalloc_INCLUDE_DIR +) + +mark_as_advanced( Jemalloc_LIBRARY Jemalloc_INCLUDE_DIR ) diff --git a/cmake/FindLibGcrypt.cmake b/cmake/FindLibGcrypt.cmake new file mode 100644 index 00000000..8bee7296 --- /dev/null +++ b/cmake/FindLibGcrypt.cmake @@ -0,0 +1,146 @@ +# Copyright 2014 Nicolás Alvarez +# Copyright 2016, 2021 Igalia S.L +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#[=======================================================================[.rst: +FindGcrypt +---------- + +Find libgcrypt headers and libraries. + +Imported Targets +^^^^^^^^^^^^^^^^ + +``LibGcrypt::LibGcrypt`` + The libgcrypt library, if found. + +#]=======================================================================] + +find_package(PkgConfig QUIET) +find_program(LIBGCRYPTCONFIG_SCRIPT NAMES libgcrypt-config) +if (PkgConfig_FOUND) + # XXX: The libgcrypt.pc file does not list gpg-error as a dependency, + # resulting in linking errors; search for the latter as well. + pkg_check_modules(PC_GCRYPT QUIET libgcrypt) + pkg_check_modules(PC_GPGERROR QUIET gpg-error) + set(LibGcrypt_COMPILE_OPTIONS ${PC_GCRYPT_CFLAGS_OTHER} ${PC_GPGERROR_CFLAGS_OTHER}) + set(LibGcrypt_VERSION ${PC_GCRYPT_VERSION}) +endif () + +if (LIBGCRYPTCONFIG_SCRIPT AND NOT PC_GCRYPT) + execute_process( + COMMAND "${LIBGCRYPTCONFIG_SCRIPT}" --prefix + RESULT_VARIABLE CONFIGSCRIPT_RESULT + OUTPUT_VARIABLE LIBGCRYPT_PREFIX + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if (CONFIGSCRIPT_RESULT EQUAL 0) + set(LIBGCRYPT_SCRIPT_LIB_HINT "${LIBGCRYPT_PREFIX}/lib") + set(LIBGCRYPT_SCRIPT_INCLUDE_HINT "${LIBGCRYPT_PREFIX}/include") + endif () + + execute_process( + COMMAND "${LIBGCRYPTCONFIG_SCRIPT}" --cflags + RESULT_VARIABLE CONFIGSCRIPT_RESULT + OUTPUT_VARIABLE CONFIGSCRIPT_VALUE + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if (CONFIGSCRIPT_RESULT EQUAL 0) + set(LibGcrypt_COMPILE_OPTIONS ${CONFIGSCRIPT_VALUE}) + endif () + + execute_process( + COMMAND "${LIBGCRYPTCONFIG_SCRIPT}" --version + RESULT_VARIABLE CONFIGSCRIPT_RESULT + OUTPUT_VARIABLE CONFIGSCRIPT_VALUE + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if (CONFIGSCRIPT_RESULT EQUAL 0) + string(REGEX MATCH "^([0-9]+\.[0-9]+\.[0-9]+)" LibGcrypt_VERSION "${CONFIGSCRIPT_VALUE}") + endif () +endif () + +find_path(LibGcrypt_GpgError_INCLUDE_DIR + NAMES gpg-error.h + HINTS ${PC_GPGERROR_INCLUDEDIR} ${PC_GPGERROR_INCLUDE_DIRS} + ${PC_GCRYPT_INCLUDEDIR} ${PC_GCRYPT_INCLUDE_DIRS} + ${LIBGCRYPT_SCRIPT_INCLUDE_HINT} ${LibGcrypt_INCLUDE_DIR} +) + +find_library(LibGcrypt_GpgError_LIBRARY + NAMES ${LibGcrypt_GpgError_NAMES} gpg-error libgpg-error + HINTS ${PC_GPGERROR_LIBDIR} ${PC_GPGERROR_LIBRARY_DIRS} + ${PC_GCRYPT_LIBDIR} ${PC_GCRYPT_LIBRARY_DIRS} ${LIBGCRYPT_SCRIPT_LIB_HINT} +) + +find_path(LibGcrypt_INCLUDE_DIR + NAMES gcrypt.h + HINTS ${PC_GCRYPT_INCLUDEDIR} ${PC_GCRYPT_INCLUDE_DIRS} + ${LIBGCRYPT_SCRIPT_INCLUDE_HINT} ${LibGcrypt_INCLUDE_DIR} +) + +find_library(LibGcrypt_LIBRARY + NAMES ${LibGcrypt_NAMES} gcrypt libgcrypt + HINTS ${PC_GCRYPT_LIBDIR} ${PC_GCRYPT_LIBRARY_DIRS} ${LIBGCRYPT_SCRIPT_LIB_HINT} +) + +if (LibGcrypt_INCLUDE_DIR AND NOT LibGcrypt_VERSION) + file(STRINGS ${LibGcrypt_INCLUDE_DIR}/gcrypt.h GCRYPT_H REGEX "^#define GCRYPT_VERSION ") + string(REGEX REPLACE "^#define GCRYPT_VERSION \"([0-9.]\+)[^\"]*\".*$" "\\1" LibGcrypt_VERSION "${GCRYPT_H}") +endif () + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(LibGcrypt + FOUND_VAR LibGcrypt_FOUND + REQUIRED_VARS LibGcrypt_LIBRARY LibGcrypt_INCLUDE_DIR + LibGcrypt_GpgError_LIBRARY LibGcrypt_GpgError_INCLUDE_DIR + VERSION_VAR LibGcrypt_VERSION +) + +if (LibGcrypt_GpgError_LIBRARY AND NOT TARGET LibGcrypt::GpgError) + add_library(LibGcrypt::GpgError UNKNOWN IMPORTED GLOBAL) + set_target_properties(LibGcrypt::GpgError PROPERTIES + IMPORTED_LOCATION "${LibGcrypt_GpgError_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${LibGcrypt_GpgError_INCLUDE_DIR}" + ) +endif () + +if (LibGcrypt_LIBRARY AND NOT TARGET LibGcrypt::LibGcrypt) + add_library(LibGcrypt::LibGcrypt UNKNOWN IMPORTED GLOBAL) + set_target_properties(LibGcrypt::LibGcrypt PROPERTIES + IMPORTED_LOCATION "${LibGcrypt_LIBRARY}" + INTERFACE_COMPILE_OPTIONS "${LibGcrypt_COMPILE_OPTIONS}" + INTERFACE_INCLUDE_DIRECTORIES "${LibGcrypt_INCLUDE_DIR}" + ) + target_link_libraries(LibGcrypt::LibGcrypt INTERFACE LibGcrypt::GpgError) +endif () + +mark_as_advanced(LibGcrypt_INCLUDE_DIR LibGcrypt_LIBRARY + LibGcrypt_GpgError_INCLUDE_DIR LibGcrypt_GpgError_LIBRARY) + +if (LibGcrypt_FOUND) + set(LibGcrypt_LIBRARIES ${LibGcrypt_LIBRARY} ${LibGcrypt_GpgError_LIBRARY}) + set(LibGcrypt_INCLUDE_DIRS ${LibGcrypt_INCLUDE_DIR} ${LibGcrypt_GpgError_INCLUDE_DIR}) +endif () diff --git a/cmake/FindLibSSH2.cmake b/cmake/FindLibSSH2.cmake new file mode 100644 index 00000000..61c36752 --- /dev/null +++ b/cmake/FindLibSSH2.cmake @@ -0,0 +1,31 @@ +find_path(LIBSSH2_INCLUDE_DIR libssh2.h) +find_library(LIBSSH2_LIBRARY NAMES ssh2 libssh2) +if(LIBSSH2_INCLUDE_DIR) + file(STRINGS "${LIBSSH2_INCLUDE_DIR}/libssh2.h" LIBSSH2_VERSION REGEX "^#define[\t ]+LIBSSH2_VERSION[\t ]+\"([^\"]+)\"") + string(REGEX REPLACE "^.*\"([^\"]+)\"" "\\1" LIBSSH2_VERSION ${LIBSSH2_VERSION}) +endif() + +if(LIBSSH2_LIBRARY) + set(LIBSSH2_LIBRARIES ${LIBSSH2_LIBRARY}) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + LibSSH2 + REQUIRED_VARS LIBSSH2_LIBRARIES LIBSSH2_INCLUDE_DIR + VERSION_VAR LIBSSH2_VERSION +) + +mark_as_advanced(LIBSSH2_INCLUDE_DIR LIBSSH2_LIBRARIES) + +if(LibSSH2_FOUND) + add_library(LibSSH2::LibSSH2 UNKNOWN IMPORTED GLOBAL) + set_target_properties(LibSSH2::LibSSH2 PROPERTIES + IMPORTED_LOCATION "${LIBSSH2_LIBRARY}" + INTERFACE_COMPILE_OPTIONS "${LIBSSH2_COMPILE_OPTIONS}" + INTERFACE_INCLUDE_DIRECTORIES "${LIBSSH2_INCLUDE_DIR}" + ) + +endif() + + diff --git a/cmake/FindLibUV.cmake b/cmake/FindLibUV.cmake new file mode 100644 index 00000000..e42bea17 --- /dev/null +++ b/cmake/FindLibUV.cmake @@ -0,0 +1,56 @@ +# Standard FIND_PACKAGE module for libuv, sets the following variables: +# - LIBUV_FOUND +# - LIBUV_INCLUDE_DIRS (only if LIBUV_FOUND) +# - LIBUV_LIBRARIES (only if LIBUV_FOUND) + +# Try to find the header +FIND_PATH(LIBUV_INCLUDE_DIR NAMES uv.h) + +# Try to find the library +FIND_LIBRARY(LIBUV_LIBRARY NAMES uv libuv) + +# Parse out version header +if(LIBUV_INCLUDE_DIR) + set(_version_major_regex "^#define[ \t]+UV_VERSION_MAJOR[ \t]+([0-9]+).*$") + set(_version_minor_regex "^#define[ \t]+UV_VERSION_MINOR[ \t]+([0-9]+).*$") + set(_version_patch_regex "^#define[ \t]+UV_VERSION_PATCH[ \t]+([0-9]+).*$") + file(STRINGS "${LIBUV_INCLUDE_DIR}/uv/version.h" LIBUV_VERSION_MAJOR REGEX ${_version_major_regex}) + file(STRINGS "${LIBUV_INCLUDE_DIR}/uv/version.h" LIBUV_VERSION_MINOR REGEX ${_version_minor_regex}) + file(STRINGS "${LIBUV_INCLUDE_DIR}/uv/version.h" LIBUV_VERSION_PATCH REGEX ${_version_patch_regex}) + string(REGEX REPLACE ${_version_major_regex} "\\1" LIBUV_VERSION_MAJOR ${LIBUV_VERSION_MAJOR}) + string(REGEX REPLACE ${_version_minor_regex} "\\1" LIBUV_VERSION_MINOR ${LIBUV_VERSION_MINOR}) + string(REGEX REPLACE ${_version_patch_regex} "\\1" LIBUV_VERSION_PATCH ${LIBUV_VERSION_PATCH}) + set(LIBUV_VERSION "${LIBUV_VERSION_MAJOR}.${LIBUV_VERSION_MINOR}.${LIBUV_VERSION_PATCH}") + unset(_version_major_regex) + unset(_version_minor_regex) + unset(_version_patch_regex) +endif() + +# Handle the QUIETLY/REQUIRED arguments, set LIBUV_FOUND if all variables are +# found +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS( + LIBUV + REQUIRED_VARS + LIBUV_LIBRARY + LIBUV_INCLUDE_DIR + VERSION_VAR LIBUV_VERSION + NAME_MISMATCHED +) + + + +# Hide internal variables +MARK_AS_ADVANCED(LIBUV_INCLUDE_DIR LIBUV_LIBRARY) + +# Set standard variables +IF(LIBUV_FOUND) + SET(LIBUV_INCLUDE_DIRS "${LIBUV_INCLUDE_DIR}") + SET(LIBUV_LIBRARIES "${LIBUV_LIBRARY}") + add_library(LIBUV::LIBUV UNKNOWN IMPORTED GLOBAL) + set_target_properties(LIBUV::LIBUV PROPERTIES + IMPORTED_LOCATION "${LIBUV_LIBRARY}" + INTERFACE_COMPILE_OPTIONS "${LIBUV_COMPILE_OPTIONS}" + INTERFACE_INCLUDE_DIRECTORIES "${LIBUV_INCLUDE_DIRS}" + ) +ENDIF() diff --git a/cmake/FindLibcares.cmake b/cmake/FindLibcares.cmake new file mode 100644 index 00000000..e9e3b666 --- /dev/null +++ b/cmake/FindLibcares.cmake @@ -0,0 +1,49 @@ +# - Try to find libcares +# Once done this will define +# LIBCARES_FOUND - System has libcares +# LIBCARES_INCLUDE_DIRS - The libcares include directories +# LIBCARES_LIBRARIES - The libraries needed to use libcares + +find_package(PkgConfig QUIET) +pkg_check_modules(PC_LIBCARES QUIET libcares) + +find_path(LIBCARES_INCLUDE_DIR + NAMES ares.h + HINTS ${PC_LIBCARES_INCLUDE_DIRS} +) +find_library(LIBCARES_LIBRARY + NAMES cares + HINTS ${PC_LIBCARES_LIBRARY_DIRS} +) + +if(LIBCARES_INCLUDE_DIR) + set(_version_regex "^#define[ \t]+ARES_VERSION_STR[ \t]+\"([^\"]+)\".*") + file(STRINGS "${LIBCARES_INCLUDE_DIR}/ares_version.h" + LIBCARES_VERSION REGEX "${_version_regex}") + string(REGEX REPLACE "${_version_regex}" "\\1" + LIBCARES_VERSION "${LIBCARES_VERSION}") + unset(_version_regex) +endif() + +include(FindPackageHandleStandardArgs) +# handle the QUIETLY and REQUIRED arguments and set LIBCARES_FOUND to TRUE +# if all listed variables are TRUE and the requested version matches. +find_package_handle_standard_args(Libcares REQUIRED_VARS + LIBCARES_LIBRARY LIBCARES_INCLUDE_DIR + VERSION_VAR LIBCARES_VERSION) + +if(LIBCARES_FOUND) + set(LIBCARES_LIBRARIES ${LIBCARES_LIBRARY}) + set(LIBCARES_INCLUDE_DIRS ${LIBCARES_INCLUDE_DIR}) + + add_library(Libcares::Libcares UNKNOWN IMPORTED GLOBAL) + set_target_properties(Libcares::Libcares PROPERTIES + IMPORTED_LOCATION "${LIBCARES_LIBRARY}" + INTERFACE_COMPILE_OPTIONS "${LIBCARES_COMPILE_OPTIONS}" + INTERFACE_INCLUDE_DIRECTORIES "${LIBCARES_INCLUDE_DIR}" + ) + +endif() + + +mark_as_advanced(LIBCARES_INCLUDE_DIR LIBCARES_LIBRARY) diff --git a/cmake/FindNettle.cmake b/cmake/FindNettle.cmake new file mode 100644 index 00000000..127da036 --- /dev/null +++ b/cmake/FindNettle.cmake @@ -0,0 +1,50 @@ +# - Find Nettle +# Find the Nettle include directory and library +# +# NETTLE_INCLUDE_DIR - where to find , etc. +# NETTLE_LIBRARIES - List of libraries when using libnettle. +# NETTLE_FOUND - True if libnettle found. + +IF (NETTLE_INCLUDE_DIR) + # Already in cache, be silent + SET(NETTLE_FIND_QUIETLY TRUE) +ENDIF (NETTLE_INCLUDE_DIR) + +FIND_PATH(NETTLE_INCLUDE_DIR nettle/md5.h nettle/ripemd160.h nettle/sha.h) +FIND_LIBRARY(NETTLE_LIBRARY NAMES nettle libnettle) + +if(NETTLE_INCLUDE_DIR) + set(_version_regex_major "^#define[ \t]+NETTLE_VERSION_MAJOR[ \t]+([0-9])$") + set(_version_regex_minor "^#define[ \t]+NETTLE_VERSION_MINOR[ \t]+([0-9])$") + file(STRINGS "${NETTLE_INCLUDE_DIR}/nettle/version.h" NETTLE_VERSION_MAJOR REGEX ${_version_regex_major}) + file(STRINGS "${NETTLE_INCLUDE_DIR}/nettle/version.h" NETTLE_VERSION_MINOR REGEX ${_version_regex_minor}) + string(REGEX REPLACE "${_version_regex_major}" "\\1" NETTLE_VERSION_MAJOR ${NETTLE_VERSION_MAJOR}) + string(REGEX REPLACE "${_version_regex_minor}" "\\1" NETTLE_VERSION_MINOR ${NETTLE_VERSION_MINOR}) + set(NETTLE_VERSION "${NETTLE_VERSION_MAJOR}.${NETTLE_VERSION_MINOR}") + unset(_version_regex_major) + unset(_version_regex_minor) +endif() + +# handle the QUIETLY and REQUIRED arguments and set NETTLE_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS( + NETTLE + REQUIRED_VARS NETTLE_LIBRARY NETTLE_INCLUDE_DIR + VERSION_VAR NETTLE_VERSION + NAME_MISMATCHED +) + +IF(NETTLE_FOUND) + SET(NETTLE_LIBRARIES ${NETTLE_LIBRARY}) + + add_library(Nettle::Nettle UNKNOWN IMPORTED GLOBAL) + set_target_properties(Nettle::Nettle PROPERTIES + IMPORTED_LOCATION "${NETTLE_LIBRARY}" + INTERFACE_COMPILE_OPTIONS "${NETTLE_COMPILE_OPTIONS}" + INTERFACE_INCLUDE_DIRECTORIES "${NETTLE_INCLUDE_DIR}" + ) +ENDIF(NETTLE_FOUND) +mark_as_advanced(NETTLE_INCLUDE_DIR NETTLE_LIBRARY NETTLE_LIBRARIES NETTLE_VERSION NETTLE_VERSION_MINOR NETTLE_VERSION_MAJOR) + + diff --git a/cmake/FindSphinx.cmake b/cmake/FindSphinx.cmake new file mode 100644 index 00000000..d4fc2115 --- /dev/null +++ b/cmake/FindSphinx.cmake @@ -0,0 +1,20 @@ +include(FindPackageHandleStandardArgs) + +# We are likely to find Sphinx near the Python interpreter +find_package(PythonInterp) +if(PYTHONINTERP_FOUND) + get_filename_component(_PYTHON_DIR "${PYTHON_EXECUTABLE}" DIRECTORY) + set( + _PYTHON_PATHS + "${_PYTHON_DIR}" + "${_PYTHON_DIR}/bin" + "${_PYTHON_DIR}/Scripts") +endif() + +find_program( + SPHINX_EXECUTABLE + NAMES sphinx-build sphinx-build.exe + HINTS ${_PYTHON_PATHS}) +mark_as_advanced(SPHINX_EXECUTABLE) + +find_package_handle_standard_args(Sphinx DEFAULT_MSG SPHINX_EXECUTABLE) diff --git a/cmake/FindTcmalloc.cmake b/cmake/FindTcmalloc.cmake new file mode 100644 index 00000000..de048da3 --- /dev/null +++ b/cmake/FindTcmalloc.cmake @@ -0,0 +1,42 @@ +# - Find Tcmalloc +# Find the native Tcmalloc includes and library +# +# Tcmalloc_INCLUDE_DIR - where to find Tcmalloc.h, etc. +# Tcmalloc_LIBRARIES - List of libraries when using Tcmalloc. +# Tcmalloc_FOUND - True if Tcmalloc found. + +find_path(Tcmalloc_INCLUDE_DIR gperftools/tcmalloc.h NO_DEFAULT_PATH PATHS + ${HT_DEPENDENCY_INCLUDE_DIR} + /usr/include + /opt/local/include + /usr/local/include +) + +if (USE_TCMALLOC) + set(Tcmalloc_NAMES libtcmalloc tcmalloc) +else () + set(Tcmalloc_NAMES libtcmalloc libtcmalloc_minimal tcmalloc_minimal tcmalloc) +endif () + +find_library(Tcmalloc_LIBRARY NO_DEFAULT_PATH + NAMES ${Tcmalloc_NAMES} + PATHS ${HT_DEPENDENCY_LIB_DIR} /lib /usr/lib /usr/local/lib /opt/local/lib +) + +if (Tcmalloc_INCLUDE_DIR AND Tcmalloc_LIBRARY) + set( Tcmalloc_LIBRARIES ${Tcmalloc_LIBRARY} ) +endif () + +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS( + Tcmalloc + REQUIRED_VARS + Tcmalloc_LIBRARY + Tcmalloc_INCLUDE_DIR +) + + +mark_as_advanced( + Tcmalloc_LIBRARY + Tcmalloc_INCLUDE_DIR + ) diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt new file mode 100644 index 00000000..28d59b5b --- /dev/null +++ b/deps/CMakeLists.txt @@ -0,0 +1,16 @@ + +if (ENABLE_WEBSOCKET) + add_subdirectory(wslay) +endif() + + +########### install files ############### + + + + +#original Makefile.am contents follow: + +#if ENABLE_WEBSOCKET +#SUBDIRS = wslay +#endif # ENABLE_WEBSOCKET diff --git a/deps/wslay/CMakeLists.txt b/deps/wslay/CMakeLists.txt new file mode 100644 index 00000000..4795ec7c --- /dev/null +++ b/deps/wslay/CMakeLists.txt @@ -0,0 +1,38 @@ +project(wslay LANGUAGES CXX C VERSION 1.1.1) + +add_subdirectory(lib) +add_subdirectory(tests) + + +########### install files ############### + + + + +#original Makefile.am contents follow: + +## Wslay - The WebSocket Library +# +## Copyright (c) 2011, 2012 Tatsuhiro Tsujikawa +# +## Permission is hereby granted, free of charge, to any person obtaining +## a copy of this software and associated documentation files (the +## "Software"), to deal in the Software without restriction, including +## without limitation the rights to use, copy, modify, merge, publish, +## distribute, sublicense, and/or sell copies of the Software, and to +## permit persons to whom the Software is furnished to do so, subject to +## the following conditions: +# +## The above copyright notice and this permission notice shall be +## included in all copies or substantial portions of the Software. +# +## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +## LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +## OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +## WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +#SUBDIRS = lib tests +# +#ACLOCAL_AMFLAGS = -I m4 diff --git a/deps/wslay/lib/CMakeLists.txt b/deps/wslay/lib/CMakeLists.txt new file mode 100644 index 00000000..67b4bbed --- /dev/null +++ b/deps/wslay/lib/CMakeLists.txt @@ -0,0 +1,81 @@ + + +add_subdirectory(includes) + + +########### next target ############### +set(HFILES + wslay_frame.h + wslay_event.h + wslay_queue.h + wslay_net.h + wslay_macro.h +) + +set(OBJECTS + wslay_frame.c + wslay_event.c + wslay_queue.c + wslay_net.c +) + + +set(wslay_STAT_SRCS ${HFILES} ${OBJECTS}) + +set(WSLAY_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/includes) + + +add_library(wslay STATIC ${wslay_STAT_SRCS}) +target_compile_definitions(wslay PUBLIC PACKAGE_VERSION="${PROJECT_VERSION}") +target_compile_definitions(wslay PUBLIC PACKAGE="${PROJECT_NAME}") +target_include_directories(wslay PUBLIC ${WSLAY_INCLUDE_DIR}) +target_include_directories(wslay INTERFACE ${WSLAY_INCLUDE_DIR}) + + +########### install files ############### + + + + +#original Makefile.am contents follow: + +## Wslay - The WebSocket Library +# +## Copyright (c) 2011, 2012 Tatsuhiro Tsujikawa +# +## Permission is hereby granted, free of charge, to any person obtaining +## a copy of this software and associated documentation files (the +## "Software"), to deal in the Software without restriction, including +## without limitation the rights to use, copy, modify, merge, publish, +## distribute, sublicense, and/or sell copies of the Software, and to +## permit persons to whom the Software is furnished to do so, subject to +## the following conditions: +# +## The above copyright notice and this permission notice shall be +## included in all copies or substantial portions of the Software. +# +## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +## LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +## OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +## WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +#SUBDIRS = includes +# +#AM_CFLAGS = -Wall +#AM_CPPFLAGS = @DEFS@ -I$(srcdir)/includes -I$(builddir)/includes +# +#DISTCLEANFILES = $(pkgconfig_DATA) +# +#noinst_LTLIBRARIES = libwslay.la +# +#OBJECTS = wslay_frame.c wslay_event.c\ +# wslay_queue.c wslay_net.c +# +#HFILES = wslay_frame.h wslay_event.h\ +# wslay_queue.h wslay_net.h wslay_macro.h +# +#libwslay_la_SOURCES = $(HFILES) $(OBJECTS) +#libwslay_la_LDFLAGS = -no-undefined \ +# -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) diff --git a/deps/wslay/lib/includes/CMakeLists.txt b/deps/wslay/lib/includes/CMakeLists.txt new file mode 100644 index 00000000..4646126f --- /dev/null +++ b/deps/wslay/lib/includes/CMakeLists.txt @@ -0,0 +1,33 @@ + + + +########### install files ############### + + + + +#original Makefile.am contents follow: + +## Wslay - The WebSocket Library +# +## Copyright (c) 2011, 2012 Tatsuhiro Tsujikawa +# +## Permission is hereby granted, free of charge, to any person obtaining +## a copy of this software and associated documentation files (the +## "Software"), to deal in the Software without restriction, including +## without limitation the rights to use, copy, modify, merge, publish, +## distribute, sublicense, and/or sell copies of the Software, and to +## permit persons to whom the Software is furnished to do so, subject to +## the following conditions: +# +## The above copyright notice and this permission notice shall be +## included in all copies or substantial portions of the Software. +# +## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +## LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +## OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +## WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +#noinst_HEADERS = wslay/wslay.h wslay/wslayver.h diff --git a/deps/wslay/tests/CMakeLists.txt b/deps/wslay/tests/CMakeLists.txt new file mode 100644 index 00000000..dfeafc87 --- /dev/null +++ b/deps/wslay/tests/CMakeLists.txt @@ -0,0 +1,81 @@ + + + +########### next target ############### +set(HFILES + wslay_session_test.h + wslay_frame_test.h + wslay_event_test.h + wslay_queue_test.h +) + +set(OBJECTS + main.c + wslay_frame_test.c + wslay_event_test.c + wslay_queue_test.c +) + + +set(main_SRCS ${HFILES} ${OBJECTS}) + +if(BUILD_TESTS) + +add_executable(main ${main_SRCS}) + +target_link_libraries(main wslay cunit) + +endif(BUILD_TESTS) + +########### install files ############### + + + + +#original Makefile.am contents follow: + +## Wslay - The WebSocket Library +# +## Copyright (c) 2011, 2012 Tatsuhiro Tsujikawa +# +## Permission is hereby granted, free of charge, to any person obtaining +## a copy of this software and associated documentation files (the +## "Software"), to deal in the Software without restriction, including +## without limitation the rights to use, copy, modify, merge, publish, +## distribute, sublicense, and/or sell copies of the Software, and to +## permit persons to whom the Software is furnished to do so, subject to +## the following conditions: +# +## The above copyright notice and this permission notice shall be +## included in all copies or substantial portions of the Software. +# +## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +## LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +## OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +## WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +#if HAVE_CUNIT +# +#check_PROGRAMS = main +# +#OBJECTS = main.c wslay_frame_test.c\ +# wslay_event_test.c\ +# wslay_queue_test.c +# +#HFILES = wslay_session_test.h wslay_frame_test.h\ +# wslay_event_test.h\ +# wslay_queue_test.h +# +#main_SOURCES = $(HFILES) $(OBJECTS) +# +#main_LDADD = ${top_builddir}/lib/libwslay.la -lcunit +#main_LDFLAGS = -static +#AM_CFLAGS = -Wall -g -O2 -I${top_srcdir}/lib -I${top_srcdir}/lib/includes\ +# @DEFS@ +## DEFS += -D_ISOC99_SOURCE -D_GNU_SOURCE +#TESTS = main +# +#endif # HAVE_CUNIT diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt new file mode 100644 index 00000000..56cc85c4 --- /dev/null +++ b/doc/CMakeLists.txt @@ -0,0 +1,28 @@ + +include_directories(${KDE4_INCLUDES} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ) + +add_subdirectory(manual-src) + + +########### install files ############### + +install(FILES xmlrpc/aria2mon xmlrpc/aria2rpc xmlrpc/README.txt DESTINATION ) +install(FILES bash_completion/README.txt DESTINATION ) +install(FILES bash_completion/aria2c DESTINATION ) + + + +#original Makefile.am contents follow: + +#SUBDIRS = manual-src +# +#doc_xmlrpcdir = $(docdir)/xmlrpc +#dist_doc_xmlrpc_DATA = xmlrpc/aria2mon \ +# xmlrpc/aria2rpc \ +# xmlrpc/README.txt +# +#doc_bashcompletiondir = $(docdir)/bash_completion +#dist_doc_bashcompletion_DATA = bash_completion/README.txt +# +#doc_bashcompletionscriptdir = @bashcompletiondir@ +#dist_doc_bashcompletionscript_DATA = bash_completion/aria2c diff --git a/doc/manual-src/CMakeLists.txt b/doc/manual-src/CMakeLists.txt new file mode 100644 index 00000000..66e0c529 --- /dev/null +++ b/doc/manual-src/CMakeLists.txt @@ -0,0 +1,16 @@ + +include_directories(${KDE4_INCLUDES} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ) + +add_subdirectory(en) +add_subdirectory(ru) +add_subdirectory(pt) + + +########### install files ############### + + + + +#original Makefile.am contents follow: + +#SUBDIRS = en ru pt diff --git a/doc/manual-src/en/CMakeLists.txt b/doc/manual-src/en/CMakeLists.txt new file mode 100644 index 00000000..36ab1f50 --- /dev/null +++ b/doc/manual-src/en/CMakeLists.txt @@ -0,0 +1,163 @@ + +include_directories(${KDE4_INCLUDES} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ) + + +########### install files ############### + + + + +#original Makefile.am contents follow: + +## Makefile for Sphinx documentation +## +## You can set these variables from the command line. +#SPHINXOPTS = +#SPHINXBUILD = sphinx-build +#PAPER = +#BUILDDIR = _build +# +## Internal variables. +#PAPEROPT_a4 = -D latex_paper_size=a4 +#PAPEROPT_letter = -D latex_paper_size=letter +#ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) -c . @srcdir@ +# +## Configurations for aria2. +#man_MANS = $(BUILDDIR)/man/aria2c.1 +#EXTRA_DIST = $(man_MANS) aria2c.rst libaria2.rst index.rst README.rst\ +# technical-notes.rst mkapiref.py +# +#if HAVE_SPHINXBUILD +#$(man_MANS): aria2c.rst +# $(MAKE) man +#else +#$(man_MANS): +# @echo "WARNING: Building only stub man pages. Please install sphinx-build: pip install sphinx" +# if [ ! -d "$(@D)" ]; then mkdir -p "$(@D)"; fi; +# if [ ! -e "$@" ]; then touch "$@"; fi; +#endif +# +## Autogenerated rules by sphinx-quickstart +# +#.PHONY: help docclean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest +# +#help: +# @echo "Please use \`make ' where is one of" +# @echo " html to make standalone HTML files" +# @echo " dirhtml to make HTML files named index.html in directories" +# @echo " singlehtml to make a single large HTML file" +# @echo " pickle to make pickle files" +# @echo " json to make JSON files" +# @echo " htmlhelp to make HTML files and a HTML help project" +# @echo " qthelp to make HTML files and a qthelp project" +# @echo " devhelp to make HTML files and a Devhelp project" +# @echo " epub to make an epub" +# @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" +# @echo " latexpdf to make LaTeX files and run them through pdflatex" +# @echo " text to make text files" +# @echo " man to make manual pages" +# @echo " changes to make an overview of all changed/added/deprecated items" +# @echo " linkcheck to check all external links for integrity" +# @echo " doctest to run all doctests embedded in the documentation (if enabled)" +# +#$(srcdir)/libaria2api: $(top_builddir)/src/includes/aria2/aria2.h +# $(srcdir)/mkapiref.py $^ > $@ +# +#html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest: $(srcdir)/libaria2api +# +#docclean: +# -rm $(srcdir)/libaria2api +# -rm -rf $(BUILDDIR)/* +# +#html: +# $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html +# @echo +# @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." +# +#dirhtml: +# $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml +# @echo +# @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." +# +#singlehtml: +# $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml +# @echo +# @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." +# +#pickle: +# $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle +# @echo +# @echo "Build finished; now you can process the pickle files." +# +#json: +# $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json +# @echo +# @echo "Build finished; now you can process the JSON files." +# +#htmlhelp: +# $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp +# @echo +# @echo "Build finished; now you can run HTML Help Workshop with the" \ +# ".hhp project file in $(BUILDDIR)/htmlhelp." +# +#qthelp: +# $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp +# @echo +# @echo "Build finished; now you can run "qcollectiongenerator" with the" \ +# ".qhcp project file in $(BUILDDIR)/qthelp, like this:" +# @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/aria2.qhcp" +# @echo "To view the help file:" +# @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/aria2.qhc" +# +#devhelp: +# $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp +# @echo +# @echo "Build finished." +# @echo "To view the help file:" +# @echo "# mkdir -p $$HOME/.local/share/devhelp/aria2" +# @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/aria2" +# @echo "# devhelp" +# +#epub: +# $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub +# @echo +# @echo "Build finished. The epub file is in $(BUILDDIR)/epub." +# +#latex: +# $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex +# @echo +# @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." +# @echo "Run \`make' in that directory to run these through (pdf)latex" \ +# "(use \`make latexpdf' here to do that automatically)." +# +#latexpdf: +# $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex +# @echo "Running LaTeX files through pdflatex..." +# $(MAKE) -C $(BUILDDIR)/latex all-pdf +# @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." +# +#text: +# $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text +# @echo +# @echo "Build finished. The text files are in $(BUILDDIR)/text." +# +#man: +# $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man +# @echo +# @echo "Build finished. The manual pages are in $(BUILDDIR)/man." +# +#changes: +# $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes +# @echo +# @echo "The overview file is in $(BUILDDIR)/changes." +# +#linkcheck: +# $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck +# @echo +# @echo "Link check complete; look for any errors in the above output " \ +# "or in $(BUILDDIR)/linkcheck/output.txt." +# +#doctest: +# $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest +# @echo "Testing of doctests in the sources finished, look at the " \ +# "results in $(BUILDDIR)/doctest/output.txt." diff --git a/doc/manual-src/pt/CMakeLists.txt b/doc/manual-src/pt/CMakeLists.txt new file mode 100644 index 00000000..20cad3b2 --- /dev/null +++ b/doc/manual-src/pt/CMakeLists.txt @@ -0,0 +1,157 @@ + +include_directories(${KDE4_INCLUDES} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ) + + +########### install files ############### + + + + +#original Makefile.am contents follow: + +## Makefile for Sphinx documentation +## +## You can set these variables from the command line. +#SPHINXOPTS = +#SPHINXBUILD = sphinx-build +#PAPER = +#BUILDDIR = _build +# +## Internal variables. +#PAPEROPT_a4 = -D latex_paper_size=a4 +#PAPEROPT_letter = -D latex_paper_size=letter +#ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) -c . @srcdir@ +# +## Configurations for aria2. +#mandir = @mandir@/pt +#man_MANS = $(BUILDDIR)/man/aria2c.1 +#EXTRA_DIST = $(man_MANS) aria2c.rst index.rst README.rst +# +#if HAVE_SPHINXBUILD +#$(man_MANS): aria2c.rst +# $(MAKE) man +#else +#$(man_MANS): +# @echo "WARNING: Building only stub man pages. Please install sphinx-build: pip install sphinx" +# if [ ! -d "$(@D)" ]; then mkdir -p "$(@D)"; fi; +# if [ ! -e "$@" ]; then touch "$@"; fi; +#endif +# +## Autogenerated rules by sphinx-quickstart +# +#.PHONY: help docclean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest +# +#help: +# @echo "Please use \`make ' where is one of" +# @echo " html to make standalone HTML files" +# @echo " dirhtml to make HTML files named index.html in directories" +# @echo " singlehtml to make a single large HTML file" +# @echo " pickle to make pickle files" +# @echo " json to make JSON files" +# @echo " htmlhelp to make HTML files and a HTML help project" +# @echo " qthelp to make HTML files and a qthelp project" +# @echo " devhelp to make HTML files and a Devhelp project" +# @echo " epub to make an epub" +# @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" +# @echo " latexpdf to make LaTeX files and run them through pdflatex" +# @echo " text to make text files" +# @echo " man to make manual pages" +# @echo " changes to make an overview of all changed/added/deprecated items" +# @echo " linkcheck to check all external links for integrity" +# @echo " doctest to run all doctests embedded in the documentation (if enabled)" +# +#docclean: +# -rm -rf $(BUILDDIR)/* +# +#html: +# $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html +# @echo +# @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." +# +#dirhtml: +# $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml +# @echo +# @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." +# +#singlehtml: +# $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml +# @echo +# @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." +# +#pickle: +# $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle +# @echo +# @echo "Build finished; now you can process the pickle files." +# +#json: +# $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json +# @echo +# @echo "Build finished; now you can process the JSON files." +# +#htmlhelp: +# $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp +# @echo +# @echo "Build finished; now you can run HTML Help Workshop with the" \ +# ".hhp project file in $(BUILDDIR)/htmlhelp." +# +#qthelp: +# $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp +# @echo +# @echo "Build finished; now you can run "qcollectiongenerator" with the" \ +# ".qhcp project file in $(BUILDDIR)/qthelp, like this:" +# @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/aria2.qhcp" +# @echo "To view the help file:" +# @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/aria2.qhc" +# +#devhelp: +# $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp +# @echo +# @echo "Build finished." +# @echo "To view the help file:" +# @echo "# mkdir -p $$HOME/.local/share/devhelp/aria2" +# @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/aria2" +# @echo "# devhelp" +# +#epub: +# $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub +# @echo +# @echo "Build finished. The epub file is in $(BUILDDIR)/epub." +# +#latex: +# $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex +# @echo +# @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." +# @echo "Run \`make' in that directory to run these through (pdf)latex" \ +# "(use \`make latexpdf' here to do that automatically)." +# +#latexpdf: +# $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex +# @echo "Running LaTeX files through pdflatex..." +# $(MAKE) -C $(BUILDDIR)/latex all-pdf +# @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." +# +#text: +# $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text +# @echo +# @echo "Build finished. The text files are in $(BUILDDIR)/text." +# +#man: +# $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man +# @echo +# @echo "Build finished. The manual pages are in $(BUILDDIR)/man." +# +#changes: +# $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes +# @echo +# @echo "The overview file is in $(BUILDDIR)/changes." +# +#linkcheck: +# $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck +# @echo +# @echo "Link check complete; look for any errors in the above output " \ +# "or in $(BUILDDIR)/linkcheck/output.txt." +# +#doctest: +# $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest +# @echo "Testing of doctests in the sources finished, look at the " \ +# "results in $(BUILDDIR)/doctest/output.txt." diff --git a/doc/manual-src/ru/CMakeLists.txt b/doc/manual-src/ru/CMakeLists.txt new file mode 100644 index 00000000..1a46a1f3 --- /dev/null +++ b/doc/manual-src/ru/CMakeLists.txt @@ -0,0 +1,158 @@ + +include_directories(${KDE4_INCLUDES} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ) + + +########### install files ############### + + + + +#original Makefile.am contents follow: + +## Makefile for Sphinx documentation +## +## You can set these variables from the command line. +#SPHINXOPTS = +#SPHINXBUILD = sphinx-build +#PAPER = +#BUILDDIR = _build +# +## Internal variables. +#PAPEROPT_a4 = -D latex_paper_size=a4 +#PAPEROPT_letter = -D latex_paper_size=letter +#ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) -c . @srcdir@ +# +## Configurations for aria2. +#mandir = @mandir@/ru +#man_MANS = $(BUILDDIR)/man/aria2c.1 +#EXTRA_DIST = $(man_MANS) aria2c.rst index.rst +# +#if HAVE_SPHINXBUILD +#$(man_MANS): aria2c.rst +# $(MAKE) man +#else +#$(man_MANS): +# @echo "WARNING: Building only stub man pages. Please install sphinx-build: pip install sphinx" +# if [ ! -d "$(@D)" ]; then mkdir -p "$(@D)"; fi; +# if [ ! -e "$@" ]; then touch "$@"; fi; +#endif +# +## Autogenerated rules by sphinx-quickstart +# +#.PHONY: help docclean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest +# +#help: +# @echo "Please use \`make ' where is one of" +# @echo " html to make standalone HTML files" +# @echo " dirhtml to make HTML files named index.html in directories" +# @echo " singlehtml to make a single large HTML file" +# @echo " pickle to make pickle files" +# @echo " json to make JSON files" +# @echo " htmlhelp to make HTML files and a HTML help project" +# @echo " qthelp to make HTML files and a qthelp project" +# @echo " devhelp to make HTML files and a Devhelp project" +# @echo " epub to make an epub" +# @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" +# @echo " latexpdf to make LaTeX files and run them through pdflatex" +# @echo " text to make text files" +# @echo " man to make manual pages" +# @echo " changes to make an overview of all changed/added/deprecated items" +# @echo " linkcheck to check all external links for integrity" +# @echo " doctest to run all doctests embedded in the documentation (if enabled)" +# +#docclean: +# -rm -rf $(BUILDDIR)/* +# +#html: +# $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html +# @echo +# @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." +# +#dirhtml: +# $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml +# @echo +# @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." +# +#singlehtml: +# $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml +# @echo +# @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." +# +#pickle: +# $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle +# @echo +# @echo "Build finished; now you can process the pickle files." +# +#json: +# $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json +# @echo +# @echo "Build finished; now you can process the JSON files." +# +#htmlhelp: +# $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp +# @echo +# @echo "Build finished; now you can run HTML Help Workshop with the" \ +# ".hhp project file in $(BUILDDIR)/htmlhelp." +# +#qthelp: +# $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp +# @echo +# @echo "Build finished; now you can run "qcollectiongenerator" with the" \ +# ".qhcp project file in $(BUILDDIR)/qthelp, like this:" +# @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/aria2.qhcp" +# @echo "To view the help file:" +# @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/aria2.qhc" +# +#devhelp: +# $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp +# @echo +# @echo "Build finished." +# @echo "To view the help file:" +# @echo "# mkdir -p $$HOME/.local/share/devhelp/aria2" +# @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/aria2" +# @echo "# devhelp" +# +#epub: +# $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub +# @echo +# @echo "Build finished. The epub file is in $(BUILDDIR)/epub." +# +#latex: +# $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex +# @echo +# @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." +# @echo "Run \`make' in that directory to run these through (pdf)latex" \ +# "(use \`make latexpdf' here to do that automatically)." +# +#latexpdf: +# $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex +# @echo "Running LaTeX files through pdflatex..." +# $(MAKE) -C $(BUILDDIR)/latex all-pdf +# @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." +# +#text: +# $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text +# @echo +# @echo "Build finished. The text files are in $(BUILDDIR)/text." +# +#man: +# $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man +# sed -i -e '1i .\\" -*- mode: troff; coding: utf-8 -*-' $(BUILDDIR)/man/aria2c.1 +# @echo +# @echo "Build finished. The manual pages are in $(BUILDDIR)/man." +# +#changes: +# $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes +# @echo +# @echo "The overview file is in $(BUILDDIR)/changes." +# +#linkcheck: +# $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck +# @echo +# @echo "Link check complete; look for any errors in the above output " \ +# "or in $(BUILDDIR)/linkcheck/output.txt." +# +#doctest: +# $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest +# @echo "Testing of doctests in the sources finished, look at the " \ +# "results in $(BUILDDIR)/doctest/output.txt." diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt new file mode 100644 index 00000000..d6f4ea60 --- /dev/null +++ b/lib/CMakeLists.txt @@ -0,0 +1,11 @@ + + + +########### install files ############### + + + + +#original Makefile.am contents follow: + +#EXTRA_DIST = gettext.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 00000000..0ee8a94e --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,1455 @@ + + +add_subdirectory(includes) + + +########### next target ############### + +set(aria2c_SRCS main.cc) + +add_library(main OBJECT ${aria2c_SRCS}) + +target_compile_definitions(main PUBLIC PACKAGE_VERSION="${PROJECT_VERSION}") +target_compile_definitions(main PUBLIC PACKAGE="${PROJECT_NAME}") +target_include_directories(main PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/includes) +target_include_directories(main PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + +add_executable(aria2c $) +target_link_libraries(aria2c PUBLIC main) +install(TARGETS aria2c ${INSTALL_TARGETS_DEFAULT_ARGS}) + + +########### next target ############### +set(aria2_SRCS + a2algo.h + a2functional.h + a2io.h + a2iterator.h + a2netcompat.h + A2STR.cc A2STR.h + a2time.h + AbstractAuthResolver.cc + AbstractAuthResolver.h + AbstractCommand.cc + AbstractCommand.h + AbstractDiskWriter.cc + AbstractDiskWriter.h + AbstractHttpServerResponseCommand.cc + AbstractHttpServerResponseCommand.h + AbstractOptionHandler.cc + AbstractOptionHandler.h + AbstractProxyRequestCommand.cc + AbstractProxyRequestCommand.h + AbstractProxyResponseCommand.cc + AbstractProxyResponseCommand.h + AbstractSingleDiskAdaptor.cc + AbstractSingleDiskAdaptor.h + AdaptiveFileAllocationIterator.cc + AdaptiveFileAllocationIterator.h + AdaptiveURISelector.cc + AdaptiveURISelector.h + AnonDiskWriterFactory.h + array_fun.h + AuthConfig.cc + AuthConfig.h + AuthConfigFactory.cc + AuthConfigFactory.h + AuthResolver.h + AutoSaveCommand.cc + AutoSaveCommand.h + BackupIPv4ConnectCommand.h + BackupIPv4ConnectCommand.cc + base32.cc + base32.h + base64.h + BinaryStream.h + bitfield.cc + bitfield.h + BitfieldMan.cc + BitfieldMan.h + BtProgressInfoFile.h + BufferedFile.cc + BufferedFile.h + ByteArrayDiskWriter.cc + ByteArrayDiskWriter.h + ByteArrayDiskWriterFactory.h + CheckIntegrityCommand.cc + CheckIntegrityCommand.h + CheckIntegrityDispatcherCommand.cc + CheckIntegrityDispatcherCommand.h + CheckIntegrityEntry.cc + CheckIntegrityEntry.h + CheckIntegrityMan.h + Checksum.cc Checksum.h + ChecksumCheckIntegrityEntry.cc + ChecksumCheckIntegrityEntry.h + ChunkChecksum.cc + ChunkChecksum.h + ChunkedDecodingStreamFilter.cc + ChunkedDecodingStreamFilter.h + ColorizedStream.cc + ColorizedStream.h + Command.cc + Command.h + common.h + ConnectCommand.cc + ConnectCommand.h + console.cc + console.h + ConsoleStatCalc.cc + ConsoleStatCalc.h + ContentTypeRequestGroupCriteria.cc + ContentTypeRequestGroupCriteria.h + Context.cc + Context.h + ContextAttribute.cc + ContextAttribute.h + ControlChain.h + Cookie.cc Cookie.h + CookieStorage.cc + CookieStorage.h + cookie_helper.cc + cookie_helper.h + CreateRequestCommand.cc + CreateRequestCommand.h + crypto_endian.h + CUIDCounter.cc + CUIDCounter.h + DefaultAuthResolver.cc + DefaultAuthResolver.h + DefaultBtProgressInfoFile.cc + DefaultBtProgressInfoFile.h + DefaultDiskWriter.cc + DefaultDiskWriter.h + DefaultDiskWriterFactory.cc + DefaultDiskWriterFactory.h + DefaultPieceStorage.cc + DefaultPieceStorage.h + DefaultStreamPieceSelector.cc + DefaultStreamPieceSelector.h + DelayedCommand.h + Dependency.h + DirectDiskAdaptor.cc + DirectDiskAdaptor.h + DiskAdaptor.cc + DiskAdaptor.h + DiskWriter.h + DiskWriterFactory.h + DlAbortEx.cc + DlAbortEx.h + DlRetryEx.cc + DlRetryEx.h + DNSCache.cc + DNSCache.h + DownloadCommand.cc + DownloadCommand.h + DownloadContext.cc + DownloadContext.h + DownloadEngine.cc + DownloadEngine.h + DownloadEngineFactory.cc + DownloadEngineFactory.h + DownloadFailureException.cc + DownloadFailureException.h + DownloadHandler.cc + DownloadHandler.h + DownloadHandlerConstants.cc + DownloadHandlerConstants.h + DownloadResult.cc + DownloadResult.h + download_handlers.cc + download_handlers.h + download_helper.cc + download_helper.h + error_code.h + Event.h + EventPoll.h + Exception.cc + Exception.h + FatalException.cc + FatalException.h + FeatureConfig.cc + FeatureConfig.h + FeedbackURISelector.cc + FeedbackURISelector.h + File.cc + File.h + FileAllocationCommand.cc + FileAllocationCommand.h + FileAllocationDispatcherCommand.cc + FileAllocationDispatcherCommand.h + FileAllocationEntry.cc + FileAllocationEntry.h + FileAllocationIterator.h + FileAllocationMan.h + FileEntry.cc + FileEntry.h + FillRequestGroupCommand.cc + FillRequestGroupCommand.h + fmt.cc + fmt.h + FtpConnection.cc + FtpConnection.h + FtpDownloadCommand.cc + FtpDownloadCommand.h + FtpFinishDownloadCommand.cc + FtpFinishDownloadCommand.h + FtpInitiateConnectionCommand.cc + FtpInitiateConnectionCommand.h + FtpNegotiationCommand.cc + FtpNegotiationCommand.h + FtpNegotiationConnectChain.h + FtpTunnelRequestCommand.cc + FtpTunnelRequestCommand.h + FtpTunnelRequestConnectChain.h + FtpTunnelResponseCommand.cc + FtpTunnelResponseCommand.h + GenericParser.h + GeomStreamPieceSelector.cc + GeomStreamPieceSelector.h + GroupId.cc + GroupId.h + GrowSegment.cc + GrowSegment.h + HashFuncEntry.h + HaveEraseCommand.cc + HaveEraseCommand.h + help_tags.cc + help_tags.h + HttpConnection.cc + HttpConnection.h + HttpDownloadCommand.cc + HttpDownloadCommand.h + HttpHeader.cc + HttpHeader.h + HttpHeaderProcessor.cc + HttpHeaderProcessor.h + HttpInitiateConnectionCommand.cc + HttpInitiateConnectionCommand.h + HttpListenCommand.cc + HttpListenCommand.h + HttpProxyRequestCommand.cc + HttpProxyRequestCommand.h + HttpProxyRequestConnectChain.h + HttpProxyResponseCommand.cc + HttpProxyResponseCommand.h + HttpRequest.cc + HttpRequest.h + HttpRequestCommand.cc + HttpRequestCommand.h + HttpRequestConnectChain.h + HttpResponse.cc + HttpResponse.h + HttpResponseCommand.cc + HttpResponseCommand.h + HttpServer.cc + HttpServer.h + HttpServerBodyCommand.cc + HttpServerBodyCommand.h + HttpServerCommand.cc + HttpServerCommand.h + HttpServerResponseCommand.cc + HttpServerResponseCommand.h + HttpSkipResponseCommand.cc + HttpSkipResponseCommand.h + IndexedList.h + InitiateConnectionCommand.cc + InitiateConnectionCommand.h + InitiateConnectionCommandFactory.cc + InitiateConnectionCommandFactory.h + InorderStreamPieceSelector.cc + InorderStreamPieceSelector.h + RandomStreamPieceSelector.cc + RandomStreamPieceSelector.h + InorderURISelector.cc + InorderURISelector.h + IOFile.cc IOFile.h + IteratableChecksumValidator.cc + IteratableChecksumValidator.h + IteratableChunkChecksumValidator.cc + IteratableChunkChecksumValidator.h + IteratableValidator.h + json.cc + json.h + JsonDiskWriter.h + JsonParser.cc + JsonParser.h + Lock.h + LogFactory.cc + LogFactory.h + Logger.cc + Logger.h + LongestSequencePieceSelector.cc + LongestSequencePieceSelector.h + MemoryBufferPreDownloadHandler.h + MemoryPreDownloadHandler.h + message.h + MessageDigest.cc + MessageDigest.h + MessageDigestImpl.h + message_digest_helper.cc + message_digest_helper.h + MetadataInfo.cc + MetadataInfo.h + MetalinkHttpEntry.cc + MetalinkHttpEntry.h + MultiDiskAdaptor.cc + MultiDiskAdaptor.h + MultiFileAllocationIterator.cc + MultiFileAllocationIterator.h + MultiUrlRequestInfo.cc + MultiUrlRequestInfo.h + NameResolver.cc + NameResolver.h + Netrc.cc + Netrc.h + NetrcAuthResolver.cc + NetrcAuthResolver.h + NetStat.cc + NetStat.h + Notifier.cc + Notifier.h + NsCookieParser.cc + NsCookieParser.h + NullHandle.h + NullOutputFile.h + NullProgressInfoFile.h + NullSinkStreamFilter.cc + NullSinkStreamFilter.h + NullStatCalc.h + Option.cc + Option.h + OptionHandler.cc + OptionHandler.h + OptionHandlerException.cc + OptionHandlerException.h + OptionHandlerFactory.cc + OptionHandlerFactory.h + OptionHandlerImpl.cc + OptionHandlerImpl.h + OptionParser.cc + OptionParser.h + option_processing.cc + OutputFile.h + paramed_string.cc + paramed_string.h + PeerStat.cc + PeerStat.h + Piece.cc + Piece.h + PiecedSegment.cc + PiecedSegment.h + PieceHashCheckIntegrityEntry.cc + PieceHashCheckIntegrityEntry.h + PieceSelector.h + PieceStatMan.cc + PieceStatMan.h + PieceStorage.h + Platform.cc + Platform.h + PostDownloadHandler.h + PreDownloadHandler.h + prefs.cc + prefs.h + ProgressAwareEntry.h + ProtocolDetector.cc + ProtocolDetector.h + Randomizer.h + Range.cc + Range.h + RarestPieceSelector.cc + RarestPieceSelector.h + RealtimeCommand.cc + RealtimeCommand.h + RecoverableException.cc + RecoverableException.h + Request.cc + Request.h + RequestGroup.cc + RequestGroup.h + RequestGroupCriteria.h + RequestGroupEntry.cc + RequestGroupEntry.h + RequestGroupMan.cc + RequestGroupMan.h + RpcMethod.cc + RpcMethod.h + RpcMethodFactory.cc + RpcMethodFactory.h + RpcMethodImpl.cc + RpcMethodImpl.h + RpcRequest.cc + RpcRequest.h + RpcResponse.cc + RpcResponse.h + rpc_helper.cc + rpc_helper.h + SaveSessionCommand.h + SaveSessionCommand.cc + SegList.h + Segment.h + SegmentMan.cc + SegmentMan.h + SelectEventPoll.cc + SelectEventPoll.h + SequentialDispatcherCommand.h + SequentialPicker.h + ServerStat.cc + ServerStat.h + ServerStatMan.cc + ServerStatMan.h + SessionSerializer.cc + SessionSerializer.h + Signature.cc + Signature.h + SimpleRandomizer.cc + SimpleRandomizer.h + SingleFileAllocationIterator.cc + SingleFileAllocationIterator.h + SingletonHolder.h + SinkStreamFilter.cc + SinkStreamFilter.h + SocketBuffer.cc + SocketBuffer.h + SocketCore.cc + SocketCore.h + SocketRecvBuffer.cc + SocketRecvBuffer.h + SpeedCalc.cc + SpeedCalc.h + StatCalc.h + StreamCheckIntegrityEntry.cc + StreamCheckIntegrityEntry.h + StreamFileAllocationEntry.cc + StreamFileAllocationEntry.h + StreamFilter.cc + StreamFilter.h + StreamPieceSelector.h + StructParserStateMachine.h + TimeA2.cc + TimeA2.h + TimeBasedCommand.cc + TimeBasedCommand.h + TimedHaltCommand.cc + TimedHaltCommand.h + TimerA2.cc + TimerA2.h + timespec.h + TorrentAttribute.cc + TorrentAttribute.h + TransferStat.cc + TransferStat.h + TruncFileAllocationIterator.cc + TruncFileAllocationIterator.h + UnknownLengthPieceStorage.cc + UnknownLengthPieceStorage.h + UnknownOptionException.cc + UnknownOptionException.h + uri.cc + uri.h + UriListParser.cc + UriListParser.h + URIResult.cc + URIResult.h + URISelector.h + uri_split.c + uri_split.h + usage_text.h + util.cc util.h + util_security.cc + util_security.h + ValueBase.cc ValueBase.h + ValueBaseDiskWriter.h + ValueBaseJsonParser.h + ValueBaseStructParserState.h + ValueBaseStructParserStateImpl.cc + ValueBaseStructParserStateImpl.h + ValueBaseStructParserStateMachine.cc + ValueBaseStructParserStateMachine.h + version_usage.cc + wallclock.cc wallclock.h + WatchProcessCommand.cc + WatchProcessCommand.h + WrDiskCache.cc WrDiskCache.h + WrDiskCacheEntry.cc WrDiskCacheEntry.h + XmlRpcRequestParserController.cc + XmlRpcRequestParserController.h + OpenedFileCounter.cc + OpenedFileCounter.h + SHA1IOFile.cc + SHA1IOFile.h + EvictSocketPoolCommand.cc + EvictSocketPoolCommand.h + libssl_compat.h +) + +if(WIN32) + set(aria2_SRCS + ${aria2_SRCS} + + WinConsoleFile.cc + WinConsoleFile.h + ) +endif() + +if(ENABLE_WEBSOCKET) + set(aria2_SRCS + ${aria2_SRCS} + + WebSocketInteractionCommand.cc + WebSocketInteractionCommand.h + WebSocketResponseCommand.cc + WebSocketResponseCommand.h + WebSocketSession.cc + WebSocketSession.h + WebSocketSessionMan.cc + WebSocketSessionMan.h + ) +else() + set(aria2_SRCS + ${aria2_SRCS} + + NullWebSocketSessionMan.h + ) +endif() + + +if (HAVE_SOME_XMLLIB) + set(aria2_SRCS + ${aria2_SRCS} + + ParserStateMachine.h + XmlAttr.cc + XmlAttr.h + XmlParser.cc + XmlParser.h + ) +endif() + +if (HAVE_LIBXML2) + set(aria2_SRCS + ${aria2_SRCS} + + Xml2XmlParser.cc + Xml2XmlParser.h + ) +endif() + +if (HAVE_LIBEXPAT) + set(aria2_SRCS + ${aria2_SRCS} + + ExpatXmlParser.cc + ExpatXmlParser.h + ) +endif() + +if (ENABLE_XML_RPC) + set(aria2_SRCS + ${aria2_SRCS} + + + ) + +endif() + +if (HAVE_SOME_FALLOCATE) + set(aria2_SRCS + ${aria2_SRCS} + + FallocFileAllocationIterator.cc + FallocFileAllocationIterator.h + ) + +endif() + +if (HAVE_EPOLL) + set(aria2_SRCS + ${aria2_SRCS} + + EpollEventPoll.cc + EpollEventPoll.h + ) + +endif() + +if (ENABLE_SSL) + set(aria2_SRCS + ${aria2_SRCS} + + TLSContext.h + TLSSession.h + ) +endif() + +if (USE_APPLE_MD) + set(aria2_SRCS + ${aria2_SRCS} + + AppleMessageDigestImpl.cc + ) + +endif() + +if (HAVE_APPLETLS) + set(aria2_SRCS + ${aria2_SRCS} + + AppleTLSContext.cc + AppleTLSContext.h + AppleTLSSession.cc + AppleTLSSession.h + ) +endif() + +if (HAVE_WINTLS) + set(aria2_SRCS + ${aria2_SRCS} + + WinTLSContext.cc + WinTLSContext.h + WinTLSSession.cc + WinTLSSession.h + ) +endif() + +if(USE_INTERNAL_BIGNUM) + set(aria2_SRCS + ${aria2_SRCS} + + InternalDHKeyExchange.cc + InternalDHKeyExchange.h + ) +endif() + +if (USE_INTERNAL_ARC4) + set(aria2_SRCS + ${aria2_SRCS} + + InternalARC4Encryptor.cc + InternalARC4Encryptor.h + ) +endif() + +if (USE_INTERNAL_MD) + set(aria2_SRCS + ${aria2_SRCS} + + InternalMessageDigestImpl.cc + crypto_hash.cc + crypto_hash.h + ) +endif() + +if (HAVE_LIBGNUTLS) + set(aria2_SRCS + + LibgnutlsTLSContext.cc + LibgnutlsTLSContext.h + LibgnutlsTLSSession.cc + LibgnutlsTLSSession.h + ) +endif() + +if (HAVE_LIBGCRYPT) + set(aria2_SRCS + ${aria2_SRCS} + + LibgcryptARC4Encryptor.cc + LibgcryptARC4Encryptor.h + LibgcryptDHKeyExchange.cc + LibgcryptDHKeyExchange.h + ) + if (USE_LIBGCRYPT_MD) + set(aria2_SRCS + ${aria2_SRCS} + + LibgcryptMessageDigestImpl.cc + ) + endif() +endif() + +if (HAVE_LIBNETTLE) + set(aria2_SRCS + ${aria2_SRCS} + + LibnettleARC4Encryptor.cc + LibnettleARC4Encryptor.h + ) + if (USE_LIBNETTLE_MD) + set(aria2_SRCS + ${aria2_SRCS} + + LibnettleMessageDigestImpl.cc + ) + endif() +endif() + +if (HAVE_LIBGMP) + set(aria2_SRCS + ${aria2_SRCS} + + a2gmp.cc + a2gmp.h + LibgmpDHKeyExchange.cc + LibgmpDHKeyExchange.h + ) +endif() + +if (HAVE_OPENSSL) + set(aria2_SRCS + ${aria2_SRCS} + + LibsslARC4Encryptor.cc + LibsslARC4Encryptor.h + LibsslDHKeyExchange.cc + LibsslDHKeyExchange.h + ) + if (NOT HAVE_APPLETLS) + set(aria2_SRCS + ${aria2_SRCS} + + LibsslTLSContext.cc + LibsslTLSContext.h + LibsslTLSSession.cc + LibsslTLSSession.h + ) + endif() + if (USE_OPENSSL_MD) + set(aria2_SRCS + ${aria2_SRCS} + + LibsslMessageDigestImpl.cc + ) + endif() +endif() + +if (HAVE_ZLIB) + set(aria2_SRCS + ${aria2_SRCS} + + GZipDecodingStreamFilter.cc + GZipDecodingStreamFilter.h + GZipEncoder.cc + GZipEncoder.h + GZipFile.cc + GZipFile.h + Adler32MessageDigestImpl.cc + Adler32MessageDigestImpl.h + ) +endif() + +if (HAVE_SQLITE3) + set(aria2_SRCS + ${aria2_SRCS} + + Sqlite3CookieParser.cc + Sqlite3CookieParser.h + Sqlite3CookieParserImpl.cc + Sqlite3CookieParserImpl.h + ) +endif() + +if (HAVE_LIBSSH2) + set(aria2_SRCS + ${aria2_SRCS} + + SSHSession.cc + SSHSession.h + SftpNegotiationCommand.cc + SftpNegotiationCommand.h + SftpNegotiationConnectChain.h + SftpDownloadCommand.cc + SftpDownloadCommand.h + SftpFinishDownloadCommand.cc + SftpFinishDownloadCommand.h + ) +endif() + +if (ENABLE_ASYNC_DNS) + set(aria2_SRCS + ${aria2_SRCS} + + AsyncNameResolver.cc + AsyncNameResolver.h + AsyncNameResolverMan.cc + AsyncNameResolverMan.h + ) +endif() + +if (ENABLE_BITTORRENT) + set(aria2_SRCS + ${aria2_SRCS} + + AbstractBtMessage.cc + AbstractBtMessage.h + ActivePeerConnectionCommand.cc + ActivePeerConnectionCommand.h + AnnounceList.h + AnnounceList.cc + AnnounceTier.cc + AnnounceTier.h + ARC4Encryptor.h + bencode2.cc + bencode2.h + BencodeDiskWriter.h + BencodeDiskWriterFactory.h + BencodeParser.cc + BencodeParser.h + bittorrent_helper.cc + bittorrent_helper.h + BtAbortOutstandingRequestEvent.cc + BtAbortOutstandingRequestEvent.h + BtAllowedFastMessage.cc + BtAllowedFastMessage.h + BtAnnounce.cc + BtAnnounce.h + BtBitfieldMessage.cc + BtBitfieldMessage.h + BtBitfieldMessageValidator.cc + BtBitfieldMessageValidator.h + BtCancelMessage.cc + BtCancelMessage.h + BtCancelSendingPieceEvent.h + BtCheckIntegrityEntry.cc + BtCheckIntegrityEntry.h + BtChokeMessage.cc + BtChokeMessage.h + BtChokingEvent.h + BtConstants.h + BtDependency.cc + BtDependency.h + BtExtendedMessage.cc + BtExtendedMessage.h + BtFileAllocationEntry.cc + BtFileAllocationEntry.h + BtHandshakeMessage.cc + BtHandshakeMessage.h + BtHandshakeMessageValidator.cc + BtHandshakeMessageValidator.h + BtHaveAllMessage.cc + BtHaveAllMessage.h + BtHaveMessage.cc + BtHaveMessage.h + BtHaveNoneMessage.cc + BtHaveNoneMessage.h + BtInteractive.h + BtInterestedMessage.cc + BtInterestedMessage.h + BtKeepAliveMessage.cc + BtKeepAliveMessage.h + BtLeecherStateChoke.cc + BtLeecherStateChoke.h + BtMessage.h + BtMessageDispatcher.h + BtMessageFactory.h + BtMessageReceiver.h + BtMessageValidator.h + BtNotInterestedMessage.cc + BtNotInterestedMessage.h + BtPieceMessage.cc + BtPieceMessage.h + BtPieceMessageValidator.cc + BtPieceMessageValidator.h + BtPortMessage.cc + BtPortMessage.h + BtPostDownloadHandler.cc + BtPostDownloadHandler.h + BtRegistry.cc + BtRegistry.h + BtRejectMessage.cc + BtRejectMessage.h + BtRequestFactory.h + BtRequestMessage.cc + BtRequestMessage.h + BtRuntime.cc + BtRuntime.h + BtSeederStateChoke.cc + BtSeederStateChoke.h + BtSetup.cc + BtSetup.h + BtStopDownloadCommand.cc + BtStopDownloadCommand.h + BtSuggestPieceMessage.cc + BtSuggestPieceMessage.h + BtUnchokeMessage.cc + BtUnchokeMessage.h + DefaultBtAnnounce.cc + DefaultBtAnnounce.h + DefaultBtInteractive.cc + DefaultBtInteractive.h + DefaultBtMessageDispatcher.cc + DefaultBtMessageDispatcher.h + DefaultBtMessageFactory.cc + DefaultBtMessageFactory.h + DefaultBtMessageReceiver.cc + DefaultBtMessageReceiver.h + DefaultBtRequestFactory.cc + DefaultBtRequestFactory.h + DefaultExtensionMessageFactory.cc + DefaultExtensionMessageFactory.h + DefaultPeerStorage.cc + DefaultPeerStorage.h + DHKeyExchange.h + DHTAbstractMessage.cc + DHTAbstractMessage.h + DHTAbstractNodeLookupTask.h + DHTAbstractTask.cc + DHTAbstractTask.h + DHTAnnouncePeerMessage.cc + DHTAnnouncePeerMessage.h + DHTAnnouncePeerReplyMessage.cc + DHTAnnouncePeerReplyMessage.h + DHTAutoSaveCommand.cc + DHTAutoSaveCommand.h + DHTBucket.cc + DHTBucket.h + DHTBucketRefreshCommand.cc + DHTBucketRefreshCommand.h + DHTBucketRefreshTask.cc + DHTBucketRefreshTask.h + DHTBucketTree.cc + DHTBucketTree.h + DHTConnection.h + DHTConnectionImpl.cc + DHTConnectionImpl.h + DHTConstants.h + DHTEntryPointNameResolveCommand.cc + DHTEntryPointNameResolveCommand.h + DHTFindNodeMessage.cc + DHTFindNodeMessage.h + DHTFindNodeReplyMessage.cc + DHTFindNodeReplyMessage.h + DHTGetPeersCommand.cc + DHTGetPeersCommand.h + DHTGetPeersMessage.cc + DHTGetPeersMessage.h + DHTGetPeersReplyMessage.cc + DHTGetPeersReplyMessage.h + DHTIDCloser.h + DHTInteractionCommand.cc + DHTInteractionCommand.h + DHTMessage.cc + DHTMessage.h + DHTMessageCallback.h + DHTMessageDispatcher.h + DHTMessageDispatcherImpl.cc + DHTMessageDispatcherImpl.h + DHTMessageEntry.cc + DHTMessageEntry.h + DHTMessageFactory.h + DHTMessageFactoryImpl.cc + DHTMessageFactoryImpl.h + DHTMessageReceiver.cc + DHTMessageReceiver.h + DHTMessageTracker.cc + DHTMessageTracker.h + DHTMessageTrackerEntry.cc + DHTMessageTrackerEntry.h + DHTNode.cc + DHTNode.h + DHTNodeLookupEntry.cc + DHTNodeLookupEntry.h + DHTNodeLookupTask.cc + DHTNodeLookupTask.h + DHTNodeLookupTaskCallback.cc + DHTNodeLookupTaskCallback.h + DHTPeerAnnounceCommand.cc + DHTPeerAnnounceCommand.h + DHTPeerAnnounceEntry.cc + DHTPeerAnnounceEntry.h + DHTPeerAnnounceStorage.cc + DHTPeerAnnounceStorage.h + DHTPeerLookupTask.cc + DHTPeerLookupTask.h + DHTPeerLookupTaskCallback.cc + DHTPeerLookupTaskCallback.h + DHTPingMessage.cc + DHTPingMessage.h + DHTPingReplyMessage.cc + DHTPingReplyMessage.h + DHTPingReplyMessageCallback.h + DHTPingTask.cc + DHTPingTask.h + DHTQueryMessage.cc + DHTQueryMessage.h + DHTRegistry.cc + DHTRegistry.h + DHTReplaceNodeTask.cc + DHTReplaceNodeTask.h + DHTResponseMessage.cc + DHTResponseMessage.h + DHTRoutingTable.cc + DHTRoutingTable.h + DHTRoutingTableDeserializer.cc + DHTRoutingTableDeserializer.h + DHTRoutingTableSerializer.cc + DHTRoutingTableSerializer.h + DHTSetup.cc + DHTSetup.h + DHTTask.h + DHTTaskExecutor.cc + DHTTaskExecutor.h + DHTTaskFactory.h + DHTTaskFactoryImpl.cc + DHTTaskFactoryImpl.h + DHTTaskQueue.h + DHTTaskQueueImpl.cc + DHTTaskQueueImpl.h + DHTTokenTracker.cc + DHTTokenTracker.h + DHTTokenUpdateCommand.cc + DHTTokenUpdateCommand.h + DHTUnknownMessage.cc + DHTUnknownMessage.h + ExtensionMessage.h + ExtensionMessageFactory.h + ExtensionMessageRegistry.cc + ExtensionMessageRegistry.h + HandshakeExtensionMessage.cc + HandshakeExtensionMessage.h + IndexBtMessage.cc + IndexBtMessage.h + IndexBtMessageValidator.cc + IndexBtMessageValidator.h + InitiatorMSEHandshakeCommand.cc + InitiatorMSEHandshakeCommand.h + LpdDispatchMessageCommand.cc + LpdDispatchMessageCommand.h + LpdMessage.cc + LpdMessage.h + LpdMessageDispatcher.cc + LpdMessageDispatcher.h + LpdMessageReceiver.cc + LpdMessageReceiver.h + LpdReceiveMessageCommand.cc + LpdReceiveMessageCommand.h + magnet.cc + magnet.h + MemoryBencodePreDownloadHandler.h + MSEHandshake.cc + MSEHandshake.h + NameResolveCommand.cc + NameResolveCommand.h + Peer.cc + Peer.h + PeerAbstractCommand.cc + PeerAbstractCommand.h + PeerAddrEntry.cc + PeerAddrEntry.h + PeerChokeCommand.cc + PeerChokeCommand.h + PeerConnection.cc + PeerConnection.h + PeerInitiateConnectionCommand.cc + PeerInitiateConnectionCommand.h + PeerInteractionCommand.cc + PeerInteractionCommand.h + PeerListenCommand.cc + PeerListenCommand.h + PeerReceiveHandshakeCommand.cc + PeerReceiveHandshakeCommand.h + PeerSessionResource.cc + PeerSessionResource.h + PeerStorage.h + PriorityPieceSelector.cc + PriorityPieceSelector.h + RangeBtMessage.cc + RangeBtMessage.h + RangeBtMessageValidator.cc + RangeBtMessageValidator.h + ReceiverMSEHandshakeCommand.cc + ReceiverMSEHandshakeCommand.h + RequestSlot.cc + RequestSlot.h + SeedCheckCommand.cc + SeedCheckCommand.h + SeedCriteria.h + ShareRatioSeedCriteria.cc + ShareRatioSeedCriteria.h + SimpleBtMessage.cc + SimpleBtMessage.h + TimeSeedCriteria.cc + TimeSeedCriteria.h + TrackerWatcherCommand.cc + TrackerWatcherCommand.h + UDPTrackerClient.cc + UDPTrackerClient.h + UDPTrackerRequest.cc + UDPTrackerRequest.h + UnionSeedCriteria.cc + UnionSeedCriteria.h + UTMetadataDataExtensionMessage.cc + UTMetadataDataExtensionMessage.h + UTMetadataExtensionMessage.cc + UTMetadataExtensionMessage.h + UTMetadataPostDownloadHandler.cc + UTMetadataPostDownloadHandler.h + UTMetadataRejectExtensionMessage.cc + UTMetadataRejectExtensionMessage.h + UTMetadataRequestExtensionMessage.cc + UTMetadataRequestExtensionMessage.h + UTMetadataRequestFactory.cc + UTMetadataRequestFactory.h + UTMetadataRequestTracker.cc + UTMetadataRequestTracker.h + UTPexExtensionMessage.cc + UTPexExtensionMessage.h + ValueBaseBencodeParser.h + XORCloser.h + ZeroBtMessage.cc + ZeroBtMessage.h + ) +endif() + +if (ENABLE_METALINK) + set(aria2_SRCS + ${aria2_SRCS} + + Metalink2RequestGroup.cc + Metalink2RequestGroup.h + MetalinkEntry.cc + MetalinkEntry.h + Metalinker.cc + Metalinker.h + MetalinkMetaurl.cc + MetalinkMetaurl.h + MetalinkParserController.cc + MetalinkParserController.h + MetalinkParserState.cc + MetalinkParserState.h + MetalinkParserStateImpl.cc + MetalinkParserStateImpl.h + MetalinkParserStateMachine.cc + MetalinkParserStateMachine.h + MetalinkParserStateV3Impl.cc + MetalinkParserStateV3Impl.h + MetalinkParserStateV4Impl.cc + MetalinkParserStateV4Impl.h + MetalinkPostDownloadHandler.cc + MetalinkPostDownloadHandler.h + MetalinkResource.cc + MetalinkResource.h + metalink_helper.cc + metalink_helper.h + ) +endif() + +if (NOT HAVE_ASCTIME_R) + set(aria2_SRCS + ${aria2_SRCS} + + asctime_r.c + asctime_r.h + ) +endif() + +if (NOT HAVE_BASENAME) + set(aria2_SRCS + ${aria2_SRCS} + + libgen.c + libgen.h + ) +endif() + +if (NOT HAVE_GETADDRINFO) + set(aria2_SRCS + ${aria2_SRCS} + + getaddrinfo.c + getaddrinfo.h + ) +endif() + +if (NOT HAVE_GAI_STRERROR) + set(aria2_SRCS + ${aria2_SRCS} + + gai_strerror.c + gai_strerror.h + ) +endif() + +if (NOT HAVE_GETTIMEOFDAY) + set(aria2_SRCS + ${aria2_SRCS} + + gettimeofday.c + gettimeofday.h + ) +endif() + +if (NOT HAVE_LOCALTIME_R) + set(aria2_SRCS + ${aria2_SRCS} + + localtime_r.c + localtime_r.h + ) +endif() + +if (NOT HAVE_STRPTIME) + set(aria2_SRCS + ${aria2_SRCS} + + strptime.c + strptime.h + ) +endif() + +if (NOT HAVE_TIMEGM) + set(aria2_SRCS + ${aria2_SRCS} + + timegm.c + timegm.h + ) +endif() + +if (NOT HAVE_DAEMON) + set(aria2_SRCS + ${aria2_SRCS} + + daemon.cc + daemon.h + ) +endif() + +if (HAVE_POLL) + set(aria2_SRCS + ${aria2_SRCS} + + PollEventPoll.cc + PollEventPoll.h + ) +endif() + +if (HAVE_PORT_ASSOCIATE) + set(aria2_SRCS + ${aria2_SRCS} + + PortEventPoll.cc + PortEventPoll.h + ) +endif() + +if (HAVE_KQUEUE) + set(aria2_SRCS + ${aria2_SRCS} + + KqueueEventPoll.cc + KqueueEventPoll.h + ) +endif() + +if (HAVE_LIBUV) + set(aria2_SRCS + ${aria2_SRCS} + + LibuvEventPoll.cc + LibuvEventPoll.h + ) +endif() + +if (ENABLE_LIBARIA2) + set(aria2_SRCS + ${aria2_SRCS} + + ApiCallbackDownloadEventListener.cc + ApiCallbackDownloadEventListener.h + aria2api.cc + aria2api.h + KeepRunningCommand.cc + KeepRunningCommand.h + ) + add_library(aria2 SHARED ${aria2_SRCS}) +else() + add_library(aria2 STATIC ${aria2_SRCS}) +endif() + + +target_compile_definitions(aria2 PUBLIC PACKAGE_VERSION="${PROJECT_VERSION}") +target_compile_definitions(aria2 PUBLIC PACKAGE="${PROJECT_NAME}") + +target_include_directories(aria2 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/includes) +target_include_directories(aria2 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) +target_include_directories(aria2 INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/includes) + +if(HAVE_ZLIB) + target_include_directories(aria2 PUBLIC ${ZLIB_INCLUDE_DIRS}) + target_link_libraries(aria2 INTERFACE ZLIB::ZLIB) +endif() + +if(HAVE_LIBUV) + target_include_directories(aria2 PUBLIC ${LIBUV_INCLUDE_DIRS}) + target_link_libraries(aria2 INTERFACE LIBUV::LIBUV) +endif() + +if(HAVE_LIBXML2) + target_include_directories(aria2 PUBLIC ${LIBXML2_INCLUDE_DIR}) + target_link_libraries(aria2 INTERFACE LibXml2::LibXml2) +endif() + +if(HAVE_LIBEXPAT) + target_include_directories(aria2 PUBLIC ${EXPAT_INCLUDE_DIRS}) + target_link_libraries(aria2 INTERFACE EXPAT::EXPAT) +endif() + +if(HAVE_SQLITE3) + target_include_directories(aria2 PUBLIC ${SQLite3_INCLUDE_DIRS}) + target_link_libraries(aria2 INTERFACE SQLite::SQLite3) +endif() + +if(HAVE_APPLETLS) + target_link_libraries(aria2 INTERFACE ${APPLETLS_LD_FLAGS}) +endif() + +if(HAVE_WINTLS) + target_link_libraries(aria2 INTERFACE ${WINTLS_LIBS}) +endif() + +if(HAVE_LIBGNUTLS) + target_include_directories(aria2 PUBLIC ${GNUTLS_INCLUDE_DIR}) + target_compile_definitions(aria2 PUBLIC ${LIBGNUTLS_CFLAGS}) + target_link_libraries(aria2 INTERFACE GnuTLS::GnuTLS) +endif() + +if(HAVE_OPENSSL) + target_include_directories(aria2 PUBLIC ${OPENSSL_INCLUDE_DIR}) + target_link_libraries(aria2 INTERFACE OpenSSL::SSL) + # target_link_libraries(aria2 INTERFACE OpenSSL::Crypto) +endif() + +if(HAVE_LIBNETTLE) + target_include_directories(aria2 PUBLIC ${NETTLE_INCLUDE_DIR}) + target_link_libraries(aria2 INTERFACE Nettle::Nettle) +endif() + +if(HAVE_LIBGMP) + target_include_directories(aria2 PUBLIC ${GMP_INCLUDE_DIR}) + target_link_libraries(aria2 INTERFACE GMP::GMP) +endif() + +if(HAVE_LIBGCRYPT) + target_include_directories(aria2 PUBLIC ${LibGcrypt_INCLUDE_DIR}) + target_link_libraries(aria2 INTERFACE LibGcrypt::LibGcrypt) +endif() + +if(HAVE_LIBSSH2) + target_include_directories(aria2 PUBLIC ${LIBSSH2_INCLUDE_DIR}) + target_link_libraries(aria2 INTERFACE LibSSH2::LibSSH2) +endif() + +if(HAVE_LIBCARES) + target_include_directories(aria2 PUBLIC ${LIBCARES_INCLUDE_DIR}) + target_link_libraries(aria2 INTERFACE Libcares::Libcares) +endif() + +if(ENABLE_WEBSOCKET) + target_include_directories(aria2 PUBLIC ${WSLAY_INCLUDE_DIR}) + target_link_libraries(aria2 INTERFACE wslay) +endif() + +set_target_properties(aria2 PROPERTIES VERSION 0.0.0 SOVERSION 1) +install(TARGETS aria2 ${INSTALL_TARGETS_DEFAULT_ARGS}) + +target_link_libraries(aria2c PUBLIC aria2) + + +########### next target ############### + +# add_library(aria2_static STATIC ${aria2_SRCS}) + + +########### install files ############### + +install(FILES libaria2.pc DESTINATION lib) + + + +#original Makefile.am contents follow: + +#SUBDIRS = includes +#bin_PROGRAMS = aria2c +#aria2c_SOURCES = main.cc +# + + + +#AR = @AR@ +# +#if ENABLE_LIBARIA2 +#pkgconfigdir = $(libdir)/pkgconfig +#pkgconfig_DATA = libaria2.pc +#DISTCLEANFILES = $(pkgconfig_DATA) +# +#lib_LTLIBRARIES = libaria2.la +#SRCS += \ +# ApiCallbackDownloadEventListener.cc ApiCallbackDownloadEventListener.h\ +# aria2api.cc aria2api.h \ +# KeepRunningCommand.cc KeepRunningCommand.h +#else # !ENABLE_LIBARIA2 +#noinst_LTLIBRARIES = libaria2.la +#endif # !ENABLE_LIBARIA2 +# +#libaria2_la_SOURCES = $(SRCS) +# +# +#AM_CPPFLAGS = \ +# -I$(top_srcdir)/lib -I$(top_srcdir)/intl\ +# -I$(srcdir)/includes -I$(builddir)/includes\ +# -DLOCALEDIR=\"@localedir@\" @DEFS@ \ +# @EXTRACPPFLAGS@ \ +# @ZLIB_CFLAGS@ \ +# @LIBUV_CFLAGS@ \ +# @LIBXML2_CFLAGS@ \ +# @EXPAT_CFLAGS@ \ +# @SQLITE3_CFLAGS@ \ +# @LIBGNUTLS_CFLAGS@ \ +# @OPENSSL_CFLAGS@ \ +# @LIBNETTLE_CFLAGS@ \ +# @LIBGMP_CFLAGS@ \ +# @LIBGCRYPT_CFLAGS@ \ +# @LIBSSH2_CFLAGS@ \ +# @LIBCARES_CFLAGS@ \ +# @WSLAY_CFLAGS@ \ +# @TCMALLOC_CFLAGS@ \ +# @JEMALLOC_CFLAGS@ +# +#AM_LDFLAGS = \ +# @EXTRALDFLAGS@ \ +# @APPLETLS_LDFLAGS@ +# +#EXTLDADD = @ALLOCA@ \ +# @EXTRALIBS@ \ +# @ZLIB_LIBS@ \ +# @LIBUV_LIBS@ \ +# @LIBXML2_LIBS@ \ +# @EXPAT_LIBS@ \ +# @SQLITE3_LIBS@ \ +# @WINTLS_LIBS@ \ +# @LIBGNUTLS_LIBS@ \ +# @OPENSSL_LIBS@ \ +# @LIBNETTLE_LIBS@ \ +# @LIBGMP_LIBS@ \ +# @LIBGCRYPT_LIBS@ \ +# @LIBSSH2_LIBS@ \ +# @LIBCARES_LIBS@ \ +# @WSLAY_LIBS@ \ +# @TCMALLOC_LIBS@ \ +# @JEMALLOC_LIBS@ \ +# @LTLIBINTL@ +# +#LDADD = libaria2.la +# +#if ENABLE_LIBARIA2 +#libaria2_la_LIBADD = $(EXTLDADD) +#else # !ENABLE_LIBARIA2 +#LDADD += $(EXTLDADD) +#endif # !ENABLE_LIBARIA2 +# +#AM_CFLAGS = @EXTRACFLAGS@ +# +#AM_CXXFLAGS = @WARNCXXFLAGS@ @CXX1XCXXFLAGS@ @EXTRACXXFLAGS@ +# diff --git a/src/includes/CMakeLists.txt b/src/includes/CMakeLists.txt new file mode 100644 index 00000000..222d5765 --- /dev/null +++ b/src/includes/CMakeLists.txt @@ -0,0 +1,12 @@ + +########### install files ############### + +install(FILES aria2/aria2.h DESTINATION include) + + + +#original Makefile.am contents follow: + +#if ENABLE_LIBARIA2 +#nobase_include_HEADERS = aria2/aria2.h +#endif # ENABLE_LIBARIA2 diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100644 index 00000000..0095e138 --- /dev/null +++ b/test/CMakeLists.txt @@ -0,0 +1,359 @@ + +include_directories(${KDE4_INCLUDES} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ) + + +########### next target ############### + +set($(TESTS)_SRCS ${CMAKE_CURRENT_BINARY_DIR}/dummy.cpp) + +if(KDE4_BUILD_TESTS) + +kde4_add_executable($(TESTS) ${$(TESTS)_SRCS}) + +target_link_libraries($(TESTS) ${KDE4_KDECORE_LIBS}) + +endif(KDE4_BUILD_TESTS) + +########### install files ############### + + + + +#original Makefile.am contents follow: + +#a2_test_outdir = test_outdir +#TESTS = aria2c +#check_PROGRAMS = $(TESTS) +#aria2c_SOURCES = AllTest.cc\ +# TestUtil.cc TestUtil.h\ +# SocketCoreTest.cc\ +# array_funTest.cc\ +# Base64Test.cc\ +# Base32Test.cc\ +# a2functionalTest.cc\ +# FileEntryTest.cc\ +# PieceTest.cc\ +# SegmentTest.cc\ +# GrowSegmentTest.cc\ +# SingleFileAllocationIteratorTest.cc\ +# DefaultBtProgressInfoFileTest.cc\ +# RequestGroupTest.cc\ +# UtilTest1.cc\ +# UtilTest2.cc\ +# UtilSecurityTest.cc\ +# UriListParserTest.cc\ +# HttpHeaderProcessorTest.cc\ +# RequestTest.cc\ +# HttpRequestTest.cc\ +# RequestGroupManTest.cc\ +# AuthConfigFactoryTest.cc\ +# NetrcAuthResolverTest.cc\ +# DefaultAuthResolverTest.cc\ +# OptionHandlerTest.cc\ +# SegmentManTest.cc\ +# BitfieldManTest.cc\ +# NetrcTest.cc\ +# SingletonHolderTest.cc\ +# HttpHeaderTest.cc\ +# HttpResponseTest.cc\ +# FileTest.cc\ +# OptionTest.cc\ +# DefaultDiskWriterTest.cc\ +# FeatureConfigTest.cc\ +# SpeedCalcTest.cc\ +# MultiDiskAdaptorTest.cc\ +# MultiFileAllocationIteratorTest.cc\ +# FixedNumberRandomizer.h\ +# ProtocolDetectorTest.cc\ +# ExceptionTest.cc\ +# FmtTest.cc\ +# DownloadHandlersTest.cc\ +# SignatureTest.cc\ +# ServerStatManTest.cc\ +# FeedbackURISelectorTest.cc\ +# InorderURISelectorTest.cc\ +# ServerStatTest.cc\ +# NsCookieParserTest.cc\ +# DirectDiskAdaptorTest.cc\ +# CookieTest.cc\ +# CookieStorageTest.cc\ +# TimeTest.cc\ +# FtpConnectionTest.cc\ +# OptionParserTest.cc\ +# DNSCacheTest.cc\ +# DownloadHelperTest.cc\ +# SequentialPickerTest.cc\ +# RarestPieceSelectorTest.cc\ +# PieceStatManTest.cc\ +# InorderPieceSelector.h\ +# LongestSequencePieceSelectorTest.cc\ +# a2algoTest.cc\ +# bitfieldTest.cc\ +# DownloadContextTest.cc\ +# SessionSerializerTest.cc\ +# ValueBaseTest.cc\ +# ChunkedDecodingStreamFilterTest.cc\ +# UriTest.cc\ +# UriSplitTest.cc\ +# MockSegment.h\ +# CookieHelperTest.cc\ +# JsonTest.cc\ +# ValueBaseJsonParserTest.cc\ +# RpcResponseTest.cc\ +# RpcMethodTest.cc\ +# HttpServerTest.cc\ +# BufferedFileTest.cc\ +# GeomStreamPieceSelectorTest.cc\ +# SegListTest.cc\ +# ParamedStringTest.cc\ +# RpcHelperTest.cc\ +# AbstractCommandTest.cc\ +# SinkStreamFilterTest.cc\ +# WrDiskCacheTest.cc\ +# WrDiskCacheEntryTest.cc\ +# GroupIdTest.cc\ +# IndexedListTest.cc \ +# SimpleRandomizerTest.cc +# +#if ENABLE_XML_RPC +#aria2c_SOURCES += XmlRpcRequestParserControllerTest.cc +#endif # ENABLE_XML_RPC +# +#if HAVE_SOME_FALLOCATE +#aria2c_SOURCES += FallocFileAllocationIteratorTest.cc +#endif # HAVE_SOME_FALLOCATE +# +#if HAVE_ZLIB +#aria2c_SOURCES += \ +# GZipDecoder.cc GZipDecoder.h\ +# GZipDecoderTest.cc GZipEncoderTest.cc\ +# GZipDecodingStreamFilterTest.cc\ +# GZipFileTest.cc +#endif # HAVE_ZLIB +# +#if HAVE_SQLITE3 +#aria2c_SOURCES += Sqlite3CookieParserTest.cc +#endif # HAVE_SQLITE3 +# +#aria2c_SOURCES += MessageDigestHelperTest.cc\ +# IteratableChunkChecksumValidatorTest.cc\ +# IteratableChecksumValidatorTest.cc\ +# MessageDigestTest.cc +# +#if ENABLE_BITTORRENT +#aria2c_SOURCES += BtAllowedFastMessageTest.cc\ +# BtBitfieldMessageTest.cc\ +# BtCancelMessageTest.cc\ +# BtChokeMessageTest.cc\ +# BtHandshakeMessageTest.cc\ +# BtHaveAllMessageTest.cc\ +# BtHaveMessageTest.cc\ +# BtHaveNoneMessageTest.cc\ +# BtInterestedMessageTest.cc\ +# BtKeepAliveMessageTest.cc\ +# BtNotInterestedMessageTest.cc\ +# BtPieceMessageTest.cc\ +# BtPortMessageTest.cc\ +# BtRejectMessageTest.cc\ +# BtRequestMessageTest.cc\ +# BtSuggestPieceMessageTest.cc\ +# BtUnchokeMessageTest.cc\ +# DefaultPieceStorageTest.cc\ +# DefaultBtAnnounceTest.cc\ +# DefaultBtMessageDispatcherTest.cc\ +# DefaultBtRequestFactoryTest.cc\ +# MockBtMessage.h\ +# MockBtMessageDispatcher.h\ +# MockBtMessageFactory.h\ +# AnnounceListTest.cc\ +# DefaultPeerStorageTest.cc\ +# MockPeerStorage.h\ +# ByteArrayDiskWriterTest.cc\ +# PeerTest.cc\ +# PeerSessionResourceTest.cc\ +# ShareRatioSeedCriteriaTest.cc\ +# BtRegistryTest.cc\ +# BtDependencyTest.cc\ +# BtPostDownloadHandlerTest.cc\ +# TimeSeedCriteriaTest.cc\ +# BtExtendedMessageTest.cc\ +# HandshakeExtensionMessageTest.cc\ +# UTPexExtensionMessageTest.cc\ +# UTMetadataRequestExtensionMessageTest.cc\ +# UTMetadataDataExtensionMessageTest.cc\ +# UTMetadataRejectExtensionMessageTest.cc\ +# UTMetadataRequestTrackerTest.cc\ +# UTMetadataRequestFactoryTest.cc\ +# UTMetadataPostDownloadHandlerTest.cc\ +# MagnetTest.cc\ +# DefaultBtMessageFactoryTest.cc\ +# DefaultExtensionMessageFactoryTest.cc\ +# DHTNodeTest.cc\ +# DHTBucketTest.cc\ +# DHTRoutingTableTest.cc\ +# DHTMessageTrackerEntryTest.cc\ +# DHTMessageTrackerTest.cc\ +# DHTConnectionImplTest.cc\ +# DHTPingMessageTest.cc\ +# DHTPingReplyMessageTest.cc\ +# DHTFindNodeMessageTest.cc\ +# DHTFindNodeReplyMessageTest.cc\ +# DHTGetPeersMessageTest.cc\ +# DHTGetPeersReplyMessageTest.cc\ +# DHTAnnouncePeerMessageTest.cc\ +# DHTAnnouncePeerReplyMessageTest.cc\ +# DHTUnknownMessageTest.cc\ +# DHTMessageFactoryImplTest.cc\ +# DHTBucketTreeTest.cc\ +# DHTPeerAnnounceEntryTest.cc\ +# DHTPeerAnnounceStorageTest.cc\ +# DHTTokenTrackerTest.cc\ +# XORCloserTest.cc\ +# DHTIDCloserTest.cc\ +# DHTRoutingTableSerializerTest.cc\ +# DHTRoutingTableDeserializerTest.cc\ +# DHTTaskExecutorTest.cc\ +# DHKeyExchangeTest.cc\ +# ARC4Test.cc\ +# MSEHandshakeTest.cc\ +# MockBtAnnounce.h\ +# MockBtProgressInfoFile.h\ +# MockBtRequestFactory.h\ +# MockDHTMessage.h\ +# MockDHTMessageCallback.h\ +# MockDHTMessageDispatcher.h\ +# MockDHTMessageFactory.h\ +# MockDHTTask.h\ +# MockDHTTaskFactory.h\ +# MockDHTTaskQueue.h\ +# MockExtensionMessage.h\ +# MockExtensionMessageFactory.h\ +# MockPieceStorage.h\ +# BittorrentHelperTest.cc\ +# PriorityPieceSelectorTest.cc\ +# MockPieceSelector.h\ +# extension_message_test_helper.h\ +# LpdMessageDispatcherTest.cc\ +# LpdMessageReceiverTest.cc\ +# Bencode2Test.cc\ +# PeerConnectionTest.cc\ +# ValueBaseBencodeParserTest.cc\ +# ExtensionMessageRegistryTest.cc\ +# UDPTrackerClientTest.cc +#endif # ENABLE_BITTORRENT +# +#if ENABLE_METALINK +#aria2c_SOURCES += MetalinkerTest.cc\ +# MetalinkEntryTest.cc\ +# Metalink2RequestGroupTest.cc\ +# MetalinkPostDownloadHandlerTest.cc\ +# MetalinkHelperTest.cc\ +# MetalinkParserControllerTest.cc\ +# MetalinkProcessorTest.cc +#endif # ENABLE_METALINK +# +#if ENABLE_ASYNC_DNS +#aria2c_SOURCES += AsyncNameResolverTest.cc +#endif # ENABLE_ASYNC_DNS +# +#if !HAVE_TIMEGM +#aria2c_SOURCES += TimegmTest.cc +#endif # !HAVE_TIMEGM +# +#if ENABLE_LIBARIA2 +#aria2c_SOURCES += Aria2ApiTest.cc +#endif # ENABLE_LIBARIA2 +# +#aria2c_LDADD = \ +# ../src/libaria2.la \ +# @LIBINTL@ \ +# @EXTRALIBS@ \ +# @ZLIB_LIBS@ \ +# @LIBUV_LIBS@ \ +# @LIBXML2_LIBS@ \ +# @EXPAT_LIBS@ \ +# @SQLITE3_LIBS@ \ +# @WINTLS_LIBS@ \ +# @LIBGNUTLS_LIBS@ \ +# @OPENSSL_LIBS@ \ +# @LIBNETTLE_LIBS@ \ +# @LIBGMP_LIBS@ \ +# @LIBGCRYPT_LIBS@ \ +# @LIBSSH2_LIBS@ \ +# @LIBCARES_LIBS@ \ +# @WSLAY_LIBS@ \ +# @CPPUNIT_LIBS@ \ +# @TCMALLOC_LIBS@ \ +# @JEMALLOC_LIBS@ +# +#AM_CPPFLAGS = \ +# -I$(top_srcdir)/src \ +# -I$(top_srcdir)/src/includes -I$(top_builddir)/src/includes \ +# -I$(top_srcdir)/lib -I$(top_srcdir)/intl \ +# -DLOCALEDIR=\"$(localedir)\" \ +# -DA2_TEST_DIR=\"$(top_srcdir)/test\" \ +# -DA2_TEST_OUT_DIR=\"${a2_test_outdir}\" \ +# @CPPUNIT_CFLAGS@ \ +# @DEFS@ \ +# @EXTRACPPFLAGS@ \ +# @ZLIB_CFLAGS@ \ +# @LIBUV_CFLAGS@ \ +# @LIBXML2_CFLAGS@ \ +# @EXPAT_CFLAGS@ \ +# @SQLITE3_CFLAGS@ \ +# @LIBGNUTLS_CFLAGS@ \ +# @OPENSSL_CFLAGS@ \ +# @LIBNETTLE_CFLAGS@ \ +# @LIBGMP_CFLAGS@ \ +# @LIBGCRYPT_CFLAGS@ \ +# @LIBSSH2_CFLAGS@ \ +# @LIBCARES_CFLAGS@ \ +# @WSLAY_CFLAGS@ \ +# @TCMALLOC_CFLAGS@ \ +# @JEMALLOC_CFLAGS@ +# +#AM_LDFLAGS = \ +# @EXTRALDFLAGS@ \ +# @APPLETLS_LDFLAGS@ +# +#AM_CFLAGS = @EXTRACFLAGS@ +# +#AM_CXXFLAGS = @WARNCXXFLAGS@ @CXX1XCXXFLAGS@ @EXTRACXXFLAGS@ +# +#EXTRA_DIST = 4096chunk.txt\ +# chunkChecksumTestFile250.txt\ +# cookies.sqlite\ +# chromium_cookies.sqlite\ +# emptyfile\ +# file1r.txt\ +# file2r.txt\ +# file3r.txt\ +# filelist1.txt\ +# filelist2.txt\ +# gzip_decode_test.gz\ +# load-nonBt.aria2\ +# load-nonBt-v0001.aria2\ +# load.aria2\ +# load-v0001.aria2\ +# malformed.netrc\ +# nscookietest.txt\ +# sample.netrc\ +# single.torrent\ +# test.torrent\ +# test.xml\ +# url-list-multiFile.torrent\ +# url-list-singleFile.torrent\ +# url-list-singleFileEndsWithSlash.torrent\ +# input_uris.txt\ +# 2files.metalink\ +# utf8.torrent\ +# metalink4.xml\ +# metalink3-dirtraversal.xml\ +# metalink4-groupbymetaurl.xml\ +# serialize_session.meta4\ +# metalink4-dosdirtraversal.xml\ +# base_uri.xml\ +# local-metaurl.meta4 +# +#clean-local: +# -rm -rf ${a2_test_outdir} From fb7c8d2ee4e5f9940bf6f8daea9fdf41e74dee0e Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Fri, 24 Mar 2023 13:57:10 -0700 Subject: [PATCH 02/22] fix typo that droped 3/4 of the srouce generate config.h Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com> --- CMakeLists.txt | 472 ++++++++------- cmake/GenerateConfigH.cmake | 22 + deps/wslay/CMakeLists.txt | 21 + deps/wslay/lib/CMakeLists.txt | 3 +- src/CMakeLists.txt | 1008 ++++++++++++++++----------------- 5 files changed, 822 insertions(+), 704 deletions(-) create mode 100644 cmake/GenerateConfigH.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 589513c8..215d3e1f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,27 +1,43 @@ cmake_minimum_required(VERSION 3.15) -project(aria2 LANGUAGES CXX C VERSION 1.36.0) +project( + aria2 + VERSION 1.36.0 + HOMEPAGE_URL https://aria2.github.io/ + LANGUAGES CXX C +) # include(ConfigureChecks.cmake) - set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/") -######## Set compiler flags ######## +# ####### Set compiler flags ######## set(CMAKE_CXX_STANDARD_REQUIRED true) set(CMAKE_C_STANDARD_REQUIRED true) set(CMAKE_CXX_STANDARD 11) set(CMAKE_C_STANDARD 11) -include(GenerateExportHeader) -if (WIN32) +#include(GenerateExportHeader) +include(GenerateConfigH) +config_h_add_compile_definitions(PACKAGE="${PROJECT_NAME}") +config_h_add_compile_definitions(PACKAGE_NAME="${PROJECT_NAME}") +config_h_add_compile_definitions(PACKAGE_STRING="${PROJECT_NAME} ${PROJECT_VERSION}") +config_h_add_compile_definitions(PACKAGE_TARNAME="${PROJECT_NAME}") +config_h_add_compile_definitions(PACKAGE_URL="${PROJECT_HOMEPAGE_URL}") +config_h_add_compile_definitions(PACKAGE_BUGREPORT="https://github.com/aria2/aria2/issues") +config_h_add_compile_definitions(PACKAGE_VERSION="${PROJECT_VERSION}") +config_h_add_compile_definitions(VERSION="${PROJECT_VERSION}") +config_h_add_compile_definitions(HOST="${CMAKE_HOST_SYSTEM_PROCESSOR}") +config_h_add_compile_definitions(BUILD="${CMAKE_HOST_SYSTEM_PROCESSOR}") +config_h_add_compile_definitions(TARGET="${CMAKE_SYSTEM_PROCESSOR}") + +if(WIN32) set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -D_POSIX_C_SOURCE=1) set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} -Wl,--dynamicbase -Wl,--nxcompat) set(CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS} -Wl,--dynamicbase -Wl,--nxcompat) set(CMAKE_STATIC_LINKER_FLAGS_LINKER_FLAGS ${CMAKE_STATIC_LINKER_FLAGS} -Wl,--dynamicbase -Wl,--nxcompat) - - set(EXTRALIBS -lws2_32 -lwsock32 -lgdi32 -liphlpapi -lpsapi ${EXTRALIBS}) + set(EXTRALIBS -lws2_32 -lwsock32 -lgdi32 -liphlpapi -lpsapi ${EXTRALIBS}) endif() option(WITH_LIBUV "Build with libuv" off) @@ -53,19 +69,19 @@ set(CA_BUNDLE "" CACHE FILEPATH "Define to choose default CA bundle.[Use FILE as set(DISK_CACHE "" CACHE STRING "Define to choose default disk-cache size") set(BASHCOMPLETIONDIR "" CACHE STRING "Directory to install bash_completion file") -if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - # using Clang -elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") +if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") +# using Clang +elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") # using GCC set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -pipe) - -elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel") - # using Intel C++ -elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + +elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") +# using Intel C++ +elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") # using Visual Studio C++ endif() -if (CMAKE_C_COMPILER_ID STREQUAL "GNU") +if(CMAKE_C_COMPILER_ID STREQUAL "GNU") set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} -pipe) endif() @@ -76,7 +92,7 @@ option(ARIA2_STATIC "Set 'on' to build a statically linked aria2" off) # define it as override. Use CXX11_OVERRIDE instead of override. message(STATUS "Checking whether the C++ compiler supports `override` keyword") set(_tmp_src -"\ + "\ struct Base { virtual void f() = 0; }; @@ -88,20 +104,21 @@ int main(int argc, char* argv[]) { Derived x; } ") -try_compile(CXX11_OVERRIDE +try_compile(CXX11_OVERRIDE SOURCE_FROM_VAR cx11_override.cc _tmp_src ) unset(_tmp_src) + if(CXX11_OVERRIDE) - add_compile_definitions(CXX11_OVERRIDE=override) + config_h_add_compile_definitions(CXX11_OVERRIDE=override) message(STATUS "Checking whether the C++ compiler supports `override` keyword - yes") else() - add_compile_definitions(CXX11_OVERRIDE=) + config_h_add_compile_definitions(CXX11_OVERRIDE=) message(STATUS "Checking whether the C++ compiler supports `override` keyword - no") endif() -if (ARIA2_STATIC) - if (WIN32) +if(ARIA2_STATIC) + if(WIN32) # Define _USE_32BIT_TIME_T because 32bit library of MinGW-w64 # does not implement many 64bit version functions. set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -D_USE_32BIT_TIME_T) @@ -109,12 +126,12 @@ if (ARIA2_STATIC) endif() option(ENABLE_GNUTIL_SYSTEM_CRYPTO_POLICY "Enable gnutls system wide crypto policy" off) -if(ENABLE_GNUTIL_SYSTEM_CRYPTO_POLICY) + +if(ENABLE_GNUTIL_SYSTEM_CRYPTO_POLICY) set(USE_GNUTLS_SYSTEM_CRYPTO_POLICY yes CACHE BOOL "Define to 1 if using gnutls system wide crypto policy .") endif() -##### Check for Libraries ##### - +# #### Check for Libraries ##### include(CheckLibraryExists) include(CheckSymbolExists) include(CheckCXXSymbolExists) @@ -123,6 +140,7 @@ include(CheckTypeSize) include(CheckFunctionExists) find_package(CPPUNIT) + if(CPPUNIT_FOUND) set(HAVE_CPPUNIT yes CACHE BOOL "Define if you have CPPUNIT" FORCE) else() @@ -130,25 +148,28 @@ else() endif() find_package(ZLIB 1.2.3) + if(ZLIB_FOUND) set(HAVE_ZLIB yes CACHE BOOL "Define if you have zlib" FORCE) set(ZLIB_CFLAGS "") set(ZLIB_LIBS ${ZLIB_LIBRARIES}) - add_compile_definitions(HAVE_ZLIB=1) - + config_h_add_compile_definitions(HAVE_ZLIB=1) + set(save_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) set(save_CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES}) set(CMAKE_REQUIRED_LIBRARIES ${ZLIB_LIBRARIES}) set(CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIRS}) - + check_cxx_symbol_exists(gzbuffer zlib.h HAVE_GZBUFFER) + if(HAVE_GZBUFFER) - add_compile_definitions(HAVE_GZBUFFER) + config_h_add_compile_definitions(HAVE_GZBUFFER) endif() - + check_cxx_symbol_exists(gzsetparams zlib.h HAVE_GZSETPARAMS) + if(HAVE_GZSETPARAMS) - add_compile_definitions(HAVE_GZSETPARAMS) + config_h_add_compile_definitions(HAVE_GZSETPARAMS) endif() set(CMAKE_REQUIRED_LIBRARIES ${save_CMAKE_REQUIRED_LIBRARIES}) @@ -160,59 +181,64 @@ else() endif() find_package(LibUV 1.13) + if(LIBUV_FOUND) set(HAVE_LIBUV yes CACHE BOOL "Define if you have libuv" FORCE) set(LIBUV_CFLAGS "") set(LIBUV_LIBS ${LIBUV_LIBRARIES}) - add_compile_definitions(HAVE_LIBUV=1) + config_h_add_compile_definitions(HAVE_LIBUV=1) else() set(HAVE_LIBUV no CACHE BOOL "Define if you have libuv" FORCE) endif() find_package(LibXml2) + if(LibXml2_FOUND) set(HAVE_LIBXML2 yes CACHE BOOL "Define if you have libxml2" FORCE) set(LIBXML2_CFLAGS "") set(LIBXML2_LIBS ${LIBXML2_LIBRARIES}) - add_compile_definitions(HAVE_LIBXML2=1) + config_h_add_compile_definitions(HAVE_LIBXML2=1) else() - set(HAVE_LIBXML2 no CACHE BOOL "Define if you have libxml2" FORCE) + set(HAVE_LIBXML2 no CACHE BOOL "Define if you have libxml2" FORCE) endif() find_package(EXPAT) -if(EXPAT_FOUND) + +if(EXPAT_FOUND AND NOT HAVE_LIBXML2) set(HAVE_LIBEXPAT yes CACHE BOOL "Define if you have libexpat" FORCE) set(LIBEXPAT_CFLAGS "") set(LIBEXPAT_LIBS ${EXPAT_LIBRARIES}) - add_compile_definitions(HAVE_LIBEXPAT=1) + config_h_add_compile_definitions(HAVE_LIBEXPAT=1) else() - set(HAVE_LIBEXPAT no CACHE BOOL "Define if you have libexpat" FORCE) + set(HAVE_LIBEXPAT no CACHE BOOL "Define if you have libexpat" FORCE) endif() find_package(SQLite3) + if(SQLite3_FOUND) set(HAVE_SQLITE3 yes CACHE BOOL "Define if you have sqlite3" FORCE) set(SQLITE3_CFLAGS "") set(SQLITE3_LIBS ${SQLite3_LIBRARIES}) - add_compile_definitions(HAVE_SQLITE3=1) - + config_h_add_compile_definitions(HAVE_SQLITE3=1) + set(save_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) set(save_CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES}) set(CMAKE_REQUIRED_LIBRARIES ${SQLite3_LIBRARIES}) set(CMAKE_REQUIRED_INCLUDES ${SQLite3_INCLUDE_DIRS}) - + check_cxx_symbol_exists(sqlite3_open_v2 sqlite3.h HAVE_SQLITE3_OPEN_V2) + if(HAVE_SQLITE3_OPEN_V2) - add_compile_definitions(HAVE_SQLITE3_OPEN_V2) + config_h_add_compile_definitions(HAVE_SQLITE3_OPEN_V2) endif() - + set(CMAKE_REQUIRED_LIBRARIES ${save_CMAKE_REQUIRED_LIBRARIES}) set(CMAKE_REQUIRED_INCLUDES ${save_CMAKE_REQUIRED_INCLUDES}) else() - set(HAVE_SQLITE3 no CACHE BOOL "Define if you have sqlite3" FORCE) + set(HAVE_SQLITE3 no CACHE BOOL "Define if you have sqlite3" FORCE) endif() -if (APPLE) +if(APPLE) set(HAVE_OSX yes CACHE BOOL "On Mac OS X" FORCE) else() set(HAVE_OSX no CACHE BOOL "On Mac OS X" FORCE) @@ -231,18 +257,20 @@ if(WIN32) share.h ) - foreach (header ${_check_headers}) + foreach(header ${_check_headers}) string(TOUPPER ${header} header_var) string(REPLACE "." "_" header_var ${header_var}) - string(REPLACE "/" "_" header_var ${header_var}) + string(REPLACE "/" "_" header_var ${header_var}) set(header_var "HAVE_${header_var}") set(${header_var}) check_include_file(${header} ${header_var}) - if (${header_var}) - add_compile_definitions(${header_var}) + + if(${header_var}) + config_h_add_compile_definitions(${header_var}) else() endif() endforeach() + unset(_check_headers) else() @@ -250,10 +278,11 @@ else() endif() set(HAVE_APPLETLS no CACHE BOOL "Define if you have Apple TLS" FORCE) + if(WITH_APPLETLS) if(HAVE_OSX) set(HAVE_APPLETLS yes CACHE BOOL "Define if you have Apple TLS" FORCE) - add_compile_definitions(HAVE_APPLETLS=1) + config_h_add_compile_definitions(HAVE_APPLETLS=1) set(APPLETLS_LD_FLAGS "-framework CoreFoundation" "-framework Security") set(HAVE_SSL yes CACHE BOOL "Have SSL support" FORCE) set(HAVE_NATIVETLS yes CACHE BOOL "Have Native TLS" FORCE) @@ -262,6 +291,7 @@ if(WITH_APPLETLS) endif() set(HAVE_WINTLS no CACHE BOOL "Define if you have Windows TLS support" FORCE) + if(WITH_WINTLS) if(WIN32) find_library(HAVE_WINTLS_LIBS crypt32) @@ -272,8 +302,8 @@ if(WITH_WINTLS) if(HAVE_WINTLS_LIBS AND HAVE_WINTLS_HEADERS) set(HAVE_WINTLS yes CACHE BOOL "Define if you have Windows TLS support" FORCE) - add_compile_definitions(HAVE_WINTLS=1) - add_compile_definitions(SECURITY_WIN32=1) # Use security.h in WIN32 mode + config_h_add_compile_definitions(HAVE_WINTLS=1) + config_h_add_compile_definitions(SECURITY_WIN32=1) # Use security.h in WIN32 mode set(WINTLS_LIBS "-lcrypt32 -lsecur32 -ladvapi32") set(HAVE_SSL yes CACHE BOOL "Have SSL support" FORCE) set(HAVE_NATIVETLS yes CACHE BOOL "Have Native TLS" FORCE) @@ -283,15 +313,17 @@ if(WITH_WINTLS) endif() set(HAVE_LIBGNUTLS no CACHE BOOL "Define if you have libguntls" FORCE) + if(WITH_GNUTLS) find_package(GnuTLS 2.2.0) + if(GNUTLS_FOUND AND NOT HAVE_SSL) set(HAVE_LIBGNUTLS yes CACHE BOOL "Define if you have libguntls" FORCE) set(LIBGNUTLS_CFLAGS "${GNUTLS_DEFINITIONS}") set(LIBGNUTLS_LIBS ${GNUTLS_LIBRARIES}) - add_compile_definitions(HAVE_LIBGNUTLS=1) + config_h_add_compile_definitions(HAVE_LIBGNUTLS=1) set(HAVE_SSL yes CACHE BOOL "Have SSL support" FORCE) - + set(save_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) set(save_CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES}) set(save_CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}) @@ -300,8 +332,9 @@ if(WITH_GNUTLS) set(CMAKE_REQUIRED_DEFINITIONS ${GNUTLS_DEFINITIONS}) check_cxx_symbol_exists(gnutls_certificate_set_x509_system_trust gnutls/gnutls.h HAVE_GNUTLS_CERTIFICATE_SET_X509_SYSTEM_TRUST) + if(HAVE_GNUTLS_CERTIFICATE_SET_X509_SYSTEM_TRUST) - add_compile_definitions(HAVE_GNUTLS_CERTIFICATE_SET_X509_SYSTEM_TRUST) + config_h_add_compile_definitions(HAVE_GNUTLS_CERTIFICATE_SET_X509_SYSTEM_TRUST) endif() set(CMAKE_REQUIRED_LIBRARIES ${save_CMAKE_REQUIRED_LIBRARIES}) @@ -309,116 +342,131 @@ if(WITH_GNUTLS) set(CMAKE_REQUIRED_DEFINITIONS ${save_CMAKE_REQUIRED_DEFINITIONS}) endif() endif() - + set(HAVE_OPENSSL no CACHE BOOL "Define is you have openssl" FORCE) + if(WITH_OPENSSL) find_package(OpenSSL) + if(OPENSSL_FOUND AND NOT HAVE_SSL) set(HAVE_OPENSSL yes CACHE BOOL "Define is you have openssl" FORCE) - add_compile_definitions(HAVE_OPENSSL=1) - + config_h_add_compile_definitions(HAVE_OPENSSL=1) + set(save_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) set(save_CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES}) set(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_LIBRARIES}) set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR}) - + check_cxx_symbol_exists(EVP_DigestInit_ex evp.h HAVE_EVP_DIGESTINIT_EX) + if(HAVE_EVP_DIGESTINIT_EX) set(HAVE_OLD_OPENSSL yes CACHE BOOL "Define if you have old openssl" FORCE) - add_compile_definitions(HAVE_OLD_OPENSSL=1) + config_h_add_compile_definitions(HAVE_OLD_OPENSSL=1) endif() check_cxx_symbol_exists(EVP_sha224 evp.h HAVE_EVP_SHA224) + if(HAVE_EVP_SHA224) - add_compile_definitions(HAVE_EVP_SHA224) + config_h_add_compile_definitions(HAVE_EVP_SHA224) endif() check_cxx_symbol_exists(EVP_sha256 evp.h HAVE_EVP_SHA256) + if(HAVE_EVP_SHA256) - add_compile_definitions(HAVE_EVP_SHA256) + config_h_add_compile_definitions(HAVE_EVP_SHA256) endif() check_cxx_symbol_exists(EVP_sha384 evp.h HAVE_EVP_SHA384) + if(HAVE_EVP_SHA384) - add_compile_definitions(HAVE_EVP_SHA384) + config_h_add_compile_definitions(HAVE_EVP_SHA384) endif() check_cxx_symbol_exists(EVP_sha512 evp.h HAVE_EVP_SHA512) + if(HAVE_EVP_SHA512) - add_compile_definitions(HAVE_EVP_SHA512) + config_h_add_compile_definitions(HAVE_EVP_SHA512) endif() - + set(CMAKE_REQUIRED_LIBRARIES ${save_CMAKE_REQUIRED_LIBRARIES}) set(CMAKE_REQUIRED_INCLUDES ${save_CMAKE_REQUIRED_INCLUDES}) - endif() endif() set(HAVE_LIBNETTLE no CACHE BOOL "Define if you have libnettle" FORCE) set(HAVE_LIBGMP no CACHE BOOL "Define if you have GNU Multiple Precision Arithmetis Library (GMP)" FORCE) set(HAVE_LIBGCRYPT no CACHE BOOL "Define is you have LibGcrypt" FORCE) + if(NOT HAVE_OPENSSL) if(WITH_LIBNETTLE) find_package(Nettle) + if(NETTLE_FOUND AND NOT HAVE_NATIVETLS) set(HAVE_LIBNETTLE yes CACHE BOOL "Define if you have libnettle" FORCE) set(LIBNETTLE_CFLAGS "") set(LIBNETTLE_LIBS ${NETTLE_LIBRARIES}) - add_compile_definitions(HAVE_LIBNETTLE=1) + config_h_add_compile_definitions(HAVE_LIBNETTLE=1) endif() endif() - + if(WITH_LIBGMP) find_package(GMP) - if(GMP_FOUND AND (HAVE_LIBNETTLE OR HAVE_NATIVETLS) AND ENABLE_BITTORRENT) - set(LIBGMP_LIBS ${GMP_LIBRARIES} ) - set(LIBGMP_CFLAGS "" ) + + if(GMP_FOUND AND(HAVE_LIBNETTLE OR HAVE_NATIVETLS) AND ENABLE_BITTORRENT) + set(LIBGMP_LIBS ${GMP_LIBRARIES}) + set(LIBGMP_CFLAGS "") set(HAVE_LIBGMP yes CACHE BOOL "Define if you have GNU Multiple Precision Arithmetis Library (GMP)" FORCE) - add_compile_definitions(HAVE_LIBGMP=1) + config_h_add_compile_definitions(HAVE_LIBGMP=1) set(save_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) set(save_CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES}) set(CMAKE_REQUIRED_LIBRARIES ${GMP_LIBRARIES}) set(CMAKE_REQUIRED_INCLUDES ${GMP_INCLUDE_DIR}) check_cxx_symbol_exists(__gmpz_powm_sec gmp.h HAVE_MPZ_POWM_SEC) + if(HAVE_MPZ_POWM_SEC) - add_compile_definitions(HAVE_GMP_SEC=1) + config_h_add_compile_definitions(HAVE_GMP_SEC=1) endif() + set(CMAKE_REQUIRED_LIBRARIES ${save_CMAKE_REQUIRED_LIBRARIES}) set(CMAKE_REQUIRED_INCLUDES ${save_CMAKE_REQUIRED_INCLUDES}) endif() endif() - + if(WITH_LIBGCRYPT) find_package(LibGcrypt) + if(LibGcrypt_FOUND AND NOT HAVE_NATIVETLS AND NOT HAVE_LIBNETTLE) set(LIBGCRYPT_CFLAGS "") set(LIBGCRYPT_LIBS ${LibGcrypt_LIBRARIES}) set(HAVE_LIBGCRYPT yes CACHE BOOL "Define is you have LibGcrypt" FORCE) - add_compile_definitions(HAVE_LIBGCRYPT=1) + config_h_add_compile_definitions(HAVE_LIBGCRYPT=1) endif() endif() - endif() set(HAVE_LIBSSH2 no CACHE BOOL "Define if you have LibSSH2" FORCE) + if(WITH_LIBSSH2) find_package(LibSSH2) + if(LIBSSH2_FOUND) set(HAVE_LIBSSH2 yes CACHE BOOL "Define if you have LibSSH2" FORCE) set(LIBSSH2_CFLAGS "") set(LIBSSH2_LIBS ${LIBSSH2_LIBRARIES}) - add_compile_definitions(HAVE_LIBSSH2=1) + config_h_add_compile_definitions(HAVE_LIBSSH2=1) endif() endif() set(HAVE_LIBCARES no CACHE BOOL "Define if you hae libcares" FORCE) + if(WITH_LIBCARES) find_package(Libcares) + if(LIBCARES_FOUND) set(HAVE_LIBCARES yes CACHE BOOL "Define if you hae libcares" FORCE) set(LIBCARES_CFLAGS "") set(LIBCARES_LIBS ${LIBCARES_LIBRARIES}) - add_compile_definitions(HAVE_LIBCARES=1) + config_h_add_compile_definitions(HAVE_LIBCARES=1) set(save_CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES}) set(save_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) @@ -429,34 +477,38 @@ if(WITH_LIBCARES) set(CMAKE_EXTRA_INCLUDE_FILES ares.h) check_type_size(ares_addr_node ARES_ADDR_NODE LANGUAGE CXX) check_type_size(ares_set_servers ARES_SET_SERVERS LANGUAGE C) + if(ARES_ADDR_NODE) - add_compile_definitions(HAVE_ARES_ADDR_NODE) + config_h_add_compile_definitions(HAVE_ARES_ADDR_NODE) endif() + if(ARES_SET_SERVERS) - add_compile_definitions(HAVE_ARES_SET_SERVERS) + config_h_add_compile_definitions(HAVE_ARES_SET_SERVERS) endif() + set(CMAKE_REQUIRED_LIBRARIES ${save_CMAKE_REQUIRED_LIBRARIES}) set(CMAKE_REQUIRED_INCLUDES ${save_CMAKE_REQUIRED_INCLUDES}) set(CMAKE_EXTRA_INCLUDE_FILES ${save_CMAKE_EXTRA_INCLUDE_FILES}) endif() endif() - + set(USE_MD "" CACHE STRING "What message digest implementation to use") + if(HAVE_APPLETLS) set(USE_MD "apple" CACHE STRING "What message digest implementation to use" FORCE) - add_compile_definitions(USE_APPLE_MD=1) + config_h_add_compile_definitions(USE_APPLE_MD=1) elseif(HAVE_LIBNETTLE) set(USE_MD "libnettle" CACHE STRING "What message digest implementation to use" FORCE) - add_compile_definitions(USE_LIBNETTLE_MD=1) + config_h_add_compile_definitions(USE_LIBNETTLE_MD=1) elseif(HAVE_LIBGCRYPT) set(USE_MD "libgcrypt" CACHE STRING "What message digest implementation to use" FORCE) - add_compile_definitions(USE_LIBGCRYPT_MD=1) + config_h_add_compile_definitions(USE_LIBGCRYPT_MD=1) elseif(HAVE_OPENSSL) set(USE_MD "openssl" CACHE STRING "What message digest implementation to use" FORCE) - add_compile_definitions(USE_OPEMSSL_MD=1) + config_h_add_compile_definitions(USE_OPEMSSL_MD=1) else() set(USE_MD "internal" CACHE STRING "What message digest implementation to use" FORCE) - add_compile_definitions(USE_INTERNAL_MD=1) + config_h_add_compile_definitions(USE_INTERNAL_MD=1) endif() if(HAVE_SSL) @@ -464,8 +516,9 @@ if(HAVE_SSL) else() set(ENABLE_SSL no CACHE BOOL "If SSL support is enabled" FORCE) endif() + if(ENABLE_SSL) - add_compile_definitions(ENABLE_SSL=1) + config_h_add_compile_definitions(ENABLE_SSL=1) endif() if(HAVE_LIBGMP OR HAVE_LIBGCRYPT OR HAVE_OPENSSL) @@ -473,8 +526,9 @@ if(HAVE_LIBGMP OR HAVE_LIBGCRYPT OR HAVE_OPENSSL) else() set(USE_INTERNAL_BIGNUM yes) endif() + if(USE_INTERNAL_BIGNUM) - add_compile_definitions(USE_INTERNAL_BIGNUM=1) + config_h_add_compile_definitions(USE_INTERNAL_BIGNUM=1) endif() if(HAVE_LIBNETTLE OR HAVE_LIBGCRYPT OR HAVE_OPENSSL) @@ -482,28 +536,30 @@ if(HAVE_LIBNETTLE OR HAVE_LIBGCRYPT OR HAVE_OPENSSL) else() set(USE_INTERNAL_ARC4 yes) endif() + if(USE_INTERNAL_ARC4) - add_compile_definitions(USE_INTERNAL_ARC4) + config_h_add_compile_definitions(USE_INTERNAL_ARC4) endif() if(ENABLE_BITTORRENT) - add_compile_definitions(ENABLE_BITTORRENT=1) + config_h_add_compile_definitions(ENABLE_BITTORRENT=1) endif() if((HAVE_LIBXML2 OR HAVE_LIBEXPAT) AND ENABLE_METALINK) - add_compile_definitions(ENABLE_METALINK=1) + config_h_add_compile_definitions(ENABLE_METALINK=1) endif() if(HAVE_LIBXML2 OR HAVE_LIBEXPAT) set(HAVE_SOME_XMLLIB yes CACHE BOOL "either libxml2 or libxpax present" FORCE) - add_compile_definitions(HAVE_SOME_XMLLIB=1) + config_h_add_compile_definitions(HAVE_SOME_XMLLIB=1) set(ENABLE_XML_RPC yes CACHE BOOL "XML RPC Enabled") else() set(HAVE_SOME_XMLLIB no CACHE BOOL "either libxml2 or libxpax present" FORCE) set(ENABLE_XML_RPC no CACHE BOOL "XML RPC Enabled" FORCE) endif() + if(ENABLE_XML_RPC) - add_compile_definitions(ENABLE_XML_RPC=1) + config_h_add_compile_definitions(ENABLE_XML_RPC=1) endif() if(HAVE_LIBCARES) @@ -511,13 +567,15 @@ if(HAVE_LIBCARES) else() set(ENABLE_ASYNC_DNS no CACHE BOOL "Async DNS Enabled" FORCE) endif() + if(ENABLE_ASYNC_DNS) - add_compile_definitions(ENABLE_ASYNC_DNS=1) + config_h_add_compile_definitions(ENABLE_ASYNC_DNS=1) endif() check_cxx_symbol_exists(alloca "alloca.h;stdlib.h;cstdlib;malloc.h" HAVE_ALLOCA_H) + if(HAVE_ALLOCA_H) - add_compile_definitions(HAVE_ALLOCA_H) + config_h_add_compile_definitions(HAVE_ALLOCA_H) endif() set(_check_headers @@ -560,23 +618,26 @@ set(_check_headers pwd.h ) -foreach (header ${_check_headers}) +foreach(header ${_check_headers}) string(TOUPPER ${header} header_var) string(REPLACE "." "_" header_var ${header_var}) - string(REPLACE "/" "_" header_var ${header_var}) + string(REPLACE "/" "_" header_var ${header_var}) set(header_var "HAVE_${header_var}") set(${header_var}) check_include_file(${header} ${header_var}) - if (${header_var}) - add_compile_definitions(${header_var}) + + if(${header_var}) + config_h_add_compile_definitions(${header_var}) else() endif() endforeach() + unset(_check_headers) check_include_file(stdbool.h HAVE_STDBOOL_H) + if(HAVE_STDBOOL_H) - add_compile_definitions(HAVE_STDBOOL_H=1) + config_h_add_compile_definitions(HAVE_STDBOOL_H=1) endif() if(cxx_constexpr IN_LIST CMAKE_CXX_COMPILE_FEATURES) @@ -591,12 +652,13 @@ check_type_size("struct timespec" HAVE_A2_STRUCT_TIMESPEC LANGUAGE CXX) set(CMAKE_EXTRA_INCLUDE_FILES ${save_CMAKE_EXTRA_INCLUDE_FILES}) if(HAVE_A2_STRUCT_TIMESPEC) - add_compile_definitions(HAVE_A2_STRUCT_TIMESPEC) + set(HAVE_A2_STRUCT_TIMESPEC true) + config_h_add_compile_definitions(HAVE_A2_STRUCT_TIMESPEC) endif() find_package(Gettext) -set(_check_funcs +set(_check_funcs __argz_count __argz_next __argz_stringify @@ -644,16 +706,18 @@ set(_check_funcs utimes ) -foreach (func ${_check_funcs}) +foreach(func ${_check_funcs}) string(TOUPPER ${func} func_var) set(func_var "HAVE_${func_var}") set(${func_var}) - check_function_exists (${func} ${func_var}) - if (${func_var}) - add_compile_definitions(${func_var}) + check_function_exists(${func} ${func_var}) + + if(${func_var}) + config_h_add_compile_definitions(${func_var}) else() endif() endforeach() + unset(_check_funcs) if(WITH_TCMALLOC AND WITH_JEMALLOC) @@ -661,16 +725,20 @@ if(WITH_TCMALLOC AND WITH_JEMALLOC) endif() set(HAVE_TCMALLOC no CACHE BOOL "If you have tcmalloc" FORCE) + if(WITH_TCMALLOC) find_package(Tcmalloc) + if(Tcmalloc_FOUND) set(HAVE_TCMALLOC yes CACHE BOOL "If you have tcmalloc" FORCE) endif() endif() set(HAVE_JEMALLOC no CACHE BOOL "if you have jemalloc" FORCE) + if(WITH_JEMALLOC) find_package(Jemalloc) + if(Jemalloc_FOUND) set(HAVE_JEMALLOC yes CACHE BOOL "if you have jemalloc" FORCE) endif() @@ -678,27 +746,38 @@ endif() if(ENABLE_EPOLL) check_function_exists(epoll_create HAVE_EPOLL) + if(HAVE_EPOLL) - add_compile_definitions(HAVE_EPOLL=1) + config_h_add_compile_definitions(HAVE_EPOLL=1) endif() endif() check_function_exists(posix_fallocate HAVE_POSIX_FALLOCATE) +if(HAVE_POSIX_FALLOCATE) + config_h_add_compile_definitions(HAVE_POSIX_FALLOCATE=1) +endif() +check_function_exists(fallocate HAVE_FALLOCATE) +if(HAVE_FALLOCATE) + config_h_add_compile_definitions(HAVE_FALLOCATE=1) +endif() + if(HAVE_POSIX_FALLOCATE OR HAVE_FALLOCATE OR HAVE_OSX OR WIN_BUILD) set(HAVE_SOME_FALLOCATE yes CACHE BOOL "if there is some fallocate support" FORCE) - add_compile_definitions(HAVE_SOME_FALLOCATE=1) + config_h_add_compile_definitions(HAVE_SOME_FALLOCATE=1) else() set(HAVE_SOME_FALLOCATE no CACHE BOOL "if there is some fallocate support" FORCE) endif() check_cxx_symbol_exists(asctime_r time.h HAVE_ASCTIME_R) + if(HAVE_ASCTIME_R) - add_compile_definitions(HAVE_ASCTIME_R=1) + config_h_add_compile_definitions(HAVE_ASCTIME_R=1) endif() check_cxx_symbol_exists(localtime_r time.h HAVE_LOCALTIME_R) + if(HAVE_LOCALTIME_R) - add_compile_definitions(HAVE_LOCALTIME_R=1) + config_h_add_compile_definitions(HAVE_LOCALTIME_R=1) endif() set(_check_funcs @@ -713,22 +792,24 @@ set(_check_funcs kqueue ) -foreach (func ${_check_funcs}) +foreach(func ${_check_funcs}) string(TOUPPER ${func} func_var) set(func_var "HAVE_${func_var}") set(${func_var}) - check_function_exists (${func} ${func_var}) - if (${func_var}) - add_compile_definitions(${func_var}) + check_function_exists(${func} ${func_var}) + + if(${func_var}) + config_h_add_compile_definitions(${func_var}) else() endif() endforeach() + unset(_check_funcs) if(HAVE_KQUEUE) message(STATUS "Checking whether struct kevent.udata is intptr_t") set(_tmp_src -"\ + "\ #include #include #include @@ -739,32 +820,37 @@ int main(int argc, char* argv[]) { " ) try_compile(KEVENT_UDATA_INTPTR_T - SOURCE_FROM_VAR kevent_udata_intptr_t_src.c _tmp_src + SOURCE_FROM_VAR kevent_udata_intptr_t_src.c _tmp_src ) unset(_tmp_src) + if(KEVENT_UDATA_INTPTR_T) - message(STATUS "Checking whether struct kevent.udata is intptr_t - yes") - add_compile_definitions(KEVENT_UDATA_INTPTR_T=1) + message(STATUS "Checking whether struct kevent.udata is intptr_t - yes") + config_h_add_compile_definitions(KEVENT_UDATA_INTPTR_T=1) else() - message(STATUS "Checking whether struct kevent.udata is intptr_t - no") + message(STATUS "Checking whether struct kevent.udata is intptr_t - no") endif() endif() set(save_CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES}) set(CMAKE_EXTRA_INCLUDE_FILES sys/types.h sys/socket.h netinet/in.h) check_type_size("struct sockaddr_in.sin_len" HAVE_SOCKADDR_IN_SIN_LEN) + if(HAVE_SOCKADDR_IN_SIN_LEN) - add_compile_definitions(HAVE_SOCKADDR_IN_SIN_LEN=1) + config_h_add_compile_definitions(HAVE_SOCKADDR_IN_SIN_LEN=1) endif() + check_type_size("struct sockaddr_in6.sin6_len" HAVE_SOCKADDR_IN6_SIN6_LEN) + if(HAVE_SOCKADDR_IN6_SIN6_LEN) - add_compile_definitions(HAVE_SOCKADDR_IN6_SIN6_LEN=1) + config_h_add_compile_definitions(HAVE_SOCKADDR_IN6_SIN6_LEN=1) endif() + set(CMAKE_EXTRA_INCLUDE_FILES ${save_CMAKE_EXTRA_INCLUDE_FILES}) message(STATUS "Checking whether struct option.name is assignable from const char*") set(_tmp_src -"\ + "\ #include #include int main(int argc, char* argv[]) { @@ -775,52 +861,58 @@ int main(int argc, char* argv[]) { " ) try_compile(HAVE_OPTION_CONST_NAME - SOURCE_FROM_VAR option_const_name.c _tmp_src + SOURCE_FROM_VAR option_const_name.c _tmp_src ) unset(_tmp_src) + if(HAVE_OPTION_CONST_NAME) - message(STATUS "Checking whether struct option.name is assignable from const char* - yes") - add_compile_definitions(HAVE_OPTION_CONST_NAME=1) + message(STATUS "Checking whether struct option.name is assignable from const char* - yes") + config_h_add_compile_definitions(HAVE_OPTION_CONST_NAME=1) else() - message(STATUS "Checking whether struct option.name is assignable from const char* - no") + message(STATUS "Checking whether struct option.name is assignable from const char* - no") endif() if(ENABLE_WEBSOCKET) - add_compile_definitions(ENABLE_WEBSOCKET=1) + config_h_add_compile_definitions(ENABLE_WEBSOCKET=1) endif() -if (ARIA2_STATIC) - if (NOT WIN32 AND NOT APPLE) +if(ARIA2_STATIC) + if(NOT WIN32 AND NOT APPLE) set(EXTRALIBS -lpthread -ldl -lrt ${EXTRALIBS}) endif() endif() if(ENABLE_WERROR) - add_compile_options( -Wall -Werror -Wformat-security) + add_compile_options(-Wall -Werror -Wformat-security) endif() add_link_options(${EXTRALIBS}) +config_h_generate_header(config) +# pickup the generated config.h +include_directories(${CMAKE_CURRENT_BINARY_DIR}) +add_compile_definitions(HAVE_CONFIG_H) + # add_subdirectory(po) add_subdirectory(lib) add_subdirectory(deps) add_subdirectory(src) + # add_subdirectory(doc) # add_subdirectory(test) - message(STATUS "summary of build options: \n\ -Build: ${BUILD} -Host: ${HOST} -Target: ${TARGET} -Install prefix: ${PREFIX} -CC: ${CC} -CXX: ${CXX} -CPP: ${CPP} -CXXFLAGS: ${CXXFLAGS} -CFLAGS: ${CFLAGS} -CPPFLAGS: ${CPPFLAGS} -LDFLAGS: ${LDFLAGS} +Build: ${CMAKE_HOST_SYSTEM_PROCESSOR} +Host: ${CMAKE_HOST_SYSTEM_PROCESSOR} +Target: ${CMAKE_SYSTEM_PROCESSOR} +Install prefix: ${CMAKE_INSTALL_PREFIX} +CC: ${CMAKE_C_COMPILER} +CXX: ${CMAKE_CXX_COMPILER} +CPP: ${CMAKE_CPP_COMPILER} +CXXFLAGS: ${CMAKE_CXX_FLAGS} +CFLAGS: ${CMAKE_C_FLAGS} +CPPFLAGS: ${CMAKE_CPP_FLAGS} +LDFLAGS: EXE: ${CMAKE_EXE_LINKER_FLAGS} SHARED: ${CMAKE_SHARED_LINKER_FLAGS} LIBS: ${LIBS} DEFS: ${DEFS} CXX1XCXXFLAGS: ${CXX1XCXXFLAGS} @@ -859,92 +951,86 @@ bash_completion dir: ${BASHCOMPLETIONDIR} Static build: ${ARIA2_STATIC} ") - - - - -##### README Generation ##### +# #### README Generation ##### find_package(Docutils) -if (Docutils_FOUND) - if (WIN32) +if(Docutils_FOUND) + if(WIN32) find_package(PythonInterp) endif() + add_custom_command( OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/README.html COMMAND ${PYTHON_EXECUTABLE} ${RST2HTML_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/README.rst ${CMAKE_CURRENT_SOURCE_DIR}/README.html DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/README.rst MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/README.rst ) -add_custom_target(readme_html ALL DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/README.html) + add_custom_target(readme_html ALL DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/README.html) else() message(WARNING "rst2html not installed. Placing only a dummy file for README.html") - write_file(${CMAKE_CURRENT_SOURCE_DIR}/README.html + write_file(${CMAKE_CURRENT_SOURCE_DIR}/README.html "\n" "

Readme has not been built!.
Instead see README.rst

" ) endif() -file(GLOB ALL_SOURCE_FILES +file(GLOB ALL_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/*.c ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cc - ${CMAKE_CURRENT_SOURCE_DIR}/src/*.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/*.h ${CMAKE_CURRENT_SOURCE_DIR}/src/includes/aria2/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/examples/*.cc + ${CMAKE_CURRENT_SOURCE_DIR}/examples/*.cc ${CMAKE_CURRENT_SOURCE_DIR}/test/*.cc ${CMAKE_CURRENT_SOURCE_DIR}/test/*.h ) add_custom_target(clang-format - COMMAND clang-format -i ${ALL_SOURCE_FILES} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMAND clang-format -i ${ALL_SOURCE_FILES} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) -########### install files ############### +# ########## install files ############### +install(FILES README README.rst README.html DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) +install(FILES LICENSE.OpenSSL DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) -install(FILES README README.rst README.html DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) -install(FILES LICENSE.OpenSSL DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) +# original Makefile.am contents follow: - - -#original Makefile.am contents follow: - -#SUBDIRS = po lib deps src doc test +# SUBDIRS = po lib deps src doc test # -#ACLOCAL_AMFLAGS = -I m4 --install -#RST2HTML = @RST2HTML@ +# ACLOCAL_AMFLAGS = -I m4 --install +# RST2HTML = @RST2HTML@ # -#EXTRA_DIST = config.rpath \ -# script-helper \ -# makerelease \ -# mingw-config mingw-release mingw-build-memo \ -# android-config \ -# makerelease-osx.mk osx-package/DS_Store osx-package/etc/paths.d/aria2c osx-package/etc/manpaths.d/aria2 \ -# Dockerfile.mingw \ -# Dockerfile.raspberrypi \ -# examples/libaria2ex.cc examples/libaria2wx.cc +# EXTRA_DIST = config.rpath \ +# script-helper \ +# makerelease \ +# mingw-config mingw-release mingw-build-memo \ +# android-config \ +# makerelease-osx.mk osx-package/DS_Store osx-package/etc/paths.d/aria2c osx-package/etc/manpaths.d/aria2 \ +# Dockerfile.mingw \ +# Dockerfile.raspberrypi \ +# examples/libaria2ex.cc examples/libaria2wx.cc # -#dist_doc_DATA = README README.rst README.html +# dist_doc_DATA = README README.rst README.html # -#.PHONY: clang-format +# .PHONY: clang-format # -#if HAVE_RST2HTML -#README.html: README.rst -# $(RST2HTML) $< > $@ -#else # !HAVE_RST2HTML -#README.html: README.rst -# @echo Warning: rst2html not installed. Placing only a dummy file for $@ -# echo "" > $@ -# echo "

Readme has not been built!.
Instead see README.rst

" >> $@ -#endif # !HAVE_RST2HTML +# if HAVE_RST2HTML +# README.html: README.rst +# $(RST2HTML) $< > $@ +# else # !HAVE_RST2HTML +# README.html: README.rst +# @echo Warning: rst2html not installed. Placing only a dummy file for $@ +# echo "" > $@ +# echo "

Readme has not been built!.
Instead see README.rst

" >> $@ +# endif # !HAVE_RST2HTML # -#dist_noinst_DATA = LICENSE.OpenSSL +# dist_noinst_DATA = LICENSE.OpenSSL # -## Format source files using clang-format. Don't format source files -## under deps directory since we are not responsible for their coding -## style. -#clang-format: -# CLANGFORMAT=`git config --get clangformat.binary`; \ -# test -z $${CLANGFORMAT} && CLANGFORMAT="clang-format"; \ -# $${CLANGFORMAT} -i $(top_srcdir)/src/*.{c,cc,h} $(top_srcdir)/src/includes/aria2/*.h \ -# $(top_srcdir)/examples/*.cc $(top_srcdir)/test/*.{cc,h} +# # Format source files using clang-format. Don't format source files +# # under deps directory since we are not responsible for their coding +# # style. +# clang-format: +# CLANGFORMAT=`git config --get clangformat.binary`; \ +# test -z $${CLANGFORMAT} && CLANGFORMAT="clang-format"; \ +# $${CLANGFORMAT} -i $(top_srcdir)/src/*.{c,cc,h} $(top_srcdir)/src/includes/aria2/*.h \ +# $(top_srcdir)/examples/*.cc $(top_srcdir)/test/*.{cc,h} diff --git a/cmake/GenerateConfigH.cmake b/cmake/GenerateConfigH.cmake new file mode 100644 index 00000000..45b5ef79 --- /dev/null +++ b/cmake/GenerateConfigH.cmake @@ -0,0 +1,22 @@ +function(config_h_add_compile_definitions definitions) + set(${PROJECT_NAME}_CONFIG_H_definitions ${${PROJECT_NAME}_CONFIG_H_definitions} ${definitions} PARENT_SCOPE) +endfunction() + +function(config_h_generate_header name) + write_file(${CMAKE_CURRENT_BINARY_DIR}/${name}.h.cmake.in "/* config.h.in. Generated from cmake*/\n") + foreach(def ${${PROJECT_NAME}_CONFIG_H_definitions}) + set(def_var ${def}) + string(REPLACE "=" ";" def_var ${def_var}) + list(POP_FRONT def_var def_name) + if(def_var) + set(${def_name}_config_h_val ${def_var}) + else() + set(${def_name}_config_h_val "${${def_name}}") + string(REPLACE "yes" "1" ${def_name}_config_h_val ${${def_name}_config_h_val}) + string(REPLACE "ON" "1" ${def_name}_config_h_val ${${def_name}_config_h_val}) + string(REPLACE "TRUE" "1" ${def_name}_config_h_val ${${def_name}_config_h_val}) + endif() + write_file(${CMAKE_CURRENT_BINARY_DIR}/${name}.h.cmake.in "#define ${def_name} @${def_name}_config_h_val@\n" APPEND) + endforeach() + configure_file(${CMAKE_CURRENT_BINARY_DIR}/${name}.h.cmake.in ${name}.h) +endfunction() \ No newline at end of file diff --git a/deps/wslay/CMakeLists.txt b/deps/wslay/CMakeLists.txt index 4795ec7c..d9fa0c39 100644 --- a/deps/wslay/CMakeLists.txt +++ b/deps/wslay/CMakeLists.txt @@ -1,5 +1,26 @@ project(wslay LANGUAGES CXX C VERSION 1.1.1) +include(GenerateConfigH) + +config_h_add_compile_definitions(PACKAGE="${PROJECT_NAME}") +config_h_add_compile_definitions(PACKAGE_NAME="${PROJECT_NAME}") +config_h_add_compile_definitions(PACKAGE_STRING="${PROJECT_NAME} ${PROJECT_VERSION}") +config_h_add_compile_definitions(PACKAGE_TARNAME="${PROJECT_NAME}") +config_h_add_compile_definitions(PACKAGE_URL="${PROJECT_HOMEPAGE_URL}") +config_h_add_compile_definitions(PACKAGE_BUGREPORT="t-tujikawa@users.sourceforge.net") +config_h_add_compile_definitions(PACKAGE_VERSION="${PROJECT_VERSION}") +config_h_add_compile_definitions(VERSION="${PROJECT_VERSION}") +config_h_add_compile_definitions(HOST="${CMAKE_HOST_SYSTEM_PROCESSOR}") +config_h_add_compile_definitions(BUILD="${CMAKE_HOST_SYSTEM_PROCESSOR}") +config_h_add_compile_definitions(TARGET="${CMAKE_SYSTEM_PROCESSOR}") + +add_link_options(${EXTRALIBS}) + +config_h_generate_header(config) +# pickup the generated config.h +include_directories(${CMAKE_CURRENT_BINARY_DIR}) +add_compile_definitions(HAVE_CONFIG_H) + add_subdirectory(lib) add_subdirectory(tests) diff --git a/deps/wslay/lib/CMakeLists.txt b/deps/wslay/lib/CMakeLists.txt index 67b4bbed..44e4e024 100644 --- a/deps/wslay/lib/CMakeLists.txt +++ b/deps/wslay/lib/CMakeLists.txt @@ -26,8 +26,7 @@ set(WSLAY_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/includes) add_library(wslay STATIC ${wslay_STAT_SRCS}) -target_compile_definitions(wslay PUBLIC PACKAGE_VERSION="${PROJECT_VERSION}") -target_compile_definitions(wslay PUBLIC PACKAGE="${PROJECT_NAME}") + target_include_directories(wslay PUBLIC ${WSLAY_INCLUDE_DIR}) target_include_directories(wslay INTERFACE ${WSLAY_INCLUDE_DIR}) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0ee8a94e..fd132a88 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,26 +2,21 @@ add_subdirectory(includes) - -########### next target ############### - +# ########## next target ############### set(aria2c_SRCS main.cc) add_library(main OBJECT ${aria2c_SRCS}) -target_compile_definitions(main PUBLIC PACKAGE_VERSION="${PROJECT_VERSION}") -target_compile_definitions(main PUBLIC PACKAGE="${PROJECT_NAME}") target_include_directories(main PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/includes) target_include_directories(main PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) add_executable(aria2c $) -target_link_libraries(aria2c PUBLIC main) +target_link_libraries(aria2c main) install(TARGETS aria2c ${INSTALL_TARGETS_DEFAULT_ARGS}) - -########### next target ############### +# ########## next target ############### set(aria2_SRCS - a2algo.h + a2algo.h a2functional.h a2io.h a2iterator.h @@ -34,8 +29,8 @@ set(aria2_SRCS AbstractCommand.h AbstractDiskWriter.cc AbstractDiskWriter.h - AbstractHttpServerResponseCommand.cc - AbstractHttpServerResponseCommand.h + AbstractHttpServerResponseCommand.cc + AbstractHttpServerResponseCommand.h AbstractOptionHandler.cc AbstractOptionHandler.h AbstractProxyRequestCommand.cc @@ -211,7 +206,7 @@ set(aria2_SRCS GroupId.h GrowSegment.cc GrowSegment.h - HashFuncEntry.h + HashFuncEntry.h HaveEraseCommand.cc HaveEraseCommand.h help_tags.cc @@ -274,7 +269,7 @@ set(aria2_SRCS JsonDiskWriter.h JsonParser.cc JsonParser.h - Lock.h + Lock.h LogFactory.cc LogFactory.h Logger.cc @@ -475,9 +470,9 @@ set(aria2_SRCS XmlRpcRequestParserController.cc XmlRpcRequestParserController.h OpenedFileCounter.cc - OpenedFileCounter.h + OpenedFileCounter.h SHA1IOFile.cc - SHA1IOFile.h + SHA1IOFile.h EvictSocketPoolCommand.cc EvictSocketPoolCommand.h libssl_compat.h @@ -495,7 +490,7 @@ endif() if(ENABLE_WEBSOCKET) set(aria2_SRCS ${aria2_SRCS} - + WebSocketInteractionCommand.cc WebSocketInteractionCommand.h WebSocketResponseCommand.cc @@ -513,96 +508,89 @@ else() ) endif() - -if (HAVE_SOME_XMLLIB) +if(HAVE_SOME_XMLLIB) set(aria2_SRCS ${aria2_SRCS} ParserStateMachine.h - XmlAttr.cc - XmlAttr.h - XmlParser.cc - XmlParser.h + XmlAttr.cc + XmlAttr.h + XmlParser.cc + XmlParser.h ) endif() -if (HAVE_LIBXML2) +if(HAVE_LIBXML2) set(aria2_SRCS ${aria2_SRCS} - + Xml2XmlParser.cc Xml2XmlParser.h ) endif() -if (HAVE_LIBEXPAT) +if(HAVE_LIBEXPAT) set(aria2_SRCS ${aria2_SRCS} - ExpatXmlParser.cc - ExpatXmlParser.h + ExpatXmlParser.cc + ExpatXmlParser.h ) endif() -if (ENABLE_XML_RPC) +if(ENABLE_XML_RPC) set(aria2_SRCS ${aria2_SRCS} - - ) - endif() -if (HAVE_SOME_FALLOCATE) +if(HAVE_SOME_FALLOCATE) set(aria2_SRCS ${aria2_SRCS} FallocFileAllocationIterator.cc FallocFileAllocationIterator.h ) - endif() -if (HAVE_EPOLL) +if(HAVE_EPOLL) set(aria2_SRCS ${aria2_SRCS} EpollEventPoll.cc EpollEventPoll.h ) - endif() -if (ENABLE_SSL) +if(ENABLE_SSL) set(aria2_SRCS ${aria2_SRCS} - + TLSContext.h TLSSession.h ) endif() -if (USE_APPLE_MD) +if(USE_APPLE_MD) set(aria2_SRCS ${aria2_SRCS} - + AppleMessageDigestImpl.cc ) - endif() -if (HAVE_APPLETLS) +if(HAVE_APPLETLS) set(aria2_SRCS ${aria2_SRCS} AppleTLSContext.cc - AppleTLSContext.h - AppleTLSSession.cc - AppleTLSSession.h + AppleTLSContext.h + AppleTLSSession.cc + AppleTLSSession.h ) endif() -if (HAVE_WINTLS) +if(HAVE_WINTLS) set(aria2_SRCS ${aria2_SRCS} @@ -622,7 +610,7 @@ if(USE_INTERNAL_BIGNUM) ) endif() -if (USE_INTERNAL_ARC4) +if(USE_INTERNAL_ARC4) set(aria2_SRCS ${aria2_SRCS} @@ -631,36 +619,38 @@ if (USE_INTERNAL_ARC4) ) endif() -if (USE_INTERNAL_MD) +if(USE_INTERNAL_MD) set(aria2_SRCS ${aria2_SRCS} - + InternalMessageDigestImpl.cc - crypto_hash.cc - crypto_hash.h + crypto_hash.cc + crypto_hash.h ) endif() -if (HAVE_LIBGNUTLS) +if(HAVE_LIBGNUTLS) set(aria2_SRCS - - LibgnutlsTLSContext.cc - LibgnutlsTLSContext.h + ${aria2_SRCS} + + LibgnutlsTLSContext.cc + LibgnutlsTLSContext.h LibgnutlsTLSSession.cc LibgnutlsTLSSession.h ) endif() -if (HAVE_LIBGCRYPT) +if(HAVE_LIBGCRYPT) set(aria2_SRCS ${aria2_SRCS} - LibgcryptARC4Encryptor.cc - LibgcryptARC4Encryptor.h + LibgcryptARC4Encryptor.cc + LibgcryptARC4Encryptor.h LibgcryptDHKeyExchange.cc LibgcryptDHKeyExchange.h ) - if (USE_LIBGCRYPT_MD) + + if(USE_LIBGCRYPT_MD) set(aria2_SRCS ${aria2_SRCS} @@ -669,14 +659,15 @@ if (HAVE_LIBGCRYPT) endif() endif() -if (HAVE_LIBNETTLE) +if(HAVE_LIBNETTLE) set(aria2_SRCS ${aria2_SRCS} LibnettleARC4Encryptor.cc LibnettleARC4Encryptor.h ) - if (USE_LIBNETTLE_MD) + + if(USE_LIBNETTLE_MD) set(aria2_SRCS ${aria2_SRCS} @@ -685,7 +676,7 @@ if (HAVE_LIBNETTLE) endif() endif() -if (HAVE_LIBGMP) +if(HAVE_LIBGMP) set(aria2_SRCS ${aria2_SRCS} @@ -696,7 +687,7 @@ if (HAVE_LIBGMP) ) endif() -if (HAVE_OPENSSL) +if(HAVE_OPENSSL) set(aria2_SRCS ${aria2_SRCS} @@ -705,7 +696,8 @@ if (HAVE_OPENSSL) LibsslDHKeyExchange.cc LibsslDHKeyExchange.h ) - if (NOT HAVE_APPLETLS) + + if(NOT HAVE_APPLETLS) set(aria2_SRCS ${aria2_SRCS} @@ -715,427 +707,428 @@ if (HAVE_OPENSSL) LibsslTLSSession.h ) endif() - if (USE_OPENSSL_MD) + + if(USE_OPENSSL_MD) set(aria2_SRCS ${aria2_SRCS} - + LibsslMessageDigestImpl.cc - ) + ) endif() endif() -if (HAVE_ZLIB) +if(HAVE_ZLIB) set(aria2_SRCS ${aria2_SRCS} - + GZipDecodingStreamFilter.cc GZipDecodingStreamFilter.h - GZipEncoder.cc - GZipEncoder.h - GZipFile.cc - GZipFile.h - Adler32MessageDigestImpl.cc - Adler32MessageDigestImpl.h + GZipEncoder.cc + GZipEncoder.h + GZipFile.cc + GZipFile.h + Adler32MessageDigestImpl.cc + Adler32MessageDigestImpl.h ) endif() -if (HAVE_SQLITE3) +if(HAVE_SQLITE3) set(aria2_SRCS ${aria2_SRCS} - + Sqlite3CookieParser.cc Sqlite3CookieParser.h - Sqlite3CookieParserImpl.cc - Sqlite3CookieParserImpl.h + Sqlite3CookieParserImpl.cc + Sqlite3CookieParserImpl.h ) endif() -if (HAVE_LIBSSH2) +if(HAVE_LIBSSH2) set(aria2_SRCS ${aria2_SRCS} - + SSHSession.cc - SSHSession.h - SftpNegotiationCommand.cc - SftpNegotiationCommand.h - SftpNegotiationConnectChain.h - SftpDownloadCommand.cc - SftpDownloadCommand.h - SftpFinishDownloadCommand.cc - SftpFinishDownloadCommand.h + SSHSession.h + SftpNegotiationCommand.cc + SftpNegotiationCommand.h + SftpNegotiationConnectChain.h + SftpDownloadCommand.cc + SftpDownloadCommand.h + SftpFinishDownloadCommand.cc + SftpFinishDownloadCommand.h ) endif() -if (ENABLE_ASYNC_DNS) +if(ENABLE_ASYNC_DNS) set(aria2_SRCS ${aria2_SRCS} - + AsyncNameResolver.cc AsyncNameResolver.h - AsyncNameResolverMan.cc - AsyncNameResolverMan.h + AsyncNameResolverMan.cc + AsyncNameResolverMan.h ) endif() -if (ENABLE_BITTORRENT) +if(ENABLE_BITTORRENT) set(aria2_SRCS ${aria2_SRCS} AbstractBtMessage.cc AbstractBtMessage.h - ActivePeerConnectionCommand.cc - ActivePeerConnectionCommand.h - AnnounceList.h - AnnounceList.cc - AnnounceTier.cc - AnnounceTier.h - ARC4Encryptor.h + ActivePeerConnectionCommand.cc + ActivePeerConnectionCommand.h + AnnounceList.h + AnnounceList.cc + AnnounceTier.cc + AnnounceTier.h + ARC4Encryptor.h bencode2.cc bencode2.h - BencodeDiskWriter.h + BencodeDiskWriter.h BencodeDiskWriterFactory.h - BencodeParser.cc - BencodeParser.h - bittorrent_helper.cc - bittorrent_helper.h - BtAbortOutstandingRequestEvent.cc - BtAbortOutstandingRequestEvent.h - BtAllowedFastMessage.cc - BtAllowedFastMessage.h - BtAnnounce.cc - BtAnnounce.h - BtBitfieldMessage.cc - BtBitfieldMessage.h - BtBitfieldMessageValidator.cc - BtBitfieldMessageValidator.h - BtCancelMessage.cc - BtCancelMessage.h - BtCancelSendingPieceEvent.h + BencodeParser.cc + BencodeParser.h + bittorrent_helper.cc + bittorrent_helper.h + BtAbortOutstandingRequestEvent.cc + BtAbortOutstandingRequestEvent.h + BtAllowedFastMessage.cc + BtAllowedFastMessage.h + BtAnnounce.cc + BtAnnounce.h + BtBitfieldMessage.cc + BtBitfieldMessage.h + BtBitfieldMessageValidator.cc + BtBitfieldMessageValidator.h + BtCancelMessage.cc + BtCancelMessage.h + BtCancelSendingPieceEvent.h BtCheckIntegrityEntry.cc BtCheckIntegrityEntry.h - BtChokeMessage.cc - BtChokeMessage.h - BtChokingEvent.h + BtChokeMessage.cc + BtChokeMessage.h + BtChokingEvent.h BtConstants.h - BtDependency.cc - BtDependency.h - BtExtendedMessage.cc - BtExtendedMessage.h - BtFileAllocationEntry.cc - BtFileAllocationEntry.h - BtHandshakeMessage.cc - BtHandshakeMessage.h - BtHandshakeMessageValidator.cc - BtHandshakeMessageValidator.h - BtHaveAllMessage.cc - BtHaveAllMessage.h - BtHaveMessage.cc - BtHaveMessage.h - BtHaveNoneMessage.cc - BtHaveNoneMessage.h - BtInteractive.h + BtDependency.cc + BtDependency.h + BtExtendedMessage.cc + BtExtendedMessage.h + BtFileAllocationEntry.cc + BtFileAllocationEntry.h + BtHandshakeMessage.cc + BtHandshakeMessage.h + BtHandshakeMessageValidator.cc + BtHandshakeMessageValidator.h + BtHaveAllMessage.cc + BtHaveAllMessage.h + BtHaveMessage.cc + BtHaveMessage.h + BtHaveNoneMessage.cc + BtHaveNoneMessage.h + BtInteractive.h BtInterestedMessage.cc BtInterestedMessage.h - BtKeepAliveMessage.cc - BtKeepAliveMessage.h - BtLeecherStateChoke.cc - BtLeecherStateChoke.h - BtMessage.h + BtKeepAliveMessage.cc + BtKeepAliveMessage.h + BtLeecherStateChoke.cc + BtLeecherStateChoke.h + BtMessage.h BtMessageDispatcher.h - BtMessageFactory.h + BtMessageFactory.h BtMessageReceiver.h - BtMessageValidator.h + BtMessageValidator.h BtNotInterestedMessage.cc BtNotInterestedMessage.h - BtPieceMessage.cc - BtPieceMessage.h - BtPieceMessageValidator.cc - BtPieceMessageValidator.h - BtPortMessage.cc - BtPortMessage.h - BtPostDownloadHandler.cc - BtPostDownloadHandler.h - BtRegistry.cc - BtRegistry.h - BtRejectMessage.cc - BtRejectMessage.h - BtRequestFactory.h + BtPieceMessage.cc + BtPieceMessage.h + BtPieceMessageValidator.cc + BtPieceMessageValidator.h + BtPortMessage.cc + BtPortMessage.h + BtPostDownloadHandler.cc + BtPostDownloadHandler.h + BtRegistry.cc + BtRegistry.h + BtRejectMessage.cc + BtRejectMessage.h + BtRequestFactory.h BtRequestMessage.cc BtRequestMessage.h - BtRuntime.cc - BtRuntime.h - BtSeederStateChoke.cc - BtSeederStateChoke.h - BtSetup.cc - BtSetup.h - BtStopDownloadCommand.cc - BtStopDownloadCommand.h - BtSuggestPieceMessage.cc - BtSuggestPieceMessage.h - BtUnchokeMessage.cc - BtUnchokeMessage.h - DefaultBtAnnounce.cc - DefaultBtAnnounce.h - DefaultBtInteractive.cc - DefaultBtInteractive.h - DefaultBtMessageDispatcher.cc - DefaultBtMessageDispatcher.h - DefaultBtMessageFactory.cc - DefaultBtMessageFactory.h - DefaultBtMessageReceiver.cc - DefaultBtMessageReceiver.h - DefaultBtRequestFactory.cc - DefaultBtRequestFactory.h - DefaultExtensionMessageFactory.cc - DefaultExtensionMessageFactory.h - DefaultPeerStorage.cc - DefaultPeerStorage.h - DHKeyExchange.h + BtRuntime.cc + BtRuntime.h + BtSeederStateChoke.cc + BtSeederStateChoke.h + BtSetup.cc + BtSetup.h + BtStopDownloadCommand.cc + BtStopDownloadCommand.h + BtSuggestPieceMessage.cc + BtSuggestPieceMessage.h + BtUnchokeMessage.cc + BtUnchokeMessage.h + DefaultBtAnnounce.cc + DefaultBtAnnounce.h + DefaultBtInteractive.cc + DefaultBtInteractive.h + DefaultBtMessageDispatcher.cc + DefaultBtMessageDispatcher.h + DefaultBtMessageFactory.cc + DefaultBtMessageFactory.h + DefaultBtMessageReceiver.cc + DefaultBtMessageReceiver.h + DefaultBtRequestFactory.cc + DefaultBtRequestFactory.h + DefaultExtensionMessageFactory.cc + DefaultExtensionMessageFactory.h + DefaultPeerStorage.cc + DefaultPeerStorage.h + DHKeyExchange.h DHTAbstractMessage.cc DHTAbstractMessage.h - DHTAbstractNodeLookupTask.h + DHTAbstractNodeLookupTask.h DHTAbstractTask.cc DHTAbstractTask.h DHTAnnouncePeerMessage.cc - DHTAnnouncePeerMessage.h - DHTAnnouncePeerReplyMessage.cc - DHTAnnouncePeerReplyMessage.h - DHTAutoSaveCommand.cc - DHTAutoSaveCommand.h - DHTBucket.cc - DHTBucket.h - DHTBucketRefreshCommand.cc - DHTBucketRefreshCommand.h - DHTBucketRefreshTask.cc - DHTBucketRefreshTask.h - DHTBucketTree.cc - DHTBucketTree.h - DHTConnection.h + DHTAnnouncePeerMessage.h + DHTAnnouncePeerReplyMessage.cc + DHTAnnouncePeerReplyMessage.h + DHTAutoSaveCommand.cc + DHTAutoSaveCommand.h + DHTBucket.cc + DHTBucket.h + DHTBucketRefreshCommand.cc + DHTBucketRefreshCommand.h + DHTBucketRefreshTask.cc + DHTBucketRefreshTask.h + DHTBucketTree.cc + DHTBucketTree.h + DHTConnection.h DHTConnectionImpl.cc DHTConnectionImpl.h - DHTConstants.h + DHTConstants.h DHTEntryPointNameResolveCommand.cc DHTEntryPointNameResolveCommand.h - DHTFindNodeMessage.cc - DHTFindNodeMessage.h - DHTFindNodeReplyMessage.cc - DHTFindNodeReplyMessage.h - DHTGetPeersCommand.cc - DHTGetPeersCommand.h - DHTGetPeersMessage.cc - DHTGetPeersMessage.h - DHTGetPeersReplyMessage.cc - DHTGetPeersReplyMessage.h - DHTIDCloser.h + DHTFindNodeMessage.cc + DHTFindNodeMessage.h + DHTFindNodeReplyMessage.cc + DHTFindNodeReplyMessage.h + DHTGetPeersCommand.cc + DHTGetPeersCommand.h + DHTGetPeersMessage.cc + DHTGetPeersMessage.h + DHTGetPeersReplyMessage.cc + DHTGetPeersReplyMessage.h + DHTIDCloser.h DHTInteractionCommand.cc DHTInteractionCommand.h - DHTMessage.cc - DHTMessage.h - DHTMessageCallback.h + DHTMessage.cc + DHTMessage.h + DHTMessageCallback.h DHTMessageDispatcher.h - DHTMessageDispatcherImpl.cc - DHTMessageDispatcherImpl.h - DHTMessageEntry.cc - DHTMessageEntry.h - DHTMessageFactory.h + DHTMessageDispatcherImpl.cc + DHTMessageDispatcherImpl.h + DHTMessageEntry.cc + DHTMessageEntry.h + DHTMessageFactory.h DHTMessageFactoryImpl.cc DHTMessageFactoryImpl.h - DHTMessageReceiver.cc - DHTMessageReceiver.h - DHTMessageTracker.cc - DHTMessageTracker.h - DHTMessageTrackerEntry.cc - DHTMessageTrackerEntry.h - DHTNode.cc - DHTNode.h - DHTNodeLookupEntry.cc - DHTNodeLookupEntry.h - DHTNodeLookupTask.cc - DHTNodeLookupTask.h - DHTNodeLookupTaskCallback.cc - DHTNodeLookupTaskCallback.h - DHTPeerAnnounceCommand.cc - DHTPeerAnnounceCommand.h - DHTPeerAnnounceEntry.cc - DHTPeerAnnounceEntry.h - DHTPeerAnnounceStorage.cc - DHTPeerAnnounceStorage.h - DHTPeerLookupTask.cc - DHTPeerLookupTask.h - DHTPeerLookupTaskCallback.cc - DHTPeerLookupTaskCallback.h - DHTPingMessage.cc - DHTPingMessage.h - DHTPingReplyMessage.cc - DHTPingReplyMessage.h - DHTPingReplyMessageCallback.h + DHTMessageReceiver.cc + DHTMessageReceiver.h + DHTMessageTracker.cc + DHTMessageTracker.h + DHTMessageTrackerEntry.cc + DHTMessageTrackerEntry.h + DHTNode.cc + DHTNode.h + DHTNodeLookupEntry.cc + DHTNodeLookupEntry.h + DHTNodeLookupTask.cc + DHTNodeLookupTask.h + DHTNodeLookupTaskCallback.cc + DHTNodeLookupTaskCallback.h + DHTPeerAnnounceCommand.cc + DHTPeerAnnounceCommand.h + DHTPeerAnnounceEntry.cc + DHTPeerAnnounceEntry.h + DHTPeerAnnounceStorage.cc + DHTPeerAnnounceStorage.h + DHTPeerLookupTask.cc + DHTPeerLookupTask.h + DHTPeerLookupTaskCallback.cc + DHTPeerLookupTaskCallback.h + DHTPingMessage.cc + DHTPingMessage.h + DHTPingReplyMessage.cc + DHTPingReplyMessage.h + DHTPingReplyMessageCallback.h DHTPingTask.cc DHTPingTask.h - DHTQueryMessage.cc - DHTQueryMessage.h - DHTRegistry.cc - DHTRegistry.h - DHTReplaceNodeTask.cc - DHTReplaceNodeTask.h - DHTResponseMessage.cc - DHTResponseMessage.h - DHTRoutingTable.cc - DHTRoutingTable.h - DHTRoutingTableDeserializer.cc - DHTRoutingTableDeserializer.h - DHTRoutingTableSerializer.cc - DHTRoutingTableSerializer.h - DHTSetup.cc - DHTSetup.h - DHTTask.h + DHTQueryMessage.cc + DHTQueryMessage.h + DHTRegistry.cc + DHTRegistry.h + DHTReplaceNodeTask.cc + DHTReplaceNodeTask.h + DHTResponseMessage.cc + DHTResponseMessage.h + DHTRoutingTable.cc + DHTRoutingTable.h + DHTRoutingTableDeserializer.cc + DHTRoutingTableDeserializer.h + DHTRoutingTableSerializer.cc + DHTRoutingTableSerializer.h + DHTSetup.cc + DHTSetup.h + DHTTask.h DHTTaskExecutor.cc DHTTaskExecutor.h - DHTTaskFactory.h + DHTTaskFactory.h DHTTaskFactoryImpl.cc DHTTaskFactoryImpl.h - DHTTaskQueue.h + DHTTaskQueue.h DHTTaskQueueImpl.cc DHTTaskQueueImpl.h - DHTTokenTracker.cc - DHTTokenTracker.h - DHTTokenUpdateCommand.cc - DHTTokenUpdateCommand.h - DHTUnknownMessage.cc - DHTUnknownMessage.h - ExtensionMessage.h + DHTTokenTracker.cc + DHTTokenTracker.h + DHTTokenUpdateCommand.cc + DHTTokenUpdateCommand.h + DHTUnknownMessage.cc + DHTUnknownMessage.h + ExtensionMessage.h ExtensionMessageFactory.h - ExtensionMessageRegistry.cc - ExtensionMessageRegistry.h - HandshakeExtensionMessage.cc - HandshakeExtensionMessage.h - IndexBtMessage.cc - IndexBtMessage.h - IndexBtMessageValidator.cc - IndexBtMessageValidator.h - InitiatorMSEHandshakeCommand.cc - InitiatorMSEHandshakeCommand.h - LpdDispatchMessageCommand.cc - LpdDispatchMessageCommand.h - LpdMessage.cc - LpdMessage.h - LpdMessageDispatcher.cc - LpdMessageDispatcher.h - LpdMessageReceiver.cc - LpdMessageReceiver.h - LpdReceiveMessageCommand.cc - LpdReceiveMessageCommand.h - magnet.cc - magnet.h - MemoryBencodePreDownloadHandler.h + ExtensionMessageRegistry.cc + ExtensionMessageRegistry.h + HandshakeExtensionMessage.cc + HandshakeExtensionMessage.h + IndexBtMessage.cc + IndexBtMessage.h + IndexBtMessageValidator.cc + IndexBtMessageValidator.h + InitiatorMSEHandshakeCommand.cc + InitiatorMSEHandshakeCommand.h + LpdDispatchMessageCommand.cc + LpdDispatchMessageCommand.h + LpdMessage.cc + LpdMessage.h + LpdMessageDispatcher.cc + LpdMessageDispatcher.h + LpdMessageReceiver.cc + LpdMessageReceiver.h + LpdReceiveMessageCommand.cc + LpdReceiveMessageCommand.h + magnet.cc + magnet.h + MemoryBencodePreDownloadHandler.h MSEHandshake.cc MSEHandshake.h - NameResolveCommand.cc - NameResolveCommand.h - Peer.cc - Peer.h - PeerAbstractCommand.cc - PeerAbstractCommand.h - PeerAddrEntry.cc - PeerAddrEntry.h - PeerChokeCommand.cc - PeerChokeCommand.h - PeerConnection.cc - PeerConnection.h - PeerInitiateConnectionCommand.cc - PeerInitiateConnectionCommand.h - PeerInteractionCommand.cc - PeerInteractionCommand.h - PeerListenCommand.cc - PeerListenCommand.h - PeerReceiveHandshakeCommand.cc - PeerReceiveHandshakeCommand.h - PeerSessionResource.cc - PeerSessionResource.h - PeerStorage.h + NameResolveCommand.cc + NameResolveCommand.h + Peer.cc + Peer.h + PeerAbstractCommand.cc + PeerAbstractCommand.h + PeerAddrEntry.cc + PeerAddrEntry.h + PeerChokeCommand.cc + PeerChokeCommand.h + PeerConnection.cc + PeerConnection.h + PeerInitiateConnectionCommand.cc + PeerInitiateConnectionCommand.h + PeerInteractionCommand.cc + PeerInteractionCommand.h + PeerListenCommand.cc + PeerListenCommand.h + PeerReceiveHandshakeCommand.cc + PeerReceiveHandshakeCommand.h + PeerSessionResource.cc + PeerSessionResource.h + PeerStorage.h PriorityPieceSelector.cc PriorityPieceSelector.h - RangeBtMessage.cc - RangeBtMessage.h - RangeBtMessageValidator.cc - RangeBtMessageValidator.h - ReceiverMSEHandshakeCommand.cc - ReceiverMSEHandshakeCommand.h - RequestSlot.cc - RequestSlot.h - SeedCheckCommand.cc - SeedCheckCommand.h - SeedCriteria.h + RangeBtMessage.cc + RangeBtMessage.h + RangeBtMessageValidator.cc + RangeBtMessageValidator.h + ReceiverMSEHandshakeCommand.cc + ReceiverMSEHandshakeCommand.h + RequestSlot.cc + RequestSlot.h + SeedCheckCommand.cc + SeedCheckCommand.h + SeedCriteria.h ShareRatioSeedCriteria.cc ShareRatioSeedCriteria.h - SimpleBtMessage.cc - SimpleBtMessage.h - TimeSeedCriteria.cc - TimeSeedCriteria.h - TrackerWatcherCommand.cc - TrackerWatcherCommand.h - UDPTrackerClient.cc - UDPTrackerClient.h - UDPTrackerRequest.cc - UDPTrackerRequest.h - UnionSeedCriteria.cc - UnionSeedCriteria.h - UTMetadataDataExtensionMessage.cc - UTMetadataDataExtensionMessage.h - UTMetadataExtensionMessage.cc - UTMetadataExtensionMessage.h - UTMetadataPostDownloadHandler.cc - UTMetadataPostDownloadHandler.h - UTMetadataRejectExtensionMessage.cc - UTMetadataRejectExtensionMessage.h - UTMetadataRequestExtensionMessage.cc + SimpleBtMessage.cc + SimpleBtMessage.h + TimeSeedCriteria.cc + TimeSeedCriteria.h + TrackerWatcherCommand.cc + TrackerWatcherCommand.h + UDPTrackerClient.cc + UDPTrackerClient.h + UDPTrackerRequest.cc + UDPTrackerRequest.h + UnionSeedCriteria.cc + UnionSeedCriteria.h + UTMetadataDataExtensionMessage.cc + UTMetadataDataExtensionMessage.h + UTMetadataExtensionMessage.cc + UTMetadataExtensionMessage.h + UTMetadataPostDownloadHandler.cc + UTMetadataPostDownloadHandler.h + UTMetadataRejectExtensionMessage.cc + UTMetadataRejectExtensionMessage.h + UTMetadataRequestExtensionMessage.cc UTMetadataRequestExtensionMessage.h - UTMetadataRequestFactory.cc - UTMetadataRequestFactory.h - UTMetadataRequestTracker.cc - UTMetadataRequestTracker.h - UTPexExtensionMessage.cc - UTPexExtensionMessage.h - ValueBaseBencodeParser.h + UTMetadataRequestFactory.cc + UTMetadataRequestFactory.h + UTMetadataRequestTracker.cc + UTMetadataRequestTracker.h + UTPexExtensionMessage.cc + UTPexExtensionMessage.h + ValueBaseBencodeParser.h XORCloser.h - ZeroBtMessage.cc - ZeroBtMessage.h + ZeroBtMessage.cc + ZeroBtMessage.h ) endif() -if (ENABLE_METALINK) +if(ENABLE_METALINK) set(aria2_SRCS ${aria2_SRCS} - Metalink2RequestGroup.cc - Metalink2RequestGroup.h - MetalinkEntry.cc - MetalinkEntry.h - Metalinker.cc - Metalinker.h - MetalinkMetaurl.cc - MetalinkMetaurl.h - MetalinkParserController.cc - MetalinkParserController.h - MetalinkParserState.cc - MetalinkParserState.h - MetalinkParserStateImpl.cc - MetalinkParserStateImpl.h - MetalinkParserStateMachine.cc - MetalinkParserStateMachine.h - MetalinkParserStateV3Impl.cc - MetalinkParserStateV3Impl.h - MetalinkParserStateV4Impl.cc - MetalinkParserStateV4Impl.h - MetalinkPostDownloadHandler.cc - MetalinkPostDownloadHandler.h - MetalinkResource.cc - MetalinkResource.h - metalink_helper.cc - metalink_helper.h + Metalink2RequestGroup.cc + Metalink2RequestGroup.h + MetalinkEntry.cc + MetalinkEntry.h + Metalinker.cc + Metalinker.h + MetalinkMetaurl.cc + MetalinkMetaurl.h + MetalinkParserController.cc + MetalinkParserController.h + MetalinkParserState.cc + MetalinkParserState.h + MetalinkParserStateImpl.cc + MetalinkParserStateImpl.h + MetalinkParserStateMachine.cc + MetalinkParserStateMachine.h + MetalinkParserStateV3Impl.cc + MetalinkParserStateV3Impl.h + MetalinkParserStateV4Impl.cc + MetalinkParserStateV4Impl.h + MetalinkPostDownloadHandler.cc + MetalinkPostDownloadHandler.h + MetalinkResource.cc + MetalinkResource.h + metalink_helper.cc + metalink_helper.h ) endif() -if (NOT HAVE_ASCTIME_R) +if(NOT HAVE_ASCTIME_R) set(aria2_SRCS ${aria2_SRCS} @@ -1144,7 +1137,7 @@ if (NOT HAVE_ASCTIME_R) ) endif() -if (NOT HAVE_BASENAME) +if(NOT HAVE_BASENAME) set(aria2_SRCS ${aria2_SRCS} @@ -1153,7 +1146,7 @@ if (NOT HAVE_BASENAME) ) endif() -if (NOT HAVE_GETADDRINFO) +if(NOT HAVE_GETADDRINFO) set(aria2_SRCS ${aria2_SRCS} @@ -1162,16 +1155,16 @@ if (NOT HAVE_GETADDRINFO) ) endif() -if (NOT HAVE_GAI_STRERROR) +if(NOT HAVE_GAI_STRERROR) set(aria2_SRCS ${aria2_SRCS} - + gai_strerror.c gai_strerror.h ) endif() -if (NOT HAVE_GETTIMEOFDAY) +if(NOT HAVE_GETTIMEOFDAY) set(aria2_SRCS ${aria2_SRCS} @@ -1180,7 +1173,7 @@ if (NOT HAVE_GETTIMEOFDAY) ) endif() -if (NOT HAVE_LOCALTIME_R) +if(NOT HAVE_LOCALTIME_R) set(aria2_SRCS ${aria2_SRCS} @@ -1189,7 +1182,7 @@ if (NOT HAVE_LOCALTIME_R) ) endif() -if (NOT HAVE_STRPTIME) +if(NOT HAVE_STRPTIME) set(aria2_SRCS ${aria2_SRCS} @@ -1198,7 +1191,7 @@ if (NOT HAVE_STRPTIME) ) endif() -if (NOT HAVE_TIMEGM) +if(NOT HAVE_TIMEGM) set(aria2_SRCS ${aria2_SRCS} @@ -1207,7 +1200,7 @@ if (NOT HAVE_TIMEGM) ) endif() -if (NOT HAVE_DAEMON) +if(NOT HAVE_DAEMON) set(aria2_SRCS ${aria2_SRCS} @@ -1216,7 +1209,7 @@ if (NOT HAVE_DAEMON) ) endif() -if (HAVE_POLL) +if(HAVE_POLL) set(aria2_SRCS ${aria2_SRCS} @@ -1225,7 +1218,7 @@ if (HAVE_POLL) ) endif() -if (HAVE_PORT_ASSOCIATE) +if(HAVE_PORT_ASSOCIATE) set(aria2_SRCS ${aria2_SRCS} @@ -1234,7 +1227,7 @@ if (HAVE_PORT_ASSOCIATE) ) endif() -if (HAVE_KQUEUE) +if(HAVE_KQUEUE) set(aria2_SRCS ${aria2_SRCS} @@ -1243,7 +1236,7 @@ if (HAVE_KQUEUE) ) endif() -if (HAVE_LIBUV) +if(HAVE_LIBUV) set(aria2_SRCS ${aria2_SRCS} @@ -1252,25 +1245,28 @@ if (HAVE_LIBUV) ) endif() -if (ENABLE_LIBARIA2) +if(ENABLE_LIBARIA2) set(aria2_SRCS ${aria2_SRCS} ApiCallbackDownloadEventListener.cc ApiCallbackDownloadEventListener.h - aria2api.cc - aria2api.h - KeepRunningCommand.cc - KeepRunningCommand.h + aria2api.cc + aria2api.h + KeepRunningCommand.cc + KeepRunningCommand.h ) - add_library(aria2 SHARED ${aria2_SRCS}) + + set(LIBARIA2_BUILD_MODE SHARED) + +# add_library(aria2 SHARED ${aria2_SRCS}) else() - add_library(aria2 STATIC ${aria2_SRCS}) + set(LIBARIA2_BUILD_MODE STATIC) + + # add_library(aria2 STATIC ${aria2_SRCS}) endif() - -target_compile_definitions(aria2 PUBLIC PACKAGE_VERSION="${PROJECT_VERSION}") -target_compile_definitions(aria2 PUBLIC PACKAGE="${PROJECT_NAME}") +add_library(aria2 ${LIBARIA2_BUILD_MODE} ${aria2_SRCS}) target_include_directories(aria2 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/includes) target_include_directories(aria2 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) @@ -1278,178 +1274,172 @@ target_include_directories(aria2 INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/includes) if(HAVE_ZLIB) target_include_directories(aria2 PUBLIC ${ZLIB_INCLUDE_DIRS}) - target_link_libraries(aria2 INTERFACE ZLIB::ZLIB) + target_link_libraries(aria2 ZLIB::ZLIB) endif() if(HAVE_LIBUV) target_include_directories(aria2 PUBLIC ${LIBUV_INCLUDE_DIRS}) - target_link_libraries(aria2 INTERFACE LIBUV::LIBUV) + target_link_libraries(aria2 LIBUV::LIBUV) endif() if(HAVE_LIBXML2) target_include_directories(aria2 PUBLIC ${LIBXML2_INCLUDE_DIR}) - target_link_libraries(aria2 INTERFACE LibXml2::LibXml2) + target_link_libraries(aria2 LibXml2::LibXml2) endif() if(HAVE_LIBEXPAT) target_include_directories(aria2 PUBLIC ${EXPAT_INCLUDE_DIRS}) - target_link_libraries(aria2 INTERFACE EXPAT::EXPAT) + target_link_libraries(aria2 EXPAT::EXPAT) endif() if(HAVE_SQLITE3) target_include_directories(aria2 PUBLIC ${SQLite3_INCLUDE_DIRS}) - target_link_libraries(aria2 INTERFACE SQLite::SQLite3) + target_link_libraries(aria2 SQLite::SQLite3) endif() if(HAVE_APPLETLS) - target_link_libraries(aria2 INTERFACE ${APPLETLS_LD_FLAGS}) + target_link_libraries(aria2 ${APPLETLS_LD_FLAGS}) endif() if(HAVE_WINTLS) - target_link_libraries(aria2 INTERFACE ${WINTLS_LIBS}) + target_link_libraries(aria2 ${WINTLS_LIBS}) endif() if(HAVE_LIBGNUTLS) target_include_directories(aria2 PUBLIC ${GNUTLS_INCLUDE_DIR}) target_compile_definitions(aria2 PUBLIC ${LIBGNUTLS_CFLAGS}) - target_link_libraries(aria2 INTERFACE GnuTLS::GnuTLS) + target_link_libraries(aria2 GnuTLS::GnuTLS) endif() if(HAVE_OPENSSL) target_include_directories(aria2 PUBLIC ${OPENSSL_INCLUDE_DIR}) - target_link_libraries(aria2 INTERFACE OpenSSL::SSL) + target_link_libraries(aria2 OpenSSL::SSL) + # target_link_libraries(aria2 INTERFACE OpenSSL::Crypto) endif() if(HAVE_LIBNETTLE) target_include_directories(aria2 PUBLIC ${NETTLE_INCLUDE_DIR}) - target_link_libraries(aria2 INTERFACE Nettle::Nettle) + target_link_libraries(aria2 Nettle::Nettle) endif() if(HAVE_LIBGMP) target_include_directories(aria2 PUBLIC ${GMP_INCLUDE_DIR}) - target_link_libraries(aria2 INTERFACE GMP::GMP) + target_link_libraries(aria2 GMP::GMP) endif() if(HAVE_LIBGCRYPT) target_include_directories(aria2 PUBLIC ${LibGcrypt_INCLUDE_DIR}) - target_link_libraries(aria2 INTERFACE LibGcrypt::LibGcrypt) + target_link_libraries(aria2 LibGcrypt::LibGcrypt) endif() if(HAVE_LIBSSH2) target_include_directories(aria2 PUBLIC ${LIBSSH2_INCLUDE_DIR}) - target_link_libraries(aria2 INTERFACE LibSSH2::LibSSH2) + target_link_libraries(aria2 LibSSH2::LibSSH2) endif() if(HAVE_LIBCARES) target_include_directories(aria2 PUBLIC ${LIBCARES_INCLUDE_DIR}) - target_link_libraries(aria2 INTERFACE Libcares::Libcares) + target_link_libraries(aria2 Libcares::Libcares) endif() if(ENABLE_WEBSOCKET) target_include_directories(aria2 PUBLIC ${WSLAY_INCLUDE_DIR}) - target_link_libraries(aria2 INTERFACE wslay) + target_link_libraries(aria2 wslay) endif() set_target_properties(aria2 PROPERTIES VERSION 0.0.0 SOVERSION 1) install(TARGETS aria2 ${INSTALL_TARGETS_DEFAULT_ARGS}) -target_link_libraries(aria2c PUBLIC aria2) +target_link_libraries(aria2c aria2) - -########### next target ############### +# ########## next target ############### # add_library(aria2_static STATIC ${aria2_SRCS}) +# ########## install files ############### +install(FILES libaria2.pc DESTINATION lib) -########### install files ############### +# original Makefile.am contents follow: -install(FILES libaria2.pc DESTINATION lib) - - - -#original Makefile.am contents follow: - -#SUBDIRS = includes -#bin_PROGRAMS = aria2c -#aria2c_SOURCES = main.cc +# SUBDIRS = includes +# bin_PROGRAMS = aria2c +# aria2c_SOURCES = main.cc # - - -#AR = @AR@ +# AR = @AR@ # -#if ENABLE_LIBARIA2 -#pkgconfigdir = $(libdir)/pkgconfig -#pkgconfig_DATA = libaria2.pc -#DISTCLEANFILES = $(pkgconfig_DATA) +# if ENABLE_LIBARIA2 +# pkgconfigdir = $(libdir)/pkgconfig +# pkgconfig_DATA = libaria2.pc +# DISTCLEANFILES = $(pkgconfig_DATA) # -#lib_LTLIBRARIES = libaria2.la -#SRCS += \ -# ApiCallbackDownloadEventListener.cc ApiCallbackDownloadEventListener.h\ -# aria2api.cc aria2api.h \ -# KeepRunningCommand.cc KeepRunningCommand.h -#else # !ENABLE_LIBARIA2 -#noinst_LTLIBRARIES = libaria2.la -#endif # !ENABLE_LIBARIA2 +# lib_LTLIBRARIES = libaria2.la +# SRCS += \ +# ApiCallbackDownloadEventListener.cc ApiCallbackDownloadEventListener.h\ +# aria2api.cc aria2api.h \ +# KeepRunningCommand.cc KeepRunningCommand.h +# else # !ENABLE_LIBARIA2 +# noinst_LTLIBRARIES = libaria2.la +# endif # !ENABLE_LIBARIA2 # -#libaria2_la_SOURCES = $(SRCS) +# libaria2_la_SOURCES = $(SRCS) # # -#AM_CPPFLAGS = \ -# -I$(top_srcdir)/lib -I$(top_srcdir)/intl\ -# -I$(srcdir)/includes -I$(builddir)/includes\ -# -DLOCALEDIR=\"@localedir@\" @DEFS@ \ -# @EXTRACPPFLAGS@ \ -# @ZLIB_CFLAGS@ \ -# @LIBUV_CFLAGS@ \ -# @LIBXML2_CFLAGS@ \ -# @EXPAT_CFLAGS@ \ -# @SQLITE3_CFLAGS@ \ -# @LIBGNUTLS_CFLAGS@ \ -# @OPENSSL_CFLAGS@ \ -# @LIBNETTLE_CFLAGS@ \ -# @LIBGMP_CFLAGS@ \ -# @LIBGCRYPT_CFLAGS@ \ -# @LIBSSH2_CFLAGS@ \ -# @LIBCARES_CFLAGS@ \ -# @WSLAY_CFLAGS@ \ -# @TCMALLOC_CFLAGS@ \ -# @JEMALLOC_CFLAGS@ +# AM_CPPFLAGS = \ +# -I$(top_srcdir)/lib -I$(top_srcdir)/intl\ +# -I$(srcdir)/includes -I$(builddir)/includes\ +# -DLOCALEDIR=\"@localedir@\" @DEFS@ \ +# @EXTRACPPFLAGS@ \ +# @ZLIB_CFLAGS@ \ +# @LIBUV_CFLAGS@ \ +# @LIBXML2_CFLAGS@ \ +# @EXPAT_CFLAGS@ \ +# @SQLITE3_CFLAGS@ \ +# @LIBGNUTLS_CFLAGS@ \ +# @OPENSSL_CFLAGS@ \ +# @LIBNETTLE_CFLAGS@ \ +# @LIBGMP_CFLAGS@ \ +# @LIBGCRYPT_CFLAGS@ \ +# @LIBSSH2_CFLAGS@ \ +# @LIBCARES_CFLAGS@ \ +# @WSLAY_CFLAGS@ \ +# @TCMALLOC_CFLAGS@ \ +# @JEMALLOC_CFLAGS@ # -#AM_LDFLAGS = \ -# @EXTRALDFLAGS@ \ -# @APPLETLS_LDFLAGS@ +# AM_LDFLAGS = \ +# @EXTRALDFLAGS@ \ +# @APPLETLS_LDFLAGS@ # -#EXTLDADD = @ALLOCA@ \ -# @EXTRALIBS@ \ -# @ZLIB_LIBS@ \ -# @LIBUV_LIBS@ \ -# @LIBXML2_LIBS@ \ -# @EXPAT_LIBS@ \ -# @SQLITE3_LIBS@ \ -# @WINTLS_LIBS@ \ -# @LIBGNUTLS_LIBS@ \ -# @OPENSSL_LIBS@ \ -# @LIBNETTLE_LIBS@ \ -# @LIBGMP_LIBS@ \ -# @LIBGCRYPT_LIBS@ \ -# @LIBSSH2_LIBS@ \ -# @LIBCARES_LIBS@ \ -# @WSLAY_LIBS@ \ -# @TCMALLOC_LIBS@ \ -# @JEMALLOC_LIBS@ \ -# @LTLIBINTL@ +# EXTLDADD = @ALLOCA@ \ +# @EXTRALIBS@ \ +# @ZLIB_LIBS@ \ +# @LIBUV_LIBS@ \ +# @LIBXML2_LIBS@ \ +# @EXPAT_LIBS@ \ +# @SQLITE3_LIBS@ \ +# @WINTLS_LIBS@ \ +# @LIBGNUTLS_LIBS@ \ +# @OPENSSL_LIBS@ \ +# @LIBNETTLE_LIBS@ \ +# @LIBGMP_LIBS@ \ +# @LIBGCRYPT_LIBS@ \ +# @LIBSSH2_LIBS@ \ +# @LIBCARES_LIBS@ \ +# @WSLAY_LIBS@ \ +# @TCMALLOC_LIBS@ \ +# @JEMALLOC_LIBS@ \ +# @LTLIBINTL@ # -#LDADD = libaria2.la +# LDADD = libaria2.la # -#if ENABLE_LIBARIA2 -#libaria2_la_LIBADD = $(EXTLDADD) -#else # !ENABLE_LIBARIA2 -#LDADD += $(EXTLDADD) -#endif # !ENABLE_LIBARIA2 +# if ENABLE_LIBARIA2 +# libaria2_la_LIBADD = $(EXTLDADD) +# else # !ENABLE_LIBARIA2 +# LDADD += $(EXTLDADD) +# endif # !ENABLE_LIBARIA2 # -#AM_CFLAGS = @EXTRACFLAGS@ +# AM_CFLAGS = @EXTRACFLAGS@ # -#AM_CXXFLAGS = @WARNCXXFLAGS@ @CXX1XCXXFLAGS@ @EXTRACXXFLAGS@ +# AM_CXXFLAGS = @WARNCXXFLAGS@ @CXX1XCXXFLAGS@ @EXTRACXXFLAGS@ # From 2e890e4acf7d81db5e9f1dd63beba3e008b26d3e Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Fri, 24 Mar 2023 14:20:22 -0700 Subject: [PATCH 03/22] fix droped Message digest configureation aria2c now compiles under cmake (atleast under linux) Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com> --- CMakeLists.txt | 7 ++++++- src/CMakeLists.txt | 8 ++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 215d3e1f..ce6de861 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -496,18 +496,23 @@ set(USE_MD "" CACHE STRING "What message digest implementation to use") if(HAVE_APPLETLS) set(USE_MD "apple" CACHE STRING "What message digest implementation to use" FORCE) + set(USE_APPLE_MD true CACHE BOOL "use Apple TLS message digest" FORCE) config_h_add_compile_definitions(USE_APPLE_MD=1) elseif(HAVE_LIBNETTLE) set(USE_MD "libnettle" CACHE STRING "What message digest implementation to use" FORCE) + set(USE_LIBNETTLE_MD true CACHE BOOL "use Nettle message digest" FORCE) config_h_add_compile_definitions(USE_LIBNETTLE_MD=1) elseif(HAVE_LIBGCRYPT) set(USE_MD "libgcrypt" CACHE STRING "What message digest implementation to use" FORCE) + set(USE_LIBGCRYPT_MD true CACHE BOOL "use Gcrypt message digest" FORCE) config_h_add_compile_definitions(USE_LIBGCRYPT_MD=1) elseif(HAVE_OPENSSL) set(USE_MD "openssl" CACHE STRING "What message digest implementation to use" FORCE) - config_h_add_compile_definitions(USE_OPEMSSL_MD=1) + set(USE_OPENSSL_MD true CACHE BOOL "use OpenSSL message digest" FORCE) + config_h_add_compile_definitions(USE_OPENSSL_MD=1) else() set(USE_MD "internal" CACHE STRING "What message digest implementation to use" FORCE) + set(USE_INTERNAL_MD true CACHE BOOL "use internal message digest impl" FORCE) config_h_add_compile_definitions(USE_INTERNAL_MD=1) endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fd132a88..e30dd61b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -541,6 +541,14 @@ endif() if(ENABLE_XML_RPC) set(aria2_SRCS ${aria2_SRCS} + + XmlRpcDiskWriter.cc + XmlRpcDiskWriter.h + XmlRpcRequestParserState.h + XmlRpcRequestParserStateImpl.cc + XmlRpcRequestParserStateImpl.h + XmlRpcRequestParserStateMachine.cc + XmlRpcRequestParserStateMachine.h ) endif() From 99def35884706f88c82cbb6d568f40201ea59159 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Fri, 24 Mar 2023 15:57:48 -0700 Subject: [PATCH 04/22] finish up wslay configuration Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com> --- CMakeLists.txt | 16 ++-- cmake/FindCUnit.cmake | 24 ++++++ cmake/FindSphinx.cmake | 25 +++++- deps/wslay/CMakeLists.txt | 139 ++++++++++++++++++++++++++++++- doc/CMakeLists.txt | 8 +- doc/manual-src/CMakeLists.txt | 2 - doc/manual-src/en/CMakeLists.txt | 2 - doc/manual-src/pt/CMakeLists.txt | 2 - doc/manual-src/ru/CMakeLists.txt | 2 - 9 files changed, 194 insertions(+), 26 deletions(-) create mode 100644 cmake/FindCUnit.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index ce6de861..94863fd3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,9 +27,9 @@ config_h_add_compile_definitions(PACKAGE_URL="${PROJECT_HOMEPAGE_URL}") config_h_add_compile_definitions(PACKAGE_BUGREPORT="https://github.com/aria2/aria2/issues") config_h_add_compile_definitions(PACKAGE_VERSION="${PROJECT_VERSION}") config_h_add_compile_definitions(VERSION="${PROJECT_VERSION}") -config_h_add_compile_definitions(HOST="${CMAKE_HOST_SYSTEM_PROCESSOR}") -config_h_add_compile_definitions(BUILD="${CMAKE_HOST_SYSTEM_PROCESSOR}") -config_h_add_compile_definitions(TARGET="${CMAKE_SYSTEM_PROCESSOR}") +config_h_add_compile_definitions(HOST="${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM}") +config_h_add_compile_definitions(BUILD="${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM}") +config_h_add_compile_definitions(TARGET="${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_SYSTEM}-${CMAKE_CXX_COMPILER_TARGET}") if(WIN32) set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -D_POSIX_C_SOURCE=1) @@ -902,14 +902,14 @@ add_compile_definitions(HAVE_CONFIG_H) add_subdirectory(lib) add_subdirectory(deps) add_subdirectory(src) +add_subdirectory(doc) +add_subdirectory(test) -# add_subdirectory(doc) -# add_subdirectory(test) message(STATUS "summary of build options: \n\ -Build: ${CMAKE_HOST_SYSTEM_PROCESSOR} -Host: ${CMAKE_HOST_SYSTEM_PROCESSOR} -Target: ${CMAKE_SYSTEM_PROCESSOR} +Build: ${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM}-${CMAKE_CXX_COMPILER_ID} +Host: ${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM} +Target: ${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_SYSTEM}-${CMAKE_CXX_COMPILER_TARGET} Install prefix: ${CMAKE_INSTALL_PREFIX} CC: ${CMAKE_C_COMPILER} CXX: ${CMAKE_CXX_COMPILER} diff --git a/cmake/FindCUnit.cmake b/cmake/FindCUnit.cmake new file mode 100644 index 00000000..b36fe5cf --- /dev/null +++ b/cmake/FindCUnit.cmake @@ -0,0 +1,24 @@ +# Find the CUnit headers and libraries +# +# CUNIT_INCLUDE_DIRS - The CUnit include directory (directory where CUnit/CUnit.h was found) +# CUNIT_LIBRARIES - The libraries needed to use CUnit +# CUNIT_FOUND - True if CUnit found in system + + +FIND_PATH(CUNIT_INCLUDE_DIR NAMES CUnit/CUnit.h) +MARK_AS_ADVANCED(CUNIT_INCLUDE_DIR) + +FIND_LIBRARY(CUNIT_LIBRARY NAMES + cunit + libcunit + cunitlib +) +MARK_AS_ADVANCED(CUNIT_LIBRARY) + +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(CUnit DEFAULT_MSG CUNIT_LIBRARY CUNIT_INCLUDE_DIR) + +IF(CUnit_FOUND) + SET(CUNIT_LIBRARIES ${CUNIT_LIBRARY}) + SET(CUNIT_INCLUDE_DIRS ${CUNIT_INCLUDE_DIR}) +ENDIF() \ No newline at end of file diff --git a/cmake/FindSphinx.cmake b/cmake/FindSphinx.cmake index d4fc2115..ac22f85f 100644 --- a/cmake/FindSphinx.cmake +++ b/cmake/FindSphinx.cmake @@ -17,4 +17,27 @@ find_program( HINTS ${_PYTHON_PATHS}) mark_as_advanced(SPHINX_EXECUTABLE) -find_package_handle_standard_args(Sphinx DEFAULT_MSG SPHINX_EXECUTABLE) +if(SPHINX_EXECUTABLE) + + if(WIN32 AND PYTHON_EXECUTABLE) + execute_process(COMMAND ${PYTHON_EXECUTABLE} ${SPHINX_EXECUTABLE} --version OUTPUT_VARIABLE SPHINX_VERSION_STR) + else() + execute_process(COMMAND ${SPHINX_EXECUTABLE} --version OUTPUT_VARIABLE SPHINX_VERSION_STR) + endif() + + if (NOT "${SPHINX_VERSION_STR}" STREQUAL "") + if (SPHINX_VERSION_STR MATCHES "sphinx-build ([0-9]+\\.[0-9]+(\\.|a?|b?)([0-9]*)(b?)([0-9]*))") + set (SPHINX_VERSION "${CMAKE_MATCH_1}") + elseif (_Sphinx_VERSION MATCHES "Sphinx v([0-9]+\\.[0-9]+(\\.|b?)([0-9]*)(b?)([0-9]*))") + set (SPHINX_VERSION "${CMAKE_MATCH_1}") + elseif (_Sphinx_VERSION MATCHES "Sphinx \\(sphinx-build\\) ([0-9]+\\.[0-9]+(\\.|a?|b?)([0-9]*)(b?)([0-9]*))") + set (SPHINX_VERSION "${CMAKE_MATCH_1}") + endif () + endif() +endif() + +find_package_handle_standard_args( + Sphinx + REQUIRED_VARS SPHINX_EXECUTABLE SPHINX_VERSION + VERSION_VAR SPHINX_VERSION +) diff --git a/deps/wslay/CMakeLists.txt b/deps/wslay/CMakeLists.txt index d9fa0c39..0c741a91 100644 --- a/deps/wslay/CMakeLists.txt +++ b/deps/wslay/CMakeLists.txt @@ -1,5 +1,13 @@ project(wslay LANGUAGES CXX C VERSION 1.1.1) +set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/../../cmake/") + +# ####### Set compiler flags ######## +set(CMAKE_CXX_STANDARD_REQUIRED true) +set(CMAKE_C_STANDARD_REQUIRED true) +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_C_STANDARD 11) + include(GenerateConfigH) config_h_add_compile_definitions(PACKAGE="${PROJECT_NAME}") @@ -10,11 +18,119 @@ config_h_add_compile_definitions(PACKAGE_URL="${PROJECT_HOMEPAGE_URL}") config_h_add_compile_definitions(PACKAGE_BUGREPORT="t-tujikawa@users.sourceforge.net") config_h_add_compile_definitions(PACKAGE_VERSION="${PROJECT_VERSION}") config_h_add_compile_definitions(VERSION="${PROJECT_VERSION}") -config_h_add_compile_definitions(HOST="${CMAKE_HOST_SYSTEM_PROCESSOR}") -config_h_add_compile_definitions(BUILD="${CMAKE_HOST_SYSTEM_PROCESSOR}") -config_h_add_compile_definitions(TARGET="${CMAKE_SYSTEM_PROCESSOR}") +config_h_add_compile_definitions(HOST="${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM}") +config_h_add_compile_definitions(BUILD="${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM}") +config_h_add_compile_definitions(TARGET="${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_SYSTEM}-${CMAKE_CXX_COMPILER_TARGET}") +set(PACKAGE_VERSION ${PROJECT_VERSION}) + +option(ENABLE_WERROR "Builld with werror" off) + +# #### Check for Libraries ##### +include(CheckLibraryExists) +include(CheckSymbolExists) +include(CheckCXXSymbolExists) +include(CheckIncludeFiles) +include(CheckTypeSize) +include(CheckFunctionExists) + + +if(ENABLE_WERROR) + add_compile_options(-Wall -Werror -Wformat-security) +endif() + +find_package(Sphinx) +if(Sphinx_FOUND) + set(HAVE_SPHINX_BUILD true) +endif() + +if(NOT NETTLE_FOUND) + # may have already been found and imported by parent project + find_package(Nettle 2.4) +endif() + +if(NETTLE_FOUND) + set(HAVE_NETTLE true) +endif() + +find_package(CUnit) +if(CUnit_FOUND) + set(HAVE_CUNIT true) +endif() + +if(WIN32) + # Required for ntoh*/hton* functions. + add_link_options(-lws2_32) + set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} -lws2_32) +endif() + +set(_check_headers + arpa/inet.h + netinet/in.h + stddef.h + stdint.h + stdlib.h + string.h + unistd.h +) + +foreach(header ${_check_headers}) + string(TOUPPER ${header} header_var) + string(REPLACE "." "_" header_var ${header_var}) + string(REPLACE "/" "_" header_var ${header_var}) + set(header_var "HAVE_${header_var}") + set(${header_var}) + check_include_file(${header} ${header_var}) + + if(${header_var}) + config_h_add_compile_definitions(${header_var}) + endif() +endforeach() + +unset(_check_headers) + +if(WIN32) + # Need winsock2.h for ntoh*/hton* functions. + check_include_file(winsock2.h HAVE_WINSOCK2_H) + + if(HAVE_WINSOCK2_H) + config_h_add_compile_definitions(HAVE_WINSOCK2_H) + endif() +endif() + +check_type_size(ptrdiff_t PTRDIFF_T LANGUAGE CXX) +if(PTRDIFF_T) + set(HAVE_PTRDIFF_T true) + config_h_add_compile_definitions(HAVE_PTRDIFF_T) +endif() + +set(_check_funcs + memmove + memset + ntohl + ntohs + htons +) + +foreach(func ${_check_funcs}) + string(TOUPPER ${func} func_var) + set(func_var "HAVE_${func_var}") + set(${func_var}) + check_function_exists(${func} ${func_var}) + + if(${func_var}) + config_h_add_compile_definitions(${func_var}) + endif() +endforeach() + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/lib/includes/wslay/wslayver.h.in ${CMAKE_CURRENT_SOURCE_DIR}/lib/includes/wslay/wslayver.h) + +unset(_check_funcs) + +if(HAVE_NETTLE AND UNIX) + set(BUILD_EXAMPLES true) + set(ENABLE_EXAMPLES true) +endif() -add_link_options(${EXTRALIBS}) config_h_generate_header(config) # pickup the generated config.h @@ -25,6 +141,21 @@ add_subdirectory(lib) add_subdirectory(tests) +message(STATUS "summary of build options: + + version: ${PROJECT_VERSION} shared $LT_CURRENT:$LT_REVISION:$LT_AGE + Host type: ${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM} + Install prefix: ${CMAKE_INSTALL_PREFIX} + C compiler: ${CMAKE_CXX_COMPILER} + CFlags: ${CMAKE_C_FLAGS} + Library types: Shared=${enable_shared}, Static=${enable_static} + CUnit: ${HAVE_CUNIT} + Nettle: ${HAVE_NETTLE} + Build examples: ${BUILD_EXAMPLES} +") + + + ########### install files ############### diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 56cc85c4..505997d7 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -1,14 +1,12 @@ -include_directories(${KDE4_INCLUDES} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ) - add_subdirectory(manual-src) ########### install files ############### -install(FILES xmlrpc/aria2mon xmlrpc/aria2rpc xmlrpc/README.txt DESTINATION ) -install(FILES bash_completion/README.txt DESTINATION ) -install(FILES bash_completion/aria2c DESTINATION ) +install(FILES xmlrpc/aria2mon xmlrpc/aria2rpc xmlrpc/README.txt DESTINATION ${CMAKE_INSTALL_DOCDIR}/xmlrpc) +install(FILES bash_completion/README.txt DESTINATION ${CMAKE_INSTALL_DOCDIR}/bash_completion) +install(FILES bash_completion/aria2c DESTINATION ${CMAKE_INSTALL_DOCDIR}/bash_completion) diff --git a/doc/manual-src/CMakeLists.txt b/doc/manual-src/CMakeLists.txt index 66e0c529..0c1ca1c3 100644 --- a/doc/manual-src/CMakeLists.txt +++ b/doc/manual-src/CMakeLists.txt @@ -1,6 +1,4 @@ -include_directories(${KDE4_INCLUDES} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ) - add_subdirectory(en) add_subdirectory(ru) add_subdirectory(pt) diff --git a/doc/manual-src/en/CMakeLists.txt b/doc/manual-src/en/CMakeLists.txt index 36ab1f50..928457a2 100644 --- a/doc/manual-src/en/CMakeLists.txt +++ b/doc/manual-src/en/CMakeLists.txt @@ -1,6 +1,4 @@ -include_directories(${KDE4_INCLUDES} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ) - ########### install files ############### diff --git a/doc/manual-src/pt/CMakeLists.txt b/doc/manual-src/pt/CMakeLists.txt index 20cad3b2..5786741b 100644 --- a/doc/manual-src/pt/CMakeLists.txt +++ b/doc/manual-src/pt/CMakeLists.txt @@ -1,6 +1,4 @@ -include_directories(${KDE4_INCLUDES} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ) - ########### install files ############### diff --git a/doc/manual-src/ru/CMakeLists.txt b/doc/manual-src/ru/CMakeLists.txt index 1a46a1f3..9fffe653 100644 --- a/doc/manual-src/ru/CMakeLists.txt +++ b/doc/manual-src/ru/CMakeLists.txt @@ -1,6 +1,4 @@ -include_directories(${KDE4_INCLUDES} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ) - ########### install files ############### From 731aec33db90cb0d81fd18e209b316f18ab6d792 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Sat, 25 Mar 2023 04:03:21 -0700 Subject: [PATCH 05/22] add defines and macros to support MSVC --- CMakeLists.txt | 14 ++++++++- cmake/GenerateConfigH.cmake | 9 ++++++ deps/wslay/CMakeLists.txt | 21 ++++++++++++++ deps/wslay/examples/echoserv.cc | 1 + deps/wslay/examples/fork-echoserv.c | 3 ++ deps/wslay/examples/testclient.cc | 3 ++ deps/wslay/lib/includes/wslay/wslay.h | 5 ++++ src/AbstractDiskWriter.cc | 42 +++++++++++++++------------ src/AbstractDiskWriter.h | 2 +- src/BinaryStream.h | 4 ++- src/BtFileAllocationEntry.cc | 2 +- src/BufferedFile.cc | 4 +-- src/CMakeLists.txt | 13 +++++++++ src/ConsoleStatCalc.cc | 8 +++-- src/Context.cc | 4 ++- src/DefaultPieceStorage.cc | 2 +- src/DownloadCommand.h | 4 ++- src/FeatureConfig.cc | 2 +- src/File.cc | 18 +++++++----- src/FileAllocationIterator.h | 4 ++- src/FtpConnection.cc | 2 +- src/GZipFile.cc | 2 +- src/IteratableValidator.h | 4 ++- src/LibuvEventPoll.cc | 2 +- src/Logger.cc | 4 ++- src/LpdMessageReceiver.cc | 2 +- src/MultiUrlRequestInfo.cc | 2 +- src/OptionParser.cc | 4 ++- src/PeerConnection.h | 4 ++- src/Platform.cc | 2 +- src/ProgressAwareEntry.h | 4 ++- src/Range.h | 4 ++- src/RequestGroup.cc | 2 +- src/RequestGroupMan.cc | 4 ++- src/SelectEventPoll.cc | 22 +++++++------- src/SelectEventPoll.h | 2 +- src/SimpleRandomizer.cc | 12 +++++--- src/SimpleRandomizer.h | 4 +-- src/SocketCore.cc | 26 +++++++++-------- src/a2io.h | 8 +++-- src/a2netcompat.h | 9 +++--- src/a2time.h | 7 +++-- src/asctime_r.c | 4 +-- src/common.h | 9 ++++-- src/console.cc | 4 +-- src/daemon.cc | 4 ++- src/fmt.h | 2 +- src/gai_strerror.h | 2 +- src/getaddrinfo.c | 2 +- src/getaddrinfo.h | 8 ++--- src/gettimeofday.c | 2 +- src/gettimeofday.h | 6 ++-- src/libgen.h | 2 +- src/localtime_r.c | 4 +-- src/main.cc | 8 +++-- src/util.cc | 20 ++++++------- src/util.h | 16 +++++++--- test/FileTest.cc | 6 ++-- test/LpdMessageDispatcherTest.cc | 2 +- test/Metalink2RequestGroupTest.cc | 2 +- test/TimeTest.cc | 2 +- test/UtilTest2.cc | 4 +-- 62 files changed, 268 insertions(+), 138 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 94863fd3..9aa6a1af 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,7 +32,7 @@ config_h_add_compile_definitions(BUILD="${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_H config_h_add_compile_definitions(TARGET="${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_SYSTEM}-${CMAKE_CXX_COMPILER_TARGET}") if(WIN32) - set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -D_POSIX_C_SOURCE=1) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_POSIX_C_SOURCE=1") set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} -Wl,--dynamicbase -Wl,--nxcompat) set(CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS} -Wl,--dynamicbase -Wl,--nxcompat) set(CMAKE_STATIC_LINKER_FLAGS_LINKER_FLAGS ${CMAKE_STATIC_LINKER_FLAGS} -Wl,--dynamicbase -Wl,--nxcompat) @@ -79,6 +79,16 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") # using Intel C++ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") # using Visual Studio C++ + # config_h_add_compile_definitions(__MSVC__=1) # USE _MSC_VER + add_compile_definitions(NOMINMAX) + config_h_add_compile_macro("__restrict__ __restrict") + config_h_add_compile_macro("__attribute__(unused) /*Empty*/") +endif() + +if(WIN32 AND NOT MINGW) + set(NO_UNIX) + config_h_add_compile_macro("mode_t int") + config_h_add_compile_definitions(NO_UNIX=1) endif() if(CMAKE_C_COMPILER_ID STREQUAL "GNU") @@ -350,6 +360,8 @@ if(WITH_OPENSSL) if(OPENSSL_FOUND AND NOT HAVE_SSL) set(HAVE_OPENSSL yes CACHE BOOL "Define is you have openssl" FORCE) + set(OPENSSL_CFLAGS "") + set(OPENSSL_LIBS ${OPENSSL_LIBRARIES}) config_h_add_compile_definitions(HAVE_OPENSSL=1) set(save_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) diff --git a/cmake/GenerateConfigH.cmake b/cmake/GenerateConfigH.cmake index 45b5ef79..e73f8db9 100644 --- a/cmake/GenerateConfigH.cmake +++ b/cmake/GenerateConfigH.cmake @@ -2,6 +2,10 @@ function(config_h_add_compile_definitions definitions) set(${PROJECT_NAME}_CONFIG_H_definitions ${${PROJECT_NAME}_CONFIG_H_definitions} ${definitions} PARENT_SCOPE) endfunction() +function(config_h_add_compile_macro definitions) + set(${PROJECT_NAME}_CONFIG_H_macros ${${PROJECT_NAME}_CONFIG_H_macros} ${definitions} PARENT_SCOPE) +endfunction() + function(config_h_generate_header name) write_file(${CMAKE_CURRENT_BINARY_DIR}/${name}.h.cmake.in "/* config.h.in. Generated from cmake*/\n") foreach(def ${${PROJECT_NAME}_CONFIG_H_definitions}) @@ -18,5 +22,10 @@ function(config_h_generate_header name) endif() write_file(${CMAKE_CURRENT_BINARY_DIR}/${name}.h.cmake.in "#define ${def_name} @${def_name}_config_h_val@\n" APPEND) endforeach() + + foreach(macro ${${PROJECT_NAME}_CONFIG_H_macros}) + write_file(${CMAKE_CURRENT_BINARY_DIR}/${name}.h.cmake.in "#define ${macro} \n" APPEND) + endforeach() + configure_file(${CMAKE_CURRENT_BINARY_DIR}/${name}.h.cmake.in ${name}.h) endfunction() \ No newline at end of file diff --git a/deps/wslay/CMakeLists.txt b/deps/wslay/CMakeLists.txt index 0c741a91..593799b5 100644 --- a/deps/wslay/CMakeLists.txt +++ b/deps/wslay/CMakeLists.txt @@ -33,6 +33,27 @@ include(CheckIncludeFiles) include(CheckTypeSize) include(CheckFunctionExists) +if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") +# using Clang +elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + # using GCC + set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -pipe) + +elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") +# using Intel C++ +elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + # using Visual Studio C++ + # config_h_add_compile_definitions(__MSVC__=1) # USE _MSC_VER + add_compile_definitions(NOMINMAX) + config_h_add_compile_macro("__restrict__ __restrict") + config_h_add_compile_macro("__attribute__(unused) /*Empty*/") +endif() + +if(WIN32 AND NOT MINGW) + set(NO_UNIX) + config_h_add_compile_definitions(NO_UNIX=1) +endif() + if(ENABLE_WERROR) add_compile_options(-Wall -Werror -Wformat-security) diff --git a/deps/wslay/examples/echoserv.cc b/deps/wslay/examples/echoserv.cc index 48e5d3f1..70fcf631 100644 --- a/deps/wslay/examples/echoserv.cc +++ b/deps/wslay/examples/echoserv.cc @@ -27,6 +27,7 @@ // g++ -Wall -O2 -g -o echoserv echoserv.cc -L../lib/.libs -I../lib/includes -lwslay -lnettle // $ export LD_LIBRARY_PATH=../lib/.libs // $ ./a.out 9000 + #include #include #include diff --git a/deps/wslay/examples/fork-echoserv.c b/deps/wslay/examples/fork-echoserv.c index 3f2b2a00..fc21e5a7 100644 --- a/deps/wslay/examples/fork-echoserv.c +++ b/deps/wslay/examples/fork-echoserv.c @@ -35,6 +35,9 @@ * $ export LD_LIBRARY_PATH=../lib/.libs * $ ./a.out 9000 */ + +#include "config.h" + #include #include #include diff --git a/deps/wslay/examples/testclient.cc b/deps/wslay/examples/testclient.cc index 03ce0240..63262db2 100644 --- a/deps/wslay/examples/testclient.cc +++ b/deps/wslay/examples/testclient.cc @@ -26,6 +26,9 @@ // $ g++ -Wall -O2 -g -o testclient testclient.cc -L../lib/.libs -I../lib/includes -lwslay -lnettle // $ export LD_LIBRARY_PATH=../lib/.libs // $ ./a.out localhost 9001 + +#include "config.h" + #include #include #include diff --git a/deps/wslay/lib/includes/wslay/wslay.h b/deps/wslay/lib/includes/wslay/wslay.h index 77a4e825..d7ed2c67 100644 --- a/deps/wslay/lib/includes/wslay/wslay.h +++ b/deps/wslay/lib/includes/wslay/wslay.h @@ -33,6 +33,11 @@ extern "C" { #include #include +#if defined(_MSC_VER) +#include +typedef SSIZE_T ssize_t; +#endif + /* * wslay/wslayver.h is generated from wslay/wslayver.h.in by * configure. The projects which do not use autotools can set diff --git a/src/AbstractDiskWriter.cc b/src/AbstractDiskWriter.cc index 52efc012..0bd84248 100644 --- a/src/AbstractDiskWriter.cc +++ b/src/AbstractDiskWriter.cc @@ -34,7 +34,9 @@ /* copyright --> */ #include "AbstractDiskWriter.h" -#include +#ifndef NO_UNIX +# include +#endif #ifdef HAVE_MMAP # include #endif // HAVE_MMAP @@ -54,12 +56,16 @@ #include "error_code.h" #include "LogFactory.h" +#if defined(_MSC_VER) +# include +#endif + namespace aria2 { AbstractDiskWriter::AbstractDiskWriter(const std::string& filename) : filename_(filename), fd_(A2_BAD_FD), -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) mapView_(0), #else // !__MINGW32__ #endif // !__MINGW32__ @@ -78,7 +84,7 @@ namespace { // the value of GetLastError(). Otherwise, return errno. int fileError() { -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) return GetLastError(); #else // !__MINGW32__ return errno; @@ -92,7 +98,7 @@ namespace { // errno. std::string fileStrerror(int errNum) { -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) auto msg = util::formatLastError(errNum); if (msg.empty()) { char buf[256]; @@ -113,7 +119,7 @@ void AbstractDiskWriter::openFile(int64_t totalLength) } catch (RecoverableException& e) { if ( -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) e.getErrNum() == ERROR_FILE_NOT_FOUND || e.getErrNum() == ERROR_PATH_NOT_FOUND #else // !__MINGW32__ @@ -133,7 +139,7 @@ void AbstractDiskWriter::closeFile() #if defined(HAVE_MMAP) || defined(__MINGW32__) if (mapaddr_) { int errNum = 0; -# ifdef __MINGW32__ +# if defined(__MINGW32__) || defined(_MSC_VER) if (!UnmapViewOfFile(mapaddr_)) { errNum = GetLastError(); } @@ -157,7 +163,7 @@ void AbstractDiskWriter::closeFile() } #endif // HAVE_MMAP || defined __MINGW32__ if (fd_ != A2_BAD_FD) { -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) CloseHandle(fd_); #else // !__MINGW32__ close(fd_); @@ -167,7 +173,7 @@ void AbstractDiskWriter::closeFile() } namespace { -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) HANDLE openFileWithFlags(const std::string& filename, int flags, error_code::Value errCode) { @@ -265,7 +271,7 @@ ssize_t AbstractDiskWriter::writeDataInternal(const unsigned char* data, ssize_t writtenLength = 0; seek(offset); while ((size_t)writtenLength < len) { -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) DWORD nwrite; if (WriteFile(fd_, data + writtenLength, len - writtenLength, &nwrite, 0)) { @@ -303,7 +309,7 @@ ssize_t AbstractDiskWriter::readDataInternal(unsigned char* data, size_t len, } else { seek(offset); -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) DWORD nread; if (ReadFile(fd_, data, len, &nread, 0)) { return nread; @@ -323,7 +329,7 @@ ssize_t AbstractDiskWriter::readDataInternal(unsigned char* data, size_t len, void AbstractDiskWriter::seek(int64_t offset) { assert(offset >= 0); -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) LARGE_INTEGER fileLength; fileLength.QuadPart = offset; if (SetFilePointerEx(fd_, fileLength, 0, FILE_BEGIN) == 0) @@ -345,7 +351,7 @@ void AbstractDiskWriter::ensureMmapWrite(size_t len, int64_t offset) if (mapaddr_) { if (static_cast(len + offset) > maplen_) { int errNum = 0; -# ifdef __MINGW32__ +# if defined(__MINGW32__) || defined(_MSC_VER) if (!UnmapViewOfFile(mapaddr_)) { errNum = GetLastError(); } @@ -385,7 +391,7 @@ void AbstractDiskWriter::ensureMmapWrite(size_t len, int64_t offset) int errNum = 0; if (static_cast(len + offset) <= filesize) { -# ifdef __MINGW32__ +# if defined(__MINGW32__) || defined(_MSC_VER) mapView_ = CreateFileMapping(fd_, 0, PAGE_READWRITE, filesize >> 32, filesize & 0xffffffffu, 0); if (mapView_) { @@ -432,7 +438,7 @@ namespace { bool isDiskFullError(int errNum) { return -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) errNum == ERROR_DISK_FULL || errNum == ERROR_HANDLE_DISK_FULL #else // !__MINGW32__ errNum == ENOSPC @@ -483,7 +489,7 @@ void AbstractDiskWriter::truncate(int64_t length) if (fd_ == A2_BAD_FD) { throw DL_ABORT_EX("File not yet opened."); } -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) // Since mingw32's ftruncate cannot handle over 2GB files, we use // SetEndOfFile instead. seek(length); @@ -505,7 +511,7 @@ void AbstractDiskWriter::allocate(int64_t offset, int64_t length, bool sparse) throw DL_ABORT_EX("File not yet opened."); } if (sparse) { -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) DWORD bytesReturned; if (!DeviceIoControl(fd_, FSCTL_SET_SPARSE, 0, 0, 0, 0, &bytesReturned, 0)) { @@ -517,7 +523,7 @@ void AbstractDiskWriter::allocate(int64_t offset, int64_t length, bool sparse) return; } #ifdef HAVE_SOME_FALLOCATE -# ifdef __MINGW32__ +# if defined(__MINGW32__) || defined(_MSC_VER) truncate(offset + length); if (!SetFileValidData(fd_, offset + length)) { auto errNum = fileError(); @@ -595,7 +601,7 @@ void AbstractDiskWriter::flushOSBuffers() if (fd_ == A2_BAD_FD) { return; } -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) FlushFileBuffers(fd_); #else // !__MINGW32__ fsync(fd_); diff --git a/src/AbstractDiskWriter.h b/src/AbstractDiskWriter.h index 96518a68..ed50ea7c 100644 --- a/src/AbstractDiskWriter.h +++ b/src/AbstractDiskWriter.h @@ -44,7 +44,7 @@ class AbstractDiskWriter : public DiskWriter { private: std::string filename_; -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) HANDLE fd_; // The handle for memory mapped file. mmap equivalent in Windows. HANDLE mapView_; diff --git a/src/BinaryStream.h b/src/BinaryStream.h index 8b442475..77bd4cb3 100644 --- a/src/BinaryStream.h +++ b/src/BinaryStream.h @@ -37,7 +37,9 @@ #include "common.h" -#include +#ifndef NO_UNIX +# include +#endif namespace aria2 { diff --git a/src/BtFileAllocationEntry.cc b/src/BtFileAllocationEntry.cc index 8ef15265..5a8dea06 100644 --- a/src/BtFileAllocationEntry.cc +++ b/src/BtFileAllocationEntry.cc @@ -92,7 +92,7 @@ void BtFileAllocationEntry::prepareForNextAction( } } else { -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) if (!diskAdaptor->isReadOnlyEnabled()) { // On Windows, if aria2 opens files with GENERIC_WRITE access // right, some programs cannot open them aria2 is seeding. To diff --git a/src/BufferedFile.cc b/src/BufferedFile.cc index 0f9a97b6..6384eb8f 100644 --- a/src/BufferedFile.cc +++ b/src/BufferedFile.cc @@ -47,7 +47,7 @@ BufferedFile::BufferedFile(const char* filename, const char* mode) : fp_(strcmp(DEV_STDIN, filename) == 0 ? stdin : -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) a2fopen(utf8ToWChar(filename).c_str(), utf8ToWChar(mode).c_str()) #else // !__MINGW32__ a2fopen(filename, mode) @@ -81,7 +81,7 @@ int BufferedFile::onClose() int rv = 0; if (fp_) { fflush(fp_); -#ifndef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) fsync(fileno(fp_)); #else // __MINGW32__ _commit(fileno(fp_)); diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e30dd61b..dcf31a8f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1282,6 +1282,7 @@ target_include_directories(aria2 INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/includes) if(HAVE_ZLIB) target_include_directories(aria2 PUBLIC ${ZLIB_INCLUDE_DIRS}) + target_include_directories(main PUBLIC ${LIBXML2_INCLUDE_DIR}) target_link_libraries(aria2 ZLIB::ZLIB) endif() @@ -1292,16 +1293,19 @@ endif() if(HAVE_LIBXML2) target_include_directories(aria2 PUBLIC ${LIBXML2_INCLUDE_DIR}) + target_include_directories(main PUBLIC ${LIBXML2_INCLUDE_DIR}) target_link_libraries(aria2 LibXml2::LibXml2) endif() if(HAVE_LIBEXPAT) target_include_directories(aria2 PUBLIC ${EXPAT_INCLUDE_DIRS}) + target_include_directories(main PUBLIC ${EXPAT_INCLUDE_DIRS}) target_link_libraries(aria2 EXPAT::EXPAT) endif() if(HAVE_SQLITE3) target_include_directories(aria2 PUBLIC ${SQLite3_INCLUDE_DIRS}) + target_include_directories(main PUBLIC ${SQLite3_INCLUDE_DIRS}) target_link_libraries(aria2 SQLite::SQLite3) endif() @@ -1316,11 +1320,15 @@ endif() if(HAVE_LIBGNUTLS) target_include_directories(aria2 PUBLIC ${GNUTLS_INCLUDE_DIR}) target_compile_definitions(aria2 PUBLIC ${LIBGNUTLS_CFLAGS}) + target_include_directories(main PUBLIC ${GNUTLS_INCLUDE_DIR}) + target_compile_definitions(main PUBLIC ${LIBGNUTLS_CFLAGS}) target_link_libraries(aria2 GnuTLS::GnuTLS) endif() if(HAVE_OPENSSL) target_include_directories(aria2 PUBLIC ${OPENSSL_INCLUDE_DIR}) + target_include_directories(main PUBLIC ${OPENSSL_INCLUDE_DIR}) + target_link_libraries(aria2 OpenSSL::SSL) # target_link_libraries(aria2 INTERFACE OpenSSL::Crypto) @@ -1328,21 +1336,25 @@ endif() if(HAVE_LIBNETTLE) target_include_directories(aria2 PUBLIC ${NETTLE_INCLUDE_DIR}) + target_include_directories(main PUBLIC ${NETTLE_INCLUDE_DIR}) target_link_libraries(aria2 Nettle::Nettle) endif() if(HAVE_LIBGMP) target_include_directories(aria2 PUBLIC ${GMP_INCLUDE_DIR}) + target_include_directories(main PUBLIC ${GMP_INCLUDE_DIR}) target_link_libraries(aria2 GMP::GMP) endif() if(HAVE_LIBGCRYPT) target_include_directories(aria2 PUBLIC ${LibGcrypt_INCLUDE_DIR}) + target_include_directories(main PUBLIC ${LibGcrypt_INCLUDE_DIR}) target_link_libraries(aria2 LibGcrypt::LibGcrypt) endif() if(HAVE_LIBSSH2) target_include_directories(aria2 PUBLIC ${LIBSSH2_INCLUDE_DIR}) + target_include_directories(main PUBLIC ${LIBSSH2_INCLUDE_DIR}) target_link_libraries(aria2 LibSSH2::LibSSH2) endif() @@ -1353,6 +1365,7 @@ endif() if(ENABLE_WEBSOCKET) target_include_directories(aria2 PUBLIC ${WSLAY_INCLUDE_DIR}) + target_include_directories(main PUBLIC ${WSLAY_INCLUDE_DIR}) target_link_libraries(aria2 wslay) endif() diff --git a/src/ConsoleStatCalc.cc b/src/ConsoleStatCalc.cc index a28a4a54..343f7d37 100644 --- a/src/ConsoleStatCalc.cc +++ b/src/ConsoleStatCalc.cc @@ -40,7 +40,9 @@ #ifdef HAVE_SYS_IOCTL_H # include #endif // HAVE_SYS_IOCTL_H -#include +#ifndef NO_UNIX +# include +#endif #include #include @@ -272,7 +274,7 @@ ConsoleStatCalc::ConsoleStatCalc(std::chrono::seconds summaryInterval, : summaryInterval_(std::move(summaryInterval)), readoutVisibility_(true), truncate_(true), -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) isTTY_(true), #else // !__MINGW32__ isTTY_(isatty(STDOUT_FILENO) == 1), @@ -301,7 +303,7 @@ void ConsoleStatCalc::calculateStat(const DownloadEngine* e) unsigned short int cols = 79; if (isTTY_) { -#ifndef __MINGW32__ +#if efined(__MINGW32__) || defined(_MSC_VER) # ifdef HAVE_TERMIOS_H struct winsize size; if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &size) == 0) { diff --git a/src/Context.cc b/src/Context.cc index d12775bb..ffa8f5b7 100644 --- a/src/Context.cc +++ b/src/Context.cc @@ -34,7 +34,9 @@ /* copyright --> */ #include "Context.h" -#include +#ifndef NO_UNIX +# include +#endif #include #ifdef HAVE_SYS_RESOURCE_H diff --git a/src/DefaultPieceStorage.cc b/src/DefaultPieceStorage.cc index e08b1b18..f7d7ce2d 100644 --- a/src/DefaultPieceStorage.cc +++ b/src/DefaultPieceStorage.cc @@ -485,7 +485,7 @@ void DefaultPieceStorage::completePiece(const std::shared_ptr& piece) #ifdef ENABLE_BITTORRENT if (downloadContext_->hasAttribute(CTX_ATTR_BT)) { if (!bittorrent::getTorrentAttrs(downloadContext_)->metadata.empty()) { -# ifdef __MINGW32__ +# if defined(__MINGW32__) || defined(_MSC_VER) // On Windows, if aria2 opens files with GENERIC_WRITE access // right, some programs cannot open them aria2 is seeding. To // avoid this situation, re-open the files with read-only diff --git a/src/DownloadCommand.h b/src/DownloadCommand.h index aeee4416..e4ccad41 100644 --- a/src/DownloadCommand.h +++ b/src/DownloadCommand.h @@ -37,7 +37,9 @@ #include "AbstractCommand.h" -#include +#ifndef NO_UNIX +# include +#endif namespace aria2 { diff --git a/src/FeatureConfig.cc b/src/FeatureConfig.cc index 2b43c8b1..75f78a44 100644 --- a/src/FeatureConfig.cc +++ b/src/FeatureConfig.cc @@ -273,7 +273,7 @@ std::string usedCompilerAndPlatform() #elif defined(__GNUG__) -# ifdef __MINGW32__ +# if defined(__MINGW32__) || defined(_MSC_VER) rv << "mingw "; # ifdef __MINGW32_MAJOR_VERSION rv << (int)__MINGW32_MAJOR_VERSION; diff --git a/src/File.cc b/src/File.cc index a98dca61..4faf8cae 100644 --- a/src/File.cc +++ b/src/File.cc @@ -39,7 +39,9 @@ #ifdef HAVE_UTIME_H # include #endif // HAVE_UTIME_H -#include +#ifndef NO_UNIX +# include +#endif #include #include @@ -120,7 +122,7 @@ bool File::remove() } } -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) namespace { HANDLE openFile(const std::string& filename, bool readOnly = true) { @@ -136,7 +138,7 @@ HANDLE openFile(const std::string& filename, bool readOnly = true) int64_t File::size() { -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) // _wstat cannot be used for symlink. It always returns 0. Quoted // from https://msdn.microsoft.com/en-us/library/14h5k7ff.aspx: // @@ -165,7 +167,7 @@ bool File::mkdirs() if (isDir()) { return false; } -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) std::string path = name_; for (std::string::iterator i = path.begin(), eoi = path.end(); i != eoi; ++i) { @@ -224,7 +226,7 @@ bool File::mkdirs() if (i != end) { ++i; } -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) if (*(j - 1) == ':') { // This is a drive letter, e.g. C:, so skip it. continue; @@ -289,7 +291,7 @@ bool File::isDir(const std::string& filename) { return File(filename).isDir(); } bool File::renameTo(const std::string& dest) { -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) // MinGW's rename() doesn't delete an existing destination. Better // to use MoveFileEx, which usually provides atomic move in aria2 // usecase. @@ -374,7 +376,7 @@ Time File::getModifiedTime() std::string File::getCurrentDir() { -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) const size_t buflen = 2048; wchar_t buf[buflen]; if (_wgetcwd(buf, buflen)) { @@ -397,7 +399,7 @@ std::string File::getCurrentDir() const char* File::getPathSeparators() { -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) return "/\\"; #else // !__MINGW32__ return "/"; diff --git a/src/FileAllocationIterator.h b/src/FileAllocationIterator.h index d4aeb1a7..2ac821f4 100644 --- a/src/FileAllocationIterator.h +++ b/src/FileAllocationIterator.h @@ -37,7 +37,9 @@ #include "common.h" -#include +#ifndef NO_UNIX +# include +#endif namespace aria2 { diff --git a/src/FtpConnection.cc b/src/FtpConnection.cc index 0893d294..75bc49ec 100644 --- a/src/FtpConnection.cc +++ b/src/FtpConnection.cc @@ -368,7 +368,7 @@ int FtpConnection::receiveResponse() } } -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) # define LONGLONG_PRINTF "%I64d" # define ULONGLONG_PRINTF "%I64u" # define LONGLONG_SCANF "%I64d" diff --git a/src/GZipFile.cc b/src/GZipFile.cc index 80ef10ee..b85665d8 100644 --- a/src/GZipFile.cc +++ b/src/GZipFile.cc @@ -50,7 +50,7 @@ GZipFile::GZipFile(const char* filename, const char* mode) strcmp(DEV_STDIN, filename) == 0 ? stdin : -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) a2fopen(utf8ToWChar(filename).c_str(), utf8ToWChar(mode).c_str()) #else // !__MINGW32__ a2fopen(filename, mode) diff --git a/src/IteratableValidator.h b/src/IteratableValidator.h index dcd52b8d..340c643b 100644 --- a/src/IteratableValidator.h +++ b/src/IteratableValidator.h @@ -37,7 +37,9 @@ #include "common.h" -#include +#ifndef NO_UNIX +# include +#endif namespace aria2 { diff --git a/src/LibuvEventPoll.cc b/src/LibuvEventPoll.cc index 1b0b549d..9a90e97f 100644 --- a/src/LibuvEventPoll.cc +++ b/src/LibuvEventPoll.cc @@ -34,7 +34,7 @@ */ /* copyright --> */ -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) # ifdef _WIN32_WINNT # undef _WIN32_WINNT # endif // _WIN32_WINNT diff --git a/src/Logger.cc b/src/Logger.cc index 87168e16..825a524c 100644 --- a/src/Logger.cc +++ b/src/Logger.cc @@ -34,7 +34,9 @@ /* copyright --> */ #include "Logger.h" -#include +#ifndef NO_UNIX +# include +#endif #include #include #include diff --git a/src/LpdMessageReceiver.cc b/src/LpdMessageReceiver.cc index a74b33b7..cceb7584 100644 --- a/src/LpdMessageReceiver.cc +++ b/src/LpdMessageReceiver.cc @@ -59,7 +59,7 @@ bool LpdMessageReceiver::init(const std::string& localAddr) { try { socket_ = std::make_shared(SOCK_DGRAM); -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) // Binding multicast address fails under Windows. socket_->bindWithFamily(multicastPort_, AF_INET); #else // !__MINGW32__ diff --git a/src/MultiUrlRequestInfo.cc b/src/MultiUrlRequestInfo.cc index 833188e3..64027e1a 100644 --- a/src/MultiUrlRequestInfo.cc +++ b/src/MultiUrlRequestInfo.cc @@ -231,7 +231,7 @@ int MultiUrlRequestInfo::prepare() auto authConfigFactory = make_unique(); File netrccf(option_->get(PREF_NETRC_PATH)); if (!option_->getAsBool(PREF_NO_NETRC) && netrccf.isFile()) { -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) // Windows OS does not have permission, so set it to 0. mode_t mode = 0; #else // !__MINGW32__ diff --git a/src/OptionParser.cc b/src/OptionParser.cc index 75d0885f..b4a66e75 100644 --- a/src/OptionParser.cc +++ b/src/OptionParser.cc @@ -34,7 +34,9 @@ /* copyright --> */ #include "OptionParser.h" -#include +#ifndef NO_UNIX +# include +#endif #include #include diff --git a/src/PeerConnection.h b/src/PeerConnection.h index 17e023f0..93198a47 100644 --- a/src/PeerConnection.h +++ b/src/PeerConnection.h @@ -37,7 +37,9 @@ #include "common.h" -#include +#ifndef NO_UNIX +# include +#endif #include #include "SocketBuffer.h" diff --git a/src/Platform.cc b/src/Platform.cc index 9f3ddb25..5ca24ab6 100644 --- a/src/Platform.cc +++ b/src/Platform.cc @@ -182,7 +182,7 @@ bool Platform::setUp() } #endif // HAVE_WINSOCK2_H -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) (void)_setmode(_fileno(stdin), _O_BINARY); (void)_setmode(_fileno(stdout), _O_BINARY); (void)_setmode(_fileno(stderr), _O_BINARY); diff --git a/src/ProgressAwareEntry.h b/src/ProgressAwareEntry.h index c804069f..cf18a38b 100644 --- a/src/ProgressAwareEntry.h +++ b/src/ProgressAwareEntry.h @@ -38,7 +38,9 @@ #include "common.h" #include -#include +#ifndef NO_UNIX +# include +#endif namespace aria2 { diff --git a/src/Range.h b/src/Range.h index e7aef928..f360e783 100644 --- a/src/Range.h +++ b/src/Range.h @@ -37,7 +37,9 @@ #include "common.h" -#include +#ifndef NO_UNIX +# include +#endif namespace aria2 { diff --git a/src/RequestGroup.cc b/src/RequestGroup.cc index fd6801fc..1bd2341f 100644 --- a/src/RequestGroup.cc +++ b/src/RequestGroup.cc @@ -619,7 +619,7 @@ void RequestGroup::initPieceStorage() std::make_shared(downloadContext_, tempPieceStorage); pieceStorage_ = tempPieceStorage; -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) // Windows build: --file-allocation=falloc uses SetFileValidData // which requires SE_MANAGE_VOLUME_NAME privilege. SetFileValidData // has security implications (see diff --git a/src/RequestGroupMan.cc b/src/RequestGroupMan.cc index 425351bb..ea57e7a2 100644 --- a/src/RequestGroupMan.cc +++ b/src/RequestGroupMan.cc @@ -34,7 +34,9 @@ /* copyright --> */ #include "RequestGroupMan.h" -#include +#ifndef NO_UNIX +# include +#endif #include #include #include diff --git a/src/SelectEventPoll.cc b/src/SelectEventPoll.cc index d9397b20..7cadd955 100644 --- a/src/SelectEventPoll.cc +++ b/src/SelectEventPoll.cc @@ -34,7 +34,7 @@ /* copyright --> */ #include "SelectEventPoll.h" -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) # include #endif // __MINGW32__ #include @@ -153,7 +153,7 @@ void SelectEventPoll::AsyncNameResolverEntry::process(fd_set* rfdsPtr, SelectEventPoll::SelectEventPoll() { -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) dummySocket_ = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); assert(dummySocket_ != (sock_t)-1); #endif // __MINGW32__ @@ -162,7 +162,7 @@ SelectEventPoll::SelectEventPoll() SelectEventPoll::~SelectEventPoll() { -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) ::closesocket(dummySocket_); #endif // __MINGW32__ } @@ -175,7 +175,7 @@ void SelectEventPoll::poll(const struct timeval& tv) memcpy(&rfds, &rfdset_, sizeof(fd_set)); memcpy(&wfds, &wfdset_, sizeof(fd_set)); -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) fd_set efds; memcpy(&efds, &wfdset_, sizeof(fd_set)); #endif // __MINGW32__ @@ -195,7 +195,7 @@ void SelectEventPoll::poll(const struct timeval& tv) int retval; do { struct timeval ttv = tv; -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) // winsock will report non-blocking connect() errors in efds, // unlike posix, which will mark such sockets as writable. retval = select(fdmax_ + 1, &rfds, &wfds, &efds, &ttv); @@ -213,7 +213,7 @@ void SelectEventPoll::poll(const struct timeval& tv) if (FD_ISSET(e.getSocket(), &wfds)) { events |= EventPoll::EVENT_WRITE; } -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) if (FD_ISSET(e.getSocket(), &efds)) { events |= EventPoll::EVENT_ERROR; } @@ -235,7 +235,7 @@ void SelectEventPoll::poll(const struct timeval& tv) #endif // ENABLE_ASYNC_DNS } -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) namespace { void checkFdCountMingw(const fd_set& fdset) { @@ -251,7 +251,7 @@ void SelectEventPoll::updateFdSet() { FD_ZERO(&rfdset_); FD_ZERO(&wfdset_); -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) FD_SET(dummySocket_, &rfdset_); FD_SET(dummySocket_, &wfdset_); fdmax_ = dummySocket_; @@ -262,7 +262,7 @@ void SelectEventPoll::updateFdSet() for (auto& i : socketEntries_) { auto& e = i.second; sock_t fd = e.getSocket(); -#ifndef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) if (fd < 0 || FD_SETSIZE <= fd) { A2_LOG_WARN("Detected file descriptor >= FD_SETSIZE or < 0. " "Download may slow down or fail."); @@ -271,13 +271,13 @@ void SelectEventPoll::updateFdSet() #endif // !__MINGW32__ int events = e.getEvents(); if (events & EventPoll::EVENT_READ) { -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) checkFdCountMingw(rfdset_); #endif // __MINGW32__ FD_SET(fd, &rfdset_); } if (events & EventPoll::EVENT_WRITE) { -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) checkFdCountMingw(wfdset_); #endif // __MINGW32__ FD_SET(fd, &wfdset_); diff --git a/src/SelectEventPoll.h b/src/SelectEventPoll.h index c09f423f..4764719e 100644 --- a/src/SelectEventPoll.h +++ b/src/SelectEventPoll.h @@ -151,7 +151,7 @@ private: fd_set rfdset_; fd_set wfdset_; sock_t fdmax_; -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) // Winsock select() doesn't work if no socket is in FD_SET. We add // this dummy socket to work around this problem sock_t dummySocket_; diff --git a/src/SimpleRandomizer.cc b/src/SimpleRandomizer.cc index 8dbef82f..4ebd1d46 100644 --- a/src/SimpleRandomizer.cc +++ b/src/SimpleRandomizer.cc @@ -35,7 +35,11 @@ #include "SimpleRandomizer.h" #include -#include +#ifndef NO_UNIX +# include +#endif +# include +#endif #include #include #include @@ -66,7 +70,7 @@ namespace { std::random_device rd; } // namespace -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) SimpleRandomizer::SimpleRandomizer() { BOOL r = ::CryptAcquireContext(&provider_, 0, 0, PROV_RSA_FULL, @@ -79,7 +83,7 @@ SimpleRandomizer::SimpleRandomizer() : gen_(rd()) {} SimpleRandomizer::~SimpleRandomizer() { -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) CryptReleaseContext(provider_, 0); #endif } @@ -92,7 +96,7 @@ long int SimpleRandomizer::getRandomNumber(long int to) void SimpleRandomizer::getRandomBytes(unsigned char* buf, size_t len) { -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) BOOL r = CryptGenRandom(provider_, len, reinterpret_cast(buf)); if (!r) { assert(r); diff --git a/src/SimpleRandomizer.h b/src/SimpleRandomizer.h index aea6fe05..d4882825 100644 --- a/src/SimpleRandomizer.h +++ b/src/SimpleRandomizer.h @@ -40,7 +40,7 @@ #include #include -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) # include #endif @@ -52,7 +52,7 @@ private: SimpleRandomizer(); private: -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) HCRYPTPROV provider_; #else std::mt19937 gen_; diff --git a/src/SocketCore.cc b/src/SocketCore.cc index e235f512..8b4d5234 100644 --- a/src/SocketCore.cc +++ b/src/SocketCore.cc @@ -38,7 +38,9 @@ # include #endif // HAVE_IPHLPAPI_H -#include +#ifndef NO_UNIX +# include +#endif #ifdef HAVE_IFADDRS_H # include #endif // HAVE_IFADDRS_H @@ -68,13 +70,13 @@ namespace aria2 { -#ifndef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) # define SOCKET_ERRNO (errno) #else # define SOCKET_ERRNO (WSAGetLastError()) #endif // __MINGW32__ -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) # define A2_EINPROGRESS WSAEWOULDBLOCK # define A2_EWOULDBLOCK WSAEWOULDBLOCK # define A2_EINTR WSAEINTR @@ -93,7 +95,7 @@ namespace aria2 { # endif // EWOULDBLOCK != EAGAIN #endif // !__MINGW32__ -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) # define CLOSE(X) ::closesocket(X) #else # define CLOSE(X) close(X) @@ -102,7 +104,7 @@ namespace aria2 { namespace { std::string errorMsg(int errNum) { -#ifndef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) return util::safeStrerror(errNum); #else auto msg = util::formatLastError(errNum); @@ -595,7 +597,7 @@ void SocketCore::applyIpDscp() void SocketCore::setNonBlockingMode() { -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) static u_long flag = 1; if (::ioctlsocket(sockfd_, FIONBIO, &flag) == -1) { int errNum = SOCKET_ERRNO; @@ -614,7 +616,7 @@ void SocketCore::setNonBlockingMode() void SocketCore::setBlockingMode() { -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) static u_long flag = 0; if (::ioctlsocket(sockfd_, FIONBIO, &flag) == -1) { int errNum = SOCKET_ERRNO; @@ -654,7 +656,7 @@ void SocketCore::closeConnection() } } -#ifndef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) # define CHECK_FD(fd) \ if (fd < 0 || FD_SETSIZE <= fd) { \ logger_->warn("Detected file descriptor >= FD_SETSIZE or < 0. " \ @@ -681,7 +683,7 @@ bool SocketCore::isWritable(time_t timeout) } throw DL_RETRY_EX(fmt(EX_SOCKET_CHECK_WRITABLE, errorMsg(errNum).c_str())); #else // !HAVE_POLL -# ifndef __MINGW32__ +# ifn defined(__MINGW32__) || defined(_MSC_VER) CHECK_FD(sockfd_); # endif // !__MINGW32__ fd_set fds; @@ -726,7 +728,7 @@ bool SocketCore::isReadable(time_t timeout) } throw DL_RETRY_EX(fmt(EX_SOCKET_CHECK_READABLE, errorMsg(errNum).c_str())); #else // !HAVE_POLL -# ifndef __MINGW32__ +# ifn defined(__MINGW32__) || defined(_MSC_VER) CHECK_FD(sockfd_); # endif // !__MINGW32__ fd_set fds; @@ -759,7 +761,7 @@ ssize_t SocketCore::writeVector(a2iovec* iov, size_t iovcnt) wantRead_ = false; wantWrite_ = false; if (!secure_) { -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) DWORD nsent; int rv = WSASend(sockfd_, iov, iovcnt, &nsent, 0, 0, 0); if (rv == 0) { @@ -1572,7 +1574,7 @@ bool ipv4AddrConfigured = true; bool ipv6AddrConfigured = true; } // namespace -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) namespace { const uint32_t APIPA_IPV4_BEGIN = 2851995649u; // 169.254.0.1 const uint32_t APIPA_IPV4_END = 2852061183u; // 169.254.255.255 diff --git a/src/a2io.h b/src/a2io.h index 27ddc518..a8bbe7c4 100644 --- a/src/a2io.h +++ b/src/a2io.h @@ -37,7 +37,9 @@ #include "common.h" #include #include -#include +#ifndef NO_UNIX +# include +#endif #include #include #ifdef HAVE_POLL_H @@ -120,7 +122,7 @@ # define DEV_STDOUT "/dev/stdout" #endif // HAVE_WINSOCK2_H -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) # define a2lseek(fd, offset, origin) _lseeki64(fd, offset, origin) # define a2fseek(fd, offset, origin) _fseeki64(fd, offset, origin) # define a2fstat(fd, buf) _fstati64(fd, buf) @@ -190,7 +192,7 @@ extern int ftruncate64(int fd, off64_t length); #define OPEN_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH #define DIR_OPEN_MODE S_IRWXU | S_IRWXG | S_IRWXO -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) # define A2_BAD_FD INVALID_HANDLE_VALUE #else // !__MINGW32__ # define A2_BAD_FD -1 diff --git a/src/a2netcompat.h b/src/a2netcompat.h index c9b5b7e0..8f0683d2 100644 --- a/src/a2netcompat.h +++ b/src/a2netcompat.h @@ -37,13 +37,13 @@ #include "a2io.h" -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) # ifdef HAVE_WS2TCPIP_H # include # endif // HAVE_WS2TCPIP_H #endif // __MINGW32__ -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) # define a2_sockopt_t char* # ifndef HAVE_GETADDRINFO # define HAVE_GETADDRINFO @@ -95,6 +95,7 @@ #ifdef HAVE_WINSOCK2_H # define sock_t SOCKET +# include #else # define sock_t int #endif @@ -105,7 +106,7 @@ #define DEFAULT_AI_FLAGS AI_ADDRCONFIG -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) # ifndef SHUT_WR # define SHUT_WR SD_SEND # endif // !SHUT_WR @@ -141,7 +142,7 @@ struct Endpoint { # define A2_IOV_MAX A2_DEFAULT_IOV_MAX #endif -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) typedef WSABUF a2iovec; # define A2IOVEC_BASE buf # define A2IOVEC_LEN len diff --git a/src/a2time.h b/src/a2time.h index 3b407608..c81e9c10 100644 --- a/src/a2time.h +++ b/src/a2time.h @@ -36,7 +36,10 @@ #define D_A2TIME_H #include -#include + +#ifdef HAVE_SYS_TIME_H +# include +#endif #include @@ -60,7 +63,7 @@ # include "asctime_r.h" #endif // HAVE_ASCTIME_R -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) # define suseconds_t uint64_t #endif diff --git a/src/asctime_r.c b/src/asctime_r.c index 176c3c29..0d6eb25f 100644 --- a/src/asctime_r.c +++ b/src/asctime_r.c @@ -36,14 +36,14 @@ #include #include -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) # define WIN32_LEAN_AND_MEAN # include #endif // __MINGW32__ #include "asctime_r.h" -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) static CRITICAL_SECTION asctime_r_cs; diff --git a/src/common.h b/src/common.h index d1a99719..de1a7a4d 100644 --- a/src/common.h +++ b/src/common.h @@ -39,7 +39,7 @@ # include "config.h" #endif -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) # ifdef malloc # undef malloc # endif @@ -48,7 +48,12 @@ # endif #endif // __MINGW32__ -#ifdef __MINGW32__ +#if defined(_MSC_VER) +#include +typedef SSIZE_T ssize_t; +#endif + +#if defined(__MINGW32__) || defined(_MSC_VER) # define WIN32_LEAN_AND_MEAN # ifndef WINVER # define WINVER 0x501 diff --git a/src/console.cc b/src/console.cc index 6147bbb8..a0ebcf8f 100644 --- a/src/console.cc +++ b/src/console.cc @@ -34,7 +34,7 @@ /* copyright --> */ #include "console.h" #include "NullOutputFile.h" -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) # include "WinConsoleFile.h" #else // !__MINGW32__ # include "BufferedFile.h" @@ -56,7 +56,7 @@ void initConsole(bool suppress) consoleCout = consoleCerr = std::make_shared(); } else { -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) consoleCout = std::make_shared(STD_OUTPUT_HANDLE); consoleCerr = std::make_shared(STD_ERROR_HANDLE); #else // !__MINGW32__ diff --git a/src/daemon.cc b/src/daemon.cc index 60be5bb3..db4a1df6 100644 --- a/src/daemon.cc +++ b/src/daemon.cc @@ -34,7 +34,9 @@ /* copyright --> */ #include "daemon.h" -#include +#ifndef NO_UNIX +# include +#endif #include #include diff --git a/src/fmt.h b/src/fmt.h index ad2f065d..451d8f14 100644 --- a/src/fmt.h +++ b/src/fmt.h @@ -43,7 +43,7 @@ namespace aria2 { std::string fmt(const char* fmt, ...) -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) __attribute__((format(__MINGW_PRINTF_FORMAT, 1, 2))) #else // !__MINGW32__ __attribute__((format(printf, 1, 2))) diff --git a/src/gai_strerror.h b/src/gai_strerror.h index da7b6ca7..effa6411 100644 --- a/src/gai_strerror.h +++ b/src/gai_strerror.h @@ -33,7 +33,7 @@ extern "C" { #endif /* __cplusplus */ -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) # undef SIZE_MAX #endif // __MINGW32__ diff --git a/src/getaddrinfo.c b/src/getaddrinfo.c index bfa3b4a3..59c29e04 100644 --- a/src/getaddrinfo.c +++ b/src/getaddrinfo.c @@ -79,7 +79,7 @@ # include "config.h" #endif -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) # include # undef ERROR # include diff --git a/src/getaddrinfo.h b/src/getaddrinfo.h index d841d4be..7faaedc4 100644 --- a/src/getaddrinfo.h +++ b/src/getaddrinfo.h @@ -33,7 +33,7 @@ extern "C" { #endif /* __cplusplus */ -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) # undef SIZE_MAX #endif // __MINGW32__ @@ -41,7 +41,7 @@ extern "C" { # include "config.h" #endif // HAVE_CONFIG_H -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(__MSVC__) # ifndef _WIN32_WINNT # define _WIN32_WINNT 0x501 # endif // _WIN32_WINNT @@ -240,7 +240,7 @@ extern "C" { #endif /* Nexenta OS(GNU/Solaris OS) defines `struct addrinfo' in netdb.h */ -#if !defined(__MINGW32__) && !defined(__sun) +#if !defined(__MINGW32__) && !defined(__sun) && !defined(_MSC_VER) /* * struct addrinfo. @@ -256,7 +256,7 @@ struct addrinfo { struct addrinfo* ai_next; }; -#endif // !__MINGW32__ && !__sun +#endif // !__MINGW32__ && !__sun && !defined(_MSC_VER) /* * Functions. diff --git a/src/gettimeofday.c b/src/gettimeofday.c index db292d94..8c7df499 100644 --- a/src/gettimeofday.c +++ b/src/gettimeofday.c @@ -25,7 +25,7 @@ #include -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) # define WIN32_LEAN_AND_MEAN # include diff --git a/src/gettimeofday.h b/src/gettimeofday.h index c5231e9f..4424b729 100644 --- a/src/gettimeofday.h +++ b/src/gettimeofday.h @@ -36,7 +36,7 @@ #ifndef _D_GETTIMEOFDAY_H #define _D_GETTIMEOFDAY_H 1 -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) # undef SIZE_MAX #endif // __MINGW32__ @@ -44,7 +44,9 @@ # include "config.h" #endif // HAVE_CONFIG_H -#include +#ifdef HAVE_SYS_TIME_H +# include +#endif #ifdef __cplusplus extern "C" { diff --git a/src/libgen.h b/src/libgen.h index 79d55144..ee3a2b6d 100644 --- a/src/libgen.h +++ b/src/libgen.h @@ -40,7 +40,7 @@ extern "C" { #endif /* __cplusplus */ -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) char* basename(char* path); char* dirname(char* path); diff --git a/src/localtime_r.c b/src/localtime_r.c index 47294558..9a012dad 100644 --- a/src/localtime_r.c +++ b/src/localtime_r.c @@ -36,14 +36,14 @@ #include #include -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) # define WIN32_LEAN_AND_MEAN # include #endif // __MINGW32__ #include "localtime_r.h" -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) static CRITICAL_SECTION localtime_r_cs; diff --git a/src/main.cc b/src/main.cc index f14cea6a..cd82ebc5 100644 --- a/src/main.cc +++ b/src/main.cc @@ -34,9 +34,11 @@ /* copyright --> */ #include "common.h" -#include +#ifndef NO_UNIX +# include +#endif -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) # include #endif // __MINGW32__ @@ -53,7 +55,7 @@ namespace aria2 { error_code::Value main(int argc, char** argv) { -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) int winArgc; auto winArgv = CommandLineToArgvW(GetCommandLineW(), &winArgc); if (winArgv == nullptr) { diff --git a/src/util.cc b/src/util.cc index 07502c0e..1e172323 100644 --- a/src/util.cc +++ b/src/util.cc @@ -96,7 +96,7 @@ namespace aria2 { -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) namespace { int utf8ToWChar(wchar_t* out, size_t outLength, const char* src) { @@ -1742,7 +1742,7 @@ void setGlobalSignalHandler(int sig, sigset_t* mask, signal_handler_t handler, #endif // HAVE_SIGACTION } -#ifndef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) std::string getHomeDir() { const char* p = getenv("HOME"); @@ -1789,7 +1789,7 @@ std::string getXDGDir(const std::string& environmentVariable, std::string filename; const char* p = getenv(environmentVariable.c_str()); if (p && -#ifndef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) p[0] == '/' #else // __MINGW32__ p[0] && p[1] == ':' @@ -2112,7 +2112,7 @@ std::string applyDir(const std::string& dir, const std::string& relPath) s += relPath; } } -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) for (std::string::iterator i = s.begin(), eoi = s.end(); i != eoi; ++i) { if (*i == '\\') { *i = '/'; @@ -2179,7 +2179,7 @@ bool detectDirTraversal(const std::string& s) std::string escapePath(const std::string& s) { // We don't escape '/' because we use it as a path separator. -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) static const char WIN_INVALID_PATH_CHARS[] = {'"', '*', ':', '<', '>', '?', '\\', '|'}; #endif // __MINGW32__ @@ -2187,7 +2187,7 @@ std::string escapePath(const std::string& s) for (auto cc : s) { unsigned char c = cc; if (in(c, 0x00u, 0x1fu) || c == 0x7fu -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) || std::find(std::begin(WIN_INVALID_PATH_CHARS), std::end(WIN_INVALID_PATH_CHARS), c) != std::end(WIN_INVALID_PATH_CHARS) @@ -2234,7 +2234,7 @@ void executeHook(const std::string& command, a2_gid_t gid, size_t numFiles, { const std::string gidStr = GroupId::toHex(gid); const std::string numFilesStr = util::uitos(numFiles); -#ifndef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) A2_LOG_INFO(fmt("Executing user command: %s %s %s %s", command.c_str(), gidStr.c_str(), numFilesStr.c_str(), firstFilename.c_str())); pid_t cpid = fork(); @@ -2483,7 +2483,7 @@ TLSVersion toTLSVersion(const std::string& ver) } #endif // ENABLE_SSL -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) std::string formatLastError(int errNum) { std::array buf; @@ -2502,7 +2502,7 @@ std::string formatLastError(int errNum) void make_fd_cloexec(int fd) { -#ifndef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) int flags; // TODO from linux man page, fcntl() with F_GETFD or F_SETFD does @@ -2519,7 +2519,7 @@ void make_fd_cloexec(int fd) #endif // !__MINGW32__ } -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) bool gainPrivilege(LPCTSTR privName) { LUID luid; diff --git a/src/util.h b/src/util.h index bb7d8d3e..cdb6a950 100644 --- a/src/util.h +++ b/src/util.h @@ -37,7 +37,9 @@ #include "common.h" -#include +#ifdef HAVE_SYS_TIME_H +# include +#endif #include #include @@ -95,7 +97,7 @@ inline uint64_t ntoh64(uint64_t x) { return byteswap64(x); } inline uint64_t hton64(uint64_t x) { return byteswap64(x); } #endif // !WORDS_BIGENDIAN -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) std::wstring utf8ToWChar(const std::string& src); std::wstring utf8ToWChar(const char* str); @@ -109,6 +111,12 @@ std::string toForwardSlash(const std::string& src); # define utf8ToNative(src) src #endif // !__MINGW32__ +#if defined(_MSC_VER) +#include +typedef SSIZE_T ssize_t; +#endif + + namespace util { extern const char DEFAULT_STRIP_CHARSET[]; @@ -863,7 +871,7 @@ bool tlsHostnameMatch(const std::string& pattern, const std::string& hostname); TLSVersion toTLSVersion(const std::string& ver); #endif // ENABLE_SSL -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) // Formats error message for error code errNum, which is the return // value of GetLastError(). On error, this function returns empty // string. @@ -875,7 +883,7 @@ std::string formatLastError(int errNum); // CreateProcess call. void make_fd_cloexec(int fd); -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) bool gainPrivilege(LPCTSTR privName); #endif // __MINGW32__ diff --git a/test/FileTest.cc b/test/FileTest.cc index ca78217e..e4c2f01a 100644 --- a/test/FileTest.cc +++ b/test/FileTest.cc @@ -97,7 +97,7 @@ void FileTest::testRemove() CPPUNIT_ASSERT(!f.remove()); std::string dir = A2_TEST_OUT_DIR "/aria2_FileTest_testRemove_testdir"; -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) mkdir(dir.c_str()); #else mkdir(dir.c_str(), 0777); @@ -183,7 +183,7 @@ void FileTest::testGetDirname() File f(""); CPPUNIT_ASSERT_EQUAL(std::string(""), f.getDirname()); } -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) { File f("c:\\foo\\bar"); CPPUNIT_ASSERT_EQUAL(std::string("c:\\foo"), f.getDirname()); @@ -221,7 +221,7 @@ void FileTest::testGetBasename() File f(""); CPPUNIT_ASSERT_EQUAL(std::string(""), f.getBasename()); } -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) { File f("c:\\foo\\bar"); CPPUNIT_ASSERT_EQUAL(std::string("bar"), f.getBasename()); diff --git a/test/LpdMessageDispatcherTest.cc b/test/LpdMessageDispatcherTest.cc index e819d5f8..28467dfb 100644 --- a/test/LpdMessageDispatcherTest.cc +++ b/test/LpdMessageDispatcherTest.cc @@ -44,7 +44,7 @@ void LpdMessageDispatcherTest::testCreateLpdRequest() void LpdMessageDispatcherTest::testSendMessage() { std::shared_ptr recvsock(new SocketCore(SOCK_DGRAM)); -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) recvsock->bindWithFamily(LPD_MULTICAST_PORT, AF_INET); #else // !__MINGW32__ recvsock->bind(LPD_MULTICAST_ADDR, LPD_MULTICAST_PORT, AF_INET); diff --git a/test/Metalink2RequestGroupTest.cc b/test/Metalink2RequestGroupTest.cc index 47e1e213..4dd34075 100644 --- a/test/Metalink2RequestGroupTest.cc +++ b/test/Metalink2RequestGroupTest.cc @@ -208,7 +208,7 @@ void Metalink2RequestGroupTest::testGenerate_groupByMetaurl() void Metalink2RequestGroupTest::testGenerate_dosDirTraversal() { -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) # ifdef ENABLE_BITTORRENT std::vector> groups; option_->put(PREF_DIR, "/tmp"); diff --git a/test/TimeTest.cc b/test/TimeTest.cc index c1e2f564..0132175e 100644 --- a/test/TimeTest.cc +++ b/test/TimeTest.cc @@ -96,7 +96,7 @@ void TimeTest::testToHTTPDate() { // This test disabled for MinGW32, because the garbage will be // displayed and it hides real errors. -#ifndef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) Time t(1220714793); CPPUNIT_ASSERT_EQUAL(std::string("Sat, 06 Sep 2008 15:26:33 GMT"), t.toHTTPDate()); diff --git a/test/UtilTest2.cc b/test/UtilTest2.cc index b919b71c..d6635e0a 100644 --- a/test/UtilTest2.cc +++ b/test/UtilTest2.cc @@ -789,7 +789,7 @@ void UtilTest2::testApplyDir() void UtilTest2::testFixTaintedBasename() { CPPUNIT_ASSERT_EQUAL(std::string("a%2Fb"), util::fixTaintedBasename("a/b")); -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) CPPUNIT_ASSERT_EQUAL(std::string("a%5Cb"), util::fixTaintedBasename("a\\b")); #else // !__MINGW32__ CPPUNIT_ASSERT_EQUAL(std::string("a\\b"), util::fixTaintedBasename("a\\b")); @@ -827,7 +827,7 @@ void UtilTest2::testEscapePath() util::escapePath(std::string("foo") + (char)0x00 + std::string("bar") + (char)0x00 + (char)0x01)); -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) CPPUNIT_ASSERT_EQUAL(std::string("foo%5Cbar"), util::escapePath("foo\\bar")); #else // !__MINGW32__ CPPUNIT_ASSERT_EQUAL(std::string("foo\\bar"), util::escapePath("foo\\bar")); From 549d8ffea1193b8f410ec76fac6439b64a77cffc Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Sat, 25 Mar 2023 14:56:23 -0700 Subject: [PATCH 06/22] fix windows io headers --- CMakeLists.txt | 20 ++++++++++++++++---- cmake/GenerateConfigH.cmake | 2 ++ src/BufferedFile.cc | 2 +- src/Context.cc | 3 ++- src/File.cc | 9 +++++++++ src/a2io.h | 3 +++ 6 files changed, 33 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9aa6a1af..3946711f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,12 +11,13 @@ project( set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/") # ####### Set compiler flags ######## -set(CMAKE_CXX_STANDARD_REQUIRED true) -set(CMAKE_C_STANDARD_REQUIRED true) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD 11) set(CMAKE_C_STANDARD 11) +set(CMAKE_CXX_EXTENSIONS OFF) +set(CMAKE_C_EXTENSIONS OFF) -#include(GenerateExportHeader) include(GenerateConfigH) config_h_add_compile_definitions(PACKAGE="${PROJECT_NAME}") @@ -83,6 +84,7 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") add_compile_definitions(NOMINMAX) config_h_add_compile_macro("__restrict__ __restrict") config_h_add_compile_macro("__attribute__(unused) /*Empty*/") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:__cplusplus") endif() if(WIN32 AND NOT MINGW) @@ -262,9 +264,10 @@ if(WIN32) ws2tcpip.h mmsystem.h io.h - iphlpapi. + iphlpapi.h winioctl.h share.h + sys/utime.h ) foreach(header ${_check_headers}) @@ -283,6 +286,15 @@ if(WIN32) unset(_check_headers) + if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + # Cake can't find them but they absolutly exist + set(HAVE_IPHLPAPI_H true) + set(HAVE_WINIOCTL_H true) + config_h_add_compile_definitions(HAVE_IPHLPAPI_H) + config_h_add_compile_definitions(HAVE_WINIOCTL_H) + + endif() + else() set(WIN_BUILD no) endif() diff --git a/cmake/GenerateConfigH.cmake b/cmake/GenerateConfigH.cmake index e73f8db9..09795a7b 100644 --- a/cmake/GenerateConfigH.cmake +++ b/cmake/GenerateConfigH.cmake @@ -18,7 +18,9 @@ function(config_h_generate_header name) set(${def_name}_config_h_val "${${def_name}}") string(REPLACE "yes" "1" ${def_name}_config_h_val ${${def_name}_config_h_val}) string(REPLACE "ON" "1" ${def_name}_config_h_val ${${def_name}_config_h_val}) + string(REPLACE "on" "1" ${def_name}_config_h_val ${${def_name}_config_h_val}) string(REPLACE "TRUE" "1" ${def_name}_config_h_val ${${def_name}_config_h_val}) + string(REPLACE "true" "1" ${def_name}_config_h_val ${${def_name}_config_h_val}) endif() write_file(${CMAKE_CURRENT_BINARY_DIR}/${name}.h.cmake.in "#define ${def_name} @${def_name}_config_h_val@\n" APPEND) endforeach() diff --git a/src/BufferedFile.cc b/src/BufferedFile.cc index 6384eb8f..bd5af484 100644 --- a/src/BufferedFile.cc +++ b/src/BufferedFile.cc @@ -81,7 +81,7 @@ int BufferedFile::onClose() int rv = 0; if (fp_) { fflush(fp_); -#if defined(__MINGW32__) || defined(_MSC_VER) +#if defined(__MINGW32__) fsync(fileno(fp_)); #else // __MINGW32__ _commit(fileno(fp_)); diff --git a/src/Context.cc b/src/Context.cc index ffa8f5b7..5d3c022f 100644 --- a/src/Context.cc +++ b/src/Context.cc @@ -36,8 +36,9 @@ #ifndef NO_UNIX # include +# include #endif -#include + #ifdef HAVE_SYS_RESOURCE_H # include diff --git a/src/File.cc b/src/File.cc index 4faf8cae..a9670634 100644 --- a/src/File.cc +++ b/src/File.cc @@ -54,6 +54,15 @@ #include "LogFactory.h" #include "fmt.h" +#if defined(_MSC_VER) +# if !defined(S_ISREG) && defined(S_IFMT) && defined(S_IFREG) +# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +# endif +# if !defined(S_ISDIR) && defined(S_IFMT) && defined(S_IFDIR) +# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +# endif +#endif + namespace aria2 { File::File(const std::string& name) : name_(name) {} diff --git a/src/a2io.h b/src/a2io.h index a8bbe7c4..70a031c3 100644 --- a/src/a2io.h +++ b/src/a2io.h @@ -54,6 +54,9 @@ #ifdef HAVE_SHARE_H # include #endif // HAVE_SHARE_H +#ifdef HAVE_SYS_UTIME_H +# include +#endif // in some platforms following definitions are missing: #ifndef EINPROGRESS From c7e5767a11fb5f2b386923418f9fb7f930de88b7 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Sat, 25 Mar 2023 19:13:27 -0700 Subject: [PATCH 07/22] fix inverted windows detection logic and typo --- src/BufferedFile.cc | 2 +- src/ConsoleStatCalc.cc | 6 +++--- src/SelectEventPoll.cc | 4 ++-- src/SimpleRandomizer.cc | 2 -- src/SocketCore.cc | 10 +++++----- src/util.cc | 8 ++++---- test/TimeTest.cc | 2 +- 7 files changed, 16 insertions(+), 18 deletions(-) diff --git a/src/BufferedFile.cc b/src/BufferedFile.cc index bd5af484..d1735bac 100644 --- a/src/BufferedFile.cc +++ b/src/BufferedFile.cc @@ -81,7 +81,7 @@ int BufferedFile::onClose() int rv = 0; if (fp_) { fflush(fp_); -#if defined(__MINGW32__) +#if !defined(__MINGW32__) && !defined(_MSC_VER) fsync(fileno(fp_)); #else // __MINGW32__ _commit(fileno(fp_)); diff --git a/src/ConsoleStatCalc.cc b/src/ConsoleStatCalc.cc index 343f7d37..09a85ad5 100644 --- a/src/ConsoleStatCalc.cc +++ b/src/ConsoleStatCalc.cc @@ -303,20 +303,20 @@ void ConsoleStatCalc::calculateStat(const DownloadEngine* e) unsigned short int cols = 79; if (isTTY_) { -#if efined(__MINGW32__) || defined(_MSC_VER) +#if !defined(__MINGW32__) && !defined(_MSC_VER) # ifdef HAVE_TERMIOS_H struct winsize size; if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &size) == 0) { cols = std::max(0, (int)size.ws_col - 1); } # endif // HAVE_TERMIOS_H -#else // __MINGW32__ +#else // __MINGW32__ || _MSC_VER CONSOLE_SCREEN_BUFFER_INFO info; if (::GetConsoleScreenBufferInfo(::GetStdHandle(STD_OUTPUT_HANDLE), &info)) { cols = std::max(0, info.dwSize.X - 2); } -#endif // !__MINGW32__ +#endif // !__MINGW32__ && !_MSC_VER std::string line(cols, ' '); global::cout()->printf("\r%s\r", line.c_str()); } diff --git a/src/SelectEventPoll.cc b/src/SelectEventPoll.cc index 7cadd955..24440e7f 100644 --- a/src/SelectEventPoll.cc +++ b/src/SelectEventPoll.cc @@ -262,13 +262,13 @@ void SelectEventPoll::updateFdSet() for (auto& i : socketEntries_) { auto& e = i.second; sock_t fd = e.getSocket(); -#if defined(__MINGW32__) || defined(_MSC_VER) +#if !defined(__MINGW32__) && !defined(_MSC_VER) if (fd < 0 || FD_SETSIZE <= fd) { A2_LOG_WARN("Detected file descriptor >= FD_SETSIZE or < 0. " "Download may slow down or fail."); continue; } -#endif // !__MINGW32__ +#endif // !__MINGW32__ && !_MSC_VER int events = e.getEvents(); if (events & EventPoll::EVENT_READ) { #if defined(__MINGW32__) || defined(_MSC_VER) diff --git a/src/SimpleRandomizer.cc b/src/SimpleRandomizer.cc index 4ebd1d46..45603fdf 100644 --- a/src/SimpleRandomizer.cc +++ b/src/SimpleRandomizer.cc @@ -38,8 +38,6 @@ #ifndef NO_UNIX # include #endif -# include -#endif #include #include #include diff --git a/src/SocketCore.cc b/src/SocketCore.cc index 8b4d5234..35aa0a87 100644 --- a/src/SocketCore.cc +++ b/src/SocketCore.cc @@ -70,7 +70,7 @@ namespace aria2 { -#if defined(__MINGW32__) || defined(_MSC_VER) +#if !defined(__MINGW32__) && !defined(_MSC_VER) # define SOCKET_ERRNO (errno) #else # define SOCKET_ERRNO (WSAGetLastError()) @@ -104,7 +104,7 @@ namespace aria2 { namespace { std::string errorMsg(int errNum) { -#if defined(__MINGW32__) || defined(_MSC_VER) +#if !defined(__MINGW32__) && !defined(_MSC_VER) return util::safeStrerror(errNum); #else auto msg = util::formatLastError(errNum); @@ -656,7 +656,7 @@ void SocketCore::closeConnection() } } -#if defined(__MINGW32__) || defined(_MSC_VER) +#if !defined(__MINGW32__) && !defined(_MSC_VER) # define CHECK_FD(fd) \ if (fd < 0 || FD_SETSIZE <= fd) { \ logger_->warn("Detected file descriptor >= FD_SETSIZE or < 0. " \ @@ -683,7 +683,7 @@ bool SocketCore::isWritable(time_t timeout) } throw DL_RETRY_EX(fmt(EX_SOCKET_CHECK_WRITABLE, errorMsg(errNum).c_str())); #else // !HAVE_POLL -# ifn defined(__MINGW32__) || defined(_MSC_VER) +# if !defined(__MINGW32__) && !defined(_MSC_VER) CHECK_FD(sockfd_); # endif // !__MINGW32__ fd_set fds; @@ -728,7 +728,7 @@ bool SocketCore::isReadable(time_t timeout) } throw DL_RETRY_EX(fmt(EX_SOCKET_CHECK_READABLE, errorMsg(errNum).c_str())); #else // !HAVE_POLL -# ifn defined(__MINGW32__) || defined(_MSC_VER) +# if !defined(__MINGW32__) && !defined(_MSC_VER) CHECK_FD(sockfd_); # endif // !__MINGW32__ fd_set fds; diff --git a/src/util.cc b/src/util.cc index 1e172323..ee575a0f 100644 --- a/src/util.cc +++ b/src/util.cc @@ -1742,7 +1742,7 @@ void setGlobalSignalHandler(int sig, sigset_t* mask, signal_handler_t handler, #endif // HAVE_SIGACTION } -#if defined(__MINGW32__) || defined(_MSC_VER) +#if !defined(__MINGW32__) && !defined(_MSC_VER) std::string getHomeDir() { const char* p = getenv("HOME"); @@ -1789,7 +1789,7 @@ std::string getXDGDir(const std::string& environmentVariable, std::string filename; const char* p = getenv(environmentVariable.c_str()); if (p && -#if defined(__MINGW32__) || defined(_MSC_VER) +#if !defined(__MINGW32__) && !defined(_MSC_VER) p[0] == '/' #else // __MINGW32__ p[0] && p[1] == ':' @@ -2234,7 +2234,7 @@ void executeHook(const std::string& command, a2_gid_t gid, size_t numFiles, { const std::string gidStr = GroupId::toHex(gid); const std::string numFilesStr = util::uitos(numFiles); -#if defined(__MINGW32__) || defined(_MSC_VER) +#if !defined(__MINGW32__) && !defined(_MSC_VER) A2_LOG_INFO(fmt("Executing user command: %s %s %s %s", command.c_str(), gidStr.c_str(), numFilesStr.c_str(), firstFilename.c_str())); pid_t cpid = fork(); @@ -2502,7 +2502,7 @@ std::string formatLastError(int errNum) void make_fd_cloexec(int fd) { -#if defined(__MINGW32__) || defined(_MSC_VER) +#if !defined(__MINGW32__) && !defined(_MSC_VER) int flags; // TODO from linux man page, fcntl() with F_GETFD or F_SETFD does diff --git a/test/TimeTest.cc b/test/TimeTest.cc index 0132175e..f690b819 100644 --- a/test/TimeTest.cc +++ b/test/TimeTest.cc @@ -96,7 +96,7 @@ void TimeTest::testToHTTPDate() { // This test disabled for MinGW32, because the garbage will be // displayed and it hides real errors. -#if defined(__MINGW32__) || defined(_MSC_VER) +#if !defined(__MINGW32__) && !defined(_MSC_VER) Time t(1220714793); CPPUNIT_ASSERT_EQUAL(std::string("Sat, 06 Sep 2008 15:26:33 GMT"), t.toHTTPDate()); From b66d981ffc544a376c83cee082d3c99bae563e5d Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Sun, 26 Mar 2023 00:11:08 -0700 Subject: [PATCH 08/22] more windows headers pullin the CRT equivalents for some things ensure gai_strerror and getaddrinfo play nice --- src/a2io.h | 30 ++++++++++++++++++++++++++++++ src/a2netcompat.h | 4 +++- src/gai_strerror.h | 2 +- src/getaddrinfo.c | 17 +++++++++++++++-- src/getaddrinfo.h | 6 +++--- src/gettimeofday.c | 10 +++++++++- src/strptime.c | 10 ++++++++++ src/util.h | 5 +++++ 8 files changed, 76 insertions(+), 8 deletions(-) diff --git a/src/a2io.h b/src/a2io.h index 70a031c3..6e1196a6 100644 --- a/src/a2io.h +++ b/src/a2io.h @@ -146,6 +146,9 @@ # define a2open(path, flags, mode) _wsopen(path, flags, _SH_DENYNO, mode) # define a2fopen(path, mode) _wfsopen(path, mode, _SH_DENYNO) // # define a2ftruncate(fd, length): We don't use ftruncate in Mingw build +# ifndef off_t +# define off_t _off_t +# endif # define a2_off_t off_t #elif defined(__ANDROID__) || defined(ANDROID) # define a2lseek(fd, offset, origin) lseek64(fd, offset, origin) @@ -201,4 +204,31 @@ extern int ftruncate64(int fd, off64_t length); # define A2_BAD_FD -1 #endif // !__MINGW32__ +#if defined(_MSC_VER) +// Present with their _ prefixes on MSVC +# define O_RDONLY _O_RDONLY +# define O_WRONLY _O_WRONLY +# define O_RDWR _O_RDWR +# define O_APPEND _O_APPEND +# define O_CREAT _O_CREAT +# define O_EXCL _O_EXCL +# define O_TRUNC _O_TRUNC + +# define STDIN_FILENO _fileno(stdin) +#endif + +#if defined(_MSC_VER) +# define a2_isatty _isatty +# define a2_fileno _fileno +# define a2_read _read +# define a2_close _close +# define a2_dup _dup +#else +# define a2_isatty isatty +# define a2_fileno fileno +# define a2_read read +# define a2_close close +# define a2_dub dup +#endif // !_MSC_VER + #endif // D_A2IO_H diff --git a/src/a2netcompat.h b/src/a2netcompat.h index 8f0683d2..52e9ba87 100644 --- a/src/a2netcompat.h +++ b/src/a2netcompat.h @@ -84,7 +84,9 @@ #ifndef HAVE_GETADDRINFO # include "getaddrinfo.h" -# define HAVE_GAI_STRERROR +# ifndef HAVE_GAI_STRERROR +# define HAVE_GAI_STRERROR +# endif #endif // HAVE_GETADDRINFO #ifndef HAVE_GAI_STRERROR diff --git a/src/gai_strerror.h b/src/gai_strerror.h index effa6411..f88054af 100644 --- a/src/gai_strerror.h +++ b/src/gai_strerror.h @@ -56,7 +56,7 @@ extern "C" { /* * Functions. */ -#ifdef __STDC__ +#if defined(__STDC__) || defined(_MSC_VER) const char* gai_strerror(int); #else const char* gai_strerror(); diff --git a/src/getaddrinfo.c b/src/getaddrinfo.c index 59c29e04..0946c040 100644 --- a/src/getaddrinfo.c +++ b/src/getaddrinfo.c @@ -124,7 +124,7 @@ #ifndef HAVE_MEMCPY # define memcpy(d, s, n) bcopy((s), (d), (n)) -# ifdef __STDC__ +# if defined(__STDC__) || defined(_MSC_VER) void* memchr(const void*, int, size_t); int memcmp(const void*, const void*, size_t); void* memmove(void*, const void*, size_t); @@ -137,6 +137,10 @@ char* memset(); # endif /* not __STDC__ */ #endif /* not HAVE_MEMCPY */ +#if defined(_MSC_VER) +# define H_ERRNO_DECLARED 1 +#endif + #ifndef H_ERRNO_DECLARED extern int h_errno; #endif @@ -156,6 +160,11 @@ extern int h_errno; # define N_(string) (string) #endif +#if defined(_MSC_VER) +# include +# define in_port_t uint16_t +#endif + /* * Error messages for gai_strerror(). */ @@ -211,7 +220,7 @@ static pthread_mutex_t gai_mutex = PTHREAD_MUTEX_INITIALIZER; /* * Declaration of static functions. */ -#ifdef __STDC__ +#if defined(__STDC__) || defined(_MSC_VER) static int is_integer(const char*); static int is_address(const char*); static int itoa_length(int); @@ -494,7 +503,9 @@ struct addrinfo** res; *res = head_res; end: +#if !defined(_MSC_VER) // h_errno >> WSAGetLastError() ; not editable h_errno = saved_h_errno; +#endif #ifdef ENABLE_PTHREAD pthread_mutex_unlock(&gai_mutex); #endif @@ -588,7 +599,9 @@ int flags; } end: +#if !defined(_MSC_VER) // h_errno >> WSAGetLastError() ; not editable h_errno = saved_h_errno; +#endif #ifdef ENABLE_PTHREAD pthread_mutex_unlock(&gai_mutex); #endif diff --git a/src/getaddrinfo.h b/src/getaddrinfo.h index 7faaedc4..64eeccbf 100644 --- a/src/getaddrinfo.h +++ b/src/getaddrinfo.h @@ -41,7 +41,7 @@ extern "C" { # include "config.h" #endif // HAVE_CONFIG_H -#if defined(__MINGW32__) || defined(__MSVC__) +#if defined(__MINGW32__) || defined(_MSC_VER) # ifndef _WIN32_WINNT # define _WIN32_WINNT 0x501 # endif // _WIN32_WINNT @@ -240,7 +240,7 @@ extern "C" { #endif /* Nexenta OS(GNU/Solaris OS) defines `struct addrinfo' in netdb.h */ -#if !defined(__MINGW32__) && !defined(__sun) && !defined(_MSC_VER) +#if !defined(__MINGW32__) && !defined(__sun) // && !defined(_MSC_VER) /* * struct addrinfo. @@ -261,7 +261,7 @@ struct addrinfo { /* * Functions. */ -#ifdef __STDC__ +#if defined(__STDC__) || defined(_MSC_VER) const char* gai_strerror(int); void freeaddrinfo(struct addrinfo*); int getaddrinfo(const char*, const char*, const struct addrinfo*, diff --git a/src/gettimeofday.c b/src/gettimeofday.c index 8c7df499..76a53e12 100644 --- a/src/gettimeofday.c +++ b/src/gettimeofday.c @@ -23,7 +23,15 @@ * Danny Smith */ -#include +#include "config.h" + +#ifdef HAVE_SYS_TIME_H +# include +#endif + +#ifdef HAVE_WINSOCK2_H +# include +#endif /* HAVE_WINSOCK2_H */ #if defined(__MINGW32__) || defined(_MSC_VER) diff --git a/src/strptime.c b/src/strptime.c index a27e6aa5..072010d0 100644 --- a/src/strptime.c +++ b/src/strptime.c @@ -54,11 +54,21 @@ #endif // HAVE_ALLOCA_H #ifdef HAVE_MALLOC_H +# if defined(_MSC_VER) +// pull in alloca _alloca def +# define _CRT_INTERNAL_NONSTDC_NAMES 1 +# endif # include #endif // HAVE_MALLOC_H #include "strptime.h" +#if defined(_MSC_VER) +# define tzname _tzname +# define strncasecmp _strnicmp +# define strcasecmp _stricmp +#endif + static const char* abb_weekdays[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", NULL}; diff --git a/src/util.h b/src/util.h index cdb6a950..0e567047 100644 --- a/src/util.h +++ b/src/util.h @@ -117,6 +117,11 @@ typedef SSIZE_T ssize_t; #endif +#if defined(_MSC_VER) +# define strdup _strdup +# define wdscup _wcsdup +#endif + namespace util { extern const char DEFAULT_STRIP_CHARSET[]; From d0b282385b9584a49bcdb8beb600e668be2e7892 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Sun, 26 Mar 2023 00:13:23 -0700 Subject: [PATCH 09/22] Use MSVC CRT equivalents without conflicting with posix names --- src/AbstractDiskWriter.cc | 4 ++-- src/AppleTLSSession.cc | 2 +- src/BufferedFile.cc | 8 ++++---- src/ConsoleStatCalc.cc | 2 +- src/EpollEventPoll.cc | 2 +- src/File.cc | 8 ++++---- src/GZipFile.cc | 4 ++-- src/GenericParser.h | 4 ++-- src/OptionParser.cc | 2 +- src/PortEventPoll.cc | 2 +- src/XmlParser.cc | 4 ++-- test/FileTest.cc | 2 +- 12 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/AbstractDiskWriter.cc b/src/AbstractDiskWriter.cc index 0bd84248..55412927 100644 --- a/src/AbstractDiskWriter.cc +++ b/src/AbstractDiskWriter.cc @@ -166,7 +166,7 @@ void AbstractDiskWriter::closeFile() #if defined(__MINGW32__) || defined(_MSC_VER) CloseHandle(fd_); #else // !__MINGW32__ - close(fd_); + a2_close(fd_); #endif // !__MINGW32__ fd_ = A2_BAD_FD; } @@ -319,7 +319,7 @@ ssize_t AbstractDiskWriter::readDataInternal(unsigned char* data, size_t len, } #else // !__MINGW32__ ssize_t ret = 0; - while ((ret = read(fd_, data, len)) == -1 && errno == EINTR) + while ((ret = a2_read(fd_, data, len)) == -1 && errno == EINTR) ; return ret; #endif // !__MINGW32__ diff --git a/src/AppleTLSSession.cc b/src/AppleTLSSession.cc index f4174a58..12bcb0e6 100644 --- a/src/AppleTLSSession.cc +++ b/src/AppleTLSSession.cc @@ -694,7 +694,7 @@ OSStatus AppleTLSSession::sockRead(void* data, size_t* len) uint8_t* buffer = static_cast(data); *len = 0; while (remain) { - ssize_t r = read(sockfd_, buffer, remain); + ssize_t r = a2_read(sockfd_, buffer, remain); if (r == 0) { return errSSLClosedGraceful; } diff --git a/src/BufferedFile.cc b/src/BufferedFile.cc index d1735bac..6ad21a59 100644 --- a/src/BufferedFile.cc +++ b/src/BufferedFile.cc @@ -53,12 +53,12 @@ BufferedFile::BufferedFile(const char* filename, const char* mode) a2fopen(filename, mode) #endif // !__MINGW32__ ), - supportsColor_(fp_ ? isatty(fileno(fp_)) : false) + supportsColor_(fp_ ? a2_isatty(a2_fileno(fp_)) : false) { } BufferedFile::BufferedFile(FILE* fp) - : fp_(fp), supportsColor_(fp_ ? isatty(fileno(fp_)) : false) + : fp_(fp), supportsColor_(fp_ ? a2_isatty(a2_fileno(fp_)) : false) { } @@ -82,9 +82,9 @@ int BufferedFile::onClose() if (fp_) { fflush(fp_); #if !defined(__MINGW32__) && !defined(_MSC_VER) - fsync(fileno(fp_)); + fsync(a2_fileno(fp_)); #else // __MINGW32__ - _commit(fileno(fp_)); + _commit(a2_fileno(fp_)); #endif // __MINGW32__ rv = fclose(fp_); fp_ = nullptr; diff --git a/src/ConsoleStatCalc.cc b/src/ConsoleStatCalc.cc index 09a85ad5..b7fe8224 100644 --- a/src/ConsoleStatCalc.cc +++ b/src/ConsoleStatCalc.cc @@ -277,7 +277,7 @@ ConsoleStatCalc::ConsoleStatCalc(std::chrono::seconds summaryInterval, #if defined(__MINGW32__) || defined(_MSC_VER) isTTY_(true), #else // !__MINGW32__ - isTTY_(isatty(STDOUT_FILENO) == 1), + isTTY_(a2_isatty(STDOUT_FILENO) == 1), #endif // !__MINGW32__ colorOutput_(colorOutput) { diff --git a/src/EpollEventPoll.cc b/src/EpollEventPoll.cc index 340400dd..c507bb42 100644 --- a/src/EpollEventPoll.cc +++ b/src/EpollEventPoll.cc @@ -91,7 +91,7 @@ EpollEventPoll::EpollEventPoll() EpollEventPoll::~EpollEventPoll() { if (epfd_ != -1) { - int r = close(epfd_); + int r = a2_close(epfd_); int errNum = errno; if (r == -1) { A2_LOG_ERROR(fmt("Error occurred while closing epoll file descriptor" diff --git a/src/File.cc b/src/File.cc index a9670634..a34e664c 100644 --- a/src/File.cc +++ b/src/File.cc @@ -55,11 +55,11 @@ #include "fmt.h" #if defined(_MSC_VER) -# if !defined(S_ISREG) && defined(S_IFMT) && defined(S_IFREG) -# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +# if !defined(S_ISREG) && defined(_S_IFMT) && defined(_S_IFREG) +# define S_ISREG(m) (((m) & _S_IFMT) == _S_IFREG) # endif -# if !defined(S_ISDIR) && defined(S_IFMT) && defined(S_IFDIR) -# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +# if !defined(S_ISDIR) && defined(_S_IFMT) && defined(_S_IFDIR) +# define S_ISDIR(m) (((m) & _S_IFMT) == _S_IFDIR) # endif #endif diff --git a/src/GZipFile.cc b/src/GZipFile.cc index b85665d8..b2e23c34 100644 --- a/src/GZipFile.cc +++ b/src/GZipFile.cc @@ -57,7 +57,7 @@ GZipFile::GZipFile(const char* filename, const char* mode) #endif // !__MINGW32__ ; if (fp) { - int fd = dup(fileno(fp)); + int fd = a2_dup(a2_fileno(fp)); if (fd != -1) { fp_ = gzdopen(fd, mode); if (fp_) { @@ -70,7 +70,7 @@ GZipFile::GZipFile(const char* filename, const char* mode) #endif } else { - ::close(fd); + ::a2_close(fd); } } fclose(fp); diff --git a/src/GenericParser.h b/src/GenericParser.h index 7373b066..ace91e28 100644 --- a/src/GenericParser.h +++ b/src/GenericParser.h @@ -101,11 +101,11 @@ typename Parser::ResultType parseFile(Parser& parser, if (fd == -1) { return Parser::ParserStateMachineType::noResult(); } - auto fdclose = defer(fd, close); + auto fdclose = defer(fd, a2_close); std::array buf; ssize_t nread; ssize_t nproc; - while ((nread = read(fd, buf.data(), buf.size())) > 0) { + while ((nread = a2_read(fd, buf.data(), buf.size())) > 0) { nproc = parser.parseUpdate(buf.data(), nread); if (nproc < 0) { break; diff --git a/src/OptionParser.cc b/src/OptionParser.cc index b4a66e75..63b5c4b4 100644 --- a/src/OptionParser.cc +++ b/src/OptionParser.cc @@ -198,7 +198,7 @@ void OptionParser::parseArg(std::ostream& out, // option is ambiguous. int ambiguous = 0; for (int i = 1, len = option::countOption(); i < len; ++i) { - PrefPtr pref = option::i2p(i); + PrefPtr pref = aria2::option::i2p(i); const OptionHandler* h = find(pref); if (h && !h->isHidden()) { if (strcmp(pref->k, optstr) == 0) { diff --git a/src/PortEventPoll.cc b/src/PortEventPoll.cc index ecd7fbfa..39f5a1fe 100644 --- a/src/PortEventPoll.cc +++ b/src/PortEventPoll.cc @@ -85,7 +85,7 @@ PortEventPoll::PortEventPoll() PortEventPoll::~PortEventPoll() { if (port_ != -1) { - int r = close(port_); + int r = a2_sclose(port_); int errNum = errno; if (r == -1) { A2_LOG_ERROR(fmt("Error occurred while closing port %d: %s", port_, diff --git a/src/XmlParser.cc b/src/XmlParser.cc index 15b273d7..4eb95c46 100644 --- a/src/XmlParser.cc +++ b/src/XmlParser.cc @@ -58,12 +58,12 @@ bool parseFile(const std::string& filename, ParserStateMachine* psm) return false; } } - auto fdclose = defer(fd, close); + auto fdclose = defer(fd, a2_close); XmlParser ps(psm); std::array buf; ssize_t nread; bool retval = true; - while ((nread = read(fd, buf.data(), buf.size())) > 0) { + while ((nread = a2_read(fd, buf.data(), buf.size())) > 0) { if (ps.parseUpdate(buf.data(), nread) < 0) { retval = false; break; diff --git a/test/FileTest.cc b/test/FileTest.cc index e4c2f01a..b3773d36 100644 --- a/test/FileTest.cc +++ b/test/FileTest.cc @@ -88,7 +88,7 @@ void FileTest::testRemove() if ((fd = creat(name.c_str(), S_IRUSR | S_IWUSR)) < 0) { CPPUNIT_FAIL("cannot create test file"); } - close(fd); + a2_close(fd); File f(name); CPPUNIT_ASSERT(f.isFile()); CPPUNIT_ASSERT(f.remove()); From 38426a007558507e051a4eac00b2eb9e8ae6e6cd Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Sun, 26 Mar 2023 00:13:59 -0700 Subject: [PATCH 10/22] getopt under MSVC --- CMakeLists.txt | 18 +- src/CMakeLists.txt | 58 +++-- src/Context.cc | 2 +- src/getopt/getopt.c | 562 ++++++++++++++++++++++++++++++++++++++++++++ src/getopt/getopt.h | 105 +++++++++ 5 files changed, 722 insertions(+), 23 deletions(-) create mode 100644 src/getopt/getopt.c create mode 100644 src/getopt/getopt.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 3946711f..62ed598d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,8 +29,8 @@ config_h_add_compile_definitions(PACKAGE_BUGREPORT="https://github.com/aria2/ari config_h_add_compile_definitions(PACKAGE_VERSION="${PROJECT_VERSION}") config_h_add_compile_definitions(VERSION="${PROJECT_VERSION}") config_h_add_compile_definitions(HOST="${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM}") -config_h_add_compile_definitions(BUILD="${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM}") -config_h_add_compile_definitions(TARGET="${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_SYSTEM}-${CMAKE_CXX_COMPILER_TARGET}") +config_h_add_compile_definitions(BUILD="${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM}-${CMAKE_CXX_COMPILER_ID}") +config_h_add_compile_definitions(TARGET="${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_SYSTEM}-${CMAKE_CXX_COMPILER_ID}") if(WIN32) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_POSIX_C_SOURCE=1") @@ -84,7 +84,8 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") add_compile_definitions(NOMINMAX) config_h_add_compile_macro("__restrict__ __restrict") config_h_add_compile_macro("__attribute__(unused) /*Empty*/") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:__cplusplus") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:__cplusplus /Zc:__STDC__") + # add_compile_definitions("__STDC__=1") # even with the /Zc:__STDC__ flag the compiler will not define this in C++ mode endif() if(WIN32 AND NOT MINGW) @@ -375,6 +376,7 @@ if(WITH_OPENSSL) set(OPENSSL_CFLAGS "") set(OPENSSL_LIBS ${OPENSSL_LIBRARIES}) config_h_add_compile_definitions(HAVE_OPENSSL=1) + set(HAVE_SSL yes CACHE BOOL "Have SSL support" FORCE) set(save_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) set(save_CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES}) @@ -702,6 +704,7 @@ set(_check_funcs memchr memmove mempcpy + memcpy memset mkdir mmap @@ -835,6 +838,13 @@ endforeach() unset(_check_funcs) +if(NOT HAVE_GAI_STRERR AND HAVE_WS2TCPIP_H AND (WIN32 AND NOT MINGW)) + set(HAVE_GAI_STRERROR true) # It's there in ws2tcpip.h + config_h_add_compile_definitions(HAVE_GAI_STRERROR) + set(HAVE_GETADDRINFO true) # It's there in ws2tcpip.h + config_h_add_compile_definitions(HAVE_GETADDRINFO) +endif() + if(HAVE_KQUEUE) message(STATUS "Checking whether struct kevent.udata is intptr_t") set(_tmp_src @@ -933,7 +943,7 @@ message(STATUS "summary of build options: \n\ Build: ${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM}-${CMAKE_CXX_COMPILER_ID} Host: ${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM} -Target: ${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_SYSTEM}-${CMAKE_CXX_COMPILER_TARGET} +Target: ${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_SYSTEM}-${CMAKE_CXX_COMPILER_ID} Install prefix: ${CMAKE_INSTALL_PREFIX} CC: ${CMAKE_C_COMPILER} CXX: ${CMAKE_CXX_COMPILER} diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index dcf31a8f..0761c141 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -5,13 +5,11 @@ add_subdirectory(includes) # ########## next target ############### set(aria2c_SRCS main.cc) -add_library(main OBJECT ${aria2c_SRCS}) +add_executable(aria2c ${aria2c_SRCS}) -target_include_directories(main PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/includes) -target_include_directories(main PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) +target_include_directories(aria2c PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/includes) +target_include_directories(aria2c PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) -add_executable(aria2c $) -target_link_libraries(aria2c main) install(TARGETS aria2c ${INSTALL_TARGETS_DEFAULT_ARGS}) # ########## next target ############### @@ -1154,7 +1152,7 @@ if(NOT HAVE_BASENAME) ) endif() -if(NOT HAVE_GETADDRINFO) +if(NOT HAVE_GETADDRINFO OR MSVC) set(aria2_SRCS ${aria2_SRCS} @@ -1253,6 +1251,18 @@ if(HAVE_LIBUV) ) endif() +if(WIN32 AND NOT MINGW) + set(aria2_SRCS + ${aria2_SRCS} + + getopt/getopt.c + getopt/getopt.h + ) + + set(USE_MINGW_GETOPT true) + +endif() + if(ENABLE_LIBARIA2) set(aria2_SRCS ${aria2_SRCS} @@ -1267,6 +1277,10 @@ if(ENABLE_LIBARIA2) set(LIBARIA2_BUILD_MODE SHARED) + if(MSVC) + set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) + endif() + # add_library(aria2 SHARED ${aria2_SRCS}) else() set(LIBARIA2_BUILD_MODE STATIC) @@ -1280,32 +1294,39 @@ target_include_directories(aria2 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/includes) target_include_directories(aria2 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) target_include_directories(aria2 INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/includes) +if(USE_MINGW_GETOPT) + target_include_directories(aria2 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/getopt) + target_include_directories(aria2c PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/getopt) +endif() + + if(HAVE_ZLIB) target_include_directories(aria2 PUBLIC ${ZLIB_INCLUDE_DIRS}) - target_include_directories(main PUBLIC ${LIBXML2_INCLUDE_DIR}) + target_include_directories(aria2c PUBLIC ${ZLIB_INCLUDE_DIRS}) target_link_libraries(aria2 ZLIB::ZLIB) endif() if(HAVE_LIBUV) target_include_directories(aria2 PUBLIC ${LIBUV_INCLUDE_DIRS}) + target_include_directories(aria2c PUBLIC ${LIBUV_INCLUDE_DIRS}) target_link_libraries(aria2 LIBUV::LIBUV) endif() if(HAVE_LIBXML2) target_include_directories(aria2 PUBLIC ${LIBXML2_INCLUDE_DIR}) - target_include_directories(main PUBLIC ${LIBXML2_INCLUDE_DIR}) + target_include_directories(aria2c PUBLIC ${LIBXML2_INCLUDE_DIR}) target_link_libraries(aria2 LibXml2::LibXml2) endif() if(HAVE_LIBEXPAT) target_include_directories(aria2 PUBLIC ${EXPAT_INCLUDE_DIRS}) - target_include_directories(main PUBLIC ${EXPAT_INCLUDE_DIRS}) + target_include_directories(aria2c PUBLIC ${EXPAT_INCLUDE_DIRS}) target_link_libraries(aria2 EXPAT::EXPAT) endif() if(HAVE_SQLITE3) target_include_directories(aria2 PUBLIC ${SQLite3_INCLUDE_DIRS}) - target_include_directories(main PUBLIC ${SQLite3_INCLUDE_DIRS}) + target_include_directories(aria2c PUBLIC ${SQLite3_INCLUDE_DIRS}) target_link_libraries(aria2 SQLite::SQLite3) endif() @@ -1320,14 +1341,14 @@ endif() if(HAVE_LIBGNUTLS) target_include_directories(aria2 PUBLIC ${GNUTLS_INCLUDE_DIR}) target_compile_definitions(aria2 PUBLIC ${LIBGNUTLS_CFLAGS}) - target_include_directories(main PUBLIC ${GNUTLS_INCLUDE_DIR}) - target_compile_definitions(main PUBLIC ${LIBGNUTLS_CFLAGS}) + target_include_directories(aria2c PUBLIC ${GNUTLS_INCLUDE_DIR}) + target_compile_definitions(aria2c PUBLIC ${LIBGNUTLS_CFLAGS}) target_link_libraries(aria2 GnuTLS::GnuTLS) endif() if(HAVE_OPENSSL) target_include_directories(aria2 PUBLIC ${OPENSSL_INCLUDE_DIR}) - target_include_directories(main PUBLIC ${OPENSSL_INCLUDE_DIR}) + target_include_directories(aria2c PUBLIC ${OPENSSL_INCLUDE_DIR}) target_link_libraries(aria2 OpenSSL::SSL) @@ -1336,36 +1357,37 @@ endif() if(HAVE_LIBNETTLE) target_include_directories(aria2 PUBLIC ${NETTLE_INCLUDE_DIR}) - target_include_directories(main PUBLIC ${NETTLE_INCLUDE_DIR}) + target_include_directories(aria2c PUBLIC ${NETTLE_INCLUDE_DIR}) target_link_libraries(aria2 Nettle::Nettle) endif() if(HAVE_LIBGMP) target_include_directories(aria2 PUBLIC ${GMP_INCLUDE_DIR}) - target_include_directories(main PUBLIC ${GMP_INCLUDE_DIR}) + target_include_directories(aria2c PUBLIC ${GMP_INCLUDE_DIR}) target_link_libraries(aria2 GMP::GMP) endif() if(HAVE_LIBGCRYPT) target_include_directories(aria2 PUBLIC ${LibGcrypt_INCLUDE_DIR}) - target_include_directories(main PUBLIC ${LibGcrypt_INCLUDE_DIR}) + target_include_directories(aria2c PUBLIC ${LibGcrypt_INCLUDE_DIR}) target_link_libraries(aria2 LibGcrypt::LibGcrypt) endif() if(HAVE_LIBSSH2) target_include_directories(aria2 PUBLIC ${LIBSSH2_INCLUDE_DIR}) - target_include_directories(main PUBLIC ${LIBSSH2_INCLUDE_DIR}) + target_include_directories(aria2c PUBLIC ${LIBSSH2_INCLUDE_DIR}) target_link_libraries(aria2 LibSSH2::LibSSH2) endif() if(HAVE_LIBCARES) target_include_directories(aria2 PUBLIC ${LIBCARES_INCLUDE_DIR}) + target_include_directories(aria2c PUBLIC ${LIBCARES_INCLUDE_DIR}) target_link_libraries(aria2 Libcares::Libcares) endif() if(ENABLE_WEBSOCKET) target_include_directories(aria2 PUBLIC ${WSLAY_INCLUDE_DIR}) - target_include_directories(main PUBLIC ${WSLAY_INCLUDE_DIR}) + target_include_directories(aria2c PUBLIC ${WSLAY_INCLUDE_DIR}) target_link_libraries(aria2 wslay) endif() diff --git a/src/Context.cc b/src/Context.cc index 5d3c022f..e06addd3 100644 --- a/src/Context.cc +++ b/src/Context.cc @@ -36,8 +36,8 @@ #ifndef NO_UNIX # include -# include #endif +#include #ifdef HAVE_SYS_RESOURCE_H diff --git a/src/getopt/getopt.c b/src/getopt/getopt.c new file mode 100644 index 00000000..0ed0dd25 --- /dev/null +++ b/src/getopt/getopt.c @@ -0,0 +1,562 @@ +/* $OpenBSD: getopt_long.c,v 1.23 2007/10/31 12:34:57 chl Exp $ */ +/* $NetBSD: getopt_long.c,v 1.15 2002/01/31 22:43:40 tv Exp $ */ + +/* + * Copyright (c) 2002 Todd C. Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Sponsored in part by the Defense Advanced Research Projects + * Agency (DARPA) and Air Force Research Laboratory, Air Force + * Materiel Command, USAF, under agreement number F39502-99-1-0512. + */ +/*- + * Copyright (c) 2000 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Dieter Baron and Thomas Klausner. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include + +#define REPLACE_GETOPT /* use this getopt as the system getopt(3) */ + +#ifdef REPLACE_GETOPT +int opterr = 1; /* if error message should be printed */ +int optind = 1; /* index into parent argv vector */ +int optopt = '?'; /* character checked for validity */ +#undef optreset /* see getopt.h */ +#define optreset __mingw_optreset +int optreset; /* reset getopt */ +char *optarg; /* argument associated with option */ +#endif + +#define PRINT_ERROR ((opterr) && (*options != ':')) + +#define FLAG_PERMUTE 0x01 /* permute non-options to the end of argv */ +#define FLAG_ALLARGS 0x02 /* treat non-options as args to option "-1" */ +#define FLAG_LONGONLY 0x04 /* operate as getopt_long_only */ + +/* return values */ +#define BADCH (int)'?' +#define BADARG ((*options == ':') ? (int)':' : (int)'?') +#define INORDER (int)1 + +#ifndef __CYGWIN__ +#define __progname __argv[0] +#else +extern char __declspec(dllimport) *__progname; +#endif + +#ifdef __CYGWIN__ +static char EMSG[] = ""; +#else +#define EMSG "" +#endif + +static int getopt_internal(int, char * const *, const char *, + const struct option *, int *, int); +static int parse_long_options(char * const *, const char *, + const struct option *, int *, int); +static int gcd(int, int); +static void permute_args(int, int, int, char * const *); + +static char *place = EMSG; /* option letter processing */ + +/* XXX: set optreset to 1 rather than these two */ +static int nonopt_start = -1; /* first non option argument (for permute) */ +static int nonopt_end = -1; /* first option after non options (for permute) */ + +/* Error messages */ +static const char recargchar[] = "option requires an argument -- %c"; +static const char recargstring[] = "option requires an argument -- %s"; +static const char ambig[] = "ambiguous option -- %.*s"; +static const char noarg[] = "option doesn't take an argument -- %.*s"; +static const char illoptchar[] = "unknown option -- %c"; +static const char illoptstring[] = "unknown option -- %s"; + +static void +_vwarnx(const char *fmt,va_list ap) +{ + (void)fprintf(stderr,"%s: ",__progname); + if (fmt != NULL) + (void)vfprintf(stderr,fmt,ap); + (void)fprintf(stderr,"\n"); +} + +static void +warnx(const char *fmt,...) +{ + va_list ap; + va_start(ap,fmt); + _vwarnx(fmt,ap); + va_end(ap); +} + +/* + * Compute the greatest common divisor of a and b. + */ +static int +gcd(int a, int b) +{ + int c; + + c = a % b; + while (c != 0) { + a = b; + b = c; + c = a % b; + } + + return (b); +} + +/* + * Exchange the block from nonopt_start to nonopt_end with the block + * from nonopt_end to opt_end (keeping the same order of arguments + * in each block). + */ +static void +permute_args(int panonopt_start, int panonopt_end, int opt_end, + char * const *nargv) +{ + int cstart, cyclelen, i, j, ncycle, nnonopts, nopts, pos; + char *swap; + + /* + * compute lengths of blocks and number and size of cycles + */ + nnonopts = panonopt_end - panonopt_start; + nopts = opt_end - panonopt_end; + ncycle = gcd(nnonopts, nopts); + cyclelen = (opt_end - panonopt_start) / ncycle; + + for (i = 0; i < ncycle; i++) { + cstart = panonopt_end+i; + pos = cstart; + for (j = 0; j < cyclelen; j++) { + if (pos >= panonopt_end) + pos -= nnonopts; + else + pos += nopts; + swap = nargv[pos]; + /* LINTED const cast */ + ((char **) nargv)[pos] = nargv[cstart]; + /* LINTED const cast */ + ((char **)nargv)[cstart] = swap; + } + } +} + +/* + * parse_long_options -- + * Parse long options in argc/argv argument vector. + * Returns -1 if short_too is set and the option does not match long_options. + */ +static int +parse_long_options(char * const *nargv, const char *options, + const struct option *long_options, int *idx, int short_too) +{ + char *current_argv, *has_equal; + size_t current_argv_len; + int i, ambiguous, match; + +#define IDENTICAL_INTERPRETATION(_x, _y) \ + (long_options[(_x)].has_arg == long_options[(_y)].has_arg && \ + long_options[(_x)].flag == long_options[(_y)].flag && \ + long_options[(_x)].val == long_options[(_y)].val) + + current_argv = place; + match = -1; + ambiguous = 0; + + optind++; + + if ((has_equal = strchr(current_argv, '=')) != NULL) { + /* argument found (--option=arg) */ + current_argv_len = has_equal - current_argv; + has_equal++; + } else + current_argv_len = strlen(current_argv); + + for (i = 0; long_options[i].name; i++) { + /* find matching long option */ + if (strncmp(current_argv, long_options[i].name, + current_argv_len)) + continue; + + if (strlen(long_options[i].name) == current_argv_len) { + /* exact match */ + match = i; + ambiguous = 0; + break; + } + /* + * If this is a known short option, don't allow + * a partial match of a single character. + */ + if (short_too && current_argv_len == 1) + continue; + + if (match == -1) /* partial match */ + match = i; + else if (!IDENTICAL_INTERPRETATION(i, match)) + ambiguous = 1; + } + if (ambiguous) { + /* ambiguous abbreviation */ + if (PRINT_ERROR) + warnx(ambig, (int)current_argv_len, + current_argv); + optopt = 0; + return (BADCH); + } + if (match != -1) { /* option found */ + if (long_options[match].has_arg == no_argument + && has_equal) { + if (PRINT_ERROR) + warnx(noarg, (int)current_argv_len, + current_argv); + /* + * XXX: GNU sets optopt to val regardless of flag + */ + if (long_options[match].flag == NULL) + optopt = long_options[match].val; + else + optopt = 0; + return (BADARG); + } + if (long_options[match].has_arg == required_argument || + long_options[match].has_arg == optional_argument) { + if (has_equal) + optarg = has_equal; + else if (long_options[match].has_arg == + required_argument) { + /* + * optional argument doesn't use next nargv + */ + optarg = nargv[optind++]; + } + } + if ((long_options[match].has_arg == required_argument) + && (optarg == NULL)) { + /* + * Missing argument; leading ':' indicates no error + * should be generated. + */ + if (PRINT_ERROR) + warnx(recargstring, + current_argv); + /* + * XXX: GNU sets optopt to val regardless of flag + */ + if (long_options[match].flag == NULL) + optopt = long_options[match].val; + else + optopt = 0; + --optind; + return (BADARG); + } + } else { /* unknown option */ + if (short_too) { + --optind; + return (-1); + } + if (PRINT_ERROR) + warnx(illoptstring, current_argv); + optopt = 0; + return (BADCH); + } + if (idx) + *idx = match; + if (long_options[match].flag) { + *long_options[match].flag = long_options[match].val; + return (0); + } else + return (long_options[match].val); +#undef IDENTICAL_INTERPRETATION +} + +/* + * getopt_internal -- + * Parse argc/argv argument vector. Called by user level routines. + */ +static int +getopt_internal(int nargc, char * const *nargv, const char *options, + const struct option *long_options, int *idx, int flags) +{ + const char *oli; /* option letter list index */ + int optchar, short_too; + static int posixly_correct = -1; + + if (options == NULL) + return (-1); + + /* + * XXX Some GNU programs (like cvs) set optind to 0 instead of + * XXX using optreset. Work around this braindamage. + */ + if (optind == 0) + optind = optreset = 1; + + /* + * Disable GNU extensions if POSIXLY_CORRECT is set or options + * string begins with a '+'. + * + * CV, 2009-12-14: Check POSIXLY_CORRECT anew if optind == 0 or + * optreset != 0 for GNU compatibility. + */ + if (posixly_correct == -1 || optreset != 0) + posixly_correct = (getenv("POSIXLY_CORRECT") != NULL); + if (*options == '-') + flags |= FLAG_ALLARGS; + else if (posixly_correct || *options == '+') + flags &= ~FLAG_PERMUTE; + if (*options == '+' || *options == '-') + options++; + + optarg = NULL; + if (optreset) + nonopt_start = nonopt_end = -1; +start: + if (optreset || !*place) { /* update scanning pointer */ + optreset = 0; + if (optind >= nargc) { /* end of argument vector */ + place = EMSG; + if (nonopt_end != -1) { + /* do permutation, if we have to */ + permute_args(nonopt_start, nonopt_end, + optind, nargv); + optind -= nonopt_end - nonopt_start; + } + else if (nonopt_start != -1) { + /* + * If we skipped non-options, set optind + * to the first of them. + */ + optind = nonopt_start; + } + nonopt_start = nonopt_end = -1; + return (-1); + } + if (*(place = nargv[optind]) != '-' || + (place[1] == '\0' && strchr(options, '-') == NULL)) { + place = EMSG; /* found non-option */ + if (flags & FLAG_ALLARGS) { + /* + * GNU extension: + * return non-option as argument to option 1 + */ + optarg = nargv[optind++]; + return (INORDER); + } + if (!(flags & FLAG_PERMUTE)) { + /* + * If no permutation wanted, stop parsing + * at first non-option. + */ + return (-1); + } + /* do permutation */ + if (nonopt_start == -1) + nonopt_start = optind; + else if (nonopt_end != -1) { + permute_args(nonopt_start, nonopt_end, + optind, nargv); + nonopt_start = optind - + (nonopt_end - nonopt_start); + nonopt_end = -1; + } + optind++; + /* process next argument */ + goto start; + } + if (nonopt_start != -1 && nonopt_end == -1) + nonopt_end = optind; + + /* + * If we have "-" do nothing, if "--" we are done. + */ + if (place[1] != '\0' && *++place == '-' && place[1] == '\0') { + optind++; + place = EMSG; + /* + * We found an option (--), so if we skipped + * non-options, we have to permute. + */ + if (nonopt_end != -1) { + permute_args(nonopt_start, nonopt_end, + optind, nargv); + optind -= nonopt_end - nonopt_start; + } + nonopt_start = nonopt_end = -1; + return (-1); + } + } + + /* + * Check long options if: + * 1) we were passed some + * 2) the arg is not just "-" + * 3) either the arg starts with -- we are getopt_long_only() + */ + if (long_options != NULL && place != nargv[optind] && + (*place == '-' || (flags & FLAG_LONGONLY))) { + short_too = 0; + if (*place == '-') + place++; /* --foo long option */ + else if (*place != ':' && strchr(options, *place) != NULL) + short_too = 1; /* could be short option too */ + + optchar = parse_long_options(nargv, options, long_options, + idx, short_too); + if (optchar != -1) { + place = EMSG; + return (optchar); + } + } + + if ((optchar = (int)*place++) == (int)':' || + (optchar == (int)'-' && *place != '\0') || + (oli = strchr(options, optchar)) == NULL) { + /* + * If the user specified "-" and '-' isn't listed in + * options, return -1 (non-option) as per POSIX. + * Otherwise, it is an unknown option character (or ':'). + */ + if (optchar == (int)'-' && *place == '\0') + return (-1); + if (!*place) + ++optind; + if (PRINT_ERROR) + warnx(illoptchar, optchar); + optopt = optchar; + return (BADCH); + } + if (long_options != NULL && optchar == 'W' && oli[1] == ';') { + /* -W long-option */ + if (*place) /* no space */ + /* NOTHING */; + else if (++optind >= nargc) { /* no arg */ + place = EMSG; + if (PRINT_ERROR) + warnx(recargchar, optchar); + optopt = optchar; + return (BADARG); + } else /* white space */ + place = nargv[optind]; + optchar = parse_long_options(nargv, options, long_options, + idx, 0); + place = EMSG; + return (optchar); + } + if (*++oli != ':') { /* doesn't take argument */ + if (!*place) + ++optind; + } else { /* takes (optional) argument */ + optarg = NULL; + if (*place) /* no white space */ + optarg = place; + else if (oli[1] != ':') { /* arg not optional */ + if (++optind >= nargc) { /* no arg */ + place = EMSG; + if (PRINT_ERROR) + warnx(recargchar, optchar); + optopt = optchar; + return (BADARG); + } else + optarg = nargv[optind]; + } + place = EMSG; + ++optind; + } + /* dump back option letter */ + return (optchar); +} + +#ifdef REPLACE_GETOPT +/* + * getopt -- + * Parse argc/argv argument vector. + * + * [eventually this will replace the BSD getopt] + */ +int +getopt(int nargc, char * const *nargv, const char *options) +{ + + /* + * We don't pass FLAG_PERMUTE to getopt_internal() since + * the BSD getopt(3) (unlike GNU) has never done this. + * + * Furthermore, since many privileged programs call getopt() + * before dropping privileges it makes sense to keep things + * as simple (and bug-free) as possible. + */ + return (getopt_internal(nargc, nargv, options, NULL, NULL, 0)); +} +#endif /* REPLACE_GETOPT */ + +/* + * getopt_long -- + * Parse argc/argv argument vector. + */ +int +getopt_long(int nargc, char * const *nargv, const char *options, + const struct option *long_options, int *idx) +{ + + return (getopt_internal(nargc, nargv, options, long_options, idx, + FLAG_PERMUTE)); +} + +/* + * getopt_long_only -- + * Parse argc/argv argument vector. + */ +int +getopt_long_only(int nargc, char * const *nargv, const char *options, + const struct option *long_options, int *idx) +{ + + return (getopt_internal(nargc, nargv, options, long_options, idx, + FLAG_PERMUTE|FLAG_LONGONLY)); +} diff --git a/src/getopt/getopt.h b/src/getopt/getopt.h new file mode 100644 index 00000000..f3f864bd --- /dev/null +++ b/src/getopt/getopt.h @@ -0,0 +1,105 @@ +#ifndef __GETOPT_H__ +/** + * DISCLAIMER + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the w64 mingw-runtime package. + * + * The w64 mingw-runtime package and its code is distributed in the hope that it + * will be useful but WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESSED OR + * IMPLIED ARE HEREBY DISCLAIMED. This includes but is not limited to + * warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + */ + +#define __GETOPT_H__ + +/* All the headers include this file. */ +#include + +#if defined( WINGETOPT_SHARED_LIB ) +# if defined( BUILDING_WINGETOPT_DLL ) +# define WINGETOPT_API __declspec(dllexport) +# else +# define WINGETOPT_API __declspec(dllimport) +# endif +#else +# define WINGETOPT_API +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +WINGETOPT_API extern int optind; /* index of first non-option in argv */ +WINGETOPT_API extern int optopt; /* single option character, as parsed */ +WINGETOPT_API extern int opterr; /* flag to enable built-in diagnostics... */ + /* (user may set to zero, to suppress) */ + +WINGETOPT_API extern char *optarg; /* pointer to argument of current option */ + +extern int getopt(int nargc, char * const *nargv, const char *options); + +#ifdef _BSD_SOURCE +/* + * BSD adds the non-standard `optreset' feature, for reinitialisation + * of `getopt' parsing. We support this feature, for applications which + * proclaim their BSD heritage, before including this header; however, + * to maintain portability, developers are advised to avoid it. + */ +# define optreset __mingw_optreset +extern int optreset; +#endif +#ifdef __cplusplus +} +#endif +/* + * POSIX requires the `getopt' API to be specified in `unistd.h'; + * thus, `unistd.h' includes this header. However, we do not want + * to expose the `getopt_long' or `getopt_long_only' APIs, when + * included in this manner. Thus, close the standard __GETOPT_H__ + * declarations block, and open an additional __GETOPT_LONG_H__ + * specific block, only when *not* __UNISTD_H_SOURCED__, in which + * to declare the extended API. + */ +#endif /* !defined(__GETOPT_H__) */ + +#if !defined(__UNISTD_H_SOURCED__) && !defined(__GETOPT_LONG_H__) +#define __GETOPT_LONG_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +struct option /* specification for a long form option... */ +{ + const char *name; /* option name, without leading hyphens */ + int has_arg; /* does it take an argument? */ + int *flag; /* where to save its status, or NULL */ + int val; /* its associated status value */ +}; + +enum /* permitted values for its `has_arg' field... */ +{ + no_argument = 0, /* option never takes an argument */ + required_argument, /* option always requires an argument */ + optional_argument /* option may take an argument */ +}; + +extern int getopt_long(int nargc, char * const *nargv, const char *options, + const struct option *long_options, int *idx); +extern int getopt_long_only(int nargc, char * const *nargv, const char *options, + const struct option *long_options, int *idx); +/* + * Previous MinGW implementation had... + */ +#ifndef HAVE_DECL_GETOPT +/* + * ...for the long form API only; keep this for compatibility. + */ +# define HAVE_DECL_GETOPT 1 +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* !defined(__UNISTD_H_SOURCED__) && !defined(__GETOPT_LONG_H__) */ From 18fdffdf1778d4e8346894af84efa0a0a27baf2d Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Sun, 26 Mar 2023 00:14:54 -0700 Subject: [PATCH 11/22] fix some none portable code that was using GCC impl details --- src/InternalDHKeyExchange.cc | 10 +++++++++- src/SocketRecvBuffer.cc | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/InternalDHKeyExchange.cc b/src/InternalDHKeyExchange.cc index 83058f5e..b915a853 100644 --- a/src/InternalDHKeyExchange.cc +++ b/src/InternalDHKeyExchange.cc @@ -68,10 +68,18 @@ void DHKeyExchange::init(const unsigned char* prime, size_t primeBits, generator_ = n(gen.c_str(), gen.length()); size_t pbytes = (privateKeyBits + 7) / 8; +#if defined(_MSC_VER) + // MSVC will not compile dynamic arrays + unsigned char* buf = new unsigned char[pbytes]; +#else unsigned char buf[pbytes]; +#endif util::generateRandomData(buf, pbytes); privateKey_ = n(reinterpret_cast(buf), pbytes); - +#if defined(_MSC_VER) + // clean up memory + delete[] buf; +#endif keyLength_ = (primeBits + 7) / 8; } diff --git a/src/SocketRecvBuffer.cc b/src/SocketRecvBuffer.cc index 8b2352a6..e07f1c24 100644 --- a/src/SocketRecvBuffer.cc +++ b/src/SocketRecvBuffer.cc @@ -51,7 +51,7 @@ SocketRecvBuffer::~SocketRecvBuffer() = default; ssize_t SocketRecvBuffer::recv() { - size_t n = std::end(buf_) - last_; + size_t n = (buf_.data() + 16_k) - last_; if (n == 0) { A2_LOG_DEBUG("Buffer full"); return 0; From 461f9abcc90c53dfa24dde08a2c4161a40be18fe Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Sun, 26 Mar 2023 00:16:51 -0700 Subject: [PATCH 12/22] - pulling in std::back_insterter under MSVC - MSVC needs a return value even with unreachable code --- src/KqueueEventPoll.cc | 2 +- src/ReceiverMSEHandshakeCommand.cc | 5 +++++ src/RpcMethodImpl.h | 4 ++++ src/SSHSession.cc | 1 + 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/KqueueEventPoll.cc b/src/KqueueEventPoll.cc index ef96478e..96b7e883 100644 --- a/src/KqueueEventPoll.cc +++ b/src/KqueueEventPoll.cc @@ -97,7 +97,7 @@ KqueueEventPoll::KqueueEventPoll() KqueueEventPoll::~KqueueEventPoll() { if (kqfd_ != -1) { - int r = close(kqfd_); + int r = a2_close(kqfd_); int errNum = errno; if (r == -1) { A2_LOG_ERROR(fmt("Error occurred while closing kqueue file descriptor" diff --git a/src/ReceiverMSEHandshakeCommand.cc b/src/ReceiverMSEHandshakeCommand.cc index 90ba5585..52e51382 100644 --- a/src/ReceiverMSEHandshakeCommand.cc +++ b/src/ReceiverMSEHandshakeCommand.cc @@ -32,6 +32,11 @@ * files in the program, then also delete it here. */ /* copyright --> */ + +#if defined(_MSC_VER) // for std::back_inserter +# include +#endif + #include "ReceiverMSEHandshakeCommand.h" #include "PeerReceiveHandshakeCommand.h" #include "PeerConnection.h" diff --git a/src/RpcMethodImpl.h b/src/RpcMethodImpl.h index de6d7685..7f1f3661 100644 --- a/src/RpcMethodImpl.h +++ b/src/RpcMethodImpl.h @@ -41,6 +41,10 @@ #include #include +#if defined(_MSC_VER) // for std::back_inserter +# include +#endif + #include "RpcRequest.h" #include "ValueBase.h" #include "TorrentAttribute.h" diff --git a/src/SSHSession.cc b/src/SSHSession.cc index 5f1ac4b0..b50a725c 100644 --- a/src/SSHSession.cc +++ b/src/SSHSession.cc @@ -145,6 +145,7 @@ ssize_t SSHSession::writeData(const void* data, size_t len) { // net implemented yet assert(0); + return 0; // MSVC needs a return value even if it's unreached } ssize_t SSHSession::readData(void* data, size_t len) From 7567723726e3da22574b5b75801584c695575ea1 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Sun, 26 Mar 2023 11:19:48 -0700 Subject: [PATCH 13/22] cleanup of CMakeLists.txt properly deal with extraldflags Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com> --- CMakeLists.txt | 32 ++++++++++++++++++++------------ doc/CMakeLists.txt | 7 ++++--- src/CMakeLists.txt | 22 +++++++++++++++++----- 3 files changed, 41 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 62ed598d..7012abbb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,10 +27,15 @@ config_h_add_compile_definitions(PACKAGE_TARNAME="${PROJECT_NAME}") config_h_add_compile_definitions(PACKAGE_URL="${PROJECT_HOMEPAGE_URL}") config_h_add_compile_definitions(PACKAGE_BUGREPORT="https://github.com/aria2/aria2/issues") config_h_add_compile_definitions(PACKAGE_VERSION="${PROJECT_VERSION}") + +set(BUILD_ID "${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM}-${CMAKE_CXX_COMPILER_ID}") +set(HOST_ID "${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM}") +set(TARGET_ID "${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_SYSTEM}-${CMAKE_CXX_COMPILER_ID}") + config_h_add_compile_definitions(VERSION="${PROJECT_VERSION}") -config_h_add_compile_definitions(HOST="${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM}") -config_h_add_compile_definitions(BUILD="${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM}-${CMAKE_CXX_COMPILER_ID}") -config_h_add_compile_definitions(TARGET="${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_SYSTEM}-${CMAKE_CXX_COMPILER_ID}") +config_h_add_compile_definitions(HOST="${HOST_ID}") +config_h_add_compile_definitions(BUILD="${BUILD_ID}") +config_h_add_compile_definitions(TARGET="${TARGET_ID}") if(WIN32) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_POSIX_C_SOURCE=1") @@ -38,7 +43,10 @@ if(WIN32) set(CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS} -Wl,--dynamicbase -Wl,--nxcompat) set(CMAKE_STATIC_LINKER_FLAGS_LINKER_FLAGS ${CMAKE_STATIC_LINKER_FLAGS} -Wl,--dynamicbase -Wl,--nxcompat) - set(EXTRALIBS -lws2_32 -lwsock32 -lgdi32 -liphlpapi -lpsapi ${EXTRALIBS}) + if(MINGW) + set(EXTRALIBS "-lws2_32 -lwsock32 -lgdi32 -liphlpapi -lpsapi ${EXTRALIBS}") + set(EXTRALDFLAGS "${EXTRALDFLAGS} -Wl,--dynamicbase -Wl,--nxcompat") + endif() endif() option(WITH_LIBUV "Build with libuv" off) @@ -131,10 +139,10 @@ else() endif() if(ARIA2_STATIC) - if(WIN32) + if(MINGW) # Define _USE_32BIT_TIME_T because 32bit library of MinGW-w64 # does not implement many 64bit version functions. - set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -D_USE_32BIT_TIME_T) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_USE_32BIT_TIME_T") endif() endif() @@ -917,7 +925,7 @@ endif() if(ARIA2_STATIC) if(NOT WIN32 AND NOT APPLE) - set(EXTRALIBS -lpthread -ldl -lrt ${EXTRALIBS}) + set(EXTRALIBS "-lpthread -ldl -lrt ${EXTRALIBS}") endif() endif() @@ -941,9 +949,9 @@ add_subdirectory(test) message(STATUS "summary of build options: \n\ -Build: ${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM}-${CMAKE_CXX_COMPILER_ID} -Host: ${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM} -Target: ${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_SYSTEM}-${CMAKE_CXX_COMPILER_ID} +Build: ${BUILD_ID} +Host: ${HOST_ID} +Target: ${TARGET_ID} Install prefix: ${CMAKE_INSTALL_PREFIX} CC: ${CMAKE_C_COMPILER} CXX: ${CMAKE_CXX_COMPILER} @@ -1029,8 +1037,8 @@ add_custom_target(clang-format ) # ########## install files ############### -install(FILES README README.rst README.html DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) -install(FILES LICENSE.OpenSSL DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) +install(FILES README README.rst README.html TYPE DOC) +install(FILES LICENSE.OpenSSL DESTINATION TYPE DOC) # original Makefile.am contents follow: diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 505997d7..cbeb869e 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -2,11 +2,12 @@ add_subdirectory(manual-src) + ########### install files ############### -install(FILES xmlrpc/aria2mon xmlrpc/aria2rpc xmlrpc/README.txt DESTINATION ${CMAKE_INSTALL_DOCDIR}/xmlrpc) -install(FILES bash_completion/README.txt DESTINATION ${CMAKE_INSTALL_DOCDIR}/bash_completion) -install(FILES bash_completion/aria2c DESTINATION ${CMAKE_INSTALL_DOCDIR}/bash_completion) +install(FILES xmlrpc/aria2mon xmlrpc/aria2rpc xmlrpc/README.txt TYPE DOC) +install(FILES bash_completion/README.txt DESTINATION TYPE DOC) +install(FILES bash_completion/aria2c DESTINATION TYPE DOC) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0761c141..0aff413d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1277,15 +1277,17 @@ if(ENABLE_LIBARIA2) set(LIBARIA2_BUILD_MODE SHARED) - if(MSVC) - set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) + if(WIN_BUILD) + set(EXTRALDFLAGS "${EXTRALDFLAGS} -no-undefined") endif() -# add_library(aria2 SHARED ${aria2_SRCS}) else() set(LIBARIA2_BUILD_MODE STATIC) - # add_library(aria2 STATIC ${aria2_SRCS}) +endif() + +if(MSVC) + set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) endif() add_library(aria2 ${LIBARIA2_BUILD_MODE} ${aria2_SRCS}) @@ -1391,17 +1393,27 @@ if(ENABLE_WEBSOCKET) target_link_libraries(aria2 wslay) endif() +if(ARIA2_STATIC) + set(EXTRALDFLAGS "${EXTRALDFLAGS} -all-static") + if(MINGW OR MSVC OR APPLE) + else() + set(EXTRALDFLAGS "${EXTRALDFLAGS} -lpthread -ldl -lrt") + endif() +endif() + set_target_properties(aria2 PROPERTIES VERSION 0.0.0 SOVERSION 1) +target_link_libraries(aria2 ${EXTRALDFLAGS}) install(TARGETS aria2 ${INSTALL_TARGETS_DEFAULT_ARGS}) target_link_libraries(aria2c aria2) +target_link_libraries(aria2c ${EXTRALDFLAGS}) # ########## next target ############### # add_library(aria2_static STATIC ${aria2_SRCS}) # ########## install files ############### -install(FILES libaria2.pc DESTINATION lib) +install(FILES libaria2.pc DESTINATION lib/pkgconfig) # original Makefile.am contents follow: From 1bac2fac9afb909636b86ae911b1b20936a87cb4 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Sun, 26 Mar 2023 15:02:18 -0700 Subject: [PATCH 14/22] better windows header and symbol detection --- CMakeLists.txt | 63 ++++++++++++++++++++++++++++++++++------------ src/CMakeLists.txt | 9 ++++--- 2 files changed, 52 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7012abbb..d3fbbca8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,12 +38,14 @@ config_h_add_compile_definitions(BUILD="${BUILD_ID}") config_h_add_compile_definitions(TARGET="${TARGET_ID}") if(WIN32) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_POSIX_C_SOURCE=1") - set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} -Wl,--dynamicbase -Wl,--nxcompat) - set(CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS} -Wl,--dynamicbase -Wl,--nxcompat) - set(CMAKE_STATIC_LINKER_FLAGS_LINKER_FLAGS ${CMAKE_STATIC_LINKER_FLAGS} -Wl,--dynamicbase -Wl,--nxcompat) - if(MINGW) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_POSIX_C_SOURCE=1") + + if(MSVC) + # set(EXTRALIBS ws2_32 wsock32 gdi32 iphlpapi psapi ${EXTRALIBS}) + set(EXTRALDFLAGS ${EXTRALDFLAGS} /DYNAMICBASE /NXCOMPAT) + + else() # MINGW set(EXTRALIBS "-lws2_32 -lwsock32 -lgdi32 -liphlpapi -lpsapi ${EXTRALIBS}") set(EXTRALDFLAGS "${EXTRALDFLAGS} -Wl,--dynamicbase -Wl,--nxcompat") endif() @@ -157,9 +159,20 @@ include(CheckLibraryExists) include(CheckSymbolExists) include(CheckCXXSymbolExists) include(CheckIncludeFiles) +include(CheckIncludeFileCXX) include(CheckTypeSize) include(CheckFunctionExists) +if(WIN32) + if(MSVC) + set(a2_extra_windows_flags "/D WIN32_LEAN_AND_MEAN /FI windows.h") + else() + set(a2_extra_windows_flags "-DWIN32_LEAN_AND_MEAN -include windows.h") + endif() + + set(CMAKE_REQUIRED_FLAGS ${a2_extra_windows_flags}) +endif() + find_package(CPPUNIT) if(CPPUNIT_FOUND) @@ -267,6 +280,7 @@ endif() if(WIN32) set(WIN_BUILD yes) + set(_check_headers windows.h winsock2.h @@ -285,7 +299,10 @@ if(WIN32) string(REPLACE "/" "_" header_var ${header_var}) set(header_var "HAVE_${header_var}") set(${header_var}) - check_include_file(${header} ${header_var}) + check_include_file_cxx(${header} ${header_var}) + if(NOT ${header_var}) + check_include_file(${header} ${header_var}) + endif() if(${header_var}) config_h_add_compile_definitions(${header_var}) @@ -328,14 +345,14 @@ if(WITH_WINTLS) find_library(HAVE_WINTLS_LIBS crypt32) find_library(HAVE_WINTLS_LIBS secur32) find_library(HAVE_WINTLS_LIBS advapi32) - check_include_file(wincrypt.h HAVE_WINTLS_HEADERS) - check_include_file(security.h HAVE_WINTLS_HEADERS) + check_include_file_cxx(wincrypt.h HAVE_WINTLS_HEADERS) + check_include_file_cxx(security.h HAVE_WINTLS_HEADERS) if(HAVE_WINTLS_LIBS AND HAVE_WINTLS_HEADERS) set(HAVE_WINTLS yes CACHE BOOL "Define if you have Windows TLS support" FORCE) config_h_add_compile_definitions(HAVE_WINTLS=1) config_h_add_compile_definitions(SECURITY_WIN32=1) # Use security.h in WIN32 mode - set(WINTLS_LIBS "-lcrypt32 -lsecur32 -ladvapi32") + set(WINTLS_LIBS crypt32 secur32 advapi32) set(HAVE_SSL yes CACHE BOOL "Have SSL support" FORCE) set(HAVE_NATIVETLS yes CACHE BOOL "Have Native TLS" FORCE) message(STATUS "Enable Windows native SSL/TLS support") @@ -663,7 +680,8 @@ foreach(header ${_check_headers}) string(REPLACE "/" "_" header_var ${header_var}) set(header_var "HAVE_${header_var}") set(${header_var}) - check_include_file(${header} ${header_var}) + + check_include_file_cxx(${header} ${header_var}) if(${header_var}) config_h_add_compile_definitions(${header_var}) @@ -673,7 +691,7 @@ endforeach() unset(_check_headers) -check_include_file(stdbool.h HAVE_STDBOOL_H) +check_include_file_cxx(stdbool.h HAVE_STDBOOL_H) if(HAVE_STDBOOL_H) config_h_add_compile_definitions(HAVE_STDBOOL_H=1) @@ -697,6 +715,11 @@ endif() find_package(Gettext) +set(a2_symbol_check_headers "") +if(WIN32) + set(a2_symbol_check_headers "stdlib.h;memory.h;string.h;math.h") +endif() + set(_check_funcs __argz_count __argz_next @@ -750,7 +773,8 @@ foreach(func ${_check_funcs}) string(TOUPPER ${func} func_var) set(func_var "HAVE_${func_var}") set(${func_var}) - check_function_exists(${func} ${func_var}) + + check_cxx_symbol_exists(${func} "${a2_symbol_check_headers}" ${func_var}) if(${func_var}) config_h_add_compile_definitions(${func_var}) @@ -759,6 +783,7 @@ foreach(func ${_check_funcs}) endforeach() unset(_check_funcs) +unset(a2_symbol_check_headers) if(WITH_TCMALLOC AND WITH_JEMALLOC) message(FATAL_ERROR "Cannot use both, tcmalloc and jemalloc!") @@ -785,18 +810,18 @@ if(WITH_JEMALLOC) endif() if(ENABLE_EPOLL) - check_function_exists(epoll_create HAVE_EPOLL) + check_cxx_symbol_exists(epoll_create "" HAVE_EPOLL) if(HAVE_EPOLL) config_h_add_compile_definitions(HAVE_EPOLL=1) endif() endif() -check_function_exists(posix_fallocate HAVE_POSIX_FALLOCATE) +check_cxx_symbol_exists(posix_fallocate "" HAVE_POSIX_FALLOCATE) if(HAVE_POSIX_FALLOCATE) config_h_add_compile_definitions(HAVE_POSIX_FALLOCATE=1) endif() -check_function_exists(fallocate HAVE_FALLOCATE) +check_cxx_symbol_exists(fallocate "" HAVE_FALLOCATE) if(HAVE_FALLOCATE) config_h_add_compile_definitions(HAVE_FALLOCATE=1) endif() @@ -820,6 +845,11 @@ if(HAVE_LOCALTIME_R) config_h_add_compile_definitions(HAVE_LOCALTIME_R=1) endif() +set(a2_symbol_check_headers "") +if(WIN32) + set(a2_symbol_check_headers "stdlib.h;memory.h;string.h;math.h;ws2tcpip.h" ) +endif() + set(_check_funcs basename gai_strerror @@ -836,7 +866,7 @@ foreach(func ${_check_funcs}) string(TOUPPER ${func} func_var) set(func_var "HAVE_${func_var}") set(${func_var}) - check_function_exists(${func} ${func_var}) + check_cxx_symbol_exists(${func} "${a2_symbol_check_headers}" ${func_var}) if(${func_var}) config_h_add_compile_definitions(${func_var}) @@ -845,6 +875,7 @@ foreach(func ${_check_funcs}) endforeach() unset(_check_funcs) +unset(a2_symbol_check_headers) if(NOT HAVE_GAI_STRERR AND HAVE_WS2TCPIP_H AND (WIN32 AND NOT MINGW)) set(HAVE_GAI_STRERROR true) # It's there in ws2tcpip.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0aff413d..40fd3e9b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1277,8 +1277,8 @@ if(ENABLE_LIBARIA2) set(LIBARIA2_BUILD_MODE SHARED) - if(WIN_BUILD) - set(EXTRALDFLAGS "${EXTRALDFLAGS} -no-undefined") + if(WIN_BUILD AND NOT MSVC) + set(EXTRALDFLAGS ${EXTRALDFLAGS} -no-undefined) endif() else() @@ -1396,17 +1396,18 @@ endif() if(ARIA2_STATIC) set(EXTRALDFLAGS "${EXTRALDFLAGS} -all-static") if(MINGW OR MSVC OR APPLE) + # Do nothing else() set(EXTRALDFLAGS "${EXTRALDFLAGS} -lpthread -ldl -lrt") endif() endif() set_target_properties(aria2 PROPERTIES VERSION 0.0.0 SOVERSION 1) -target_link_libraries(aria2 ${EXTRALDFLAGS}) +target_link_options(aria2 PUBLIC ${EXTRALDFLAGS}) install(TARGETS aria2 ${INSTALL_TARGETS_DEFAULT_ARGS}) target_link_libraries(aria2c aria2) -target_link_libraries(aria2c ${EXTRALDFLAGS}) +target_link_options(aria2c PUBLIC ${EXTRALDFLAGS}) # ########## next target ############### From f6d6fa68d1776b98b3099c278e254071b8dc0786 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Sun, 26 Mar 2023 18:51:01 -0700 Subject: [PATCH 15/22] use check_cxx_symbol_exists to get better detection Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com> --- CMakeLists.txt | 117 +++++++++++++++++++++++++------------- deps/wslay/CMakeLists.txt | 24 ++++++-- 2 files changed, 95 insertions(+), 46 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d3fbbca8..75092557 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,12 +27,12 @@ config_h_add_compile_definitions(PACKAGE_TARNAME="${PROJECT_NAME}") config_h_add_compile_definitions(PACKAGE_URL="${PROJECT_HOMEPAGE_URL}") config_h_add_compile_definitions(PACKAGE_BUGREPORT="https://github.com/aria2/aria2/issues") config_h_add_compile_definitions(PACKAGE_VERSION="${PROJECT_VERSION}") - -set(BUILD_ID "${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM}-${CMAKE_CXX_COMPILER_ID}") -set(HOST_ID "${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM}") -set(TARGET_ID "${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_SYSTEM}-${CMAKE_CXX_COMPILER_ID}") - config_h_add_compile_definitions(VERSION="${PROJECT_VERSION}") + +set(BUILD_ID "${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM_NAME}-${CMAKE_CXX_COMPILER_ID}") +set(HOST_ID "${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM_NAME}") +set(TARGET_ID "${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_SYSTEM_NAME}-${CMAKE_CXX_COMPILER_ID}") + config_h_add_compile_definitions(HOST="${HOST_ID}") config_h_add_compile_definitions(BUILD="${BUILD_ID}") config_h_add_compile_definitions(TARGET="${TARGET_ID}") @@ -43,10 +43,10 @@ if(WIN32) if(MSVC) # set(EXTRALIBS ws2_32 wsock32 gdi32 iphlpapi psapi ${EXTRALIBS}) - set(EXTRALDFLAGS ${EXTRALDFLAGS} /DYNAMICBASE /NXCOMPAT) + set(EXTRALDFLAGS "${EXTRALDFLAGS} /DYNAMICBASE /NXCOMPAT") else() # MINGW - set(EXTRALIBS "-lws2_32 -lwsock32 -lgdi32 -liphlpapi -lpsapi ${EXTRALIBS}") + list(APPEND EXTRALIBS -lws2_32 -lwsock32 -lgdi32 -liphlpapi -lpsapi ${EXTRALIBS}) set(EXTRALDFLAGS "${EXTRALDFLAGS} -Wl,--dynamicbase -Wl,--nxcompat") endif() endif() @@ -84,7 +84,7 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") # using Clang elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") # using GCC - set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -pipe) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pipe") elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") # using Intel C++ @@ -105,7 +105,7 @@ if(WIN32 AND NOT MINGW) endif() if(CMAKE_C_COMPILER_ID STREQUAL "GNU") - set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} -pipe) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pipe") endif() option(ARIA2_STATIC "Set 'on' to build a statically linked aria2" off) @@ -171,6 +171,8 @@ if(WIN32) endif() set(CMAKE_REQUIRED_FLAGS ${a2_extra_windows_flags}) +elseif(UNIX) + set(CMAKE_REQUIRED_FLAGS "-D_GNU_SOURCE") endif() find_package(CPPUNIT) @@ -278,6 +280,9 @@ else() set(HAVE_OSX no CACHE BOOL "On Mac OS X" FORCE) endif() + +set(a2_found_headers) + if(WIN32) set(WIN_BUILD yes) @@ -300,11 +305,9 @@ if(WIN32) set(header_var "HAVE_${header_var}") set(${header_var}) check_include_file_cxx(${header} ${header_var}) - if(NOT ${header_var}) - check_include_file(${header} ${header_var}) - endif() if(${header_var}) + list(APPEND a2_found_headers ${header}) config_h_add_compile_definitions(${header_var}) else() endif() @@ -339,14 +342,23 @@ if(WITH_APPLETLS) endif() set(HAVE_WINTLS no CACHE BOOL "Define if you have Windows TLS support" FORCE) - +set(HAVE_WINTLS_LIBS false) +set(HAVE_WINTLS_HEADERS false) if(WITH_WINTLS) if(WIN32) find_library(HAVE_WINTLS_LIBS crypt32) find_library(HAVE_WINTLS_LIBS secur32) find_library(HAVE_WINTLS_LIBS advapi32) - check_include_file_cxx(wincrypt.h HAVE_WINTLS_HEADERS) - check_include_file_cxx(security.h HAVE_WINTLS_HEADERS) + check_include_file_cxx(wincrypt.h HAVE_WINCRYPT_H) + if(HAVE_WINCRYPT_H) + list(APPEND a2_found_headers wincrypt.h) + endif() + check_include_file_cxx(security.h HAVE_SECURITY_H) + if(HAVE_SECURITY_H) + list(APPEND a2_found_headers security.h) + endif() + + set(HAVE_WINTLS_HEADERS (HAVE_WINCRYPT_H AND HAVE_SECURITY_H) ) if(HAVE_WINTLS_LIBS AND HAVE_WINTLS_HEADERS) set(HAVE_WINTLS yes CACHE BOOL "Define if you have Windows TLS support" FORCE) @@ -643,8 +655,11 @@ set(_check_headers langinfo.h libintl.h limits.h + libgen.h locale.h malloc.h + math.h + memory.h netdb.h netinet/in.h netinet/tcp.h @@ -654,12 +669,16 @@ set(_check_headers stddef.h stdint.h stdio_ext.h - stdlib.h + stdlib.h string.h strings.h + sys/epoll.h + sys/event.h sys/ioctl.h + sys/mman.h sys/param.h sys/resource.h + sys/stat.h sys/signal.h sys/socket.h sys/time.h @@ -667,11 +686,12 @@ set(_check_headers sys/uio.h sys/utsname.h termios.h + time.h unistd.h utime.h wchar.h ifaddrs.h - pwd.h + pwd.h ) foreach(header ${_check_headers}) @@ -684,6 +704,7 @@ foreach(header ${_check_headers}) check_include_file_cxx(${header} ${header_var}) if(${header_var}) + list(APPEND a2_found_headers ${header}) config_h_add_compile_definitions(${header_var}) else() endif() @@ -694,6 +715,7 @@ unset(_check_headers) check_include_file_cxx(stdbool.h HAVE_STDBOOL_H) if(HAVE_STDBOOL_H) + list(APPEND a2_found_headers stdbool.h) config_h_add_compile_definitions(HAVE_STDBOOL_H=1) endif() @@ -704,7 +726,7 @@ else() endif() set(save_CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES}) -set(CMAKE_EXTRA_INCLUDE_FILES "time.h") +set(CMAKE_EXTRA_INCLUDE_FILES ${a2_found_headers}) check_type_size("struct timespec" HAVE_A2_STRUCT_TIMESPEC LANGUAGE CXX) set(CMAKE_EXTRA_INCLUDE_FILES ${save_CMAKE_EXTRA_INCLUDE_FILES}) @@ -715,11 +737,8 @@ endif() find_package(Gettext) -set(a2_symbol_check_headers "") -if(WIN32) - set(a2_symbol_check_headers "stdlib.h;memory.h;string.h;math.h") -endif() - +set(save_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) +set(CMAKE_REQUIRED_LIBRARIES m ${CMAKE_REQUIRED_LIBRARIES}) set(_check_funcs __argz_count __argz_next @@ -774,7 +793,12 @@ foreach(func ${_check_funcs}) set(func_var "HAVE_${func_var}") set(${func_var}) - check_cxx_symbol_exists(${func} "${a2_symbol_check_headers}" ${func_var}) + check_cxx_symbol_exists(${func} "${a2_found_headers}" ${func_var}) + if(NOT ${func_var}) + message(STATUS "Retrying with check_function_exists ...") + unset(${func_var} CACHE) + check_function_exists(${func} ${func_var}) + endif() if(${func_var}) config_h_add_compile_definitions(${func_var}) @@ -783,7 +807,7 @@ foreach(func ${_check_funcs}) endforeach() unset(_check_funcs) -unset(a2_symbol_check_headers) +set(CMAKE_REQUIRED_LIBRARIES ${save_CMAKE_REQUIRED_LIBRARIES}) if(WITH_TCMALLOC AND WITH_JEMALLOC) message(FATAL_ERROR "Cannot use both, tcmalloc and jemalloc!") @@ -810,18 +834,29 @@ if(WITH_JEMALLOC) endif() if(ENABLE_EPOLL) - check_cxx_symbol_exists(epoll_create "" HAVE_EPOLL) + check_cxx_symbol_exists(epoll_create "${a2_found_headers}" HAVE_EPOLL) if(HAVE_EPOLL) config_h_add_compile_definitions(HAVE_EPOLL=1) endif() endif() -check_cxx_symbol_exists(posix_fallocate "" HAVE_POSIX_FALLOCATE) +check_cxx_symbol_exists(posix_fallocate "${a2_found_headers}" HAVE_POSIX_FALLOCATE) +if(NOT HAVE_POSIX_FALLOCATE) + message(STATUS "Retrying with check_function_exists ...") + unset(HAVE_POSIX_FALLOCATE CACHE) + check_function_exists(posix_fallocate HAVE_POSIX_FALLOCATE) +endif() if(HAVE_POSIX_FALLOCATE) config_h_add_compile_definitions(HAVE_POSIX_FALLOCATE=1) endif() -check_cxx_symbol_exists(fallocate "" HAVE_FALLOCATE) + +check_cxx_symbol_exists(fallocate "${a2_found_headers}" HAVE_FALLOCATE) +if(NOT HAVE_FALLOCATE) + message(STATUS "Retrying with check_function_exists ...") + unset(HAVE_FALLOCATE CACHE) + check_function_exists(fallocate HAVE_FALLOCATE) +endif() if(HAVE_FALLOCATE) config_h_add_compile_definitions(HAVE_FALLOCATE=1) endif() @@ -833,23 +868,18 @@ else() set(HAVE_SOME_FALLOCATE no CACHE BOOL "if there is some fallocate support" FORCE) endif() -check_cxx_symbol_exists(asctime_r time.h HAVE_ASCTIME_R) +check_cxx_symbol_exists(asctime_r "${a2_found_headers}" HAVE_ASCTIME_R) if(HAVE_ASCTIME_R) config_h_add_compile_definitions(HAVE_ASCTIME_R=1) endif() -check_cxx_symbol_exists(localtime_r time.h HAVE_LOCALTIME_R) +check_cxx_symbol_exists(localtime_r "${a2_found_headers}" HAVE_LOCALTIME_R) if(HAVE_LOCALTIME_R) config_h_add_compile_definitions(HAVE_LOCALTIME_R=1) endif() -set(a2_symbol_check_headers "") -if(WIN32) - set(a2_symbol_check_headers "stdlib.h;memory.h;string.h;math.h;ws2tcpip.h" ) -endif() - set(_check_funcs basename gai_strerror @@ -866,7 +896,13 @@ foreach(func ${_check_funcs}) string(TOUPPER ${func} func_var) set(func_var "HAVE_${func_var}") set(${func_var}) - check_cxx_symbol_exists(${func} "${a2_symbol_check_headers}" ${func_var}) + + check_cxx_symbol_exists(${func} "${a2_found_headers}" ${func_var}) + if(NOT ${func_var}) + message(STATUS "Retrying with check_function_exists ...") + unset(${func_var} CACHE) + check_function_exists(${func} ${func_var}) + endif() if(${func_var}) config_h_add_compile_definitions(${func_var}) @@ -875,7 +911,6 @@ foreach(func ${_check_funcs}) endforeach() unset(_check_funcs) -unset(a2_symbol_check_headers) if(NOT HAVE_GAI_STRERR AND HAVE_WS2TCPIP_H AND (WIN32 AND NOT MINGW)) set(HAVE_GAI_STRERROR true) # It's there in ws2tcpip.h @@ -911,14 +946,14 @@ int main(int argc, char* argv[]) { endif() set(save_CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES}) -set(CMAKE_EXTRA_INCLUDE_FILES sys/types.h sys/socket.h netinet/in.h) -check_type_size("struct sockaddr_in.sin_len" HAVE_SOCKADDR_IN_SIN_LEN) +set(CMAKE_EXTRA_INCLUDE_FILES ${a2_found_headers}) +check_type_size("((struct sockaddr_in*)0)->sin_len" HAVE_SOCKADDR_IN_SIN_LEN) if(HAVE_SOCKADDR_IN_SIN_LEN) config_h_add_compile_definitions(HAVE_SOCKADDR_IN_SIN_LEN=1) endif() -check_type_size("struct sockaddr_in6.sin6_len" HAVE_SOCKADDR_IN6_SIN6_LEN) +check_type_size("((struct sockaddr_in6*)0)->sin6_len" HAVE_SOCKADDR_IN6_SIN6_LEN) if(HAVE_SOCKADDR_IN6_SIN6_LEN) config_h_add_compile_definitions(HAVE_SOCKADDR_IN6_SIN6_LEN=1) @@ -956,7 +991,7 @@ endif() if(ARIA2_STATIC) if(NOT WIN32 AND NOT APPLE) - set(EXTRALIBS "-lpthread -ldl -lrt ${EXTRALIBS}") + set(EXTRALIBS -lpthread -ldl -lrt ${EXTRALIBS}) endif() endif() diff --git a/deps/wslay/CMakeLists.txt b/deps/wslay/CMakeLists.txt index 593799b5..22037424 100644 --- a/deps/wslay/CMakeLists.txt +++ b/deps/wslay/CMakeLists.txt @@ -18,9 +18,16 @@ config_h_add_compile_definitions(PACKAGE_URL="${PROJECT_HOMEPAGE_URL}") config_h_add_compile_definitions(PACKAGE_BUGREPORT="t-tujikawa@users.sourceforge.net") config_h_add_compile_definitions(PACKAGE_VERSION="${PROJECT_VERSION}") config_h_add_compile_definitions(VERSION="${PROJECT_VERSION}") -config_h_add_compile_definitions(HOST="${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM}") -config_h_add_compile_definitions(BUILD="${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM}") -config_h_add_compile_definitions(TARGET="${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_SYSTEM}-${CMAKE_CXX_COMPILER_TARGET}") + +set(BUILD_ID "${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM_NAME}-${CMAKE_CXX_COMPILER_ID}") +set(HOST_ID "${CMAKE_HOST_SYSTEM_PROCESSOR}-${CMAKE_HOST_SYSTEM_NAME}") +set(TARGET_ID "${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_SYSTEM_NAME}-${CMAKE_CXX_COMPILER_ID}") + + +config_h_add_compile_definitions(HOST="${HOST_ID}") +config_h_add_compile_definitions(BUILD="${BUILD_ID}") +config_h_add_compile_definitions(TARGET="${TARGET_ID}") + set(PACKAGE_VERSION ${PROJECT_VERSION}) option(ENABLE_WERROR "Builld with werror" off) @@ -37,7 +44,7 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") # using Clang elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") # using GCC - set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -pipe) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pipe") elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") # using Intel C++ @@ -84,6 +91,8 @@ if(WIN32) set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} -lws2_32) endif() +set(wslay_found_headers ${a2_found_headers}) #inherit from parent project if possible + set(_check_headers arpa/inet.h netinet/in.h @@ -92,6 +101,7 @@ set(_check_headers stdlib.h string.h unistd.h + memory.h ) foreach(header ${_check_headers}) @@ -103,6 +113,7 @@ foreach(header ${_check_headers}) check_include_file(${header} ${header_var}) if(${header_var}) + list(APPEND wslay_found_headers ${header}) config_h_add_compile_definitions(${header_var}) endif() endforeach() @@ -118,11 +129,14 @@ if(WIN32) endif() endif() +set(save_CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES}) +set(CMAKE_EXTRA_INCLUDE_FILES ${wslay_found_headers}) check_type_size(ptrdiff_t PTRDIFF_T LANGUAGE CXX) if(PTRDIFF_T) set(HAVE_PTRDIFF_T true) config_h_add_compile_definitions(HAVE_PTRDIFF_T) endif() +set(CMAKE_EXTRA_INCLUDE_FILES save_CMAKE_EXTRA_INCLUDE_FILES) set(_check_funcs memmove @@ -136,7 +150,7 @@ foreach(func ${_check_funcs}) string(TOUPPER ${func} func_var) set(func_var "HAVE_${func_var}") set(${func_var}) - check_function_exists(${func} ${func_var}) + check_cxx_symbol_exists(${func} ${wslay_found_headers} ${func_var}) if(${func_var}) config_h_add_compile_definitions(${func_var}) From 7f7cdab61c2c5b961c06c2328ddb3f3fe1b4b96b Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Sun, 26 Mar 2023 19:58:58 -0700 Subject: [PATCH 16/22] ensure better checkes still pass on MSVC checking for c functions with check_cxx_* can cause check to fail do to overloads --- CMakeLists.txt | 47 +++++++++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 75092557..ce77494d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -353,12 +353,18 @@ if(WITH_WINTLS) if(HAVE_WINCRYPT_H) list(APPEND a2_found_headers wincrypt.h) endif() + + list(APPEND CMAKE_REQUIRED_DEFINITIONS "/D SECURITY_WIN32") check_include_file_cxx(security.h HAVE_SECURITY_H) if(HAVE_SECURITY_H) list(APPEND a2_found_headers security.h) + else() + list(POP_BACK CMAKE_REQUIRED_DEFINITIONS) + endif() + + if(HAVE_WINCRYPT_H AND HAVE_SECURITY_H) + set(HAVE_WINTLS_HEADERS true) endif() - - set(HAVE_WINTLS_HEADERS (HAVE_WINCRYPT_H AND HAVE_SECURITY_H) ) if(HAVE_WINTLS_LIBS AND HAVE_WINTLS_HEADERS) set(HAVE_WINTLS yes CACHE BOOL "Define if you have Windows TLS support" FORCE) @@ -420,32 +426,32 @@ if(WITH_OPENSSL) set(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_LIBRARIES}) set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR}) - check_cxx_symbol_exists(EVP_DigestInit_ex evp.h HAVE_EVP_DIGESTINIT_EX) + check_cxx_symbol_exists(EVP_DigestInit_ex openssl/evp.h HAVE_EVP_DIGESTINIT_EX) if(HAVE_EVP_DIGESTINIT_EX) set(HAVE_OLD_OPENSSL yes CACHE BOOL "Define if you have old openssl" FORCE) config_h_add_compile_definitions(HAVE_OLD_OPENSSL=1) endif() - check_cxx_symbol_exists(EVP_sha224 evp.h HAVE_EVP_SHA224) + check_cxx_symbol_exists(EVP_sha224 openssl/evp.h HAVE_EVP_SHA224) if(HAVE_EVP_SHA224) config_h_add_compile_definitions(HAVE_EVP_SHA224) endif() - check_cxx_symbol_exists(EVP_sha256 evp.h HAVE_EVP_SHA256) + check_cxx_symbol_exists(EVP_sha256 openssl/evp.h HAVE_EVP_SHA256) if(HAVE_EVP_SHA256) config_h_add_compile_definitions(HAVE_EVP_SHA256) endif() - check_cxx_symbol_exists(EVP_sha384 evp.h HAVE_EVP_SHA384) + check_cxx_symbol_exists(EVP_sha384 openssl/evp.h HAVE_EVP_SHA384) if(HAVE_EVP_SHA384) config_h_add_compile_definitions(HAVE_EVP_SHA384) endif() - check_cxx_symbol_exists(EVP_sha512 evp.h HAVE_EVP_SHA512) + check_cxx_symbol_exists(EVP_sha512 openssl/evp.h HAVE_EVP_SHA512) if(HAVE_EVP_SHA512) config_h_add_compile_definitions(HAVE_EVP_SHA512) @@ -539,13 +545,15 @@ if(WITH_LIBCARES) set(CMAKE_REQUIRED_INCLUDES ${LIBCARES_INCLUDE_DIR}) set(CMAKE_EXTRA_INCLUDE_FILES ares.h) check_type_size(ares_addr_node ARES_ADDR_NODE LANGUAGE CXX) - check_type_size(ares_set_servers ARES_SET_SERVERS LANGUAGE C) + if(ARES_ADDR_NODE) config_h_add_compile_definitions(HAVE_ARES_ADDR_NODE) endif() - if(ARES_SET_SERVERS) + check_cxx_symbol_exists(ares_set_servers ares.h HAVE_ARES_SET_SERVERS) + + if(HAVE_ARES_SET_SERVERS) config_h_add_compile_definitions(HAVE_ARES_SET_SERVERS) endif() @@ -738,7 +746,11 @@ endif() find_package(Gettext) set(save_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) -set(CMAKE_REQUIRED_LIBRARIES m ${CMAKE_REQUIRED_LIBRARIES}) +if(WIN32) + # No exta libs needed +else() + list(APPEND CMAKE_REQUIRED_LIBRARIES m) +endif() set(_check_funcs __argz_count __argz_next @@ -793,12 +805,8 @@ foreach(func ${_check_funcs}) set(func_var "HAVE_${func_var}") set(${func_var}) - check_cxx_symbol_exists(${func} "${a2_found_headers}" ${func_var}) - if(NOT ${func_var}) - message(STATUS "Retrying with check_function_exists ...") - unset(${func_var} CACHE) - check_function_exists(${func} ${func_var}) - endif() + # check_cxx_symbol_exists(${func} "${a2_found_headers}" ${func_var}) + check_symbol_exists(${func} "${a2_found_headers}" ${func_var}) if(${func_var}) config_h_add_compile_definitions(${func_var}) @@ -897,12 +905,7 @@ foreach(func ${_check_funcs}) set(func_var "HAVE_${func_var}") set(${func_var}) - check_cxx_symbol_exists(${func} "${a2_found_headers}" ${func_var}) - if(NOT ${func_var}) - message(STATUS "Retrying with check_function_exists ...") - unset(${func_var} CACHE) - check_function_exists(${func} ${func_var}) - endif() + check_symbol_exists(${func} "${a2_found_headers}" ${func_var}) if(${func_var}) config_h_add_compile_definitions(${func_var}) From b0aa8a3550f731721074475c05a05fc3e34c0f91 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Sun, 26 Mar 2023 20:23:16 -0700 Subject: [PATCH 17/22] we really need these to be lists but wiht the simi-colons seperated backing --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ce77494d..aa612e70 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,13 +37,14 @@ config_h_add_compile_definitions(HOST="${HOST_ID}") config_h_add_compile_definitions(BUILD="${BUILD_ID}") config_h_add_compile_definitions(TARGET="${TARGET_ID}") + if(WIN32) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_POSIX_C_SOURCE=1") if(MSVC) # set(EXTRALIBS ws2_32 wsock32 gdi32 iphlpapi psapi ${EXTRALIBS}) - set(EXTRALDFLAGS "${EXTRALDFLAGS} /DYNAMICBASE /NXCOMPAT") + list(APPEND EXTRALDFLAGS /DYNAMICBASE /NXCOMPAT) else() # MINGW list(APPEND EXTRALIBS -lws2_32 -lwsock32 -lgdi32 -liphlpapi -lpsapi ${EXTRALIBS}) From fe4d34ff93c28ca11aea60eb6d175d2017f515cd Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Sun, 26 Mar 2023 21:39:09 -0700 Subject: [PATCH 18/22] fix typo --- src/a2io.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/a2io.h b/src/a2io.h index 6e1196a6..0139245d 100644 --- a/src/a2io.h +++ b/src/a2io.h @@ -228,7 +228,7 @@ extern int ftruncate64(int fd, off64_t length); # define a2_fileno fileno # define a2_read read # define a2_close close -# define a2_dub dup +# define a2_dup dup #endif // !_MSC_VER #endif // D_A2IO_H From f3e7e9cf9c1bb05c520f78f1e72fe983f4ea87f0 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Sun, 26 Mar 2023 21:39:41 -0700 Subject: [PATCH 19/22] print when searching for windows TLS libs --- CMakeLists.txt | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index aa612e70..c2e6601f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -342,20 +342,39 @@ if(WITH_APPLETLS) endif() endif() +function(a2_wrap_find_library var_name lib) + message(STATUS "Looking for ${lib}") + find_library(${var_name} ${lib}) + if(${var_name}) + message(STATUS "Looking for ${lib} - found") + else() + message(STATUS "Looking for ${lib} - not found") + endif() +endfunction() + set(HAVE_WINTLS no CACHE BOOL "Define if you have Windows TLS support" FORCE) set(HAVE_WINTLS_LIBS false) set(HAVE_WINTLS_HEADERS false) if(WITH_WINTLS) if(WIN32) - find_library(HAVE_WINTLS_LIBS crypt32) - find_library(HAVE_WINTLS_LIBS secur32) - find_library(HAVE_WINTLS_LIBS advapi32) + a2_wrap_find_library(HAVE_CRYPT32 crypt32) + a2_wrap_find_library(HAVE_SECURE32 secur32) + a2_wrap_find_library(HAVE_ADVAPI32 advapi32) + + if(HAVE_CRYPT32 AND HAVE_SECURE32 AND HAVE_ADVAPI32) + set(HAVE_WINTLS_LIBS true) + endif() + check_include_file_cxx(wincrypt.h HAVE_WINCRYPT_H) if(HAVE_WINCRYPT_H) list(APPEND a2_found_headers wincrypt.h) endif() - list(APPEND CMAKE_REQUIRED_DEFINITIONS "/D SECURITY_WIN32") + if(MSVC) + list(APPEND CMAKE_REQUIRED_DEFINITIONS "/D SECURITY_WIN32=1") + else() + list(APPEND CMAKE_REQUIRED_DEFINITIONS -DSECURITY_WIN32=1) + endif() check_include_file_cxx(security.h HAVE_SECURITY_H) if(HAVE_SECURITY_H) list(APPEND a2_found_headers security.h) From 9b82f9f42d3145de1ca084abb69ab902b06cd689 Mon Sep 17 00:00:00 2001 From: Rachel Powers <508861+Ryex@users.noreply.github.com> Date: Tue, 28 Mar 2023 02:49:13 -0700 Subject: [PATCH 20/22] respect WITH_