summaryrefslogtreecommitdiff
path: root/print
diff options
context:
space:
mode:
authorBoris Samorodov <bsam@FreeBSD.org>2019-12-04 15:21:49 +0000
committerBoris Samorodov <bsam@FreeBSD.org>2019-12-04 15:21:49 +0000
commit6a5ac4b0e4cb080f1ec37e0feeb667d925192c9e (patch)
treeccc7d890c7c3b8482ec7f4e6f3ec681d25d47c19 /print
parente40c0b0ccdce77df2032458a81b72774e2fee18e (diff)
downloadfreebsd-ports-6a5ac4b0e4cb080f1ec37e0feeb667d925192c9e.zip
print/photoprint: Fix build with gitenprint 5.3.
Let's try to make photoprint and libgutenprint friends. Bump PORTREVISION. It is not needed by rules, but I'd prefer to.
Diffstat (limited to 'print')
-rw-r--r--print/photoprint/Makefile6
-rw-r--r--print/photoprint/files/patch-gp_cppsupport_gprinter.cpp129
2 files changed, 130 insertions, 5 deletions
diff --git a/print/photoprint/Makefile b/print/photoprint/Makefile
index 759b892059ea..c335dd2a870f 100644
--- a/print/photoprint/Makefile
+++ b/print/photoprint/Makefile
@@ -2,7 +2,7 @@
PORTNAME= photoprint
DISTVERSION= 0.4.2-pre2
-PORTREVISION= 8
+PORTREVISION= 9
CATEGORIES= print graphics
MASTER_SITES= http://www.blackfiveimaging.co.uk/photoprint/
@@ -11,8 +11,6 @@ COMMENT= Utility to print multiple images per sheet
LICENSE= GPLv2
-BROKEN= fails to build
-
LIB_DEPENDS= libcups.so:print/cups \
libfontconfig.so:x11-fonts/fontconfig \
libfreetype.so:print/freetype2 \
@@ -32,8 +30,6 @@ LIBS+= -lX11
INSTALLS_ICONS= yes
post-patch:
- @${REINPLACE_CMD} -e 's|glib/gstrfuncs.h|glib.h|g' \
- ${WRKSRC}/gp_cppsupport/gprinter.cpp
@${REINPLACE_CMD} -e 's|cups/cups.h|cups/ppd.h|g' \
${WRKSRC}/stp_support/printerqueues_unix.c
diff --git a/print/photoprint/files/patch-gp_cppsupport_gprinter.cpp b/print/photoprint/files/patch-gp_cppsupport_gprinter.cpp
new file mode 100644
index 000000000000..8ce2c342e01c
--- /dev/null
+++ b/print/photoprint/files/patch-gp_cppsupport_gprinter.cpp
@@ -0,0 +1,129 @@
+--- gp_cppsupport/gprinter.cpp.orig 2010-04-30 03:44:31.000000000 +0400
++++ gp_cppsupport/gprinter.cpp 2019-12-04 18:01:52.055955000 +0300
+@@ -22,7 +22,6 @@
+ #include <gutenprint/gutenprint.h>
+
+ #include <glib.h>
+-#include <glib/gstrfuncs.h>
+ #include <glib/gprintf.h>
+
+ #include "../imagesource/imagesource.h"
+@@ -418,59 +417,72 @@ void GPrinter::Print(ImageSource *src,int xpos,int ypo
+
+ void GPrinter::GetImageableArea()
+ {
+-// pagewidth=pageheight=0;
+-// stp_get_media_size(stpvars, &pagewidth, &pageheight);
++ stp_dimension_t double_pagewidth, double_pageheight;
++ stp_get_media_size(stpvars, &double_pagewidth, &double_pageheight);
+
+-// Debug[TRACE] << "Media size returned: " << pagewidth << " by " << pageheight << endl;
++ // *** HACK ***
++ // Gutenprint uses doubles... Either rewrite all funclions to use doubles or deal with it just here.
+
+- const char *papersize=stp_get_string_parameter(stpvars,"PageSize");
+- bool gotpapersize=false;
+- if(papersize)
+- {
+- const stp_papersize_t *paper=stp_get_papersize_by_name(papersize);
+- if(paper)
++ pagewidth=(int)double_pagewidth;
++ pageheight=(int)double_pageheight;
++
++ Debug[TRACE] << "Media size returned: " << pagewidth << " by " << pageheight << endl;
++
++ // From gutenprint TFM:
++ // If the media size is invalid, width and height will be set to -1.
++
++ if (pagewidth != -1 && pageheight != -1) {
++
++ // From gutenprint TFM:
++ // Values of 0 for width or height indicate that the dimension
++ // is variable, so that custom page sizes or roll paper can be used.
++ // In this case, the size limit should be used to determine maximum and
++ // minimum values permitted.
++
++ if(!pagewidth)
+ {
+- gotpapersize=true;
+- if(paper->width)
+- {
+- pagewidth=minwidth=maxwidth=paper->width;
+- stp_set_page_width(stpvars,pagewidth);
+- Debug[TRACE] << "Width: " << pagewidth << endl;
+- }
+- else
+- {
+- int mw,mh,nw,nh;
+- pagewidth=stp_get_page_width(stpvars);
+- stp_get_size_limit(stpvars,&mw,&mh,&nw,&nh);
+- minwidth=nw;
+- maxwidth=mw;
+- Debug[TRACE] << "Custom width..." << endl;
+- }
+- if(paper->height)
+- {
+- pageheight=minheight=maxheight=paper->height;
+- stp_set_page_height(stpvars,pageheight);
+- Debug[TRACE] << "Height: " << pageheight << endl;
+- }
+- else
+- {
+- int mw,mh,nw,nh;
+- pageheight=stp_get_page_height(stpvars);
+- stp_get_size_limit(stpvars,&mw,&mh,&nw,&nh);
+- minheight=nh;
+- maxheight=mh;
+- Debug[TRACE] << "Custom height..." << endl;
+- }
++ stp_dimension_t dmw,dmh,dnw,dnh;
++ double_pagewidth=stp_get_page_width(stpvars);
++ stp_get_size_limit(stpvars,&dmw,&dmh,&dnw,&dnh);
++
++ // *** HACK ***
++ // Gutenprint uses doubles... Either rewrite all funclions to use doubles or deal with it just here.
++
++ minwidth=(int)dnw;
++ maxwidth=(int)dmw;
++ Debug[TRACE] << "Custom width..." << endl;
+ }
++
++ if(!pageheight)
++ {
++ stp_dimension_t dmw,dmh,dnw,dnh;
++ double_pageheight=stp_get_page_height(stpvars);
++ stp_get_size_limit(stpvars,&dmw,&dmh,&dnw,&dnh);
++
++ // *** HACK ***
++ // Gutenprint uses doubles... Either rewrite all funclions to use doubles or deal with it just here.
++
++ minheight=(int)dnh;
++ maxheight=(int)dmh;
++ Debug[TRACE] << "Custom height..." << endl;
++ }
+ }
+- if(!gotpapersize)
+- {
+- pagewidth=pageheight=0;
+- stp_get_media_size(stpvars, &pagewidth, &pageheight);
+- }
++ else {
++ // How should we treat an invalid media size?
++ }
+
++ stp_dimension_t double_l,double_r,double_t,double_b;
++ stp_get_imageable_area(stpvars, &double_l, &double_r, &double_b, &double_t);
++
+ int l,r,t,b;
+- stp_get_imageable_area(stpvars, &l, &r, &b, &t);
++
++ // *** HACK ***
++ // Gutenprint uses doubles... Either rewrite all funclions to use doubles or deal with it just here.
++
++ l=(int)double_l;
++ r=(int)double_r;
++ t=(int)double_t;
++ b=(int)double_b;
+
+ Debug[TRACE] << "Imageable area from GP: L: " << l << ", R: " << r << ", T: " << t << ", B: " << b << endl;
+