mpv/DOCS/xml/configure

372 lines
10 KiB
Bash
Executable File

#!/bin/sh
# Script to check for catalogs, stylesheets, XSL processors and all
# the other stuff necessary to convert the XML documentation.
_xsltwrapper="xsltproc.sh"
_xmllintwrapper="xmllint.sh"
echo "Searching for XML catalogs..."
for _try_catalog in \
/etc/sgml/catalog \
/usr/share/xml/docbook/*/catalog.xml \
/opt/local/share/xml/docbook-xml/*/catalog.xml \
/usr/share/sgml/docbook/*/*catalog \
/usr/share/apps/ksgmltools2/customization/en/catalog \
/usr/share/sgml/catalog \
/usr/local/share/sgml/catalog \
/usr/lib/sgml/catalog \
/usr/local/lib/sgml/catalog \
/usr/share/docbook-xml42/catalog.xml \
/usr/share/sgml/docbook/xmlcatalog
do
if test -f "$_try_catalog"
then
_catalog=$_try_catalog
break
fi
done
if test -n "$_catalog"
then
echo "Found SGML catalog at $_catalog"
_sgmlcatalog="export SGML_CATALOG_FILES=$_catalog"
else
echo "No SGML catalog found."
fi
echo "Searching for stylesheets..."
echo "Searching for html/chunk.xsl..."
for _try_chunk_xsl in \
/usr/share/xml/docbook/*/html/chunk.xsl \
/usr/share/sgml/docbook/stylesheet/xsl/nwalsh/html/chunk.xsl \
/usr/share/sgml/docbook/yelp/docbook/html/chunk.xsl \
/usr/local/share/sgml/docbook/stylesheet/xsl/nwalsh/html/chunk.xsl \
/usr/local/share/sgml/docbook/yelp/docbook/html/chunk.xsl \
/usr/share/docbook-xsl/html/chunk.xsl \
/usr/share/sgml/docbook/xsl-stylesheets*/html/chunk.xsl \
/usr/share/xml/docbook/stylesheet/nwalsh/current/html/chunk.xsl \
/opt/local/share/xsl/docbook-xsl/html/chunk.xsl \
do
if test -f "$_try_chunk_xsl"
then
_chunk_xsl=$_try_chunk_xsl
break
fi
done
if test -z "$_chunk_xsl"
then
_chunk_xsl=/usr/share/sgml/docbook/stylesheet/xsl/nwalsh/html/chunk.xsl
echo "Not found. Using default ($_chunk_xsl)"
_fake_chunk_xsl=yes
else
echo "Found chunk.xsl at $_chunk_xsl"
fi
echo "Searching for html/docbook.xsl..."
for _try_docbook_xsl in \
/usr/share/xml/docbook/*/html/docbook.xsl \
/usr/share/sgml/docbook/stylesheet/xsl/nwalsh/html/docbook.xsl \
/usr/share/sgml/docbook/yelp/docbook/html/docbook.xsl \
/usr/local/share/sgml/docbook/stylesheet/xsl/nwalsh/html/docbook.xsl \
/usr/local/share/sgml/docbook/yelp/docbook/html/docbook.xsl \
/usr/share/docbook-xsl/html/docbook.xsl \
/usr/share/sgml/docbook/xsl-stylesheets*/html/docbook.xsl \
/usr/share/xml/docbook/stylesheet/nwalsh/current/html/docbook.xsl \
/opt/local/share/xsl/docbook-xsl/html/docbook.xsl \
do
if test -f "$_try_docbook_xsl"
then
_docbook_xsl=$_try_docbook_xsl
break
fi
done
if test -z "$_docbook_xsl"
then
_docbook_xsl=/usr/share/sgml/docbook/stylesheet/xsl/nwalsh/html/docbook.xsl
echo "Not found. Using default ($_docbook_xsl)"
_fake_docbook_xsl=yes
else
echo "Found docbook.xsl at $_docbook_xsl"
fi
cat > html-chunk.xsl << EOF
<?xml version="1.0" encoding="utf-8"?>
<!-- **************************************************
This file is generated automatically. DO NOT EDIT.
************************************************** -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:import href="$_chunk_xsl"/>
<xsl:include href="html-common.xsl"/>
</xsl:stylesheet>
EOF
cat > html-single.xsl << EOF
<?xml version="1.0" encoding="utf-8"?>
<!-- **************************************************
This file is generated automatically. DO NOT EDIT.
************************************************** -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:import href="$_docbook_xsl"/>
<xsl:include href="html-common.xsl"/>
</xsl:stylesheet>
EOF
echo "Searching for DTD..."
#FIXME: This should prefer higher version numbers, not the other way around ..
for _try_dtd in \
/usr/share/xml/docbook/*/dtd/4*/docbookx.dtd \
/usr/share/xml/docbook/*/docbookx.dtd \
/usr/share/sgml/docbook/*/docbookx.dtd \
/usr/share/sgml/docbook/dtd/*/docbookx.dtd \
/usr/share/sgml/docbook/dtd/xml/*/docbookx.dtd \
/usr/share/docbook-xml*/docbookx.dtd \
/opt/local/share/xml/docbook*/*/docbookx.dtd \
/usr/share/apps/ksgmltools2/docbook/*/docbookx.dtd
do
if test -f "$_try_dtd"
then
_dtd=$_try_dtd
break
fi
done
if test -z "$_dtd"
then
_dtd=/usr/share/sgml/docbook/dtd/xml/4.1.2/docbookx.dtd
echo "Not found. Using default ($_dtd)."
else
echo "Found docbookx.dtd at $_dtd"
fi
for lang in `grep 'DOC_LANGS =' ../../config.mak|cut -d= -f2`; do
cat > $lang/main.xml << EOF
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!-- **************************************************
This file is generated automatically. DO NOT EDIT.
************************************************** -->
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
"$_dtd"
[
EOF
for file in `find $lang en -name \*.xml -exec basename \{\} \; | sort -u`; do
echo '<!ENTITY '$file' SYSTEM "'$file'">' >> $lang/main.xml
done
cat >> $lang/main.xml << EOF
]>
<book id="index" lang="$lang">
&documentation.xml;
</book>
EOF
done
echo "Looking for a valid XSLT processor..."
# Checks for xsltproc, then checks for the Saxon processor (it needs Java).
# Also checks for Jade/OpenJade.
#FIXME: Add support for the xalan/xalan2 XSLT processors.
if xsltproc --version > /dev/null 2>&1
then
if test -z "$_fake_chunk_xsl"
then
echo "Found xsltproc. If it works, it's probably the best choice."
# HACK: xslt always need a target file if a doctype is set
_xsltcommand="OUTPUT=\"\$1\"; if test -d \"\$OUTPUT\" ; then OUTPUT=\"\$OUTPUT/dummy.html\" ; fi;"
if test -n "$_catalog"
then
_xsltcommand="$_xsltcommand xsltproc --catalogs -o \$OUTPUT \$2 \$3"
else
_xsltcommand="$_xsltcommand xsltproc -o \$OUTPUT \$2 \$3"
fi
else
echo "Found xsltproc but no stylesheets on your system."
echo "xsltproc is unusable without stylesheets."
fi
fi
# xsltproc not found.
# Now try to find a good Java virtual machine.
# FIXME: We need more checks for Java virtual machines.
if test -z "$_xsltcommand"
then
#FIXME: Add more suitable machines!!!
for _try_java in java gij-3.3 gij-3.2 gij-3.1 gij-3.0 gij
do
if $_try_java --version > /dev/null 2>&1 || $_try_java -version > /dev/null 2>&1
then
_java=$_try_java
break
fi
done
if test -z "$_java"
then
echo "Java VM not found."
else
# Try to find the right jar files for classpath.
# This must not trigger on something like saxon-fop-6.4.4.jar.
for _try_saxon_jar in \
/usr/share/java/saxon-[0-9]*.jar \
/usr/local/share/java/saxon-[0-9]*.jar \
/usr/share/java/saxon.jar \
/usr/local/share/java/saxon.jar
do
if test -f "$_try_saxon_jar"
then
_saxon_jar=$_try_saxon_jar
#Don't break to find the _latest_ saxon.jar.
fi
done
if test -n "$_saxon_jar"
then
if test -z "$_fake_chunk_xsl"
then
# _xsltcommand="cd \$1 && if test \"\`dirname \$2 | head -c 1\`\" = \".\" ; then $_java -classpath $_saxon_jar com.icl.saxon.StyleSheet \$_IN_DIR/\$3 \$_IN_DIR/\$2 ; else $_java -classpath $_saxon_jar com.icl.saxon.StyleSheet \$_IN_DIR/\$3 \$2 ;fi"
_xsltcommand="
if test \"\`dirname \$2 | head -c 1\`\" = \".\"
then
_STYLESHEET=\$_IN_DIR/\$2
else
_STYLESHEET=\$2
fi
if test -d \$1
then
_DIRNAME=\"\$1\"
_OUTPUT=\"\"
else
_DIRNAME=\"\`dirname \$1\`\"
_OUTPUT=\"-o \`basename \$1\`\"
fi
cd \$_DIRNAME &&
java -classpath /usr/share/java/saxon.jar com.icl.saxon.StyleSheet \$_OUTPUT \$_IN_DIR/\$3 \$_STYLESHEET
"
echo "Found the Saxon XSLT Processor ($_saxon_jar), using Java VM '$_java'."
else
echo "Found the Saxon XSLT processor but no stylesheets on your system."
echo "Saxon is unusable without stylesheets."
fi
fi
fi
fi
if test -z "$_xsltcommand"
then
# Java not found.
# now try openjade/jade.
for _try_jade in jade openjade
do
if command -v $_try_jade > /dev/null
then
_jade=$_try_jade
break
fi
done
if test -n "$_jade"
then
echo "xsltproc and Saxon XSLT processors not found."
echo "I will try to use OpenJade or Jade (using '$_jade')."
echo "They aren't (currently) fully supported, however."
for _try_docbook_dsl in \
/usr/share/sgml/docbook/stylesheet/dsssl/modular/html/docbook.dsl \
/usr/local/share/sgml/docbook/stylesheet/dsssl/modular/html/docbook.dsl
do
if test -f "$_try_docbook_dsl"
then
_docbook_dsl=$_try_docbook_dsl
break
fi
done
for _try_xml_dcl in \
/usr/share/sgml/declaration/xml.dcl \
/usr/local/share/sgml/declaration/xml.dcl
do
if test -f "$_try_xml_dcl"
then
_xml_dcl=$_try_xml_dcl
break
fi
done
if test "x$_docbook_dsl" = "x" -o "x$_xml_dcl" = "x"
then
echo "One of the files docbook.dsl and xml.dcl or both of them weren't found."
echo "Bailing out."
exit 1
fi
_xsltcommand="cd \$1 && $_jade -t xml -d $_docbook_dsl $_xml_dcl \$_IN_DIR/\$3"
else
echo "No valid XSLT processor found."
echo "Bailing out."
exit 1
fi
fi
cat > $_xsltwrapper << EOF
#!/bin/sh
# **************************************************
# This file is generated automatically. DO NOT EDIT.
# **************************************************
# This is a small wrapper script around many ways to call the XSLT processor.
# It accepts 3 arguments: <output_dir> <stylesheet_name> <main XML file name>
_IN_DIR=\`pwd\`
$_sgmlcatalog
$_xsltcommand
EOF
chmod +x $_xsltwrapper
echo "Searching for XML checker..."
for _try_xmllint in xmllint
do
if command -v $_try_xmllint > /dev/null 2>&1
then
echo "Found $_try_xmllint"
if test -n "$_catalog"
then
_xmllint_command="$_try_xmllint --noout --noent --postvalid --catalogs \$*"
else
_xmllint_command="$_try_xmllint --noout --noent --postvalid \$*"
fi
break
fi
done
if test -z "$_xmllint_command"
then
echo "Not found"
_xmllint_command=true
fi
cat > $_xmllintwrapper << EOF
#!/bin/sh
# **************************************************
# This file is generated automatically. DO NOT EDIT.
# **************************************************
# This is a small wrapper for XML lintian programs.
$_sgmlcatalog
$_xmllint_command
EOF
chmod +x $_xmllintwrapper