postgresql/doc/src/sgml/meson.build

322 lines
9.0 KiB
Meson

# Copyright (c) 2022-2023, PostgreSQL Global Development Group
docs = []
installdocs = []
alldocs = []
doc_generated = []
version_sgml = configure_file(
input: 'version.sgml.in',
output: 'version.sgml',
configuration: cdata,
)
configure_files += version_sgml
doc_generated += custom_target('features-supported.sgml',
input: files(
'../../../src/backend/catalog/sql_feature_packages.txt',
'../../../src/backend/catalog/sql_features.txt',
),
output: 'features-supported.sgml',
command: [perl, files('mk_feature_tables.pl'), 'YES', '@INPUT@'],
build_by_default: false,
install: false,
capture: true,
)
doc_generated += custom_target('features-unsupported.sgml',
input: files(
'../../../src/backend/catalog/sql_feature_packages.txt',
'../../../src/backend/catalog/sql_features.txt',
),
output: 'features-unsupported.sgml',
command: [perl, files('mk_feature_tables.pl'), 'NO', '@INPUT@'],
build_by_default: false,
install: false,
capture: true,
)
doc_generated += custom_target('errcodes-table.sgml',
input: files(
'../../../src/backend/utils/errcodes.txt'),
output: 'errcodes-table.sgml',
command: [perl, files('generate-errcodes-table.pl'), '@INPUT@'],
build_by_default: false,
install: false,
capture: true,
)
# FIXME: this actually has further inputs, adding depfile support to
# generate-keywords-table.pl is probably the best way to address that
# robustly.
doc_generated += custom_target('keywords-table.sgml',
input: files(
'../../../src/include/parser/kwlist.h'),
output: 'keywords-table.sgml',
command: [perl, files('generate-keywords-table.pl'), '@CURRENT_SOURCE_DIR@'],
build_by_default: false,
install: false,
capture: true,
)
# For everything else we need at least xmllint
if not xmllint_bin.found()
subdir_done()
endif
pandoc = find_program('pandoc', native: true, required: false)
xmltools_wrapper = [
python, files('xmltools_dep_wrapper'),
'--targetname', '@OUTPUT@', '--depfile', '@DEPFILE@'
]
xmllint = xmltools_wrapper + [
'--tool', xmllint_bin, '--',
]
# Run validation only once, common to all subsequent targets. While
# we're at it, also resolve all entities (that is, copy all included
# files into one big file). This helps tools that don't understand
# vpath builds (such as dbtoepub).
postgres_full_xml = custom_target('postgres-full.xml',
input: 'postgres.sgml',
output: 'postgres-full.xml',
depfile: 'postgres-full.xml.d',
command: [xmllint, '--nonet', '--noent', '--valid',
'--path', '@OUTDIR@', '-o', '@OUTPUT@', '@INPUT@'],
depends: doc_generated,
build_by_default: false,
)
docs += postgres_full_xml
alldocs += postgres_full_xml
if xsltproc_bin.found()
xsltproc_flags = [
'--nonet',
'--stringparam', 'pg.version', pg_version,
'--path', '@OUTDIR@', '--path', '@CURRENT_SOURCE_DIR@',
]
xsltproc = xmltools_wrapper + [
'--tool', xsltproc_bin, '--',
]
xsltproc_html_flags = xsltproc_flags
if get_option('docs_html_style') == 'website'
xsltproc_html_flags += ['--param', 'website.stylesheet', '1']
endif
endif
#
# Full documentation as html, text
#
if docs_dep.found()
html = custom_target('html',
input: ['stylesheet.xsl', postgres_full_xml],
output: 'html',
depfile: 'html.d',
command: [xsltproc, '-o', '@OUTDIR@/', xsltproc_html_flags, '@INPUT@'],
build_by_default: false,
)
alldocs += html
install_doc_html = custom_target('install-html',
output: 'install-html',
command: [
python, install_files, '--prefix', dir_prefix,
'--install-dir-contents', dir_doc_html, html],
build_always_stale: true, build_by_default: false,
)
alias_target('install-doc-html', install_doc_html)
# build and install multi-page html docs as part of docs target
docs += html
installdocs += install_doc_html
# single-page HTML
postgres_html = custom_target('postgres.html',
input: ['stylesheet-html-nochunk.xsl', postgres_full_xml],
output: 'postgres.html',
depfile: 'postgres.html.d',
command: [xsltproc, '-o', '@OUTPUT@', xsltproc_html_flags, '@INPUT@'],
build_by_default: false,
)
alldocs += postgres_html
# single-page text
if pandoc.found()
postgres_txt = custom_target('postgres.txt',
input: [postgres_html],
output: 'postgres.txt',
command: [pandoc, '-t', 'plain', '-o', '@OUTPUT@', '@INPUT@'],
build_by_default: false,
)
alldocs += postgres_txt
endif
endif
#
# INSTALL in html, text
#
if docs_dep.found()
# Depend on postgres_full_xml, so validity errors are raised in one place,
# and so dependencies don't need to be re-specified.
install_xml = custom_target('INSTALL.xml',
input: ['standalone-profile.xsl', 'standalone-install.xml'],
output: 'INSTALL.xml',
depfile: 'INSTALL.xml.d',
depends: postgres_full_xml,
command: [xsltproc, '-o', '@OUTPUT@', xsltproc_flags, '--xinclude', '@INPUT@'],
build_by_default: false,
)
install_html = custom_target('INSTALL.html',
input: ['stylesheet-text.xsl', install_xml],
output: 'INSTALL.html',
depfile: 'INSTALL.html.d',
command: [xsltproc, '-o', '@OUTPUT@', xsltproc_html_flags, '@INPUT@'],
build_by_default: false,
)
alldocs += install_html
if pandoc.found()
# XXX: Makefile does an iconv translit here, but unclear why?
install = custom_target('INSTALL',
input: [install_html],
output: 'INSTALL',
command: [pandoc, '-t', 'plain', '-o', '@OUTPUT@', '@INPUT@'],
build_by_default: false,
)
alldocs += install
endif
endif
#
# Man pages
#
if docs_dep.found()
# FIXME: implement / consider sqlmansectnum logic
man = custom_target('man',
input: ['stylesheet-man.xsl', postgres_full_xml],
output: ['man1', 'man3', 'man7'],
depfile: 'man.d',
command: [xsltproc, '-o', '@OUTDIR@/', xsltproc_html_flags, '@INPUT@'],
build_by_default: false,
)
alldocs += man
install_doc_man = custom_target('install-man',
output: 'install-man',
command: [
python, install_files, '--prefix', dir_prefix,
'--install-dirs', dir_man, man],
build_always_stale: true, build_by_default: false,
)
alias_target('install-doc-man', install_doc_man)
# even though we don't want to build man pages as part of 'docs', we do want
# to install them as part of install-docs
installdocs += install_doc_man
endif
#
# Full documentation as PDF
#
if docs_pdf_dep.found()
xsltproc_fo_flags = xsltproc_flags + [
'--stringparam', 'img.src.path', meson.current_source_dir() + '/'
]
foreach format, detail: {'A4': 'A4', 'US': 'USletter'}
postgres_x_fo_f = 'postgres-@0@.fo'.format(format)
postgres_x_fo_dep = 'postgres-@0@.fo.d'.format(format)
postgres_x_pdf_f = 'postgres-@0@.pdf'.format(format)
postgres_x_fo = custom_target(postgres_x_fo_f,
input: ['stylesheet-fo.xsl', postgres_full_xml],
output: postgres_x_fo_f,
depfile: postgres_x_fo_dep,
command: [xsltproc, xsltproc_fo_flags,
'--stringparam', 'paper.type', detail,
'-o', '@OUTPUT@', '@INPUT@'],
build_by_default: false,
)
postgres_x_pdf = custom_target(postgres_x_pdf_f,
input: [postgres_x_fo],
output: [postgres_x_pdf_f],
command: [fop, '-fo', '@INPUT@', '-pdf', '@OUTPUT@'],
build_by_default: false,
)
alldocs += postgres_x_pdf
endforeach
endif
#
# epub
#
# This was previously implemented using dbtoepub - but that doesn't seem to
# support running in build != source directory (i.e. VPATH builds already
# weren't supported).
if pandoc.found() and xsltproc_bin.found()
postgres_epub = custom_target('postgres.epub',
input: postgres_full_xml,
output: 'postgres.epub',
command: [pandoc, '-f', 'docbook', '-t', 'epub', '-o', '@OUTPUT@', '--resource-path=@CURRENT_SOURCE_DIR@',
'@INPUT@'],
build_by_default: false,
)
alldocs += postgres_epub
endif
##
## Experimental Texinfo targets
##
db2x_xsltproc = find_program('db2x_xsltproc', native: true, required: false)
db2x_texixml = find_program('db2x_texixml', native: true, required: false)
makeinfo = find_program('makeinfo', native: true, required: false)
if xsltproc_bin.found() and db2x_texixml.found() and db2x_xsltproc.found() and makeinfo.found()
postgres_texixml = custom_target('postgres.texixml',
output: 'postgres.texixml',
command: [db2x_xsltproc, '-s', 'texi',
'-g', 'output-file=postgres',
postgres_full_xml, '-o', '@OUTPUT@'],
build_by_default: false,
)
postgres_texi = custom_target('postgres.texi',
output: 'postgres.texi',
command: [db2x_texixml, '--encoding=utf-8', postgres_texixml,
'--output-dir=@OUTDIR@'],
build_by_default: false,
)
postgres_info = custom_target('postgres.info',
output: 'postgres.info',
command: [makeinfo, '--enable-encoding', '--no-split', '--no-validate',
postgres_texi, '-o', '@OUTPUT0@'],
build_by_default: false,
)
alldocs += postgres_info
endif
if docs_dep.found()
alias_target('docs', docs)
alias_target('install-docs', installdocs)
endif
if alldocs.length() != 0
alias_target('alldocs', alldocs)
endif