Update documentation build/installation

This commit is contained in:
Jay Berkenbilt 2021-12-18 11:19:20 -05:00
parent eb20b4d0cb
commit 426b4ce856
18 changed files with 76 additions and 112 deletions

View File

@ -19,21 +19,20 @@ on:
# have reliable testing. # have reliable testing.
- cron: '12 4 * * 5' - cron: '12 4 * * 5'
jobs: jobs:
Distfiles: Prebuild:
# Generate distfiles.zip, which is a prerequisite for the mac and # Run steps that are needed by the Windows build but are easier to
# Windows builds. Only the mac and Windows builds actually "need" # build on Linux. Although only the Windows builds need this,
# it, but declaring all the jobs to need it forces it to run # other jobs depend on it to force it to run early.
# first.
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: 'Create distfiles.zip' - name: 'Run pre-build steps'
run: build-scripts/make-distfiles run: build-scripts/prebuild
- name: 'Upload extra distribution files' - name: 'Upload extra distribution files'
uses: actions/upload-artifact@v1 uses: actions/upload-artifact@v1
with: with:
name: distfiles name: doc
path: distfiles.zip path: doc.zip
- name: 'Upload external libs' - name: 'Upload external libs'
uses: actions/upload-artifact@v1 uses: actions/upload-artifact@v1
with: with:
@ -52,7 +51,7 @@ jobs:
path: distribution path: distribution
Windows: Windows:
runs-on: windows-latest runs-on: windows-latest
needs: Distfiles needs: Prebuild
strategy: strategy:
fail-fast: false fail-fast: false
max-parallel: 4 max-parallel: 4
@ -64,10 +63,10 @@ jobs:
shell: bash shell: bash
run: git config --global core.autocrlf input run: git config --global core.autocrlf input
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: 'Download distribution files' - name: 'Download documentation'
uses: actions/download-artifact@v2 uses: actions/download-artifact@v2
with: with:
name: distfiles name: doc
path: . path: .
- name: 'Download external libs' - name: 'Download external libs'
uses: actions/download-artifact@v2 uses: actions/download-artifact@v2
@ -84,13 +83,9 @@ jobs:
path: distribution path: distribution
macOS: macOS:
runs-on: macos-latest runs-on: macos-latest
needs: Distfiles needs: Prebuild
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: 'Download distribution files'
uses: actions/download-artifact@v2
with:
name: distfiles
- name: 'Download external libs' - name: 'Download external libs'
uses: actions/download-artifact@v2 uses: actions/download-artifact@v2
with: with:
@ -100,7 +95,7 @@ jobs:
run: build-scripts/build-mac run: build-scripts/build-mac
AppImage: AppImage:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: Distfiles needs: Prebuild
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: 'Build AppImage' - name: 'Build AppImage'
@ -112,21 +107,21 @@ jobs:
path: distribution path: distribution
Linux32: Linux32:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: Distfiles needs: Prebuild
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: 'Linux 32-bit' - name: 'Linux 32-bit'
run: build-scripts/build-linux32 run: build-scripts/build-linux32
Fuzzers: Fuzzers:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: Distfiles needs: Prebuild
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: 'Build Fuzzer' - name: 'Build Fuzzer'
run: build-scripts/build-fuzzer run: build-scripts/build-fuzzer
Sanitizers: Sanitizers:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: Distfiles needs: Prebuild
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: 'Sanitizer Tests' - name: 'Sanitizer Tests'

2
.gitignore vendored
View File

@ -5,8 +5,8 @@ autoconf.mk
autom4te.cache/ autom4te.cache/
config.log config.log
config.status config.status
distfiles.zip
doc doc
doc.zip
examples/build/ examples/build/
external-libs external-libs
fuzz/build/ fuzz/build/

View File

@ -97,23 +97,16 @@ $(foreach B,$(BUILD_ITEMS),$(eval \
clean_$(B): ; \ clean_$(B): ; \
$(RM) -r $(B)/$(OUTPUT_DIR))) $(RM) -r $(B)/$(OUTPUT_DIR)))
DISTFILES = doc/qpdf-manual.html doc/qpdf-manual.pdf
distfiles.zip: $(DISTFILES)
$(RM) distfiles.zip
zip -r distfiles.zip $(DISTFILES) doc/_static
distclean: clean distclean: clean
$(RM) -r autoconf.mk autom4te.cache config.log config.status libtool $(RM) -r autoconf.mk autom4te.cache config.log config.status libtool
$(RM) libqpdf/qpdf/qpdf-config.h $(RM) libqpdf/qpdf/qpdf-config.h
$(RM) manual/html.xsl $(RM) manual/html.xsl
$(RM) manual/print.xsl $(RM) manual/print.xsl
$(RM) doc/*.1
$(RM) libqpdf.pc libqpdf.map $(RM) libqpdf.pc libqpdf.map
maintainer-clean: distclean maintainer-clean: distclean
$(RM) doc/qpdf-manual.*
$(RM) -r install-mingw* install-msvc* external-libs $(RM) -r install-mingw* install-msvc* external-libs
$(RM) distfiles.zip $(RM) -rf doc
.PHONY: $(TEST_TARGETS) .PHONY: $(TEST_TARGETS)

View File

@ -119,7 +119,7 @@ RELEASE PREPARATION
git --no-pager grep -i -n -P "copyright.*$(expr $(date +%Y) - 1).*berkenbilt" git --no-pager grep -i -n -P "copyright.*$(expr $(date +%Y) - 1).*berkenbilt"
Also update the copyright in these places: Also update the copyright in these places:
* manual * manual/conf.py
* debian package -- search for copyright.*berkenbilt in debian/copyright * debian package -- search for copyright.*berkenbilt in debian/copyright
* qtest-driver, TestDriver.pm in qtest source * qtest-driver, TestDriver.pm in qtest source
@ -210,14 +210,12 @@ RELEASE PREPARATION
* Make sure version numbers are consistent in the following locations: * Make sure version numbers are consistent in the following locations:
* configure.ac * configure.ac
* libqpdf/QPDF.cc * libqpdf/QPDF.cc
* manual/qpdf-manual.xml * manual/conf.py
* qpdf/qpdf.cc * qpdf/qpdf.cc
`make_dist` verifies this consistency. `make_dist` verifies this consistency.
* Update release notes in manual. Look at diffs and ChangeLog. * Update release notes in manual. Look at diffs and ChangeLog.
Update release date in `manual/qpdf-manual.xml`. Remember to Update release date in `manual/release-notes.rst`.
ensure that the entities at the top of the document are consistent
with the release notes for both version and release date.
* Add a release entry to ChangeLog: "x.y.z: release" * Add a release entry to ChangeLog: "x.y.z: release"
@ -327,7 +325,7 @@ Template for release notes:
``` ```
This is qpdf version x.y.z. (Brief description) This is qpdf version x.y.z. (Brief description)
For a full list of changes from previous releases, please see the [release notes](http://qpdf.sourceforge.net/files/qpdf-manual.html#release-notes). See also [README-what-to-download](./README-what-to-download.md) for details about the available source and binary distributions. For a full list of changes from previous releases, please see the [release notes](https://qpdf.sourceforge.io/doc/html/release-notes.html). See also [README-what-to-download](./README-what-to-download.md) for details about the available source and binary distributions.
``` ```
# Publish release # Publish release
@ -348,7 +346,7 @@ rsync -vrlcO ./ jay_berkenbilt,qpdf@frs.sourceforge.net:/home/frs/project/q/qp/q
(cd /tmp; mkdir -p z; cd z; \ (cd /tmp; mkdir -p z; cd z; \
tar xf ~/Q/storage/releases/qpdf/qpdf/$version/qpdf-$version.tar.gz qpdf-$version/doc; \ tar xf ~/Q/storage/releases/qpdf/qpdf/$version/qpdf-$version.tar.gz qpdf-$version/doc; \
scp -p qpdf-$version/doc/qpdf-* jay_berkenbilt,qpdf@frs.sourceforge.net:htdocs/files/) rsync -avx --delete --force --exclude '*.1' qpdf-$version/doc/ jay_berkenbilt,qpdf@frs.sourceforge.net:htdocs/doc/)
* Upload the debian package and Ubuntu ppa backports. * Upload the debian package and Ubuntu ppa backports.

View File

@ -68,7 +68,7 @@ The PDF file format used to rely on RC4 for encryption. Using 256-bit keys alway
# Building from a pristine checkout # Building from a pristine checkout
When building qpdf from a pristine checkout from version control, generated documentation files are not present. You may either generate them (by passing `--enable-doc-maintenance` to `./configure` and satisfying the extra build-time dependencies) or obtain them from a released source package, which includes them. If you want to grab just the files that are in the source distribution but not in the repository, extract a source distribution in a temporary directory, and run `make CLEAN=1 distfiles.zip`. This will create a file called `distfiles.zip`, which can you can extract in a checkout of the source repository. This step is optional unless you are running make install and want the html and PDF versions of the documentation to be installed. When building qpdf from a pristine checkout from version control, generated HTML and PDF documentation files are not present. You don't need them unless you are going to run `make install` and want the documentation to be installed. If you want them, you can either extract the `doc` directory from a source distribution, or you can satisfy the additional requirements for building documentation and pass `--enable-doc-maintenance` to `./configure`.
# Building from source distribution on UNIX/Linux # Building from source distribution on UNIX/Linux

22
TODO
View File

@ -1,8 +1,6 @@
Next Next
==== ====
* Add spell check to CI
* High-level API/doc overhaul: #593 * High-level API/doc overhaul: #593
* Refactor test_driver.cc so that runtest is not one huge function. * Refactor test_driver.cc so that runtest is not one huge function.
@ -19,24 +17,6 @@ Next
thrown when an uninitialized trailer is accessed provides useful thrown when an uninitialized trailer is accessed provides useful
information. Test from the C API as well as the C++ API. information. Test from the C API as well as the C++ API.
Doc conversion
==============
Before release:
* Figure out what to do about the fact that the release notes are now
at #release-notes instead of #ref.release-notes. This invalidates
the link in all previous release announcements, but there's not much
I can do about, and it doesn't seem worth fixing. Maybe mention it
somewhere?
* README-maintainer: Fix installation of documentation to website
Soon:
* :ref: -- would be nice if it were suitable for printed documentation
* Decide about readthedocs; if using, with multiple versions/latest
* Generate stuff (options, code samples, etc.) as needed
Documentation Documentation
============= =============
@ -52,6 +32,8 @@ Documentation
* See #530 -- add an appendix explaining PDF encryption in general * See #530 -- add an appendix explaining PDF encryption in general
plus how it's handled by qpdf. Or maybe this should go on the wiki. plus how it's handled by qpdf. Or maybe this should go on the wiki.
* Decide about readthedocs including supporting multiple released
versions of the docs and docs from main.
Document-level work Document-level work
=================== ===================

View File

@ -8,9 +8,6 @@ cd jpeg-*
make -k make -k
sudo make install sudo make install
cd .. cd ..
if [ -f distfiles/distfiles.zip ]; then
unzip distfiles/distfiles.zip
fi
./configure --enable-werror --enable-show-failed-test-output ./configure --enable-werror --enable-show-failed-test-output
make -j$(nproc) -k make -j$(nproc) -k
make -k check make -k check

View File

@ -20,7 +20,7 @@ if [[ $tool == mingw ]]; then
elif [[ $tool == msvc ]]; then elif [[ $tool == msvc ]]; then
cl cl
fi fi
unzip distfiles.zip unzip doc.zip
unzip qpdf-external-libs-bin.zip unzip qpdf-external-libs-bin.zip
cwd=`pwd` cwd=`pwd`
PATH=$cwd/libqpdf/build:$PATH PATH=$cwd/libqpdf/build:$PATH

View File

@ -7,5 +7,6 @@ sudo apt-get -y install \
python3-pip texlive-latex-extra latexmk inkscape imagemagick python3-pip texlive-latex-extra latexmk inkscape imagemagick
pip3 install sphinx pip3 install sphinx
./configure --enable-doc-maintenance ./configure --enable-doc-maintenance
make -j$(nproc) distfiles.zip make -j$(nproc) build_manual
zip -r doc.zip doc/*html doc/*.pdf
build-scripts/download-external-libs build-scripts/download-external-libs

View File

@ -11,6 +11,7 @@
"afdh", "afdh",
"afdhph", "afdhph",
"ageneration", "ageneration",
"agogo",
"aitems", "aitems",
"annots", "annots",
"aobjid", "aobjid",
@ -73,6 +74,7 @@
"dctdecode", "dctdecode",
"decrypter", "decrypter",
"deduplicating", "deduplicating",
"deps",
"destdir", "destdir",
"dests", "dests",
"devel", "devel",
@ -80,7 +82,6 @@
"diffutils", "diffutils",
"directpagerefcount", "directpagerefcount",
"distclean", "distclean",
"distfiles",
"ditems", "ditems",
"docbook", "docbook",
"docdir", "docdir",
@ -299,6 +300,7 @@
"pluggable", "pluggable",
"pngify", "pngify",
"poppler", "poppler",
"prebuild",
"precheck", "precheck",
"prepended", "prepended",
"prepending", "prepending",

View File

@ -17,11 +17,12 @@ installwin: all
cp qpdf/$(OUTPUT_DIR)/fix-qdf.exe $(DEST)/bin cp qpdf/$(OUTPUT_DIR)/fix-qdf.exe $(DEST)/bin
cp include/qpdf/*.h $(DEST)/include/qpdf cp include/qpdf/*.h $(DEST)/include/qpdf
cp include/qpdf/*.hh $(DEST)/include/qpdf cp include/qpdf/*.hh $(DEST)/include/qpdf
if [ -f doc/qpdf-manual.html ]; then \
mkdir $(DEST)/doc/_static; \
cp doc/qpdf-manual.html $(DEST)/doc; \
cp doc/_static/* $(DEST)/doc/_static; \
fi
if [ -f doc/qpdf-manual.pdf ]; then \ if [ -f doc/qpdf-manual.pdf ]; then \
cp doc/qpdf-manual.pdf $(DEST)/doc; \ cp doc/qpdf-manual.pdf $(DEST)/doc; \
fi fi
if [ -d doc/html ]; then \
cp -r doc/html $(DEST)/doc; \
fi
if [ -d doc/singlehtml ]; then \
cp -r doc/singlehtml $(DEST)/doc; \
fi

View File

@ -121,8 +121,6 @@ install-libs: build_libqpdf
# NOTE: If installing any new executables, remember to update the # NOTE: If installing any new executables, remember to update the
# lambda layer code in build-scripts/build-appimage. # lambda layer code in build-scripts/build-appimage.
# NOTE: See comments in manual/build.mk about html documentation.
# Ensure that installwin in make/installwin.mk is consistent with # Ensure that installwin in make/installwin.mk is consistent with
# this. # this.
@ -139,12 +137,13 @@ install: all install-libs
$(LIBTOOL) --mode=install ./install-sh \ $(LIBTOOL) --mode=install ./install-sh \
qpdf/$(OUTPUT_DIR)/fix-qdf \ qpdf/$(OUTPUT_DIR)/fix-qdf \
$(DESTDIR)$(bindir)/fix-qdf $(DESTDIR)$(bindir)/fix-qdf
if [ -f doc/qpdf-manual.html ]; then \
./mkinstalldirs -m 0755 $(DESTDIR)$(docdir)/_static; \
./install-sh -m 0644 doc/qpdf-manual.html $(DESTDIR)$(docdir); \
./install-sh -m 0644 doc/_static/* $(DESTDIR)$(docdir)/_static; \
fi
if [ -f doc/qpdf-manual.pdf ]; then \ if [ -f doc/qpdf-manual.pdf ]; then \
./install-sh -m 0644 doc/qpdf-manual.pdf $(DESTDIR)$(docdir); \ ./install-sh -m 0644 doc/qpdf-manual.pdf $(DESTDIR)$(docdir); \
fi fi
if [ -d doc/html ]; then \
cp -r doc/html $(DESTDIR)/$(docdir); \
fi
if [ -d doc/singlehtml ]; then \
cp -r doc/singlehtml $(DESTDIR)/$(docdir); \
fi
./install-sh -m 0644 doc/*.1 $(DESTDIR)$(mandir)/man1 ./install-sh -m 0644 doc/*.1 $(DESTDIR)$(mandir)/man1

View File

@ -8,10 +8,10 @@ PDF_TARGET := $(PDF_OUT)/qpdf.pdf
TARGETS_manual := doc/qpdf.1 doc/fix-qdf.1 doc/zlib-flate.1 TARGETS_manual := doc/qpdf.1 doc/fix-qdf.1 doc/zlib-flate.1
ifeq ($(BUILD_HTML),1) ifeq ($(BUILD_HTML),1)
TARGETS_manual += doc/qpdf-manual.html $(HTML_TARGET) TARGETS_manual += $(HTML_TARGET) $(S_HTML_TARGET)
endif endif
ifeq ($(BUILD_PDF),1) ifeq ($(BUILD_PDF),1)
TARGETS_manual += doc/qpdf-manual.pdf TARGETS_manual += $(PDF_TARGET)
endif endif
MANUAL_DEPS = $(wildcard manual/*.rst) manual/conf.py MANUAL_DEPS = $(wildcard manual/*.rst) manual/conf.py
@ -22,33 +22,20 @@ MANUAL_DEPS = $(wildcard manual/*.rst) manual/conf.py
# the error "_pickle.UnpicklingError: pickle data was truncated" # the error "_pickle.UnpicklingError: pickle data was truncated"
$(HTML_TARGET): $(MANUAL_DEPS) $(HTML_TARGET): $(MANUAL_DEPS)
$(SPHINX) -M html manual $(DOC_OUT) -W $(SPHINX) -M html manual $(DOC_OUT) -W
mkdir -p doc
rm -rf doc/html
cp -r $(DOC_OUT)/html doc
$(S_HTML_TARGET): $(MANUAL_DEPS) | $(HTML_TARGET) $(S_HTML_TARGET): $(MANUAL_DEPS) | $(HTML_TARGET)
$(SPHINX) -M singlehtml manual $(DOC_OUT) -W $(SPHINX) -M singlehtml manual $(DOC_OUT) -W
mkdir -p doc
rm -rf doc/singlehtml
cp -r $(DOC_OUT)/singlehtml doc
$(PDF_TARGET): $(MANUAL_DEPS) | $(S_HTML_TARGET) $(HTML_TARGET) $(PDF_TARGET): $(MANUAL_DEPS) | $(S_HTML_TARGET) $(HTML_TARGET)
$(SPHINX) -M latexpdf manual $(DOC_OUT) -W $(SPHINX) -M latexpdf manual $(DOC_OUT) -W
# This depends on sphinx-build's singlehtml target creating index.html
# and a _static directory. If that changes, this code has to be
# adjusted. It will also be necessary to adjust the install target in
# make/libtool.mk.
doc/qpdf-manual.html: $(S_HTML_TARGET)
mkdir -p doc mkdir -p doc
@if [ "$(shell find $(S_HTML_OUT)/ -mindepth 1 -type d -print)" != \ cp $(PDF_TARGET) doc/qpdf-manual.pdf
"$(S_HTML_OUT)/_static" ]; then \
echo "***"; \
echo Expected only directory in $(S_HTML_OUT) to be _static; \
echo "***"; \
false; \
fi
cp $< $@
mkdir -p doc/_static
cp -p $(S_HTML_OUT)/_static/* doc/_static
doc/qpdf-manual.pdf: $(PDF_TARGET)
mkdir -p doc
cp $< $@
doc/%.1: manual/%.1.in doc/%.1: manual/%.1.in
mkdir -p doc mkdir -p doc

View File

@ -14,5 +14,5 @@ the same file with stream lengths, cross-reference table entries, and
object stream offset tables regenerated. object stream offset tables regenerated.
.PP .PP
For details about fix-qdf and about PDF files in QDF mode, please see For details about fix-qdf and about PDF files in QDF mode, please see
the qpdf manual, which can be found in @docdir@/qpdf-manual.html or the qpdf manual, which can be found in @docdir@/html/index.html or
@docdir@/qpdf-manual.pdf. @docdir@/qpdf-manual.pdf.

View File

@ -64,7 +64,7 @@ Pre-built documentation is distributed with qpdf, so you should
generally not need to rebuild the documentation. In order to build the generally not need to rebuild the documentation. In order to build the
documentation from source, you need to install `Sphinx documentation from source, you need to install `Sphinx
<https://sphinx-doc.org>`__. To build the PDF version of the <https://sphinx-doc.org>`__. To build the PDF version of the
documentation, you need `pdflatex`, `latexmk`, and a fairly complete documentation, you need ``pdflatex``, ``latexmk``, and a fairly complete
LaTeX installation. Detailed requirements can be found in the Sphinx LaTeX installation. Detailed requirements can be found in the Sphinx
documentation. documentation.

View File

@ -16,4 +16,4 @@ useful primarily to PDF developers.
.PP .PP
For a summary of qpdf's options, please run For a summary of qpdf's options, please run
\fBqpdf \-\-help\fR. A complete manual can be found in \fBqpdf \-\-help\fR. A complete manual can be found in
@docdir@/qpdf-manual.html or @docdir@/qpdf-manual.pdf. @docdir@/html/index.html or @docdir@/qpdf-manual.pdf.

View File

@ -7,6 +7,25 @@ For a detailed list of changes, please see the file
:file:`ChangeLog` in the source distribution. :file:`ChangeLog` in the source distribution.
10.5.0: XXX Month dd, YYYY 10.5.0: XXX Month dd, YYYY
- Packaging changes
- The structure of the ``doc`` directory is different. The PDF
documentation is in the same place, but the files for the
previous HTML documentation are no longer there. Instead, there
are ``html`` and ``singlehtml`` directories, each of which
contain ``index.html`` and other files and directories. The
distribution files and ``make install`` target handle this, but
if you are building your own packages and including
documentation, please double check to make sure that you are
including the right documentation files.
- The documentation sources have been switched from docbook to
reStructuredText processed with `Sphinx
<https://sphinx-doc.org>`__. This will break previous
documentation links. A redirect is in place on the main website.
A top-to-bottom review of the documentation is planned for an
upcoming release.
- Library Enhancements - Library Enhancements
- Since qpdf version 8, using object accessor methods on an - Since qpdf version 8, using object accessor methods on an
@ -58,16 +77,6 @@ For a detailed list of changes, please see the file
- Add ``qpdf_oh_get_type_code`` and ``qpdf_oh_get_type_name``. - Add ``qpdf_oh_get_type_code`` and ``qpdf_oh_get_type_name``.
- Documentation change
- The documentation sources have been switched from docbook to
reStructuredText processed with `Sphinx
<https://sphinx-doc.org>`__. This is mostly transparent (other
than format change) with the exception that all section links
have changed. What used to be `#ref.something` is now
`#something`. A top-to-bottom review of the documentation is
planned for an upcoming release.
10.4.0: November 16, 2021 10.4.0: November 16, 2021
- Handling of Weak Cryptography Algorithms - Handling of Weak Cryptography Algorithms

View File

@ -21,6 +21,6 @@ This program should not be used as a general purpose compression
tool. Use something like gzip(1) instead. tool. Use something like gzip(1) instead.
.PP .PP
For details about qpdf, please see the qpdf manual, which can be found For details about qpdf, please see the qpdf manual, which can be found
in @docdir@/qpdf-manual.html or @docdir@/qpdf-manual.pdf. in @docdir@/html/index.html or @docdir@/qpdf-manual.pdf.
.SH "SEE ALSO" .SH "SEE ALSO"
qpdf(1), gzip(1) qpdf(1), gzip(1)