diff --git a/CMakeLists.txt b/CMakeLists.txt index c2e6601f..4cfaa2e3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,30 +52,31 @@ if(WIN32) endif() 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(WITH_LIBUV "Build aria2 with libuv" off) +option(WITH_APPLETLS "Build aria2 with appletls" on) +option(WITH_WINTLS "Build aria2 with wintls" on) +option(WITH_GNUTLS "Build aria2 with gnutls" on) +option(WITH_LIBNETTLE "Build aria2 with libnettle" on) +option(WITH_LIBGMP "Build aria2 with libgmp" on) +option(WITH_LIBGCRYPT "Build aria2 with libgcrypt" on) +option(WITH_OPENSSL "Build aria2 with openssl" on) +option(WITH_SQLITE3 "Build aria2 with SQLite3" on) +option(WITH_LIBXML2 "Build aria2 with libxml2" on) +option(WITH_LIBEXPAT "Build aria2 with libexpat" on) +option(WITH_LIBCARES "Build aria2 with libcares" on) +option(WITH_LIBZ "Build with aria2 libz" on) +option(WITH_TCMALLOC "Build aria2 with tcmalloc" off) +option(WITH_JEMALLOC "Build aria2 with jemalloc" off) +option(WITH_LIBSSH2 "Build aria2 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) +option(ENABLE_SSL "Build aria2 with ssl support" on) +option(ENABLE_BITTORRENT "Build aria2 with bittorrent support" on) +option(ENABLE_METALINK "Build aria2 with metalink support" on) +option(ENABLE_WEBSOCKET "Build aria2 with websocket support" on) +option(ENABLE_EPOLL "Build aria2 with epoll support" on) +option(ENABLE_LIBARIA2 "Build aria2 the libaria2 shared library" off) +option(ENABLE_WERROR "Builld aria2 with werror" off) +option(ENABLE_XML_RPC "Builld aria2 with XML RPC support" on) 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") @@ -184,95 +185,101 @@ else() set(HAVE_CPPUNIT no CACHE BOOL "Define if you have CPPUNIT" FORCE) endif() -find_package(ZLIB 1.2.3) +set(HAVE_ZLIB no CACHE BOOL "Define if you have zlib" FORCE) +if(WITH_LIBZ) + 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}) - config_h_add_compile_definitions(HAVE_ZLIB=1) + if(ZLIB_FOUND) + set(HAVE_ZLIB yes CACHE BOOL "Define if you have zlib" FORCE) + set(ZLIB_CFLAGS "") + set(ZLIB_LIBS ${ZLIB_LIBRARIES}) + 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}) + 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) + check_cxx_symbol_exists(gzbuffer zlib.h HAVE_GZBUFFER) - if(HAVE_GZBUFFER) - config_h_add_compile_definitions(HAVE_GZBUFFER) + if(HAVE_GZBUFFER) + config_h_add_compile_definitions(HAVE_GZBUFFER) + endif() + + check_cxx_symbol_exists(gzsetparams zlib.h HAVE_GZSETPARAMS) + + if(HAVE_GZSETPARAMS) + config_h_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}) endif() +endif() - check_cxx_symbol_exists(gzsetparams zlib.h HAVE_GZSETPARAMS) +set(HAVE_LIBUV no CACHE BOOL "Define if you have libuv" FORCE) +if(WITH_LIBUV) + find_package(LibUV 1.13) - if(HAVE_GZSETPARAMS) - config_h_add_compile_definitions(HAVE_GZSETPARAMS) + if(LIBUV_FOUND) + set(HAVE_LIBUV yes CACHE BOOL "Define if you have libuv" FORCE) + set(LIBUV_CFLAGS "") + set(LIBUV_LIBS ${LIBUV_LIBRARIES}) + config_h_add_compile_definitions(HAVE_LIBUV=1) 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) +set(HAVE_LIBXML2 no CACHE BOOL "Define if you have libxml2" FORCE) +if(WITH_LIBXML2) + find_package(LibXml2) -if(LIBUV_FOUND) - set(HAVE_LIBUV yes CACHE BOOL "Define if you have libuv" FORCE) - set(LIBUV_CFLAGS "") - set(LIBUV_LIBS ${LIBUV_LIBRARIES}) - 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}) - config_h_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 AND NOT HAVE_LIBXML2) - set(HAVE_LIBEXPAT yes CACHE BOOL "Define if you have libexpat" FORCE) - set(LIBEXPAT_CFLAGS "") - set(LIBEXPAT_LIBS ${EXPAT_LIBRARIES}) - config_h_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}) - 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) - config_h_add_compile_definitions(HAVE_SQLITE3_OPEN_V2) + if(LibXml2_FOUND) + set(HAVE_LIBXML2 yes CACHE BOOL "Define if you have libxml2" FORCE) + set(LIBXML2_CFLAGS "") + set(LIBXML2_LIBS ${LIBXML2_LIBRARIES}) + config_h_add_compile_definitions(HAVE_LIBXML2=1) endif() +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_LIBEXPAT no CACHE BOOL "Define if you have libexpat" FORCE) +if(WITH_LIBEXPAT) + find_package(EXPAT) + + 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}) + config_h_add_compile_definitions(HAVE_LIBEXPAT=1) + endif() +endif() + +set(HAVE_SQLITE3 no CACHE BOOL "Define if you have sqlite3" FORCE) +if(WITH_SQLITE3) + 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}) + 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) + 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}) + endif() endif() if(APPLE) @@ -281,7 +288,6 @@ else() set(HAVE_OSX no CACHE BOOL "On Mac OS X" FORCE) endif() - set(a2_found_headers) if(WIN32) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 40fd3e9b..20661234 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1275,22 +1275,29 @@ if(ENABLE_LIBARIA2) KeepRunningCommand.h ) - set(LIBARIA2_BUILD_MODE SHARED) + set(ARIA2C_LINK_STATIC true) if(WIN_BUILD AND NOT MSVC) set(EXTRALDFLAGS ${EXTRALDFLAGS} -no-undefined) endif() else() - set(LIBARIA2_BUILD_MODE STATIC) - + set(ARIA2C_LINK_SHARED false) endif() if(MSVC) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) endif() -add_library(aria2 ${LIBARIA2_BUILD_MODE} ${aria2_SRCS}) +add_library(aria2 SHARED ${aria2_SRCS}) +add_library(aria2static STATIC ${aria2_SRCS}) +set_target_properties(aria2 aria2static PROPERTIES OUTPUT_NAME aria2) + +if(ARIA2C_LINK_SHARED) + set(ARIA2C_LINK_TARGET aria2) +else() + set(ARIA2C_LINK_TARGET aria2static) +endif() target_include_directories(aria2 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/includes) target_include_directories(aria2 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) @@ -1304,93 +1311,109 @@ endif() if(HAVE_ZLIB) target_include_directories(aria2 PUBLIC ${ZLIB_INCLUDE_DIRS}) - target_include_directories(aria2c PUBLIC ${ZLIB_INCLUDE_DIRS}) - target_link_libraries(aria2 ZLIB::ZLIB) + target_include_directories(aria2static PUBLIC ${ZLIB_INCLUDE_DIRS}) + + target_link_libraries(aria2 PUBLIC ZLIB::ZLIB) + target_link_libraries(aria2static PUBLIC 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) + target_include_directories(aria2static PUBLIC ${LIBUV_INCLUDE_DIRS}) + + target_link_libraries(aria2 PUBLIC LIBUV::LIBUV) + target_link_libraries(aria2static PUBLIC LIBUV::LIBUV) endif() if(HAVE_LIBXML2) target_include_directories(aria2 PUBLIC ${LIBXML2_INCLUDE_DIR}) - target_include_directories(aria2c PUBLIC ${LIBXML2_INCLUDE_DIR}) - target_link_libraries(aria2 LibXml2::LibXml2) + target_include_directories(aria2static PUBLIC ${LIBXML2_INCLUDE_DIR}) + + target_link_libraries(aria2 PUBLIC LibXml2::LibXml2) + target_link_libraries(aria2static PUBLIC LibXml2::LibXml2) endif() if(HAVE_LIBEXPAT) target_include_directories(aria2 PUBLIC ${EXPAT_INCLUDE_DIRS}) - target_include_directories(aria2c PUBLIC ${EXPAT_INCLUDE_DIRS}) - target_link_libraries(aria2 EXPAT::EXPAT) + target_include_directories(aria2static PUBLIC ${EXPAT_INCLUDE_DIRS}) + target_link_libraries(aria2 PUBLIC EXPAT::EXPAT) + target_link_libraries(aria2static PUBLIC EXPAT::EXPAT) endif() if(HAVE_SQLITE3) target_include_directories(aria2 PUBLIC ${SQLite3_INCLUDE_DIRS}) - target_include_directories(aria2c PUBLIC ${SQLite3_INCLUDE_DIRS}) - target_link_libraries(aria2 SQLite::SQLite3) + target_include_directories(aria2static PUBLIC ${SQLite3_INCLUDE_DIRS}) + target_link_libraries(aria2 PUBLIC SQLite::SQLite3) + target_link_libraries(aria2static PUBLIC SQLite::SQLite3) endif() if(HAVE_APPLETLS) - target_link_libraries(aria2 ${APPLETLS_LD_FLAGS}) + target_link_libraries(aria2 PUBLIC ${APPLETLS_LD_FLAGS}) + target_link_libraries(aria2static PUBLIC ${APPLETLS_LD_FLAGS}) endif() if(HAVE_WINTLS) - target_link_libraries(aria2 ${WINTLS_LIBS}) + target_link_libraries(aria2 PUBLIC ${WINTLS_LIBS}) + target_link_libraries(aria2static PUBLIC ${WINTLS_LIBS}) endif() if(HAVE_LIBGNUTLS) target_include_directories(aria2 PUBLIC ${GNUTLS_INCLUDE_DIR}) - target_compile_definitions(aria2 PUBLIC ${LIBGNUTLS_CFLAGS}) - target_include_directories(aria2c PUBLIC ${GNUTLS_INCLUDE_DIR}) - target_compile_definitions(aria2c PUBLIC ${LIBGNUTLS_CFLAGS}) - target_link_libraries(aria2 GnuTLS::GnuTLS) + target_compile_definitions(aria2static PUBLIC ${LIBGNUTLS_CFLAGS}) + target_include_directories(aria2 PUBLIC ${GNUTLS_INCLUDE_DIR}) + target_compile_definitions(aria2static PUBLIC ${LIBGNUTLS_CFLAGS}) + target_link_libraries(aria2 PUBLIC GnuTLS::GnuTLS) + target_link_libraries(aria2static PUBLIC GnuTLS::GnuTLS) endif() if(HAVE_OPENSSL) target_include_directories(aria2 PUBLIC ${OPENSSL_INCLUDE_DIR}) - target_include_directories(aria2c PUBLIC ${OPENSSL_INCLUDE_DIR}) + target_include_directories(aria2static PUBLIC ${OPENSSL_INCLUDE_DIR}) - target_link_libraries(aria2 OpenSSL::SSL) - - # target_link_libraries(aria2 INTERFACE OpenSSL::Crypto) + target_link_libraries(aria2 PUBLIC OpenSSL::SSL) + target_link_libraries(aria2static PUBLIC OpenSSL::SSL) endif() if(HAVE_LIBNETTLE) target_include_directories(aria2 PUBLIC ${NETTLE_INCLUDE_DIR}) - target_include_directories(aria2c PUBLIC ${NETTLE_INCLUDE_DIR}) - target_link_libraries(aria2 Nettle::Nettle) + target_include_directories(aria2static PUBLIC ${NETTLE_INCLUDE_DIR}) + target_link_libraries(aria2 PUBLIC Nettle::Nettle) + target_link_libraries(aria2static PUBLIC Nettle::Nettle) endif() if(HAVE_LIBGMP) target_include_directories(aria2 PUBLIC ${GMP_INCLUDE_DIR}) - target_include_directories(aria2c PUBLIC ${GMP_INCLUDE_DIR}) - target_link_libraries(aria2 GMP::GMP) + target_include_directories(aria2static PUBLIC ${GMP_INCLUDE_DIR}) + target_link_libraries(aria2 PUBLIC GMP::GMP) + target_link_libraries(aria2static PUBLIC GMP::GMP) endif() if(HAVE_LIBGCRYPT) target_include_directories(aria2 PUBLIC ${LibGcrypt_INCLUDE_DIR}) - target_include_directories(aria2c PUBLIC ${LibGcrypt_INCLUDE_DIR}) - target_link_libraries(aria2 LibGcrypt::LibGcrypt) + target_include_directories(aria2static PUBLIC ${LibGcrypt_INCLUDE_DIR}) + target_link_libraries(aria2 PUBLIC LibGcrypt::LibGcrypt) + target_link_libraries(aria2static PUBLIC LibGcrypt::LibGcrypt) endif() if(HAVE_LIBSSH2) target_include_directories(aria2 PUBLIC ${LIBSSH2_INCLUDE_DIR}) - target_include_directories(aria2c PUBLIC ${LIBSSH2_INCLUDE_DIR}) - target_link_libraries(aria2 LibSSH2::LibSSH2) + target_include_directories(aria2static PUBLIC ${LIBSSH2_INCLUDE_DIR}) + target_link_libraries(aria2 PUBLIC LibSSH2::LibSSH2) + target_link_libraries(aria2static PUBLIC 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) + target_include_directories(aria2static PUBLIC ${LIBCARES_INCLUDE_DIR}) + target_link_libraries(aria2 PUBLIC Libcares::Libcares) + target_link_libraries(aria2static PUBLIC Libcares::Libcares) endif() if(ENABLE_WEBSOCKET) target_include_directories(aria2 PUBLIC ${WSLAY_INCLUDE_DIR}) - target_include_directories(aria2c PUBLIC ${WSLAY_INCLUDE_DIR}) - target_link_libraries(aria2 wslay) + target_include_directories(aria2static PUBLIC ${WSLAY_INCLUDE_DIR}) + target_link_libraries(aria2 PUBLIC wslay) + target_link_libraries(aria2static PUBLIC wslay) endif() if(ARIA2_STATIC) @@ -1406,7 +1429,7 @@ set_target_properties(aria2 PROPERTIES VERSION 0.0.0 SOVERSION 1) target_link_options(aria2 PUBLIC ${EXTRALDFLAGS}) install(TARGETS aria2 ${INSTALL_TARGETS_DEFAULT_ARGS}) -target_link_libraries(aria2c aria2) +target_link_libraries(aria2c PRIVATE ${ARIA2C_LINK_TARGET}) target_link_options(aria2c PUBLIC ${EXTRALDFLAGS}) # ########## next target ###############