Control: tags -1 + patch
Please find attached a patch. As I know absolutely nothing about this
package, I was unable to test it properly. I added the following
snippet to /etc/ganglia/gmond.conf (taken from gmond.conf manpage):
collection_group {
collect_every = 60
time_threshold = 300
metric {
name_match = "multicpu_([a-z]+)([0-9]+)"
value_threshold = 1.0
title = "CPU-\\2 \\1"
}
}
The output of "gmond -m" doesn't change (maybe that's expected) but at
least it doesn't crash. According to INSTALL (as well as my humble
reading of the code), pcre is used only for parsing name_match in the
configuration file. But it seems I cannot trigger a match or do
something else improperly.
Please test and let me know if corrections are needed.
>From 7d05aca52f9cf1b579b80f719bed47cfd6ba7b7b Mon Sep 17 00:00:00 2001
From: Yavor Doganov <[email protected]>
Date: Tue, 5 Dec 2023 19:26:34 +0200
Subject: [PATCH] Port to PCRE2 (#1000041).
---
debian/changelog | 5 ++
debian/control | 2 +-
debian/patches/pcre2.patch | 130 +++++++++++++++++++++++++++++++++++++
debian/patches/series | 1 +
4 files changed, 137 insertions(+), 1 deletion(-)
create mode 100644 debian/patches/pcre2.patch
diff --git a/debian/changelog b/debian/changelog
index 081dbec..7c78336 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,13 @@
ganglia (3.7.2-7) UNRELEASED; urgency=medium
+ [ Marcos Fouces ]
* Remove Stuart from uploaders as he changed to the Emeritus status.
(Closes: #1011995).
+ [ Yavor Doganov ]
+ * debian/patches/pcre2.patch: New; port to PCRE2 (Closes: #1000041).
+ * debian/control (Build-Depends): Replace libpcre3-dev with libpcre2-dev.
+
-- Marcos Fouces <[email protected]> Sun, 29 May 2022 23:53:57 +0200
ganglia (3.7.2-6) unstable; urgency=medium
diff --git a/debian/control b/debian/control
index 406ff30..40ade70 100644
--- a/debian/control
+++ b/debian/control
@@ -3,7 +3,7 @@ Section: net
Priority: optional
Maintainer: Marcos Fouces <[email protected]>
Homepage: http://ganglia.info/
-Build-Depends: debhelper-compat (=13), librrd-dev, libapr1-dev, libexpat1-dev, libconfuse-dev, po-debconf, libxml2-dev, libdbi0-dev, libpcre3-dev, gperf, rsync, libkvm-dev [kfreebsd-any], pkg-config, libz-dev, libtirpc-dev
+Build-Depends: debhelper-compat (=13), librrd-dev, libapr1-dev, libexpat1-dev, libconfuse-dev, po-debconf, libxml2-dev, libdbi0-dev, libpcre2-dev, gperf, rsync, libkvm-dev [kfreebsd-any], pkg-config, libz-dev, libtirpc-dev
Standards-Version: 4.6.0
Vcs-Git: https://salsa.debian.org/debian/ganglia.git
Vcs-Browser: https://salsa.debian.org/debian/ganglia
diff --git a/debian/patches/pcre2.patch b/debian/patches/pcre2.patch
new file mode 100644
index 0000000..54ecaa0
--- /dev/null
+++ b/debian/patches/pcre2.patch
@@ -0,0 +1,130 @@
+Description: Port to PCRE2.
+Bug-Debian: https://bugs.debian.org/1000041
+Author: Yavor Doganov <[email protected]>
+Forwarded: no
+Last-Update: 2023-12-05
+---
+
+--- ganglia.orig/configure.ac
++++ ganglia/configure.ac
+@@ -520,14 +520,20 @@
+ echo "Added -L$libpcrepath/${LIB_SUFFIX} to LDFLAGS"
+ fi
+ if test x"$libpcre" == xyes ; then
+- AC_CHECK_HEADERS([pcre/pcre.h pcre.h])
+- AC_CHECK_LIB(pcre, pcre_compile)
+- if test x"$ac_cv_lib_pcre_pcre_compile" = xyes; then
+- echo "Found a suitable pcre library"
+- else
+- echo "libpcre not found, specify --with-libpcre=no to build without PCRE support"
+- exit 1;
+- fi
++ AC_CHECK_HEADERS([pcre2.h], [], [], [[#define PCRE2_CODE_UNIT_WIDTH 8]])
++ LIBS="$LIBS -lpcre2-8"
++ AC_MSG_CHECKING([for pcre2_match_data_create in -lpcre2-8])
++ AC_LINK_IFELSE(
++ [AC_LANG_PROGRAM([[#define PCRE2_CODE_UNIT_WIDTH 8
++ #include <pcre2.h>
++ ]],
++ [[pcre2_match_data *md;
++ md = pcre2_match_data_create (16, NULL);]])],
++ [AC_DEFINE([HAVE_LIBPCRE], [1], [Define if the PCRE2 library is available])
++ AC_MSG_RESULT([yes])
++ AC_MSG_RESULT([Found a suitable pcre library])],
++ [AC_MSG_RESULT([no])
++ AC_MSG_FAILURE([libpcre not found, specify --with-libpcre=no to build without PCRE support], [1])])
+ else
+ echo "building without PCRE support"
+ fi
+--- ganglia.orig/gmond/gmond.c
++++ ganglia/gmond/gmond.c
+@@ -38,11 +38,8 @@
+ #include <apr_version.h>
+
+ #ifdef HAVE_LIBPCRE
+-#if defined (HAVE_PCRE_PCRE_H)
+-#include <pcre/pcre.h>
+-#else
+-#include <pcre.h>
+-#endif
++#define PCRE2_CODE_UNIT_WIDTH 8
++#include <pcre2.h>
+ #endif
+
+ #include "cmdline.h" /* generated by cmdline.sh which runs gengetopt */
+@@ -2650,10 +2647,11 @@
+
+ if(name_match != NULL)
+ {
+- pcre *pcre_re;
+- const char *pcre_err_ptr;
+- int pcre_err_offset;
+- int pcre_ovector[PCRE_OVECCOUNT];
++ pcre2_code *pcre_re;
++ pcre2_match_data *pcre_md;
++ int pcre_err_ptr;
++ size_t pcre_err_offset;
++ size_t *pcre_ovector;
+ int pcre_rc;
+
+ apr_hash_index_t *hi;
+@@ -2662,9 +2660,9 @@
+ const char *key;
+ int found = 0;
+
+- if((pcre_re = pcre_compile(name_match, 0, &pcre_err_ptr, &pcre_err_offset, NULL)) == NULL)
++ if((pcre_re = pcre2_compile((PCRE2_SPTR)name_match, PCRE2_ZERO_TERMINATED, 0, &pcre_err_ptr, &pcre_err_offset, NULL)) == NULL)
+ {
+- err_msg ("pcre_compile failed on %s\n", name_match);
++ err_msg ("pcre2_compile failed on %s\n", name_match);
+ exit (1);
+ }
+
+@@ -2676,6 +2674,8 @@
+ exit(EXIT_FAILURE);
+ }
+
++ pcre_md = pcre2_match_data_create(PCRE_OVECCOUNT, NULL);
++
+ for(hi = apr_hash_first(p, metric_callbacks);
+ hi;
+ hi = apr_hash_next(hi))
+@@ -2683,17 +2683,17 @@
+ Ganglia_metric_callback *cb;
+
+ apr_hash_this(hi, (const void**)&key, NULL, &val);
+- if((pcre_rc = pcre_exec(pcre_re, NULL, key, strlen(key), 0, 0, pcre_ovector, PCRE_OVECCOUNT)) < 1)
++ if((pcre_rc = pcre2_match(pcre_re, (PCRE2_SPTR)key, strlen(key), 0, 0, pcre_md, NULL)) < 1)
+ {
+ switch(pcre_rc)
+ {
+- case PCRE_ERROR_NOMATCH:
++ case PCRE2_ERROR_NOMATCH:
+ break;
+ case 0:
+ /* output vector not big enough */
+ default:
+ /* unexpected error */
+- err_msg ("unexpected pcre_exec error\n");
++ err_msg ("unexpected pcre2_match error\n");
+ exit (1);
+ }
+ }
+@@ -2703,6 +2703,8 @@
+ char *title_tmpl = cfg_getstr ( metric, "title");
+ float value_threshold = cfg_getfloat( metric, "value_threshold");
+
++ pcre_ovector = pcre2_get_ovector_pointer(pcre_md);
++
+ if(title_tmpl != NULL)
+ {
+ struct iovec *ptrs;
+@@ -2772,6 +2774,8 @@
+ if (!found)
+ err_msg("Unable to find any metric information for '%s'. Possible that a module has not been loaded.\n", name_match);
+
++ pcre2_match_data_free(pcre_md);
++ pcre2_code_free(pcre_re);
+ }
+ else
+ #endif
diff --git a/debian/patches/series b/debian/patches/series
index eb6441a..cc1500c 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +1,2 @@
1_fix-minor-spelling-errors.patch
+pcre2.patch
--
2.43.0