Newer
Older
Handbook / configuration / configure.ac
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