Commit 0f1ce8e6461d417d1fed2ea4a0cbf27f10ee4eff

Authored by Jay Berkenbilt
1 parent 4c31d3b8

Prepare 7.0.0 release

ChangeLog
  1 +2017-09-15 Jay Berkenbilt <ejb@ql.org>
  2 +
  3 + * 7.0.0: release
  4 +
1 2017-09-12 Jay Berkenbilt <ejb@ql.org> 5 2017-09-12 Jay Berkenbilt <ejb@ql.org>
2 6
3 * Relicense qpdf under version 2.0 of the Apache License rather 7 * Relicense qpdf under version 2.0 of the Apache License rather
README-maintainer.md
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 --enable-werror --disable-shared 14 --enable-werror --disable-shared
15 ``` 15 ```
16 The test suite should run clean with this. This seems to be more reliable than valgrind. 16 The test suite should run clean with this. This seems to be more reliable than valgrind.
17 -* Test with clang. 17 +* Test with clang. Pass `CC=clang CXX=clang++` to `./configure`.
18 * Check all open issues in the sourceforge trackers and on github. 18 * Check all open issues in the sourceforge trackers and on github.
19 * If any interfaces were added or changed, check C API to see whether changes are appropriate there as well. If necessary, review the casting policy in the manual, and ensure that integer types are properly handled. 19 * If any interfaces were added or changed, check C API to see whether changes are appropriate there as well. If necessary, review the casting policy in the manual, and ensure that integer types are properly handled.
20 * Avoid atoi. Use QUtil::string_to_int instead. It does overflow/underflow checking. 20 * Avoid atoi. Use QUtil::string_to_int instead. It does overflow/underflow checking.
1 -Before final 7.0.0  
2 -==================  
3 -  
4 - * Include information about relicensing prominently in release  
5 - announcement for packagers.  
6 -  
7 - * Create release notes  
8 -  
9 Soon 1 Soon
10 ==== 2 ====
11 3
configure.ac
@@ -2,7 +2,7 @@ dnl Process this file with autoconf to produce a configure script. @@ -2,7 +2,7 @@ dnl Process this file with autoconf to produce a configure script.
2 dnl This config.in requires autoconf 2.5 or greater. 2 dnl This config.in requires autoconf 2.5 or greater.
3 3
4 AC_PREREQ([2.68]) 4 AC_PREREQ([2.68])
5 -AC_INIT([qpdf],[7.0.b1]) 5 +AC_INIT([qpdf],[7.0.0])
6 6
7 AC_CONFIG_MACRO_DIR([m4]) 7 AC_CONFIG_MACRO_DIR([m4])
8 AC_CONFIG_FILES([autoconf.mk]) 8 AC_CONFIG_FILES([autoconf.mk])
@@ -29,9 +29,9 @@ LT_INIT([win32-dll]) @@ -29,9 +29,9 @@ LT_INIT([win32-dll])
29 # * Otherwise, increment LT_REVISION 29 # * Otherwise, increment LT_REVISION
30 30
31 # LT = libtool 31 # LT = libtool
32 -LT_CURRENT=18 32 +LT_CURRENT=19
  33 +LT_AGE=1
33 LT_REVISION=0 34 LT_REVISION=0
34 -LT_AGE=0  
35 AC_SUBST(LT_CURRENT) 35 AC_SUBST(LT_CURRENT)
36 AC_SUBST(LT_REVISION) 36 AC_SUBST(LT_REVISION)
37 AC_SUBST(LT_AGE) 37 AC_SUBST(LT_AGE)
libqpdf/QPDF.cc
@@ -19,7 +19,7 @@ @@ -19,7 +19,7 @@
19 #include <qpdf/QPDF_Null.hh> 19 #include <qpdf/QPDF_Null.hh>
20 #include <qpdf/QPDF_Dictionary.hh> 20 #include <qpdf/QPDF_Dictionary.hh>
21 21
22 -std::string QPDF::qpdf_version = "7.0.b1"; 22 +std::string QPDF::qpdf_version = "7.0.0";
23 23
24 static char const* EMPTY_PDF = 24 static char const* EMPTY_PDF =
25 "%PDF-1.3\n" 25 "%PDF-1.3\n"
manual/qpdf-manual.xml
@@ -5,8 +5,8 @@ @@ -5,8 +5,8 @@
5 <!ENTITY mdash "&#x2014;"> 5 <!ENTITY mdash "&#x2014;">
6 <!ENTITY ndash "&#x2013;"> 6 <!ENTITY ndash "&#x2013;">
7 <!ENTITY nbsp "&#xA0;"> 7 <!ENTITY nbsp "&#xA0;">
8 -<!ENTITY swversion "7.0.b1">  
9 -<!ENTITY lastreleased "August 22, 2017"> 8 +<!ENTITY swversion "7.0.0">
  9 +<!ENTITY lastreleased "September 15, 2017">
10 ]> 10 ]>
11 <book> 11 <book>
12 <bookinfo> 12 <bookinfo>
@@ -154,8 +154,8 @@ @@ -154,8 +154,8 @@
154 <listitem> 154 <listitem>
155 <para> 155 <para>
156 A C++ compiler that works well with STL and has the <type>long 156 A C++ compiler that works well with STL and has the <type>long
157 - long</type> type. Most modern C++ compilers should fit the  
158 - bill fine. QPDF is tested with gcc and Microsoft Visual C++. 157 + long</type> type. Most modern C++ compilers should fit the bill
  158 + fine. QPDF is tested with gcc, clang, and Microsoft Visual C++.
159 </para> 159 </para>
160 </listitem> 160 </listitem>
161 </itemizedlist> 161 </itemizedlist>
@@ -283,15 +283,17 @@ make @@ -283,15 +283,17 @@ make
283 treated as a command-line argument. The <option>@-</option> option 283 treated as a command-line argument. The <option>@-</option> option
284 allows arguments to be read from standard input. This allows qpdf 284 allows arguments to be read from standard input. This allows qpdf
285 to be invoked with an arbitrary number of arbitrarily long 285 to be invoked with an arbitrary number of arbitrarily long
286 - arguments. 286 + arguments. It is also very useful for avoiding having to pass
  287 + passwords on the command line.
287 </para> 288 </para>
288 <para> 289 <para>
289 <option>outfilename</option> does not have to be seekable, even 290 <option>outfilename</option> does not have to be seekable, even
290 when generating linearized files. Specifying 291 when generating linearized files. Specifying
291 - &ldquo;<option>--</option>&rdquo; as <option>outfilename</option> 292 + &ldquo;<option>-</option>&rdquo; as <option>outfilename</option>
292 means to write to standard output. However, you can't specify the 293 means to write to standard output. However, you can't specify the
293 same file as both the input and the output because qpdf reads data 294 same file as both the input and the output because qpdf reads data
294 - from the input file as it writes to the output file. 295 + from the input file as it writes to the output file. QPDF attempts
  296 + to detect this case and fail without overwriting the output file.
295 </para> 297 </para>
296 <para> 298 <para>
297 Most options require an output file, but some testing or 299 Most options require an output file, but some testing or
@@ -507,12 +509,11 @@ make @@ -507,12 +509,11 @@ make
507 encoded in ISO-8859-1 and your terminal is configured to use 509 encoded in ISO-8859-1 and your terminal is configured to use
508 UTF-8, the password you supply may not work properly. There are 510 UTF-8, the password you supply may not work properly. There are
509 various approaches to handling this. For example, if you are 511 various approaches to handling this. For example, if you are
510 - using Linux and have the iconv executable (part of the ICU  
511 - package) installed, you could pass <option>--password=`echo  
512 - <replaceable>password</replaceable> | iconv -t  
513 - iso-8859-1`</option> to qpdf where 512 + using Linux and have the iconv executable installed, you could
  513 + pass <option>--password=`echo <replaceable>password</replaceable>
  514 + | iconv -t iso-8859-1`</option> to qpdf where
514 <replaceable>password</replaceable> is a password specified in 515 <replaceable>password</replaceable> is a password specified in
515 - your terminal's locale. A detailed discussion of this is out of 516 + your terminal's locale. A detailed discussion of this is out of
516 scope for this manual, but just be aware of this issue if you have 517 scope for this manual, but just be aware of this issue if you have
517 trouble with a password that contains 8-bit characters. 518 trouble with a password that contains 8-bit characters.
518 </para> 519 </para>
@@ -904,7 +905,10 @@ outfile.pdf&lt;/option&gt; @@ -904,7 +905,10 @@ outfile.pdf&lt;/option&gt;
904 supported generalized filters: <option>/LZWDecode</option>, 905 supported generalized filters: <option>/LZWDecode</option>,
905 <option>/FlateDecode</option>, 906 <option>/FlateDecode</option>,
906 <option>/ASCII85Decode</option>, and 907 <option>/ASCII85Decode</option>, and
907 - <option>/ASCIIHexDecode</option> 908 + <option>/ASCIIHexDecode</option>. We define generalized
  909 + filters as those to be used for general-purpose compression
  910 + or encoding, as opposed to filters specifically designed
  911 + for image data.
908 </para> 912 </para>
909 </listitem> 913 </listitem>
910 <listitem> 914 <listitem>
@@ -953,9 +957,9 @@ outfile.pdf&lt;/option&gt; @@ -953,9 +957,9 @@ outfile.pdf&lt;/option&gt;
953 </listitem> 957 </listitem>
954 <listitem> 958 <listitem>
955 <para> 959 <para>
956 - <option>uncompress</option>: uncompress stream data when  
957 - possible; equivalent to  
958 - <option>--compress-streams=n</option> 960 + <option>uncompress</option>: uncompress stream data
  961 + compressed with generalized filters when possible;
  962 + equivalent to <option>--compress-streams=n</option>
959 <option>--decode-level=generalized</option> 963 <option>--decode-level=generalized</option>
960 </para> 964 </para>
961 </listitem> 965 </listitem>
@@ -1131,18 +1135,6 @@ outfile.pdf&lt;/option&gt; @@ -1131,18 +1135,6 @@ outfile.pdf&lt;/option&gt;
1131 requested with <option>--stream-data=compress</option>. 1135 requested with <option>--stream-data=compress</option>.
1132 </para> 1136 </para>
1133 <para> 1137 <para>
1134 - When <option>--stream-data=preserve</option> is specified, qpdf  
1135 - will never attempt to change the filtering of any stream data.  
1136 - </para>  
1137 - <para>  
1138 - When <option>--stream-data=uncompress</option> is specified, qpdf  
1139 - will attempt to remove any non-lossy filters that it supports.  
1140 - This includes <literal>/FlateDecode</literal>,  
1141 - <literal>/LZWDecode</literal>, <literal>/ASCII85Decode</literal>,  
1142 - and <literal>/ASCIIHexDecode</literal>. This can be very useful  
1143 - for inspecting the contents of various streams.  
1144 - </para>  
1145 - <para>  
1146 When <option>--normalize-content=y</option> is specified, qpdf 1138 When <option>--normalize-content=y</option> is specified, qpdf
1147 will attempt to normalize whitespace and newlines in page content 1139 will attempt to normalize whitespace and newlines in page content
1148 streams. This is generally safe but could, in some cases, cause 1140 streams. This is generally safe but could, in some cases, cause
@@ -1386,7 +1378,14 @@ outfile.pdf&lt;/option&gt; @@ -1386,7 +1378,14 @@ outfile.pdf&lt;/option&gt;
1386 conditions that <option>--check</option> detects. These are 1378 conditions that <option>--check</option> detects. These are
1387 issued as warnings instead of errors. If qpdf finds no errors 1379 issued as warnings instead of errors. If qpdf finds no errors
1388 but finds warnings, it will exit with a status of 3 (as of 1380 but finds warnings, it will exit with a status of 3 (as of
1389 - version&nbsp;2.0.4). 1381 + version&nbsp;2.0.4). When <option>--check</option> is combined
  1382 + with other options, checks are always performed before any
  1383 + other options are processed. For erroneous files,
  1384 + <option>--check</option> will cause qpdf to attempt to
  1385 + recover, after which other options are effectively operating
  1386 + on the recovered file. Combining <option>--check</option> with
  1387 + other options in this way can be useful for manually
  1388 + recovering severely damaged files.
1390 </para> 1389 </para>
1391 </listitem> 1390 </listitem>
1392 </varlistentry> 1391 </varlistentry>
@@ -2926,6 +2925,237 @@ print &quot;\n&quot;; @@ -2926,6 +2925,237 @@ print &quot;\n&quot;;
2926 </para> 2925 </para>
2927 <variablelist> 2926 <variablelist>
2928 <varlistentry> 2927 <varlistentry>
  2928 + <term>7.0.0: September 15, 2017</term>
  2929 + <listitem>
  2930 + <itemizedlist>
  2931 + <listitem>
  2932 + <para>
  2933 + Packaging and Distribution Changes
  2934 + </para>
  2935 + <itemizedlist>
  2936 + <listitem>
  2937 + <para>
  2938 + QPDF's primary license is now <ulink
  2939 + url="http://www.apache.org/licenses/LICENSE-2.0">version 2.0
  2940 + of the Apache License</ulink> rather than version 2.0 of the
  2941 + Artistic License. You may still, at your option, consider
  2942 + qpdf to be licensed with version 2.0 of the Artistic
  2943 + license.
  2944 + </para>
  2945 + </listitem>
  2946 + <listitem>
  2947 + <para>
  2948 + QPDF no longer has a dependency on the PCRE (Perl-Compatible
  2949 + Regular Expression) library. QPDF now has an added
  2950 + dependency on the JPEG library.
  2951 + </para>
  2952 + </listitem>
  2953 + </itemizedlist>
  2954 + </listitem>
  2955 + </itemizedlist>
  2956 + <itemizedlist>
  2957 + <listitem>
  2958 + <para>
  2959 + Bug Fixes
  2960 + </para>
  2961 + <itemizedlist>
  2962 + <listitem>
  2963 + <para>
  2964 + This release contains many bug fixes for various infinite
  2965 + loops, memory leaks, and other memory errors that could be
  2966 + encountered with specially crafted or otherwise erroneous
  2967 + PDF files.
  2968 + </para>
  2969 + </listitem>
  2970 + </itemizedlist>
  2971 + </listitem>
  2972 + </itemizedlist>
  2973 + <itemizedlist>
  2974 + <listitem>
  2975 + <para>
  2976 + New Features
  2977 + </para>
  2978 + <itemizedlist>
  2979 + <listitem>
  2980 + <para>
  2981 + QPDF now supports reading and writing streams encoded with
  2982 + JPEG or RunLength encoding. Library API enhancements and
  2983 + command-line options have been added to control this
  2984 + behavior. See command-line options
  2985 + <option>--compress-streams</option> and
  2986 + <option>--decode-level</option> and methods
  2987 + <function>QPDFWriter::setCompressStreams</function> and
  2988 + <function>QPDFWriter::setDecodeLevel</function>.
  2989 + </para>
  2990 + </listitem>
  2991 + <listitem>
  2992 + <para>
  2993 + QPDF is much better at recovering from broken files. In most
  2994 + cases, qpdf will skip invalid objects and will preserve
  2995 + broken stream data by not attempting to filter broken
  2996 + streams. QPDF is now able to recover or at least not crash
  2997 + on dozens of broken test files I have received over the past
  2998 + few years.
  2999 + </para>
  3000 + </listitem>
  3001 + <listitem>
  3002 + <para>
  3003 + Page rotation is now supported and accessible from both the
  3004 + library and the command line.
  3005 + </para>
  3006 + </listitem>
  3007 + <listitem>
  3008 + <para>
  3009 + <classname>QPDFWriter</classname> supports writing files in
  3010 + a way that preserves PCLm compliance in support of
  3011 + driverless printing. This is very specialized and is only
  3012 + useful to applications that already know how to create PCLm
  3013 + files.
  3014 + </para>
  3015 + </listitem>
  3016 + </itemizedlist>
  3017 + </listitem>
  3018 + </itemizedlist>
  3019 + <itemizedlist>
  3020 + <listitem>
  3021 + <para>
  3022 + Enhancements to the <command>qpdf</command> Command-line Tool.
  3023 + All new options listed here are documented in more detail in
  3024 + <xref linkend="ref.using"/>.
  3025 + </para>
  3026 + <itemizedlist>
  3027 + <listitem>
  3028 + <para>
  3029 + Command-line arguments can now be read from files or
  3030 + standard input using <literal>@file</literal> or
  3031 + <literal>@-</literal> syntax. Please see <xref
  3032 + linkend="ref.invocation"/>.
  3033 + </para>
  3034 + </listitem>
  3035 + <listitem>
  3036 + <para>
  3037 + <option>--rotate</option>: request page rotation
  3038 + </para>
  3039 + </listitem>
  3040 + <listitem>
  3041 + <para>
  3042 + <option>--newline-before-endstream</option>: ensure that a
  3043 + newline appears before every <literal>endstream</literal>
  3044 + keyword in the file; used to prevent qpdf from breaking
  3045 + PDF/A compliance on already compliant files.
  3046 + </para>
  3047 + </listitem>
  3048 + <listitem>
  3049 + <para>
  3050 + <option>--preserve-unreferenced</option>: preserve
  3051 + unreferenced objects in the input PDF
  3052 + </para>
  3053 + </listitem>
  3054 + <listitem>
  3055 + <para>
  3056 + <option>--split-pages</option>: break output into chunks
  3057 + with fixed numbers of pages
  3058 + </para>
  3059 + </listitem>
  3060 + <listitem>
  3061 + <para>
  3062 + <option>--verbose</option>: print the name of each output
  3063 + file that is created
  3064 + </para>
  3065 + </listitem>
  3066 + <listitem>
  3067 + <para>
  3068 + <option>--compress-streams</option> and
  3069 + <option>--decode-level</option> replace
  3070 + <option>--stream-data</option> for improving granularity of
  3071 + controlling compression and decompression of stream data.
  3072 + The <option>--stream-data</option> option will remain
  3073 + available.
  3074 + </para>
  3075 + </listitem>
  3076 + <listitem>
  3077 + <para>
  3078 + When running <command>qpdf --check</command> with other
  3079 + options, checks are always run first. This enables qpdf to
  3080 + perform its full recovery logic before outputting other
  3081 + information. This can be especially useful when manually
  3082 + recovering broken files, looking at qpdf's regenerated cross
  3083 + reference table, or other similar operations.
  3084 + </para>
  3085 + </listitem>
  3086 + <listitem>
  3087 + <para>
  3088 + Process <command>--pages</command> earlier so that other
  3089 + options like <option>--show-pages</option> or
  3090 + <option>--split-pages</option> can operate on the file after
  3091 + page splitting/merging has occurred.
  3092 + </para>
  3093 + </listitem>
  3094 + </itemizedlist>
  3095 + </listitem>
  3096 + </itemizedlist>
  3097 + <itemizedlist>
  3098 + <listitem>
  3099 + <para>
  3100 + API Changes. All new API calls are documented in their
  3101 + respective classes' header files.
  3102 + </para>
  3103 + <itemizedlist>
  3104 + <listitem>
  3105 + <para>
  3106 + <function>QPDFObjectHandle::rotatePage</function>: apply
  3107 + rotation to a page object
  3108 + </para>
  3109 + </listitem>
  3110 + <listitem>
  3111 + <para>
  3112 + <function>QPDFWriter::setNewlineBeforeEndstream</function>:
  3113 + force newline to appear before <literal>endstream</literal>
  3114 + </para>
  3115 + </listitem>
  3116 + <listitem>
  3117 + <para>
  3118 + <function>QPDFWriter::setPreserveUnreferencedObjects</function>:
  3119 + preserve unreferenced objects that appear in the input PDF.
  3120 + The default behavior is to discard them.
  3121 + </para>
  3122 + </listitem>
  3123 + <listitem>
  3124 + <para>
  3125 + New <classname>Pipeline</classname> types
  3126 + <classname>Pl_RunLength</classname> and
  3127 + <classname>Pl_DCT</classname> are available for developers
  3128 + who wish to produce or consume RunLength or DCT stream data
  3129 + directly. The <filename>examples/pdf-create.cc</filename>
  3130 + example illustrates their use.
  3131 + </para>
  3132 + </listitem>
  3133 + <listitem>
  3134 + <para>
  3135 + <function>QPDFWriter::setCompressStreams</function> and
  3136 + <function>QPDFWriter::setDecodeLevel</function> methods
  3137 + control handling of different types of stream compression.
  3138 + </para>
  3139 + </listitem>
  3140 + <listitem>
  3141 + <para>
  3142 + Add new C API functions
  3143 + <function>qpdf_set_compress_streams</function>,
  3144 + <function>qpdf_set_decode_level</function>,
  3145 + <function>qpdf_set_preserve_unreferenced_objects</function>,
  3146 + and <function>qpdf_set_newline_before_endstream</function>
  3147 + corresponding to the new <classname>QPDFWriter</classname>
  3148 + methods.
  3149 + </para>
  3150 + </listitem>
  3151 + </itemizedlist>
  3152 + </listitem>
  3153 + </itemizedlist>
  3154 + </listitem>
  3155 + </varlistentry>
  3156 + </variablelist>
  3157 + <variablelist>
  3158 + <varlistentry>
2929 <term>6.0.0: November 10, 2015</term> 3159 <term>6.0.0: November 10, 2015</term>
2930 <listitem> 3160 <listitem>
2931 <itemizedlist> 3161 <itemizedlist>