From 6f882ba3b24b19953fcda18c99f20351c9e8a07c Mon Sep 17 00:00:00 2001
From: patrick96
Date: Mon, 28 Oct 2019 01:35:18 +0100
Subject: [PATCH] build: Move non-macro variables into settings.cpp
Since APP_VERSION is different for every commit and almost all file
include settings.hpp, the whole project has to be rebuilt for every
commit. With this, hopefully, this can be greatly reduced and only
changed files need to be rebuilt. This will also help ccache
---
include/settings.hpp.cmake | 64 +++++++++-----------------------------
src/CMakeLists.txt | 8 ++++-
src/settings.cpp.cmake | 56 +++++++++++++++++++++++++++++++++
src/utils/http.cpp | 2 +-
4 files changed, 79 insertions(+), 51 deletions(-)
create mode 100644 src/settings.cpp.cmake
diff --git a/include/settings.hpp.cmake b/include/settings.hpp.cmake
index 39aca327..20eb0f95 100644
--- a/include/settings.hpp.cmake
+++ b/include/settings.hpp.cmake
@@ -4,8 +4,8 @@
#include
#include
-#define APP_NAME "@PROJECT_NAME@"
-#cmakedefine APP_VERSION "@APP_VERSION@"
+extern const char* const APP_NAME;
+extern const char* const APP_VERSION;
#cmakedefine01 ENABLE_ALSA
#cmakedefine01 ENABLE_MPD
@@ -59,54 +59,20 @@ static const int SINK_PRIORITY_SCREEN{2};
static const int SINK_PRIORITY_TRAY{3};
static const int SINK_PRIORITY_MODULE{4};
-static constexpr const char* ALSA_SOUNDCARD{"@SETTING_ALSA_SOUNDCARD@"};
-static constexpr const char* BSPWM_SOCKET_PATH{"@SETTING_BSPWM_SOCKET_PATH@"};
-static constexpr const char* BSPWM_STATUS_PREFIX{"@SETTING_BSPWM_STATUS_PREFIX@"};
-static constexpr const char* CONNECTION_TEST_IP{"@SETTING_CONNECTION_TEST_IP@"};
-static constexpr const char* PATH_ADAPTER{"@SETTING_PATH_ADAPTER@"};
-static constexpr const char* PATH_BACKLIGHT{"@SETTING_PATH_BACKLIGHT@"};
-static constexpr const char* PATH_BATTERY{"@SETTING_PATH_BATTERY@"};
-static constexpr const char* PATH_CPU_INFO{"@SETTING_PATH_CPU_INFO@"};
-static constexpr const char* PATH_MEMORY_INFO{"@SETTING_PATH_MEMORY_INFO@"};
-static constexpr const char* PATH_MESSAGING_FIFO{"@SETTING_PATH_MESSAGING_FIFO@"};
-static constexpr const char* PATH_TEMPERATURE_INFO{"@SETTING_PATH_TEMPERATURE_INFO@"};
+extern const char* const ALSA_SOUNDCARD;
+extern const char* const BSPWM_SOCKET_PATH;
+extern const char* const BSPWM_STATUS_PREFIX;
+extern const char* const CONNECTION_TEST_IP;
+extern const char* const PATH_ADAPTER;
+extern const char* const PATH_BACKLIGHT;
+extern const char* const PATH_BATTERY;
+extern const char* const PATH_CPU_INFO;
+extern const char* const PATH_MEMORY_INFO;
+extern const char* const PATH_MESSAGING_FIFO;
+extern const char* const PATH_TEMPERATURE_INFO;
-const auto version_details = [](const std::vector& args) {
- for (auto&& arg : args) {
- if (arg.compare(0, 3, "-vv") == 0)
- return true;
- }
- return false;
-};
+extern bool version_details(const std::vector& args);
-// clang-format off
-const auto print_build_info = [](bool extended = false) {
- printf("%s %s\n\n", APP_NAME, APP_VERSION);
- printf("Features: %calsa %ccurl %ci3 %cmpd %cnetwork(%s) %cpulseaudio %cxkeyboard\n",
- (ENABLE_ALSA ? '+' : '-'),
- (ENABLE_CURL ? '+' : '-'),
- (ENABLE_I3 ? '+' : '-'),
- (ENABLE_MPD ? '+' : '-'),
- (ENABLE_NETWORK ? '+' : '-'),
- WIRELESS_LIB,
- (ENABLE_PULSEAUDIO ? '+' : '-'),
- (ENABLE_XKEYBOARD ? '+' : '-'));
- if (extended) {
- printf("\n");
- printf("X extensions: %crandr (%cmonitors) %ccomposite %cxkb %cxrm %cxcursor\n",
- (WITH_XRANDR ? '+' : '-'),
- (WITH_XRANDR_MONITORS ? '+' : '-'),
- (WITH_XCOMPOSITE ? '+' : '-'),
- (WITH_XKB ? '+' : '-'),
- (WITH_XRM ? '+' : '-'),
- (WITH_XCURSOR ? '+' : '-'));
- printf("\n");
- printf("Build type: @CMAKE_BUILD_TYPE@\n");
- printf("Compiler: @CMAKE_CXX_COMPILER@\n");
- printf("Compiler flags: @CMAKE_CXX_FLAGS@ ${CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE_UPPER}}\n");
- printf("Linker flags: @CMAKE_EXE_LINKER_FLAGS@ ${CMAKE_EXE_LINKER_FLAGS_${CMAKE_BUILD_TYPE_UPPER}}\n");
- }
-};
-// clang-format on
+extern void print_build_info(bool extended = false);
// vim:ft=cpp
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 5299e3ec..342e2e53 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -7,6 +7,13 @@
file(GLOB_RECURSE files RELATIVE ${CMAKE_CURRENT_LIST_DIR} *.c[p]*)
list(REMOVE_ITEM files main.cpp ipc.cpp)
+configure_file(
+ ${CMAKE_CURRENT_LIST_DIR}/settings.cpp.cmake
+ ${CMAKE_BINARY_DIR}/generated-sources/settings.cpp
+ ESCAPE_QUOTES)
+
+list(APPEND files ${CMAKE_BINARY_DIR}/generated-sources/settings.cpp)
+
if(NOT ENABLE_ALSA)
list(REMOVE_ITEM files modules/alsa.cpp)
list(REMOVE_ITEM files adapters/alsa/control.cpp)
@@ -55,7 +62,6 @@ endif()
if(NOT WITH_XCURSOR)
list(REMOVE_ITEM files x11/cursor.cpp)
endif()
-
# }}}
# Target: polybar {{{
diff --git a/src/settings.cpp.cmake b/src/settings.cpp.cmake
new file mode 100644
index 00000000..2b1abb5a
--- /dev/null
+++ b/src/settings.cpp.cmake
@@ -0,0 +1,56 @@
+#include "settings.hpp"
+
+const char* const APP_NAME{"@PROJECT_NAME@"};
+const char* const APP_VERSION{"@APP_VERSION@"};
+
+const char* const ALSA_SOUNDCARD{"@SETTING_ALSA_SOUNDCARD@"};
+const char* const BSPWM_SOCKET_PATH{"@SETTING_BSPWM_SOCKET_PATH@"};
+const char* const BSPWM_STATUS_PREFIX{"@SETTING_BSPWM_STATUS_PREFIX@"};
+const char* const CONNECTION_TEST_IP{"@SETTING_CONNECTION_TEST_IP@"};
+const char* const PATH_ADAPTER{"@SETTING_PATH_ADAPTER@"};
+const char* const PATH_BACKLIGHT{"@SETTING_PATH_BACKLIGHT@"};
+const char* const PATH_BATTERY{"@SETTING_PATH_BATTERY@"};
+const char* const PATH_CPU_INFO{"@SETTING_PATH_CPU_INFO@"};
+const char* const PATH_MEMORY_INFO{"@SETTING_PATH_MEMORY_INFO@"};
+const char* const PATH_MESSAGING_FIFO{"@SETTING_PATH_MESSAGING_FIFO@"};
+const char* const PATH_TEMPERATURE_INFO{"@SETTING_PATH_TEMPERATURE_INFO@"};
+
+bool version_details(const std::vector& args) {
+ for (auto&& arg : args) {
+ if (arg.compare(0, 3, "-vv") == 0)
+ return true;
+ }
+ return false;
+}
+
+// clang-format off
+void print_build_info(bool extended) {
+ printf("%s %s\n\n", APP_NAME, APP_VERSION);
+ printf("Features: %calsa %ccurl %ci3 %cmpd %cnetwork(%s) %cpulseaudio %cxkeyboard\n",
+ (ENABLE_ALSA ? '+' : '-'),
+ (ENABLE_CURL ? '+' : '-'),
+ (ENABLE_I3 ? '+' : '-'),
+ (ENABLE_MPD ? '+' : '-'),
+ (ENABLE_NETWORK ? '+' : '-'),
+ WIRELESS_LIB,
+ (ENABLE_PULSEAUDIO ? '+' : '-'),
+ (ENABLE_XKEYBOARD ? '+' : '-'));
+ if (extended) {
+ printf("\n");
+ printf("X extensions: %crandr (%cmonitors) %ccomposite %cxkb %cxrm %cxcursor\n",
+ (WITH_XRANDR ? '+' : '-'),
+ (WITH_XRANDR_MONITORS ? '+' : '-'),
+ (WITH_XCOMPOSITE ? '+' : '-'),
+ (WITH_XKB ? '+' : '-'),
+ (WITH_XRM ? '+' : '-'),
+ (WITH_XCURSOR ? '+' : '-'));
+ printf("\n");
+ printf("Build type: @CMAKE_BUILD_TYPE@\n");
+ printf("Compiler: @CMAKE_CXX_COMPILER@\n");
+ printf("Compiler flags: @CMAKE_CXX_FLAGS@ ${CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE_UPPER}}\n");
+ printf("Linker flags: @CMAKE_EXE_LINKER_FLAGS@ ${CMAKE_EXE_LINKER_FLAGS_${CMAKE_BUILD_TYPE_UPPER}}\n");
+ }
+}
+// clang-format on
+
+// vim:ft=cpp
diff --git a/src/utils/http.cpp b/src/utils/http.cpp
index aee8d443..ee595435 100644
--- a/src/utils/http.cpp
+++ b/src/utils/http.cpp
@@ -14,7 +14,7 @@ http_downloader::http_downloader(int connection_timeout) {
curl_easy_setopt(m_curl, CURLOPT_CONNECTTIMEOUT, connection_timeout);
curl_easy_setopt(m_curl, CURLOPT_FOLLOWLOCATION, true);
curl_easy_setopt(m_curl, CURLOPT_NOSIGNAL, true);
- curl_easy_setopt(m_curl, CURLOPT_USERAGENT, "polybar/" APP_VERSION);
+ curl_easy_setopt(m_curl, CURLOPT_USERAGENT, "polybar/" + string{APP_VERSION});
curl_easy_setopt(m_curl, CURLOPT_WRITEFUNCTION, http_downloader::write);
curl_easy_setopt(m_curl, CURLOPT_FORBID_REUSE, true);
}