Hi Matthias,

Matthias Kilian wrote on Mon, Oct 23, 2017 at 10:27:01PM +0200:

> tiff export still doesn't work).

That's strange, it just works for me with the patch as you sent it,
both for a small text-only PDF and for a large graphics-heavy PDF.

> For printing (using DXPDFWIDGET_PRINTING=true), the cmake magic
> fails to add -L${LOCALBASE}/lib when linking the xpdf executable.
> I really need some help from a cmake expert here (CMAKE_LIBRARY_PATH
> doesn't help).

As far as i understand, CMAKE_LIBRARY_PATH only tells commands like
find_library() to search such places when detecting libraries, but
doesn't by itself pass any options to the linker.

The problem is here:

  c++ [...] -o xpdf-qt/xpdf -L/usr/local/lib/qt5/.  -L/usr/X11R6/lib \
    -Wl,-rpath,/usr/local/lib/qt5/.:/usr/X11R6/lib: \
      -lQt5PrintSupport -lcups -lcups -lfreetype -lpthread \
      -lQt5Widgets -lQt5Gui -lQt5Core \
    -Wl,-rpath-link,/usr/X11R6/lib:/usr/local/lib

The path /usr/local/lib is already mentioned, but too late, after -lcups.

I poked around quite a bit but still have no idea why cmake screws
up the order of the arguments so badly.

Yet i got a bit further.  With the dirty patch below, to be applied
on top of what you sent, i got the port to build, package, pass
lib-depends-check, run, and display a "Print" menu item and dialogue.
But it is not yet useful.  The only "Printer Name" that dialogue
offers is "Print to file (PDF)", no default printer, even though:

  schwarze@isnote $ pkg_info | grep cups    
  cups-libs-2.2.4p1   CUPS libraries and headers
  schwarze@isnote $ rcctl check lpd      
  lpd(ok)

Regarding patch-xpdf-qt_CMakeLists_txt, i found no way to get the
desired effect using find_file(), find_library(), find_package(),
or something similar - everything i tried failed in various ways
for reasons that remain mysterious to me.  The only way i found was
hardcoding /usr/local/* for the "xpdf" target.

Regarding patch-xpdf-qt_XpdfWidgetPrint_cc, that looks like a
serious instance of the well-known All-the-world-is-Linux-Syndrom.

Maybe we should just give up and drop printing support from xpdf?
I mean, linking it against a behemoth like cups-libs isn't all that
nice, even if we could get it to work...

Yours,
  Ingo


--- Makefile.kili       Tue Oct 24 14:46:54 2017
+++ Makefile    Tue Oct 24 19:17:35 2017
@@ -15,9 +15,11 @@
 MODULES=       devel/cmake \
                X11/qt5
 
+LIB_DEPENDS += print/cups,-libs
+
 RUN_DEPENDS=   print/ghostscript/gnu-fonts
 
-# Add jpeg, png, tiff as rdep and bdep so cmake always pick them up and
+# Add jpeg, png, tiff as rdep and bdep so cmake always picks them up and
 # xpdf is able to export to those formats. Not strictly needed for jpeg
 # and png, because they are pulled in by qt and its dependencies, but
 # better be explicit here.
@@ -37,11 +39,12 @@
 # XXX
 # Doesn't work, neither with -DCMAKE_LIBRARY_PATH=${LOCALBASE}/lib nor
 # with CMAKE_LIBRARY_PATH=${LOCALBASE}/lib in the environment.
-# CONFIGURE_ARGS +=    -DXPDFWIDGET_PRINTING=true
+CONFIGURE_ARGS +=      -DXPDFWIDGET_PRINTING=true
 
 CXXFLAGS+=     -DLOCALBASE=\\\"${LOCALBASE}\\\"
 
-WANTLIB=       Qt5Core Qt5Gui Qt5Widgets freetype c m png pthread \
+WANTLIB=       Qt5Core Qt5Gui Qt5PrintSupport Qt5Widgets \
+               c cups freetype m png pthread \
                ${COMPILER_LIBCXX} z
 
 NO_TEST=       Yes
Index: patches/patch-xpdf-qt_CMakeLists_txt
===================================================================
RCS file: patches/patch-xpdf-qt_CMakeLists_txt
diff -N patches/patch-xpdf-qt_CMakeLists_txt
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-xpdf-qt_CMakeLists_txt        24 Oct 2017 17:26:44 -0000
@@ -0,0 +1,23 @@
+$OpenBSD$
+
+Index: xpdf-qt/CMakeLists.txt
+--- xpdf-qt/CMakeLists.txt.orig
++++ xpdf-qt/CMakeLists.txt
+@@ -40,6 +40,7 @@ if ((QT4_FOUND OR Qt5Widgets_FOUND)
+     else ()
+       add_definitions(-DXPDFWIDGET_PRINTING=1)
+       set(XPDFWIDGET_PRINT_MODULES XpdfWidgetPrint.cc)
++      include_directories(/usr/local/include)
+     endif ()
+   else ()
+     set(XPDFWIDGET_PRINT_MODULES "")
+@@ -80,7 +81,8 @@ if ((QT4_FOUND OR Qt5Widgets_FOUND)
+     ${XPDFWIDGET_MOC}
+     ${XPDF_ICONS}
+   )
+-  target_link_libraries(xpdf ${QT_LIBRARIES} ${EXTRA_QT_LIBRARIES}
++  target_link_libraries(xpdf -L/usr/local/lib 
++                        ${QT_LIBRARIES} ${EXTRA_QT_LIBRARIES}
+                         ${FREETYPE_LIBRARY} ${FREETYPE_OTHER_LIBS}
+                         ${DTYPE_LIBRARY} ${LCMS_LIBRARY}
+                         ${CMAKE_THREAD_LIBS_INIT})
Index: patches/patch-xpdf-qt_XpdfWidgetPrint_cc
===================================================================
RCS file: patches/patch-xpdf-qt_XpdfWidgetPrint_cc
diff -N patches/patch-xpdf-qt_XpdfWidgetPrint_cc
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-xpdf-qt_XpdfWidgetPrint_cc    24 Oct 2017 17:26:44 -0000
@@ -0,0 +1,23 @@
+$OpenBSD$
+
+Index: xpdf-qt/XpdfWidgetPrint.cc
+--- xpdf-qt/XpdfWidgetPrint.cc.orig
++++ xpdf-qt/XpdfWidgetPrint.cc
+@@ -21,7 +21,7 @@
+ #elif defined(__APPLE__)
+ #  include <CoreFoundation/CoreFoundation.h>
+ #  include <ApplicationServices/ApplicationServices.h>
+-#elif defined(__linux__)
++#elif defined(__linux__) || defined(__OpenBSD__)
+ #  include "PSOutputDev.h"
+ #  include <cups/cups.h>
+ #endif
+@@ -315,7 +315,7 @@ XpdfWidget::ErrorCode printPDF(PDFDoc *doc, QPrinter *
+ // Linux
+ //------------------------------------------------------------------------
+ 
+-#elif defined(__linux__)
++#elif defined(__linux__) || defined(__OpenBSD__)
+ 
+ static void fileOut(void *stream, const char *data, int len) {
+   fwrite(data, 1, len, (FILE *)stream);

Reply via email to