From 51895fd7df69ddb5d6bfe5c2caf2f6649cc43132 Mon Sep 17 00:00:00 2001
From: moneromooo-monero <moneromooo-monero@users.noreply.github.com>
Date: Wed, 15 Nov 2017 16:37:07 +0000
Subject: [PATCH] split wallet and wallet_api

This speeds up building a lot when wallet2.h (or something it
includes) changes, since all the API includes wallet2.h
---
 src/wallet/CMakeLists.txt                | 33 ++-------
 src/wallet/api/CMakeLists.txt            | 89 ++++++++++++++++++++++++
 src/wallet/api/address_book.h            |  2 +-
 src/wallet/api/pending_transaction.h     |  2 +-
 src/wallet/api/subaddress.h              |  2 +-
 src/wallet/api/subaddress_account.h      |  2 +-
 src/wallet/api/transaction_history.h     |  2 +-
 src/wallet/api/transaction_info.h        |  2 +-
 src/wallet/api/unsigned_transaction.h    |  2 +-
 src/wallet/api/wallet.h                  |  2 +-
 src/wallet/{ => api}/wallet2_api.h       |  0
 src/wallet/api/wallet_manager.h          |  2 +-
 src/wallet/wallet2.cpp                   |  1 -
 tests/libwallet_api_tests/CMakeLists.txt |  1 +
 tests/libwallet_api_tests/main.cpp       |  2 +-
 15 files changed, 104 insertions(+), 40 deletions(-)
 create mode 100644 src/wallet/api/CMakeLists.txt
 rename src/wallet/{ => api}/wallet2_api.h (100%)

diff --git a/src/wallet/CMakeLists.txt b/src/wallet/CMakeLists.txt
index e5c79a447..74992139d 100644
--- a/src/wallet/CMakeLists.txt
+++ b/src/wallet/CMakeLists.txt
@@ -33,21 +33,7 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
 set(wallet_sources
   wallet2.cpp
   wallet_args.cpp
-  node_rpc_proxy.cpp
-  api/wallet.cpp
-  api/wallet_manager.cpp
-  api/transaction_info.cpp
-  api/transaction_history.cpp
-  api/pending_transaction.cpp
-  api/utils.cpp
-  api/address_book.cpp
-  api/subaddress.cpp
-  api/subaddress_account.cpp
-  api/unsigned_transaction.cpp)
-
-set(wallet_api_headers
-    wallet2_api.h)
-    
+  node_rpc_proxy.cpp)
 
 set(wallet_private_headers
   wallet2.h
@@ -56,23 +42,12 @@ set(wallet_private_headers
   wallet_rpc_server.h
   wallet_rpc_server_commands_defs.h
   wallet_rpc_server_error_codes.h
-  node_rpc_proxy.h
-  api/wallet.h
-  api/wallet_manager.h
-  api/transaction_info.h
-  api/transaction_history.h
-  api/pending_transaction.h
-  api/common_defines.h
-  api/address_book.h
-  api/subaddress.h
-  api/subaddress_account.h
-  api/unsigned_transaction.h)
+  node_rpc_proxy.h)
 
 monero_private_headers(wallet
   ${wallet_private_headers})
 monero_add_library(wallet
   ${wallet_sources}
-  ${wallet_api_headers}
   ${wallet_private_headers})
 target_link_libraries(wallet
   PUBLIC
@@ -127,6 +102,7 @@ install(TARGETS wallet_rpc_server DESTINATION bin)
 # build and install libwallet_merged only if we building for GUI
 if (BUILD_GUI_DEPS)
     set(libs_to_merge
+            wallet_api
             wallet
             cryptonote_core
             cryptonote_basic
@@ -149,6 +125,5 @@ if (BUILD_GUI_DEPS)
     install(TARGETS wallet_merged
         ARCHIVE DESTINATION ${lib_folder})
 
-    install(FILES ${wallet_api_headers}
-        DESTINATION include/wallet)
+    add_subdirectory(api)
 endif()
diff --git a/src/wallet/api/CMakeLists.txt b/src/wallet/api/CMakeLists.txt
new file mode 100644
index 000000000..26127b75c
--- /dev/null
+++ b/src/wallet/api/CMakeLists.txt
@@ -0,0 +1,89 @@
+# Copyright (c) 2014-2017, 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.
+
+# include (${PROJECT_SOURCE_DIR}/cmake/libutils.cmake)
+
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+
+set(wallet_api_sources
+  wallet.cpp
+  wallet_manager.cpp
+  transaction_info.cpp
+  transaction_history.cpp
+  pending_transaction.cpp
+  utils.cpp
+  address_book.cpp
+  subaddress.cpp
+  subaddress_account.cpp
+  unsigned_transaction.cpp)
+
+set(wallet_api_headers
+    wallet2_api.h)
+
+set(wallet_api_private_headers
+  wallet.h
+  wallet_manager.h
+  transaction_info.h
+  transaction_history.h
+  pending_transaction.h
+  common_defines.h
+  address_book.h
+  subaddress.h
+  subaddress_account.h
+  unsigned_transaction.h)
+
+monero_private_headers(wallet_api
+  ${wallet_api_private_headers})
+monero_add_library(wallet_api
+  ${wallet_api_sources}
+  ${wallet_api_headers}
+  ${wallet_api_private_headers})
+target_link_libraries(wallet_api
+  PUBLIC
+    wallet
+    common
+    cryptonote_core
+    mnemonics
+    ${Boost_CHRONO_LIBRARY}
+    ${Boost_SERIALIZATION_LIBRARY}
+    ${Boost_FILESYSTEM_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_REGEX_LIBRARY}
+  PRIVATE
+    ${EXTRA_LIBRARIES})
+
+
+if(IOS)
+    set(lib_folder lib-${ARCH})
+else()
+    set(lib_folder lib)
+endif()
+
+install(FILES ${wallet_api_headers}
+    DESTINATION include/wallet)
diff --git a/src/wallet/api/address_book.h b/src/wallet/api/address_book.h
index 25f59128b..b92743fe6 100644
--- a/src/wallet/api/address_book.h
+++ b/src/wallet/api/address_book.h
@@ -28,7 +28,7 @@
 //
 // Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
 
-#include "wallet/wallet2_api.h"
+#include "wallet/api/wallet2_api.h"
 #include "wallet/wallet2.h"
 
 namespace Monero {
diff --git a/src/wallet/api/pending_transaction.h b/src/wallet/api/pending_transaction.h
index e5b33ac01..c98da59da 100644
--- a/src/wallet/api/pending_transaction.h
+++ b/src/wallet/api/pending_transaction.h
@@ -28,7 +28,7 @@
 //
 // Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
 
-#include "wallet/wallet2_api.h"
+#include "wallet/api/wallet2_api.h"
 #include "wallet/wallet2.h"
 
 #include <string>
diff --git a/src/wallet/api/subaddress.h b/src/wallet/api/subaddress.h
index e3e28eba1..45fef6e67 100644
--- a/src/wallet/api/subaddress.h
+++ b/src/wallet/api/subaddress.h
@@ -26,7 +26,7 @@
 // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
 // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-#include "wallet/wallet2_api.h"
+#include "wallet/api/wallet2_api.h"
 #include "wallet/wallet2.h"
 
 namespace Monero {
diff --git a/src/wallet/api/subaddress_account.h b/src/wallet/api/subaddress_account.h
index 107d7f87f..0a4db9671 100644
--- a/src/wallet/api/subaddress_account.h
+++ b/src/wallet/api/subaddress_account.h
@@ -26,7 +26,7 @@
 // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
 // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-#include "wallet/wallet2_api.h"
+#include "wallet/api/wallet2_api.h"
 #include "wallet/wallet2.h"
 
 namespace Monero {
diff --git a/src/wallet/api/transaction_history.h b/src/wallet/api/transaction_history.h
index 4987bdab2..e5207e53a 100644
--- a/src/wallet/api/transaction_history.h
+++ b/src/wallet/api/transaction_history.h
@@ -28,7 +28,7 @@
 //
 // Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
 
-#include "wallet/wallet2_api.h"
+#include "wallet/api/wallet2_api.h"
 #include <boost/thread/shared_mutex.hpp>
 
 namespace Monero {
diff --git a/src/wallet/api/transaction_info.h b/src/wallet/api/transaction_info.h
index d19ef8899..c961c0a9e 100644
--- a/src/wallet/api/transaction_info.h
+++ b/src/wallet/api/transaction_info.h
@@ -28,7 +28,7 @@
 //
 // Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
 
-#include "wallet/wallet2_api.h"
+#include "wallet/api/wallet2_api.h"
 #include <string>
 #include <ctime>
 
diff --git a/src/wallet/api/unsigned_transaction.h b/src/wallet/api/unsigned_transaction.h
index 9c442f503..33c994d5f 100644
--- a/src/wallet/api/unsigned_transaction.h
+++ b/src/wallet/api/unsigned_transaction.h
@@ -28,7 +28,7 @@
 //
 // Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
 
-#include "wallet/wallet2_api.h"
+#include "wallet/api/wallet2_api.h"
 #include "wallet/wallet2.h"
 
 #include <string>
diff --git a/src/wallet/api/wallet.h b/src/wallet/api/wallet.h
index 051eda3ba..c44fe2d13 100644
--- a/src/wallet/api/wallet.h
+++ b/src/wallet/api/wallet.h
@@ -31,7 +31,7 @@
 #ifndef WALLET_IMPL_H
 #define WALLET_IMPL_H
 
-#include "wallet/wallet2_api.h"
+#include "wallet/api/wallet2_api.h"
 #include "wallet/wallet2.h"
 
 #include <string>
diff --git a/src/wallet/wallet2_api.h b/src/wallet/api/wallet2_api.h
similarity index 100%
rename from src/wallet/wallet2_api.h
rename to src/wallet/api/wallet2_api.h
diff --git a/src/wallet/api/wallet_manager.h b/src/wallet/api/wallet_manager.h
index 8455f0f16..268adfc9f 100644
--- a/src/wallet/api/wallet_manager.h
+++ b/src/wallet/api/wallet_manager.h
@@ -29,7 +29,7 @@
 // Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
 
 
-#include "wallet/wallet2_api.h"
+#include "wallet/api/wallet2_api.h"
 #include <string>
 
 namespace Monero {
diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp
index 00b096b88..2695cfd95 100644
--- a/src/wallet/wallet2.cpp
+++ b/src/wallet/wallet2.cpp
@@ -39,7 +39,6 @@ using namespace epee;
 
 #include "cryptonote_config.h"
 #include "wallet2.h"
-#include "wallet2_api.h"
 #include "cryptonote_basic/cryptonote_format_utils.h"
 #include "rpc/core_rpc_server_commands_defs.h"
 #include "misc_language.h"
diff --git a/tests/libwallet_api_tests/CMakeLists.txt b/tests/libwallet_api_tests/CMakeLists.txt
index 4c5542d91..7da0d113e 100644
--- a/tests/libwallet_api_tests/CMakeLists.txt
+++ b/tests/libwallet_api_tests/CMakeLists.txt
@@ -39,6 +39,7 @@ add_executable(libwallet_api_tests
 
 target_link_libraries(libwallet_api_tests
   PRIVATE
+    wallet_api
     wallet
     version
     epee
diff --git a/tests/libwallet_api_tests/main.cpp b/tests/libwallet_api_tests/main.cpp
index 3434cd530..25fa547f8 100644
--- a/tests/libwallet_api_tests/main.cpp
+++ b/tests/libwallet_api_tests/main.cpp
@@ -30,7 +30,7 @@
 
 #include "gtest/gtest.h"
 
-#include "wallet/wallet2_api.h"
+#include "wallet/api/wallet2_api.h"
 #include "wallet/wallet2.h"
 #include "include_base_utils.h"
 #include "common/util.h"