On Tue, Mar 14, 2017 at 09:35:37AM +0100, Reinhold Straub wrote:
> ok?
> 
> On 06.03.17 18:18, Reinhold Straub wrote:
> > Hi all,
> > 
> > pdfgrep has been updated to v. 2.0.1
> > 
> > It has a new option: --cache, which needs additional dependencies and some 
> > modification to the pledge(2) syscalls.
> > 
> > Most of our previous patches have been accepted upstream.

Thanks. Your patch didn't apply cleanly, so I regenerated it, see below.
Apply with 'patch -E'.

Your diff looks good and the port builds fine and all tests pass.
However, I ran into the following problem with any pdf file:

$ LC_CTYPE=en_US.UTF-8 pdfgrep RFC /tmp/slides.pdf
terminate called after throwing an instance of 'std::runtime_error'
  what():  locale::facet::_S_create_c_locale name not valid
Abort trap (core dumped)

This is new, the old port works fine in the UTF-8 locale.

Unsurprisingly, the problem is the locale call in src/pdfgrep.cc

   434          // Set locale to user-preference. If this locale is an UTF-8 
locale, the
   435          // regex-functions regcomp/regexec become unicode aware, which 
means
   436          // e.g. that '.' will match a unicode character, not a single 
byte.
   437          locale::global(locale(""));

commenting it out works around the problem. I have no idea what the
proper fix is.

FWIW here's the backtrace which isn't that useful thanks to the Dwarf
Error:

(gdb) bt
#0  0x0000069bf4e4dd2a in thrkill () at <stdin>:2
#1  0x0000069bf4e608f9 in *_libc_abort () at /usr/src/lib/libc/stdlib/abort.c:52
#2  0x0000069bf87feef5 in __gnu_cxx::__verbose_terminate_handler ()
    at 
/usr/obj/ports/gcc-4.9.4/gcc-4.9.4/libstdc++-v3/libsupc++/vterminate.cc:95
Die: DW_TAG_unspecified_type (abbrev = 26, offset = 139365)
        has children: FALSE
        attributes:
                DW_AT_name (DW_FORM_strp) string: "decltype(nullptr)"
Dwarf Error: Cannot find type of die [in module 
/usr/local/lib/libestdc++.so.17.0]

Index: Makefile
===================================================================
RCS file: /var/cvs/ports/textproc/pdfgrep/Makefile,v
retrieving revision 1.5
diff -u -p -r1.5 Makefile
--- Makefile    15 Jan 2016 19:57:24 -0000      1.5
+++ Makefile    14 Mar 2017 09:37:14 -0000
@@ -2,7 +2,7 @@
 
 COMMENT =              tool to search text in PDF files
 
-DISTNAME =             pdfgrep-1.4.1
+DISTNAME =             pdfgrep-2.0.1
 
 CATEGORIES =           textproc
 
@@ -18,11 +18,12 @@ MODGCC4_ARCHS =             *
 MODGCC4_LANGS =                c++
 
 # uses pledge()
-WANTLIB +=             c m pthread poppler-cpp pcre
+WANTLIB +=             c m pthread poppler-cpp pcre gcrypt gpg-error
 
 MASTER_SITES =         https://pdfgrep.org/download/
 
-LIB_DEPENDS =          print/poppler
+LIB_DEPENDS =          print/poppler \
+                       security/libgcrypt
 TEST_DEPENDS =         devel/dejagnu \
                        print/texlive/base
 
Index: distinfo
===================================================================
RCS file: /var/cvs/ports/textproc/pdfgrep/distinfo,v
retrieving revision 1.3
diff -u -p -r1.3 distinfo
--- distinfo    15 Jan 2016 19:42:40 -0000      1.3
+++ distinfo    14 Mar 2017 09:34:21 -0000
@@ -1,2 +1,2 @@
-SHA256 (pdfgrep-1.4.1.tar.gz) = 2wSiEOa7e3fNbFSxfw9v7Q0SOoX5elQbJwc2pdOEDyw=
-SIZE (pdfgrep-1.4.1.tar.gz) = 151926
+SHA256 (pdfgrep-2.0.1.tar.gz) = A3DXRLMHLUc4Pb7Sy5yLC2S4PAhNpaiWH41Lx2aelB4=
+SIZE (pdfgrep-2.0.1.tar.gz) = 187217
Index: patches/patch-src_pdfgrep_cc
===================================================================
RCS file: /var/cvs/ports/textproc/pdfgrep/patches/patch-src_pdfgrep_cc,v
retrieving revision 1.1
diff -u -p -r1.1 patch-src_pdfgrep_cc
--- patches/patch-src_pdfgrep_cc        15 Jan 2016 19:42:40 -0000      1.1
+++ patches/patch-src_pdfgrep_cc        14 Mar 2017 10:32:18 -0000
@@ -1,27 +1,40 @@
-$OpenBSD: patch-src_pdfgrep_cc,v 1.1 2016/01/15 19:42:40 sthen Exp $
---- src/pdfgrep.cc.orig        Wed Sep 16 21:06:49 2015
-+++ src/pdfgrep.cc     Fri Jan 15 11:39:19 2016
-@@ -569,6 +569,11 @@ void handle_poppler_errors(const std::string &msg, voi
- 
+$OpenBSD$
+--- src/pdfgrep.cc.orig        Sat Mar  4 09:11:53 2017
++++ src/pdfgrep.cc     Tue Mar 14 11:32:03 2017
+@@ -423,6 +423,12 @@ static void handle_poppler_errors(const string &msg, v
  int main(int argc, char** argv)
  {
-+      if (pledge("stdio rpath tty", NULL) == -1) {
+       Options options;
++
++      if (pledge("stdio rpath wpath cpath tty", NULL) == -1) {
 +              fprintf (stderr, "pdfgrep: pledge\n");
 +              exit (1);
 +      }
 +
-       init_colors();
+       init_colors(options.outconf.colors);
  
-       enum re_engine_type {
-@@ -773,6 +778,11 @@ int main(int argc, char** argv)
-       } else if (context == -2) {
-               // on non-terminals, always print the whole line
-               context = -1;
-+      }
-+
-+      if (pledge("stdio rpath", NULL) == -1) {
+       // Set locale to user-preference. If this locale is an UTF-8 locale, the
+@@ -649,6 +655,11 @@ int main(int argc, char** argv)
+       bool color_tty = isatty(STDOUT_FILENO) && getenv("TERM") &&
+               strcmp(getenv("TERM"), "dumb");
+ 
++      if (pledge("stdio rpath wpath cpath", NULL) == -1) {
 +              fprintf (stderr, "pdfgrep: pledge\n");
 +              exit (1);
++      }
++
+       options.outconf.color =
+               use_colors == COLOR_ALWAYS
+               || (use_colors == COLOR_AUTO && color_tty);
+@@ -689,6 +700,11 @@ int main(int argc, char** argv)
+                       char *limitstr = getenv("PDFGREP_CACHE_LIMIT");
+                       unsigned int limit = limitstr ? strtoul(limitstr, NULL, 
10) : 200;
+                       limit_cachesize(options.cache_directory.c_str(), limit);
++              }
++      } else {
++              if (pledge("stdio rpath", NULL) == -1) {
++                      fprintf (stderr, "pdfgrep: pledge\n");
++                      exit (1);
+               }
        }
  
-       if (excludes_empty(includes))
Index: patches/patch-src_regengine_cc
===================================================================
RCS file: patches/patch-src_regengine_cc
diff -N patches/patch-src_regengine_cc
--- patches/patch-src_regengine_cc      15 Jan 2016 19:42:40 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,16 +0,0 @@
-$OpenBSD: patch-src_regengine_cc,v 1.1 2016/01/15 19:42:40 sthen Exp $
-
-Convert empty expressions into something that regex(3) will accept.
-
---- src/regengine.cc.orig      Fri Jan 15 19:37:30 2016
-+++ src/regengine.cc   Fri Jan 15 19:38:06 2016
-@@ -34,6 +34,9 @@ PosixRegex::PosixRegex(const char *pattern, bool case_
- {
-       int regex_flags = REG_EXTENDED | (case_insensitive ? REG_ICASE : 0);
- 
-+      if (strncmp(pattern, "", 2) == 0) {
-+              pattern = "()";
-+      }
-       int err = regcomp(&this->regex, pattern, regex_flags);
-       if(err) {
-               char err_msg[256];
Index: patches/patch-testsuite_Makefile_in
===================================================================
RCS file: patches/patch-testsuite_Makefile_in
diff -N patches/patch-testsuite_Makefile_in
--- patches/patch-testsuite_Makefile_in 15 Jan 2016 19:42:40 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,12 +0,0 @@
-$OpenBSD: patch-testsuite_Makefile_in,v 1.1 2016/01/15 19:42:40 sthen Exp $
---- testsuite/Makefile.in.orig Tue Sep 29 18:18:42 2015
-+++ testsuite/Makefile.in      Tue Sep 29 18:18:27 2015
-@@ -643,7 +643,7 @@ uninstall-am:
- .PRECIOUS: Makefile
- 
- 
--export DEJAGNU
-+# export DEJAGNU
- 
- # Tell versions [3.59,3.63) of GNU make to not export all variables.
- # Otherwise a system limit (for SysV at least) may be exceeded.
Index: patches/patch-testsuite_lib_pdfgrep_exp
===================================================================
RCS file: patches/patch-testsuite_lib_pdfgrep_exp
diff -N patches/patch-testsuite_lib_pdfgrep_exp
--- patches/patch-testsuite_lib_pdfgrep_exp     15 Jan 2016 19:42:40 -0000      
1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,12 +0,0 @@
-$OpenBSD: patch-testsuite_lib_pdfgrep_exp,v 1.1 2016/01/15 19:42:40 sthen Exp $
---- testsuite/lib/pdfgrep.exp.orig     Wed Jan 13 15:06:57 2016
-+++ testsuite/lib/pdfgrep.exp  Wed Jan 13 15:12:42 2016
-@@ -213,7 +213,7 @@ proc reset_configuration {} {
- 
- # The directory where the PDFs will be generated.
- # NOTE This will frequently be removed, so don't put important data there
--set pdfdir [exec mktemp --tmpdir -d pdfgrep_tests.XXXXXXXXXX]
-+set pdfdir [exec mktemp -t -d pdfgrep_tests.XXXXXXXXXX]
- 
- 
- # Delete $pdfdir recursively and create it anew
Index: patches/patch-testsuite_pdfgrep_tests_exit_status_exp
===================================================================
RCS file: patches/patch-testsuite_pdfgrep_tests_exit_status_exp
diff -N patches/patch-testsuite_pdfgrep_tests_exit_status_exp
--- patches/patch-testsuite_pdfgrep_tests_exit_status_exp       15 Jan 2016 
19:42:40 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,19 +0,0 @@
-$OpenBSD: patch-testsuite_pdfgrep_tests_exit_status_exp,v 1.1 2016/01/15 
19:42:40 sthen Exp $
---- testsuite/pdfgrep.tests/exit_status.exp.orig       Wed Jan 13 15:07:29 2016
-+++ testsuite/pdfgrep.tests/exit_status.exp    Wed Jan 13 15:10:27 2016
-@@ -8,7 +8,7 @@ clear_pdfdir
- set pdf [mkpdf exit-status "foobar"]
- 
- pdfgrep foobar $pdf
--
-+expect eof
- expect_exit_status 0
- 
- ########################################
-@@ -40,5 +40,5 @@ clear_pdfdir
- 
- # $pdf doesn't exist anymore
- pdfgrep foobar $pdf
--
-+expect eof
- expect_exit_status 2
Index: patches/patch-testsuite_pdfgrep_tests_usage_exp
===================================================================
RCS file: patches/patch-testsuite_pdfgrep_tests_usage_exp
diff -N patches/patch-testsuite_pdfgrep_tests_usage_exp
--- patches/patch-testsuite_pdfgrep_tests_usage_exp     15 Jan 2016 19:42:40 
-0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,12 +0,0 @@
-$OpenBSD: patch-testsuite_pdfgrep_tests_usage_exp,v 1.1 2016/01/15 19:42:40 
sthen Exp $
---- testsuite/pdfgrep.tests/usage.exp.orig     Wed Jan 13 15:07:55 2016
-+++ testsuite/pdfgrep.tests/usage.exp  Wed Jan 13 15:11:50 2016
-@@ -5,7 +5,7 @@ expect {
-     -re "^Usage: .*" { pass $test }
-     default { fail $test }
- }
--
-+expect eof
- expect_exit_status 2
- 
- # Also look that nothing is written to stdout

Reply via email to