> 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. > > I think that we could avoid the usage of AC_SUBST and thus the need of > maintaining the *_SUBST variables. > > If we turn src/pdf-config.h.in into a headers template like: > > -- begin of src/pdf-config.h.in > ... > > /* Set to 1 if forcing bignums. */ > #undef PDF_FORCE_BIGNUMS > > /* Set to 1 if ... */ > #undef PDF_... > > ... > -- end of src/pdf-config.h.in >
Attached the patch using your approach, as it is quite more clear than the one using the SUBST variables. Comments welcome! -Aleksander
# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: [email protected] # target_branch: file:///home/aleksander/Development/gnu/libgnupdf\ # /quickfixes/ # testament_sha1: e4243be0046aa739525e58abf64711c007e65c79 # timestamp: 2010-04-05 22:43:04 +0200 # base_revision_id: [email protected] # # Begin patch === modified file '.bzrignore' --- .bzrignore 2010-04-01 09:33:47 +0000 +++ .bzrignore 2010-04-05 20:27:08 +0000 @@ -66,3 +66,5 @@ utils/pdf-tokeniser torture/unit/tmp.test torture/unit/ut.log +src/pdf-config.h +src/stamp-h2 === modified file 'ChangeLog' --- ChangeLog 2010-04-05 19:35:57 +0000 +++ ChangeLog 2010-04-05 20:33:08 +0000 @@ -1,5 +1,19 @@ 2010-04-05 Aleksander Morgado <[email protected]> + * configure.ac (AC_CONFIG_HEADERS): Use AC_CONFIG_HEADERS instead of + AM_CONFIG_HEADER, and include the public config file. + (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) Removed all variables, + as the new config.h-like method is quite cleaner. + + * src/pdf-config.h.in: Use the config.h-like method instead of _SUBST + variable substitutions. + +2010-04-05 Aleksander Morgado <[email protected]> + * configure.ac: AC_OUTPUT with arguments is deprecated. Use the AC_CONFIG_FILES and AC_OUTPUT pair instead. @@ -31,6 +45,32 @@ * .bzrignore: Simplified by using globs. +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: + (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> * .bzrignore: Added torture/unit/temp.test and torture/unit/ut.log @@ -84,7 +124,6 @@ * torture/unit/base/types/pdf-i64-subtraction.c: likewise. - 2010-03-29 Jose E. Marchesi <[email protected]> * configure.ac: Check if the available version of libcheck is not === modified file 'configure.ac' --- configure.ac 2010-04-05 19:35:57 +0000 +++ configure.ac 2010-04-05 20:33:08 +0000 @@ -21,7 +21,7 @@ AC_INIT([GNU PDF Library],[trunk],[[email protected]],[libgnupdf]) AC_CONFIG_AUX_DIR([build-aux]) AM_INIT_AUTOMAKE(libgnupdf, trunk) -AM_CONFIG_HEADER(src/config.h) +AC_CONFIG_HEADERS([src/config.h src/pdf-config.h]) AC_CONFIG_MACRO_DIR([m4]) dnl Compiler issues @@ -38,14 +38,13 @@ gl_INIT + dnl OS-based compilation options compile_w32_system=no -AC_SUBST([PDF_HOST]) AC_SUBST([WINE]) case "${host}" in *-mingw32*) compile_w32_system=yes - PDF_HOST=PDF_HOST_WIN32 if test "${host}" != "${build}" then # Cross-compilation: use wine for testing @@ -56,11 +55,10 @@ AC_DEFINE([PDF_HOST_WIN32], [1], [Compiling for mingw32 systems]) ;; *-bsd*) - PDF_HOST=PDF_HOST_BSD AC_DEFINE([PDF_HOST_BSD], [1], [Compiling for bsd systems]) ;; *) - PDF_HOST=PDF_HOST_GNU + AC_DEFINE([PDF_HOST_GNU], [1], [Compiling for gnu systems]) ;; esac @@ -72,31 +70,51 @@ 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 +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'.]) +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,,,) - +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]) +fi + + +dnl libjpeg? (optional) have_libjpeg=yes 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]) +fi + + +dnl jbig2dec? (optional) +have_jbig2dec=yes +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]) +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 +126,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 +148,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 @@ -217,34 +241,44 @@ # 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 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]) PDFLIB_DEBUG_DESCR="base, " fi + 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, " fi + 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, " fi + if test "x$debug_page_mode" = "xyes"; then AC_DEFINE([HAVE_DEBUG_PAGE], [1], [Debugging Page Layer]) PDFLIB_DEBUG_DESCR="${PDFLIB_DEBUG_DESCR}page" @@ -257,14 +291,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 +309,26 @@ 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]) 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 +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,6 +365,15 @@ 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 +if test $gl_cv_c_inline_effective = yes; then + AC_DEFINE([PDF_HAVE_INLINE], [1], [System has inline?]) +fi + + + dnl Generate output files AC_CONFIG_FILES([Makefile libgnupdf.pc @@ -366,6 +420,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} === 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-31 16:11:35 +0000 +++ src/base/pdf-types.h 2010-04-05 19:41:16 +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,11 +146,12 @@ /* 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 { @@ -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-04-05 20:27:08 +0000 @@ -0,0 +1,79 @@ +/* -*- 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 ------------------------- */ + + +/* System has inline? */ +#undef PDF_HAVE_INLINE + +/* Compiled for mingw32 systems? */ +#undef PDF_HOST_WIN32 + +/* Compiled for BSD systems? */ +#undef PDF_HOST_BSD + +/* Compiled for GNU systems? */ +#undef PDF_HOST_GNU + +/* Compiled with libz support? */ +#undef PDF_HAVE_LIBZ + +/* Compiled with libjpeg support? */ +#undef PDF_HAVE_LIBJPEG + +/* Compiled with libjbig2dec support? */ +#undef PDF_HAVE_LIBJBIG2DEC + +/* Base Layer Debugging enabled? */ +#undef PDF_HAVE_DEBUG_BASE + +/* Object Layer Debugging enabled? */ +#undef PDF_HAVE_DEBUG_OBJECT + +/* Document Layer Debugging enabled? */ +#undef PDF_HAVE_DEBUG_DOCUMENT + +/* Page Layer Debugging enabled? */ +#undef PDF_HAVE_DEBUG_PAGE + +/* Bignum support in the OS? */ +#undef PDF_HAVE_INT64_T + +/* GNU PDF Bignum implementation forced? */ +#undef PDF_FORCE_BIGNUMS + + + +/* 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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 /Uv/K37uwdyf/F3JFOFCQo3V6Jg=
