Hi Jose & all, Attached is a merge directive with the implementation of FS#113: http://www.gnupdf.org/flyspray/index.php?do=details&task_id=113
Basically, just made sure that pdf.h includes the proper PDF_HAVE_* symbols defined before actually using them. A new template was added (pdf-config.h.in) which gets populated with the proper symbol values once ./configure is run. The generated pdf-config.h with all these 'public' symbol definitions is then included at the beginning of pdf.h. Oh, BTW, also changed the behavior of AC_OUTPUT in configure.ac, as passing arguments to AC_OUTPUT is deprecated. Cheers, -Aleksander
# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: [email protected] # target_branch: http://bzr.savannah.gnu.org/r/pdf/libgnupdf/trunk/ # testament_sha1: d7180cbc6829d740b116ef2af51fbafee906c4fd # timestamp: 2010-03-31 17:15:45 +0200 # base_revision_id: jema...@termi-20100331100446-8e439476rjgzbhox # # Begin patch === modified file 'ChangeLog' --- ChangeLog 2010-03-31 10:03:50 +0000 +++ ChangeLog 2010-03-31 15:12:32 +0000 @@ -1,3 +1,31 @@ +2010-03-31 Aleksander Morgado <[email protected]> + + * src/header-autogen: Updated copyright years in the generated `pdf.h'. + + * src/base/pdf-error.h: Use the new `PDF_HAVE_DEBUG_*' symbols instead + of the previous `HAVE_DEBUG_*' ones. + + * utils/pdf-filter.c: Idem. + + * src/base/pdf-stm-filter.[h|c]: Idem. + + * src/base/pdf-types.h: Idem. Plus some minor indentation changes. + + * configure.ac (AC_CONFIG_FILES, AC_OUTPUT): Do not use `AC_OUTPUT' with + arguments, as that is the deprecated way. Also, added the new generation + of `pdf-config.h'. + (PDF_HAVE_INLINE_SUBST, PDF_HAVE_INT64_T_SUBST, PDF_HAVE_LIBZ_SUBST) + (PDF_HAVE_LIBJPEG_SUBST, PDF_HAVE_LIBJBIG2DEC_SUBST) + (PDF_HAVE_DEBUG_BASE_SUBST, PDF_HAVE_DEBUG_OBJECT_SUBST) + (PDF_HAVE_DEBUG_DOCUMENT_SUBST, PDF_HAVE_DEBUG_PAGE_SUBST) + (PDF_FORCE_BIGNUMS_SUBST, PDF_HAVE_INLINE_SUBST): New shell variables in + the configure which will get substituted to the proper values in the + `pdf-config.h.in' template when creating `pdf-config.h'. + Also, some minor indentation changes. + + * src/pdf-config.h.in: New template file to generate the compilation + configuration that will be included in the beginning of `pdf.h'. + 2010-03-31 Jose E. Marchesi <jema...@termi> * torture/unit/base/time/pdf-time-span-add.c: Expect PDF_EBADDATA === modified file 'configure.ac' --- configure.ac 2010-03-29 19:07:36 +0000 +++ configure.ac 2010-03-31 14:31:39 +0000 @@ -38,6 +38,7 @@ gl_INIT + dnl OS-based compilation options compile_w32_system=no AC_SUBST([PDF_HOST]) @@ -71,32 +72,63 @@ AC_CHECK_TYPE(size_t, unsigned) AC_CHECK_TYPE(off_t, long) AC_TYPE_INT64_T - - if test $ac_cv_c_int64_t = yes; then - AC_DEFINE([HAVE_INT64_T], [1], - [Define to 1 if the system has the type `int64_t'.]) - fi +AC_SUBST([PDF_HAVE_INT64_T_SUBST]) +PDF_HAVE_INT64_T_SUBST=0 +if test "x$ac_cv_c_int64_t" = "xyes"; then + AC_DEFINE([PDF_HAVE_INT64_T], [1], [Define to 1 if the system has the type `int64_t'.]) + PDF_HAVE_INT64_T_SUBST=1 +fi dnl Search for functions AC_FUNC_FSEEKO + dnl Search for required libraries + +dnl zlib? (optional) CHECK_ZLIB -AM_CONDITIONAL([ZLIB], [test "x$have_zlib" = "xyes"]) -AC_CHECK_LIB(m,exp,,,) - +AC_SUBST([PDF_HAVE_LIBZ_SUBST]) +PDF_HAVE_LIBZ_SUBST=0 +AM_CONDITIONAL([ZLIB], [test "x$have_zlib" != "xno"]) +if test "x$have_zlib" != "xno"; then + AC_DEFINE([PDF_HAVE_LIBZ], [1], [Define to 1 if you have the `z' library]) + PDF_HAVE_LIBZ_SUBST=1 +fi + + +dnl libjpeg? (optional) have_libjpeg=yes +AC_SUBST([PDF_HAVE_LIBJPEG_SUBST]) +PDF_HAVE_LIBJPEG_SUBST=0 AC_CHECK_LIB([jpeg],[jpeg_std_error],[],[have_libjpeg=no]) AM_CONDITIONAL([LIBJPEG], [test "x$have_libjpeg" != "xno"]) - +if test "x$have_libjpeg" != "xno"; then + AC_DEFINE([PDF_HAVE_LIBJPEG], [1], [Define to 1 if you have the `jpeg' library]) + PDF_HAVE_LIBJPEG_SUBST=1 +fi + + +dnl jbig2dec? (optional) +have_jbig2dec=yes +AC_SUBST([PDF_HAVE_LIBJBIG2DEC_SUBST]) +PDF_HAVE_LIBJBIG2DEC_SUBST=0 +AC_CHECK_LIB([jbig2dec],[jbig2_ctx_new],[],[have_jbig2dec=no]) +AM_CONDITIONAL([JBIG2DEC], [test "x$have_jbig2dec" != "xno"]) +if test "x$have_jbig2dec" != "xno"; then + AC_DEFINE([PDF_HAVE_LIBJBIG2DEC], [1], [Define to 1 if you have the `jbig2dec' library]) + PDF_HAVE_LIBJBIG2DEC_SUBST=1 +fi + + +dnl libm? (mandatory) +AC_CHECK_LIB(m,exp,,,) + +dnl libcurl? (optional) have_libcurl=yes AC_CHECK_LIB([curl],[curl_global_init],[],[have_libcurl=no]) AM_CONDITIONAL([LIBCURL], [test "x$have_libcurl" != "xno"]) -have_jbig2dec=yes -AC_CHECK_LIB([jbig2dec],[jbig2_ctx_new],[],[have_jbig2dec=no]) -AM_CONDITIONAL([JBIG2DEC], [test "x$have_jbig2dec" != "xno"]) if test "x$compile_w32_system" = "xyes"; then # We cannot use AM_PATH_LIBGCRYPT in this case, since it depends on @@ -108,18 +140,20 @@ AM_PATH_LIBGCRYPT([1.2.4], have_libgcrypt="yes", have_libgcrypt="no") fi +dnl libgpg-error? (mandatory) if test x$have_gpgerror = "xno"; then AC_MSG_ERROR([cannot find the libgpg-error library. Please install it and rerun `configure'.]) fi +dnl libgcrypt? (mandatory) if test x$have_libgcrypt = "xno"; then AC_MSG_ERROR([cannot find the libgcrypt library. Please install it and rerun `configure'.]) fi +dnl svn libcheck? (optional) have_check=yes AC_CHECK_LIB([check],[srunner_run],,[have_check=no]) AM_CONDITIONAL([CHECK], [test "x$have_check" != "xno"]) - if test x$have_check = "xno"; then have_check=yes AC_CHECK_LIB([check],[srunner_run_all],,[have_check=no]) @@ -128,9 +162,13 @@ fi fi +dnl libiconv? (optional) AC_CHECK_LIB([iconv],[iconv_open],[have_iconv=yes],[have_iconv=no]) AM_CONDITIONAL([ICONV], [test "x$have_iconv" = "xyes"]) + + + dnl Search for required programs for building the sources AC_PROG_AWK if test x$AWK = "xno"; then @@ -162,10 +200,10 @@ dnl level\layer | base | object | document | page | dnl ------------+------+--------+----------+------+ dnl 0 | * | | | | -dnl 1 | * | * | | | +dnl 1 | * | * | | | dnl 2 | * | * | * | | dnl 3 | * | * | * | * | -dnl +dnl dnl Note that the base layer is always included in the library dnl regardless the compilation level. @@ -186,11 +224,11 @@ dnl Project management resources AC_ARG_ENABLE([prmgt], AS_HELP_STRING([--enable-prmgt], - [build project management resources (default is NO)]), + [build project management resources (default is NO)]), [prmgt_mode=$enableval], [prmgt_mode=no]) AM_CONDITIONAL([PRMGT],[test "x$prmgt_mode" = "xyes"]) -if test "x$prmgt_mode" = "xyes" ; then +if test "x$prmgt_mode" = "xyes" ; then if test "x$have_taskjuggler" = "xyes" ; then AC_CHECK_PROG([have_dot], [dot], [yes], [no],,) @@ -217,37 +255,59 @@ # debug_*_mode PDFLIB_DEBUG_DESCR="" -AC_ARG_ENABLE([debug-base], AS_HELP_STRING([--enable-debug-base], - [debug mode at the base layer (default is NO)]), +AC_ARG_ENABLE([debug-base], + AS_HELP_STRING([--enable-debug-base], + [debug mode at the base layer (default is NO)]), [debug_base_mode=$enableval], [debug_base_mode=no]) -AC_ARG_ENABLE([debug-object], AS_HELP_STRING([--enable-debug-object], - [debug mode at the object layer (default is NO)]), +AC_ARG_ENABLE([debug-object], + AS_HELP_STRING([--enable-debug-object], + [debug mode at the object layer (default is NO)]), [debug_object_mode=$enableval], [debug_object_mode=no]) -AC_ARG_ENABLE([debug-document], AS_HELP_STRING([--enable-debug-document], - [debug mode at the document layer (default is NO)]), +AC_ARG_ENABLE([debug-document], + AS_HELP_STRING([--enable-debug-document], + [debug mode at the document layer (default is NO)]), [debug_document_mode=$enableval], [debug_document_mode=no]) -AC_ARG_ENABLE([debug-page], AS_HELP_STRING([--enable-debug-page], - [debug mode at the page layer (default is NO)]), +AC_ARG_ENABLE([debug-page], + AS_HELP_STRING([--enable-debug-page], + [debug mode at the page layer (default is NO)]), [debug_page_mode=$enableval], [debug_page_mode=no]) + +dnl Note that these symbols are defined in both the public (pdf-config.h) +dnl and private (config.h) configuration headers +AC_SUBST([PDF_HAVE_DEBUG_BASE_SUBST]) +PDF_HAVE_DEBUG_BASE_SUBST=0 if test "x$debug_base_mode" = "xyes"; then - AC_DEFINE([HAVE_DEBUG_BASE], [1], [Debugging Base Layer]) + AC_DEFINE([PDF_HAVE_DEBUG_BASE], [1], [Debugging Base Layer]) + PDF_HAVE_DEBUG_BASE_SUBST=1 PDFLIB_DEBUG_DESCR="base, " -fi +fi + +AC_SUBST([PDF_HAVE_DEBUG_OBJECT_SUBST]) +PDF_HAVE_DEBUG_OBJECT_SUBST=0 if test "x$debug_object_mode" = "xyes"; then - AC_DEFINE([HAVE_DEBUG_OBJECT], [1], [Debugging Object Layer]) + AC_DEFINE([PDF_HAVE_DEBUG_OBJECT], [1], [Debugging Object Layer]) PDFLIB_DEBUG_DESCR="${PDFLIB_DEBUG_DESCR}object, " + PDF_HAVE_DEBUG_OBJECT_SUBST=1 fi + +AC_SUBST([PDF_HAVE_DEBUG_DOCUMENT_SUBST]) +PDF_HAVE_DEBUG_DOCUMENT_SUBST=0 if test "x$debug_document_mode" = "xyes"; then - AC_DEFINE([HAVE_DEBUG_DOCUMENT], [1], [Debugging Document Layer]) + AC_DEFINE([PDF_HAVE_DEBUG_DOCUMENT], [1], [Debugging Document Layer]) PDFLIB_DEBUG_DESCR="${PDFLIB_DEBUG_DESCR}document, " + PDF_HAVE_DEBUG_DOCUMENT_SUBST=1 fi + +AC_SUBST([PDF_HAVE_DEBUG_PAGE_SUBST]) +PDF_HAVE_DEBUG_PAGE_SUBST=0 if test "x$debug_page_mode" = "xyes"; then AC_DEFINE([HAVE_DEBUG_PAGE], [1], [Debugging Page Layer]) PDFLIB_DEBUG_DESCR="${PDFLIB_DEBUG_DESCR}page" + PDF_HAVE_DEBUG_PAGE_SUBST=1 fi if test "x$PDFLIB_DEBUG_DESCR" = "x"; then @@ -257,14 +317,16 @@ # end debug_*_mode dnl gcov compilation -AC_ARG_ENABLE([coverage], AS_HELP_STRING([--enable-coverage], - [Compile the library with code coverage support (default is NO)]), - [use_gcov=$enableval], [use_gcov=no]) +AC_ARG_ENABLE([coverage], + AS_HELP_STRING([--enable-coverage], + [Compile the library with code coverage support (default is NO)]), + [use_gcov=$enableval], [use_gcov=no]) AM_CONDITIONAL([USE_COVERAGE], [test "x$use_gcov" = "xyes"]) -AC_ARG_ENABLE([fsys-http], AS_HELP_STRING([--enable-fsys-http], - [Include the HTTP filesystem implementation in the build]), - [fsys_http=$enableval], [fsys_http=no]) +AC_ARG_ENABLE([fsys-http], + AS_HELP_STRING([--enable-fsys-http], + [Include the HTTP filesystem implementation in the build]), + [fsys_http=$enableval], [fsys_http=no]) if test "x$fsys_http" = "xyes"; then if test x$have_libcurl = "xno"; then AC_MSG_ERROR([libcurl is required for HTTP filesystem support. Please install libcurl and rerun autoconf.]) @@ -273,17 +335,29 @@ fi AM_CONDITIONAL([FSYS_HTTP], [test "x$fsys_http" != "xno"]) -dnl bignums -AC_ARG_ENABLE([bignum-forcing], AS_HELP_STRING([--enable-bignum-forcing], - [Force the usage of the 64bits bignum implementation even if the system support a suitable native type]), - [force_bignums=$enableval], [force_bignums=no]) +dnl bignums forced? +AC_ARG_ENABLE([bignum-forcing], + AS_HELP_STRING([--enable-bignum-forcing], + [Force the usage of the 64bits bignum implementation even if the system support a suitable native type]), + [force_bignums=$enableval], [force_bignums=no]) +AC_SUBST([PDF_FORCE_BIGNUMS_SUBST]) +PDF_FORCE_BIGNUMS_SUBST=0 if test "x$force_bignums" = "xyes"; then AC_DEFINE([PDF_FORCE_BIGNUMS],[1],[Force the usage of the 64bits bignum implementation even if the system support a suitable native type]) -fi + PDF_FORCE_BIGNUMS_SUBST=1 +fi + +if test "x$ac_cv_c_int64_t" != "xyes" -o "x$force_bignums" != "xyes"; then + bignum_implementation="built-in" +else + bignum_implementation="gnupdf" +fi + dnl nocheck (simple replacement of Check framework when this is not available) -AC_ARG_ENABLE([nocheck], AS_HELP_STRING([--enable-nocheck], - [Use built-in nocheck instead of Check (default is NO)]), +AC_ARG_ENABLE([nocheck], + AS_HELP_STRING([--enable-nocheck], + [Use built-in nocheck instead of Check (default is NO)]), [use_nocheck=$enableval], [use_nocheck=no]) if test "x$use_nocheck" = "xyes"; then AC_DEFINE([HAVE_NOCHECK], [1], [Use No-Check instead of Check]) @@ -320,8 +394,42 @@ GNUPDF_VERSION=$VERSION AC_SUBST(GNUPDF_VERSION) + +dnl Some additional stuff we need to have properly defined in the pdf.h +dnl Note that gl_cv_c_inline_effective comes from m4/inline.m4 +PDF_HAVE_INLINE_SUBST=0 +if test $gl_cv_c_inline_effective = yes; then + PDF_HAVE_INLINE_SUBST=1 + AC_DEFINE([PDF_HAVE_INLINE], [1], [System has inline?]) +fi +AC_SUBST(PDF_HAVE_INLINE_SUBST) + + + dnl Generate output files -AC_OUTPUT(Makefile lib/Makefile src/Makefile torture/Makefile torture/testdata/Makefile torture/unit/Makefile doc/Makefile utils/Makefile prmgt/Makefile prmgt/apic2wiki prmgt/testlog2wiki prmgt/docfuncs prmgt/tsdfuncs src/extract-public-hdr build-aux/Makefile prmgt/get-test-data.sh prmgt/srcinfo-extractor.pl doc/version.texi prmgt/check-api-doc-consistency.pl doc/generate-tsd.pl libgnupdf.pc) +AC_CONFIG_FILES([Makefile + libgnupdf.pc + build-aux/Makefile + lib/Makefile + src/Makefile + src/pdf-config.h + src/extract-public-hdr + torture/Makefile + torture/testdata/Makefile + torture/unit/Makefile + utils/Makefile + prmgt/Makefile + prmgt/apic2wiki + prmgt/testlog2wiki + prmgt/docfuncs + prmgt/tsdfuncs + prmgt/get-test-data.sh + prmgt/srcinfo-extractor.pl + prmgt/check-api-doc-consistency.pl + doc/Makefile + doc/version.texi + doc/generate-tsd.pl]) +AC_OUTPUT dnl Report configuration results @@ -345,6 +453,7 @@ Using FlateDecode filter? ${have_zlib} Using JBIG2 decoder filter? ${ac_cv_lib_jbig2dec_jbig2_ctx_new} Using DCT filter? ${have_libjpeg} + Bignum implementation? ${bignum_implementation} With unit tests support? ${ut_support} ${ut_framework} Program to build html manuals ${texihtmlprogram} Build project management resources? ${prmgt_mode} @@ -356,7 +465,7 @@ if test "x$have_zlib" = "xno" ; then echo " -WARNING: you are going to build a library without FlateDecode support. +WARNING: you are going to build a library without FlateDecode support. That means you will not be able to process many PDF files." fi === modified file 'src/Makefile.am' --- src/Makefile.am 2010-02-20 14:46:01 +0000 +++ src/Makefile.am 2010-03-29 21:26:22 +0000 @@ -136,7 +136,8 @@ # Public header generation -PUBLIC_HDRS = pdf-global.h \ +PUBLIC_HDRS = pdf-config.h \ + pdf-global.h \ base/pdf-error.h \ base/pdf-types.h \ base/pdf-fp.h \ @@ -167,11 +168,6 @@ echo "extern \"C\" {" >> $@ echo "#endif" >> $@ echo "" >> $@ - echo "/* Platform */" >> $@ - echo "#if !defined($(PDF_HOST))" >> $@ - echo "# define $(PDF_HOST)" >> $@ - echo "#endif /* !$(PDF_HOST) */" >> $@ - echo "" >> $@ cat $^ | $(top_builddir)/src/extract-public-hdr >> $@ echo "#ifdef __cplusplus" >> $@ echo "} // extern \"C\"" >> $@ === modified file 'src/base/pdf-error.h' --- src/base/pdf-error.h 2010-02-20 16:02:07 +0000 +++ src/base/pdf-error.h 2010-03-29 21:26:22 +0000 @@ -34,37 +34,37 @@ #include <stdio.h> /* Included again for the public header */ -#ifdef HAVE_DEBUG_BASE +#ifdef PDF_HAVE_DEBUG_BASE #define PDF_DEBUG_BASE(message, ...) \ pdf_error (0, stderr, "***DEBUG BASE***:%s:%d: " message, \ __FILE__, __LINE__, ##__VA_ARGS__) #else #define PDF_DEBUG_BASE(...) -#endif /* HAVE_DEBUG_BASE */ +#endif /* PDF_HAVE_DEBUG_BASE */ -#ifdef HAVE_DEBUG_OBJECT +#ifdef PDF_HAVE_DEBUG_OBJECT #define PDF_DEBUG_OBJECT(message, ...) \ pdf_error (0, stderr, "***DEBUG OBJECT***:%s:%d: " message, \ __FILE__, __LINE__, ##__VA_ARGS__) #else #define PDF_DEBUG_OBJECT(...) -#endif /* HAVE_DEBUG_OBJECT */ +#endif /* PDF_HAVE_DEBUG_OBJECT */ -#ifdef HAVE_DEBUG_DOCUMENT +#ifdef PDF_HAVE_DEBUG_DOCUMENT #define PDF_DEBUG_DOCUMENT(message, ...) \ pdf_error (0, stderr, "***DEBUG DOCUMENT***:%s:%d: " message, \ __FILE__, __LINE__, ##__VA_ARGS__) #else #define PDF_DEBUG_DOCUMENT(...) -#endif /* HAVE_DEBUG_DOCUMENT */ +#endif /* PDF_HAVE_DEBUG_DOCUMENT */ -#ifdef HAVE_DEBUG_PAGE +#ifdef PDF_HAVE_DEBUG_PAGE #define PDF_DEBUG_PAGE(message, ...) \ pdf_error (0, stderr, "***DEBUG PAGE***:%s:%d: " message, \ __FILE__, __LINE__, ##__VA_ARGS__) #else #define PDF_DEBUG_PAGE(...) -#endif /* HAVE_DEBUG_PAGE */ +#endif /* PDF_HAVE_DEBUG_PAGE */ #define PDF_ASSERT_BASE(condition) \ === modified file 'src/base/pdf-stm-filter.c' --- src/base/pdf-stm-filter.c 2010-02-20 16:02:07 +0000 +++ src/base/pdf-stm-filter.c 2010-03-31 09:45:35 +0000 @@ -112,7 +112,7 @@ new->impl.dealloc_state_fn = pdf_stm_f_rldec_dealloc_state; break; } -#if defined(HAVE_LIBZ) +#if defined(PDF_HAVE_LIBZ) case PDF_STM_FILTER_FLATE_ENC: { new->impl.init_fn = pdf_stm_f_flateenc_init; @@ -127,7 +127,7 @@ new->impl.dealloc_state_fn = pdf_stm_f_flatedec_dealloc_state; break; } -#endif /* HAVE_LIBZ */ +#endif /* PDF_HAVE_LIBZ */ case PDF_STM_FILTER_V2_ENC: { new->impl.init_fn = pdf_stm_f_v2enc_init; @@ -191,7 +191,7 @@ new->impl.dealloc_state_fn = pdf_stm_f_a85dec_dealloc_state; break; } -#if defined(HAVE_LIBJBIG2DEC) +#if defined(PDF_HAVE_LIBJBIG2DEC) case PDF_STM_FILTER_JBIG2_DEC: { new->impl.init_fn = pdf_stm_f_jbig2dec_init; @@ -199,8 +199,8 @@ new->impl.dealloc_state_fn = pdf_stm_f_jbig2dec_dealloc_state; break; } -#endif /* HAVE_LIBJBIG2DEC */ -#if defined(HAVE_LIBJPEG) +#endif /* PDF_HAVE_LIBJBIG2DEC */ +#if defined(PDF_HAVE_LIBJPEG) case PDF_STM_FILTER_DCT_DEC: { new->impl.init_fn = pdf_stm_f_dctdec_init; @@ -208,7 +208,7 @@ new->impl.dealloc_state_fn = pdf_stm_f_dctdec_dealloc_state; break; } -#endif /* HAVE_LIBJPEG */ +#endif /* PDF_HAVE_LIBJPEG */ default: { /* Shall not be reached, but makes the compiler happy */ === modified file 'src/base/pdf-stm-filter.h' --- src/base/pdf-stm-filter.h 2010-02-20 16:02:07 +0000 +++ src/base/pdf-stm-filter.h 2010-03-31 09:45:35 +0000 @@ -40,15 +40,15 @@ #include <pdf-stm-f-lzw.h> #include <pdf-stm-f-a85.h> -#if defined(HAVE_LIBZ) +#if defined(PDF_HAVE_LIBZ) # include <pdf-stm-f-flate.h> -#endif /* HAVE_LIBZ */ +#endif /* PDF_HAVE_LIBZ */ -#if defined(HAVE_LIBJBIG2DEC) +#if defined(PDF_HAVE_LIBJBIG2DEC) # include <pdf-stm-f-jbig2.h> -#endif /* HAVE_LIBJBIG2DEC */ +#endif /* PDF_HAVE_LIBJBIG2DEC */ -#if defined(HAVE_LIBJPEG) +#if defined(PDF_HAVE_LIBJPEG) # include <pdf-stm-f-dct.h> #endif @@ -60,16 +60,16 @@ PDF_STM_FILTER_NULL = 0, PDF_STM_FILTER_RL_ENC, PDF_STM_FILTER_RL_DEC, -#if defined(HAVE_LIBZ) +#if defined(PDF_HAVE_LIBZ) PDF_STM_FILTER_FLATE_ENC, PDF_STM_FILTER_FLATE_DEC, -#endif /* HAVE_LIBZ */ -#if defined(HAVE_LIBJBIG2DEC) +#endif /* PDF_HAVE_LIBZ */ +#if defined(PDF_HAVE_LIBJBIG2DEC) PDF_STM_FILTER_JBIG2_DEC, -#endif /* HAVE_LIBJBIG2DEC */ -#if defined(HAVE_LIBJPEG) +#endif /* PDF_HAVE_LIBJBIG2DEC */ +#if defined(PDF_HAVE_LIBJPEG) PDF_STM_FILTER_DCT_DEC, -#endif +#endif /* PDF_HAVE_LIBJPEG */ PDF_STM_FILTER_AHEX_ENC, PDF_STM_FILTER_AHEX_DEC, PDF_STM_FILTER_AESV2_ENC, === modified file 'src/base/pdf-types.h' --- src/base/pdf-types.h 2010-03-30 14:12:35 +0000 +++ src/base/pdf-types.h 2010-03-31 14:31:39 +0000 @@ -36,11 +36,11 @@ #include <sys/param.h> /* for determining system types (mostly BSD) */ -#ifdef HAVE_INLINE +#ifdef PDF_HAVE_INLINE #define INLINE inline #else #define INLINE -#endif /* HAVE_INLINE */ +#endif /* PDF_HAVE_INLINE */ #define PDF_TRUE 1 #define PDF_FALSE 0 @@ -63,7 +63,7 @@ /* A variable of type `pdf_off_t' contain a byte-offset relative to - the beginning of a stream object. + the beginning of a stream object. Please be careful manipulating `pdf_off_t' values. Its value is assured to be a signed scalable one, but its size may be wider than @@ -116,7 +116,8 @@ pdf_bool_t pdf_buffer_full_p (pdf_buffer_t buffer); pdf_bool_t pdf_buffer_eob_p (pdf_buffer_t buffer); -pdf_status_t pdf_buffer_resize (pdf_buffer_t buffer, pdf_size_t newsize); +pdf_status_t pdf_buffer_resize (pdf_buffer_t buffer, + pdf_size_t newsize); pdf_status_t pdf_buffer_rewind (pdf_buffer_t buffer); /********************** progress monitors **************************/ @@ -145,15 +146,16 @@ /* Note that int64_t may be defined by the gnulib stdint.h in platforms missing that header file. To force use of BIGNUM, define PDF_FORCE_BIGNUMS in config.h. */ -#if (defined(HAVE_INT64_T) || defined(int64_t)) && !defined(PDF_FORCE_BIGNUMS) -#define PDF_USE_BUILTIN_64BIT_SUPPORT +#if (defined(PDF_HAVE_INT64_T) || defined(int64_t)) && !defined(PDF_FORCE_BIGNUMS) +# define PDF_USE_BUILTIN_64BIT_SUPPORT #endif #ifndef PDF_USE_BUILTIN_64BIT_SUPPORT + /*Definition of internal structure of the pdf_i64_t type*/ struct pdf_i64_s { - pdf_i32_t high; + pdf_i32_t high; pdf_u32_t low; }; @@ -169,114 +171,153 @@ #ifndef PDF_USE_BUILTIN_64BIT_SUPPORT /*Create and initialise a new pdf_i64_t variable*/ -pdf_i64_t pdf_i64_new(const pdf_i32_t high, const pdf_u32_t low); +pdf_i64_t pdf_i64_new (const pdf_i32_t high, + const pdf_u32_t low); /*Assign values to a pdf_i64_t pointer*/ -void -pdf_i64_assign (pdf_i64_t *bignum, const pdf_i32_t high, const pdf_u32_t low, - pdf_status_t *p_status); +void +pdf_i64_assign (pdf_i64_t *bignum, + const pdf_i32_t high, + const pdf_u32_t low, + pdf_status_t *p_status); /*Quick version of assignment in which only the lowest siginificant part is taken into account*/ -void -pdf_i64_assign_quick(pdf_i64_t *bignum, const pdf_i32_t value, pdf_status_t *p_status); +void +pdf_i64_assign_quick (pdf_i64_t *bignum, + const pdf_i32_t value, + pdf_status_t *p_status); /*Copy one pdf_i64_t variable into another*/ -void -pdf_i64_copy(const pdf_i64_t orig, pdf_i64_t *copy, pdf_status_t *p_status); +void +pdf_i64_copy (const pdf_i64_t orig, + pdf_i64_t *copy, + pdf_status_t *p_status); /*Add two pdf_i64_t variables*/ -void -pdf_i64_add(pdf_i64_t *dest, const pdf_i64_t addend1, const pdf_i64_t addend2, - pdf_status_t *p_status); +void +pdf_i64_add (pdf_i64_t *dest, + const pdf_i64_t addend1, + const pdf_i64_t addend2, + pdf_status_t *p_status); /*Compare two pdf_i64_t variables*/ -int pdf_i64_cmp(const pdf_i64_t number_1, const pdf_i64_t number_2); +int pdf_i64_cmp (const pdf_i64_t number_1, + const pdf_i64_t number_2); /*Calculate the absolute value of a pdf_i64_t variable*/ -void -pdf_i64_abs(pdf_i64_t *dest, const pdf_i64_t number, pdf_status_t *p_status); +void +pdf_i64_abs (pdf_i64_t *dest, + const pdf_i64_t number, + pdf_status_t *p_status); /*Negate a pdf_i64_t type variable*/ -void -pdf_i64_neg(pdf_i64_t *dest, const pdf_i64_t number, pdf_status_t *p_status); +void +pdf_i64_neg (pdf_i64_t *dest, + const pdf_i64_t number, + pdf_status_t *p_status); /*Subtract two pdf_i64_t variables*/ -void -pdf_i64_subtraction(pdf_i64_t *dest, const pdf_i64_t minuend, const pdf_i64_t subtrahend, - pdf_status_t *p_status); +void +pdf_i64_subtraction (pdf_i64_t *dest, + const pdf_i64_t minuend, + const pdf_i64_t subtrahend, + pdf_status_t *p_status); /*Multiply two pdf_i64_t variables*/ -void -pdf_i64_mult(pdf_i64_t *dest, const pdf_i64_t factor_1, const pdf_i64_t factor_2, - pdf_status_t *p_status); +void +pdf_i64_mult (pdf_i64_t *dest, + const pdf_i64_t factor_1, + const pdf_i64_t factor_2, + pdf_status_t *p_status); /*Division between two pdf_i64_t type variables*/ -void -pdf_i64_div(pdf_i64_t *dest, const pdf_i64_t dividend, const pdf_i64_t divisor, - pdf_status_t *p_status); +void +pdf_i64_div (pdf_i64_t *dest, + const pdf_i64_t dividend, + const pdf_i64_t divisor, + pdf_status_t *p_status); /*Modulus division between two pdf_i64_t variables*/ -void -pdf_i64_mod(pdf_i64_t *dest, const pdf_i64_t dividend, const pdf_i64_t divisor, - pdf_status_t *p_status); +void +pdf_i64_mod (pdf_i64_t *dest, + const pdf_i64_t dividend, + const pdf_i64_t divisor, + pdf_status_t *p_status); /* Add a pdf_i64_t and a pdf_i32_t */ -void -pdf_i64_add_i32(pdf_i64_t *dest, const pdf_i64_t addend1, const pdf_i32_t addend2, - pdf_status_t *p_status); +void +pdf_i64_add_i32 (pdf_i64_t *dest, + const pdf_i64_t addend1, + const pdf_i32_t addend2, + pdf_status_t *p_status); /* Compare a pdf_i64_t and a pdf_i32_t */ -int pdf_i64_cmp_i32(const pdf_i64_t number_1, const pdf_i32_t number_2); +int pdf_i64_cmp_i32 (const pdf_i64_t number_1, + const pdf_i32_t number_2); /* Subtract a pdf_i64_t and a pdf_i32_t variable */ -void -pdf_i64_subtraction_i32_min(pdf_i64_t *dest, const pdf_i32_t minuend, const pdf_i64_t subtrahend, - pdf_status_t *p_status); -void -pdf_i64_subtraction_i32_sub(pdf_i64_t *dest, const pdf_i64_t minuend, const pdf_i32_t subtrahend, - pdf_status_t *p_status); +void +pdf_i64_subtraction_i32_min (pdf_i64_t *dest, + const pdf_i32_t minuend, + const pdf_i64_t subtrahend, + pdf_status_t *p_status); +void +pdf_i64_subtraction_i32_sub (pdf_i64_t *dest, + const pdf_i64_t minuend, + const pdf_i32_t subtrahend, + pdf_status_t *p_status); /* Multiply a pdf_i64_t and a pdf_i32_t */ -void -pdf_i64_mult_i32(pdf_i64_t *dest, const pdf_i64_t factor_1, const pdf_i32_t factor_2, - pdf_status_t *p_status); +void +pdf_i64_mult_i32 (pdf_i64_t *dest, + const pdf_i64_t factor_1, + const pdf_i32_t factor_2, + pdf_status_t *p_status); /* Divide a pdf_i64_t and a pdf_i32_t */ -void -pdf_i64_div_i32_dividend(pdf_i64_t *dest, const pdf_i32_t dividend, const pdf_i64_t divisor, - pdf_status_t *p_status); -void -pdf_i64_div_i32_divisor(pdf_i64_t *dest, const pdf_i64_t dividend, const pdf_i32_t divisor, - pdf_status_t *p_status); +void +pdf_i64_div_i32_dividend (pdf_i64_t *dest, + const pdf_i32_t dividend, + const pdf_i64_t divisor, + pdf_status_t *p_status); +void +pdf_i64_div_i32_divisor (pdf_i64_t *dest, + const pdf_i64_t dividend, + const pdf_i32_t divisor, + pdf_status_t *p_status); /* Modulus between a pdf_i64_t and a pdf_i32_t */ -void -pdf_i64_mod_i32_dividend(pdf_i64_t *dest, const pdf_i32_t dividend, const pdf_i64_t divisor, - pdf_status_t *p_status); -void -pdf_i64_mod_i32_divisor(pdf_i64_t *dest, const pdf_i64_t dividend, const pdf_i32_t divisor, - pdf_status_t *p_status); - - -/* Get number as pdf_i32_t. Note that if the pdf_i64_t variable is holding a +void +pdf_i64_mod_i32_dividend (pdf_i64_t *dest, + const pdf_i32_t dividend, + const pdf_i64_t divisor, + pdf_status_t *p_status); +void +pdf_i64_mod_i32_divisor (pdf_i64_t *dest, + const pdf_i64_t dividend, + const pdf_i32_t divisor, + pdf_status_t *p_status); + + +/* Get number as pdf_i32_t. Note that if the pdf_i64_t variable is holding a * number which can't be represented in 32bits, the result is undefined... so * use it with caution. */ pdf_i32_t -pdf_i64_to_i32(const pdf_i64_t bignum); +pdf_i64_to_i32 (const pdf_i64_t bignum); #else /*else of the PDF_USE_BUILTIN_64BIT_SUPPORT*/ /*Create and initialise a new pdf_i64_t variable*/ -#define pdf_i64_new(high, low) ((((pdf_i64_t)high)<<32) + low) +#define pdf_i64_new(high, low) ((((pdf_i64_t)high)<<32) + low) #define pdf_i64_assign(bignum, high, low, p_status) \ do \ @@ -293,7 +334,7 @@ *bignum = *bignum + low; \ } \ } while(0) - + /*Quick version of assignment in which only the lowest siginificant part is taken into account*/ @@ -359,7 +400,7 @@ *dest = abs(number); \ } \ } while(0) - + /*Negate a pdf_i64_t type variable*/ #define pdf_i64_neg(dest, number, p_status) \ do \ @@ -459,7 +500,7 @@ #define pdf_i64_mod_i32_divisor pdf_i64_mod -/* Get number as pdf_i32_t. Note that if the pdf_i64_t variable is holding a +/* Get number as pdf_i32_t. Note that if the pdf_i64_t variable is holding a * number which can't be represented in 32bits, the result is undefined... so * use it with caution. */ #define pdf_i64_to_i32(bignum) bignum === modified file 'src/header-autogen' --- src/header-autogen 2008-03-14 19:15:18 +0000 +++ src/header-autogen 2010-03-31 10:23:18 +0000 @@ -1,6 +1,6 @@ /* This file has been automatically generated */ -/* Copyright (C) 2007, 2008 Free Software Foundation, Inc. */ +/* Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc. */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by === added file 'src/pdf-config.h.in' --- src/pdf-config.h.in 1970-01-01 00:00:00 +0000 +++ src/pdf-config.h.in 2010-03-31 10:23:18 +0000 @@ -0,0 +1,146 @@ +/* -*- mode: C -*- + * + * File: pdf-config.h.in + * Date: Mon Mar 29 20:54:25 2010 + * + * GNU PDF Library - Config options to include in the public pdf.h + * + */ + +/* Copyright (C) 2010 Free Software Foundation, Inc. */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef _PDF_CONFIG_H +#define _PDF_CONFIG_H + +/* BEGIN PUBLIC */ + +/* ------------------- Public Configuration Options ------------------------- */ + +/* Platform */ +#if !defined(@PDF_HOST@) +# define @PDF_HOST@ +#endif /* !...@pdf_host@ */ + + +/* Inlining */ +#if @PDF_HAVE_INLINE_SUBST@ +# if !defined(PDF_HAVE_INLINE) +# define PDF_HAVE_INLINE +# endif /* !PDF_HAVE_INLINE */ +#else +# undef PDF_HAVE_INLINE +#endif /* !...@pdf_have_inline_subst@ */ + + +/* zlib? */ +#if @PDF_HAVE_LIBZ_SUBST@ +# if !defined(PDF_HAVE_LIBZ) +# define PDF_HAVE_LIBZ +# endif /* !PDF_HAVE_LIBZ */ +#else +# undef PDF_HAVE_LIBZ +#endif /* !...@pdf_have_libz_subst@ */ + + +/* libjpeg? */ +#if @PDF_HAVE_LIBJPEG_SUBST@ +# if !defined(PDF_HAVE_LIBJPEG) +# define PDF_HAVE_LIBJPEG +# endif /* !PDF_HAVE_LIBJPEG */ +#else +# undef PDF_HAVE_LIBJPEG +#endif /* !...@pdf_have_libjpeg_subst@ */ + + + +/* libjbig2dec? */ +#if @PDF_HAVE_LIBJBIG2DEC_SUBST@ +# if !defined(PDF_HAVE_LIBJBIG2DEC) +# define PDF_HAVE_LIBJBIG2DEC +# endif /* !PDF_HAVE_LIBJBIG2DEC */ +#else +# undef PDF_HAVE_LIBJBIG2DEC +#endif /* !...@pdf_have_libjbig2dec_subst@ */ + + + +/* Base Layer Debugging */ +#if @PDF_HAVE_DEBUG_BASE_SUBST@ +# if !defined(PDF_HAVE_DEBUG_BASE) +# define PDF_HAVE_DEBUG_BASE +# endif /* !PDF_HAVE_DEBUG_BASE */ +#else +# undef PDF_HAVE_DEBUG_BASE +#endif /* !...@pdf_have_debug_base_subst@ */ + + +/* Object Layer Debugging */ +#if @PDF_HAVE_DEBUG_OBJECT_SUBST@ +# if !defined(PDF_HAVE_DEBUG_OBJECT) +# define PDF_HAVE_DEBUG_OBJECT +# endif /* !PDF_HAVE_DEBUG_OBJECT */ +#else +# undef PDF_HAVE_DEBUG_OBJECT +#endif /* !...@pdf_have_debug_object_subst@ */ + + +/* Document Layer Debugging */ +#if @PDF_HAVE_DEBUG_DOCUMENT_SUBST@ +# if !defined(PDF_HAVE_DEBUG_DOCUMENT) +# define PDF_HAVE_DEBUG_DOCUMENT +# endif /* !PDF_HAVE_DEBUG_DOCUMENT */ +#else +# undef PDF_HAVE_DEBUG_DOCUMENT +#endif /* !...@pdf_have_debug_document_subst@ */ + + +/* Page Layer Debugging */ +#if @PDF_HAVE_DEBUG_PAGE_SUBST@ +# if !defined(PDF_HAVE_DEBUG_PAGE) +# define PDF_HAVE_DEBUG_PAGE +# endif /* !PDF_HAVE_DEBUG_PAGE */ +#else +# undef PDF_HAVE_DEBUG_PAGE +#endif /* !...@pdf_have_debug_page_subst@ */ + + +/* Bignum support in the OS? */ +#if @PDF_HAVE_INT64_T_SUBST@ +# if !defined(PDF_HAVE_INT64_T) +# define PDF_HAVE_INT64_T +# endif /* !PDF_HAVE_INT64_T */ +#else +# undef PDF_HAVE_INT64_T +#endif /* !...@pdf_have_int64_t_subst@ */ + + +/* GNU PDF Bignum implementation forced? */ +#if @PDF_FORCE_BIGNUMS_SUBST@ +# if !defined(PDF_FORCE_BIGNUMS) +# define PDF_FORCE_BIGNUMS +# endif /* !PDF_FORCE_BIGNUMS */ +#else +# undef PDF_FORCE_BIGNUMS +#endif /* !...@pdf_force_bignums_subst@ */ + + + +/* END PUBLIC */ + +#endif /* _PDF_CONFIG_H */ + +/* End of pdf-config.h.in */ === modified file 'utils/pdf-filter.c' --- utils/pdf-filter.c 2010-02-22 19:02:16 +0000 +++ utils/pdf-filter.c 2010-03-31 09:45:35 +0000 @@ -33,9 +33,9 @@ #include <string.h> #ifdef HAVE_MALLOC_H -#include <malloc.h> +# include <malloc.h> #else -#include <stdlib.h> +# include <stdlib.h> #endif /* HAVE_MALLOC_H */ #include <sys/stat.h> @@ -76,19 +76,19 @@ {"predenc", no_argument, NULL, PREDENC_FILTER_ARG}, {"preddec", no_argument, NULL, PREDDEC_FILTER_ARG}, #endif /* 0 */ -#ifdef HAVE_LIBJPEG +#ifdef PDF_HAVE_LIBJPEG {"dctdec", no_argument, NULL, DCTDEC_FILTER_ARG}, -#endif -#ifdef HAVE_LIBZ +#endif /* PDF_HAVE_LIBJPEG */ +#ifdef PDF_HAVE_LIBZ {"flatedec", no_argument, NULL, FLATEDEC_FILTER_ARG}, {"flateenc", no_argument, NULL, FLATEENC_FILTER_ARG}, -#endif /* HAVE_LIBZ */ +#endif /* PDF_HAVE_LIBZ */ {"rldec", no_argument, NULL, RUNLENGTHDEC_FILTER_ARG}, {"rlenc", no_argument, NULL, RUNLENGTHENC_FILTER_ARG}, -#ifdef HAVE_LIBJBIG2DEC +#ifdef PDF_HAVE_LIBJBIG2DEC {"jbig2dec", no_argument, NULL, JBIG2DEC_FILTER_ARG}, {"jbig2dec-globals", required_argument, NULL, JBIG2DEC_GLOBAL_SEGMENTS_ARG}, -#endif /* HAVE_LIBJBIG2DEC */ +#endif /* PDF_HAVE_LIBJBIG2DEC */ {"md5enc", no_argument, NULL, MD5ENC_FILTER_ARG}, {"key", required_argument, NULL, KEY_ARG}, {"aesenc", no_argument, NULL, AESENC_FILTER_ARG}, @@ -126,18 +126,22 @@ --a85dec use the ASCII 85 decoder filter\n\ --a85enc use the ASCII 85 encoder filter\n" #if 0 - " --jxpdec use the JXP decoder filter\n\ +"\ + --jxpdec use the JXP decoder filter\n\ --predenc use the predictor encoder filter\n\ --preddec use the predictor decoder filter\n" #endif /* 0 */ -#ifdef HAVE_LIBJPEG - " --dctdec use the DCT decoder filter\n" -#endif -#ifdef HAVE_LIBZ - " --flatedec use the Flate decoder filter\n\ +#ifdef PDF_HAVE_LIBJPEG +"\ + --dctdec use the DCT decoder filter\n" +#endif /* PDF_HAVE_LIBZ */ +#ifdef PDF_HAVE_LIBZ +"\ + --flatedec use the Flate decoder filter\n\ --flateenc use the Flate encoder filter\n" -#endif /* HAVE_LIBZ */ - " --rldec use the Run Length decoder filter\n\ +#endif /* PDF_HAVE_LIBZ */ +"\ + --rldec use the Run Length decoder filter\n\ --rlenc use the Run Length encoder filter\n\ --cfaxdec use the CCITT Fax decoder filter\n\ --jbig2dec use the JBIG2 decoder filter\n\ @@ -151,14 +155,15 @@ --version show pdf-filter version and exit\n\ \nfilter properties\n" #if 0 -" +"\ --preddec-type=NUM code for next preddec filters type\n\ --predenc-type=NUM code for next predenc filters type\n\ --pred-colors=NUM next predictors colors per sample\n\ --pred-bpc=NUM next predictors bits per color component\n\ --pred-columns=NUM next predictors number of samples per row\n" #endif /* 0 */ -" --lzw-earlychange toggles earlychange for next lzw filters\n\ +"\ + --lzw-earlychange toggles earlychange for next lzw filters\n\ --jbig2dec-globals=FILE file containing global segments\n\ \n\ Report pdf-filter bugs to [email protected]\n\ @@ -545,7 +550,7 @@ break; } -#ifdef HAVE_LIBJPEG +#ifdef PDF_HAVE_LIBJPEG case DCTDEC_FILTER_ARG: { ret = pdf_hash_new (NULL, &filter_params); @@ -565,7 +570,7 @@ break; } -#endif /* HAVE_LIBJPEG */ +#endif /* PDF_HAVE_LIBJPEG */ case ASCII85DEC_FILTER_ARG: { @@ -688,7 +693,7 @@ break; } -#ifdef HAVE_LIBZ +#ifdef PDF_HAVE_LIBZ case FLATEDEC_FILTER_ARG: { ret = pdf_hash_new (NULL, &filter_params); @@ -729,7 +734,7 @@ break; } -#endif /* HAVE_LIBZ */ +#endif /* PDF_HAVE_LIBZ */ case RUNLENGTHDEC_FILTER_ARG: { ret = pdf_hash_new (NULL, &filter_params); @@ -772,7 +777,7 @@ break; } -#ifdef HAVE_LIBJBIG2DEC +#ifdef PDF_HAVE_LIBJBIG2DEC case JBIG2DEC_GLOBAL_SEGMENTS_ARG: { struct stat fstats; @@ -833,7 +838,7 @@ break; } -#endif /* HAVE_LIBJBIG2DEC */ +#endif /* PDF_HAVE_LIBJBIG2DEC */ case MD5ENC_FILTER_ARG: { ret = pdf_hash_new (NULL, &filter_params); # Begin bundle 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 KftiX08b8/6i7kinChIOnOeYAA==
