dnl dnl Autoconf script for database paper handbooks. It creates a ./configure dnl that sets up the local configuration of tools, so that it's easy to get dnl up and going again quickly should some package suddenly decide to rearange dnl itself and install things in different locations. It also makes things dnl completely independent of whatever package manager we happen to be using. dnl dnl All tools used in the handbook makefiles should be included here, so as dnl to abstract things as much as possible. This includes even "obvious" things dnl like cp, mv, etc., and also any required environment variables. dnl AC_PREREQ([2.61]) AC_INIT([INFO Database Handbook], [2.0]) dnl dnl Check required environment variables. Note that we don't error out if any dnl aren't defined, as the makefiles will warn about this anyway. It's really dnl just more for completeness than anything that they're included here. dnl AC_MSG_NOTICE([checking handbook environment]) AC_ARG_VAR(TEACHING_SHARED, [the root level of the shared teaching directory (e.g., /path/to/Teaching/Shared)]) AC_ARG_VAR(ALL_PAPERS_ROOT, [the root level of the current teaching directory hierarchy (e.g., /path/to/Teaching/2005)]) AC_ARG_VAR(HANDBOOK_INSTALL_ROOT, [the root level of the directory hierarchy on the web server (e.g., \\INFO-NTS-12\DBCourses$)]) AC_ARG_VAR(XSLT, [default XSLT processor (in order of preference: "saxon-b", "saxon", "xalan-j", "xalan-c")]) AC_CHECK_ENVVAR([TEACHING_SHARED]) AC_CHECK_ENVVAR([ALL_PAPERS_ROOT]) AC_CHECK_ENVVAR([HANDBOOK_INSTALL_ROOT]) dnl This one is required for configuration, so handle separately. AC_MSG_CHECKING([variable XSLT]) AS_IF([test -z $XSLT], [ AC_MSG_RESULT([no]) AC_MSG_ERROR([required environment variable XSLT not defined])], [AC_MSG_RESULT([$XSLT])]) dnl dnl Check required tools. dnl AC_MSG_NOTICE([checking for required tools]) dnl dnl File system. dnl AC_PROG_MKDIR_P AC_PATH_PROG(MV, mv) AC_PATH_PROG(CP, cp) AC_PATH_PROG(RM, rm) AC_PATH_PROG(RSYNC, rsync) AC_PATH_PROG(TOUCH, touch) AC_PATH_PROG(MKTEMP, mktemp) AC_PROG_LN_S dnl dnl Searching. dnl AC_PROG_GREP dnl We need GNU find as we use some of its specific command-line switches. AC_CACHE_CHECK([for GNU find], [ac_cv_path_FIND], [AC_PATH_PROGS_FEATURE_CHECK([FIND], [gnufind gfind find], [AS_IF([( sh -c "$ac_path_FIND --version" 2> /dev/null | grep GNU 2>&1 > /dev/null )], [ ac_cv_path_FIND=$ac_path_FIND ac_path_FIND_found=:], [])], [AC_MSG_ERROR([could not find GNU find (irony)])])]) AC_SUBST([FIND], [$ac_cv_path_FIND]) dnl dnl Tests. dnl AC_PATH_PROG(TEST_PROGRAM, test) AC_PATH_PROG(TRUE, true) AC_PATH_PROG(FALSE, false) dnl dnl Output. dnl AC_PATH_PROG(ECHO, echo) AC_PATH_PROG(CAT, cat) AC_PATH_PROG(ANNOUNCE, announce) dnl dnl Miscellaneous utilities. dnl AC_PROG_SED AC_PATH_PROG(TR, tr) AC_PATH_PROG(CUT, cut) AC_PATH_PROG(PERL, perl) AX_PROG_PERL_VERSION(5.6.0) AC_PATH_PROG(DATE, date) AC_PATH_PROG(EXPR, expr) AC_PATH_PROG(BASENAME, basename) AC_PATH_PROG(ZIP, zip) AC_PATH_PROG(UNZIP, unzip) AC_PATH_PROG(GIT, git) AC_PATH_PROG(LOCKFILE, lockfile) dnl Java stuff. AX_PROG_JAVA AX_PROG_JAVAC AX_PROG_JAR dnl AX_CHECK_CLASS([org.apache.xml.resolver.apps.resolver]) dnl AX_CHECK_CLASS([net.sf.saxon.Transform]) dnl We make heavy use of features specific to GNU make. AC_CACHE_CHECK([for GNU make], [ac_cv_path_MAKE], [AC_PATH_PROGS_FEATURE_CHECK([MAKE], [gnumake gmake make], [AS_IF([( sh -c "$ac_path_MAKE --version" 2> /dev/null | grep GNU 2>&1 > /dev/null )], [ ac_cv_path_MAKE=$ac_path_MAKE ac_path_MAKE_found=:], [])], [AC_MSG_ERROR([could not find GNU make])])]) AC_SUBST([MAKE], [$ac_cv_path_MAKE]) dnl GNU cp is occasionally useful for the --update flag (copy only if newer). AC_CACHE_CHECK([for GNU cp], [ac_cv_path_GCP], [AC_PATH_PROGS_FEATURE_CHECK([GCP], [gnucp gcp cp], [AS_IF([( sh -c "$ac_path_GCP --version" 2> /dev/null | grep GNU 2>&1 > /dev/null )], [ ac_cv_path_GCP=$ac_path_GCP ac_path_GCP_found=:], [])], [AC_MSG_ERROR([could not find GNU cp])])]) AC_SUBST([GCP], [$ac_cv_path_GCP]) dnl dnl PHP dnl AC_PATH_PROG(PHP, php) dnl AS_IF([$PHP_AVAILABLE], dnl [ AC_MSG_CHECKING([for php package Numbers_Words]) dnl AS_IF([(sh -c "$ac_cv_path_PHP -r 'require AS_ESCAPE(["Numbers/Words.php"]);'" 2>&1 /dev/null | grep 'Failed opening required' 2>&1 > /dev/null)], dnl [ AC_MSG_RESULT([no]) dnl AC_MSG_ERROR([could not find php package Numbers_Words])], dnl [ AC_MSG_RESULT([yes])])]) dnl dnl LaTeX and friends. dnl AC_PROG_LATEX AC_PROG_PDFLATEX AC_PROG_XELATEX AC_PROG_DVIPS dnl dnl PlantUML dnl AC_PATH_JARFILE(plantuml, PLANTUML, [/opt/local/share/java /sw/share/java /usr/local/share/java /usr/share/java /opt/local/lib/java /sw/lib/java /usr/local/lib/java /usr/lib/java ${HOME}/Library/Java /Library/Java /System/Library/Java]) AC_MSG_CHECKING([for PlantUML]) AS_IF([$PLANTUML_AVAILABLE], [AC_SUBST([PLANTUML], ["${JAVA} -Djava.awt.headless=true -jar ${PLANTUML_JAR}"]) AC_MSG_RESULT([$PLANTUML])], [ AC_MSG_RESULT([no]) AC_MSG_ERROR([could not find PlantUML])]) dnl dnl XML manipulation. dnl AC_PATH_PROG(XMLLINT, xmllint) dnl Use a different variable for the XSLT processor path to keep it distinct dnl from the XSLT environment variable, which serves a slightly different dnl purpose. However, we use the value derived from $XSLT above to seed the dnl executable name. dnl Figure out the appropriate name of the executable based on $XSLT. AS_CASE([$XSLT], [xalan-c], [AC_PATH_PROG(XSLTPROC, [Xalan])], [xalan-j], [AC_PATH_PROG(XSLTPROC, [xalan])], [saxon-b], [ AC_PATH_JARFILE([saxon9], [SAXON], [/opt/local/share/java /sw/share/java /usr/local/share/java /usr/share/java /opt/local/lib/java /sw/lib/java /usr/local/lib/java /usr/lib/java ${HOME}/Library/Java /Library/Java /System/Library/Java]) AC_MSG_CHECKING([for Saxon-B]) AS_IF([$SAXON_AVAILABLE], [AC_SUBST([XSLTPROC], ["${JAVA} -jar ${SAXON_JAR}"]) AC_MSG_RESULT([$XSLTPROC])], [ AC_MSG_RESULT([no]) AC_MSG_ERROR([could not find Saxon-B])])], [AC_MSG_ERROR([unknown XSLT processor "${XSLT}" specified])]) AC_PATH_JARFILE(resolver, RESOLVER, [/opt/local/share/java /sw/share/java /usr/local/share/java /usr/share/java /opt/local/lib/java /sw/lib/java /usr/local/lib/java /usr/lib/java ${HOME}/Library/Java /Library/Java /System/Library/Java]) AC_MSG_CHECKING([for XML entity resolver]) dnl We can't use -jar for the entity resolver, because it needs to be able dnl to use the CLASSPATH to find the CatalogManager.properties file. Using dnl -jar suppresses the CLASSPATH completely. AS_IF([$RESOLVER_AVAILABLE], [ AC_SUBST([RESOLVER], ["${JAVA} -cp ${RESOLVER_JAR}:${CLASSPATH} org.apache.xml.resolver.apps.resolver"]) AC_MSG_RESULT([$RESOLVER])], [ AC_MSG_RESULT([no]) AC_MSG_ERROR([could not find the XML entity resolver])]) dnl dnl Image manipulation and conversion (includes PDF & PS). dnl AC_PATH_PROG(CONVERT, convert) AC_PATH_PROG(COMPOSITE, composite) AC_PATH_PROG(PDFNUP, pdfnup) AC_PATH_PROG(PDFCROP, pdfcrop) AC_PATH_PROG(PS2EPS, ps2eps) AC_PATH_PROG(PS2PDF, ps2pdf) AC_PATH_PROG(RSVG_CONVERT, rsvg-convert) AC_PATH_PROG(SHIFTBBOX, shiftbbox) AC_PATH_PROG(EPSTOPDF, epstopdf) AC_PATH_PROG(INKSCAPE, inkscape) AC_PATH_PROG(GS, gs) AC_PATH_PROG(XCF2PNG, xcf2png) dnl dnl Plotting tools. dnl AC_PATH_PROG(PLOTICUS, ploticus) AC_PATH_PROG(R, R) dnl dnl Web site synchronisation. dnl AC_PATH_PROG(SITECOPY, sitecopy) dnl dnl CSS development. dnl AC_PATH_PROGS(SASS, [sass sassc]) dnl dnl Files to be generated. Currently this is only make include file containing dnl the list of tools used. We could use autoconf to just insert these directly dnl into each of the files in ../make-includes and ../makefile-templates, as dnl appropriate, but it seems to make more sense to define them all in one dnl place. This will make it easier to reuse them in other (especially dnl non-handbook) contexts. dnl AC_CONFIG_FILES([${TEACHING_SHARED}/Authoring/Handbook/make-includes/local_configuration.make]) AC_OUTPUT