diff options
author | Riccardo Spagni <ric@spagni.net> | 2014-11-25 21:48:54 +0200 |
---|---|---|
committer | Riccardo Spagni <ric@spagni.net> | 2014-11-25 21:49:00 +0200 |
commit | ab7c6c07e71c025a978948760159f823cc48fe37 (patch) | |
tree | 076a6ae171a256e68474d3617abbd3715fa579fc | |
parent | Merge pull request #184 (diff) | |
parent | cmake: work around a bug with implicit link directories (diff) | |
download | monero-ab7c6c07e71c025a978948760159f823cc48fe37.tar.xz |
Merge pull request #180
ce71c01 cmake: work around a bug with implicit link directories (Ben Boeckel)
de4fc40 mingw: copy required libraries to the build tree (Ben Boeckel)
ec54e2f cmake: place binaries together in the build tree (Ben Boeckel)
18c56ab msys: don't use LTO (Ben Boeckel)
5680c9c msys: factor out -Werror on msys (Ben Boeckel)
4751542 msys: look in msys' directory for files (Ben Boeckel)
d855fe4 miniupnpc: bump the _POSIX_C_SOURCE feature macro (Ben Boeckel)
c696492 unbound: fix getaddrinfo detection for 32-bit windows (Ben Boeckel)
e377687 cmake: Windows and static builds need this (Ben Boeckel)
01895dd cmake: fix up link lines (Ben Boeckel)
4b6515c unbound: fix type checking (Ben Boeckel)
d43a20f unbound: plumb the libdir up (Ben Boeckel)
7d708e4 cmake: support 2.8.7 (Ben Boeckel)
464c280 cmake: fix up miniupnpc's define (Ben Boeckel)
9689df9 cmake: clean up EXTRA_LIBRARIES (Ben Boeckel)
3b7bdcb cmake: set the project name (Ben Boeckel)
0f0efc4 cmake: prepend to CMAKE_MODULE_PATH (Ben Boeckel)
031e3da cmake: remove scream-make (all-caps functions) (Ben Boeckel)
abbd5c0 unbound: import cmake build system (Ben Boeckel)
e59b5b7 miniupnpc: clean up build system (Ben Boeckel)
475fe20 cmake: minor cleanups (indentation and typos) (Ben Boeckel)
799e8b2 cmake: use option() for STATIC (Ben Boeckel)
c24d22b cmake: clean up if auto-dereferencing (Ben Boeckel)
9ed415a build: inform the build of what generates version.h (Ben Boeckel)
eba180a cmake: support git info in released tarballs (Ben Boeckel)
eeffac6 cmake: fix up BOOST_IGNORE_SYSTEM_PATHS (Ben Boeckel)
a43f1a8 cmake: remove configuration variables (Ben Boeckel)
a87ce09 cmake: factor out error messages (Ben Boeckel)
9aa48b6 miniupnpc: clear out else/endfoo command arguments (Ben Boeckel)
8a86ac8 daemon_tests: update cmake code (Ben Boeckel)
fa3ff75 gtest: support an external gtest (Ben Boeckel)
7bfcffa cmake: put each test executable in its own directory (Ben Boeckel)
f53f047 cmake: handle private vs. public headers (Ben Boeckel)
55ca7d3 cmake: refactor common code with libraries (Ben Boeckel)
c773f46 cmake: refactor common code with executables (Ben Boeckel)
89cff7b cmake: put each library into its own directory (Ben Boeckel)
32 files changed, 2905 insertions, 340 deletions
diff --git a/.gitattributes b/.gitattributes index 6afd357c2..f75097ecd 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,2 @@ .git* export-ignore -/CMakeLists.txt export-subst
\ No newline at end of file +version.cmake export-subst diff --git a/CMakeLists.txt b/CMakeLists.txt index 78e4b426f..ebca5c6fb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,33 +28,41 @@ # # Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers -cmake_minimum_required(VERSION 2.8.6) +cmake_minimum_required(VERSION 2.8.7) -if(NOT WIN32) - string(ASCII 27 Esc) - set(ColourReset "${Esc}[m") - set(BoldRed "${Esc}[1;31m") -endif() +project(bitmonero) + +function (die msg) + if (NOT WIN32) + string(ASCII 27 Esc) + set(ColourReset "${Esc}[m") + set(BoldRed "${Esc}[1;31m") + else () + set(ColourReset "") + set(BoldRed "") + endif () -set (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") + message(FATAL_ERROR "${BoldRed}${msg}${ColourReset}") +endfunction () + +list(INSERT CMAKE_MODULE_PATH 0 + "${CMAKE_SOURCE_DIR}/cmake") if (NOT DEFINED ENV{DEVELOPER_LOCAL_TOOLS}) - message(STATUS "Could not find DEVELOPER_LOCAL_TOOLS in env (not required)") - set(BOOST_IGNORE_SYSTEM_PATHS_DEFAULT OFF) -elseif ("$ENV{DEVELOPER_LOCAL_TOOLS}" EQUAL 1) - message(STATUS "Found: env DEVELOPER_LOCAL_TOOLS = 1") - set(BOOST_IGNORE_SYSTEM_PATHS_DEFAULT ON) - option(BOOST_IGNORE_SYSTEM_PATHS "Ignore boost system paths for local boost installation" ON) + message(STATUS "Could not find DEVELOPER_LOCAL_TOOLS in env (not required)") + set(BOOST_IGNORE_SYSTEM_PATHS_DEFAULT OFF) +elseif (ENV{DEVELOPER_LOCAL_TOOLS} EQUAL 1) + message(STATUS "Found: env DEVELOPER_LOCAL_TOOLS = 1") + set(BOOST_IGNORE_SYSTEM_PATHS_DEFAULT ON) else() - message(STATUS "found: env DEVELOPER_LOCAL_TOOLS = 0") - set(BOOST_IGNORE_SYSTEM_PATHS_DEFAULT OFF) + message(STATUS "Found: env DEVELOPER_LOCAL_TOOLS = 0") + set(BOOST_IGNORE_SYSTEM_PATHS_DEFAULT OFF) endif() message(STATUS "BOOST_IGNORE_SYSTEM_PATHS defaults to ${BOOST_IGNORE_SYSTEM_PATHS_DEFAULT}") -option(BOOST_IGNORE_SYSTEM_PATHS "Ignore boost system paths for local boost ins tallation" $BOOST_IGNORE_SYSTEM_PATHS_DEFAULT) +option(BOOST_IGNORE_SYSTEM_PATHS "Ignore boost system paths for local boost installation" ${BOOST_IGNORE_SYSTEM_PATHS_DEFAULT}) set_property(GLOBAL PROPERTY USE_FOLDERS ON) -set(CMAKE_CONFIGURATION_TYPES "Debug;Release") enable_testing() # Check if we're on FreeBSD so we can exclude the local miniupnpc (it should be installed from ports instead) @@ -85,15 +93,28 @@ if(MSVC OR MINGW) else() set(DEFAULT_STATIC false) endif() -set(STATIC ${DEFAULT_STATIC} CACHE BOOL "Link libraries statically") +option(STATIC "Link libraries statically" ${DEFAULT_STATIC}) -IF(STATIC) - IF(MSVC) - SET(CMAKE_FIND_LIBRARY_SUFFIXES .lib .dll.a .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) - ELSE() - SET(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) - ENDIF() -ENDIF() +if(MINGW) + get_filename_component(msys2_install_path "[HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MSYS2 64bit;InstallLocation]" ABSOLUTE) + set(CMAKE_INCLUDE_PATH "${msys2_install_path}/mingw64/include") + # This is necessary because otherwise CMake will make Boost libraries -lfoo + # rather than a full path. Unfortunately, this makes the shared libraries get + # linked due to a bug in CMake which misses putting -static flags around the + # -lfoo arguments. + list(REMOVE_ITEM CMAKE_C_IMPLICIT_LINK_DIRECTORIES + "${msys2_install_path}/mingw64/lib") + list(REMOVE_ITEM CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES + "${msys2_install_path}/mingw64/lib") +endif() + +if(STATIC) + if(MSVC) + set(CMAKE_FIND_LIBRARY_SUFFIXES .lib .dll.a .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) + else() + set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) + endif() +endif() if (UNIX AND NOT APPLE) # Note that at the time of this writing the -Wstrict-prototypes flag added below will make this fail @@ -112,6 +133,7 @@ endif() # Final setup for libunbound include_directories(${UNBOUND_INCLUDE}) +link_directories(${UNBOUND_LIBRARY_DIRS}) if(MSVC) add_definitions("/bigobj /MP /W3 /GS- /D_CRT_SECURE_NO_WARNINGS /wd4996 /wd4345 /D_WIN32_WINNT=0x0600 /DWIN32_LEAN_AND_MEAN /DGTEST_HAS_TR1_TUPLE=0 /FIinline_c.h /D__SSE4_1__") @@ -125,12 +147,15 @@ if(MSVC) include_directories(SYSTEM src/platform/msc) else() set(ARCH native CACHE STRING "CPU to build for: -march value or default") - if("${ARCH}" STREQUAL "default") + if(ARCH STREQUAL "default") set(ARCH_FLAG "") else() set(ARCH_FLAG "-march=${ARCH}") endif() - set(WARNINGS "-Wall -Wextra -Wpointer-arith -Wundef -Wvla -Wwrite-strings -Werror -Wno-error=extra -Wno-error=deprecated-declarations -Wno-error=sign-compare -Wno-error=strict-aliasing -Wno-error=type-limits -Wno-unused-parameter -Wno-error=unused-variable -Wno-error=undef -Wno-error=uninitialized") + set(WARNINGS "-Wall -Wextra -Wpointer-arith -Wundef -Wvla -Wwrite-strings -Wno-error=extra -Wno-error=deprecated-declarations -Wno-error=sign-compare -Wno-error=strict-aliasing -Wno-error=type-limits -Wno-unused-parameter -Wno-error=unused-variable -Wno-error=undef -Wno-error=uninitialized") + if(NOT MINGW) + set(WARNINGS "${WARNINGS} -Werror") + endif() if(CMAKE_C_COMPILER_ID STREQUAL "Clang") set(WARNINGS "${WARNINGS} -Wno-error=mismatched-tags -Wno-error=null-conversion -Wno-overloaded-shift-op-parentheses -Wno-error=shift-count-overflow -Wno-error=tautological-constant-out-of-range-compare -Wno-error=unused-private-field -Wno-error=unneeded-internal-declaration") else() @@ -141,6 +166,8 @@ else() set(MINGW_FLAG "${MINGW_FLAG} -DWIN32_LEAN_AND_MEAN") set(Boost_THREADAPI win32) include_directories(SYSTEM src/platform/mingw) + # mingw doesn't support LTO (multiple definition errors at link time) + set(USE_LTO_DEFAULT false) endif() set(C_WARNINGS "-Waggregate-return -Wnested-externs -Wold-style-definition -Wstrict-prototypes") set(CXX_WARNINGS "-Wno-reorder -Wno-missing-field-initializers") @@ -170,7 +197,7 @@ else() # There is a clang bug that does not allow to compile code that uses AES-NI intrinsics if -flto is enabled, so explicitly disable if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - set(USE_LTO false) + set(USE_LTO false) endif() if(USE_LTO) set(RELEASE_FLAGS "${RELEASE_FLAGS} -flto") @@ -194,7 +221,7 @@ else() endif() if (BOOST_IGNORE_SYSTEM_PATHS) - set(Boost_NO_SYSTEM_PATHS TRUE) + set(Boost_NO_SYSTEM_PATHS TRUE) endif() if(STATIC) @@ -204,36 +231,24 @@ endif() find_package(Boost 1.53 QUIET REQUIRED COMPONENTS system filesystem thread date_time chrono regex serialization program_options) if(NOT Boost_FOUND) - MESSAGE(FATAL_ERROR "${BoldRed}Could not find Boost libraries, please make sure you have installed Boost or libboost-all-dev (1.53 or 1.55+) or the equivalent${ColourReset}") + die("Could not find Boost libraries, please make sure you have installed Boost or libboost-all-dev (1.53 or 1.55+) or the equivalent") endif() -if((${Boost_MAJOR_VERSION} EQUAL 1) AND (${Boost_MINOR_VERSION} EQUAL 54)) - message(FATAL_ERROR "${BoldRed}Boost version 1.54 is unsupported due to a bug (see: http://goo.gl/RrCFmA), please install Boost 1.53 or 1.55 and above${ColourReset}") +if((Boost_MAJOR_VERSION EQUAL 1) AND (Boost_MINOR_VERSION EQUAL 54)) + die("Boost version 1.54 is unsupported due to a bug (see: http://goo.gl/RrCFmA), please install Boost 1.53 or 1.55 and above") endif() include_directories(SYSTEM ${Boost_INCLUDE_DIRS}) if(MINGW) - set(EXTRA_LIBRARIES pthread;mswsock;ws2_32) + set(EXTRA_LIBRARIES mswsock;ws2_32;iphlpapi) elseif(APPLE OR FREEBSD) set(EXTRA_LIBRARIES "") elseif(NOT MSVC) find_library(RT rt) - find_library(PTHREAD pthread) - find_library(DL dl) set(EXTRA_LIBRARIES ${RT} ${PTHREAD} ${DL}) endif() -file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/version") -find_package(Git QUIET) -if(Git_FOUND OR GIT_FOUND) - message(STATUS "Found Git: ${GIT_EXECUTABLE}") - add_custom_target(version ALL "${CMAKE_COMMAND}" "-D" "GIT=${GIT_EXECUTABLE}" "-D" "TO=${CMAKE_BINARY_DIR}/version/version.h" "-P" "src/version.cmake" WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}") -else() - message(STATUS "WARNING: Git was not found!") - set(VERSIONTAG "unknown") - configure_file("src/version.h.in" "version/version.h") - add_custom_target(version ALL) -endif() +include(version.cmake) add_subdirectory(src) add_subdirectory(tests) diff --git a/cmake/FindMiniupnpc.cmake b/cmake/FindMiniupnpc.cmake index 0bf331da2..97a0280fe 100644 --- a/cmake/FindMiniupnpc.cmake +++ b/cmake/FindMiniupnpc.cmake @@ -32,7 +32,7 @@ if (MINIUPNP_INCLUDE_DIR AND MINIUPNP_LIBRARY) # Already in cache, be silent set(MINIUPNP_FIND_QUIETLY TRUE) -endif (MINIUPNP_INCLUDE_DIR AND MINIUPNP_LIBRARY) +endif () find_path(MINIUPNP_INCLUDE_DIR miniupnpc.h PATH_SUFFIXES miniupnpc) @@ -47,7 +47,7 @@ if (MINIUPNP_FOUND) if (NOT MINIUPNP_FIND_QUIETLY) message (STATUS "Found the miniupnpc libraries at ${MINIUPNP_LIBRARY}") message (STATUS "Found the miniupnpc headers at ${MINIUPNP_INCLUDE_DIR}") - endif (NOT MINIUPNP_FIND_QUIETLY) + endif () message(STATUS "Detecting version of miniupnpc in path: ${MINIUPNP_INCLUDE_DIR}") diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index 83e9e6dee..a7bcfebe0 100755..100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -38,14 +38,14 @@ find_package(MiniUpnpc QUIET) # FreeBSD doesn't play well with the local copy, so default to using shared -SET(USE_SHARED_MINIUPNPC false) +set(USE_SHARED_MINIUPNPC false) # If we have the correct shared version and we're not building static, use it -IF(STATIC) - SET(USE_SHARED_MINIUPNPC false) -ELSEIF(MINIUPNP_FOUND AND MINIUPNPC_VERSION_1_7_OR_HIGHER) - SET(USE_SHARED_MINIUPNPC true) -ENDIF() +if(STATIC) + set(USE_SHARED_MINIUPNPC false) +elseif(MINIUPNP_FOUND AND MINIUPNPC_VERSION_1_7_OR_HIGHER) + set(USE_SHARED_MINIUPNPC true) +endif() if(USE_SHARED_MINIUPNPC) message(STATUS "Using shared miniupnpc found at ${MINIUPNP_INCLUDE_DIR}") @@ -59,7 +59,7 @@ else() else() message(STATUS "Using miniupnpc from local source tree (/external/miniupnpc)") endif() - + set(UPNPC_BUILD_STATIC ON CACHE BOOL "Build static library") set(UPNPC_BUILD_SHARED OFF CACHE BOOL "Build shared library") set(UPNPC_BUILD_TESTS OFF CACHE BOOL "Build test executables") @@ -78,98 +78,22 @@ endif() find_package(Unbound) -IF(!UNBOUND_INCLUDE_DIR OR STATIC) - if(STATIC) - message(STATUS "Using libunbound from local source tree for static build") - else() - message(STATUS "Using libunbound from local source tree (/external/unbound)") - endif() - - INCLUDE(ExternalProject) - - FIND_PACKAGE(OpenSSL QUIET) - IF(!OPENSSL_LIBRARIES) - MESSAGE(FATAL_ERROR "${BoldRed}Could not find the openssl library. Please make sure you have installed openssl or libssl-dev or the equivalent${ColourReset}") - ELSE() - MESSAGE(STATUS "Found openssl libraries") - ENDIF() +if(NOT UNBOUND_INCLUDE_DIR OR STATIC) + add_subdirectory(unbound) - FIND_PACKAGE(Expat QUIET) - IF(!EXPAT_LIBRARIES) - MESSAGE(FATAL_ERROR "${BoldRed}Could not find the expat library. Please make sure you have installed libexpat or libexpat-dev or the equivalent${ColourReset}") - ELSE() - MESSAGE(STATUS "Found expat libraries") - ENDIF() - - IF(MINGW) - set(ENV{USE_WINSOCK} 1) - set(ENV{CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) - set(ENV{GCC_PREFIX} ${GCC_PREFIX}) - set(ENV{CMAKE_FIND_ROOT_PATH} ${CMAKE_FIND_ROOT_PATH}) - EXTERNALPROJECT_ADD( - libunbound - PREFIX ${CMAKE_CURRENT_BINARY_DIR}/unbound - URL ${CMAKE_CURRENT_SOURCE_DIR}/unbound/ - CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/unbound/monero-config.sh - BUILD_COMMAND $(MAKE) - UPDATE_COMMAND "" - PATCH_COMMAND "" - INSTALL_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/unbound/src/libunbound-build/libtool --mode=install cp ${CMAKE_CURRENT_BINARY_DIR}/unbound/src/libunbound-build/libunbound.la ${CMAKE_CURRENT_BINARY_DIR}/unbound/src/libunbound-build - LOG_DOWNLOAD 1 - LOG_UPDATE 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 - LOG_TEST 1 - LOG_INSTALL 1 - ) - ELSEIF(APPLE) - execute_process(COMMAND brew --prefix OUTPUT_VARIABLE BREW_PREFIX OUTPUT_STRIP_TRAILING_WHITESPACE) - EXTERNALPROJECT_ADD( - libunbound - PREFIX ${CMAKE_CURRENT_BINARY_DIR}/unbound - URL ${CMAKE_CURRENT_SOURCE_DIR}/unbound/ - CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/unbound/configure --prefix=${BREW_PREFIX} --enable-shared --enable-static --disable-gost --disable-rpath --with-libevent=no --without-pyunbound --without-pythonmodule --without-pthreads --with-libunbound-only - BUILD_COMMAND $(MAKE) - UPDATE_COMMAND "" - PATCH_COMMAND "" - INSTALL_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/unbound/src/libunbound-build/libtool --mode=install cp ${CMAKE_CURRENT_BINARY_DIR}/unbound/src/libunbound-build/libunbound.la ${CMAKE_CURRENT_BINARY_DIR}/unbound/src/libunbound-build - LOG_DOWNLOAD 1 - LOG_UPDATE 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 - LOG_TEST 1 - LOG_INSTALL 1 - ) - ELSE() - EXTERNALPROJECT_ADD( - libunbound - PREFIX ${CMAKE_CURRENT_BINARY_DIR}/unbound - URL ${CMAKE_CURRENT_SOURCE_DIR}/unbound/ - CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/unbound/configure --disable-shared --enable-static --disable-gost --disable-rpath --with-libevent=no --without-pyunbound --without-pythonmodule --without-pthreads --with-libunbound-only - BUILD_COMMAND $(MAKE) - UPDATE_COMMAND "" - PATCH_COMMAND "" - INSTALL_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/unbound/src/libunbound-build/libtool --mode=install cp ${CMAKE_CURRENT_BINARY_DIR}/unbound/src/libunbound-build/libunbound.la ${CMAKE_CURRENT_BINARY_DIR}/unbound/src/libunbound-build - LOG_DOWNLOAD 1 - LOG_UPDATE 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 - LOG_TEST 1 - LOG_INSTALL 1 - ) - ENDIF() - set(UNBOUND_STATIC true PARENT_SCOPE) - set(UNBOUND_INCLUDE "${CMAKE_CURRENT_BINARY_DIR}/unbound/src/libunbound-build" PARENT_SCOPE) - set(UNBOUND_LIBRARY "${CMAKE_CURRENT_BINARY_DIR}/unbound/src/libunbound-build/libunbound.a;${OPENSSL_LIBRARIES}" PARENT_SCOPE) -ELSE() - MESSAGE(STATUS "Found libunbound include (unbound.h) in ${UNBOUND_INCLUDE_DIR}") - IF(UNBOUND_LIBRARIES) - MESSAGE(STATUS "Found libunbound shared library") + set(UNBOUND_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/unbound/libunbound" PARENT_SCOPE) + set(UNBOUND_LIBRARY "unbound" PARENT_SCOPE) + set(UNBOUND_LIBRARY_DIRS "${LIBEVENT2_LIBDIR}" PARENT_SCOPE) +else() + message(STATUS "Found libunbound include (unbound.h) in ${UNBOUND_INCLUDE_DIR}") + if(UNBOUND_LIBRARIES) + message(STATUS "Found libunbound shared library") set(UNBOUND_STATIC false PARENT_SCOPE) set(UNBOUND_INCLUDE ${UNBOUND_INCLUDE_DIR} PARENT_SCOPE) set(UNBOUND_LIBRARY ${UNBOUND_LIBRARIES} PARENT_SCOPE) - ELSE() - MESSAGE(FATAL_ERROR "${BoldRed}Found libunbound includes, but could not find libunbound library. Please make sure you have installed libunbound or libunbound-dev or the equivalent${ColourReset}") - ENDIF() -ENDIF() + set(UNBOUND_LIBRARY_DIRS "" PARENT_SCOPE) + else() + die("Found libunbound includes, but could not find libunbound library. Please make sure you have installed libunbound or libunbound-dev or the equivalent") + endif() +endif() diff --git a/external/miniupnpc/CMakeLists.txt b/external/miniupnpc/CMakeLists.txt index 5e4a90bbf..bed9a3d22 100644 --- a/external/miniupnpc/CMakeLists.txt +++ b/external/miniupnpc/CMakeLists.txt @@ -4,64 +4,27 @@ project (miniupnpc C) set (MINIUPNPC_VERSION 1.9) set (MINIUPNPC_API_VERSION 10) -if (NOT CMAKE_BUILD_TYPE) - if (WIN32) - set (DEFAULT_BUILD_TYPE MinSizeRel) - else (WIN32) - set (DEFAULT_BUILD_TYPE RelWithDebInfo) - endif(WIN32) - set (CMAKE_BUILD_TYPE ${DEFAULT_BUILD_TYPE} CACHE STRING - "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." - FORCE) -endif() - option (UPNPC_BUILD_STATIC "Build static library" TRUE) option (UPNPC_BUILD_SHARED "Build shared library" TRUE) -if (NOT WIN32) - option (UPNPC_BUILD_TESTS "Build test executables" TRUE) -endif (NOT WIN32) option (NO_GETADDRINFO "Define NO_GETADDRINFO" FALSE) mark_as_advanced (NO_GETADDRINFO) if (NO_GETADDRINFO) add_definitions (-DNO_GETADDRINFO) -endif (NO_GETADDRINFO) +endif () if (NOT WIN32) add_definitions (-DMINIUPNPC_SET_SOCKET_TIMEOUT) - add_definitions (-D_BSD_SOURCE -D_POSIX_C_SOURCE=1) -else (NOT WIN32) + add_definitions (-D_BSD_SOURCE -D_POSIX_C_SOURCE=201112) +else () add_definitions (-D_WIN32_WINNT=0x0501) # XP or higher for getnameinfo and friends -endif (NOT WIN32) +endif () if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") add_definitions (-D_DARWIN_C_SOURCE) endif () -# Set compiler specific build flags -if (CMAKE_COMPILER_IS_GNUC) - # Set our own default flags at first run. - if (NOT CONFIGURED) - - if (NOT CMAKE_SYSTEM_NAME STREQUAL "AmigaOS") - set (_PIC -fPIC) - endif (CMAKE_SYSTEM_NAME STREQUAL "AmigaOS") - - set (CMAKE_C_FLAGS "${_PIC} -Wall $ENV{CFLAGS}" # CMAKE_C_FLAGS gets appended to the other C flags - CACHE STRING "Flags used by the C compiler during normal builds." FORCE) - set (CMAKE_C_FLAGS_DEBUG "-g -DDDEBUG" - CACHE STRING "Flags used by the C compiler during debug builds." FORCE) - set (CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG" - CACHE STRING "Flags used by the C compiler during release builds." FORCE) - set (CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g -DNDEBUG" - CACHE STRING "Flags used by the C compiler during release builds." FORCE) - set (CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG" - CACHE STRING "Flags used by the C compiler during release builds." FORCE) - - endif (NOT CONFIGURED) -endif () - configure_file (miniupnpcstrings.h.cmake ${CMAKE_BINARY_DIR}/miniupnpcstrings.h) include_directories (${CMAKE_BINARY_DIR}) @@ -80,16 +43,16 @@ set (MINIUPNPC_SOURCES receivedata.c ) -if (NOT WIN32 AND NOT CMAKE_SYSTEM_NAME STREQUAL "AmigaOS") +if (NOT WIN32) set (MINIUPNPC_SOURCES ${MINIUPNPC_SOURCES} minissdpc.c) -endif (NOT WIN32 AND NOT CMAKE_SYSTEM_NAME STREQUAL "AmigaOS") +endif () if (WIN32) set_source_files_properties (${MINIUPNPC_SOURCES} PROPERTIES COMPILE_DEFINITIONS MINIUPNP_STATICLIB COMPILE_DEFINITIONS MINIUPNP_EXPORTS ) -endif (WIN32) +endif () if (WIN32) # find_library (WINSOCK2_LIBRARY NAMES ws2_32 WS2_32 Ws2_32) @@ -97,63 +60,31 @@ if (WIN32) set(WINSOCK2_LIBRARY ws2_32) set(IPHLPAPI_LIBRARY iphlpapi) set (LDLIBS ${WINSOCK2_LIBRARY} ${IPHLPAPI_LIBRARY} ${LDLIBS}) -#elseif (CMAKE_SYSTEM_NAME STREQUAL "Solaris") -# find_library (SOCKET_LIBRARY NAMES socket) -# find_library (NSL_LIBRARY NAMES nsl) -# find_library (RESOLV_LIBRARY NAMES resolv) -# set (LDLIBS ${SOCKET_LIBRARY} ${NSL_LIBRARY} ${RESOLV_LIBRARY} ${LDLIBS}) -endif (WIN32) +endif () if (NOT UPNPC_BUILD_STATIC AND NOT UPNPC_BUILD_SHARED) - message (FATAL "Both shared and static libraries are disabled!") -endif (NOT UPNPC_BUILD_STATIC AND NOT UPNPC_BUILD_SHARED) + message (FATAL "Both shared and static libraries are disabled!") +endif () if (UPNPC_BUILD_STATIC) add_library (upnpc-static STATIC ${MINIUPNPC_SOURCES}) + set_target_properties (upnpc-static PROPERTIES POSITION_INDEPENDENT_CODE TRUE) set_target_properties (upnpc-static PROPERTIES OUTPUT_NAME "miniupnpc") target_link_libraries (upnpc-static ${LDLIBS}) set (UPNPC_INSTALL_TARGETS ${UPNPC_INSTALL_TARGETS} upnpc-static) set (UPNPC_LIBRARY_TARGET upnpc-static) -endif (UPNPC_BUILD_STATIC) +endif () if (UPNPC_BUILD_SHARED) add_library (upnpc-shared SHARED ${MINIUPNPC_SOURCES}) + set_target_properties (upnpc-shared PROPERTIES POSITION_INDEPENDENT_CODE TRUE) set_target_properties (upnpc-shared PROPERTIES OUTPUT_NAME "miniupnpc") set_target_properties (upnpc-shared PROPERTIES VERSION ${MINIUPNPC_VERSION}) set_target_properties (upnpc-shared PROPERTIES SOVERSION ${MINIUPNPC_API_VERSION}) target_link_libraries (upnpc-shared ${LDLIBS}) set (UPNPC_INSTALL_TARGETS ${UPNPC_INSTALL_TARGETS} upnpc-shared) set (UPNPC_LIBRARY_TARGET upnpc-shared) -endif (UPNPC_BUILD_SHARED) - -if (UPNPC_BUILD_TESTS) - add_executable (testminixml testminixml.c minixml.c igd_desc_parse.c) - target_link_libraries (testminixml ${LDLIBS}) - - add_executable (minixmlvalid minixmlvalid.c minixml.c) - target_link_libraries (minixmlvalid ${LDLIBS}) - - add_executable (testupnpreplyparse testupnpreplyparse.c - minixml.c upnpreplyparse.c) - target_link_libraries (testupnpreplyparse ${LDLIBS}) - - add_executable (testigddescparse testigddescparse.c - igd_desc_parse.c minixml.c miniupnpc.c miniwget.c minissdpc.c - upnpcommands.c upnpreplyparse.c minisoap.c connecthostport.c - portlistingparse.c receivedata.c - ) - target_link_libraries (testigddescparse ${LDLIBS}) - - add_executable (testminiwget testminiwget.c - miniwget.c miniupnpc.c minisoap.c upnpcommands.c minissdpc.c - upnpreplyparse.c minixml.c igd_desc_parse.c connecthostport.c - portlistingparse.c receivedata.c - ) - target_link_libraries (testminiwget ${LDLIBS}) - -# set (UPNPC_INSTALL_TARGETS ${UPNPC_INSTALL_TARGETS} testminixml minixmlvalid testupnpreplyparse testigddescparse testminiwget) -endif (UPNPC_BUILD_TESTS) - +endif () install (TARGETS ${UPNPC_INSTALL_TARGETS} RUNTIME DESTINATION bin @@ -161,7 +92,7 @@ install (TARGETS ${UPNPC_INSTALL_TARGETS} ARCHIVE DESTINATION lib${LIB_SUFFIX} ) install (FILES - miniupnpc.h + miniupnpc.h miniwget.h upnpcommands.h igd_desc_parse.h @@ -173,6 +104,4 @@ install (FILES DESTINATION include/miniupnpc ) -set (CONFIGURED YES CACHE INTERNAL "") - # vim: ts=2:sw=2 diff --git a/external/unbound/CMakeLists.txt b/external/unbound/CMakeLists.txt new file mode 100644 index 000000000..fdfa0a0fe --- /dev/null +++ b/external/unbound/CMakeLists.txt @@ -0,0 +1,201 @@ +cmake_minimum_required(VERSION 2.8.7) + +project(unbound C) + +find_package(OpenSSL REQUIRED) +find_package(Threads) + +include(configure_checks.cmake) + +if (WIN32) + set(USE_MINI_EVENT 1) + set(USE_WINSOCK 1) +else () + find_package(PkgConfig REQUIRED) + pkg_check_modules(LIBEVENT2 REQUIRED libevent) +endif () + +set(RETSIGTYPE void) + +add_definitions(-D_GNU_SOURCE) + +option(USE_ECDSA "Use ECDSA algorithms" ON) +option(USE_SHA2 "Enable SHA2 support" ON) +set(ENABLE_DNSTAP 0) +set(HAVE_SSL 1) +if (CMAKE_USE_PTHREADS_INIT AND NOT CMAKE_USE_WIN32_THREADS_INIT) + set(HAVE_PTHREAD 1) +else () + set(HAVE_PTHREAD 0) +endif () +if (CMAKE_USE_WIN32_THREADS_INIT) + set(HAVE_WINDOWS_THREADS 1) +else () + set(HAVE_WINDOWS_THREADS 0) +endif () +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/config.h") +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/dnstap/dnstap_config.h.in" + "${CMAKE_CURRENT_BINARY_DIR}/dnstap/dnstap_config.h") + +set(common_src + services/cache/dns.c + services/cache/infra.c + services/cache/rrset.c + util/data/dname.c + util/data/msgencode.c + util/data/msgparse.c + util/data/msgreply.c + util/data/packed_rrset.c + iterator/iterator.c + iterator/iter_delegpt.c + iterator/iter_donotq.c + iterator/iter_fwd.c + iterator/iter_hints.c + iterator/iter_priv.c + iterator/iter_resptype.c + iterator/iter_scrub.c + iterator/iter_utils.c + services/listen_dnsport.c + services/localzone.c + services/mesh.c + services/modstack.c + services/outbound_list.c + services/outside_network.c + util/alloc.c + util/config_file.c + util/configlexer.c + util/configparser.c + util/fptr_wlist.c + util/locks.c + util/log.c + util/mini_event.c + util/module.c + util/netevent.c + util/net_help.c + util/random.c + util/rbtree.c + util/regional.c + util/rtt.c + util/storage/dnstree.c + util/storage/lookup3.c + util/storage/lruhash.c + util/storage/slabhash.c + util/timehist.c + util/tube.c + util/winsock_event.c + validator/autotrust.c + validator/val_anchor.c + validator/validator.c + validator/val_kcache.c + validator/val_kentry.c + validator/val_neg.c + validator/val_nsec3.c + validator/val_nsec.c + validator/val_secalgo.c + validator/val_sigcrypt.c + validator/val_utils.c + dns64/dns64.c + + #$(CHECKLOCK_SRC) + testcode/checklocks.c) + +set(compat_src) + +foreach (symbol IN ITEMS ctime_r gmtime_r inet_aton inet_ntop inet_pton malloc memcmp memmove snprintf strlcat strlcpy strptime explicit_bzero arc4random arc4random_uniform sha512) + string(TOUPPER "${symbol}" upper_sym) + if (NOT HAVE_${upper_sym}) + list(APPEND compat_src + compat/${symbol}.c) + endif () +endforeach () + +if (NOT HAVE_ARC4RANDOM) + list(APPEND compat_src + compat/arc4_lock.c) +endif () + +if (CMAKE_SYSTEM_NAME MATCHES "Linux") + list(APPEND compat_src + compat/getentropy_linux.c) +elseif (APPLE) + list(APPEND compat_src + compat/getentropy_osx.c) +#elseif (SunOS) +# list(APPEND compat_src +# compat/getentropy_solaris.c) +elseif (WIN32) + list(APPEND compat_src + compat/getentropy_win.c) +endif () + +if (NOT HAVE_GETADDRINFO) + list(APPEND compat_src + compat/fake-rfc2553.c) +endif () + +set(sldns_src + ldns/keyraw.c + ldns/sbuffer.c + ldns/wire2str.c + ldns/parse.c + ldns/parseutil.c + ldns/rrdef.c + ldns/str2wire.c) + +set(libunbound_src + libunbound/context.c + libunbound/libunbound.c + libunbound/libworker.c) + +include_directories("${CMAKE_CURRENT_SOURCE_DIR}") +include_directories("${CMAKE_CURRENT_BINARY_DIR}") +include_directories(SYSTEM ${OPENSSL_INCLUDE_DIR}) +if (LIBEVENT2_FOUND) + include_directories(SYSTEM ${LIBEVENT2_INCLUDE_DIRS}) + link_directories(${LIBEVENT2_LIBRARY_DIRS}) +endif () +add_library(unbound + ${common_src} + ${sldns_src} + ${compat_src} + ${libunbound_src}) +target_link_libraries(unbound + LINK_PRIVATE + ${OPENSSL_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT}) +if (LIBEVENT2_FOUND) + target_link_libraries(unbound + LINK_PRIVATE + ${LIBEVENT2_LIBRARIES}) +endif () + +if (WIN32) + target_link_libraries(unbound + LINK_PRIVATE + iphlpapi + ws2_32) +endif () + +# XXX: Hack for static builds. +set(LIBEVENT2_LIBDIR + "${LIBEVENT2_LIBDIR}" + PARENT_SCOPE) + +if (MINGW) + # There is no variable for this (probably due to the fact that the pthread + # library is implicit with a link in msys). + find_library(win32pthread + NAMES libwinpthread-1.dll) + foreach (input IN LISTS win32pthread OPENSSL_LIBRARIES) + # Copy shared libraries into the build tree so that no PATH manipulation is + # necessary. + get_filename_component(name "${input}" NAME) + configure_file( + "${input}" + "${CMAKE_BINARY_DIR}/bin/${name}" + COPYONLY) + endforeach () +endif () diff --git a/external/unbound/config.h.cmake.in b/external/unbound/config.h.cmake.in new file mode 100644 index 000000000..827503b6e --- /dev/null +++ b/external/unbound/config.h.cmake.in @@ -0,0 +1,1034 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* define if a library can reference the 'main' symbol */ +#cmakedefine CAN_REFERENCE_MAIN + +/* Directory to chroot to */ +#define CHROOT_DIR "@UNBOUND_CHROOT_DIR@" + +/* Do sha512 definitions in config.h */ +#cmakedefine COMPAT_SHA512 + +/* Pathname to the Unbound configuration file */ +#define CONFIGFILE "@UNBOUND_CONFIGFILE@" + +/* Define this if on macOSX10.4-darwin8 and setreuid and setregid do not work + */ +#cmakedefine DARWIN_BROKEN_SETREUID + +/* Whether daemon is deprecated */ +#cmakedefine DEPRECATED_DAEMON + +/* default dnstap socket path */ +#cmakedefine DNSTAP_SOCKET_PATH + +/* Define if you want to use debug lock checking (slow). */ +#cmakedefine ENABLE_LOCK_CHECKS + +/* Define this if you enabled-allsymbols from libunbound to link binaries to + it for smaller install size, but the libunbound export table is polluted by + internal symbols */ +#cmakedefine EXPORT_ALL_SYMBOLS + +/* Define to 1 if you have the `arc4random' function. */ +#cmakedefine HAVE_ARC4RANDOM + +/* Define to 1 if you have the `arc4random_uniform' function. */ +#cmakedefine HAVE_ARC4RANDOM_UNIFORM + +/* Define to 1 if you have the <arpa/inet.h> header file. */ +#cmakedefine HAVE_ARPA_INET_H + +/* Whether the C compiler accepts the "format" attribute */ +#cmakedefine HAVE_ATTR_FORMAT + +/* Whether the C compiler accepts the "unused" attribute */ +#cmakedefine HAVE_ATTR_UNUSED + +/* Define to 1 if your system has a working `chown' function. */ +#cmakedefine HAVE_CHOWN + +/* Define to 1 if you have the `chroot' function. */ +#cmakedefine HAVE_CHROOT + +/* Define to 1 if you have the `ctime_r' function. */ +#cmakedefine HAVE_CTIME_R + +/* Define to 1 if you have the `daemon' function. */ +#cmakedefine HAVE_DAEMON + +/* Define to 1 if you have the declaration of `arc4random', and to 0 if you + don't. */ +#cmakedefine HAVE_DECL_ARC4RANDOM + +/* Define to 1 if you have the declaration of `arc4random_uniform', and to 0 + if you don't. */ +#cmakedefine HAVE_DECL_ARC4RANDOM_UNIFORM + +/* Define to 1 if you have the declaration of `NID_secp384r1', and to 0 if you + don't. */ +#cmakedefine HAVE_DECL_NID_SECP384R1 + +/* Define to 1 if you have the declaration of `NID_X9_62_prime256v1', and to 0 + if you don't. */ +#cmakedefine HAVE_DECL_NID_X9_62_PRIME256V1 + +/* Define to 1 if you have the declaration of `sk_SSL_COMP_pop_free', and to 0 + if you don't. */ +#cmakedefine HAVE_DECL_SK_SSL_COMP_POP_FREE + +/* Define to 1 if you have the declaration of + `SSL_COMP_get_compression_methods', and to 0 if you don't. */ +#cmakedefine HAVE_DECL_SSL_COMP_GET_COMPRESSION_METHODS + +/* Define to 1 if you have the declaration of `strlcat', and to 0 if you + don't. */ +#cmakedefine HAVE_DECL_STRLCAT + +/* Define to 1 if you have the declaration of `strlcpy', and to 0 if you + don't. */ +#cmakedefine HAVE_DECL_STRLCPY + +/* Define to 1 if you have the <dlfcn.h> header file. */ +#cmakedefine HAVE_DLFCN_H + +/* Define to 1 if you have the <endian.h> header file. */ +#cmakedefine HAVE_ENDIAN_H + +/* Define to 1 if you have the `endprotoent' function. */ +#cmakedefine HAVE_ENDPROTOENT + +/* Define to 1 if you have the `endservent' function. */ +#cmakedefine HAVE_ENDSERVENT + +/* Define to 1 if you have the `event_base_free' function. */ +#cmakedefine HAVE_EVENT_BASE_FREE + +/* Define to 1 if you have the `event_base_get_method' function. */ +#cmakedefine HAVE_EVENT_BASE_GET_METHOD + +/* Define to 1 if you have the `event_base_new' function. */ +#cmakedefine HAVE_EVENT_BASE_NEW + +/* Define to 1 if you have the `event_base_once' function. */ +#cmakedefine HAVE_EVENT_BASE_ONCE + +/* Define to 1 if you have the <event.h> header file. */ +#cmakedefine HAVE_EVENT_H + +/* Define to 1 if you have the `EVP_sha1' function. */ +#cmakedefine HAVE_EVP_SHA1 + +/* Define to 1 if you have the `EVP_sha256' function. */ +#cmakedefine HAVE_EVP_SHA256 + +/* Define to 1 if you have the `EVP_sha512' function. */ +#cmakedefine HAVE_EVP_SHA512 + +/* Define to 1 if you have the `ev_default_loop' function. */ +#cmakedefine HAVE_EV_DEFAULT_LOOP + +/* Define to 1 if you have the `ev_loop' function. */ +#cmakedefine HAVE_EV_LOOP + +/* Define to 1 if you have the <expat.h> header file. */ +#cmakedefine HAVE_EXPAT_H + +/* Define to 1 if you have the `fcntl' function. */ +#cmakedefine HAVE_FCNTL + +/* Define to 1 if you have the `FIPS_mode' function. */ +#cmakedefine HAVE_FIPS_MODE + +/* Define to 1 if you have the `fork' function. */ +#cmakedefine HAVE_FORK + +/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ +#cmakedefine HAVE_FSEEKO + +/* Whether getaddrinfo is available */ +#cmakedefine HAVE_GETADDRINFO + +/* Define to 1 if you have the `getentropy' function. */ +#cmakedefine HAVE_GETENTROPY + +/* Define to 1 if you have the <getopt.h> header file. */ +#cmakedefine HAVE_GETOPT_H + +/* Define to 1 if you have the `getpwnam' function. */ +#cmakedefine HAVE_GETPWNAM + +/* Define to 1 if you have the `getrlimit' function. */ +#cmakedefine HAVE_GETRLIMIT + +/* Define to 1 if you have the `glob' function. */ +#cmakedefine HAVE_GLOB + +/* Define to 1 if you have the <glob.h> header file. */ +#cmakedefine HAVE_GLOB_H + +/* Define to 1 if you have the `gmtime_r' function. */ +#cmakedefine HAVE_GMTIME_R + +/* Define to 1 if you have the <grp.h> header file. */ +#cmakedefine HAVE_GRP_H + +/* If you have HMAC_CTX_init */ +#cmakedefine HAVE_HMAC_CTX_INIT + +/* Define to 1 if you have the `inet_aton' function. */ +#cmakedefine HAVE_INET_ATON + +/* Define to 1 if you have the `inet_ntop' function. */ +#cmakedefine HAVE_INET_NTOP + +/* Define to 1 if you have the `inet_pton' function. */ +#cmakedefine HAVE_INET_PTON + +/* Define to 1 if you have the `initgroups' function. */ +#cmakedefine HAVE_INITGROUPS + +/* Define to 1 if you have the <inttypes.h> header file. */ +#cmakedefine HAVE_INTTYPES_H + +/* if the function 'ioctlsocket' is available */ +#cmakedefine HAVE_IOCTLSOCKET + +/* Define to 1 if you have the <iphlpapi.h> header file. */ +#cmakedefine HAVE_IPHLPAPI_H + +/* Define to 1 if you have the `kill' function. */ +#cmakedefine HAVE_KILL + +/* Define if we have LibreSSL */ +#cmakedefine HAVE_LIBRESSL + +/* Define to 1 if you have the `localtime_r' function. */ +#cmakedefine HAVE_LOCALTIME_R + +/* Define to 1 if you have the <login_cap.h> header file. */ +#cmakedefine HAVE_LOGIN_CAP_H + +/* If have GNU libc compatible malloc */ +#cmakedefine HAVE_MALLOC + +/* Define to 1 if you have the `memmove' function. */ +#cmakedefine HAVE_MEMMOVE + +/* Define to 1 if you have the <memory.h> header file. */ +#cmakedefine HAVE_MEMORY_H + +/* Define to 1 if you have the <netdb.h> header file. */ +#cmakedefine HAVE_NETDB_H + +/* Define to 1 if you have the <netinet/in.h> header file. */ +#cmakedefine HAVE_NETINET_IN_H + +/* Use libnss for crypto */ +#cmakedefine HAVE_NSS + +/* Define to 1 if you have the `OPENSSL_config' function. */ +#cmakedefine HAVE_OPENSSL_CONFIG + +/* Define to 1 if you have the <openssl/conf.h> header file. */ +#cmakedefine HAVE_OPENSSL_CONF_H + +/* Define to 1 if you have the <openssl/engine.h> header file. */ +#cmakedefine HAVE_OPENSSL_ENGINE_H + +/* Define to 1 if you have the <openssl/err.h> header file. */ +#cmakedefine HAVE_OPENSSL_ERR_H + +/* Define to 1 if you have the <openssl/rand.h> header file. */ +#cmakedefine HAVE_OPENSSL_RAND_H + +/* Define to 1 if you have the <openssl/ssl.h> header file. */ +#cmakedefine HAVE_OPENSSL_SSL_H + +/* Define if you have POSIX threads libraries and header files. */ +#cmakedefine HAVE_PTHREAD + +/* Have PTHREAD_PRIO_INHERIT. */ +#cmakedefine HAVE_PTHREAD_PRIO_INHERIT + +/* Define to 1 if the system has the type `pthread_rwlock_t'. */ +#cmakedefine HAVE_PTHREAD_RWLOCK_T + +/* Define to 1 if the system has the type `pthread_spinlock_t'. */ +#cmakedefine HAVE_PTHREAD_SPINLOCK_T + +/* Define to 1 if you have the <pwd.h> header file. */ +#cmakedefine HAVE_PWD_H + +/* Define if you have Python libraries and header files. */ +#cmakedefine HAVE_PYTHON + +/* Define to 1 if you have the `random' function. */ +#cmakedefine HAVE_RANDOM + +/* Define to 1 if you have the `recvmsg' function. */ +#cmakedefine HAVE_RECVMSG + +/* Define to 1 if you have the `sbrk' function. */ +#cmakedefine HAVE_SBRK + +/* Define to 1 if you have the `sendmsg' function. */ +#cmakedefine HAVE_SENDMSG + +/* Define to 1 if you have the `setregid' function. */ +#cmakedefine HAVE_SETREGID + +/* Define to 1 if you have the `setresgid' function. */ +#cmakedefine HAVE_SETRESGID + +/* Define to 1 if you have the `setresuid' function. */ +#cmakedefine HAVE_SETRESUID + +/* Define to 1 if you have the `setreuid' function. */ +#cmakedefine HAVE_SETREUID + +/* Define to 1 if you have the `setrlimit' function. */ +#cmakedefine HAVE_SETRLIMIT + +/* Define to 1 if you have the `setsid' function. */ +#cmakedefine HAVE_SETSID + +/* Define to 1 if you have the `setusercontext' function. */ +#cmakedefine HAVE_SETUSERCONTEXT + +/* Define to 1 if you have the `SHA512_Update' function. */ +#cmakedefine HAVE_SHA512_UPDATE + +/* Define to 1 if you have the `sigprocmask' function. */ +#cmakedefine HAVE_SIGPROCMASK + +/* Define to 1 if you have the `sleep' function. */ +#cmakedefine HAVE_SLEEP + +/* Define to 1 if you have the `snprintf' function. */ +#cmakedefine HAVE_SNPRINTF + +/* Define to 1 if you have the `socketpair' function. */ +#cmakedefine HAVE_SOCKETPAIR + +/* Using Solaris threads */ +#cmakedefine HAVE_SOLARIS_THREADS + +/* Define to 1 if you have the `srandom' function. */ +#cmakedefine HAVE_SRANDOM + +/* Define if you have the SSL libraries installed. */ +#cmakedefine HAVE_SSL + +/* Define to 1 if you have the <stdarg.h> header file. */ +#cmakedefine HAVE_STDARG_H + +/* Define to 1 if you have the <stdbool.h> header file. */ +#cmakedefine HAVE_STDBOOL_H + +/* Define to 1 if you have the <stdint.h> header file. */ +#cmakedefine HAVE_STDINT_H + +/* Define to 1 if you have the <stdlib.h> header file. */ +#cmakedefine HAVE_STDLIB_H + +/* Define to 1 if you have the `strftime' function. */ +#cmakedefine HAVE_STRFTIME + +/* Define to 1 if you have the <strings.h> header file. */ +#cmakedefine HAVE_STRINGS_H + +/* Define to 1 if you have the <string.h> header file. */ +#cmakedefine HAVE_STRING_H + +/* Define to 1 if you have the `strlcat' function. */ +#cmakedefine HAVE_STRLCAT + +/* Define to 1 if you have the `strlcpy' function. */ +#cmakedefine HAVE_STRLCPY + +/* Define to 1 if you have the `strptime' function. */ +#cmakedefine HAVE_STRPTIME + +/* Define to 1 if `ipi_spec_dst' is a member of `struct in_pktinfo'. */ +#cmakedefine HAVE_STRUCT_IN_PKTINFO_IPI_SPEC_DST + +/* Define if you have Swig libraries and header files. */ +#cmakedefine HAVE_SWIG + +/* Define to 1 if you have the <syslog.h> header file. */ +#cmakedefine HAVE_SYSLOG_H + +/* Define to 1 if you have the <sys/param.h> header file. */ +#cmakedefine01 HAVE_SYS_PARAM_H + +/* Define to 1 if you have the <sys/resource.h> header file. */ +#cmakedefine HAVE_SYS_RESOURCE_H + +/* Define to 1 if you have the <sys/sha2.h> header file. */ +#cmakedefine HAVE_SYS_SHA2_H + +/* Define to 1 if you have the <sys/socket.h> header file. */ +#cmakedefine HAVE_SYS_SOCKET_H + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#cmakedefine HAVE_SYS_STAT_H + +/* Define to 1 if you have the <sys/sysctl.h> header file. */ +#cmakedefine HAVE_SYS_SYSCTL_H + +/* Define to 1 if you have the <sys/types.h> header file. */ +#cmakedefine HAVE_SYS_TYPES_H + +/* Define to 1 if you have the <sys/uio.h> header file. */ +#cmakedefine HAVE_SYS_UIO_H + +/* Define to 1 if you have the <sys/wait.h> header file. */ +#cmakedefine HAVE_SYS_WAIT_H + +/* Define to 1 if you have the <time.h> header file. */ +#cmakedefine HAVE_TIME_H + +/* Define to 1 if you have the `tzset' function. */ +#cmakedefine HAVE_TZSET + +/* Define to 1 if you have the <unistd.h> header file. */ +#cmakedefine HAVE_UNISTD_H + +/* Define to 1 if you have the `usleep' function. */ +#cmakedefine HAVE_USLEEP + +/* Define to 1 if you have the `vfork' function. */ +#cmakedefine HAVE_VFORK + +/* Define to 1 if you have the <vfork.h> header file. */ +#cmakedefine HAVE_VFORK_H + +/* Define to 1 if you have the <windows.h> header file. */ +#cmakedefine HAVE_WINDOWS_H + +/* Using Windows threads */ +#cmakedefine HAVE_WINDOWS_THREADS + +/* Define to 1 if you have the <winsock2.h> header file. */ +#cmakedefine HAVE_WINSOCK2_H + +/* Define to 1 if `fork' works. */ +#cmakedefine HAVE_WORKING_FORK + +/* Define to 1 if `vfork' works. */ +#cmakedefine HAVE_WORKING_VFORK + +/* Define to 1 if you have the `writev' function. */ +#cmakedefine HAVE_WRITEV + +/* Define to 1 if you have the <ws2tcpip.h> header file. */ +#cmakedefine HAVE_WS2TCPIP_H + +/* Define to 1 if you have the `_beginthreadex' function. */ +#cmakedefine HAVE__BEGINTHREADEX + +/* if lex has yylex_destroy */ +#cmakedefine LEX_HAS_YYLEX_DESTROY + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Define to the maximum message length to pass to syslog. */ +#define MAXSYSLOGMSGLEN @MAXSYSLOGMSGLEN@ + +/* Define if memcmp() does not compare unsigned bytes */ +#cmakedefine MEMCMP_IS_BROKEN + +/* Define if mkdir has one argument. */ +#cmakedefine MKDIR_HAS_ONE_ARG + +/* Define if the network stack does not fully support nonblocking io (causes + lower performance). */ +#cmakedefine NONBLOCKING_IS_BROKEN + +/* Put -D_ALL_SOURCE define in config.h */ +#cmakedefine OMITTED__D_ALL_SOURCE + +/* Put -D_BSD_SOURCE define in config.h */ +#cmakedefine OMITTED__D_BSD_SOURCE + +/* Put -D_GNU_SOURCE define in config.h */ +#cmakedefine OMITTED__D_GNU_SOURCE + +/* Put -D_LARGEFILE_SOURCE=1 define in config.h */ +#cmakedefine OMITTED__D_LARGEFILE_SOURCE_1 + +/* Put -D_POSIX_C_SOURCE=200112 define in config.h */ +#cmakedefine OMITTED__D_POSIX_C_SOURCE_200112 + +/* Put -D_XOPEN_SOURCE=600 define in config.h */ +#cmakedefine OMITTED__D_XOPEN_SOURCE_600 + +/* Put -D_XOPEN_SOURCE_EXTENDED=1 define in config.h */ +#cmakedefine OMITTED__D_XOPEN_SOURCE_EXTENDED_1 + +/* Put -D__EXTENSIONS__ define in config.h */ +#cmakedefine OMITTED__D__EXTENSIONS__ + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "@PACKAGE_NAME@" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "@PACKAGE_STRING@" + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "@PACKAGE_VERSION@" + +/* default pidfile location */ +#define PIDFILE "@UNBOUND_PIDFILE@" + +/* Define to necessary symbol if this constant uses a non-standard name on + your system. */ +#undef PTHREAD_CREATE_JOINABLE + +/* Define as the return type of signal handlers (`int' or `void'). */ +#cmakedefine RETSIGTYPE @RETSIGTYPE@ + +/* default rootkey location */ +#undef ROOT_ANCHOR_FILE + +/* default rootcert location */ +#undef ROOT_CERT_FILE + +/* version number for resource files */ +#undef RSRC_PACKAGE_VERSION + +/* Directory to chdir to */ +#define RUN_DIR "@UNBOUND_RUN_DIR@" + +/* Shared data */ +#define SHARE_DIR "@UNBOUND_SHARE_DIR@" + +/* The size of `time_t', as computed by sizeof. */ +#undef SIZEOF_TIME_T + +/* Define to 1 if you have the ANSI C header files. */ +#cmakedefine STDC_HEADERS + +/* use default strptime. */ +#cmakedefine STRPTIME_WORKS + +/* Use win32 resources and API */ +#cmakedefine UB_ON_WINDOWS + +/* default username */ +#define UB_USERNAME "@UNBOUND_USERNAME@" + +/* use to enable lightweight alloc assertions, for debug use */ +#cmakedefine UNBOUND_ALLOC_LITE + +/* use malloc not regions, for debug use */ +#cmakedefine UNBOUND_ALLOC_NONREGIONAL + +/* use statistics for allocs and frees, for debug use */ +#cmakedefine UNBOUND_ALLOC_STATS + +/* define this to enable debug checks. */ +#cmakedefine UNBOUND_DEBUG + +/* Define to 1 to enable dnstap support */ +#cmakedefine USE_DNSTAP + +/* Define this to enable ECDSA support. */ +#cmakedefine USE_ECDSA + +/* Define this to enable an EVP workaround for older openssl */ +#cmakedefine USE_ECDSA_EVP_WORKAROUND + +/* Define this to enable GOST support. */ +#cmakedefine USE_GOST + +/* Define if you want to use internal select based events */ +#cmakedefine USE_MINI_EVENT + +/* Define this to enable SHA256 and SHA512 support. */ +#cmakedefine USE_SHA2 + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# define _ALL_SOURCE 1 +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# define _POSIX_PTHREAD_SEMANTICS 1 +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# define _TANDEM_SOURCE 1 +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# define __EXTENSIONS__ 1 +#endif + + +/* Whether the windows socket API is used */ +#cmakedefine USE_WINSOCK + +/* the version of the windows API enabled */ +#define WINVER @WINVER@ + +/* Define if you want Python module. */ +#cmakedefine WITH_PYTHONMODULE + +/* Define if you want PyUnbound. */ +#cmakedefine WITH_PYUNBOUND + +/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a + `char[]'. */ +#undef YYTEXT_POINTER + +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef _DARWIN_USE_64_BIT_INODE +# define _DARWIN_USE_64_BIT_INODE 1 +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ +#cmakedefine _LARGEFILE_SOURCE + +/* Define for large files, on AIX-style hosts. */ +#cmakedefine _LARGE_FILES + +/* Define to 1 if on MINIX. */ +#cmakedefine _MINIX + +/* Enable for compile on Minix */ +#cmakedefine _NETBSD_SOURCE + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +#cmakedefine _POSIX_1_SOURCE + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +#cmakedefine _POSIX_SOURCE + +/* Define to empty if `const' does not conform to ANSI C. */ +#cmakedefine const + +/* Define to `int' if <sys/types.h> doesn't define. */ +#cmakedefine gid_t @gid_t@ + +/* in_addr_t */ +#cmakedefine in_addr_t @in_addr_t@ + +/* in_port_t */ +#cmakedefine in_port_t @in_port_t@ + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#cmakedefine inline @inline@ +#endif + +/* Define to `short' if <sys/types.h> does not define. */ +#cmakedefine int16_t @int16_t@ + +/* Define to `int' if <sys/types.h> does not define. */ +#cmakedefine int32_t @int32_t@ + +/* Define to `long long' if <sys/types.h> does not define. */ +#cmakedefine int64_t @int64_t@ + +/* Define to `signed char' if <sys/types.h> does not define. */ +#cmakedefine int8_t @int8_t@ + +/* Define if replacement function should be used. */ +#cmakedefine malloc + +/* Define to `long int' if <sys/types.h> does not define. */ +#cmakedefine off_t + +/* Define to `int' if <sys/types.h> does not define. */ +#cmakedefine pid_t @pid_t@ + +/* Define to 'int' if not defined */ +#cmakedefine rlim_t @rlim_t@ + +/* Define to `unsigned int' if <sys/types.h> does not define. */ +#cmakedefine size_t + +/* Define to 'int' if not defined */ +#cmakedefine socklen_t + +/* Define to `int' if <sys/types.h> does not define. */ +#cmakedefine ssize_t @ssize_t@ + +/* Define to 'unsigned char if not defined */ +#cmakedefine u_char + +/* Define to `int' if <sys/types.h> doesn't define. */ +#cmakedefine uid_t @uid_t@ + +/* Define to `unsigned short' if <sys/types.h> does not define. */ +#cmakedefine uint16_t @uint16_t@ + +/* Define to `unsigned int' if <sys/types.h> does not define. */ +#cmakedefine uint32_t @uint32_t@ + +/* Define to `unsigned long long' if <sys/types.h> does not define. */ +#cmakedefine uint64_t @uint64_t@ + +/* Define to `unsigned char' if <sys/types.h> does not define. */ +#cmakedefine uint8_t @uint8_t@ + +/* Define as `fork' if `vfork' does not work. */ +#cmakedefine vfork @vfork@ + +#cmakedefine __func__ @__func__@ + +#if defined(OMITTED__D_GNU_SOURCE) && !defined(_GNU_SOURCE) +#define _GNU_SOURCE 1 +#endif + +#if defined(OMITTED__D_BSD_SOURCE) && !defined(_BSD_SOURCE) +#define _BSD_SOURCE 1 +#endif + +#if defined(OMITTED__D__EXTENSIONS__) && !defined(__EXTENSIONS__) +#define __EXTENSIONS__ 1 +#endif + +#if defined(OMITTED__D_POSIX_C_SOURCE_200112) && !defined(_POSIX_C_SOURCE) +#define _POSIX_C_SOURCE 200112 +#endif + +#if defined(OMITTED__D_XOPEN_SOURCE_600) && !defined(_XOPEN_SOURCE) +#define _XOPEN_SOURCE 600 +#endif + +#if defined(OMITTED__D_XOPEN_SOURCE_EXTENDED_1) && !defined(_XOPEN_SOURCE_EXTENDED) +#define _XOPEN_SOURCE_EXTENDED 1 +#endif + +#if defined(OMITTED__D_ALL_SOURCE) && !defined(_ALL_SOURCE) +#define _ALL_SOURCE 1 +#endif + +#if defined(OMITTED__D_LARGEFILE_SOURCE_1) && !defined(_LARGEFILE_SOURCE) +#define _LARGEFILE_SOURCE 1 +#endif + + + + +#ifndef UNBOUND_DEBUG +# define NDEBUG +#endif + +/** Use small-ldns codebase */ +#define USE_SLDNS 1 +#ifdef HAVE_SSL +# define LDNS_BUILD_CONFIG_HAVE_SSL 1 +#endif + +#include <stdio.h> +#include <string.h> +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif +#include <assert.h> + +#if STDC_HEADERS +#include <stdlib.h> +#include <stddef.h> +#endif + +#ifdef HAVE_STDARG_H +#include <stdarg.h> +#endif + +#ifdef HAVE_STDINT_H +#include <stdint.h> +#endif + +#include <errno.h> + +#if HAVE_SYS_PARAM_H +#include <sys/param.h> +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include <sys/socket.h> +#endif + +#ifdef HAVE_SYS_TYPES_H +#include <sys/types.h> +#endif + +#ifdef HAVE_SYS_UIO_H +#include <sys/uio.h> +#endif + +#ifdef HAVE_NETINET_IN_H +#include <netinet/in.h> +#endif + +#ifdef HAVE_ARPA_INET_H +#include <arpa/inet.h> +#endif + +#ifdef HAVE_WINSOCK2_H +#include <winsock2.h> +#endif + +#ifdef HAVE_WS2TCPIP_H +#include <ws2tcpip.h> +#endif + +#ifndef USE_WINSOCK +#define ARG_LL "%ll" +#else +#define ARG_LL "%I64" +#endif + + + +#ifdef HAVE_ATTR_FORMAT +# define ATTR_FORMAT(archetype, string_index, first_to_check) \ + __attribute__ ((format (archetype, string_index, first_to_check))) +#else /* !HAVE_ATTR_FORMAT */ +# define ATTR_FORMAT(archetype, string_index, first_to_check) /* empty */ +#endif /* !HAVE_ATTR_FORMAT */ + + +#if defined(DOXYGEN) +# define ATTR_UNUSED(x) x +#elif defined(__cplusplus) +# define ATTR_UNUSED(x) +#elif defined(HAVE_ATTR_UNUSED) +# define ATTR_UNUSED(x) x __attribute__((unused)) +#else /* !HAVE_ATTR_UNUSED */ +# define ATTR_UNUSED(x) x +#endif /* !HAVE_ATTR_UNUSED */ + + +#ifndef HAVE_FSEEKO +#define fseeko fseek +#define ftello ftell +#endif /* HAVE_FSEEKO */ + + +#ifndef MAXHOSTNAMELEN +#define MAXHOSTNAMELEN 256 +#endif + + +#ifndef HAVE_SNPRINTF +#define snprintf snprintf_unbound +#define vsnprintf vsnprintf_unbound +#include <stdarg.h> +int snprintf (char *str, size_t count, const char *fmt, ...); +int vsnprintf (char *str, size_t count, const char *fmt, va_list arg); +#endif /* HAVE_SNPRINTF */ + + +#ifndef HAVE_INET_PTON +#define inet_pton inet_pton_unbound +int inet_pton(int af, const char* src, void* dst); +#endif /* HAVE_INET_PTON */ + + +#ifndef HAVE_INET_NTOP +#define inet_ntop inet_ntop_unbound +const char *inet_ntop(int af, const void *src, char *dst, size_t size); +#endif + + +#ifndef HAVE_INET_ATON +#define inet_aton inet_aton_unbound +int inet_aton(const char *cp, struct in_addr *addr); +#endif + + +#ifndef HAVE_MEMMOVE +#define memmove memmove_unbound +void *memmove(void *dest, const void *src, size_t n); +#endif + + +#ifndef HAVE_STRLCAT +#define strlcat strlcat_unbound +size_t strlcat(char *dst, const char *src, size_t siz); +#endif + + +#ifndef HAVE_STRLCPY +#define strlcpy strlcpy_unbound +size_t strlcpy(char *dst, const char *src, size_t siz); +#endif + + +#ifndef HAVE_GMTIME_R +#define gmtime_r gmtime_r_unbound +struct tm *gmtime_r(const time_t *timep, struct tm *result); +#endif + + +#if !defined(HAVE_SLEEP) || defined(HAVE_WINDOWS_H) +#define sleep(x) Sleep((x)*1000) /* on win32 */ +#endif /* HAVE_SLEEP */ + + +#ifndef HAVE_USLEEP +#define usleep(x) Sleep((x)/1000 + 1) /* on win32 */ +#endif /* HAVE_USLEEP */ + + +#ifndef HAVE_RANDOM +#define random rand /* on win32, for tests only (bad random) */ +#endif /* HAVE_RANDOM */ + + +#ifndef HAVE_SRANDOM +#define srandom(x) srand(x) /* on win32, for tests only (bad random) */ +#endif /* HAVE_SRANDOM */ + + +/* detect if we need to cast to unsigned int for FD_SET to avoid warnings */ +#ifdef HAVE_WINSOCK2_H +#define FD_SET_T (u_int) +#else +#define FD_SET_T +#endif + + +#ifndef IPV6_MIN_MTU +#define IPV6_MIN_MTU 1280 +#endif /* IPV6_MIN_MTU */ + + +#ifdef MEMCMP_IS_BROKEN +#include "compat/memcmp.h" +#define memcmp memcmp_unbound +int memcmp(const void *x, const void *y, size_t n); +#endif + + + +#ifndef HAVE_CTIME_R +#define ctime_r unbound_ctime_r +char *ctime_r(const time_t *timep, char *buf); +#endif + +#if !defined(HAVE_STRPTIME) || !defined(STRPTIME_WORKS) +#define strptime unbound_strptime +struct tm; +char *strptime(const char *s, const char *format, struct tm *tm); +#endif + +#ifdef HAVE_LIBRESSL +# if !HAVE_DECL_STRLCPY +size_t strlcpy(char *dst, const char *src, size_t siz); +# endif +# if !HAVE_DECL_STRLCAT +size_t strlcat(char *dst, const char *src, size_t siz); +# endif +# if !HAVE_DECL_ARC4RANDOM && defined(HAVE_ARC4RANDOM) +uint32_t arc4random(void); +# endif +# if !HAVE_DECL_ARC4RANDOM_UNIFORM && defined(HAVE_ARC4RANDOM_UNIFORM) +uint32_t arc4random_uniform(uint32_t upper_bound); +# endif +#endif /* HAVE_LIBRESSL */ +#ifndef HAVE_ARC4RANDOM +void explicit_bzero(void* buf, size_t len); +int getentropy(void* buf, size_t len); +uint32_t arc4random(void); +void arc4random_buf(void* buf, size_t n); +void _ARC4_LOCK(void); +void _ARC4_UNLOCK(void); +#endif +#ifndef HAVE_ARC4RANDOM_UNIFORM +uint32_t arc4random_uniform(uint32_t upper_bound); +#endif +#ifdef COMPAT_SHA512 +#ifndef SHA512_DIGEST_LENGTH +#define SHA512_BLOCK_LENGTH 128 +#define SHA512_DIGEST_LENGTH 64 +#define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1) +typedef struct _SHA512_CTX { + uint64_t state[8]; + uint64_t bitcount[2]; + uint8_t buffer[SHA512_BLOCK_LENGTH]; +} SHA512_CTX; +#endif /* SHA512_DIGEST_LENGTH */ +void SHA512_Init(SHA512_CTX*); +void SHA512_Update(SHA512_CTX*, void*, size_t); +void SHA512_Final(uint8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*); +unsigned char *SHA512(void* data, unsigned int data_len, unsigned char *digest); +#endif /* COMPAT_SHA512 */ + + + +#if defined(HAVE_EVENT_H) && !defined(HAVE_EVENT_BASE_ONCE) && !(defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)) && (defined(HAVE_PTHREAD) || defined(HAVE_SOLARIS_THREADS)) + /* using version of libevent that is not threadsafe. */ +# define LIBEVENT_SIGNAL_PROBLEM 1 +#endif + +#ifndef CHECKED_INET6 +# define CHECKED_INET6 +# ifdef AF_INET6 +# define INET6 +# else +# define AF_INET6 28 +# endif +#endif /* CHECKED_INET6 */ + +#ifndef HAVE_GETADDRINFO +struct sockaddr_storage; +#include "compat/fake-rfc2553.h" +#endif + +#ifdef UNBOUND_ALLOC_STATS +# define malloc(s) unbound_stat_malloc_log(s, __FILE__, __LINE__, __func__) +# define calloc(n,s) unbound_stat_calloc_log(n, s, __FILE__, __LINE__, __func__) +# define free(p) unbound_stat_free_log(p, __FILE__, __LINE__, __func__) +# define realloc(p,s) unbound_stat_realloc_log(p, s, __FILE__, __LINE__, __func__) +void *unbound_stat_malloc(size_t size); +void *unbound_stat_calloc(size_t nmemb, size_t size); +void unbound_stat_free(void *ptr); +void *unbound_stat_realloc(void *ptr, size_t size); +void *unbound_stat_malloc_log(size_t size, const char* file, int line, + const char* func); +void *unbound_stat_calloc_log(size_t nmemb, size_t size, const char* file, + int line, const char* func); +void unbound_stat_free_log(void *ptr, const char* file, int line, + const char* func); +void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file, + int line, const char* func); +#elif defined(UNBOUND_ALLOC_LITE) +# include "util/alloc.h" +#endif /* UNBOUND_ALLOC_LITE and UNBOUND_ALLOC_STATS */ + +/** default port for DNS traffic. */ +#define UNBOUND_DNS_PORT 53 +/** default port for unbound control traffic, registered port with IANA, + ub-dns-control 8953/tcp unbound dns nameserver control */ +#define UNBOUND_CONTROL_PORT 8953 +/** the version of unbound-control that this software implements */ +#define UNBOUND_CONTROL_VERSION 1 + + diff --git a/external/unbound/configure_checks.cmake b/external/unbound/configure_checks.cmake new file mode 100644 index 000000000..ead51e98f --- /dev/null +++ b/external/unbound/configure_checks.cmake @@ -0,0 +1,218 @@ +include(CheckIncludeFile) +include(CheckFunctionExists) +include(CheckSymbolExists) +include(CheckTypeSize) + +# Need expat. + +check_include_file(arpa/inet.h HAVE_ARPA_INET_H) +check_include_file(endian.h HAVE_ENDIAN_H) +check_include_file(dlfcn.h HAVE_DLFCN_H) +check_include_file(event.h HAVE_EVENT_H) +check_include_file(getopt.h HAVE_GETOPT_H) +check_include_file(glob.h HAVE_GLOB_H) +check_include_file(grp.h HAVE_GRP_H) +check_include_file(inttypes.h HAVE_INTTYPES_H) +check_include_file(iphlpapi.h HAVE_IPHLPAPI_H) +check_include_file(login_cap.h HAVE_LOGIN_CAP_H) +check_include_file(memory.h HAVE_MEMORY_H) +check_include_file(netdb.h HAVE_NETDB_H) +check_include_file(netinet/in.h HAVE_NETINET_IN_H) +check_include_file(pwd.h HAVE_PWD_H) +check_include_file(stdarg.h HAVE_STDARG_H) +check_include_file(stdbool.h HAVE_STDBOOL_H) +check_include_file(stdint.h HAVE_STDINT_H) +check_include_file(stdlib.h HAVE_STDLIB_H) +check_include_file(strings.h HAVE_STRINGS_H) +check_include_file(string.h HAVE_STRING_H) +check_include_file(sys/param.h HAVE_SYS_PARAM_H) +check_include_file(sys/resource.h HAVE_SYS_RESOURCE_H) +check_include_file(sys/sha2.h HAVE_SYS_SHA2_H) +check_include_file(sys/socket.h HAVE_SYS_SOCKET_H) +check_include_file(sys/stat.h HAVE_SYS_STAT_H) +check_include_file(sys/sysctl.h HAVE_SYS_SYSCTL_H) +check_include_file(sys/types.h HAVE_SYS_TYPES_H) +check_include_file(sys/uio.h HAVE_SYS_UIO_H) +check_include_file(sys/wait.h HAVE_SYS_WAIT_H) +check_include_file(syslog.h HAVE_SYSLOG_H) +check_include_file(time.h HAVE_TIME_H) +check_include_file(unistd.h HAVE_UNISTD_H) +check_include_file(vfork.h HAVE_VFORK_H) +check_include_file(windows.h HAVE_WINDOWS_H) +check_include_file(winsock2.h HAVE_WINSOCK2_H) +check_include_file(ws2tcpip.h HAVE_WS2TCPIP_H) + +if (WIN32) + set(CMAKE_REQUIRED_LIBRARIES + iphlpapi + ws2_32) +endif () + +check_function_exists(arc4random HAVE_ARC4RANDOM) +check_function_exists(arc4random_uniform HAVE_ARC4RANDOM_UNIFORM) +check_function_exists(chown HAVE_CHOWN) +check_function_exists(chroot HAVE_CHROOT) +check_function_exists(ctime_r HAVE_CTIME_R) +check_function_exists(daemon HAVE_DAEMON) +check_function_exists(endprotoent HAVE_ENDPROTOENT) +check_function_exists(endservent HAVE_ENDSERVENT) +check_function_exists(fnctl HAVE_FNCTL) +check_function_exists(fork HAVE_FORK) +check_function_exists(fseeko HAVE_FSEEKO) +check_function_exists(getentropy HAVE_GETENTROPY) +check_function_exists(getpwnam HAVE_GETPWNAM) +check_function_exists(getrlimit HAVE_GETRLIMIT) +check_function_exists(glob HAVE_GLOB) +check_function_exists(gmtime_r HAVE_GMTIME_R) +check_function_exists(inet_aton HAVE_INET_ATON) +check_function_exists(inet_ntop HAVE_INET_NTOP) +check_function_exists(inet_pton HAVE_INET_PTON) +check_function_exists(initgroups HAVE_INITGROUPS) +check_function_exists(ioctlsocket HAVE_IOCTLSOCKET) +check_function_exists(kill HAVE_KILL) +check_function_exists(localtime_r HAVE_LOCALTIME_R) +check_function_exists(malloc HAVE_MALLOC) +check_function_exists(memmove HAVE_MEMMOVE) +check_function_exists(random HAVE_RANDOM) +check_function_exists(recvmsg HAVE_RECVMSG) +check_function_exists(sbrk HAVE_SBRK) +check_function_exists(sendmsg HAVE_SENDMSG) +check_function_exists(setregid HAVE_SETREGID) +check_function_exists(setresgid HAVE_SETRESGID) +check_function_exists(setresuid HAVE_SETRESUID) +check_function_exists(setreuid HAVE_SETREUID) +check_function_exists(setrlimit HAVE_SETRLIMIT) +check_function_exists(setsid HAVE_SETSID) +check_function_exists(setusercontent HAVE_SETUSERCONTENT) +check_function_exists(sigprocmask HAVE_SIGPROCMASK) +check_function_exists(sleep HAVE_SLEEP) +check_function_exists(snprintf HAVE_SNPRINTF) +check_function_exists(socketpair HAVE_SOCKETPAIR) +check_function_exists(srandom HAVE_SRANDOM) +check_function_exists(strftime HAVE_STRFTIME) +check_function_exists(strlcat HAVE_STRLCAT) +check_function_exists(strlcpy HAVE_STRLCPY) +check_function_exists(strptime HAVE_STRPTIME) +check_function_exists(strlcpy HAVE_STRLCPY) +check_function_exists(tzset HAVE_TZSET) +check_function_exists(usleep HAVE_USLEEP) +check_function_exists(writev HAVE_WRITEV) +check_function_exists(_beginthreadex HAVE__BEGINTHREADEX) + +set(getaddrinfo_headers) +if (HAVE_NETDB_H) + list(APPEND getaddrinfo_headers "netdb.h") +endif () +if (HAVE_WS2TCPIP_H) + list(APPEND getaddrinfo_headers "ws2tcpip.h") +endif () +check_symbol_exists(getaddrinfo "${getaddrinfo_headers}" HAVE_GETADDRINFO) + +check_function_exists(getaddrinfo HAVE_GETADDRINFO) + +function (check_type_exists type variable header default) + set(CMAKE_EXTRA_INCLUDE_FILES "${header}") + check_type_size("${type}" "${variable}") + + if (NOT HAVE_${type}) + set("${variable}" "${default}" PARENT_SCOPE) + else () + set("${variable}" "FALSE" PARENT_SCOPE) + endif () +endfunction () + +set(CMAKE_EXTRA_INCLUDE_FILES "time.h") +check_type_size(time_t SIZEOF_TIME_T) +set(CMAKE_EXTRA_INCLUDE_FILES) + +check_type_exists(gid_t gid_t "sys/types.h" int) +check_type_exists(in_addr_t in_addr_t "netinet/in.h" uint32_t) +check_type_exists(in_port_t in_port_t "netinet/in.h" uint16_t) +check_type_exists(int16_t int16_t "sys/types.h" short) +check_type_exists(int32_t int32_t "sys/types.h" int) +check_type_exists(int64_t int64_t "sys/types.h" __int64) +check_type_exists(int8_t int8_t "sys/types.h" char) +check_type_exists(pid_t pid_t "sys/types.h" int) +check_type_exists(rlim_t rlim_t "sys/resource.h" "unsigned long") +check_type_exists(ssize_t ssize_t "sys/types.h" int) +check_type_exists(uid_t uid_t "sys/types.h" int) +check_type_exists(uint16_t uint16_t "sys/types.h" "unsigned short") +check_type_exists(uint32_t uint32_t "sys/types.h" "unsigned int") +check_type_exists(uint64_t uint64_t "sys/types.h" "unsigned long long") +check_type_exists(uint8_t uint8_t "sys/types.h" "unsigned char") + +if (WIN32) + set(UB_ON_WINDOWS 1) +endif () + +if (MSVC) + set(inline __inline) + set(__func__ __FUNCTION__) +endif () + +if (NOT HAVE_VFORK) + set(vfork fork) +endif () + +# XXX: Check for broken malloc()? +# XXX: Check for broken memcmp()? +# XXX: Check for broken vfork()? +# XXX: Check for one-arg mkdir? + +check_symbol_exists(PTHREAD_PRIO_INHERIT "pthread.h" HAVE_PTHREAD_PRIO_INHERIT) +check_symbol_exists(pthread_rwlock_t "pthread.h" HAVE_PTHREAD_RWLOCK_T) +check_symbol_exists(pthread_spinlock_t "pthread.h" HAVE_PTHREAD_SPINLOCK_T) + +# openssl +set(CMAKE_REQUIRED_INCLUDES + ${OPENSSL_INCLUDE_DIR}) + +check_include_file(openssl/conf.h HAVE_OPENSSL_CONF_H) +check_include_file(openssl/engine.h HAVE_OPENSSL_ENGINE_H) +check_include_file(openssl/err.h HAVE_OPENSSL_ERR_H) +check_include_file(openssl/rand.h HAVE_OPENSSL_RAND_H) +check_include_file(openssl/ssl.h HAVE_OPENSSL_SSL_H) + +set(CMAKE_REQUIRED_INCLUDES) + +check_symbol_exists(NID_secp384r1 "openssl/evp.h" HAVE_DECL_NID_SECP384R1) +check_symbol_exists(NID_X9_62_prime256v1 "openssl/evp.h" HAVE_DECL_NID_X9_62_PRIME256V1) +check_symbol_exists(sk_SSL_COMP_pop_free "openssl/ssl.h" HAVE_DECL_SK_SSL_COMP_POP_FREE) +check_symbol_exists(SSL_COMP_get_compression_methods "openssl/ssl.h" HAVE_DECL_SSL_COMP_GET_COMPRESSION_METHODS) + +set(CMAKE_REQUIRED_LIBRARIES + ${OPENSSL_LIBRARIES}) + +check_function_exists(EVP_sha1 HAVE_EVP_SHA1) +check_function_exists(EVP_sha256 HAVE_EVP_SHA256) +check_function_exists(EVP_sha512 HAVE_EVP_SHA512) +check_function_exists(FIPS_mode HAVE_FIPS_MODE) +check_function_exists(HMAC_CTX_init HAVE_HMAC_CTX_INIT) +check_function_exists(OPENSSL_config HAVE_OPENSSL_CONFIG) +check_function_exists(SHA512_Update HAVE_SHA512_UPDATE) + +set(CMAKE_REQUIRED_LIBRARIES) + +set(UNBOUND_CONFIGFILE "${CMAKE_INSTALL_PREFIX}/etc/unbound/unbound.conf" + CACHE STRING "default configuration file") +set(UNBOUND_USERNAME "unbound" + CACHE STRING "default user that unbound changes to") +set(UNBOUND_CHROOT_DIR "${CMAKE_INSTALL_PREFIX}/etc/unbound" + CACHE STRING "default directory to chroot to") +set(UNBOUND_RUN_DIR "${CMAKE_INSTALL_PREFIX}/etc/unbound" + CACHE STRING "default directory to chroot to") +set(UNBOUND_SHARE_DIR "${CMAKE_INSTALL_PREFIX}/etc/unbound" + CACHE STRING "default directory with shared data") +set(UNBOUND_PIDFILE "${CMAKE_INSTALL_PREFIX}/etc/unbound/unbound.pid" + CACHE STRING "default pathname to the pidfile") + +# Copied from configure.ac. +set(WINVER 0x0502) +set(PACKAGE_VERSION "1.4.23") +set(PACKAGE_NAME "${PROJECT_NAME}") +set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}") +set(MAXSYSLOGMSGLEN 10240) + +# Make assumptions. +set(HAVE_WORKING_FORK ${HAVE_FORK}) +set(HAVE_WORKING_VFORK ${HAVE_VFORK}) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index aec615eb2..43c5740af 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -28,59 +28,72 @@ # # Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers -add_definitions(-DSTATICLIB) -# miniupnp changed their static define -add_definitions(-DMINIUPNP_STATICLIB) +if (WIN32 OR STATIC) + add_definitions(-DSTATICLIB) + # miniupnp changed their static define + add_definitions(-DMINIUPNP_STATICLIB) +endif () -file(GLOB_RECURSE COMMON common/*) -file(GLOB_RECURSE CRYPTO crypto/*) -file(GLOB_RECURSE CRYPTONOTE_CORE cryptonote_core/*) -file(GLOB_RECURSE CRYPTONOTE_PROTOCOL cryptonote_protocol/*) -file(GLOB_RECURSE DAEMON daemon/*) -file(GLOB_RECURSE P2P p2p/*) -file(GLOB_RECURSE RPC rpc/*) -file(GLOB_RECURSE SIMPLEWALLET simplewallet/*) -file(GLOB_RECURSE CONN_TOOL connectivity_tool/*) -file(GLOB_RECURSE WALLET wallet/*) -file(GLOB_RECURSE MINER miner/*) -file(GLOB MNEMONICS mnemonics/*) +function (bitmonero_private_headers group) + source_group("${group}\\Private" + FILES + ${ARGN}) +endfunction () -source_group(common FILES ${COMMON}) -source_group(crypto FILES ${CRYPTO}) -source_group(cryptonote_core FILES ${CRYPTONOTE_CORE}) -source_group(cryptonote_protocol FILES ${CRYPTONOTE_PROTOCOL}) -source_group(daemon FILES ${DAEMON}) -source_group(p2p FILES ${P2P}) -source_group(rpc FILES ${RPC}) -source_group(simplewallet FILES ${SIMPLEWALLET}) -source_group(connectivity-tool FILES ${CONN_TOOL}) -source_group(wallet FILES ${WALLET}) -source_group(simpleminer FILES ${MINER}) -source_group(mnemonics FILES ${MNEMONICS}) +function (bitmonero_install_headers subdir) + install( + FILES ${ARGN} + DESTINATION "include/${subdir}" + COMPONENT development) +endfunction () -add_library(common ${COMMON}) -add_library(crypto ${CRYPTO}) -add_library(cryptonote_core ${CRYPTONOTE_CORE}) -add_library(mnemonics ${MNEMONICS}) -add_executable(daemon ${DAEMON} ${P2P} ${CRYPTONOTE_PROTOCOL}) -add_executable(connectivity_tool ${CONN_TOOL}) -add_executable(simpleminer ${MINER}) -target_link_libraries(daemon rpc cryptonote_core crypto common ${UNBOUND_LIBRARY} ${UPNP_LIBRARIES} ${Boost_LIBRARIES} ${EXTRA_LIBRARIES}) -target_link_libraries(connectivity_tool cryptonote_core crypto common ${UNBOUND_LIBRARY} ${Boost_LIBRARIES} ${EXTRA_LIBRARIES}) -target_link_libraries(simpleminer cryptonote_core crypto common ${UNBOUND_LIBRARY} ${Boost_LIBRARIES} ${EXTRA_LIBRARIES}) -add_library(rpc ${RPC}) -add_library(wallet ${WALLET}) -target_link_libraries(wallet mnemonics) -add_executable(simplewallet ${SIMPLEWALLET} ) -target_link_libraries(simplewallet wallet rpc cryptonote_core crypto common mnemonics ${UNBOUND_LIBRARY} ${UPNP_LIBRARIES} ${Boost_LIBRARIES} ${EXTRA_LIBRARIES}) -add_dependencies(daemon version) -add_dependencies(rpc version) -add_dependencies(simplewallet version) +function (bitmonero_add_executable name) + source_group("${name}" + FILES + ${ARGN}) -set_property(TARGET common crypto cryptonote_core rpc wallet PROPERTY FOLDER "libs") -set_property(TARGET daemon simplewallet connectivity_tool simpleminer PROPERTY FOLDER "prog") -if (STATIC) - set_property(TARGET daemon simplewallet connectivity_tool simpleminer PROPERTY LINK_SEARCH_START_STATIC 1) - set_property(TARGET daemon simplewallet connectivity_tool simpleminer PROPERTY LINK_SEARCH_END_STATIC 1) -endif() -set_property(TARGET daemon PROPERTY OUTPUT_NAME "bitmonerod") + add_executable("${name}" + ${ARGN}) + target_link_libraries("${name}" + LINK_PRIVATE + ${EXTRA_LIBRARIES}) + set_property(TARGET "${name}" + PROPERTY + FOLDER "prog") + set_property(TARGET "${name}" + PROPERTY + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") + + if (STATIC) + set_property(TARGET "${name}" + PROPERTY + LINK_SEARCH_START_STATIC 1) + set_property(TARGET "${name}" + PROPERTY + LINK_SEARCH_END_STATIC 1) + endif () +endfunction () + +function (bitmonero_add_library name) + source_group("${name}" + FILES + ${ARGN}) + + add_library("${name}" + ${ARGN}) + set_property(TARGET "${name}" + PROPERTY + FOLDER "libs") +endfunction () + +add_subdirectory(common) +add_subdirectory(crypto) +add_subdirectory(cryptonote_core) +add_subdirectory(mnemonics) +add_subdirectory(rpc) +add_subdirectory(wallet) + +add_subdirectory(connectivity_tool) +add_subdirectory(miner) +add_subdirectory(simplewallet) +add_subdirectory(daemon) diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt new file mode 100644 index 000000000..739c0adee --- /dev/null +++ b/src/common/CMakeLists.txt @@ -0,0 +1,64 @@ +# Copyright (c) 2014, The Monero Project +# +# All rights reserved. +# +# 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. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. + +set(common_sources + base58.cpp + command_line.cpp + dns_utils.cpp + util.cpp) + +set(common_headers) + +set(common_private_headers + base58.h + boost_serialization_helper.h + command_line.h + dns_utils.h + int-util.h + pod-class.h + unordered_containers_boost_serialization.h + util.h + varint.h) + +bitmonero_private_headers(common + ${common_private_headers}) +bitmonero_add_library(common + ${common_sources} + ${common_headers} + ${common_private_headers}) +target_link_libraries(common + LINK_PRIVATE + crypto + ${UNBOUND_LIBRARY} + ${Boost_DATE_TIME_LIBRARY} + ${Boost_FILESYSTEM_LIBRARY} + ${Boost_SYSTEM_LIBRARY} + ${EXTRA_LIBRARIES}) + +#bitmonero_install_headers(common +# ${common_headers}) diff --git a/src/connectivity_tool/CMakeLists.txt b/src/connectivity_tool/CMakeLists.txt new file mode 100644 index 000000000..b0178c70a --- /dev/null +++ b/src/connectivity_tool/CMakeLists.txt @@ -0,0 +1,45 @@ +# Copyright (c) 2014, The Monero Project +# +# All rights reserved. +# +# 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. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. + +set(connectivity_tool_sources + conn_tool.cpp) + +set(connectivity_tool_private_headers) + +bitmonero_add_executable(connectivity_tool + ${connectivity_tool_sources} + ${connectivity_tool_private_headers}) +target_link_libraries(connectivity_tool + LINK_PRIVATE + cryptonote_core + crypto + common + ${CMAKE_THREAD_LIBS_INIT} + ${Boost_PROGRAM_OPTIONS_LIBRARY} + ${Boost_REGEX_LIBRARY} + ${Boost_SYSTEM_LIBRARY}) diff --git a/src/crypto/CMakeLists.txt b/src/crypto/CMakeLists.txt new file mode 100644 index 000000000..4afcab9c8 --- /dev/null +++ b/src/crypto/CMakeLists.txt @@ -0,0 +1,76 @@ +# Copyright (c) 2014, The Monero Project +# +# All rights reserved. +# +# 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. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. + +set(crypto_sources + aesb.c + blake256.c + chacha8.c + crypto-ops-data.c + crypto-ops.c + crypto.cpp + groestl.c + hash-extra-blake.c + hash-extra-groestl.c + hash-extra-jh.c + hash-extra-skein.c + hash.c + jh.c + keccak.c + oaes_lib.c + random.c + skein.c + slow-hash.c + tree-hash.c) + +set(crypto_headers) + +set(crypto_private_headers + blake256.h + chacha8.h + crypto-ops.h + crypto.h + generic-ops.h + groestl.h + groestl_tables.h + hash-ops.h + hash.h + initializer.h + jh.h + keccak.h + oaes_config.h + oaes_lib.h + random.h + skein.h + skein_port.h) + +bitmonero_private_headers(crypto + ${crypto_private_headers}) +bitmonero_add_library(crypto + ${crypto_sources} + ${crypto_headers} + ${crypto_private_headers}) diff --git a/src/cryptonote_core/CMakeLists.txt b/src/cryptonote_core/CMakeLists.txt new file mode 100644 index 000000000..3c2e097c1 --- /dev/null +++ b/src/cryptonote_core/CMakeLists.txt @@ -0,0 +1,80 @@ +# Copyright (c) 2014, The Monero Project +# +# All rights reserved. +# +# 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. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. + +set(cryptonote_core_sources + account.cpp + blockchain_storage.cpp + checkpoints.cpp + checkpoints_create.cpp + cryptonote_basic_impl.cpp + cryptonote_core.cpp + cryptonote_format_utils.cpp + difficulty.cpp + miner.cpp + tx_pool.cpp) + +set(cryptonote_core_headers) + +set(cryptonote_core_private_headers + account.h + account_boost_serialization.h + blockchain_storage.h + blockchain_storage_boost_serialization.h + checkpoints.h + checkpoints_create.h + connection_context.h + cryptonote_basic.h + cryptonote_basic_impl.h + cryptonote_boost_serialization.h + cryptonote_core.h + cryptonote_format_utils.h + cryptonote_stat_info.h + difficulty.h + miner.h + tx_extra.h + tx_pool.h + verification_context.h) + +bitmonero_private_headers(cryptonote_core + ${crypto_private_headers}) +bitmonero_add_library(cryptonote_core + ${cryptonote_core_sources} + ${cryptonote_core_headers} + ${cryptonote_core_private_headers}) +target_link_libraries(cryptonote_core + LINK_PUBLIC + common + crypto + ${Boost_DATE_TIME_LIBRARY} + ${Boost_PROGRAM_OPTIONS_LIBRARY} + ${Boost_SERIALIZATION_LIBRARY} + LINK_PRIVATE + ${Boost_FILESYSTEM_LIBRARY} + ${Boost_SYSTEM_LIBRARY} + ${Boost_THREAD_LIBRARY} + ${EXTRA_LIBRARIES}) diff --git a/src/daemon/CMakeLists.txt b/src/daemon/CMakeLists.txt new file mode 100644 index 000000000..adcc61c43 --- /dev/null +++ b/src/daemon/CMakeLists.txt @@ -0,0 +1,78 @@ +# Copyright (c) 2014, The Monero Project +# +# All rights reserved. +# +# 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. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. + +set(daemon_sources + daemon.cpp) + +set(daemon_headers) + +set(daemon_private_headers + daemon_commands_handler.h + + # cryptonote_protocol + ../cryptonote_protocol/blobdatatype.h + ../cryptonote_protocol/cryptonote_protocol_defs.h + ../cryptonote_protocol/cryptonote_protocol_handler.h + ../cryptonote_protocol/cryptonote_protocol_handler.inl + ../cryptonote_protocol/cryptonote_protocol_handler_common.h + + # p2p + ../p2p/net_node.h + ../p2p/net_node.inl + ../p2p/net_node_common.h + ../p2p/net_peerlist.h + ../p2p/net_peerlist_boost_serialization.h + ../p2p/p2p_protocol_defs.h + ../p2p/stdafx.h) + +bitmonero_private_headers(daemon + ${daemon_private_headers}) +bitmonero_add_executable(daemon + ${daemon_sources} + ${daemon_headers} + ${daemon_private_headers}) +target_link_libraries(daemon + LINK_PRIVATE + rpc + cryptonote_core + crypto + common + ${Boost_CHRONO_LIBRARY} + ${Boost_FILESYSTEM_LIBRARY} + ${Boost_PROGRAM_OPTIONS_LIBRARY} + ${Boost_REGEX_LIBRARY} + ${Boost_SYSTEM_LIBRARY} + ${Boost_THREAD_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT} + ${UPNP_LIBRARIES} + ${EXTRA_LIBRARIES}) +add_dependencies(daemon + version) +set_property(TARGET daemon + PROPERTY + OUTPUT_NAME "bitmonerod") diff --git a/src/miner/CMakeLists.txt b/src/miner/CMakeLists.txt new file mode 100644 index 000000000..83bda57cc --- /dev/null +++ b/src/miner/CMakeLists.txt @@ -0,0 +1,55 @@ +# Copyright (c) 2014, The Monero Project +# +# All rights reserved. +# +# 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. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. + +set(simpleminer_sources + simpleminer.cpp) + +set(simpleminer_headers) + +set(simpleminer_private_headers + simpleminer.h + simpleminer_protocol_defs.h + target_helper.h) + +bitmonero_private_headers(simpleminer + ${simpleminer_private_headers}) +bitmonero_add_executable(simpleminer + ${simpleminer_sources} + ${simpleminer_headers} + ${simpleminer_private_headers}) +target_link_libraries(simpleminer + LINK_PRIVATE + cryptonote_core + common + ${Boost_FILESYSTEM_LIBRARY} + ${Boost_PROGRAM_OPTIONS_LIBRARY} + ${Boost_REGEX_LIBRARY} + ${Boost_SYSTEM_LIBRARY} + ${Boost_THREAD_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT} + ${EXTRA_LIBRARIES}) diff --git a/src/mnemonics/CMakeLists.txt b/src/mnemonics/CMakeLists.txt new file mode 100644 index 000000000..66ef4f3f1 --- /dev/null +++ b/src/mnemonics/CMakeLists.txt @@ -0,0 +1,52 @@ +# Copyright (c) 2014, The Monero Project +# +# All rights reserved. +# +# 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. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. + +set(mnemonics_sources + electrum-words.cpp) + +set(mnemonics_headers) + +set(mnemonics_private_headers + electrum-words.h + english.h + japanese.h + language_base.h + old_english.h + portuguese.h + singleton.h + spanish.h) + +bitmonero_private_headers(mnemonics + ${mnemonics_private_headers}) +bitmonero_add_library(mnemonics + ${mnemonics_sources} + ${mnemonics_headers} + ${mnemonics_private_headers}) +target_link_libraries(mnemonics + LINK_PRIVATE + ${Boost_SYSTEM_LIBRARY}) diff --git a/src/rpc/CMakeLists.txt b/src/rpc/CMakeLists.txt new file mode 100644 index 000000000..5417a0ec1 --- /dev/null +++ b/src/rpc/CMakeLists.txt @@ -0,0 +1,54 @@ +# Copyright (c) 2014, The Monero Project +# +# All rights reserved. +# +# 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. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. + +set(rpc_sources + core_rpc_server.cpp) + +set(rpc_headers) + +set(rpc_private_headers + core_rpc_server.h + core_rpc_server_commands_defs.h + core_rpc_server_error_codes.h) + +bitmonero_private_headers(rpc + ${rpc_private_headers}) +bitmonero_add_library(rpc + ${rpc_sources} + ${rpc_headers} + ${rpc_private_headers}) +target_link_libraries(rpc + LINK_PRIVATE + cryptonote_core + ${Boost_CHRONO_LIBRARY} + ${Boost_REGEX_LIBRARY} + ${Boost_SYSTEM_LIBRARY} + ${Boost_THREAD_LIBRARY} + ${EXTRA_LIBRARIES}) +add_dependencies(rpc + version) diff --git a/src/simplewallet/CMakeLists.txt b/src/simplewallet/CMakeLists.txt new file mode 100644 index 000000000..14f877907 --- /dev/null +++ b/src/simplewallet/CMakeLists.txt @@ -0,0 +1,58 @@ +# Copyright (c) 2014, The Monero Project +# +# All rights reserved. +# +# 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. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. + +set(simplewallet_sources + simplewallet.cpp + password_container.cpp) + +set(simplewallet_headers) + +set(simplewallet_private_headers + simplewallet.h + password_container.h) + +bitmonero_private_headers(simplewallet + ${simplewallet_private_headers}) +bitmonero_add_executable(simplewallet + ${simplewallet_sources} + ${simplewallet_headers} + ${simplewallet_private_headers}) +target_link_libraries(simplewallet + LINK_PRIVATE + wallet + rpc + cryptonote_core + crypto + common + mnemonics + ${UNBOUND_LIBRARY} + ${UPNP_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT} + ${EXTRA_LIBRARIES}) +add_dependencies(simplewallet + version) diff --git a/src/version.cmake b/src/version.cmake index 2f3aa0b25..0baee19fd 100644 --- a/src/version.cmake +++ b/src/version.cmake @@ -68,7 +68,7 @@ else() message(STATUS "The most recent tag was at ${TAGGEDCOMMIT}") # Check if we're building that tagged commit or a different one - if(${COMMIT} MATCHES ${TAGGEDCOMMIT}) + if(COMMIT MATCHES TAGGEDCOMMIT) message(STATUS "You are building a tagged release") set(VERSIONTAG "release") else() diff --git a/src/wallet/CMakeLists.txt b/src/wallet/CMakeLists.txt new file mode 100644 index 000000000..af3ec0fb8 --- /dev/null +++ b/src/wallet/CMakeLists.txt @@ -0,0 +1,56 @@ +# Copyright (c) 2014, The Monero Project +# +# All rights reserved. +# +# 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. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. + +set(wallet_sources + wallet2.cpp + wallet_rpc_server.cpp) + +set(wallet_headers) + +set(wallet_private_headers + wallet2.h + wallet_errors.h + wallet_rpc_server.h + wallet_rpc_server_commands_defs.h + wallet_rpc_server_error_codes.h) + +bitmonero_private_headers(wallet + ${wallet_private_headers}) +bitmonero_add_library(wallet + ${wallet_sources} + ${wallet_headers} + ${wallet_private_headers}) +target_link_libraries(wallet + LINK_PUBLIC + cryptonote_core + mnemonics + LINK_PRIVATE + ${Boost_SERIALIZATION_LIBRARY} + ${Boost_SYSTEM_LIBRARY} + ${Boost_THREAD_LIBRARY} + ${EXTRA_LIBRARIES}) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 533bf8c58..ae20b8754 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -28,64 +28,62 @@ # # Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers -add_definitions(-DSTATICLIB) -# miniupnp changed their static define -add_definitions(-DMINIUPNP_STATICLIB) +if (WIN32 AND STATIC) + add_definitions(-DSTATICLIB) + # miniupnp changed their static define + add_definitions(-DMINIUPNP_STATICLIB) +endif () -add_subdirectory(gtest) -include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR}) +find_package(GTest) -file(GLOB_RECURSE CORE_TESTS core_tests/*) -file(GLOB_RECURSE CRYPTO_TESTS crypto/*) -file(GLOB_RECURSE FUNC_TESTS functional_tests/*) -file(GLOB_RECURSE PERFORMANCE_TESTS performance_tests/*) -file(GLOB_RECURSE CORE_PROXY core_proxy/*) -file(GLOB_RECURSE UNIT_TESTS unit_tests/*) +if (GTest_FOUND) + include_directories(SYSTEM ${GTEST_INCLUDE_DIRS}) +else () + add_subdirectory(gtest) + include_directories(SYSTEM "${gtest_SOURCE_DIR}/include" "${gtest_SOURCE_DIR}") -source_group(core_tests FILES ${CORE_TESTS}) -source_group(crypto_tests FILES ${CRYPTO_TESTS}) -source_group(functional_tests FILES ${FUNC_TESTS}) -source_group(performance_tests FILES ${PERFORMANCE_TESTS}) -source_group(core_proxy FILES ${CORE_PROXY}) -source_group(unit_tests FILES ${UNIT_TESTS}) + # Emulate the FindGTest module's variable. + set(GTEST_MAIN_LIBRARIES gtest_main) + + # Ignore some warnings when building gtest binaries. + if(NOT MSVC) + set_property(TARGET gtest gtest_main + APPEND_STRING + PROPERTY + COMPILE_FLAGS " -Wno-undef -Wno-sign-compare") + endif() +endif () + +add_subdirectory(core_tests) +add_subdirectory(crypto) +add_subdirectory(functional_tests) +add_subdirectory(performance_tests) +add_subdirectory(core_proxy) +add_subdirectory(unit_tests) +add_subdirectory(difficulty) +add_subdirectory(hash) +add_subdirectory(net_load_tests) # add_subdirectory(daemon_tests) -add_executable(coretests ${CORE_TESTS}) -add_executable(crypto-tests ${CRYPTO_TESTS}) -add_executable(difficulty-tests difficulty/difficulty.cpp) -add_executable(hash-tests hash/main.cpp) -add_executable(hash-target-tests hash-target.cpp) -add_executable(functional_tests ${FUNC_TESTS}) -add_executable(performance_tests ${PERFORMANCE_TESTS}) -add_executable(core_proxy ${CORE_PROXY}) -add_executable(unit_tests ${UNIT_TESTS}) -add_executable(net_load_tests_clt net_load_tests/clt.cpp) -add_executable(net_load_tests_srv net_load_tests/srv.cpp) +set(hash_targets_sources + hash-target.cpp) -target_link_libraries(core_proxy cryptonote_core common crypto ${UNBOUND_LIBRARY} ${UPNP_LIBRARIES} ${Boost_LIBRARIES} ${EXTRA_LIBRARIES}) -target_link_libraries(coretests cryptonote_core common crypto ${UNBOUND_LIBRARY} ${Boost_LIBRARIES} ${EXTRA_LIBRARIES}) -target_link_libraries(difficulty-tests cryptonote_core) -target_link_libraries(functional_tests cryptonote_core wallet common crypto ${UNBOUND_LIBRARY} ${Boost_LIBRARIES} ${EXTRA_LIBRARIES}) -target_link_libraries(hash-tests crypto) -target_link_libraries(hash-target-tests crypto cryptonote_core) -target_link_libraries(performance_tests cryptonote_core common crypto ${UNBOUND_LIBRARY} ${Boost_LIBRARIES} ${EXTRA_LIBRARIES}) -target_link_libraries(unit_tests gtest_main rpc cryptonote_core wallet crypto common ${UNBOUND_LIBRARY} ${Boost_LIBRARIES} ${EXTRA_LIBRARIES}) -target_link_libraries(net_load_tests_clt cryptonote_core common crypto gtest_main ${UNBOUND_LIBRARY} ${Boost_LIBRARIES} ${EXTRA_LIBRARIES}) -target_link_libraries(net_load_tests_srv cryptonote_core common crypto gtest_main ${UNBOUND_LIBRARY} ${Boost_LIBRARIES} ${EXTRA_LIBRARIES}) +set(hash_targets_headers) -if(NOT MSVC) - set_property(TARGET gtest gtest_main unit_tests net_load_tests_clt net_load_tests_srv APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-undef -Wno-sign-compare") -endif() +add_executable(hash-target-tests + ${hash_targets_sources} + ${hash_targets_headers}) +target_link_libraries(hash-target-tests + LINK_PRIVATE + cryptonote_core) +set_property(TARGET hash-target-tests + PROPERTY + FOLDER "tests") -add_custom_target(tests DEPENDS coretests difficulty hash performance_tests core_proxy unit_tests) -set_property(TARGET coretests crypto-tests functional_tests difficulty-tests gtest gtest_main hash-tests hash-target-tests performance_tests core_proxy unit_tests tests net_load_tests_clt net_load_tests_srv PROPERTY FOLDER "tests") +add_test( + NAME hash-target + COMMAND hash-target-tests) -add_test(coretests coretests --generate_and_play_test_data) -add_test(crypto crypto-tests ${CMAKE_CURRENT_SOURCE_DIR}/crypto/tests.txt) -add_test(difficulty difficulty-tests ${CMAKE_CURRENT_SOURCE_DIR}/difficulty/data.txt) -foreach(hash IN ITEMS fast slow tree extra-blake extra-groestl extra-jh extra-skein) - add_test(hash-${hash} hash-tests ${hash} ${CMAKE_CURRENT_SOURCE_DIR}/hash/tests-${hash}.txt) -endforeach(hash) -add_test(hash-target hash-target-tests) -add_test(unit_tests unit_tests) +add_custom_target(tests DEPENDS coretests difficulty hash performance_tests core_proxy unit_tests) +set_property(TARGET gtest gtest_main hash-target-tests tests PROPERTY FOLDER "tests") diff --git a/tests/core_proxy/CMakeLists.txt b/tests/core_proxy/CMakeLists.txt new file mode 100644 index 000000000..ab6f7d043 --- /dev/null +++ b/tests/core_proxy/CMakeLists.txt @@ -0,0 +1,50 @@ +# Copyright (c) 2014, The Monero Project +# +# All rights reserved. +# +# 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. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. + +set(core_proxy_sources + core_proxy.cpp) + +set(core_proxy_headers + core_proxy.h) + +add_executable(core_proxy + ${core_proxy_sources} + ${core_proxy_headers}) +target_link_libraries(core_proxy + LINK_PRIVATE + cryptonote_core + ${UPNP_LIBRARIES} + ${Boost_CHRONO_LIBRARY} + ${Boost_FILESYSTEM_LIBRARY} + ${Boost_SYSTEM_LIBRARY} + ${Boost_THREAD_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT} + ${EXPAT_LIBRARIES}) +set_property(TARGET core_proxy + PROPERTY + FOLDER "tests") diff --git a/tests/core_tests/CMakeLists.txt b/tests/core_tests/CMakeLists.txt new file mode 100644 index 000000000..72c079554 --- /dev/null +++ b/tests/core_tests/CMakeLists.txt @@ -0,0 +1,74 @@ +# Copyright (c) 2014, The Monero Project +# +# All rights reserved. +# +# 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. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. + +set(core_tests_sources + block_reward.cpp + block_validation.cpp + chain_split_1.cpp + chain_switch_1.cpp + chaingen.cpp + chaingen001.cpp + chaingen_main.cpp + double_spend.cpp + integer_overflow.cpp + ring_signature_1.cpp + transaction_tests.cpp + tx_validation.cpp) + +set(core_tests_headers + block_reward.h + block_validation.h + chain_split_1.h + chain_switch_1.h + chaingen.h + chaingen_tests_list.h + double_spend.h + double_spend.inl + integer_overflow.h + ring_signature_1.h + transaction_tests.h + tx_validation.h) + +add_executable(coretests + ${core_tests_sources} + ${core_tests_headers}) +target_link_libraries(coretests + LINK_PRIVATE + cryptonote_core + ${Boost_FILESYSTEM_LIBRARY} + ${Boost_SYSTEM_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT} + ${EXPAT_LIBRARIES} + ${EXTRA_LIBRARIES}) +set_property(TARGET coretests + PROPERTY + FOLDER "tests") + +add_test( + NAME coretests + COMMAND coretests --generate_and_play_test_data) diff --git a/tests/crypto/CMakeLists.txt b/tests/crypto/CMakeLists.txt new file mode 100644 index 000000000..83982eda1 --- /dev/null +++ b/tests/crypto/CMakeLists.txt @@ -0,0 +1,50 @@ +# Copyright (c) 2014, The Monero Project +# +# All rights reserved. +# +# 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. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. + +set(crypto_sources + crypto-ops-data.c + crypto-ops.c + crypto.cpp + hash.c + main.cpp + random.c) + +set(crypto_headers + crypto-tests.h) + +add_executable(crypto-tests + ${crypto_sources} + ${crypto_headers}) +target_link_libraries(crypto-tests) +set_property(TARGET crypto-tests + PROPERTY + FOLDER "tests") + +add_test( + NAME crypto + COMMAND crypto-tests "${CMAKE_CURRENT_SOURCE_DIR}/tests.txt") diff --git a/tests/daemon_tests/CMakeLists.txt b/tests/daemon_tests/CMakeLists.txt index 68ca3a87e..b7a93481c 100644 --- a/tests/daemon_tests/CMakeLists.txt +++ b/tests/daemon_tests/CMakeLists.txt @@ -1,5 +1,51 @@ -add_executable(transfers transfers.cpp) -target_link_libraries(transfers useragent rpc cryptonote_core crypto common epee gtest_main ${Boost_LIBRARIES}) +# Copyright (c) 2014, The Monero Project +# +# All rights reserved. +# +# 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. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. -file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test_transfers) -add_custom_target(test_transfers COMMAND transfers WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test_transfers) +set(transfers_sources + transfers.cpp) + +set(transfers_headers) + +add_executable(transfers + ${transfers_sources} + ${transfers_headers}) +target_link_libraries(transfers + LINK_PRIVATE + useragent + rpc + cryptonote_core + crypto + common + epee + ${GTEST_MAIN_LIBRARIES} + ${Boost_LIBRARIES}) + +file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/test_transfers") +add_custom_target(test_transfers + COMMAND transfers + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/test_transfers") diff --git a/tests/difficulty/CMakeLists.txt b/tests/difficulty/CMakeLists.txt new file mode 100644 index 000000000..20600a15a --- /dev/null +++ b/tests/difficulty/CMakeLists.txt @@ -0,0 +1,46 @@ +# Copyright (c) 2014, The Monero Project +# +# All rights reserved. +# +# 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. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. + +set(difficulty_sources + difficulty.cpp) + +set(difficulty_headers) + +add_executable(difficulty-tests + ${difficulty_sources} + ${difficulty_headers}) +target_link_libraries(difficulty-tests + LINK_PRIVATE + cryptonote_core) +set_property(TARGET difficulty-tests + PROPERTY + FOLDER "tests") + +add_test( + NAME difficulty + COMMAND difficulty-tests "${CMAKE_CURRENT_SOURCE_DIR}/data.txt") diff --git a/tests/functional_tests/CMakeLists.txt b/tests/functional_tests/CMakeLists.txt new file mode 100644 index 000000000..71b7c6e01 --- /dev/null +++ b/tests/functional_tests/CMakeLists.txt @@ -0,0 +1,53 @@ +# Copyright (c) 2014, The Monero Project +# +# All rights reserved. +# +# 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. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. + +set(functional_tests_sources + main.cpp + transactions_flow_test.cpp + transactions_generation_from_blockchain.cpp) + +set(functional_tests_headers + transactions_flow_test.h + transactions_generation_from_blockchain.h) + +add_executable(functional_tests + ${functional_tests_sources} + ${functional_tests_headers}) +target_link_libraries(functional_tests + LINK_PRIVATE + cryptonote_core + wallet + common + crypto + ${UNBOUND_LIBRARY} + ${Boost_REGEX_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT} + ${EXTRA_LIBRARIES}) +set_property(TARGET functional_tests + PROPERTY + FOLDER "tests") diff --git a/tests/hash/CMakeLists.txt b/tests/hash/CMakeLists.txt new file mode 100644 index 000000000..2f441d623 --- /dev/null +++ b/tests/hash/CMakeLists.txt @@ -0,0 +1,48 @@ +# Copyright (c) 2014, The Monero Project +# +# All rights reserved. +# +# 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. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. + +set(hash_sources + main.cpp) + +set(hash_headers) + +add_executable(hash-tests + ${hash_sources} + ${hash_headers}) +target_link_libraries(hash-tests + LINK_PRIVATE + crypto) +set_property(TARGET hash-tests + PROPERTY + FOLDER "tests") + +foreach (hash IN ITEMS fast slow tree extra-blake extra-groestl extra-jh extra-skein) + add_test( + NAME "hash-${hash}" + COMMAND hash-tests "${hash}" "${CMAKE_CURRENT_SOURCE_DIR}/tests-${hash}.txt") +endforeach () diff --git a/tests/net_load_tests/CMakeLists.txt b/tests/net_load_tests/CMakeLists.txt new file mode 100644 index 000000000..114d0e680 --- /dev/null +++ b/tests/net_load_tests/CMakeLists.txt @@ -0,0 +1,74 @@ +# Copyright (c) 2014, The Monero Project +# +# All rights reserved. +# +# 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. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. + +set(clt_sources + clt.cpp) + +set(clt_headers + net_load_tests.h) + +add_executable(net_load_tests_clt + ${clt_sources} + ${clt_headers}) +target_link_libraries(net_load_tests_clt + LINK_PRIVATE + ${GTEST_MAIN_LIBRARIES} + ${Boost_CHRONO_LIBRARY} + ${Boost_DATE_TIME_LIBRARY} + ${Boost_FILESYSTEM_LIBRARY} + ${Boost_SYSTEM_LIBRARY} + ${Boost_THREAD_LIBRARY} + ${EXTRA_LIBRARIES}) + +set(srv_sources + srv.cpp) + +set(srv_headers + net_load_tests.h) + +add_executable(net_load_tests_srv + ${srv_sources} + ${srv_headers}) +target_link_libraries(net_load_tests_srv + LINK_PRIVATE + ${GTEST_MAIN_LIBRARIES} + ${Boost_CHRONO_LIBRARY} + ${Boost_DATE_TIME_LIBRARY} + ${Boost_FILESYSTEM_LIBRARY} + ${Boost_SYSTEM_LIBRARY} + ${Boost_THREAD_LIBRARY} + ${EXTRA_LIBRARIES}) + +set_property(TARGET net_load_tests_clt net_load_tests_srv + PROPERTY + FOLDER "tests") +if(NOT MSVC) + set_property(TARGET net_load_tests_clt net_load_tests_srv APPEND_STRING + PROPERTY + COMPILE_FLAGS " -Wno-undef -Wno-sign-compare") +endif() diff --git a/tests/performance_tests/CMakeLists.txt b/tests/performance_tests/CMakeLists.txt new file mode 100644 index 000000000..ed4d3d4b6 --- /dev/null +++ b/tests/performance_tests/CMakeLists.txt @@ -0,0 +1,61 @@ +# Copyright (c) 2014, The Monero Project +# +# All rights reserved. +# +# 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. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. + +set(performance_tests_sources + main.cpp) + +set(performance_tests_headers + check_ring_signature.h + cn_slow_hash.h + construct_tx.h + derive_public_key.h + derive_secret_key.h + generate_key_derivation.h + generate_key_image.h + generate_key_image_helper.h + is_out_to_acc.h + multi_tx_test_base.h + performance_tests.h + performance_utils.h + single_tx_test_base.h) + +add_executable(performance_tests + ${performance_tests_sources} + ${performance_tests_headers}) +target_link_libraries(performance_tests + LINK_PRIVATE + cryptonote_core + common + crypto + ${UNBOUND_LIBRARY} + ${Boost_CHRONO_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT} + ${EXTRA_LIBRARIES}) +set_property(TARGET performance_tests + PROPERTY + FOLDER "tests") diff --git a/tests/unit_tests/CMakeLists.txt b/tests/unit_tests/CMakeLists.txt new file mode 100644 index 000000000..251f6b66e --- /dev/null +++ b/tests/unit_tests/CMakeLists.txt @@ -0,0 +1,80 @@ +# Copyright (c) 2014, The Monero Project +# +# All rights reserved. +# +# 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. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. + +set(unit_tests_sources + address_from_url.cpp + base58.cpp + block_reward.cpp + chacha8.cpp + checkpoints.cpp + decompose_amount_into_digits.cpp + dns_resolver.cpp + epee_boosted_tcp_server.cpp + epee_levin_protocol_handler_async.cpp + get_xtype_from_string.cpp + main.cpp + mnemonics.cpp + mul_div.cpp + parse_amount.cpp + serialization.cpp + slow_memmem.cpp + test_format_utils.cpp + test_peerlist.cpp + test_protocol_pack.cpp) + +set(unit_tests_headers + unit_tests_utils.h) + +add_executable(unit_tests + ${unit_tests_sources} + ${unit_tests_headers}) +target_link_libraries(unit_tests + LINK_PRIVATE + cryptonote_core + rpc + wallet + ${GTEST_MAIN_LIBRARIES} + ${Boost_CHRONO_LIBRARY} + ${Boost_REGEX_LIBRARY} + ${Boost_SYSTEM_LIBRARY} + ${Boost_THREAD_LIBRARY} + ${EXTRA_LIBRARIES}) +set_property(TARGET unit_tests + PROPERTY + FOLDER "tests") + +if (NOT MSVC) + set_property(TARGET unit_tests + APPEND_STRING + PROPERTY + COMPILE_FLAGS " -Wno-undef -Wno-sign-compare") +endif () + +add_test( + NAME unit_tests + COMMAND unit_tests) diff --git a/version.cmake b/version.cmake new file mode 100644 index 000000000..80f1c40b8 --- /dev/null +++ b/version.cmake @@ -0,0 +1,33 @@ +function (write_static_version_header hash) + set(VERSIONTAG "${hash}") + configure_file("src/version.h.in" "version/version.h") + add_custom_target(version ALL) +endfunction () + +file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/version") +find_package(Git QUIET) +if ("$Format:$" STREQUAL "") + # We're in a tarball; use hard-coded variables. + write_static_version_header("release") +elseif (GIT_FOUND OR Git_FOUND) + message(STATUS "Found Git: ${GIT_EXECUTABLE}") + set(extra_output) + if (CMAKE_GENERATOR MATCHES "Ninja") + # Ninja will not rerun the command every time if the file doesn't change, + # so inject this bogus output so that it always runs. + set(extra_output "${CMAKE_SOURCE_DIR}/.force-git-version-check") + endif () + add_custom_command( + OUTPUT "${CMAKE_BINARY_DIR}/version/version.h" + ${extra_output} + COMMAND "${CMAKE_COMMAND}" + "-D" "GIT=${GIT_EXECUTABLE}" + "-D" "TO=${CMAKE_BINARY_DIR}/version/version.h" + "-P" "src/version.cmake" + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}") + add_custom_target(version ALL + DEPENDS "${CMAKE_BINARY_DIR}/version/version.h") +else() + message(STATUS "WARNING: Git was not found!") + write_static_version_header("unknown") +endif () |