summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRuediger Meier2018-06-12 14:04:06 +0200
committerRuediger Meier2018-11-12 19:40:33 +0100
commit04ae85a7e57691983c25f0917cfb8ae4dcb462d5 (patch)
tree405468de229916a7395aa521941907caf3adc699
parentMerge branch 'hardlink-import' into hardlink (diff)
downloadkernel-qcow2-util-linux-04ae85a7e57691983c25f0917cfb8ae4dcb462d5.tar.gz
kernel-qcow2-util-linux-04ae85a7e57691983c25f0917cfb8ae4dcb462d5.tar.xz
kernel-qcow2-util-linux-04ae85a7e57691983c25f0917cfb8ae4dcb462d5.zip
hardlink: enable build with and without pcre2
Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
-rw-r--r--.gitignore1
-rw-r--r--configure.ac12
-rw-r--r--misc-utils/Makemodule.am12
-rw-r--r--misc-utils/hardlink.c19
4 files changed, 42 insertions, 2 deletions
diff --git a/.gitignore b/.gitignore
index 9f2fb17db..b582a8627 100644
--- a/.gitignore
+++ b/.gitignore
@@ -96,6 +96,7 @@ ylwrap
/fsfreeze
/fstrim
/getopt
+/hardlink
/hexdump
/hwclock
/ionice
diff --git a/configure.ac b/configure.ac
index b3430dac4..260283cf2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1372,6 +1372,18 @@ UL_REQUIRES_HAVE([setpriv], [linux_securebits_h], [securebits.h header file])
UL_REQUIRES_HAVE([setpriv], [cap_ng], [libcap-ng library])
AM_CONDITIONAL([BUILD_SETPRIV], [test "x$build_setpriv" = xyes])
+PKG_CHECK_MODULES([PCRE], [libpcre2-8], [have_pcre=yes], [have_pcre=no])
+AS_IF([test "x$have_pcre" = xyes ], [
+ AC_DEFINE([HAVE_PCRE], [1], [Define if libpcre2 is available])
+])
+AM_CONDITIONAL([HAVE_PCRE], [test "x$have_pcre" = xyes])
+
+AC_ARG_ENABLE([hardlink],
+ AS_HELP_STRING([--disable-hardlink], [do not build hardlink]),
+ [], [UL_DEFAULT_ENABLE([hardlink], [check])]
+)
+UL_BUILD_INIT([hardlink])
+AM_CONDITIONAL([BUILD_HARDLINK], [test "x$build_hardlink" = xyes])
AC_ARG_ENABLE([eject],
AS_HELP_STRING([--disable-eject], [do not build eject]),
diff --git a/misc-utils/Makemodule.am b/misc-utils/Makemodule.am
index 36195b7a3..30b7c2f0f 100644
--- a/misc-utils/Makemodule.am
+++ b/misc-utils/Makemodule.am
@@ -211,3 +211,15 @@ fincore_SOURCES = misc-utils/fincore.c
fincore_LDADD = $(LDADD) libsmartcols.la libcommon.la
fincore_CFLAGS = $(AM_CFLAGS) -I$(ul_libsmartcols_incdir)
endif
+
+if BUILD_HARDLINK
+usrbin_exec_PROGRAMS += hardlink
+hardlink_SOURCES = misc-utils/hardlink.c
+hardlink_LDADD = $(LDADD) libcommon.la
+hardlink_CFLAGS = $(AM_CFLAGS)
+if HAVE_PCRE
+hardlink_LDADD += $(PCRE_LIBS)
+hardlink_CFLAGS += $(PCRE_CFLAGS)
+endif
+dist_man_MANS += misc-utils/hardlink.1
+endif
diff --git a/misc-utils/hardlink.c b/misc-utils/hardlink.c
index 8e74ca021..ba519993a 100644
--- a/misc-utils/hardlink.c
+++ b/misc-utils/hardlink.c
@@ -22,7 +22,6 @@
/* Changes by Todd Lewis that adds option -x to exclude files with pcre lib */
#define _GNU_SOURCE
-#define PCRE2_CODE_UNIT_WIDTH 8
#include <sys/types.h>
#include <stdlib.h>
#include <stdio.h>
@@ -33,16 +32,21 @@
#include <dirent.h>
#include <fcntl.h>
#include <errno.h>
-#include <pcre2.h>
+#ifdef HAVE_PCRE
+# define PCRE2_CODE_UNIT_WIDTH 8
+# include <pcre2.h>
+#endif
#define NHASH (1<<17) /* Must be a power of 2! */
#define NIOBUF (1<<12)
#define NAMELEN 4096
#define NBUF 64
+#ifdef HAVE_PCRE
pcre2_code *re;
PCRE2_SPTR exclude_pattern;
pcre2_match_data *match_data;
+#endif
struct _f;
typedef struct _h {
@@ -336,8 +340,10 @@ int main(int argc, char **argv)
{
int ch;
int i;
+#ifdef HAVE_PCRE
int errornumber;
PCRE2_SIZE erroroffset;
+#endif
dynstr nam1 = {NULL, 0};
while ((ch = getopt (argc, argv, "cnvhfx:")) != -1) {
switch (ch) {
@@ -354,7 +360,12 @@ int main(int argc, char **argv)
force=1;
break;
case 'x':
+#ifdef HAVE_PCRE
exclude_pattern = (PCRE2_SPTR)optarg;
+#else
+ fprintf(stderr, "option x not supported (built without pcre2)\n");
+ exit(1);
+#endif
break;
case 'h':
default:
@@ -363,6 +374,7 @@ int main(int argc, char **argv)
}
if (optind >= argc)
usage(argv[0]);
+#ifdef HAVE_PCRE
if (exclude_pattern) {
re = pcre2_compile(
exclude_pattern, /* the pattern */
@@ -379,6 +391,7 @@ int main(int argc, char **argv)
}
match_data = pcre2_match_data_create_from_pattern(re, NULL);
}
+#endif
for (i = optind; i < argc; i++)
rf(argv[i]);
while (dirs) {
@@ -403,6 +416,7 @@ int main(int argc, char **argv)
if (!di->d_name[1] || !strcmp(di->d_name, ".."))
continue;
}
+#ifdef HAVE_PCRE
if (re && pcre2_match(
re, /* compiled regex */
(PCRE2_SPTR)di->d_name,
@@ -418,6 +432,7 @@ int main(int argc, char **argv)
}
continue;
}
+#endif
{
size_t subdirlen;
growstr(&nam1, add2(nam1baselen, subdirlen = strlen(di->d_name)));