aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--TODO14
-rw-r--r--aclocal.m44
-rw-r--r--appimage/Dockerfile6
-rwxr-xr-xappimage/build-appimage9
-rw-r--r--autoconf.mk.in6
-rw-r--r--autofiles.sums4
-rwxr-xr-xbuild-scripts/build-linux5
-rwxr-xr-xbuild-scripts/make-distfiles3
-rwxr-xr-xconfigure228
-rw-r--r--configure.ac109
-rw-r--r--make/installwin.mk3
-rw-r--r--make/libtool.mk9
-rwxr-xr-xmake_dist6
-rw-r--r--manual/build.mk72
15 files changed, 184 insertions, 296 deletions
diff --git a/Makefile b/Makefile
index e1e09738..6a6412dc 100644
--- a/Makefile
+++ b/Makefile
@@ -100,7 +100,7 @@ $(foreach B,$(BUILD_ITEMS),$(eval \
DISTFILES = doc/qpdf-manual.html doc/qpdf-manual.pdf
distfiles.zip: $(DISTFILES)
$(RM) distfiles.zip
- zip distfiles.zip $(DISTFILES)
+ zip -r distfiles.zip $(DISTFILES) doc/_static
distclean: clean
$(RM) -r autoconf.mk autom4te.cache config.log config.status libtool
diff --git a/TODO b/TODO
index 5b30f9f0..b29a5a5b 100644
--- a/TODO
+++ b/TODO
@@ -42,20 +42,6 @@ Correct placement of comment: <!-- This section is referenced in QPDFObjectHandl
<firstterm> -> just use literal
<replaceable> -> Make sure in :file: or :samp:, then use {}
-Build:
-
-apt install python3-pip texlive-latex-extra latexmk
-pip install sphinx
-
-sphinx-build -M help . .
-sphinx-build -M latexpdf source build
-sphinx-build -M html source build
-sphinx-build -M singlehtml source build
-
-autoconf should detect sphinx and its dependencies, not fop, etc.
-Remove VALIDATE_DOC
-Fix installation of documentation in doc
-
Additional cleanup:
* Indices and tables section
diff --git a/aclocal.m4 b/aclocal.m4
index e8d099d4..3fbe0b65 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.16.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.16.4 -*- Autoconf -*-
-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
diff --git a/appimage/Dockerfile b/appimage/Dockerfile
index c607ca21..51221908 100644
--- a/appimage/Dockerfile
+++ b/appimage/Dockerfile
@@ -1,11 +1,13 @@
-FROM ubuntu:16.04
+FROM ubuntu:18.04
+ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get -y install screen autoconf git sudo \
build-essential zlib1g-dev libjpeg-dev libgnutls28-dev \
- docbook-xsl fop xsltproc \
+ python3-pip texlive-latex-extra latexmk \
inkscape imagemagick busybox-static wget fuse && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
+RUN pip3 install sphinx
COPY entrypoint /entrypoint
RUN chmod +x /entrypoint
ENTRYPOINT [ "/entrypoint" ]
diff --git a/appimage/build-appimage b/appimage/build-appimage
index 03039ed1..04fa805b 100755
--- a/appimage/build-appimage
+++ b/appimage/build-appimage
@@ -43,24 +43,25 @@ if [ "x$1" == "x--sign" ]; then
fi
-# Check if we are on Ubuntu Trusty
+# Check Ubuntu Distribution
_osversion=$(cat /etc/os-release | grep PRETTY_NAME | awk -F'=' '{print $2}' | sed 's#"##g')
# Warn users building the AppImage locally:
-if [[ ! $_osversion =~ Ubuntu\ 16.04.*\ LTS ]]; then
+if [[ ! $_osversion =~ Ubuntu\ 18.04.*\ LTS ]]; then
set +x
echo ""
# 0 1 2 3 4 5 6 7
# 01234567890123456789012345678901234567890123456789012345678901234567890123456789
echo "+===========================================================================+"
echo "|| WARNING: You are about to build a QPDF AppImage on a system which is ||"
- echo "|| NOT Ubuntu 16.04 LTS ('Xenial'). ||"
+ echo "|| NOT Ubuntu 18.04 LTS. ||"
echo "|| ||"
echo "|| It is recommended that you use a distribution that is at least a ||"
echo "|| few years old to maximize the number of Linux distributions the ||"
echo "|| resulting AppImage will work on. AppImages often don't work on ||"
echo "|| distributions older than the one they were built on because of ||"
- echo "|| standard library differences. ||"
+ echo "|| standard library differences. The oldest supported Ubuntu LTS is ||"
+ echo "|| a good option. ||"
echo "+===========================================================================+"
echo ""
set -x
diff --git a/autoconf.mk.in b/autoconf.mk.in
index 2836b4f1..34a19801 100644
--- a/autoconf.mk.in
+++ b/autoconf.mk.in
@@ -34,13 +34,9 @@ LIBTOOL=@LIBTOOL@
USE_CRYPTO_NATIVE=@USE_CRYPTO_NATIVE@
USE_CRYPTO_OPENSSL=@USE_CRYPTO_OPENSSL@
USE_CRYPTO_GNUTLS=@USE_CRYPTO_GNUTLS@
-DOCBOOKX_DTD=@DOCBOOKX_DTD@
-FOP=@FOP@
-XSLTPROC=@XSLTPROC@
-XMLLINT=@XMLLINT@
+SPHINX=@SPHINX@
BUILD_HTML=@BUILD_HTML@
BUILD_PDF=@BUILD_PDF@
-VALIDATE_DOC=@VALIDATE_DOC@
OSS_FUZZ=@OSS_FUZZ@
QPDF_SKIP_TEST_COMPARE_IMAGES=@QPDF_SKIP_TEST_COMPARE_IMAGES@
BUILDRULES=@BUILDRULES@
diff --git a/autofiles.sums b/autofiles.sums
index 6d0367a3..a0476d70 100644
--- a/autofiles.sums
+++ b/autofiles.sums
@@ -1,5 +1,5 @@
-e8f33e2b17d8c04fc1c160e9a92e7f1e48e433467f734629cdbb873f2d6fa676 configure.ac
-d3f9ee6f6f0846888d9a10fd3dad2e4b1258be84205426cf04d7cef02d61dad7 aclocal.m4
+44c66263db20dec40cefe94df4f9f9effe7410f20865cd53cf89268f6a98010f configure.ac
+a45b129101efb46d7ac59ca2cf12d137a5742c2593ea11ebb32401aefd915b96 aclocal.m4
c12d837479fa9a3fa4c278b6dc7d6b449503d663e0f0d294305595a51ff43f70 libqpdf/qpdf/qpdf-config.h.in
5297971a0ef90bcd5563eb3f7127a032bb76d3ae2af7258bf13479caf8983a60 m4/ax_cxx_compile_stdcxx.m4
35bc5c645dc42d47f2daeea06f8f3e767c8a1aee6a35eb2b4854fd2ce66c3413 m4/ax_random_device.m4
diff --git a/build-scripts/build-linux b/build-scripts/build-linux
index 98d001a0..448c5871 100755
--- a/build-scripts/build-linux
+++ b/build-scripts/build-linux
@@ -3,8 +3,9 @@ set -ex
sudo apt-get update
sudo apt-get -y install \
autoconf build-essential zlib1g-dev libjpeg-dev libgnutls28-dev \
- libssl-dev docbook-xsl fop xsltproc libxml2-utils inkscape imagemagick \
- libtiff-tools ghostscript
+ libssl-dev python3-pip texlive-latex-extra latexmk \
+ inkscape imagemagick libtiff-tools ghostscript
+pip3 install sphinx
./configure --enable-werror --enable-doc-maintenance \
--enable-crypto-native --enable-crypto-openssl --enable-crypto-gnutls \
--enable-show-failed-test-output --enable-test-compare-images
diff --git a/build-scripts/make-distfiles b/build-scripts/make-distfiles
index 26ef161d..f30f4595 100755
--- a/build-scripts/make-distfiles
+++ b/build-scripts/make-distfiles
@@ -4,7 +4,8 @@ set -ex
sudo apt-get update
sudo apt-get -y install \
autoconf build-essential zlib1g-dev libjpeg-dev \
- docbook-xsl fop xsltproc libxml2-utils inkscape imagemagick
+ python3-pip texlive-latex-extra latexmk inkscape imagemagick
+pip3 install sphinx
./configure --enable-doc-maintenance
make -j$(nproc) distfiles.zip
build-scripts/download-external-libs
diff --git a/configure b/configure
index ce153db2..eaf6a7f5 100755
--- a/configure
+++ b/configure
@@ -631,15 +631,12 @@ ac_includes_default="\
ac_subst_vars='LTLIBOBJS
LIBOBJS
OSS_FUZZ
-VALIDATE_DOC
BUILD_PDF
BUILD_HTML
-XMLLINT
-XSLTPROC
-FOP
-DOCBOOKX_DTD
-DOCBOOK_FO
-DOCBOOK_XHTML
+SPHINX
+LATEXMK
+PDFLATEX
+LATEX
SHOW_FAILED_TEST_OUTPUT
QPDF_SKIP_TEST_COMPARE_IMAGES
DEFAULT_CRYPTO
@@ -794,12 +791,9 @@ enable_crypto_gnutls
with_default_crypto
enable_test_compare_images
enable_show_failed_test_output
-with_docbook_xsl
-with_docbookx_dtd
enable_doc_maintenance
enable_html_doc
enable_pdf_doc
-enable_validate_doc
enable_oss_fuzz
'
ac_precious_vars='build_alias
@@ -1497,7 +1491,6 @@ Optional Features:
if set, enables all documentation options
--enable-html-doc whether to build HTML documents
--enable-pdf-doc whether to build PDF documents
- --enable-validate-doc whether to validate xml document source
--enable-oss-fuzz if set, build static fuzzers for oss-fuzz
Optional Packages:
@@ -1523,9 +1516,6 @@ Optional Packages:
--with-default-crypto=provider
which crypto provider to use by default; see
README.md
- --with-docbook-xsl=DIR location of docbook 4.x xml stylesheets
- --with-docbookx-dtd=FILE
- location of docbook 4.x xml DTD
Some influential environment variables:
CC C compiler command
@@ -2650,8 +2640,6 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
ac_config_files="$ac_config_files autoconf.mk"
-ac_config_files="$ac_config_files manual/html.xsl manual/print.xsl"
-
ac_config_files="$ac_config_files libqpdf.pc"
ac_config_files="$ac_config_files libqpdf.map"
@@ -18449,69 +18437,52 @@ else
fi
-
-# Check whether --with-docbook-xsl was given.
-if test "${with_docbook_xsl+set}" = set; then :
- withval=$with_docbook_xsl; DOCBOOK_XSL=$withval
+# Extract the first word of "latex", so it can be a program name with args.
+set dummy latex; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_LATEX+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- DOCBOOK_XSL=/usr/share/xml/docbook/stylesheet/nwalsh
-fi
-
-
-DOCBOOK_XHTML=
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for xml to xhtml docbook stylesheets" >&5
-$as_echo_n "checking for xml to xhtml docbook stylesheets... " >&6; }
-if test -f "$DOCBOOK_XSL/xhtml/docbook.xsl"; then
- DOCBOOK_XHTML="$DOCBOOK_XSL/xhtml/docbook.xsl"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCBOOK_XHTML" >&5
-$as_echo "$DOCBOOK_XHTML" >&6; }
+ if test -n "$LATEX"; then
+ ac_cv_prog_LATEX="$LATEX" # Let the user override the test.
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-DOCBOOK_FO=
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_LATEX="latex"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for xml to fo docbook stylesheets" >&5
-$as_echo_n "checking for xml to fo docbook stylesheets... " >&6; }
-if test -f "$DOCBOOK_XSL/fo/docbook.xsl"; then
- DOCBOOK_FO="$DOCBOOK_XSL/fo/docbook.xsl"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCBOOK_FO" >&5
-$as_echo "$DOCBOOK_FO" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
fi
-
-DOCBOOKX_DTD=
-
-
-# Check whether --with-docbookx-dtd was given.
-if test "${with_docbookx_dtd+set}" = set; then :
- withval=$with_docbookx_dtd; DOCBOOKX_DTD=$withval
-else
- DOCBOOKX_DTD=/usr/share/xml/docbook/schema/dtd/4/docbookx.dtd
fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for docbook 4.x xml DTD" >&5
-$as_echo_n "checking for docbook 4.x xml DTD... " >&6; }
-if test -f "$DOCBOOKX_DTD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCBOOKX_DTD" >&5
-$as_echo "$DOCBOOKX_DTD" >&6; }
+LATEX=$ac_cv_prog_LATEX
+if test -n "$LATEX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LATEX" >&5
+$as_echo "$LATEX" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
-# Extract the first word of "fop", so it can be a program name with args.
-set dummy fop; ac_word=$2
+
+# Extract the first word of "pdflatex", so it can be a program name with args.
+set dummy pdflatex; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_FOP+:} false; then :
+if ${ac_cv_prog_PDFLATEX+:} false; then :
$as_echo_n "(cached) " >&6
else
- if test -n "$FOP"; then
- ac_cv_prog_FOP="$FOP" # Let the user override the test.
+ if test -n "$PDFLATEX"; then
+ ac_cv_prog_PDFLATEX="$PDFLATEX" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -18520,7 +18491,7 @@ do
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_FOP="fop"
+ ac_cv_prog_PDFLATEX="pdflatex"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
@@ -18530,25 +18501,25 @@ IFS=$as_save_IFS
fi
fi
-FOP=$ac_cv_prog_FOP
-if test -n "$FOP"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FOP" >&5
-$as_echo "$FOP" >&6; }
+PDFLATEX=$ac_cv_prog_PDFLATEX
+if test -n "$PDFLATEX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PDFLATEX" >&5
+$as_echo "$PDFLATEX" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
-# Extract the first word of "xsltproc", so it can be a program name with args.
-set dummy xsltproc; ac_word=$2
+# Extract the first word of "latexmk", so it can be a program name with args.
+set dummy latexmk; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_XSLTPROC+:} false; then :
+if ${ac_cv_prog_LATEXMK+:} false; then :
$as_echo_n "(cached) " >&6
else
- if test -n "$XSLTPROC"; then
- ac_cv_prog_XSLTPROC="$XSLTPROC" # Let the user override the test.
+ if test -n "$LATEXMK"; then
+ ac_cv_prog_LATEXMK="$LATEXMK" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -18557,7 +18528,7 @@ do
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_XSLTPROC="xsltproc"
+ ac_cv_prog_LATEXMK="latexmk"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
@@ -18567,25 +18538,25 @@ IFS=$as_save_IFS
fi
fi
-XSLTPROC=$ac_cv_prog_XSLTPROC
-if test -n "$XSLTPROC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XSLTPROC" >&5
-$as_echo "$XSLTPROC" >&6; }
+LATEXMK=$ac_cv_prog_LATEXMK
+if test -n "$LATEXMK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LATEXMK" >&5
+$as_echo "$LATEXMK" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
-# Extract the first word of "xmllint", so it can be a program name with args.
-set dummy xmllint; ac_word=$2
+# Extract the first word of "sphinx-build", so it can be a program name with args.
+set dummy sphinx-build; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_XMLLINT+:} false; then :
+if ${ac_cv_prog_SPHINX+:} false; then :
$as_echo_n "(cached) " >&6
else
- if test -n "$XMLLINT"; then
- ac_cv_prog_XMLLINT="$XMLLINT" # Let the user override the test.
+ if test -n "$SPHINX"; then
+ ac_cv_prog_SPHINX="$SPHINX" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -18594,7 +18565,7 @@ do
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_XMLLINT="xmllint"
+ ac_cv_prog_SPHINX="sphinx-build"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
@@ -18604,10 +18575,10 @@ IFS=$as_save_IFS
fi
fi
-XMLLINT=$ac_cv_prog_XMLLINT
-if test -n "$XMLLINT"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XMLLINT" >&5
-$as_echo "$XMLLINT" >&6; }
+SPHINX=$ac_cv_prog_SPHINX
+if test -n "$SPHINX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SPHINX" >&5
+$as_echo "$SPHINX" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
@@ -18653,19 +18624,6 @@ else
BUILD_PDF=$doc_default
fi
-VALIDATE_DOC=0
-
-# Check whether --enable-validate-doc was given.
-if test "${enable_validate_doc+set}" = set; then :
- enableval=$enable_validate_doc; if test "$enableval" = "yes"; then
- VALIDATE_DOC=1;
- else
- VALIDATE_DOC=0;
- fi
-else
- VALIDATE_DOC=$doc_default
-fi
-
# Check whether --enable-oss-fuzz was given.
@@ -18680,38 +18638,31 @@ else
fi
-if test "$VALIDATE_DOC" = "1"; then
- if test "$XMLLINT" = ""; then
- MISSING_XMLLINT=1
- MISSING_ANY=1
- fi
-fi
if test "$BUILD_HTML" = "1"; then
- if test "$XSLTPROC" = ""; then
- MISSING_XSLTPROC=1
- MISSING_ANY=1
- fi
- if test "$DOCBOOK_XHTML" = ""; then
- MISSING_DOCBOOK_XHTML=1
+ if test "$SPHINX" = ""; then
+ MISSING_SPHINX=1
MISSING_ANY=1
fi
fi
if test "$BUILD_PDF" = "1"; then
- if test "$XSLTPROC" = ""; then
- MISSING_XSLTPROC=1
+ if test "$SPHINX" = ""; then
+ MISSING_SPHINX=1
+ MISSING_ANY=1
+ fi
+ if test "$LATEX" = ""; then
+ MISSING_LATEX=1
MISSING_ANY=1
fi
- if test "$DOCBOOK_FO" = ""; then
- MISSING_DOCBOOK_FO=1
+ if test "$LATEXMK" = ""; then
+ MISSING_LATEXMK=1
MISSING_ANY=1
fi
- if test "$FOP" = ""; then
- MISSING_FOP=1
+ if test "$PDFLATEX" = ""; then
+ MISSING_PDFLATEX=1
MISSING_ANY=1
fi
fi
-
if test "$MISSING_ANY" = "1"; then
ISSUE_WARNINGS=1
fi
@@ -18745,29 +18696,24 @@ if test "$MISSING_JPEG" = "1"; then
$as_echo "$as_me: WARNING: unable to find required library jpeg" >&2;}
fi
-if test "$MISSING_DOCBOOK_FO" = "1"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: docbook fo stylesheets are required to build PDF documentation" >&5
-$as_echo "$as_me: WARNING: docbook fo stylesheets are required to build PDF documentation" >&2;}
-fi
-
-if test "$MISSING_DOCBOOK_XHTML" = "1"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: docbook xhmtl stylesheets are required to build HTML documentation" >&5
-$as_echo "$as_me: WARNING: docbook xhmtl stylesheets are required to build HTML documentation" >&2;}
+if test "$MISSING_LATEX" = "1"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: latex is required to build PDF documentation" >&5
+$as_echo "$as_me: WARNING: latex is required to build PDF documentation" >&2;}
fi
-if test "$MISSING_FOP" = "1"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: apache fop is required to build PDF documentation" >&5
-$as_echo "$as_me: WARNING: apache fop is required to build PDF documentation" >&2;}
+if test "$MISSING_LATEXMK" = "1"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: latexmk is required to build PDF documentation" >&5
+$as_echo "$as_me: WARNING: latexmk is required to build PDF documentation" >&2;}
fi
-if test "$MISSING_XMLLINT" = "1"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xmllint is required to validate documentation" >&5
-$as_echo "$as_me: WARNING: xmllint is required to validate documentation" >&2;}
+if test "$MISSING_PDFLATEX" = "1"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex is required to build PDF documentation" >&5
+$as_echo "$as_me: WARNING: pdflatex is required to build PDF documentation" >&2;}
fi
-if test "$MISSING_XSLTPROC" = "1"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xsltproc is required to build documentation" >&5
-$as_echo "$as_me: WARNING: xsltproc is required to build documentation" >&2;}
+if test "$MISSING_SPHINX" = "1"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: sphinx-build is required to build documentation" >&5
+$as_echo "$as_me: WARNING: sphinx-build is required to build documentation" >&2;}
fi
if test "$ISSUE_WARNINGS" = "1"; then
@@ -19871,8 +19817,6 @@ for ac_config_target in $ac_config_targets
do
case $ac_config_target in
"autoconf.mk") CONFIG_FILES="$CONFIG_FILES autoconf.mk" ;;
- "manual/html.xsl") CONFIG_FILES="$CONFIG_FILES manual/html.xsl" ;;
- "manual/print.xsl") CONFIG_FILES="$CONFIG_FILES manual/print.xsl" ;;
"libqpdf.pc") CONFIG_FILES="$CONFIG_FILES libqpdf.pc" ;;
"libqpdf.map") CONFIG_FILES="$CONFIG_FILES libqpdf.map" ;;
"libqpdf/qpdf/qpdf-config.h") CONFIG_HEADERS="$CONFIG_HEADERS libqpdf/qpdf/qpdf-config.h" ;;
diff --git a/configure.ac b/configure.ac
index 8d81ac3a..5e868dce 100644
--- a/configure.ac
+++ b/configure.ac
@@ -6,7 +6,6 @@ AC_INIT([qpdf],[10.4.0])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_FILES([autoconf.mk])
-AC_CONFIG_FILES([manual/html.xsl manual/print.xsl])
AC_CONFIG_FILES([libqpdf.pc])
AC_CONFIG_FILES([libqpdf.map])
AC_CONFIG_HEADERS([libqpdf/qpdf/qpdf-config.h])
@@ -795,48 +794,10 @@ AC_ARG_ENABLE(show-failed-test-output,
fi],
[SHOW_FAILED_TEST_OUTPUT=0])
-AC_ARG_WITH(docbook-xsl,
- AS_HELP_STRING([--with-docbook-xsl=DIR],
- [location of docbook 4.x xml stylesheets]),
- [DOCBOOK_XSL=$withval],
- [DOCBOOK_XSL=/usr/share/xml/docbook/stylesheet/nwalsh])
-
-DOCBOOK_XHTML=
-AC_SUBST(DOCBOOK_XHTML)
-AC_MSG_CHECKING(for xml to xhtml docbook stylesheets)
-if test -f "$DOCBOOK_XSL/xhtml/docbook.xsl"; then
- DOCBOOK_XHTML="$DOCBOOK_XSL/xhtml/docbook.xsl"
- AC_MSG_RESULT($DOCBOOK_XHTML)
-else
- AC_MSG_RESULT(no)
-fi
-DOCBOOK_FO=
-AC_SUBST(DOCBOOK_FO)
-AC_MSG_CHECKING(for xml to fo docbook stylesheets)
-if test -f "$DOCBOOK_XSL/fo/docbook.xsl"; then
- DOCBOOK_FO="$DOCBOOK_XSL/fo/docbook.xsl"
- AC_MSG_RESULT($DOCBOOK_FO)
-else
- AC_MSG_RESULT(no)
-fi
-
-DOCBOOKX_DTD=
-AC_SUBST(DOCBOOKX_DTD)
-AC_ARG_WITH(docbookx-dtd,
- AS_HELP_STRING([--with-docbookx-dtd=FILE],
- [location of docbook 4.x xml DTD]),
- [DOCBOOKX_DTD=$withval],
- [DOCBOOKX_DTD=/usr/share/xml/docbook/schema/dtd/4/docbookx.dtd])
-AC_MSG_CHECKING(for docbook 4.x xml DTD)
-if test -f "$DOCBOOKX_DTD"; then
- AC_MSG_RESULT($DOCBOOKX_DTD)
-else
- AC_MSG_RESULT(no)
-fi
-
-AC_CHECK_PROG(FOP,fop,fop,[])
-AC_CHECK_PROG(XSLTPROC,xsltproc,xsltproc,[])
-AC_CHECK_PROG(XMLLINT,xmllint,xmllint,[])
+AC_CHECK_PROG(LATEX,latex,latex,[])
+AC_CHECK_PROG(PDFLATEX,pdflatex,pdflatex,[])
+AC_CHECK_PROG(LATEXMK,latexmk,latexmk,[])
+AC_CHECK_PROG(SPHINX,sphinx-build,sphinx-build,[])
AC_ARG_ENABLE(doc-maintenance,
AS_HELP_STRING([--enable-doc-maintenance],
@@ -870,17 +831,6 @@ AC_ARG_ENABLE(pdf-doc,
BUILD_PDF=0;
fi],
[BUILD_PDF=$doc_default])
-VALIDATE_DOC=0
-AC_SUBST(VALIDATE_DOC)
-AC_ARG_ENABLE(validate-doc,
- AS_HELP_STRING([--enable-validate-doc],
- [whether to validate xml document source]),
- [if test "$enableval" = "yes"; then
- VALIDATE_DOC=1;
- else
- VALIDATE_DOC=0;
- fi],
- [VALIDATE_DOC=$doc_default])
AC_SUBST(OSS_FUZZ)
AC_ARG_ENABLE(oss-fuzz,
@@ -893,38 +843,31 @@ AC_ARG_ENABLE(oss-fuzz,
fi],
[OSS_FUZZ=0])
-if test "$VALIDATE_DOC" = "1"; then
- if test "$XMLLINT" = ""; then
- MISSING_XMLLINT=1
- MISSING_ANY=1
- fi
-fi
if test "$BUILD_HTML" = "1"; then
- if test "$XSLTPROC" = ""; then
- MISSING_XSLTPROC=1
- MISSING_ANY=1
- fi
- if test "$DOCBOOK_XHTML" = ""; then
- MISSING_DOCBOOK_XHTML=1
+ if test "$SPHINX" = ""; then
+ MISSING_SPHINX=1
MISSING_ANY=1
fi
fi
if test "$BUILD_PDF" = "1"; then
- if test "$XSLTPROC" = ""; then
- MISSING_XSLTPROC=1
+ if test "$SPHINX" = ""; then
+ MISSING_SPHINX=1
+ MISSING_ANY=1
+ fi
+ if test "$LATEX" = ""; then
+ MISSING_LATEX=1
MISSING_ANY=1
fi
- if test "$DOCBOOK_FO" = ""; then
- MISSING_DOCBOOK_FO=1
+ if test "$LATEXMK" = ""; then
+ MISSING_LATEXMK=1
MISSING_ANY=1
fi
- if test "$FOP" = ""; then
- MISSING_FOP=1
+ if test "$PDFLATEX" = ""; then
+ MISSING_PDFLATEX=1
MISSING_ANY=1
fi
fi
-
if test "$MISSING_ANY" = "1"; then
ISSUE_WARNINGS=1
fi
@@ -953,24 +896,20 @@ if test "$MISSING_JPEG" = "1"; then
AC_MSG_WARN(unable to find required library jpeg)
fi
-if test "$MISSING_DOCBOOK_FO" = "1"; then
- AC_MSG_WARN(docbook fo stylesheets are required to build PDF documentation)
-fi
-
-if test "$MISSING_DOCBOOK_XHTML" = "1"; then
- AC_MSG_WARN(docbook xhmtl stylesheets are required to build HTML documentation)
+if test "$MISSING_LATEX" = "1"; then
+ AC_MSG_WARN(latex is required to build PDF documentation)
fi
-if test "$MISSING_FOP" = "1"; then
- AC_MSG_WARN(apache fop is required to build PDF documentation)
+if test "$MISSING_LATEXMK" = "1"; then
+ AC_MSG_WARN(latexmk is required to build PDF documentation)
fi
-if test "$MISSING_XMLLINT" = "1"; then
- AC_MSG_WARN(xmllint is required to validate documentation)
+if test "$MISSING_PDFLATEX" = "1"; then
+ AC_MSG_WARN(pdflatex is required to build PDF documentation)
fi
-if test "$MISSING_XSLTPROC" = "1"; then
- AC_MSG_WARN(xsltproc is required to build documentation)
+if test "$MISSING_SPHINX" = "1"; then
+ AC_MSG_WARN(sphinx-build is required to build documentation)
fi
if test "$ISSUE_WARNINGS" = "1"; then
diff --git a/make/installwin.mk b/make/installwin.mk
index 3ed541ae..4acf9e3f 100644
--- a/make/installwin.mk
+++ b/make/installwin.mk
@@ -17,9 +17,10 @@ installwin: all
cp qpdf/$(OUTPUT_DIR)/fix-qdf.exe $(DEST)/bin
cp include/qpdf/*.h $(DEST)/include/qpdf
cp include/qpdf/*.hh $(DEST)/include/qpdf
- cp doc/stylesheet.css $(DEST)/doc
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 \
cp doc/qpdf-manual.pdf $(DEST)/doc; \
diff --git a/make/libtool.mk b/make/libtool.mk
index 2ff96f86..eda53732 100644
--- a/make/libtool.mk
+++ b/make/libtool.mk
@@ -120,6 +120,12 @@ install-libs: build_libqpdf
# NOTE: If installing any new executables, remember to update the
# 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
+# this.
+
install: all install-libs
./mkinstalldirs -m 0755 $(DESTDIR)$(bindir)
./mkinstalldirs -m 0755 $(DESTDIR)$(docdir)
@@ -133,9 +139,10 @@ install: all install-libs
$(LIBTOOL) --mode=install ./install-sh \
qpdf/$(OUTPUT_DIR)/fix-qdf \
$(DESTDIR)$(bindir)/fix-qdf
- ./install-sh -m 0644 doc/stylesheet.css $(DESTDIR)$(docdir)
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 \
./install-sh -m 0644 doc/qpdf-manual.pdf $(DESTDIR)$(docdir); \
diff --git a/make_dist b/make_dist
index d6e42332..60ce9842 100755
--- a/make_dist
+++ b/make_dist
@@ -78,7 +78,7 @@ if ($version ne $code_version)
}
if ($version ne $doc_version)
{
- print "$whoami: qpdf-manual.xml version = $doc_version\n";
+ print "$whoami: doc version = $doc_version\n";
$version_error = 1;
}
if ($version ne $cli_version)
@@ -153,11 +153,11 @@ sub get_version_from_source
sub get_version_from_manual
{
- my $fh = safe_open("manual/qpdf-manual.xml");
+ my $fh = safe_open("manual/conf.py");
my $doc_version = 'unknown';
while (<$fh>)
{
- if (m/swversion "([^\"]+)\"/)
+ if (m/release = '([^\']+)\'/)
{
$doc_version = $1;
last;
diff --git a/manual/build.mk b/manual/build.mk
index 3911b8e2..89285b94 100644
--- a/manual/build.mk
+++ b/manual/build.mk
@@ -1,45 +1,55 @@
-INDOC = manual/qpdf-manual
-OUTDOC = manual/$(OUTPUT_DIR)/qpdf-manual
+DOC_OUT := manual/$(OUTPUT_DIR)
+S_HTML_OUT := $(DOC_OUT)/singlehtml
+S_HTML_TARGET := $(S_HTML_OUT)/index.html
+HTML_OUT := $(DOC_OUT)/html
+HTML_TARGET := $(HTML_OUT)/index.html
+PDF_OUT := $(DOC_OUT)/latex
+PDF_TARGET := $(PDF_OUT)/qpdf.pdf
TARGETS_manual := doc/qpdf.1 doc/fix-qdf.1 doc/zlib-flate.1
ifeq ($(BUILD_HTML),1)
-TARGETS_manual += doc/qpdf-manual.html
+TARGETS_manual += doc/qpdf-manual.html $(HTML_TARGET)
endif
ifeq ($(BUILD_PDF),1)
TARGETS_manual += doc/qpdf-manual.pdf
endif
-VALIDATE=manual/$(OUTPUT_DIR)/validate
-
-ifeq ($(VALIDATE_DOC),1)
-
-$(VALIDATE): $(INDOC).xml
- $(XMLLINT) --noout --dtdvalid $(DOCBOOKX_DTD) $<
- touch $(VALIDATE)
-
-else
-
-$(VALIDATE):
- touch $(VALIDATE)
-
-endif
-
-$(OUTDOC).pdf: $(OUTDOC).fo qpdf/build/qpdf
- $(FOP) $< -pdf $@.tmp
- qpdf/build/qpdf --linearize --object-streams=generate \
- --recompress-flate --compression-level=9 $@.tmp $@
-
-$(OUTDOC).html: $(INDOC).xml manual/html.xsl $(VALIDATE)
- $(XSLTPROC) --output $@ manual/html.xsl $<
+# Prevent targets that run $(SPHINX) from running in parallel by using
+# order-only dependencies (the dependencies listed after the |) to
+# avoid clashes in temporary files that cause the build to fail with
+# the error "_pickle.UnpicklingError: pickle data was truncated"
+$(HTML_TARGET): manual/index.rst
+ $(SPHINX) -M html manual $(DOC_OUT) -W
+
+$(S_HTML_TARGET): manual/index.rst | $(HTML_TARGET)
+ $(SPHINX) -M singlehtml manual $(DOC_OUT) -W
+
+$(PDF_TARGET): manual/index.rst | $(S_HTML_TARGET) $(HTML_TARGET)
+ $(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
+ @if [ "$(shell find $(S_HTML_OUT)/ -mindepth 1 -type d -print)" != \
+ "$(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
-.PRECIOUS: $(OUTDOC).fo
-$(OUTDOC).fo: $(INDOC).xml manual/print.xsl $(VALIDATE)
- $(XSLTPROC) --output $@ manual/print.xsl $<
+doc/qpdf-manual.pdf: $(PDF_TARGET)
+ mkdir -p doc
+ cp $< $@
doc/%.1: manual/%.1.in
+ mkdir -p doc
sed -e 's:@PACKAGE_VERSION@:$(PACKAGE_VERSION):g' \
-e 's:@docdir@:$(docdir):g' \
< $< > $@
-
-doc/%: manual/$(OUTPUT_DIR)/%
- cp $< $@