OpenPrinting / cups-filters

filters, backends, driverless utility, ... - Everything which CUPS 2.x needs to be used on non-Mac systems
Apache License 2.0
157 stars 126 forks source link

error: ‘Rectangle’ in ‘class QPDFObjectHandle’ does not name a type #110

Closed paulmenzel closed 5 years ago

paulmenzel commented 5 years ago

Trying to build cups-filters with QPDF 8.4.0, it fails with the error below.

cups-filters-1.22.5$ make -j1 V=1
make  all-am
make[1]: Entering directory '/package/tonerlow/extract/cups-filters-1.22.5'
g++ -DHAVE_CONFIG_H -I.   -I/package/tonerlow/cups-2.1.4/include -std=c++0x  -I/package/tonerlow/cups-2.1.4/include    -g -O2 -Wall  -D_GNU_SOURCE -MT pdftopdf-qpdf_pdftopdf_processor.o -MD -MP -MF .deps/pdftopdf-qpdf_pdftopdf_processor.Tpo -c -o pdftopdf-qpdf_pdftopdf_processor.o `test -f 'filter/pdftopdf/qpdf_pdftopdf_processor.cc' || echo './'`filter/pdftopdf/qpdf_pdftopdf_processor.cc
In file included from /usr/include/qpdf/QPDFPageObjectHelper.hh:26:0,
                 from /usr/include/qpdf/QPDFPageDocumentHelper.hh:26,
                 from filter/pdftopdf/qpdf_pdftopdf_processor.cc:8:
/usr/include/qpdf/QPDFAnnotationObjectHelper.hh:54:23: error: ‘Rectangle’ in ‘class QPDFObjectHandle’ does not name a type
     QPDFObjectHandle::Rectangle getRect();
                       ^~~~~~~~~
/usr/include/qpdf/QPDFAnnotationObjectHelper.hh:98:31: error: ‘an_invisible’ was not declared in this scope
         int forbidden_flags = an_invisible | an_hidden);
                               ^~~~~~~~~~~~
/usr/include/qpdf/QPDFAnnotationObjectHelper.hh:98:46: error: ‘an_hidden’ was not declared in this scope
         int forbidden_flags = an_invisible | an_hidden);
                                              ^~~~~~~~~
In file included from /usr/include/qpdf/QPDFPageDocumentHelper.hh:26:0,
                 from filter/pdftopdf/qpdf_pdftopdf_processor.cc:8:
/usr/include/qpdf/QPDFPageObjectHelper.hh:142:47: error: ‘QPDFObjectHandle::TokenFilter’ has not been declared
     void filterPageContents(QPDFObjectHandle::TokenFilter* filter,
                                               ^~~~~~~~~~~
/usr/include/qpdf/QPDFPageObjectHelper.hh:157:41: error: ‘TokenFilter’ is not a member of ‘QPDFObjectHandle’
         PointerHolder<QPDFObjectHandle::TokenFilter> token_filter);
                                         ^~~~~~~~~~~
/usr/include/qpdf/QPDFPageObjectHelper.hh:157:41: error: ‘TokenFilter’ is not a member of ‘QPDFObjectHandle’
/usr/include/qpdf/QPDFPageObjectHelper.hh:157:52: error: template argument 1 is invalid
         PointerHolder<QPDFObjectHandle::TokenFilter> token_filter);
                                                    ^
/usr/include/qpdf/QPDFPageObjectHelper.hh:193:23: error: ‘Matrix’ in ‘class QPDFObjectHandle’ does not name a type
     QPDFObjectHandle::Matrix getMatrixForTransformations(bool invert = false);
                       ^~~~~~
/usr/include/qpdf/QPDFPageObjectHelper.hh:230:27: error: ‘QPDFObjectHandle::Rectangle’ has not been declared
         QPDFObjectHandle::Rectangle rect,
                           ^~~~~~~~~
In file included from filter/pdftopdf/qpdf_pdftopdf_processor.cc:8:0:
/usr/include/qpdf/QPDFPageDocumentHelper.hh:109:31: error: ‘an_invisible’ was not declared in this scope
         int forbidden_flags = an_invisible | an_hidden);
                               ^~~~~~~~~~~~
/usr/include/qpdf/QPDFPageDocumentHelper.hh:109:46: error: ‘an_hidden’ was not declared in this scope
         int forbidden_flags = an_invisible | an_hidden);
                                              ^~~~~~~~~
filter/pdftopdf/qpdf_pdftopdf_processor.cc: In member function ‘void QPDF_PDFTOPDF_Processor::start(int)’:
filter/pdftopdf/qpdf_pdftopdf_processor.cc:531:27: error: ‘an_print’ was not declared in this scope
     dh.flattenAnnotations(an_print);
                           ^~~~~~~~
filter/pdftopdf/qpdf_pdftopdf_processor.cc:531:27: note: suggested alternative: ‘asprintf’
     dh.flattenAnnotations(an_print);
                           ^~~~~~~~
                           asprintf
make[1]: *** [Makefile:4251: pdftopdf-qpdf_pdftopdf_processor.o] Error 1
make[1]: Leaving directory '/package/tonerlow/extract/cups-filters-1.22.5'
make: *** [Makefile:2077: all] Error 2
paulmenzel commented 5 years ago

I messed up the include and library paths. Sorry.

paulmenzel commented 5 years ago

Actually it is still happening with QPDF 8.4.0.

$ tar xf ~/cups-filters-1.22.5.tar.xz
$ cd cups-filters-1.22.5.tar.xz
$ ./configure --without-rcdir             --disable-avahi             --without-php             --disable-dbus             --with-cups-config=/package/tonerlow/cups-2.1.4/bin/cups-config
[…]
configure:
==============================================================================
Environment settings:
    CFLAGS:          -g -O2 -Wall -std=gnu11 -D_GNU_SOURCE
    CXXFLAGS:        -g -O2 -Wall  -D_GNU_SOURCE
    LDFLAGS:         
Build configuration:
    cups-config:     /package/tonerlow/cups-2.1.4/bin/cups-config
    font directory:  /etc/fonts/conf.d
    foomatic:        yes
    init directory:  
    cups dom socket: /var/run/cups/cups.sock
    poppler:         yes
    ghostscript:     yes
    gs-path:         system
    mutool:          yes
    mutool-path:     system
    ippfind-path:    system
    imagefilters:    yes
    jpeg:            yes
    pdftocairo-path: system
    pdftops:         hybrid
    pdftops-path:    system
    png:             yes
    php:             no
    php-config:      system
    shell:           /bin/bash
    test-font:       /usr/share/fonts/dejavu/DejaVuSans.ttf
    tiff:            yes
    avahi:           no
    dbus:            no
    browsing:        dnssd cups
    werror:          no
    braille:     yes
    braille tables:  /usr/share/liblouis/tables
    driverless:      yes
    apple-raster:    urftopdf
    pclm:            yes
    driverless auto-setup: no
    ijs:             no
    opvp:            no
==============================================================================

$ make -j1 V=1
[…]
make[1]: Entering directory '/dev/shm/cups-filters-1.22.5'
/bin/sh ./libtool  --tag=CC   --mode=link gcc  -g -O2 -Wall -std=gnu11 -D_GNU_SOURCE   -o ttfread main.o libfontembed.la -lldap -ltiff -ljpeg -ldl 
libtool: link: gcc -g -O2 -Wall -std=gnu11 -D_GNU_SOURCE -o .libs/ttfread main.o  ./.libs/libfontembed.so -lldap -ltiff -ljpeg -ldl
g++ -DHAVE_CONFIG_H -I.    -std=c++0x  -I/package/tonerlow/cups-2.1.4/include    -g -O2 -Wall  -D_GNU_SOURCE -MT pdftopdf-qpdf_pdftopdf_processor.o -MD -MP -MF .deps/pdftopdf-qpdf_pdftopdf_processor.Tpo -c -o pdftopdf-qpdf_pdftopdf_processor.o `test -f 'filter/pdftopdf/qpdf_pdftopdf_processor.cc' || echo './'`filter/pdftopdf/qpdf_pdftopdf_processor.cc
In file included from /usr/include/qpdf/QPDFPageObjectHelper.hh:26:0,
                 from /usr/include/qpdf/QPDFPageDocumentHelper.hh:26,
                 from filter/pdftopdf/qpdf_pdftopdf_processor.cc:8:
/usr/include/qpdf/QPDFAnnotationObjectHelper.hh:54:23: error: ‘Rectangle’ in ‘class QPDFObjectHandle’ does not name a type
     QPDFObjectHandle::Rectangle getRect();
                       ^~~~~~~~~
/usr/include/qpdf/QPDFAnnotationObjectHelper.hh:98:31: error: ‘an_invisible’ was not declared in this scope
         int forbidden_flags = an_invisible | an_hidden);
                               ^~~~~~~~~~~~
/usr/include/qpdf/QPDFAnnotationObjectHelper.hh:98:46: error: ‘an_hidden’ was not declared in this scope
         int forbidden_flags = an_invisible | an_hidden);
                                              ^~~~~~~~~
In file included from /usr/include/qpdf/QPDFPageDocumentHelper.hh:26:0,
                 from filter/pdftopdf/qpdf_pdftopdf_processor.cc:8:
/usr/include/qpdf/QPDFPageObjectHelper.hh:142:47: error: ‘QPDFObjectHandle::TokenFilter’ has not been declared
     void filterPageContents(QPDFObjectHandle::TokenFilter* filter,
                                               ^~~~~~~~~~~
/usr/include/qpdf/QPDFPageObjectHelper.hh:157:41: error: ‘TokenFilter’ is not a member of ‘QPDFObjectHandle’
         PointerHolder<QPDFObjectHandle::TokenFilter> token_filter);
                                         ^~~~~~~~~~~
/usr/include/qpdf/QPDFPageObjectHelper.hh:157:41: error: ‘TokenFilter’ is not a member of ‘QPDFObjectHandle’
/usr/include/qpdf/QPDFPageObjectHelper.hh:157:52: error: template argument 1 is invalid
         PointerHolder<QPDFObjectHandle::TokenFilter> token_filter);
                                                    ^
/usr/include/qpdf/QPDFPageObjectHelper.hh:193:23: error: ‘Matrix’ in ‘class QPDFObjectHandle’ does not name a type
     QPDFObjectHandle::Matrix getMatrixForTransformations(bool invert = false);
                       ^~~~~~
/usr/include/qpdf/QPDFPageObjectHelper.hh:230:27: error: ‘QPDFObjectHandle::Rectangle’ has not been declared
         QPDFObjectHandle::Rectangle rect,
                           ^~~~~~~~~
In file included from filter/pdftopdf/qpdf_pdftopdf_processor.cc:8:0:
/usr/include/qpdf/QPDFPageDocumentHelper.hh:109:31: error: ‘an_invisible’ was not declared in this scope
         int forbidden_flags = an_invisible | an_hidden);
                               ^~~~~~~~~~~~
/usr/include/qpdf/QPDFPageDocumentHelper.hh:109:46: error: ‘an_hidden’ was not declared in this scope
         int forbidden_flags = an_invisible | an_hidden);
                                              ^~~~~~~~~
filter/pdftopdf/qpdf_pdftopdf_processor.cc: In member function ‘void QPDF_PDFTOPDF_Processor::start(int)’:
filter/pdftopdf/qpdf_pdftopdf_processor.cc:531:27: error: ‘an_print’ was not declared in this scope
     dh.flattenAnnotations(an_print);
                           ^~~~~~~~
filter/pdftopdf/qpdf_pdftopdf_processor.cc:531:27: note: suggested alternative: ‘asprintf’
     dh.flattenAnnotations(an_print);
                           ^~~~~~~~
                           asprintf
make[1]: *** [Makefile:4251: pdftopdf-qpdf_pdftopdf_processor.o] Error 1
make[1]: Leaving directory '/dev/shm/cups-filters-1.22.5'
make: *** [Makefile:2077: all] Error 2
tillkamppeter commented 5 years ago

Are you sure that you did not mix up QPDF versions on your system? Is there actually only one version of QPDF and also the header files of only this version installed? Note that if you have QPDF of your distribution installed and in addition install QPDF from source, they get installed in different locations.

tillkamppeter commented 5 years ago

@jberkenbilt, could you have a look here? For me cups-filters 1.22.5 builds perfectly with the QPDF 8.4.0 installed on Ubuntu Disco (19.04).

jberkenbilt commented 5 years ago

My first thought also was that it looks like there are headers from multiple qpdf versions installed. I'm not sure what system you are building on, but make sure you have installed version 8.4.0 of the dev package, e.g. libqpdf-dev or qpdf-devel or whatever it's called on your system. If you have 8.2.1 of the dev package and 8.4.0 of the executable package, you would actually be building against 8.2.1.

tillkamppeter commented 5 years ago

@paulmenzel, could you please check your system whether there is perhaps more than one QPDF version installed and make sure that ONLY QPDF 8.4.0 and its header files are installed. Then try building cups-filters again and report back here. Thanks.

tillkamppeter commented 5 years ago

Probably simply an issue of more than one QPDF version installed and no answer from original poster, closing ...