Bundle cmake cache. (#19509)
vkalintiris committed
Jan 31, 2025 at 10:39 UTC
ba0987f65f1631c42adc649787355a1c3038948e
6 files changed
+62
CMakeLists.txt
+28
@@ -2998,6 +2998,9 @@ if (NOT NETDATA_USER)
2998
set(NETDATA_USER "netdata")
2999
endif()
3000
3001
+set(BUILD_INFO_CMAKE_CACHE_ARCHIVE_NAME "build-info-cmake-cache.gz")
3002
+set(BUILD_INFO_CMAKE_CACHE_ARCHIVE_PATH "usr/share/netdata")
3003
+
3004
configure_file(packaging/cmake/config.cmake.h.in config.h)
3005
3006
#
@@ -3545,6 +3548,27 @@ if(ENABLE_DASHBOARD)
3548
3549
endif()
3550
3551
+#
3552
+# Ship CMakeCache.txt as an archive
3553
+#
3554
+
3555
+install(CODE "
3556
+ execute_process(COMMAND gzip -c \"${CMAKE_BINARY_DIR}/CMakeCache.txt\"
3557
+ OUTPUT_FILE \"${BUILD_INFO_CMAKE_CACHE_ARCHIVE_NAME}\"
3558
+ WORKING_DIRECTORY \"${CMAKE_BINARY_DIR}\"
3559
+ RESULT_VARIABLE result)
3560
+ if(NOT result EQUAL 0)
3561
+ message(WARNING \"Failed to compress CMakeCache.txt\")
3562
+ endif()
3563
+
3564
+ file(INSTALL \"${CMAKE_BINARY_DIR}/${BUILD_INFO_CMAKE_CACHE_ARCHIVE_NAME}\"
3565
+ DESTINATION \"\${CMAKE_INSTALL_PREFIX}/${BUILD_INFO_CMAKE_CACHE_ARCHIVE_PATH}\")
3566
+")
3567
+
3568
+#
3569
+# vendor msys stuff on Windows
3570
+#
3571
+
3572
if(OS_WINDOWS)
3573
install(FILES /usr/bin/msys-protobuf-32.dll
3574
/usr/bin/msys-uv-1.dll
@@ -3557,4 +3581,8 @@ if(OS_WINDOWS)
3581
install(DIRECTORY /usr/ssl DESTINATION usr)
3582
endif()
3583
3584
+#
3585
+# Include packaging logic
3586
+#
3587
+
3588
include(Packaging)
netdata.spec.in
+2
@@ -522,6 +522,8 @@ rm -rf "${RPM_BUILD_ROOT}"
522
%{_presetdir}/50-%{name}.preset
523
%{_systemd_util_dir}/journald@%{name}.conf.d/%{name}.conf
524
525
+%{_datarootdir}/%{name}/build-info-cmake-cache.gz
526
+
527
%dir %{_libexecdir}/%{name}
528
%dir %{_libexecdir}/%{name}/plugins.d
529
%defattr(0750,root,netdata,0750)
packaging/cmake/config.cmake.h.in
+6
@@ -152,6 +152,7 @@
152
#cmakedefine NETDATA_SENTRY_ENVIRONMENT "@NETDATA_SENTRY_ENVIRONMENT@"
153
#cmakedefine NETDATA_SENTRY_DIST "@NETDATA_SENTRY_DIST@"
154
#cmakedefine NETDATA_SENTRY_DSN "@NETDATA_SENTRY_DSN@"
155
+
156
// enabled bundling
157
158
#cmakedefine ENABLE_BUNDLED_JSONC
@@ -161,6 +162,7 @@
162
163
// directory paths
164
165
+#define NETDATA_RUNTIME_PREFIX "@NETDATA_RUNTIME_PREFIX@"
166
#cmakedefine CACHE_DIR "@CACHE_DIR@"
167
#cmakedefine CONFIG_DIR "@CONFIG_DIR@"
168
#cmakedefine LIBCONFIG_DIR "@LIBCONFIG_DIR@"
@@ -172,6 +174,10 @@
174
// config command, user and version
175
176
#cmakedefine CONFIGURE_COMMAND "@CONFIGURE_COMMAND@"
177
+
178
+#cmakedefine BUILD_INFO_CMAKE_CACHE_ARCHIVE_NAME "@BUILD_INFO_CMAKE_CACHE_ARCHIVE_NAME@"
179
+#cmakedefine BUILD_INFO_CMAKE_CACHE_ARCHIVE_PATH "@BUILD_INFO_CMAKE_CACHE_ARCHIVE_PATH@"
180
+
181
#cmakedefine NETDATA_USER "@NETDATA_USER@"
182
183
#define NETDATA_VERSION_MAJOR "@NETDATA_VERSION_MAJOR@"
src/daemon/buildinfo.c
+19
@@ -1648,3 +1648,22 @@ void analytics_build_info(BUFFER *b) {
1648
}
1649
}
1650
1651
+void print_build_info_cmake_cache(void) {
1652
+ const char *path = NETDATA_RUNTIME_PREFIX "/"
1653
+ BUILD_INFO_CMAKE_CACHE_ARCHIVE_PATH "/"
1654
+ BUILD_INFO_CMAKE_CACHE_ARCHIVE_NAME;
1655
+
1656
+ gzFile f = gzopen(path, "rb");
1657
+ if (!f) {
1658
+ printf("Could not open build info cmake cache archive located at %s\n",
1659
+ path);
1660
+ return;
1661
+ }
1662
+
1663
+ char line[1024];
1664
+ while (gzgets(f, line, sizeof(line))) {
1665
+ printf("%s", line);
1666
+ }
1667
+
1668
+ gzclose(f);
1669
+}
src/daemon/buildinfo.h
+2
@@ -7,6 +7,8 @@ void print_build_info(void);
7
8
void print_build_info_json(void);
9
10
+void print_build_info_cmake_cache(void);
11
+
12
char *get_value_from_key(char *buffer, char *key);
13
14
void get_install_type(struct rrdhost_system_info *system_info);
src/daemon/main.c
+5
@@ -160,6 +160,7 @@ int help(int exitcode) {
160
" -W buildinfojson Print the version, the configure options,\n"
161
" a list of optional features, and whether they\n"
162
" are enabled or not, in JSON format.\n\n"
163
+ " -W cmakecache Print the cmake cache used for building this agent\n"
164
" -W simple-pattern pattern string\n"
165
" Check if string matches pattern and exit.\n\n"
166
#ifdef OS_WINDOWS
@@ -709,6 +710,10 @@ int netdata_main(int argc, char **argv) {
710
print_build_info_json();
711
return 0;
712
}
713
+ else if(strcmp(optarg, "cmakecache") == 0) {
714
+ print_build_info_cmake_cache();
715
+ return 0;
716
+ }
717
else if(strcmp(optarg, "keepopenfds") == 0) {
718
// Internal dev option to skip closing inherited
719
// open FDs. Useful, when we want to run the agent