Commit a372a988fdcdf84c8ba2e47f021802fc3ffb9089

Authored by Jay Berkenbilt
1 parent abb6a16e

Switch build from docbook manual to sphinx

Also remove linearization from qpdf-manual.pdf. It's a small file, and
removing the dependency on the qpdf executable significantly shortens
build times.
Makefile
... ... @@ -100,7 +100,7 @@ $(foreach B,$(BUILD_ITEMS),$(eval \
100 100 DISTFILES = doc/qpdf-manual.html doc/qpdf-manual.pdf
101 101 distfiles.zip: $(DISTFILES)
102 102 $(RM) distfiles.zip
103   - zip distfiles.zip $(DISTFILES)
  103 + zip -r distfiles.zip $(DISTFILES) doc/_static
104 104  
105 105 distclean: clean
106 106 $(RM) -r autoconf.mk autom4te.cache config.log config.status libtool
... ...
... ... @@ -42,20 +42,6 @@ Correct placement of comment: <!-- This section is referenced in QPDFObjectHandl
42 42 <firstterm> -> just use literal
43 43 <replaceable> -> Make sure in :file: or :samp:, then use {}
44 44  
45   -Build:
46   -
47   -apt install python3-pip texlive-latex-extra latexmk
48   -pip install sphinx
49   -
50   -sphinx-build -M help . .
51   -sphinx-build -M latexpdf source build
52   -sphinx-build -M html source build
53   -sphinx-build -M singlehtml source build
54   -
55   -autoconf should detect sphinx and its dependencies, not fop, etc.
56   -Remove VALIDATE_DOC
57   -Fix installation of documentation in doc
58   -
59 45 Additional cleanup:
60 46  
61 47 * Indices and tables section
... ...
aclocal.m4
1   -# generated automatically by aclocal 1.16.1 -*- Autoconf -*-
  1 +# generated automatically by aclocal 1.16.4 -*- Autoconf -*-
2 2  
3   -# Copyright (C) 1996-2018 Free Software Foundation, Inc.
  3 +# Copyright (C) 1996-2021 Free Software Foundation, Inc.
4 4  
5 5 # This file is free software; the Free Software Foundation
6 6 # gives unlimited permission to copy and/or distribute it,
... ...
appimage/Dockerfile
1   -FROM ubuntu:16.04
  1 +FROM ubuntu:18.04
  2 +ENV DEBIAN_FRONTEND=noninteractive
2 3 RUN apt-get update && \
3 4 apt-get -y install screen autoconf git sudo \
4 5 build-essential zlib1g-dev libjpeg-dev libgnutls28-dev \
5   - docbook-xsl fop xsltproc \
  6 + python3-pip texlive-latex-extra latexmk \
6 7 inkscape imagemagick busybox-static wget fuse && \
7 8 apt-get clean && \
8 9 rm -rf /var/lib/apt/lists/*
  10 +RUN pip3 install sphinx
9 11 COPY entrypoint /entrypoint
10 12 RUN chmod +x /entrypoint
11 13 ENTRYPOINT [ "/entrypoint" ]
... ...
appimage/build-appimage
... ... @@ -43,24 +43,25 @@ if [ &quot;x$1&quot; == &quot;x--sign&quot; ]; then
43 43 fi
44 44  
45 45  
46   -# Check if we are on Ubuntu Trusty
  46 +# Check Ubuntu Distribution
47 47 _osversion=$(cat /etc/os-release | grep PRETTY_NAME | awk -F'=' '{print $2}' | sed 's#"##g')
48 48  
49 49 # Warn users building the AppImage locally:
50   -if [[ ! $_osversion =~ Ubuntu\ 16.04.*\ LTS ]]; then
  50 +if [[ ! $_osversion =~ Ubuntu\ 18.04.*\ LTS ]]; then
51 51 set +x
52 52 echo ""
53 53 # 0 1 2 3 4 5 6 7
54 54 # 01234567890123456789012345678901234567890123456789012345678901234567890123456789
55 55 echo "+===========================================================================+"
56 56 echo "|| WARNING: You are about to build a QPDF AppImage on a system which is ||"
57   - echo "|| NOT Ubuntu 16.04 LTS ('Xenial'). ||"
  57 + echo "|| NOT Ubuntu 18.04 LTS. ||"
58 58 echo "|| ||"
59 59 echo "|| It is recommended that you use a distribution that is at least a ||"
60 60 echo "|| few years old to maximize the number of Linux distributions the ||"
61 61 echo "|| resulting AppImage will work on. AppImages often don't work on ||"
62 62 echo "|| distributions older than the one they were built on because of ||"
63   - echo "|| standard library differences. ||"
  63 + echo "|| standard library differences. The oldest supported Ubuntu LTS is ||"
  64 + echo "|| a good option. ||"
64 65 echo "+===========================================================================+"
65 66 echo ""
66 67 set -x
... ...
autoconf.mk.in
... ... @@ -34,13 +34,9 @@ LIBTOOL=@LIBTOOL@
34 34 USE_CRYPTO_NATIVE=@USE_CRYPTO_NATIVE@
35 35 USE_CRYPTO_OPENSSL=@USE_CRYPTO_OPENSSL@
36 36 USE_CRYPTO_GNUTLS=@USE_CRYPTO_GNUTLS@
37   -DOCBOOKX_DTD=@DOCBOOKX_DTD@
38   -FOP=@FOP@
39   -XSLTPROC=@XSLTPROC@
40   -XMLLINT=@XMLLINT@
  37 +SPHINX=@SPHINX@
41 38 BUILD_HTML=@BUILD_HTML@
42 39 BUILD_PDF=@BUILD_PDF@
43   -VALIDATE_DOC=@VALIDATE_DOC@
44 40 OSS_FUZZ=@OSS_FUZZ@
45 41 QPDF_SKIP_TEST_COMPARE_IMAGES=@QPDF_SKIP_TEST_COMPARE_IMAGES@
46 42 BUILDRULES=@BUILDRULES@
... ...
autofiles.sums
1   -e8f33e2b17d8c04fc1c160e9a92e7f1e48e433467f734629cdbb873f2d6fa676 configure.ac
2   -d3f9ee6f6f0846888d9a10fd3dad2e4b1258be84205426cf04d7cef02d61dad7 aclocal.m4
  1 +44c66263db20dec40cefe94df4f9f9effe7410f20865cd53cf89268f6a98010f configure.ac
  2 +a45b129101efb46d7ac59ca2cf12d137a5742c2593ea11ebb32401aefd915b96 aclocal.m4
3 3 c12d837479fa9a3fa4c278b6dc7d6b449503d663e0f0d294305595a51ff43f70 libqpdf/qpdf/qpdf-config.h.in
4 4 5297971a0ef90bcd5563eb3f7127a032bb76d3ae2af7258bf13479caf8983a60 m4/ax_cxx_compile_stdcxx.m4
5 5 35bc5c645dc42d47f2daeea06f8f3e767c8a1aee6a35eb2b4854fd2ce66c3413 m4/ax_random_device.m4
... ...
build-scripts/build-linux
... ... @@ -3,8 +3,9 @@ set -ex
3 3 sudo apt-get update
4 4 sudo apt-get -y install \
5 5 autoconf build-essential zlib1g-dev libjpeg-dev libgnutls28-dev \
6   - libssl-dev docbook-xsl fop xsltproc libxml2-utils inkscape imagemagick \
7   - libtiff-tools ghostscript
  6 + libssl-dev python3-pip texlive-latex-extra latexmk \
  7 + inkscape imagemagick libtiff-tools ghostscript
  8 +pip3 install sphinx
8 9 ./configure --enable-werror --enable-doc-maintenance \
9 10 --enable-crypto-native --enable-crypto-openssl --enable-crypto-gnutls \
10 11 --enable-show-failed-test-output --enable-test-compare-images
... ...
build-scripts/make-distfiles
... ... @@ -4,7 +4,8 @@ set -ex
4 4 sudo apt-get update
5 5 sudo apt-get -y install \
6 6 autoconf build-essential zlib1g-dev libjpeg-dev \
7   - docbook-xsl fop xsltproc libxml2-utils inkscape imagemagick
  7 + python3-pip texlive-latex-extra latexmk inkscape imagemagick
  8 +pip3 install sphinx
8 9 ./configure --enable-doc-maintenance
9 10 make -j$(nproc) distfiles.zip
10 11 build-scripts/download-external-libs
... ...
configure
... ... @@ -631,15 +631,12 @@ ac_includes_default=&quot;\
631 631 ac_subst_vars='LTLIBOBJS
632 632 LIBOBJS
633 633 OSS_FUZZ
634   -VALIDATE_DOC
635 634 BUILD_PDF
636 635 BUILD_HTML
637   -XMLLINT
638   -XSLTPROC
639   -FOP
640   -DOCBOOKX_DTD
641   -DOCBOOK_FO
642   -DOCBOOK_XHTML
  636 +SPHINX
  637 +LATEXMK
  638 +PDFLATEX
  639 +LATEX
643 640 SHOW_FAILED_TEST_OUTPUT
644 641 QPDF_SKIP_TEST_COMPARE_IMAGES
645 642 DEFAULT_CRYPTO
... ... @@ -794,12 +791,9 @@ enable_crypto_gnutls
794 791 with_default_crypto
795 792 enable_test_compare_images
796 793 enable_show_failed_test_output
797   -with_docbook_xsl
798   -with_docbookx_dtd
799 794 enable_doc_maintenance
800 795 enable_html_doc
801 796 enable_pdf_doc
802   -enable_validate_doc
803 797 enable_oss_fuzz
804 798 '
805 799 ac_precious_vars='build_alias
... ... @@ -1497,7 +1491,6 @@ Optional Features:
1497 1491 if set, enables all documentation options
1498 1492 --enable-html-doc whether to build HTML documents
1499 1493 --enable-pdf-doc whether to build PDF documents
1500   - --enable-validate-doc whether to validate xml document source
1501 1494 --enable-oss-fuzz if set, build static fuzzers for oss-fuzz
1502 1495  
1503 1496 Optional Packages:
... ... @@ -1523,9 +1516,6 @@ Optional Packages:
1523 1516 --with-default-crypto=provider
1524 1517 which crypto provider to use by default; see
1525 1518 README.md
1526   - --with-docbook-xsl=DIR location of docbook 4.x xml stylesheets
1527   - --with-docbookx-dtd=FILE
1528   - location of docbook 4.x xml DTD
1529 1519  
1530 1520 Some influential environment variables:
1531 1521 CC C compiler command
... ... @@ -2650,8 +2640,6 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
2650 2640  
2651 2641 ac_config_files="$ac_config_files autoconf.mk"
2652 2642  
2653   -ac_config_files="$ac_config_files manual/html.xsl manual/print.xsl"
2654   -
2655 2643 ac_config_files="$ac_config_files libqpdf.pc"
2656 2644  
2657 2645 ac_config_files="$ac_config_files libqpdf.map"
... ... @@ -18449,69 +18437,52 @@ else
18449 18437 fi
18450 18438  
18451 18439  
18452   -
18453   -# Check whether --with-docbook-xsl was given.
18454   -if test "${with_docbook_xsl+set}" = set; then :
18455   - withval=$with_docbook_xsl; DOCBOOK_XSL=$withval
  18440 +# Extract the first word of "latex", so it can be a program name with args.
  18441 +set dummy latex; ac_word=$2
  18442 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
  18443 +$as_echo_n "checking for $ac_word... " >&6; }
  18444 +if ${ac_cv_prog_LATEX+:} false; then :
  18445 + $as_echo_n "(cached) " >&6
18456 18446 else
18457   - DOCBOOK_XSL=/usr/share/xml/docbook/stylesheet/nwalsh
18458   -fi
18459   -
18460   -
18461   -DOCBOOK_XHTML=
18462   -
18463   -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for xml to xhtml docbook stylesheets" >&5
18464   -$as_echo_n "checking for xml to xhtml docbook stylesheets... " >&6; }
18465   -if test -f "$DOCBOOK_XSL/xhtml/docbook.xsl"; then
18466   - DOCBOOK_XHTML="$DOCBOOK_XSL/xhtml/docbook.xsl"
18467   - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCBOOK_XHTML" >&5
18468   -$as_echo "$DOCBOOK_XHTML" >&6; }
  18447 + if test -n "$LATEX"; then
  18448 + ac_cv_prog_LATEX="$LATEX" # Let the user override the test.
18469 18449 else
18470   - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
18471   -$as_echo "no" >&6; }
18472   -fi
18473   -DOCBOOK_FO=
  18450 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  18451 +for as_dir in $PATH
  18452 +do
  18453 + IFS=$as_save_IFS
  18454 + test -z "$as_dir" && as_dir=.
  18455 + for ac_exec_ext in '' $ac_executable_extensions; do
  18456 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  18457 + ac_cv_prog_LATEX="latex"
  18458 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
  18459 + break 2
  18460 + fi
  18461 +done
  18462 + done
  18463 +IFS=$as_save_IFS
18474 18464  
18475   -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for xml to fo docbook stylesheets" >&5
18476   -$as_echo_n "checking for xml to fo docbook stylesheets... " >&6; }
18477   -if test -f "$DOCBOOK_XSL/fo/docbook.xsl"; then
18478   - DOCBOOK_FO="$DOCBOOK_XSL/fo/docbook.xsl"
18479   - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCBOOK_FO" >&5
18480   -$as_echo "$DOCBOOK_FO" >&6; }
18481   -else
18482   - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
18483   -$as_echo "no" >&6; }
18484 18465 fi
18485   -
18486   -DOCBOOKX_DTD=
18487   -
18488   -
18489   -# Check whether --with-docbookx-dtd was given.
18490   -if test "${with_docbookx_dtd+set}" = set; then :
18491   - withval=$with_docbookx_dtd; DOCBOOKX_DTD=$withval
18492   -else
18493   - DOCBOOKX_DTD=/usr/share/xml/docbook/schema/dtd/4/docbookx.dtd
18494 18466 fi
18495   -
18496   -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for docbook 4.x xml DTD" >&5
18497   -$as_echo_n "checking for docbook 4.x xml DTD... " >&6; }
18498   -if test -f "$DOCBOOKX_DTD"; then
18499   - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCBOOKX_DTD" >&5
18500   -$as_echo "$DOCBOOKX_DTD" >&6; }
  18467 +LATEX=$ac_cv_prog_LATEX
  18468 +if test -n "$LATEX"; then
  18469 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LATEX" >&5
  18470 +$as_echo "$LATEX" >&6; }
18501 18471 else
18502   - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  18472 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
18503 18473 $as_echo "no" >&6; }
18504 18474 fi
18505 18475  
18506   -# Extract the first word of "fop", so it can be a program name with args.
18507   -set dummy fop; ac_word=$2
  18476 +
  18477 +# Extract the first word of "pdflatex", so it can be a program name with args.
  18478 +set dummy pdflatex; ac_word=$2
18508 18479 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
18509 18480 $as_echo_n "checking for $ac_word... " >&6; }
18510   -if ${ac_cv_prog_FOP+:} false; then :
  18481 +if ${ac_cv_prog_PDFLATEX+:} false; then :
18511 18482 $as_echo_n "(cached) " >&6
18512 18483 else
18513   - if test -n "$FOP"; then
18514   - ac_cv_prog_FOP="$FOP" # Let the user override the test.
  18484 + if test -n "$PDFLATEX"; then
  18485 + ac_cv_prog_PDFLATEX="$PDFLATEX" # Let the user override the test.
18515 18486 else
18516 18487 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
18517 18488 for as_dir in $PATH
... ... @@ -18520,7 +18491,7 @@ do
18520 18491 test -z "$as_dir" && as_dir=.
18521 18492 for ac_exec_ext in '' $ac_executable_extensions; do
18522 18493 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
18523   - ac_cv_prog_FOP="fop"
  18494 + ac_cv_prog_PDFLATEX="pdflatex"
18524 18495 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
18525 18496 break 2
18526 18497 fi
... ... @@ -18530,25 +18501,25 @@ IFS=$as_save_IFS
18530 18501  
18531 18502 fi
18532 18503 fi
18533   -FOP=$ac_cv_prog_FOP
18534   -if test -n "$FOP"; then
18535   - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FOP" >&5
18536   -$as_echo "$FOP" >&6; }
  18504 +PDFLATEX=$ac_cv_prog_PDFLATEX
  18505 +if test -n "$PDFLATEX"; then
  18506 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PDFLATEX" >&5
  18507 +$as_echo "$PDFLATEX" >&6; }
18537 18508 else
18538 18509 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
18539 18510 $as_echo "no" >&6; }
18540 18511 fi
18541 18512  
18542 18513  
18543   -# Extract the first word of "xsltproc", so it can be a program name with args.
18544   -set dummy xsltproc; ac_word=$2
  18514 +# Extract the first word of "latexmk", so it can be a program name with args.
  18515 +set dummy latexmk; ac_word=$2
18545 18516 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
18546 18517 $as_echo_n "checking for $ac_word... " >&6; }
18547   -if ${ac_cv_prog_XSLTPROC+:} false; then :
  18518 +if ${ac_cv_prog_LATEXMK+:} false; then :
18548 18519 $as_echo_n "(cached) " >&6
18549 18520 else
18550   - if test -n "$XSLTPROC"; then
18551   - ac_cv_prog_XSLTPROC="$XSLTPROC" # Let the user override the test.
  18521 + if test -n "$LATEXMK"; then
  18522 + ac_cv_prog_LATEXMK="$LATEXMK" # Let the user override the test.
18552 18523 else
18553 18524 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
18554 18525 for as_dir in $PATH
... ... @@ -18557,7 +18528,7 @@ do
18557 18528 test -z "$as_dir" && as_dir=.
18558 18529 for ac_exec_ext in '' $ac_executable_extensions; do
18559 18530 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
18560   - ac_cv_prog_XSLTPROC="xsltproc"
  18531 + ac_cv_prog_LATEXMK="latexmk"
18561 18532 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
18562 18533 break 2
18563 18534 fi
... ... @@ -18567,25 +18538,25 @@ IFS=$as_save_IFS
18567 18538  
18568 18539 fi
18569 18540 fi
18570   -XSLTPROC=$ac_cv_prog_XSLTPROC
18571   -if test -n "$XSLTPROC"; then
18572   - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XSLTPROC" >&5
18573   -$as_echo "$XSLTPROC" >&6; }
  18541 +LATEXMK=$ac_cv_prog_LATEXMK
  18542 +if test -n "$LATEXMK"; then
  18543 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LATEXMK" >&5
  18544 +$as_echo "$LATEXMK" >&6; }
18574 18545 else
18575 18546 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
18576 18547 $as_echo "no" >&6; }
18577 18548 fi
18578 18549  
18579 18550  
18580   -# Extract the first word of "xmllint", so it can be a program name with args.
18581   -set dummy xmllint; ac_word=$2
  18551 +# Extract the first word of "sphinx-build", so it can be a program name with args.
  18552 +set dummy sphinx-build; ac_word=$2
18582 18553 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
18583 18554 $as_echo_n "checking for $ac_word... " >&6; }
18584   -if ${ac_cv_prog_XMLLINT+:} false; then :
  18555 +if ${ac_cv_prog_SPHINX+:} false; then :
18585 18556 $as_echo_n "(cached) " >&6
18586 18557 else
18587   - if test -n "$XMLLINT"; then
18588   - ac_cv_prog_XMLLINT="$XMLLINT" # Let the user override the test.
  18558 + if test -n "$SPHINX"; then
  18559 + ac_cv_prog_SPHINX="$SPHINX" # Let the user override the test.
18589 18560 else
18590 18561 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
18591 18562 for as_dir in $PATH
... ... @@ -18594,7 +18565,7 @@ do
18594 18565 test -z "$as_dir" && as_dir=.
18595 18566 for ac_exec_ext in '' $ac_executable_extensions; do
18596 18567 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
18597   - ac_cv_prog_XMLLINT="xmllint"
  18568 + ac_cv_prog_SPHINX="sphinx-build"
18598 18569 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
18599 18570 break 2
18600 18571 fi
... ... @@ -18604,10 +18575,10 @@ IFS=$as_save_IFS
18604 18575  
18605 18576 fi
18606 18577 fi
18607   -XMLLINT=$ac_cv_prog_XMLLINT
18608   -if test -n "$XMLLINT"; then
18609   - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XMLLINT" >&5
18610   -$as_echo "$XMLLINT" >&6; }
  18578 +SPHINX=$ac_cv_prog_SPHINX
  18579 +if test -n "$SPHINX"; then
  18580 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SPHINX" >&5
  18581 +$as_echo "$SPHINX" >&6; }
18611 18582 else
18612 18583 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
18613 18584 $as_echo "no" >&6; }
... ... @@ -18653,19 +18624,6 @@ else
18653 18624 BUILD_PDF=$doc_default
18654 18625 fi
18655 18626  
18656   -VALIDATE_DOC=0
18657   -
18658   -# Check whether --enable-validate-doc was given.
18659   -if test "${enable_validate_doc+set}" = set; then :
18660   - enableval=$enable_validate_doc; if test "$enableval" = "yes"; then
18661   - VALIDATE_DOC=1;
18662   - else
18663   - VALIDATE_DOC=0;
18664   - fi
18665   -else
18666   - VALIDATE_DOC=$doc_default
18667   -fi
18668   -
18669 18627  
18670 18628  
18671 18629 # Check whether --enable-oss-fuzz was given.
... ... @@ -18680,38 +18638,31 @@ else
18680 18638 fi
18681 18639  
18682 18640  
18683   -if test "$VALIDATE_DOC" = "1"; then
18684   - if test "$XMLLINT" = ""; then
18685   - MISSING_XMLLINT=1
18686   - MISSING_ANY=1
18687   - fi
18688   -fi
18689 18641 if test "$BUILD_HTML" = "1"; then
18690   - if test "$XSLTPROC" = ""; then
18691   - MISSING_XSLTPROC=1
18692   - MISSING_ANY=1
18693   - fi
18694   - if test "$DOCBOOK_XHTML" = ""; then
18695   - MISSING_DOCBOOK_XHTML=1
  18642 + if test "$SPHINX" = ""; then
  18643 + MISSING_SPHINX=1
18696 18644 MISSING_ANY=1
18697 18645 fi
18698 18646 fi
18699 18647 if test "$BUILD_PDF" = "1"; then
18700   - if test "$XSLTPROC" = ""; then
18701   - MISSING_XSLTPROC=1
  18648 + if test "$SPHINX" = ""; then
  18649 + MISSING_SPHINX=1
  18650 + MISSING_ANY=1
  18651 + fi
  18652 + if test "$LATEX" = ""; then
  18653 + MISSING_LATEX=1
18702 18654 MISSING_ANY=1
18703 18655 fi
18704   - if test "$DOCBOOK_FO" = ""; then
18705   - MISSING_DOCBOOK_FO=1
  18656 + if test "$LATEXMK" = ""; then
  18657 + MISSING_LATEXMK=1
18706 18658 MISSING_ANY=1
18707 18659 fi
18708   - if test "$FOP" = ""; then
18709   - MISSING_FOP=1
  18660 + if test "$PDFLATEX" = ""; then
  18661 + MISSING_PDFLATEX=1
18710 18662 MISSING_ANY=1
18711 18663 fi
18712 18664 fi
18713 18665  
18714   -
18715 18666 if test "$MISSING_ANY" = "1"; then
18716 18667 ISSUE_WARNINGS=1
18717 18668 fi
... ... @@ -18745,29 +18696,24 @@ if test &quot;$MISSING_JPEG&quot; = &quot;1&quot;; then
18745 18696 $as_echo "$as_me: WARNING: unable to find required library jpeg" >&2;}
18746 18697 fi
18747 18698  
18748   -if test "$MISSING_DOCBOOK_FO" = "1"; then
18749   - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: docbook fo stylesheets are required to build PDF documentation" >&5
18750   -$as_echo "$as_me: WARNING: docbook fo stylesheets are required to build PDF documentation" >&2;}
18751   -fi
18752   -
18753   -if test "$MISSING_DOCBOOK_XHTML" = "1"; then
18754   - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: docbook xhmtl stylesheets are required to build HTML documentation" >&5
18755   -$as_echo "$as_me: WARNING: docbook xhmtl stylesheets are required to build HTML documentation" >&2;}
  18699 +if test "$MISSING_LATEX" = "1"; then
  18700 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: latex is required to build PDF documentation" >&5
  18701 +$as_echo "$as_me: WARNING: latex is required to build PDF documentation" >&2;}
18756 18702 fi
18757 18703  
18758   -if test "$MISSING_FOP" = "1"; then
18759   - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: apache fop is required to build PDF documentation" >&5
18760   -$as_echo "$as_me: WARNING: apache fop is required to build PDF documentation" >&2;}
  18704 +if test "$MISSING_LATEXMK" = "1"; then
  18705 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: latexmk is required to build PDF documentation" >&5
  18706 +$as_echo "$as_me: WARNING: latexmk is required to build PDF documentation" >&2;}
18761 18707 fi
18762 18708  
18763   -if test "$MISSING_XMLLINT" = "1"; then
18764   - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xmllint is required to validate documentation" >&5
18765   -$as_echo "$as_me: WARNING: xmllint is required to validate documentation" >&2;}
  18709 +if test "$MISSING_PDFLATEX" = "1"; then
  18710 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex is required to build PDF documentation" >&5
  18711 +$as_echo "$as_me: WARNING: pdflatex is required to build PDF documentation" >&2;}
18766 18712 fi
18767 18713  
18768   -if test "$MISSING_XSLTPROC" = "1"; then
18769   - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xsltproc is required to build documentation" >&5
18770   -$as_echo "$as_me: WARNING: xsltproc is required to build documentation" >&2;}
  18714 +if test "$MISSING_SPHINX" = "1"; then
  18715 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: sphinx-build is required to build documentation" >&5
  18716 +$as_echo "$as_me: WARNING: sphinx-build is required to build documentation" >&2;}
18771 18717 fi
18772 18718  
18773 18719 if test "$ISSUE_WARNINGS" = "1"; then
... ... @@ -19871,8 +19817,6 @@ for ac_config_target in $ac_config_targets
19871 19817 do
19872 19818 case $ac_config_target in
19873 19819 "autoconf.mk") CONFIG_FILES="$CONFIG_FILES autoconf.mk" ;;
19874   - "manual/html.xsl") CONFIG_FILES="$CONFIG_FILES manual/html.xsl" ;;
19875   - "manual/print.xsl") CONFIG_FILES="$CONFIG_FILES manual/print.xsl" ;;
19876 19820 "libqpdf.pc") CONFIG_FILES="$CONFIG_FILES libqpdf.pc" ;;
19877 19821 "libqpdf.map") CONFIG_FILES="$CONFIG_FILES libqpdf.map" ;;
19878 19822 "libqpdf/qpdf/qpdf-config.h") CONFIG_HEADERS="$CONFIG_HEADERS libqpdf/qpdf/qpdf-config.h" ;;
... ...
configure.ac
... ... @@ -6,7 +6,6 @@ AC_INIT([qpdf],[10.4.0])
6 6  
7 7 AC_CONFIG_MACRO_DIR([m4])
8 8 AC_CONFIG_FILES([autoconf.mk])
9   -AC_CONFIG_FILES([manual/html.xsl manual/print.xsl])
10 9 AC_CONFIG_FILES([libqpdf.pc])
11 10 AC_CONFIG_FILES([libqpdf.map])
12 11 AC_CONFIG_HEADERS([libqpdf/qpdf/qpdf-config.h])
... ... @@ -795,48 +794,10 @@ AC_ARG_ENABLE(show-failed-test-output,
795 794 fi],
796 795 [SHOW_FAILED_TEST_OUTPUT=0])
797 796  
798   -AC_ARG_WITH(docbook-xsl,
799   - AS_HELP_STRING([--with-docbook-xsl=DIR],
800   - [location of docbook 4.x xml stylesheets]),
801   - [DOCBOOK_XSL=$withval],
802   - [DOCBOOK_XSL=/usr/share/xml/docbook/stylesheet/nwalsh])
803   -
804   -DOCBOOK_XHTML=
805   -AC_SUBST(DOCBOOK_XHTML)
806   -AC_MSG_CHECKING(for xml to xhtml docbook stylesheets)
807   -if test -f "$DOCBOOK_XSL/xhtml/docbook.xsl"; then
808   - DOCBOOK_XHTML="$DOCBOOK_XSL/xhtml/docbook.xsl"
809   - AC_MSG_RESULT($DOCBOOK_XHTML)
810   -else
811   - AC_MSG_RESULT(no)
812   -fi
813   -DOCBOOK_FO=
814   -AC_SUBST(DOCBOOK_FO)
815   -AC_MSG_CHECKING(for xml to fo docbook stylesheets)
816   -if test -f "$DOCBOOK_XSL/fo/docbook.xsl"; then
817   - DOCBOOK_FO="$DOCBOOK_XSL/fo/docbook.xsl"
818   - AC_MSG_RESULT($DOCBOOK_FO)
819   -else
820   - AC_MSG_RESULT(no)
821   -fi
822   -
823   -DOCBOOKX_DTD=
824   -AC_SUBST(DOCBOOKX_DTD)
825   -AC_ARG_WITH(docbookx-dtd,
826   - AS_HELP_STRING([--with-docbookx-dtd=FILE],
827   - [location of docbook 4.x xml DTD]),
828   - [DOCBOOKX_DTD=$withval],
829   - [DOCBOOKX_DTD=/usr/share/xml/docbook/schema/dtd/4/docbookx.dtd])
830   -AC_MSG_CHECKING(for docbook 4.x xml DTD)
831   -if test -f "$DOCBOOKX_DTD"; then
832   - AC_MSG_RESULT($DOCBOOKX_DTD)
833   -else
834   - AC_MSG_RESULT(no)
835   -fi
836   -
837   -AC_CHECK_PROG(FOP,fop,fop,[])
838   -AC_CHECK_PROG(XSLTPROC,xsltproc,xsltproc,[])
839   -AC_CHECK_PROG(XMLLINT,xmllint,xmllint,[])
  797 +AC_CHECK_PROG(LATEX,latex,latex,[])
  798 +AC_CHECK_PROG(PDFLATEX,pdflatex,pdflatex,[])
  799 +AC_CHECK_PROG(LATEXMK,latexmk,latexmk,[])
  800 +AC_CHECK_PROG(SPHINX,sphinx-build,sphinx-build,[])
840 801  
841 802 AC_ARG_ENABLE(doc-maintenance,
842 803 AS_HELP_STRING([--enable-doc-maintenance],
... ... @@ -870,17 +831,6 @@ AC_ARG_ENABLE(pdf-doc,
870 831 BUILD_PDF=0;
871 832 fi],
872 833 [BUILD_PDF=$doc_default])
873   -VALIDATE_DOC=0
874   -AC_SUBST(VALIDATE_DOC)
875   -AC_ARG_ENABLE(validate-doc,
876   - AS_HELP_STRING([--enable-validate-doc],
877   - [whether to validate xml document source]),
878   - [if test "$enableval" = "yes"; then
879   - VALIDATE_DOC=1;
880   - else
881   - VALIDATE_DOC=0;
882   - fi],
883   - [VALIDATE_DOC=$doc_default])
884 834  
885 835 AC_SUBST(OSS_FUZZ)
886 836 AC_ARG_ENABLE(oss-fuzz,
... ... @@ -893,38 +843,31 @@ AC_ARG_ENABLE(oss-fuzz,
893 843 fi],
894 844 [OSS_FUZZ=0])
895 845  
896   -if test "$VALIDATE_DOC" = "1"; then
897   - if test "$XMLLINT" = ""; then
898   - MISSING_XMLLINT=1
899   - MISSING_ANY=1
900   - fi
901   -fi
902 846 if test "$BUILD_HTML" = "1"; then
903   - if test "$XSLTPROC" = ""; then
904   - MISSING_XSLTPROC=1
905   - MISSING_ANY=1
906   - fi
907   - if test "$DOCBOOK_XHTML" = ""; then
908   - MISSING_DOCBOOK_XHTML=1
  847 + if test "$SPHINX" = ""; then
  848 + MISSING_SPHINX=1
909 849 MISSING_ANY=1
910 850 fi
911 851 fi
912 852 if test "$BUILD_PDF" = "1"; then
913   - if test "$XSLTPROC" = ""; then
914   - MISSING_XSLTPROC=1
  853 + if test "$SPHINX" = ""; then
  854 + MISSING_SPHINX=1
  855 + MISSING_ANY=1
  856 + fi
  857 + if test "$LATEX" = ""; then
  858 + MISSING_LATEX=1
915 859 MISSING_ANY=1
916 860 fi
917   - if test "$DOCBOOK_FO" = ""; then
918   - MISSING_DOCBOOK_FO=1
  861 + if test "$LATEXMK" = ""; then
  862 + MISSING_LATEXMK=1
919 863 MISSING_ANY=1
920 864 fi
921   - if test "$FOP" = ""; then
922   - MISSING_FOP=1
  865 + if test "$PDFLATEX" = ""; then
  866 + MISSING_PDFLATEX=1
923 867 MISSING_ANY=1
924 868 fi
925 869 fi
926 870  
927   -
928 871 if test "$MISSING_ANY" = "1"; then
929 872 ISSUE_WARNINGS=1
930 873 fi
... ... @@ -953,24 +896,20 @@ if test &quot;$MISSING_JPEG&quot; = &quot;1&quot;; then
953 896 AC_MSG_WARN(unable to find required library jpeg)
954 897 fi
955 898  
956   -if test "$MISSING_DOCBOOK_FO" = "1"; then
957   - AC_MSG_WARN(docbook fo stylesheets are required to build PDF documentation)
958   -fi
959   -
960   -if test "$MISSING_DOCBOOK_XHTML" = "1"; then
961   - AC_MSG_WARN(docbook xhmtl stylesheets are required to build HTML documentation)
  899 +if test "$MISSING_LATEX" = "1"; then
  900 + AC_MSG_WARN(latex is required to build PDF documentation)
962 901 fi
963 902  
964   -if test "$MISSING_FOP" = "1"; then
965   - AC_MSG_WARN(apache fop is required to build PDF documentation)
  903 +if test "$MISSING_LATEXMK" = "1"; then
  904 + AC_MSG_WARN(latexmk is required to build PDF documentation)
966 905 fi
967 906  
968   -if test "$MISSING_XMLLINT" = "1"; then
969   - AC_MSG_WARN(xmllint is required to validate documentation)
  907 +if test "$MISSING_PDFLATEX" = "1"; then
  908 + AC_MSG_WARN(pdflatex is required to build PDF documentation)
970 909 fi
971 910  
972   -if test "$MISSING_XSLTPROC" = "1"; then
973   - AC_MSG_WARN(xsltproc is required to build documentation)
  911 +if test "$MISSING_SPHINX" = "1"; then
  912 + AC_MSG_WARN(sphinx-build is required to build documentation)
974 913 fi
975 914  
976 915 if test "$ISSUE_WARNINGS" = "1"; then
... ...
make/installwin.mk
... ... @@ -17,9 +17,10 @@ installwin: all
17 17 cp qpdf/$(OUTPUT_DIR)/fix-qdf.exe $(DEST)/bin
18 18 cp include/qpdf/*.h $(DEST)/include/qpdf
19 19 cp include/qpdf/*.hh $(DEST)/include/qpdf
20   - cp doc/stylesheet.css $(DEST)/doc
21 20 if [ -f doc/qpdf-manual.html ]; then \
  21 + mkdir $(DEST)/doc/_static; \
22 22 cp doc/qpdf-manual.html $(DEST)/doc; \
  23 + cp doc/_static/* $(DEST)/doc/_static; \
23 24 fi
24 25 if [ -f doc/qpdf-manual.pdf ]; then \
25 26 cp doc/qpdf-manual.pdf $(DEST)/doc; \
... ...
make/libtool.mk
... ... @@ -120,6 +120,12 @@ install-libs: build_libqpdf
120 120  
121 121 # NOTE: If installing any new executables, remember to update the
122 122 # lambda layer code in build-scripts/build-appimage.
  123 +
  124 +# NOTE: See comments in manual/build.mk about html documentation.
  125 +
  126 +# Ensure that installwin in make/installwin.mk is consistent with
  127 +# this.
  128 +
123 129 install: all install-libs
124 130 ./mkinstalldirs -m 0755 $(DESTDIR)$(bindir)
125 131 ./mkinstalldirs -m 0755 $(DESTDIR)$(docdir)
... ... @@ -133,9 +139,10 @@ install: all install-libs
133 139 $(LIBTOOL) --mode=install ./install-sh \
134 140 qpdf/$(OUTPUT_DIR)/fix-qdf \
135 141 $(DESTDIR)$(bindir)/fix-qdf
136   - ./install-sh -m 0644 doc/stylesheet.css $(DESTDIR)$(docdir)
137 142 if [ -f doc/qpdf-manual.html ]; then \
  143 + ./mkinstalldirs -m 0755 $(DESTDIR)$(docdir)/_static; \
138 144 ./install-sh -m 0644 doc/qpdf-manual.html $(DESTDIR)$(docdir); \
  145 + ./install-sh -m 0644 doc/_static/* $(DESTDIR)$(docdir)/_static; \
139 146 fi
140 147 if [ -f doc/qpdf-manual.pdf ]; then \
141 148 ./install-sh -m 0644 doc/qpdf-manual.pdf $(DESTDIR)$(docdir); \
... ...
make_dist
... ... @@ -78,7 +78,7 @@ if ($version ne $code_version)
78 78 }
79 79 if ($version ne $doc_version)
80 80 {
81   - print "$whoami: qpdf-manual.xml version = $doc_version\n";
  81 + print "$whoami: doc version = $doc_version\n";
82 82 $version_error = 1;
83 83 }
84 84 if ($version ne $cli_version)
... ... @@ -153,11 +153,11 @@ sub get_version_from_source
153 153  
154 154 sub get_version_from_manual
155 155 {
156   - my $fh = safe_open("manual/qpdf-manual.xml");
  156 + my $fh = safe_open("manual/conf.py");
157 157 my $doc_version = 'unknown';
158 158 while (<$fh>)
159 159 {
160   - if (m/swversion "([^\"]+)\"/)
  160 + if (m/release = '([^\']+)\'/)
161 161 {
162 162 $doc_version = $1;
163 163 last;
... ...
manual/build.mk
1   -INDOC = manual/qpdf-manual
2   -OUTDOC = manual/$(OUTPUT_DIR)/qpdf-manual
  1 +DOC_OUT := manual/$(OUTPUT_DIR)
  2 +S_HTML_OUT := $(DOC_OUT)/singlehtml
  3 +S_HTML_TARGET := $(S_HTML_OUT)/index.html
  4 +HTML_OUT := $(DOC_OUT)/html
  5 +HTML_TARGET := $(HTML_OUT)/index.html
  6 +PDF_OUT := $(DOC_OUT)/latex
  7 +PDF_TARGET := $(PDF_OUT)/qpdf.pdf
3 8  
4 9 TARGETS_manual := doc/qpdf.1 doc/fix-qdf.1 doc/zlib-flate.1
5 10 ifeq ($(BUILD_HTML),1)
6   -TARGETS_manual += doc/qpdf-manual.html
  11 +TARGETS_manual += doc/qpdf-manual.html $(HTML_TARGET)
7 12 endif
8 13 ifeq ($(BUILD_PDF),1)
9 14 TARGETS_manual += doc/qpdf-manual.pdf
10 15 endif
11 16  
12   -VALIDATE=manual/$(OUTPUT_DIR)/validate
13   -
14   -ifeq ($(VALIDATE_DOC),1)
15   -
16   -$(VALIDATE): $(INDOC).xml
17   - $(XMLLINT) --noout --dtdvalid $(DOCBOOKX_DTD) $<
18   - touch $(VALIDATE)
19   -
20   -else
21   -
22   -$(VALIDATE):
23   - touch $(VALIDATE)
24   -
25   -endif
26   -
27   -$(OUTDOC).pdf: $(OUTDOC).fo qpdf/build/qpdf
28   - $(FOP) $< -pdf $@.tmp
29   - qpdf/build/qpdf --linearize --object-streams=generate \
30   - --recompress-flate --compression-level=9 $@.tmp $@
31   -
32   -$(OUTDOC).html: $(INDOC).xml manual/html.xsl $(VALIDATE)
33   - $(XSLTPROC) --output $@ manual/html.xsl $<
  17 +# Prevent targets that run $(SPHINX) from running in parallel by using
  18 +# order-only dependencies (the dependencies listed after the |) to
  19 +# avoid clashes in temporary files that cause the build to fail with
  20 +# the error "_pickle.UnpicklingError: pickle data was truncated"
  21 +$(HTML_TARGET): manual/index.rst
  22 + $(SPHINX) -M html manual $(DOC_OUT) -W
  23 +
  24 +$(S_HTML_TARGET): manual/index.rst | $(HTML_TARGET)
  25 + $(SPHINX) -M singlehtml manual $(DOC_OUT) -W
  26 +
  27 +$(PDF_TARGET): manual/index.rst | $(S_HTML_TARGET) $(HTML_TARGET)
  28 + $(SPHINX) -M latexpdf manual $(DOC_OUT) -W
  29 +
  30 +# This depends on sphinx-build's singlehtml target creating index.html
  31 +# and a _static directory. If that changes, this code has to be
  32 +# adjusted. It will also be necessary to adjust the install target in
  33 +# make/libtool.mk.
  34 +doc/qpdf-manual.html: $(S_HTML_TARGET)
  35 + mkdir -p doc
  36 + @if [ "$(shell find $(S_HTML_OUT)/ -mindepth 1 -type d -print)" != \
  37 + "$(S_HTML_OUT)/_static" ]; then \
  38 + echo "***"; \
  39 + echo Expected only directory in $(S_HTML_OUT) to be _static; \
  40 + echo "***"; \
  41 + false; \
  42 + fi
  43 + cp $< $@
  44 + mkdir -p doc/_static
  45 + cp -p $(S_HTML_OUT)/_static/* doc/_static
34 46  
35   -.PRECIOUS: $(OUTDOC).fo
36   -$(OUTDOC).fo: $(INDOC).xml manual/print.xsl $(VALIDATE)
37   - $(XSLTPROC) --output $@ manual/print.xsl $<
  47 +doc/qpdf-manual.pdf: $(PDF_TARGET)
  48 + mkdir -p doc
  49 + cp $< $@
38 50  
39 51 doc/%.1: manual/%.1.in
  52 + mkdir -p doc
40 53 sed -e 's:@PACKAGE_VERSION@:$(PACKAGE_VERSION):g' \
41 54 -e 's:@docdir@:$(docdir):g' \
42 55 < $< > $@
43   -
44   -doc/%: manual/$(OUTPUT_DIR)/%
45   - cp $< $@
... ...