From 89cff7bddc6f76ae7382e92569f9a902b262cc5f Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 21 Oct 2014 11:13:59 -0400 Subject: [PATCH 01/36] cmake: put each library into its own directory This cleans up the CMake code and shows patterns more easily (to be refactored in the next commit). --- src/CMakeLists.txt | 61 ++++--------------- src/common/CMakeLists.txt | 64 ++++++++++++++++++++ src/connectivity_tool/CMakeLists.txt | 62 +++++++++++++++++++ src/crypto/CMakeLists.txt | 79 ++++++++++++++++++++++++ src/cryptonote_core/CMakeLists.txt | 83 ++++++++++++++++++++++++++ src/daemon/CMakeLists.txt | 89 ++++++++++++++++++++++++++++ src/miner/CMakeLists.txt | 66 +++++++++++++++++++++ src/mnemonics/CMakeLists.txt | 52 ++++++++++++++++ src/rpc/CMakeLists.txt | 57 ++++++++++++++++++ src/simplewallet/CMakeLists.txt | 70 ++++++++++++++++++++++ src/wallet/CMakeLists.txt | 59 ++++++++++++++++++ 11 files changed, 691 insertions(+), 51 deletions(-) create mode 100644 src/common/CMakeLists.txt create mode 100644 src/connectivity_tool/CMakeLists.txt create mode 100644 src/crypto/CMakeLists.txt create mode 100644 src/cryptonote_core/CMakeLists.txt create mode 100644 src/daemon/CMakeLists.txt create mode 100644 src/miner/CMakeLists.txt create mode 100644 src/mnemonics/CMakeLists.txt create mode 100644 src/rpc/CMakeLists.txt create mode 100644 src/simplewallet/CMakeLists.txt create mode 100644 src/wallet/CMakeLists.txt diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index aec615eb..790b4459 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -32,55 +32,14 @@ add_definitions(-DSTATICLIB) # miniupnp changed their static define add_definitions(-DMINIUPNP_STATICLIB) -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/*) +add_subdirectory(common) +add_subdirectory(crypto) +add_subdirectory(cryptonote_core) +add_subdirectory(mnemonics) +add_subdirectory(rpc) +add_subdirectory(wallet) -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}) - -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) - -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_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 00000000..347bee05 --- /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 + 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) + +source_group(common + FILES + ${common_sources} + ${common_headers}) + +add_library(common + ${common_sources} + ${common_headers}) +target_link_libraries(common + PRIVATE + crypto + ${UNBOUND_LIBRARY} + ${Boost_DATE_TIME_LIBRARY} + ${Boost_FILESYSTEM_LIBRARY} + ${Boost_SYSTEM_LIBRARY} + ${EXTRA_LIBRARIES}) +set_property(TARGET common + PROPERTY + FOLDER "libs") diff --git a/src/connectivity_tool/CMakeLists.txt b/src/connectivity_tool/CMakeLists.txt new file mode 100644 index 00000000..150815a5 --- /dev/null +++ b/src/connectivity_tool/CMakeLists.txt @@ -0,0 +1,62 @@ +# 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_headers) + +source_group(connectivity-tool + FILES + ${connectivity_tool_sources} + ${connectivity_tool_headers}) + +add_executable(connectivity_tool + ${connectivity_tool_sources} + ${connectivity_tool_headers}) +target_link_libraries(connectivity_tool + PRIVATE + cryptonote_core + crypto + common + ${CMAKE_THREAD_LIBS_INIT} + ${Boost_PROGRAM_OPTIONS_LIBRARY} + ${Boost_REGEX_LIBRARY} + ${Boost_SYSTEM_LIBRARY}) +set_property(TARGET connectivity_tool + PROPERTY + FOLDER "prog") + +if (STATIC) + set_property(TARGET connectivity_tool + PROPERTY + LINK_SEARCH_START_STATIC 1) + set_property(TARGET connectivity_tool + PROPERTY + LINK_SEARCH_END_STATIC 1) +endif () diff --git a/src/crypto/CMakeLists.txt b/src/crypto/CMakeLists.txt new file mode 100644 index 00000000..d21551d1 --- /dev/null +++ b/src/crypto/CMakeLists.txt @@ -0,0 +1,79 @@ +# 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 + 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) + +source_group(crypto + FILES + ${crypto_sources} + ${crypto_headers}) + +add_library(crypto + ${crypto_sources} + ${crypto_headers}) +set_property(TARGET crypto + PROPERTY + FOLDER "libs") diff --git a/src/cryptonote_core/CMakeLists.txt b/src/cryptonote_core/CMakeLists.txt new file mode 100644 index 00000000..dcca6e54 --- /dev/null +++ b/src/cryptonote_core/CMakeLists.txt @@ -0,0 +1,83 @@ +# 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 + 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) + +source_group(cryptonote_core + FILES + ${cryptonote_core_sources} + ${cryptonote_core_headers}) + +add_library(cryptonote_core + ${cryptonote_core_sources} + ${cryptonote_core_headers}) +target_link_libraries(cryptonote_core + PUBLIC + common + crypto + ${Boost_DATE_TIME_LIBRARY} + ${Boost_PROGRAM_OPTIONS_LIBRARY} + ${Boost_SERIALIZATION_LIBRARY} + PRIVATE + ${Boost_FILESYSTEM_LIBRARY} + ${Boost_SYSTEM_LIBRARY} + ${Boost_THREAD_LIBRARY} + ${EXTRA_LIBRARIES}) +set_property(TARGET cryptonote_core + PROPERTY + FOLDER "libs") diff --git a/src/daemon/CMakeLists.txt b/src/daemon/CMakeLists.txt new file mode 100644 index 00000000..6cb5f862 --- /dev/null +++ b/src/daemon/CMakeLists.txt @@ -0,0 +1,89 @@ +# 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 + 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) + +source_group(daemon + FILES + ${daemon_sources} + ${daemon_headers}) + +add_executable(daemon + ${daemon_sources} + ${daemon_headers}) +target_link_libraries(daemon + 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} + ${UPNP_LIBRARIES} + ${EXTRA_LIBRARIES}) +add_dependencies(daemon + version) +set_property(TARGET daemon + PROPERTY + FOLDER "prog") +set_property(TARGET daemon + PROPERTY + OUTPUT_NAME "bitmonerod") + +if (STATIC) + set_property(TARGET daemon + PROPERTY + LINK_SEARCH_START_STATIC 1) + set_property(TARGET daemon + PROPERTY + LINK_SEARCH_END_STATIC 1) +endif () diff --git a/src/miner/CMakeLists.txt b/src/miner/CMakeLists.txt new file mode 100644 index 00000000..551d9e70 --- /dev/null +++ b/src/miner/CMakeLists.txt @@ -0,0 +1,66 @@ +# 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 + simpleminer.h + simpleminer_protocol_defs.h + target_helper.h) + +source_group(simpleminer + FILES + ${simpleminer_sources} + ${simpleminer_headers}) + +add_executable(simpleminer + ${simpleminer_sources} + ${simpleminer_headers}) +target_link_libraries(simpleminer + PRIVATE + cryptonote_core + common + ${Boost_FILESYSTEM_LIBRARY} + ${Boost_PROGRAM_OPTIONS_LIBRARY} + ${Boost_REGEX_LIBRARY} + ${Boost_SYSTEM_LIBRARY} + ${Boost_THREAD_LIBRARY} + ${EXTRA_LIBRARIES}) +set_property(TARGET simpleminer + PROPERTY + FOLDER "prog") + +if (STATIC) + set_property(TARGET simpleminer + PROPERTY + LINK_SEARCH_START_STATIC 1) + set_property(TARGET simpleminer + PROPERTY + LINK_SEARCH_END_STATIC 1) +endif () diff --git a/src/mnemonics/CMakeLists.txt b/src/mnemonics/CMakeLists.txt new file mode 100644 index 00000000..b0dc956e --- /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 + electrum-words.h + english.h + japanese.h + language_base.h + old_english.h + portuguese.h + singleton.h + spanish.h) + +source_group(mnemonics + FILES + ${mnemonics_sources} + ${mnemonics_headers}) + +add_library(mnemonics + ${mnemonics_sources} + ${mnemonics_headers}) +target_link_libraries(mnemonics + PRIVATE + ${Boost_SYSTEM_LIBRARY}) diff --git a/src/rpc/CMakeLists.txt b/src/rpc/CMakeLists.txt new file mode 100644 index 00000000..552655dc --- /dev/null +++ b/src/rpc/CMakeLists.txt @@ -0,0 +1,57 @@ +# 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 + core_rpc_server.h + core_rpc_server_commands_defs.h + core_rpc_server_error_codes.h) + +source_group(rpc + FILES + ${rpc_sources} + ${rpc_headers}) + +add_library(rpc + ${rpc_sources} + ${rpc_headers}) +target_link_libraries(rpc + PRIVATE + cryptonote_core + ${Boost_CHRONO_LIBRARY} + ${Boost_REGEX_LIBRARY} + ${Boost_SYSTEM_LIBRARY} + ${Boost_THREAD_LIBRARY} + ${EXTRA_LIBRARIES}) +add_dependencies(rpc + version) +set_property(TARGET rpc + PROPERTY + FOLDER "libs") diff --git a/src/simplewallet/CMakeLists.txt b/src/simplewallet/CMakeLists.txt new file mode 100644 index 00000000..756b8d75 --- /dev/null +++ b/src/simplewallet/CMakeLists.txt @@ -0,0 +1,70 @@ +# 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 + simplewallet.h + password_container.h) + +source_group(simplewallet + FILES + ${simplewallet_sources} + ${simplewallet_headers}) + +add_executable(simplewallet + ${simplewallet_sources} + ${simplewallet_headers}) +target_link_libraries(simplewallet + PRIVATE + wallet + rpc + cryptonote_core + crypto + common + mnemonics + ${UNBOUND_LIBRARY} + ${UPNP_LIBRARIES} + ${Boost_LIBRARIES} + ${EXTRA_LIBRARIES}) +add_dependencies(simplewallet + version) +set_property(TARGET simplewallet + PROPERTY + FOLDER "prog") + +if (STATIC) + set_property(TARGET simplewallet + PROPERTY + LINK_SEARCH_START_STATIC 1) + set_property(TARGET simplewallet + PROPERTY + LINK_SEARCH_END_STATIC 1) +endif () diff --git a/src/wallet/CMakeLists.txt b/src/wallet/CMakeLists.txt new file mode 100644 index 00000000..7428cc39 --- /dev/null +++ b/src/wallet/CMakeLists.txt @@ -0,0 +1,59 @@ +# 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 + wallet2.h + wallet_errors.h + wallet_rpc_server.h + wallet_rpc_server_commands_defs.h + wallet_rpc_server_error_codes.h) + +source_group(wallet + FILES + ${wallet_sources} + ${wallet_headers}) + +add_library(wallet + ${wallet_sources} + ${wallet_headers}) +target_link_libraries(wallet + PUBLIC + cryptonote_core + mnemonics + PRIVATE + ${Boost_SERIALIZATION_LIBRARY} + ${Boost_SYSTEM_LIBRARY} + ${Boost_THREAD_LIBRARY} + ${EXTRA_LIBRARIES}) +set_property(TARGET wallet + PROPERTY + FOLDER "libs") From c773f465ca7e691b94394d8c7c682c8eb78e5c25 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 21 Oct 2014 11:21:28 -0400 Subject: [PATCH 02/36] cmake: refactor common code with executables --- src/CMakeLists.txt | 24 ++++++++++++++++++++++++ src/connectivity_tool/CMakeLists.txt | 19 +------------------ src/daemon/CMakeLists.txt | 19 +------------------ src/miner/CMakeLists.txt | 19 +------------------ src/simplewallet/CMakeLists.txt | 19 +------------------ 5 files changed, 28 insertions(+), 72 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 790b4459..868bdc2e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -32,6 +32,30 @@ add_definitions(-DSTATICLIB) # miniupnp changed their static define add_definitions(-DMINIUPNP_STATICLIB) +function (bitmonero_add_executable name) + source_group("${name}" + FILES + ${ARGN}) + + add_executable("${name}" + ${ARGN}) + target_link_libraries("${name}" + PRIVATE + ${EXTRA_LIBRARIES}) + set_property(TARGET "${name}" + PROPERTY + FOLDER "prog") + + if (STATIC) + set_property(TARGET "${name}" + PROPERTY + LINK_SEARCH_START_STATIC 1) + set_property(TARGET "${name}" + PROPERTY + LINK_SEARCH_END_STATIC 1) + endif () +endfunction () + add_subdirectory(common) add_subdirectory(crypto) add_subdirectory(cryptonote_core) diff --git a/src/connectivity_tool/CMakeLists.txt b/src/connectivity_tool/CMakeLists.txt index 150815a5..de52b064 100644 --- a/src/connectivity_tool/CMakeLists.txt +++ b/src/connectivity_tool/CMakeLists.txt @@ -31,12 +31,7 @@ set(connectivity_tool_sources set(connectivity_tool_headers) -source_group(connectivity-tool - FILES - ${connectivity_tool_sources} - ${connectivity_tool_headers}) - -add_executable(connectivity_tool +bitmonero_add_executable(connectivity_tool ${connectivity_tool_sources} ${connectivity_tool_headers}) target_link_libraries(connectivity_tool @@ -48,15 +43,3 @@ target_link_libraries(connectivity_tool ${Boost_PROGRAM_OPTIONS_LIBRARY} ${Boost_REGEX_LIBRARY} ${Boost_SYSTEM_LIBRARY}) -set_property(TARGET connectivity_tool - PROPERTY - FOLDER "prog") - -if (STATIC) - set_property(TARGET connectivity_tool - PROPERTY - LINK_SEARCH_START_STATIC 1) - set_property(TARGET connectivity_tool - PROPERTY - LINK_SEARCH_END_STATIC 1) -endif () diff --git a/src/daemon/CMakeLists.txt b/src/daemon/CMakeLists.txt index 6cb5f862..fdf6d697 100644 --- a/src/daemon/CMakeLists.txt +++ b/src/daemon/CMakeLists.txt @@ -48,12 +48,7 @@ set(daemon_headers ../p2p/p2p_protocol_defs.h ../p2p/stdafx.h) -source_group(daemon - FILES - ${daemon_sources} - ${daemon_headers}) - -add_executable(daemon +bitmonero_add_executable(daemon ${daemon_sources} ${daemon_headers}) target_link_libraries(daemon @@ -72,18 +67,6 @@ target_link_libraries(daemon ${EXTRA_LIBRARIES}) add_dependencies(daemon version) -set_property(TARGET daemon - PROPERTY - FOLDER "prog") set_property(TARGET daemon PROPERTY OUTPUT_NAME "bitmonerod") - -if (STATIC) - set_property(TARGET daemon - PROPERTY - LINK_SEARCH_START_STATIC 1) - set_property(TARGET daemon - PROPERTY - LINK_SEARCH_END_STATIC 1) -endif () diff --git a/src/miner/CMakeLists.txt b/src/miner/CMakeLists.txt index 551d9e70..7f866966 100644 --- a/src/miner/CMakeLists.txt +++ b/src/miner/CMakeLists.txt @@ -34,12 +34,7 @@ set(simpleminer_headers simpleminer_protocol_defs.h target_helper.h) -source_group(simpleminer - FILES - ${simpleminer_sources} - ${simpleminer_headers}) - -add_executable(simpleminer +bitmonero_add_executable(simpleminer ${simpleminer_sources} ${simpleminer_headers}) target_link_libraries(simpleminer @@ -52,15 +47,3 @@ target_link_libraries(simpleminer ${Boost_SYSTEM_LIBRARY} ${Boost_THREAD_LIBRARY} ${EXTRA_LIBRARIES}) -set_property(TARGET simpleminer - PROPERTY - FOLDER "prog") - -if (STATIC) - set_property(TARGET simpleminer - PROPERTY - LINK_SEARCH_START_STATIC 1) - set_property(TARGET simpleminer - PROPERTY - LINK_SEARCH_END_STATIC 1) -endif () diff --git a/src/simplewallet/CMakeLists.txt b/src/simplewallet/CMakeLists.txt index 756b8d75..310efc2f 100644 --- a/src/simplewallet/CMakeLists.txt +++ b/src/simplewallet/CMakeLists.txt @@ -34,12 +34,7 @@ set(simplewallet_headers simplewallet.h password_container.h) -source_group(simplewallet - FILES - ${simplewallet_sources} - ${simplewallet_headers}) - -add_executable(simplewallet +bitmonero_add_executable(simplewallet ${simplewallet_sources} ${simplewallet_headers}) target_link_libraries(simplewallet @@ -56,15 +51,3 @@ target_link_libraries(simplewallet ${EXTRA_LIBRARIES}) add_dependencies(simplewallet version) -set_property(TARGET simplewallet - PROPERTY - FOLDER "prog") - -if (STATIC) - set_property(TARGET simplewallet - PROPERTY - LINK_SEARCH_START_STATIC 1) - set_property(TARGET simplewallet - PROPERTY - LINK_SEARCH_END_STATIC 1) -endif () From 55ca7d3b34762d9184090d659189959261bcb9a1 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 21 Oct 2014 11:24:14 -0400 Subject: [PATCH 03/36] cmake: refactor common code with libraries --- src/CMakeLists.txt | 12 ++++++++++++ src/common/CMakeLists.txt | 10 +--------- src/crypto/CMakeLists.txt | 10 +--------- src/cryptonote_core/CMakeLists.txt | 10 +--------- src/mnemonics/CMakeLists.txt | 7 +------ src/rpc/CMakeLists.txt | 10 +--------- src/wallet/CMakeLists.txt | 10 +--------- 7 files changed, 18 insertions(+), 51 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 868bdc2e..3a229ddd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -56,6 +56,18 @@ function (bitmonero_add_executable name) 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) diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index 347bee05..47456afb 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -43,12 +43,7 @@ set(common_headers util.h varint.h) -source_group(common - FILES - ${common_sources} - ${common_headers}) - -add_library(common +bitmonero_add_library(common ${common_sources} ${common_headers}) target_link_libraries(common @@ -59,6 +54,3 @@ target_link_libraries(common ${Boost_FILESYSTEM_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${EXTRA_LIBRARIES}) -set_property(TARGET common - PROPERTY - FOLDER "libs") diff --git a/src/crypto/CMakeLists.txt b/src/crypto/CMakeLists.txt index d21551d1..d13b9c8b 100644 --- a/src/crypto/CMakeLists.txt +++ b/src/crypto/CMakeLists.txt @@ -66,14 +66,6 @@ set(crypto_headers skein.h skein_port.h) -source_group(crypto - FILES - ${crypto_sources} - ${crypto_headers}) - -add_library(crypto +bitmonero_add_library(crypto ${crypto_sources} ${crypto_headers}) -set_property(TARGET crypto - PROPERTY - FOLDER "libs") diff --git a/src/cryptonote_core/CMakeLists.txt b/src/cryptonote_core/CMakeLists.txt index dcca6e54..fd84a75c 100644 --- a/src/cryptonote_core/CMakeLists.txt +++ b/src/cryptonote_core/CMakeLists.txt @@ -58,12 +58,7 @@ set(cryptonote_core_headers tx_pool.h verification_context.h) -source_group(cryptonote_core - FILES - ${cryptonote_core_sources} - ${cryptonote_core_headers}) - -add_library(cryptonote_core +bitmonero_add_library(cryptonote_core ${cryptonote_core_sources} ${cryptonote_core_headers}) target_link_libraries(cryptonote_core @@ -78,6 +73,3 @@ target_link_libraries(cryptonote_core ${Boost_SYSTEM_LIBRARY} ${Boost_THREAD_LIBRARY} ${EXTRA_LIBRARIES}) -set_property(TARGET cryptonote_core - PROPERTY - FOLDER "libs") diff --git a/src/mnemonics/CMakeLists.txt b/src/mnemonics/CMakeLists.txt index b0dc956e..84585653 100644 --- a/src/mnemonics/CMakeLists.txt +++ b/src/mnemonics/CMakeLists.txt @@ -39,12 +39,7 @@ set(mnemonics_headers singleton.h spanish.h) -source_group(mnemonics - FILES - ${mnemonics_sources} - ${mnemonics_headers}) - -add_library(mnemonics +bitmonero_add_library(mnemonics ${mnemonics_sources} ${mnemonics_headers}) target_link_libraries(mnemonics diff --git a/src/rpc/CMakeLists.txt b/src/rpc/CMakeLists.txt index 552655dc..31efe7d4 100644 --- a/src/rpc/CMakeLists.txt +++ b/src/rpc/CMakeLists.txt @@ -34,12 +34,7 @@ set(rpc_headers core_rpc_server_commands_defs.h core_rpc_server_error_codes.h) -source_group(rpc - FILES - ${rpc_sources} - ${rpc_headers}) - -add_library(rpc +bitmonero_add_library(rpc ${rpc_sources} ${rpc_headers}) target_link_libraries(rpc @@ -52,6 +47,3 @@ target_link_libraries(rpc ${EXTRA_LIBRARIES}) add_dependencies(rpc version) -set_property(TARGET rpc - PROPERTY - FOLDER "libs") diff --git a/src/wallet/CMakeLists.txt b/src/wallet/CMakeLists.txt index 7428cc39..d7fae541 100644 --- a/src/wallet/CMakeLists.txt +++ b/src/wallet/CMakeLists.txt @@ -37,12 +37,7 @@ set(wallet_headers wallet_rpc_server_commands_defs.h wallet_rpc_server_error_codes.h) -source_group(wallet - FILES - ${wallet_sources} - ${wallet_headers}) - -add_library(wallet +bitmonero_add_library(wallet ${wallet_sources} ${wallet_headers}) target_link_libraries(wallet @@ -54,6 +49,3 @@ target_link_libraries(wallet ${Boost_SYSTEM_LIBRARY} ${Boost_THREAD_LIBRARY} ${EXTRA_LIBRARIES}) -set_property(TARGET wallet - PROPERTY - FOLDER "libs") From f53f04724c714a40c10e8c0afdca465054fabca8 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 21 Oct 2014 12:38:00 -0400 Subject: [PATCH 04/36] cmake: handle private vs. public headers --- src/CMakeLists.txt | 13 +++++++++++++ src/common/CMakeLists.txt | 12 ++++++++++-- src/connectivity_tool/CMakeLists.txt | 4 ++-- src/crypto/CMakeLists.txt | 9 +++++++-- src/cryptonote_core/CMakeLists.txt | 9 +++++++-- src/daemon/CMakeLists.txt | 9 +++++++-- src/miner/CMakeLists.txt | 9 +++++++-- src/mnemonics/CMakeLists.txt | 9 +++++++-- src/rpc/CMakeLists.txt | 9 +++++++-- src/simplewallet/CMakeLists.txt | 9 +++++++-- src/wallet/CMakeLists.txt | 9 +++++++-- 11 files changed, 81 insertions(+), 20 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3a229ddd..ec773ae0 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -32,6 +32,19 @@ add_definitions(-DSTATICLIB) # miniupnp changed their static define add_definitions(-DMINIUPNP_STATICLIB) +function (bitmonero_private_headers group) + source_group("${group}\\Private" + FILES + ${ARGN}) +endfunction () + +function (bitmonero_install_headers subdir) + install( + FILES ${ARGN} + DESTINATION "include/${subdir}" + COMPONENT development) +endfunction () + function (bitmonero_add_executable name) source_group("${name}" FILES diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index 47456afb..fcc30e19 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -32,7 +32,9 @@ set(common_sources dns_utils.cpp util.cpp) -set(common_headers +set(common_headers) + +set(common_private_headers base58.h boost_serialization_helper.h command_line.h @@ -43,9 +45,12 @@ set(common_headers util.h varint.h) +bitmonero_private_headers(common + ${common_private_headers}) bitmonero_add_library(common ${common_sources} - ${common_headers}) + ${common_headers} + ${common_private_headers}) target_link_libraries(common PRIVATE crypto @@ -54,3 +59,6 @@ target_link_libraries(common ${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 index de52b064..b3a495af 100644 --- a/src/connectivity_tool/CMakeLists.txt +++ b/src/connectivity_tool/CMakeLists.txt @@ -29,11 +29,11 @@ set(connectivity_tool_sources conn_tool.cpp) -set(connectivity_tool_headers) +set(connectivity_tool_private_headers) bitmonero_add_executable(connectivity_tool ${connectivity_tool_sources} - ${connectivity_tool_headers}) + ${connectivity_tool_private_headers}) target_link_libraries(connectivity_tool PRIVATE cryptonote_core diff --git a/src/crypto/CMakeLists.txt b/src/crypto/CMakeLists.txt index d13b9c8b..4afcab9c 100644 --- a/src/crypto/CMakeLists.txt +++ b/src/crypto/CMakeLists.txt @@ -47,7 +47,9 @@ set(crypto_sources slow-hash.c tree-hash.c) -set(crypto_headers +set(crypto_headers) + +set(crypto_private_headers blake256.h chacha8.h crypto-ops.h @@ -66,6 +68,9 @@ set(crypto_headers skein.h skein_port.h) +bitmonero_private_headers(crypto + ${crypto_private_headers}) bitmonero_add_library(crypto ${crypto_sources} - ${crypto_headers}) + ${crypto_headers} + ${crypto_private_headers}) diff --git a/src/cryptonote_core/CMakeLists.txt b/src/cryptonote_core/CMakeLists.txt index fd84a75c..c18b01b5 100644 --- a/src/cryptonote_core/CMakeLists.txt +++ b/src/cryptonote_core/CMakeLists.txt @@ -38,7 +38,9 @@ set(cryptonote_core_sources miner.cpp tx_pool.cpp) -set(cryptonote_core_headers +set(cryptonote_core_headers) + +set(cryptonote_core_private_headers account.h account_boost_serialization.h blockchain_storage.h @@ -58,9 +60,12 @@ set(cryptonote_core_headers 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_headers} + ${cryptonote_core_private_headers}) target_link_libraries(cryptonote_core PUBLIC common diff --git a/src/daemon/CMakeLists.txt b/src/daemon/CMakeLists.txt index fdf6d697..3fbac07e 100644 --- a/src/daemon/CMakeLists.txt +++ b/src/daemon/CMakeLists.txt @@ -29,7 +29,9 @@ set(daemon_sources daemon.cpp) -set(daemon_headers +set(daemon_headers) + +set(daemon_private_headers daemon_commands_handler.h # cryptonote_protocol @@ -48,9 +50,12 @@ set(daemon_headers ../p2p/p2p_protocol_defs.h ../p2p/stdafx.h) +bitmonero_private_headers(daemon + ${daemon_private_headers}) bitmonero_add_executable(daemon ${daemon_sources} - ${daemon_headers}) + ${daemon_headers} + ${daemon_private_headers}) target_link_libraries(daemon PRIVATE rpc diff --git a/src/miner/CMakeLists.txt b/src/miner/CMakeLists.txt index 7f866966..1c26e759 100644 --- a/src/miner/CMakeLists.txt +++ b/src/miner/CMakeLists.txt @@ -29,14 +29,19 @@ set(simpleminer_sources simpleminer.cpp) -set(simpleminer_headers +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_headers} + ${simpleminer_private_headers}) target_link_libraries(simpleminer PRIVATE cryptonote_core diff --git a/src/mnemonics/CMakeLists.txt b/src/mnemonics/CMakeLists.txt index 84585653..4f2c36f4 100644 --- a/src/mnemonics/CMakeLists.txt +++ b/src/mnemonics/CMakeLists.txt @@ -29,7 +29,9 @@ set(mnemonics_sources electrum-words.cpp) -set(mnemonics_headers +set(mnemonics_headers) + +set(mnemonics_private_headers electrum-words.h english.h japanese.h @@ -39,9 +41,12 @@ set(mnemonics_headers singleton.h spanish.h) +bitmonero_private_headers(mnemonics + ${mnemonics_private_headers}) bitmonero_add_library(mnemonics ${mnemonics_sources} - ${mnemonics_headers}) + ${mnemonics_headers} + ${mnemonics_private_headers}) target_link_libraries(mnemonics PRIVATE ${Boost_SYSTEM_LIBRARY}) diff --git a/src/rpc/CMakeLists.txt b/src/rpc/CMakeLists.txt index 31efe7d4..ba71c8e6 100644 --- a/src/rpc/CMakeLists.txt +++ b/src/rpc/CMakeLists.txt @@ -29,14 +29,19 @@ set(rpc_sources core_rpc_server.cpp) -set(rpc_headers +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_headers} + ${rpc_private_headers}) target_link_libraries(rpc PRIVATE cryptonote_core diff --git a/src/simplewallet/CMakeLists.txt b/src/simplewallet/CMakeLists.txt index 310efc2f..682e660d 100644 --- a/src/simplewallet/CMakeLists.txt +++ b/src/simplewallet/CMakeLists.txt @@ -30,13 +30,18 @@ set(simplewallet_sources simplewallet.cpp password_container.cpp) -set(simplewallet_headers +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_headers} + ${simplewallet_private_headers}) target_link_libraries(simplewallet PRIVATE wallet diff --git a/src/wallet/CMakeLists.txt b/src/wallet/CMakeLists.txt index d7fae541..e32d86a5 100644 --- a/src/wallet/CMakeLists.txt +++ b/src/wallet/CMakeLists.txt @@ -30,16 +30,21 @@ set(wallet_sources wallet2.cpp wallet_rpc_server.cpp) -set(wallet_headers +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_headers} + ${wallet_private_headers}) target_link_libraries(wallet PUBLIC cryptonote_core From 7bfcffadb91022e420b32a2d0cfa97a0e9f98b64 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 21 Oct 2014 13:01:56 -0400 Subject: [PATCH 05/36] cmake: put each test executable in its own directory --- tests/CMakeLists.txt | 73 +++++++++-------------- tests/core_proxy/CMakeLists.txt | 50 ++++++++++++++++ tests/core_tests/CMakeLists.txt | 74 ++++++++++++++++++++++++ tests/crypto/CMakeLists.txt | 50 ++++++++++++++++ tests/difficulty/CMakeLists.txt | 46 +++++++++++++++ tests/functional_tests/CMakeLists.txt | 52 +++++++++++++++++ tests/hash/CMakeLists.txt | 48 ++++++++++++++++ tests/net_load_tests/CMakeLists.txt | 74 ++++++++++++++++++++++++ tests/performance_tests/CMakeLists.txt | 60 +++++++++++++++++++ tests/unit_tests/CMakeLists.txt | 80 ++++++++++++++++++++++++++ 10 files changed, 562 insertions(+), 45 deletions(-) create mode 100644 tests/core_proxy/CMakeLists.txt create mode 100644 tests/core_tests/CMakeLists.txt create mode 100644 tests/crypto/CMakeLists.txt create mode 100644 tests/difficulty/CMakeLists.txt create mode 100644 tests/functional_tests/CMakeLists.txt create mode 100644 tests/hash/CMakeLists.txt create mode 100644 tests/net_load_tests/CMakeLists.txt create mode 100644 tests/performance_tests/CMakeLists.txt create mode 100644 tests/unit_tests/CMakeLists.txt diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 533bf8c5..63a213a3 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -35,57 +35,40 @@ add_definitions(-DMINIUPNP_STATICLIB) add_subdirectory(gtest) include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR}) -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/*) - -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}) +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) + +add_executable(hash-target-tests + ${hash_targets_sources} + ${hash_targets_headers}) +target_link_libraries(hash-target-tests + PRIVATE + cryptonote_core) +set_property(TARGET hash-target-tests + PROPERTY + FOLDER "tests") + +add_test( + NAME hash-target + COMMAND hash-target-tests) 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") + set_property(TARGET gtest gtest_main APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-undef -Wno-sign-compare") endif() 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(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) +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 00000000..7186f2c2 --- /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 + 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 00000000..b8f07b3d --- /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 + 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 00000000..83982eda --- /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/difficulty/CMakeLists.txt b/tests/difficulty/CMakeLists.txt new file mode 100644 index 00000000..d4ec5bd8 --- /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 + 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 00000000..f778d326 --- /dev/null +++ b/tests/functional_tests/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(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 + PRIVATE + cryptonote_core + wallet + common + crypto + ${UNBOUND_LIBRARY} + ${Boost_LIBRARIES} + ${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 00000000..4f55552d --- /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 + 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 00000000..fbb0ac59 --- /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 + PRIVATE + gtest_main + ${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 + PRIVATE + gtest_main + ${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 00000000..f842eee7 --- /dev/null +++ b/tests/performance_tests/CMakeLists.txt @@ -0,0 +1,60 @@ +# 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 + PRIVATE + cryptonote_core + common + crypto + ${UNBOUND_LIBRARY} + ${Boost_LIBRARIES} + ${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 00000000..f9ee5919 --- /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 + PRIVATE + cryptonote_core + rpc + wallet + gtest_main + ${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) From fa3ff758624e9c9704a4a541c195e10335debc3c Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 21 Oct 2014 13:27:47 -0400 Subject: [PATCH 06/36] gtest: support an external gtest --- tests/CMakeLists.txt | 25 +++++++++++++++++++------ tests/net_load_tests/CMakeLists.txt | 4 ++-- tests/unit_tests/CMakeLists.txt | 2 +- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 63a213a3..3da9fdb6 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -32,8 +32,25 @@ add_definitions(-DSTATICLIB) # miniupnp changed their static define add_definitions(-DMINIUPNP_STATICLIB) -add_subdirectory(gtest) -include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR}) +find_package(GTest) + +if (GTest_FOUND) + include_directories(SYSTEM ${GTEST_INCLUDE_DIRS}) +else () + add_subdirectory(gtest) + include_directories(SYSTEM "${gtest_SOURCE_DIR}/include" "${gtest_SOURCE_DIR}") + + # 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) @@ -66,9 +83,5 @@ add_test( NAME hash-target COMMAND hash-target-tests) -if(NOT MSVC) - set_property(TARGET gtest gtest_main APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-undef -Wno-sign-compare") -endif() - 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/net_load_tests/CMakeLists.txt b/tests/net_load_tests/CMakeLists.txt index fbb0ac59..8303b50c 100644 --- a/tests/net_load_tests/CMakeLists.txt +++ b/tests/net_load_tests/CMakeLists.txt @@ -37,7 +37,7 @@ add_executable(net_load_tests_clt ${clt_headers}) target_link_libraries(net_load_tests_clt PRIVATE - gtest_main + ${GTEST_MAIN_LIBRARIES} ${Boost_CHRONO_LIBRARY} ${Boost_DATE_TIME_LIBRARY} ${Boost_FILESYSTEM_LIBRARY} @@ -56,7 +56,7 @@ add_executable(net_load_tests_srv ${srv_headers}) target_link_libraries(net_load_tests_srv PRIVATE - gtest_main + ${GTEST_MAIN_LIBRARIES} ${Boost_CHRONO_LIBRARY} ${Boost_DATE_TIME_LIBRARY} ${Boost_FILESYSTEM_LIBRARY} diff --git a/tests/unit_tests/CMakeLists.txt b/tests/unit_tests/CMakeLists.txt index f9ee5919..0a224708 100644 --- a/tests/unit_tests/CMakeLists.txt +++ b/tests/unit_tests/CMakeLists.txt @@ -58,7 +58,7 @@ target_link_libraries(unit_tests cryptonote_core rpc wallet - gtest_main + ${GTEST_MAIN_LIBRARIES} ${Boost_CHRONO_LIBRARY} ${Boost_REGEX_LIBRARY} ${Boost_SYSTEM_LIBRARY} From 8a86ac8439cde9e11d3fb2214fcc5691fbf41bbf Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 21 Oct 2014 13:28:48 -0400 Subject: [PATCH 07/36] daemon_tests: update cmake code It's still not valid, but it's commented out anyways; update to code so it matches the style at least. --- tests/daemon_tests/CMakeLists.txt | 54 ++++++++++++++++++++++++++++--- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/tests/daemon_tests/CMakeLists.txt b/tests/daemon_tests/CMakeLists.txt index 68ca3a87..2b7c82ff 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 + 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") From 9aa48b6c500ba8bf70b219832ce584e54a93e9d9 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 21 Oct 2014 13:31:17 -0400 Subject: [PATCH 08/36] miniupnpc: clear out else/endfoo command arguments --- cmake/FindMiniupnpc.cmake | 4 ++-- external/miniupnpc/CMakeLists.txt | 30 +++++++++++++++--------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/cmake/FindMiniupnpc.cmake b/cmake/FindMiniupnpc.cmake index 0bf331da..97a0280f 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/miniupnpc/CMakeLists.txt b/external/miniupnpc/CMakeLists.txt index 5e4a90bb..da228019 100644 --- a/external/miniupnpc/CMakeLists.txt +++ b/external/miniupnpc/CMakeLists.txt @@ -7,9 +7,9 @@ set (MINIUPNPC_API_VERSION 10) if (NOT CMAKE_BUILD_TYPE) if (WIN32) set (DEFAULT_BUILD_TYPE MinSizeRel) - else (WIN32) + else () set (DEFAULT_BUILD_TYPE RelWithDebInfo) - endif(WIN32) + endif() set (CMAKE_BUILD_TYPE ${DEFAULT_BUILD_TYPE} CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE) @@ -19,21 +19,21 @@ 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) +endif () 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) +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) @@ -46,7 +46,7 @@ if (CMAKE_COMPILER_IS_GNUC) if (NOT CMAKE_SYSTEM_NAME STREQUAL "AmigaOS") set (_PIC -fPIC) - endif (CMAKE_SYSTEM_NAME STREQUAL "AmigaOS") + endif () 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) @@ -59,7 +59,7 @@ if (CMAKE_COMPILER_IS_GNUC) set (CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG" CACHE STRING "Flags used by the C compiler during release builds." FORCE) - endif (NOT CONFIGURED) + endif () endif () configure_file (miniupnpcstrings.h.cmake ${CMAKE_BINARY_DIR}/miniupnpcstrings.h) @@ -82,14 +82,14 @@ set (MINIUPNPC_SOURCES if (NOT WIN32 AND NOT CMAKE_SYSTEM_NAME STREQUAL "AmigaOS") 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) @@ -102,11 +102,11 @@ if (WIN32) # 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) +endif () if (UPNPC_BUILD_STATIC) add_library (upnpc-static STATIC ${MINIUPNPC_SOURCES}) @@ -114,7 +114,7 @@ if (UPNPC_BUILD_STATIC) 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}) @@ -124,7 +124,7 @@ if (UPNPC_BUILD_SHARED) 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) +endif () if (UPNPC_BUILD_TESTS) add_executable (testminixml testminixml.c minixml.c igd_desc_parse.c) @@ -152,7 +152,7 @@ if (UPNPC_BUILD_TESTS) 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} From a87ce0946192ab6ea3668298565a24bf66724691 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 21 Oct 2014 13:33:26 -0400 Subject: [PATCH 09/36] cmake: factor out error messages Instead of using BoldRed and ColourReset everywhere, wrap it up in a function. --- CMakeLists.txt | 21 ++++++++++++++------- external/CMakeLists.txt | 6 +++--- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 78e4b426..f729c421 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,11 +30,18 @@ cmake_minimum_required(VERSION 2.8.6) -if(NOT WIN32) - string(ASCII 27 Esc) - set(ColourReset "${Esc}[m") - set(BoldRed "${Esc}[1;31m") -endif() +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 () + + message(FATAL_ERROR "${BoldRed}${msg}${ColourReset}") +endfunction () set (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") @@ -204,11 +211,11 @@ 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}") + 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}) diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index 83e9e6de..b1fa8b2f 100755 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -89,14 +89,14 @@ IF(!UNBOUND_INCLUDE_DIR OR STATIC) 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}") + die("Could not find the openssl library. Please make sure you have installed openssl or libssl-dev or the equivalent") ELSE() MESSAGE(STATUS "Found openssl libraries") ENDIF() 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}") + die("Could not find the expat library. Please make sure you have installed libexpat or libexpat-dev or the equivalent") ELSE() MESSAGE(STATUS "Found expat libraries") ENDIF() @@ -170,6 +170,6 @@ ELSE() 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}") + 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() From a43f1a88d8018e98d7389c23598e9292a5635305 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 21 Oct 2014 13:38:21 -0400 Subject: [PATCH 10/36] cmake: remove configuration variables CMAKE_BUILD_TYPE is meant for single-config build tools (e.g., make and ninja) while CMAKE_CONFIGURATION_TYPES is meant for multi-config build tools (e.g., Xcode and Visual Studio). They should not be mixed or manually set. --- CMakeLists.txt | 1 - external/miniupnpc/CMakeLists.txt | 11 ----------- 2 files changed, 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f729c421..903648bc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,7 +61,6 @@ message(STATUS "BOOST_IGNORE_SYSTEM_PATHS defaults to ${BOOST_IGNORE_SYSTEM_PATH option(BOOST_IGNORE_SYSTEM_PATHS "Ignore boost system paths for local boost ins tallation" $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) diff --git a/external/miniupnpc/CMakeLists.txt b/external/miniupnpc/CMakeLists.txt index da228019..d0d0c059 100644 --- a/external/miniupnpc/CMakeLists.txt +++ b/external/miniupnpc/CMakeLists.txt @@ -4,17 +4,6 @@ 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 () - set (DEFAULT_BUILD_TYPE RelWithDebInfo) - endif() - 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) From eeffac6839431cec45c8d7e798b6ae42e6a0817c Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 21 Oct 2014 13:41:10 -0400 Subject: [PATCH 11/36] cmake: fix up BOOST_IGNORE_SYSTEM_PATHS The option was set twice when it only needs to be set once. Also fix a bogus dereference and spurious whitespace. --- CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 903648bc..ac5cc395 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,14 +51,13 @@ if (NOT DEFINED ENV{DEVELOPER_LOCAL_TOOLS}) 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) else() 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) enable_testing() From eba180a1c786c4a86ead7e46f6e19febef4dd940 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 21 Oct 2014 13:52:24 -0400 Subject: [PATCH 12/36] cmake: support git info in released tarballs --- .gitattributes | 2 +- CMakeLists.txt | 12 +----------- version.cmake | 23 +++++++++++++++++++++++ 3 files changed, 25 insertions(+), 12 deletions(-) create mode 100644 version.cmake diff --git a/.gitattributes b/.gitattributes index 6afd357c..f75097ec 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 ac5cc395..bdb34719 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -228,17 +228,7 @@ elseif(NOT MSVC) 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/version.cmake b/version.cmake new file mode 100644 index 00000000..4dd6db6d --- /dev/null +++ b/version.cmake @@ -0,0 +1,23 @@ +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}") + add_custom_target(version ALL + COMMAND "${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!") + write_static_version_header("unknown") +endif () From 9ed415ad43d4625ebb92ac1b800e57064e65aebc Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 21 Oct 2014 14:03:54 -0400 Subject: [PATCH 13/36] build: inform the build of what generates version.h Without this, Ninja requires a two-step process because it doesn't know what generates version.h it sees from its depfile support and when it changes in one run, it has already pruned the dependent nodes from its internal graph and requires a second run to catch it. --- version.cmake | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/version.cmake b/version.cmake index 4dd6db6d..80f1c40b 100644 --- a/version.cmake +++ b/version.cmake @@ -11,12 +11,22 @@ if ("$Format:$" STREQUAL "") write_static_version_header("release") elseif (GIT_FOUND OR Git_FOUND) message(STATUS "Found Git: ${GIT_EXECUTABLE}") - add_custom_target(version ALL + 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") From c24d22b44e1c6a0c30c7e85da9e828810141f313 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 21 Oct 2014 14:17:32 -0400 Subject: [PATCH 14/36] cmake: clean up if auto-dereferencing CMake will auto-dereference variable names in if statements, so there's no need to dereference them manually. --- CMakeLists.txt | 6 +++--- src/version.cmake | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bdb34719..35dd132e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -48,7 +48,7 @@ set (CMAKE_MODULE_PATH "${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) +elseif (ENV{DEVELOPER_LOCAL_TOOLS} EQUAL 1) message(STATUS "Found: env DEVELOPER_LOCAL_TOOLS = 1") set(BOOST_IGNORE_SYSTEM_PATHS_DEFAULT ON) else() @@ -130,7 +130,7 @@ 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}") @@ -212,7 +212,7 @@ if(NOT Boost_FOUND) 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)) +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() diff --git a/src/version.cmake b/src/version.cmake index 2f3aa0b2..0baee19f 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() From 799e8b241fc4c049434c825a2a3d4f74d34d0ada Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 21 Oct 2014 14:20:26 -0400 Subject: [PATCH 15/36] cmake: use option() for STATIC --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 35dd132e..52835da8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -90,7 +90,7 @@ 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) From 475fe209a8a18657796b7c694f4bfb298ce2aa95 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 21 Oct 2014 14:24:49 -0400 Subject: [PATCH 16/36] cmake: minor cleanups (indentation and typos) --- CMakeLists.txt | 30 +++++++++++++++--------------- external/CMakeLists.txt | 0 2 files changed, 15 insertions(+), 15 deletions(-) mode change 100755 => 100644 external/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 52835da8..1f57f8ca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,14 +46,14 @@ endfunction () set (CMAKE_MODULE_PATH "${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) + 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) + 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}") @@ -92,13 +92,13 @@ else() endif() 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(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 @@ -175,7 +175,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") @@ -199,7 +199,7 @@ else() endif() if (BOOST_IGNORE_SYSTEM_PATHS) - set(Boost_NO_SYSTEM_PATHS TRUE) + set(Boost_NO_SYSTEM_PATHS TRUE) endif() if(STATIC) diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt old mode 100755 new mode 100644 From e59b5b70783daf9569d7f0999ddaa5a2c8e9be94 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 21 Oct 2014 14:32:22 -0400 Subject: [PATCH 17/36] miniupnpc: clean up build system Changes: - remove amiga and solaris conditionals - remove -fPIC hackery (use POSITION_INDEPENDENT_CODE instead) - remove tests - retab --- external/miniupnpc/CMakeLists.txt | 70 +++---------------------------- 1 file changed, 5 insertions(+), 65 deletions(-) diff --git a/external/miniupnpc/CMakeLists.txt b/external/miniupnpc/CMakeLists.txt index d0d0c059..a278ee68 100644 --- a/external/miniupnpc/CMakeLists.txt +++ b/external/miniupnpc/CMakeLists.txt @@ -6,9 +6,6 @@ set (MINIUPNPC_API_VERSION 10) 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 () option (NO_GETADDRINFO "Define NO_GETADDRINFO" FALSE) mark_as_advanced (NO_GETADDRINFO) @@ -28,29 +25,6 @@ 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 () - - 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 () -endif () - configure_file (miniupnpcstrings.h.cmake ${CMAKE_BINARY_DIR}/miniupnpcstrings.h) include_directories (${CMAKE_BINARY_DIR}) @@ -69,7 +43,7 @@ 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 () @@ -86,19 +60,15 @@ 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 () if (NOT UPNPC_BUILD_STATIC AND NOT UPNPC_BUILD_SHARED) - message (FATAL "Both shared and static libraries are disabled!") + 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) @@ -107,6 +77,7 @@ 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}) @@ -115,42 +86,13 @@ if (UPNPC_BUILD_SHARED) set (UPNPC_LIBRARY_TARGET upnpc-shared) endif () -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 () - - install (TARGETS ${UPNPC_INSTALL_TARGETS} RUNTIME DESTINATION bin LIBRARY DESTINATION lib${LIB_SUFFIX} ARCHIVE DESTINATION lib${LIB_SUFFIX} ) install (FILES - miniupnpc.h + miniupnpc.h miniwget.h upnpcommands.h igd_desc_parse.h @@ -162,6 +104,4 @@ install (FILES DESTINATION include/miniupnpc ) -set (CONFIGURED YES CACHE INTERNAL "") - # vim: ts=2:sw=2 From abbd5c0bdb5541aa8c75beea9e8a119297b6d76f Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 21 Oct 2014 18:39:15 -0400 Subject: [PATCH 18/36] unbound: import cmake build system --- CMakeLists.txt | 1 + external/CMakeLists.txt | 88 +- external/unbound/CMakeLists.txt | 180 ++++ external/unbound/config.h.cmake.in | 1034 +++++++++++++++++++++++ external/unbound/configure_checks.cmake | 208 +++++ 5 files changed, 1429 insertions(+), 82 deletions(-) create mode 100644 external/unbound/CMakeLists.txt create mode 100644 external/unbound/config.h.cmake.in create mode 100644 external/unbound/configure_checks.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 1f57f8ca..d9dff16e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -117,6 +117,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__") diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index b1fa8b2f..eaac66cd 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -78,90 +78,13 @@ 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) - die("Could not find the openssl library. Please make sure you have installed openssl or libssl-dev or the equivalent") - ELSE() - MESSAGE(STATUS "Found openssl libraries") - ENDIF() +IF(NOT UNBOUND_INCLUDE_DIR OR STATIC) + add_subdirectory(unbound) - FIND_PACKAGE(Expat QUIET) - IF(!EXPAT_LIBRARIES) - die("Could not find the expat library. Please make sure you have installed libexpat or libexpat-dev or the equivalent") - 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) + set(UNBOUND_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/unbound/libunbound" PARENT_SCOPE) + set(UNBOUND_LIBRARY "unbound" PARENT_SCOPE) + set(UNBOUND_LIBRARY_DIRS "${LIBEVENT2_LIBRARY_DIRS}" PARENT_SCOPE) ELSE() MESSAGE(STATUS "Found libunbound include (unbound.h) in ${UNBOUND_INCLUDE_DIR}") IF(UNBOUND_LIBRARIES) @@ -169,6 +92,7 @@ ELSE() set(UNBOUND_STATIC false PARENT_SCOPE) set(UNBOUND_INCLUDE ${UNBOUND_INCLUDE_DIR} PARENT_SCOPE) set(UNBOUND_LIBRARY ${UNBOUND_LIBRARIES} PARENT_SCOPE) + 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() diff --git a/external/unbound/CMakeLists.txt b/external/unbound/CMakeLists.txt new file mode 100644 index 00000000..a81e8031 --- /dev/null +++ b/external/unbound/CMakeLists.txt @@ -0,0 +1,180 @@ +cmake_minimum_required(VERSION 2.8.8) + +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 + PRIVATE + ${OPENSSL_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT}) +if (LIBEVENT2_FOUND) + target_link_libraries(unbound + PRIVATE + ${LIBEVENT2_LIBRARIES}) +endif () + +if (WIN32) + target_link_libraries(unbound + PRIVATE + iphlpapi + ws2_32) +endif () diff --git a/external/unbound/config.h.cmake.in b/external/unbound/config.h.cmake.in new file mode 100644 index 00000000..827503b6 --- /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 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 header file. */ +#cmakedefine HAVE_DLFCN_H + +/* Define to 1 if you have the 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 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 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 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 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 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 header file. */ +#cmakedefine HAVE_INTTYPES_H + +/* if the function 'ioctlsocket' is available */ +#cmakedefine HAVE_IOCTLSOCKET + +/* Define to 1 if you have the 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 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 header file. */ +#cmakedefine HAVE_MEMORY_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_NETDB_H + +/* Define to 1 if you have the 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 header file. */ +#cmakedefine HAVE_OPENSSL_CONF_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_OPENSSL_ENGINE_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_OPENSSL_ERR_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_OPENSSL_RAND_H + +/* Define to 1 if you have the 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 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 header file. */ +#cmakedefine HAVE_STDARG_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDBOOL_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDINT_H + +/* Define to 1 if you have the 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 header file. */ +#cmakedefine HAVE_STRINGS_H + +/* Define to 1 if you have the 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 header file. */ +#cmakedefine HAVE_SYSLOG_H + +/* Define to 1 if you have the header file. */ +#cmakedefine01 HAVE_SYS_PARAM_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_RESOURCE_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_SHA2_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_SOCKET_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_SYSCTL_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_UIO_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_WAIT_H + +/* Define to 1 if you have the 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 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 header file. */ +#cmakedefine HAVE_VFORK_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_WINDOWS_H + +/* Using Windows threads */ +#cmakedefine HAVE_WINDOWS_THREADS + +/* Define to 1 if you have the 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 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 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 does not define. */ +#cmakedefine int16_t @int16_t@ + +/* Define to `int' if does not define. */ +#cmakedefine int32_t @int32_t@ + +/* Define to `long long' if does not define. */ +#cmakedefine int64_t @int64_t@ + +/* Define to `signed char' if does not define. */ +#cmakedefine int8_t @int8_t@ + +/* Define if replacement function should be used. */ +#cmakedefine malloc + +/* Define to `long int' if does not define. */ +#cmakedefine off_t + +/* Define to `int' if does not define. */ +#cmakedefine pid_t @pid_t@ + +/* Define to 'int' if not defined */ +#cmakedefine rlim_t @rlim_t@ + +/* Define to `unsigned int' if does not define. */ +#cmakedefine size_t + +/* Define to 'int' if not defined */ +#cmakedefine socklen_t + +/* Define to `int' if does not define. */ +#cmakedefine ssize_t @ssize_t@ + +/* Define to 'unsigned char if not defined */ +#cmakedefine u_char + +/* Define to `int' if doesn't define. */ +#cmakedefine uid_t @uid_t@ + +/* Define to `unsigned short' if does not define. */ +#cmakedefine uint16_t @uint16_t@ + +/* Define to `unsigned int' if does not define. */ +#cmakedefine uint32_t @uint32_t@ + +/* Define to `unsigned long long' if does not define. */ +#cmakedefine uint64_t @uint64_t@ + +/* Define to `unsigned char' if 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 +#include +#ifdef HAVE_UNISTD_H +#include +#endif +#include + +#if STDC_HEADERS +#include +#include +#endif + +#ifdef HAVE_STDARG_H +#include +#endif + +#ifdef HAVE_STDINT_H +#include +#endif + +#include + +#if HAVE_SYS_PARAM_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + +#ifdef HAVE_SYS_TYPES_H +#include +#endif + +#ifdef HAVE_SYS_UIO_H +#include +#endif + +#ifdef HAVE_NETINET_IN_H +#include +#endif + +#ifdef HAVE_ARPA_INET_H +#include +#endif + +#ifdef HAVE_WINSOCK2_H +#include +#endif + +#ifdef HAVE_WS2TCPIP_H +#include +#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 +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 00000000..281bcf97 --- /dev/null +++ b/external/unbound/configure_checks.cmake @@ -0,0 +1,208 @@ +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(getaddrinfo HAVE_GETADDRINFO) +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) + +function (check_type_exists type variable header default) + set(CMAKE_EXTRA_INCLUDE_FILES "${header}") + check_type_size("${type}" "${variable}") + + if (${variable} STREQUAL "") + set("${variable}" "${default}" PARENT_SCOPE) + else () + set("${variable}" "" 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}) From 031e3da72473b4d2c51ce9ff25ede75bd2c61a90 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Wed, 22 Oct 2014 15:17:32 -0400 Subject: [PATCH 19/36] cmake: remove scream-make (all-caps functions) --- external/CMakeLists.txt | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index eaac66cd..97bdd9af 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,22 +78,22 @@ endif() find_package(Unbound) -IF(NOT UNBOUND_INCLUDE_DIR OR STATIC) +if(NOT UNBOUND_INCLUDE_DIR OR STATIC) add_subdirectory(unbound) set(UNBOUND_STATIC true PARENT_SCOPE) set(UNBOUND_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/unbound/libunbound" PARENT_SCOPE) set(UNBOUND_LIBRARY "unbound" PARENT_SCOPE) set(UNBOUND_LIBRARY_DIRS "${LIBEVENT2_LIBRARY_DIRS}" PARENT_SCOPE) -ELSE() - MESSAGE(STATUS "Found libunbound include (unbound.h) in ${UNBOUND_INCLUDE_DIR}") - IF(UNBOUND_LIBRARIES) - MESSAGE(STATUS "Found libunbound shared library") +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) set(UNBOUND_LIBRARY_DIRS "" PARENT_SCOPE) - ELSE() + 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() + endif() +endif() From 0f0efc4af221edca19cdcbba5f80b140c58f855e Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Wed, 22 Oct 2014 15:17:52 -0400 Subject: [PATCH 20/36] cmake: prepend to CMAKE_MODULE_PATH --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d9dff16e..5cbf92e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,7 +43,8 @@ function (die msg) message(FATAL_ERROR "${BoldRed}${msg}${ColourReset}") endfunction () -set (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") +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)") From 3b7bdcb7908bed79937cb34b4ec2ebe74f192857 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Thu, 23 Oct 2014 14:03:54 -0400 Subject: [PATCH 21/36] cmake: set the project name --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5cbf92e9..26a9ba8f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,6 +30,8 @@ cmake_minimum_required(VERSION 2.8.6) +project(bitmonero) + function (die msg) if (NOT WIN32) string(ASCII 27 Esc) From 9689df925c7e1b3291ad2f351136fee5f383f527 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Thu, 23 Oct 2014 14:04:08 -0400 Subject: [PATCH 22/36] cmake: clean up EXTRA_LIBRARIES pthread is handled by CMAKE_THREAD_LIBS_INIT while libdl isn't needed. --- CMakeLists.txt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 26a9ba8f..7dcb36d8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -222,13 +222,11 @@ 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() From 464c2805e5512117970974d5cadc4e59eee5d921 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Thu, 23 Oct 2014 16:34:42 -0400 Subject: [PATCH 23/36] cmake: fix up miniupnpc's define It's only necessary on Windows builds and new versions renamed the define without any compatibility bridge. --- src/CMakeLists.txt | 8 +++++--- tests/CMakeLists.txt | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ec773ae0..dfdf90b9 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -28,9 +28,11 @@ # # 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 () function (bitmonero_private_headers group) source_group("${group}\\Private" diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 3da9fdb6..0f99cab7 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -28,9 +28,11 @@ # # 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 () find_package(GTest) From 7d708e422397fb0ba8ac29855eb27964115e7217 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Fri, 24 Oct 2014 14:48:14 -0400 Subject: [PATCH 24/36] cmake: support 2.8.7 Older versions of CMake support LINK_{PUBLIC,PRIVATE} while newer versions prefer PUBLIC and PRIVATE instead, but still support the LINK_ prefix. --- CMakeLists.txt | 2 +- external/unbound/CMakeLists.txt | 8 ++++---- src/CMakeLists.txt | 2 +- src/common/CMakeLists.txt | 2 +- src/connectivity_tool/CMakeLists.txt | 2 +- src/cryptonote_core/CMakeLists.txt | 4 ++-- src/daemon/CMakeLists.txt | 2 +- src/miner/CMakeLists.txt | 2 +- src/mnemonics/CMakeLists.txt | 2 +- src/rpc/CMakeLists.txt | 2 +- src/simplewallet/CMakeLists.txt | 2 +- src/wallet/CMakeLists.txt | 4 ++-- tests/CMakeLists.txt | 2 +- tests/core_proxy/CMakeLists.txt | 2 +- tests/core_tests/CMakeLists.txt | 2 +- tests/daemon_tests/CMakeLists.txt | 2 +- tests/difficulty/CMakeLists.txt | 2 +- tests/functional_tests/CMakeLists.txt | 2 +- tests/hash/CMakeLists.txt | 2 +- tests/net_load_tests/CMakeLists.txt | 4 ++-- tests/performance_tests/CMakeLists.txt | 2 +- tests/unit_tests/CMakeLists.txt | 2 +- 22 files changed, 28 insertions(+), 28 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7dcb36d8..75b7bf60 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,7 +28,7 @@ # # 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) project(bitmonero) diff --git a/external/unbound/CMakeLists.txt b/external/unbound/CMakeLists.txt index a81e8031..08f47cc1 100644 --- a/external/unbound/CMakeLists.txt +++ b/external/unbound/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.8.8) +cmake_minimum_required(VERSION 2.8.7) project(unbound C) @@ -163,18 +163,18 @@ add_library(unbound ${compat_src} ${libunbound_src}) target_link_libraries(unbound - PRIVATE + LINK_PRIVATE ${OPENSSL_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) if (LIBEVENT2_FOUND) target_link_libraries(unbound - PRIVATE + LINK_PRIVATE ${LIBEVENT2_LIBRARIES}) endif () if (WIN32) target_link_libraries(unbound - PRIVATE + LINK_PRIVATE iphlpapi ws2_32) endif () diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index dfdf90b9..8cd39a54 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -55,7 +55,7 @@ function (bitmonero_add_executable name) add_executable("${name}" ${ARGN}) target_link_libraries("${name}" - PRIVATE + LINK_PRIVATE ${EXTRA_LIBRARIES}) set_property(TARGET "${name}" PROPERTY diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index fcc30e19..739c0ade 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -52,7 +52,7 @@ bitmonero_add_library(common ${common_headers} ${common_private_headers}) target_link_libraries(common - PRIVATE + LINK_PRIVATE crypto ${UNBOUND_LIBRARY} ${Boost_DATE_TIME_LIBRARY} diff --git a/src/connectivity_tool/CMakeLists.txt b/src/connectivity_tool/CMakeLists.txt index b3a495af..b0178c70 100644 --- a/src/connectivity_tool/CMakeLists.txt +++ b/src/connectivity_tool/CMakeLists.txt @@ -35,7 +35,7 @@ bitmonero_add_executable(connectivity_tool ${connectivity_tool_sources} ${connectivity_tool_private_headers}) target_link_libraries(connectivity_tool - PRIVATE + LINK_PRIVATE cryptonote_core crypto common diff --git a/src/cryptonote_core/CMakeLists.txt b/src/cryptonote_core/CMakeLists.txt index c18b01b5..3c2e097c 100644 --- a/src/cryptonote_core/CMakeLists.txt +++ b/src/cryptonote_core/CMakeLists.txt @@ -67,13 +67,13 @@ bitmonero_add_library(cryptonote_core ${cryptonote_core_headers} ${cryptonote_core_private_headers}) target_link_libraries(cryptonote_core - PUBLIC + LINK_PUBLIC common crypto ${Boost_DATE_TIME_LIBRARY} ${Boost_PROGRAM_OPTIONS_LIBRARY} ${Boost_SERIALIZATION_LIBRARY} - PRIVATE + LINK_PRIVATE ${Boost_FILESYSTEM_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${Boost_THREAD_LIBRARY} diff --git a/src/daemon/CMakeLists.txt b/src/daemon/CMakeLists.txt index 3fbac07e..0c9fca88 100644 --- a/src/daemon/CMakeLists.txt +++ b/src/daemon/CMakeLists.txt @@ -57,7 +57,7 @@ bitmonero_add_executable(daemon ${daemon_headers} ${daemon_private_headers}) target_link_libraries(daemon - PRIVATE + LINK_PRIVATE rpc cryptonote_core crypto diff --git a/src/miner/CMakeLists.txt b/src/miner/CMakeLists.txt index 1c26e759..3829e552 100644 --- a/src/miner/CMakeLists.txt +++ b/src/miner/CMakeLists.txt @@ -43,7 +43,7 @@ bitmonero_add_executable(simpleminer ${simpleminer_headers} ${simpleminer_private_headers}) target_link_libraries(simpleminer - PRIVATE + LINK_PRIVATE cryptonote_core common ${Boost_FILESYSTEM_LIBRARY} diff --git a/src/mnemonics/CMakeLists.txt b/src/mnemonics/CMakeLists.txt index 4f2c36f4..66ef4f3f 100644 --- a/src/mnemonics/CMakeLists.txt +++ b/src/mnemonics/CMakeLists.txt @@ -48,5 +48,5 @@ bitmonero_add_library(mnemonics ${mnemonics_headers} ${mnemonics_private_headers}) target_link_libraries(mnemonics - PRIVATE + LINK_PRIVATE ${Boost_SYSTEM_LIBRARY}) diff --git a/src/rpc/CMakeLists.txt b/src/rpc/CMakeLists.txt index ba71c8e6..5417a0ec 100644 --- a/src/rpc/CMakeLists.txt +++ b/src/rpc/CMakeLists.txt @@ -43,7 +43,7 @@ bitmonero_add_library(rpc ${rpc_headers} ${rpc_private_headers}) target_link_libraries(rpc - PRIVATE + LINK_PRIVATE cryptonote_core ${Boost_CHRONO_LIBRARY} ${Boost_REGEX_LIBRARY} diff --git a/src/simplewallet/CMakeLists.txt b/src/simplewallet/CMakeLists.txt index 682e660d..304063b7 100644 --- a/src/simplewallet/CMakeLists.txt +++ b/src/simplewallet/CMakeLists.txt @@ -43,7 +43,7 @@ bitmonero_add_executable(simplewallet ${simplewallet_headers} ${simplewallet_private_headers}) target_link_libraries(simplewallet - PRIVATE + LINK_PRIVATE wallet rpc cryptonote_core diff --git a/src/wallet/CMakeLists.txt b/src/wallet/CMakeLists.txt index e32d86a5..af3ec0fb 100644 --- a/src/wallet/CMakeLists.txt +++ b/src/wallet/CMakeLists.txt @@ -46,10 +46,10 @@ bitmonero_add_library(wallet ${wallet_headers} ${wallet_private_headers}) target_link_libraries(wallet - PUBLIC + LINK_PUBLIC cryptonote_core mnemonics - PRIVATE + LINK_PRIVATE ${Boost_SERIALIZATION_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${Boost_THREAD_LIBRARY} diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 0f99cab7..ae20b875 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -75,7 +75,7 @@ add_executable(hash-target-tests ${hash_targets_sources} ${hash_targets_headers}) target_link_libraries(hash-target-tests - PRIVATE + LINK_PRIVATE cryptonote_core) set_property(TARGET hash-target-tests PROPERTY diff --git a/tests/core_proxy/CMakeLists.txt b/tests/core_proxy/CMakeLists.txt index 7186f2c2..ab6f7d04 100644 --- a/tests/core_proxy/CMakeLists.txt +++ b/tests/core_proxy/CMakeLists.txt @@ -36,7 +36,7 @@ add_executable(core_proxy ${core_proxy_sources} ${core_proxy_headers}) target_link_libraries(core_proxy - PRIVATE + LINK_PRIVATE cryptonote_core ${UPNP_LIBRARIES} ${Boost_CHRONO_LIBRARY} diff --git a/tests/core_tests/CMakeLists.txt b/tests/core_tests/CMakeLists.txt index b8f07b3d..72c07955 100644 --- a/tests/core_tests/CMakeLists.txt +++ b/tests/core_tests/CMakeLists.txt @@ -58,7 +58,7 @@ add_executable(coretests ${core_tests_sources} ${core_tests_headers}) target_link_libraries(coretests - PRIVATE + LINK_PRIVATE cryptonote_core ${Boost_FILESYSTEM_LIBRARY} ${Boost_SYSTEM_LIBRARY} diff --git a/tests/daemon_tests/CMakeLists.txt b/tests/daemon_tests/CMakeLists.txt index 2b7c82ff..b7a93481 100644 --- a/tests/daemon_tests/CMakeLists.txt +++ b/tests/daemon_tests/CMakeLists.txt @@ -35,7 +35,7 @@ add_executable(transfers ${transfers_sources} ${transfers_headers}) target_link_libraries(transfers - PRIVATE + LINK_PRIVATE useragent rpc cryptonote_core diff --git a/tests/difficulty/CMakeLists.txt b/tests/difficulty/CMakeLists.txt index d4ec5bd8..20600a15 100644 --- a/tests/difficulty/CMakeLists.txt +++ b/tests/difficulty/CMakeLists.txt @@ -35,7 +35,7 @@ add_executable(difficulty-tests ${difficulty_sources} ${difficulty_headers}) target_link_libraries(difficulty-tests - PRIVATE + LINK_PRIVATE cryptonote_core) set_property(TARGET difficulty-tests PROPERTY diff --git a/tests/functional_tests/CMakeLists.txt b/tests/functional_tests/CMakeLists.txt index f778d326..b91f8afe 100644 --- a/tests/functional_tests/CMakeLists.txt +++ b/tests/functional_tests/CMakeLists.txt @@ -39,7 +39,7 @@ add_executable(functional_tests ${functional_tests_sources} ${functional_tests_headers}) target_link_libraries(functional_tests - PRIVATE + LINK_PRIVATE cryptonote_core wallet common diff --git a/tests/hash/CMakeLists.txt b/tests/hash/CMakeLists.txt index 4f55552d..2f441d62 100644 --- a/tests/hash/CMakeLists.txt +++ b/tests/hash/CMakeLists.txt @@ -35,7 +35,7 @@ add_executable(hash-tests ${hash_sources} ${hash_headers}) target_link_libraries(hash-tests - PRIVATE + LINK_PRIVATE crypto) set_property(TARGET hash-tests PROPERTY diff --git a/tests/net_load_tests/CMakeLists.txt b/tests/net_load_tests/CMakeLists.txt index 8303b50c..114d0e68 100644 --- a/tests/net_load_tests/CMakeLists.txt +++ b/tests/net_load_tests/CMakeLists.txt @@ -36,7 +36,7 @@ add_executable(net_load_tests_clt ${clt_sources} ${clt_headers}) target_link_libraries(net_load_tests_clt - PRIVATE + LINK_PRIVATE ${GTEST_MAIN_LIBRARIES} ${Boost_CHRONO_LIBRARY} ${Boost_DATE_TIME_LIBRARY} @@ -55,7 +55,7 @@ add_executable(net_load_tests_srv ${srv_sources} ${srv_headers}) target_link_libraries(net_load_tests_srv - PRIVATE + LINK_PRIVATE ${GTEST_MAIN_LIBRARIES} ${Boost_CHRONO_LIBRARY} ${Boost_DATE_TIME_LIBRARY} diff --git a/tests/performance_tests/CMakeLists.txt b/tests/performance_tests/CMakeLists.txt index f842eee7..f1734b2a 100644 --- a/tests/performance_tests/CMakeLists.txt +++ b/tests/performance_tests/CMakeLists.txt @@ -48,7 +48,7 @@ add_executable(performance_tests ${performance_tests_sources} ${performance_tests_headers}) target_link_libraries(performance_tests - PRIVATE + LINK_PRIVATE cryptonote_core common crypto diff --git a/tests/unit_tests/CMakeLists.txt b/tests/unit_tests/CMakeLists.txt index 0a224708..251f6b66 100644 --- a/tests/unit_tests/CMakeLists.txt +++ b/tests/unit_tests/CMakeLists.txt @@ -54,7 +54,7 @@ add_executable(unit_tests ${unit_tests_sources} ${unit_tests_headers}) target_link_libraries(unit_tests - PRIVATE + LINK_PRIVATE cryptonote_core rpc wallet From d43a20f8f41b0d10b09a7cd6e1940d4eca41a125 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Fri, 24 Oct 2014 15:29:56 -0400 Subject: [PATCH 25/36] unbound: plumb the libdir up This is necessary for static builds where the linking is passed around to dependent targets, but the library is lost. --- external/CMakeLists.txt | 2 +- external/unbound/CMakeLists.txt | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index 97bdd9af..a7bcfebe 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -84,7 +84,7 @@ if(NOT UNBOUND_INCLUDE_DIR OR STATIC) set(UNBOUND_STATIC true PARENT_SCOPE) set(UNBOUND_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/unbound/libunbound" PARENT_SCOPE) set(UNBOUND_LIBRARY "unbound" PARENT_SCOPE) - set(UNBOUND_LIBRARY_DIRS "${LIBEVENT2_LIBRARY_DIRS}" 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) diff --git a/external/unbound/CMakeLists.txt b/external/unbound/CMakeLists.txt index 08f47cc1..f17897c6 100644 --- a/external/unbound/CMakeLists.txt +++ b/external/unbound/CMakeLists.txt @@ -178,3 +178,8 @@ if (WIN32) iphlpapi ws2_32) endif () + +# XXX: Hack for static builds. +set(LIBEVENT2_LIBDIR + "${LIBEVENT2_LIBDIR}" + PARENT_SCOPE) From 4b6515cfb59bb9d118b57f8ede4f67ea49dfbb23 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Fri, 24 Oct 2014 15:30:44 -0400 Subject: [PATCH 26/36] unbound: fix type checking --- external/unbound/configure_checks.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/external/unbound/configure_checks.cmake b/external/unbound/configure_checks.cmake index 281bcf97..b65b48c2 100644 --- a/external/unbound/configure_checks.cmake +++ b/external/unbound/configure_checks.cmake @@ -104,10 +104,10 @@ function (check_type_exists type variable header default) set(CMAKE_EXTRA_INCLUDE_FILES "${header}") check_type_size("${type}" "${variable}") - if (${variable} STREQUAL "") + if (NOT HAVE_${type}) set("${variable}" "${default}" PARENT_SCOPE) else () - set("${variable}" "" PARENT_SCOPE) + set("${variable}" "FALSE" PARENT_SCOPE) endif () endfunction () From 01895dd0676cb8252ed5274c15000e361c965370 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Fri, 24 Oct 2014 15:30:57 -0400 Subject: [PATCH 27/36] cmake: fix up link lines --- src/daemon/CMakeLists.txt | 1 + src/miner/CMakeLists.txt | 1 + src/simplewallet/CMakeLists.txt | 2 +- tests/functional_tests/CMakeLists.txt | 3 ++- tests/performance_tests/CMakeLists.txt | 3 ++- 5 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/daemon/CMakeLists.txt b/src/daemon/CMakeLists.txt index 0c9fca88..adcc61c4 100644 --- a/src/daemon/CMakeLists.txt +++ b/src/daemon/CMakeLists.txt @@ -68,6 +68,7 @@ target_link_libraries(daemon ${Boost_REGEX_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${Boost_THREAD_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT} ${UPNP_LIBRARIES} ${EXTRA_LIBRARIES}) add_dependencies(daemon diff --git a/src/miner/CMakeLists.txt b/src/miner/CMakeLists.txt index 3829e552..83bda57c 100644 --- a/src/miner/CMakeLists.txt +++ b/src/miner/CMakeLists.txt @@ -51,4 +51,5 @@ target_link_libraries(simpleminer ${Boost_REGEX_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${Boost_THREAD_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT} ${EXTRA_LIBRARIES}) diff --git a/src/simplewallet/CMakeLists.txt b/src/simplewallet/CMakeLists.txt index 304063b7..14f87790 100644 --- a/src/simplewallet/CMakeLists.txt +++ b/src/simplewallet/CMakeLists.txt @@ -52,7 +52,7 @@ target_link_libraries(simplewallet mnemonics ${UNBOUND_LIBRARY} ${UPNP_LIBRARIES} - ${Boost_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT} ${EXTRA_LIBRARIES}) add_dependencies(simplewallet version) diff --git a/tests/functional_tests/CMakeLists.txt b/tests/functional_tests/CMakeLists.txt index b91f8afe..71b7c6e0 100644 --- a/tests/functional_tests/CMakeLists.txt +++ b/tests/functional_tests/CMakeLists.txt @@ -45,7 +45,8 @@ target_link_libraries(functional_tests common crypto ${UNBOUND_LIBRARY} - ${Boost_LIBRARIES} + ${Boost_REGEX_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT} ${EXTRA_LIBRARIES}) set_property(TARGET functional_tests PROPERTY diff --git a/tests/performance_tests/CMakeLists.txt b/tests/performance_tests/CMakeLists.txt index f1734b2a..ed4d3d4b 100644 --- a/tests/performance_tests/CMakeLists.txt +++ b/tests/performance_tests/CMakeLists.txt @@ -53,7 +53,8 @@ target_link_libraries(performance_tests common crypto ${UNBOUND_LIBRARY} - ${Boost_LIBRARIES} + ${Boost_CHRONO_LIBRARY} + ${CMAKE_THREAD_LIBS_INIT} ${EXTRA_LIBRARIES}) set_property(TARGET performance_tests PROPERTY From e3776876af57756a3fdafd168df9d680a6ee69f2 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Fri, 24 Oct 2014 15:52:01 -0400 Subject: [PATCH 28/36] cmake: Windows and static builds need this --- src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8cd39a54..a77c232c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -28,7 +28,7 @@ # # Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers -if (WIN32 AND STATIC) +if (WIN32 OR STATIC) add_definitions(-DSTATICLIB) # miniupnp changed their static define add_definitions(-DMINIUPNP_STATICLIB) From c696492549e1750727fa0735c75c8aa090e534b7 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Fri, 24 Oct 2014 17:39:15 -0400 Subject: [PATCH 29/36] unbound: fix getaddrinfo detection for 32-bit windows On Windows, getaddrinfo is part of the Windows API and as such is __stdcall, not __cdecl, so check_function_exists fails because the declaration doesn't match the mangling __stdcall has. Instead, use a header to include the symbol as declared on the system and use check_symbol_exists instead. Tested-By: greatwolf on IRC --- external/unbound/configure_checks.cmake | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/external/unbound/configure_checks.cmake b/external/unbound/configure_checks.cmake index b65b48c2..ead51e98 100644 --- a/external/unbound/configure_checks.cmake +++ b/external/unbound/configure_checks.cmake @@ -59,7 +59,6 @@ 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(getaddrinfo HAVE_GETADDRINFO) check_function_exists(getentropy HAVE_GETENTROPY) check_function_exists(getpwnam HAVE_GETPWNAM) check_function_exists(getrlimit HAVE_GETRLIMIT) @@ -100,6 +99,17 @@ 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}") From d855fe4e896f6f981b6169fbb44734ae78c68706 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Mon, 10 Nov 2014 11:13:15 -0500 Subject: [PATCH 30/36] miniupnpc: bump the _POSIX_C_SOURCE feature macro FreeBSD doesn't expose IPv6 structures without this. --- external/miniupnpc/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/miniupnpc/CMakeLists.txt b/external/miniupnpc/CMakeLists.txt index a278ee68..bed9a3d2 100644 --- a/external/miniupnpc/CMakeLists.txt +++ b/external/miniupnpc/CMakeLists.txt @@ -16,7 +16,7 @@ endif () if (NOT WIN32) add_definitions (-DMINIUPNPC_SET_SOCKET_TIMEOUT) - add_definitions (-D_BSD_SOURCE -D_POSIX_C_SOURCE=1) + 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 () From 475154255ace3212087b9b3492c1cd8e51bfde61 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Mon, 17 Nov 2014 18:09:21 -0500 Subject: [PATCH 31/36] msys: look in msys' directory for files This tells find_path and find_library to look under this directory first which is what we want on msys2. --- CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 75b7bf60..b8bc83a0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -95,6 +95,11 @@ else() endif() option(STATIC "Link libraries statically" ${DEFAULT_STATIC}) +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") +endif() + if(STATIC) if(MSVC) set(CMAKE_FIND_LIBRARY_SUFFIXES .lib .dll.a .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) From 5680c9cac7725ad265eb01336f80366a2dfddce3 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Mon, 17 Nov 2014 18:10:07 -0500 Subject: [PATCH 32/36] msys: factor out -Werror on msys There are Windows-related warnings turned into errors here. --- CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b8bc83a0..43d03a87 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -144,7 +144,10 @@ else() 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() From 18c56abe4bf5d069abe9ee44442cbbb859f845f5 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Mon, 17 Nov 2014 18:10:52 -0500 Subject: [PATCH 33/36] msys: don't use LTO This causes duplicate symbol errors on msys' mingw install. --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 43d03a87..f3b517a8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -158,6 +158,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") From ec54e2f82be0aa8a1bdea8549640698e0ff2a371 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 18 Nov 2014 17:02:28 -0500 Subject: [PATCH 34/36] cmake: place binaries together in the build tree This allows Windows to copy binaries to one place rather than to each executable directory. --- src/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a77c232c..43c5740a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -60,6 +60,9 @@ function (bitmonero_add_executable name) 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}" From de4fc405769c2554630c49a3be8c253bb8dfaa8a Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 18 Nov 2014 17:03:14 -0500 Subject: [PATCH 35/36] mingw: copy required libraries to the build tree These are found as shared libraries and need to be copied so that PATH manipulation isn't necessary outside of an msys shell. --- external/unbound/CMakeLists.txt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/external/unbound/CMakeLists.txt b/external/unbound/CMakeLists.txt index f17897c6..fdfa0a0f 100644 --- a/external/unbound/CMakeLists.txt +++ b/external/unbound/CMakeLists.txt @@ -183,3 +183,19 @@ endif () 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 () From ce71c01f11fa27164d4681396f0ab0d97b04b400 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 18 Nov 2014 17:04:47 -0500 Subject: [PATCH 36/36] cmake: work around a bug with implicit link directories Unfortunately, this is necessary because CMake doesn't detect whether mingw libraries are static or shared and doesn't put a -static flag around the -lfoo argument which then makes the shared library be linked to. --- CMakeLists.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index f3b517a8..ebca5c6f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -98,6 +98,14 @@ option(STATIC "Link libraries statically" ${DEFAULT_STATIC}) 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)