aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRiccardo Spagni <ric@spagni.net>2014-11-25 21:48:54 +0200
committerRiccardo Spagni <ric@spagni.net>2014-11-25 21:49:00 +0200
commitab7c6c07e71c025a978948760159f823cc48fe37 (patch)
tree076a6ae171a256e68474d3617abbd3715fa579fc
parentMerge pull request #184 (diff)
parentcmake: work around a bug with implicit link directories (diff)
downloadmonero-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)
-rw-r--r--.gitattributes2
-rw-r--r--CMakeLists.txt107
-rw-r--r--cmake/FindMiniupnpc.cmake4
-rw-r--r--[-rwxr-xr-x]external/CMakeLists.txt118
-rw-r--r--external/miniupnpc/CMakeLists.txt101
-rw-r--r--external/unbound/CMakeLists.txt201
-rw-r--r--external/unbound/config.h.cmake.in1034
-rw-r--r--external/unbound/configure_checks.cmake218
-rw-r--r--src/CMakeLists.txt117
-rw-r--r--src/common/CMakeLists.txt64
-rw-r--r--src/connectivity_tool/CMakeLists.txt45
-rw-r--r--src/crypto/CMakeLists.txt76
-rw-r--r--src/cryptonote_core/CMakeLists.txt80
-rw-r--r--src/daemon/CMakeLists.txt78
-rw-r--r--src/miner/CMakeLists.txt55
-rw-r--r--src/mnemonics/CMakeLists.txt52
-rw-r--r--src/rpc/CMakeLists.txt54
-rw-r--r--src/simplewallet/CMakeLists.txt58
-rw-r--r--src/version.cmake2
-rw-r--r--src/wallet/CMakeLists.txt56
-rw-r--r--tests/CMakeLists.txt100
-rw-r--r--tests/core_proxy/CMakeLists.txt50
-rw-r--r--tests/core_tests/CMakeLists.txt74
-rw-r--r--tests/crypto/CMakeLists.txt50
-rw-r--r--tests/daemon_tests/CMakeLists.txt54
-rw-r--r--tests/difficulty/CMakeLists.txt46
-rw-r--r--tests/functional_tests/CMakeLists.txt53
-rw-r--r--tests/hash/CMakeLists.txt48
-rw-r--r--tests/net_load_tests/CMakeLists.txt74
-rw-r--r--tests/performance_tests/CMakeLists.txt61
-rw-r--r--tests/unit_tests/CMakeLists.txt80
-rw-r--r--version.cmake33
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 ()