| 1 | dnl -*-autoconf-*- |
| 2 | dnl |
| 3 | dnl Configuration script for SOD |
| 4 | dnl |
| 5 | dnl (c) 2015 Straylight/Edgeware |
| 6 | dnl |
| 7 | |
| 8 | dnl----- Licensing notice --------------------------------------------------- |
| 9 | dnl |
| 10 | dnl This file is part of the Sensible Object Design, an object system for C. |
| 11 | dnl |
| 12 | dnl SOD is free software; you can redistribute it and/or modify |
| 13 | dnl it under the terms of the GNU General Public License as published by |
| 14 | dnl the Free Software Foundation; either version 2 of the License, or |
| 15 | dnl (at your option) any later version. |
| 16 | dnl |
| 17 | dnl SOD is distributed in the hope that it will be useful, |
| 18 | dnl but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 19 | dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 20 | dnl GNU General Public License for more details. |
| 21 | dnl |
| 22 | dnl You should have received a copy of the GNU General Public License |
| 23 | dnl along with SOD; if not, write to the Free Software Foundation, |
| 24 | dnl Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
| 25 | |
| 26 | dnl-------------------------------------------------------------------------- |
| 27 | dnl Initialization. |
| 28 | |
| 29 | mdw_AUTO_VERSION |
| 30 | AC_INIT([sod], AUTO_VERSION, [mdw@distorted.org.uk]) |
| 31 | AC_CONFIG_SRCDIR([lib/sod.h]) |
| 32 | AC_CONFIG_AUX_DIR([config]) |
| 33 | AM_INIT_AUTOMAKE([foreign]) |
| 34 | mdw_SILENT_RULES |
| 35 | |
| 36 | AC_PROG_CC |
| 37 | AM_PROG_LIBTOOL |
| 38 | AX_CFLAGS_WARN_ALL |
| 39 | mdw_LIBTOOL_VERSION_INFO |
| 40 | |
| 41 | dnl-------------------------------------------------------------------------- |
| 42 | dnl Convert the version number for ASDF. |
| 43 | |
| 44 | ## This is surprisingly awful. The convention for official version numbers |
| 45 | ## is that they look like MAJOR.MINOR.PATCH[.BPB][-N-gHEX[+]]. ASDF |
| 46 | ## insists on simple numeric things separated by dots. If there's no Git |
| 47 | ## thing on the end, then the main version number will do fine. If there |
| 48 | ## is, then we insert /two/ `0's in, followed by N and the HEX converted to |
| 49 | ## decimal. Why two? Because if there's no brown-paper-bag number, we |
| 50 | ## want to make sure that the first BPB release is higher than any of the |
| 51 | ## preceding Git revisions. |
| 52 | ver=AC_PACKAGE_VERSION |
| 53 | case $ver in |
| 54 | *-*-g*) |
| 55 | base=${ver%%-*} tail=${ver#*-} |
| 56 | n=${tail%%-*} tail=${tail#*-g} |
| 57 | case $tail in *+) grubby=.1 tail=${tail%+} ;; *) grubby= ;; esac |
| 58 | rev=$(( 0x$tail )) |
| 59 | ASDF_VERSION=$base.0.0.$n.$rev$grubby |
| 60 | ;; |
| 61 | *) |
| 62 | ASDF_VERSION=$ver |
| 63 | ;; |
| 64 | esac |
| 65 | AC_SUBST([ASDF_VERSION]) |
| 66 | |
| 67 | dnl-------------------------------------------------------------------------- |
| 68 | dnl Common Lisp things. |
| 69 | |
| 70 | AC_ARG_WITH([lisp-system], |
| 71 | [AS_HELP_STRING([--with-lisp-system=SYSTEMS], |
| 72 | [preference order of cl-launch Lisp systems])], |
| 73 | [], [with_lisp_system="sbcl clisp"]) |
| 74 | |
| 75 | AC_CHECK_PROGS([CL_LAUNCH], [cl-launch], [not-found]) |
| 76 | case "$CL_LAUNCH" in |
| 77 | not-found) AC_MSG_ERROR([\`cl-launch' not found]) ;; |
| 78 | esac |
| 79 | |
| 80 | AC_MSG_CHECKING([for best choice of Lisp system]) |
| 81 | if ! LISPSYS=$($CL_LAUNCH -l "$with_lisp_system" \ |
| 82 | -ip '(string-downcase (lisp-implementation-type))'); then |
| 83 | AC_MSG_ERROR([cl-launch didn't like any Lisp system]) |
| 84 | fi |
| 85 | AC_SUBST([LISPSYS]) |
| 86 | AC_MSG_RESULT([$LISPSYS]) |
| 87 | |
| 88 | AC_MSG_CHECKING([FASL file extension]) |
| 89 | fasl=$($CL_LAUNCH -l $LISPSYS -ip \ |
| 90 | '(pathname-type (compile-file-pathname "foo.lisp"))') |
| 91 | AC_SUBST([fasl]) |
| 92 | AC_MSG_RESULT([.$fasl]) |
| 93 | |
| 94 | AC_ARG_WITH([lisp-source-dir], |
| 95 | [AS_HELP_STRING([--with-lisp-source-dir=DIR], |
| 96 | [where to install Common Lisp source files])], |
| 97 | [], [with_lisp_source_dir='${datadir}/common-lisp/source']) |
| 98 | AC_ARG_WITH([lisp-system-dir], |
| 99 | [AS_HELP_STRING([--with-lisp-system-dir=DIR], |
| 100 | [where to install ASDF system links])], |
| 101 | [], [with_lisp_system_dir='${datadir}/common-lisp/systems']) |
| 102 | AC_SUBST([lispsrcdir], [$with_lisp_source_dir]) |
| 103 | AC_SUBST([lispsysdir], [$with_lisp_system_dir]) |
| 104 | |
| 105 | dnl-------------------------------------------------------------------------- |
| 106 | dnl TeX things. |
| 107 | |
| 108 | AC_DEFUN([SOD_CHECK_LATEX_FILE], |
| 109 | [sod_thing="$1"; case $sod_thing in |
| 110 | *.sty) sod_thing=${sod_thing%.sty} sod_what=package ;; |
| 111 | *.cls) sod_thing=${sod_thing%.cls} sod_what="document class" ;; |
| 112 | *.tfm) sod_thing=${sod_thing%.tfm} sod_what="font metrics" ;; |
| 113 | *) sod_what="file" ;; |
| 114 | esac |
| 115 | AS_VAR_PUSHDEF([SOD_Pkg], [sod_cv_latex_$1]) |
| 116 | AC_CACHE_CHECK([for LaTeX `$sod_thing' $sod_what], |
| 117 | [SOD_Pkg], |
| 118 | [if $KPSEWHICH >/dev/null 2>&1 --progname=pdflatex $1 |
| 119 | then SOD_Pkg=yes |
| 120 | else SOD_Pkg=no; fi]) |
| 121 | case $SOD_Pkg in |
| 122 | yes) m4_default([$2], [:]) ;; |
| 123 | no) m4_default([$3], [AC_MSG_ERROR([Can't find `$1'])]) ;; |
| 124 | esac |
| 125 | AS_VAR_POPDEF([SOD_Pkg])]) |
| 126 | |
| 127 | dnl See if we want to build the documentation. |
| 128 | AC_ARG_ENABLE([manual], [AS_HELP_STRING([--enable-manual])], |
| 129 | [if test "$enableval" = "no" |
| 130 | then sod_want_latex=no sod_have_latex=no |
| 131 | else sod_want_latex=must sod_have_latex=maybe; fi], |
| 132 | [sod_want_latex=maybe sod_have_latex=maybe]) |
| 133 | |
| 134 | dnl Make sure the TeX programs we need are available. |
| 135 | case $sod_have_latex in maybe) |
| 136 | AC_CHECK_PROGS([TEX], [tex], [none]) |
| 137 | AC_CHECK_PROGS([PDFLATEX], [pdflatex], [none]) |
| 138 | AC_CHECK_PROGS([KPSEWHICH], [kpsewhich], [none]) |
| 139 | AC_CHECK_PROGS([BIBTEX], [bibtex], [none]) |
| 140 | AC_CHECK_PROGS([MAKEINDEX], [makeindex], [none]) |
| 141 | case ,$TEX,$PDFLATEX,$KPSEWHICH,$BIBTEX,$MAKEINDX, in |
| 142 | *,none,*) |
| 143 | AC_MSG_WARN([Necessary TeX programs not found: can't build manual!]) |
| 144 | sod_have_latex=no |
| 145 | ;; |
| 146 | esac |
| 147 | ;; esac |
| 148 | |
| 149 | sod_have_custom_bib=no |
| 150 | case $sod_have_latex in maybe) |
| 151 | SOD_CHECK_LATEX_FILE([strayman.cls], [], [sod_have_latex=no]) |
| 152 | SOD_CHECK_LATEX_FILE([fontenc.sty], [], [sod_have_latex=no]) |
| 153 | SOD_CHECK_LATEX_FILE([inputenc.sty], [], [sod_have_latex=no]) |
| 154 | SOD_CHECK_LATEX_FILE([longtable.sty], [], [sod_have_latex=no]) |
| 155 | SOD_CHECK_LATEX_FILE([makeidx.sty], [], [sod_have_latex=no]) |
| 156 | SOD_CHECK_LATEX_FILE([amssymb.sty], [], [sod_have_latex=no]) |
| 157 | SOD_CHECK_LATEX_FILE([tikz.sty], [], [sod_have_latex=no]) |
| 158 | SOD_CHECK_LATEX_FILE([at.sty], [], [sod_have_latex=no]) |
| 159 | SOD_CHECK_LATEX_FILE([footnote.sty], [], [sod_have_latex=no]) |
| 160 | SOD_CHECK_LATEX_FILE([mdwfonts.sty], [], [sod_have_latex=no]) |
| 161 | SOD_CHECK_LATEX_FILE([mdwref.sty], [], [sod_have_latex=no]) |
| 162 | SOD_CHECK_LATEX_FILE([mdwtab.sty], [], [sod_have_latex=no]) |
| 163 | SOD_CHECK_LATEX_FILE([mdwthm.sty], [], [sod_have_latex=no]) |
| 164 | SOD_CHECK_LATEX_FILE([sverb.sty], [], [sod_have_latex=no]) |
| 165 | SOD_CHECK_LATEX_FILE([syntax.sty], [], [sod_have_latex=no]) |
| 166 | |
| 167 | SOD_CHECK_LATEX_FILE([cmr12.tfm], [], [sod_have_latex=no]) |
| 168 | SOD_CHECK_LATEX_FILE([cmbx10.tfm], [], [sod_have_latex=no]) |
| 169 | SOD_CHECK_LATEX_FILE([cmcsc10.tfm], [], [sod_have_latex=no]) |
| 170 | SOD_CHECK_LATEX_FILE([cmex10.tfm], [], [sod_have_latex=no]) |
| 171 | SOD_CHECK_LATEX_FILE([cmmi12.tfm], [], [sod_have_latex=no]) |
| 172 | SOD_CHECK_LATEX_FILE([cmsy10.tfm], [], [sod_have_latex=no]) |
| 173 | SOD_CHECK_LATEX_FILE([cmti10.tfm], [], [sod_have_latex=no]) |
| 174 | SOD_CHECK_LATEX_FILE([msam10.tfm], [], [sod_have_latex=no]) |
| 175 | SOD_CHECK_LATEX_FILE([msbm10.tfm], [], [sod_have_latex=no]) |
| 176 | SOD_CHECK_LATEX_FILE([ecrm1000.tfm], [], [sod_have_latex=no]) |
| 177 | SOD_CHECK_LATEX_FILE([logo10.tfm], [], [sod_have_latex=no]) |
| 178 | SOD_CHECK_LATEX_FILE([pplr8r.tfm], [], [sod_have_latex=no]) |
| 179 | SOD_CHECK_LATEX_FILE([pplri8r.tfm], [], [sod_have_latex=no]) |
| 180 | SOD_CHECK_LATEX_FILE([pplb8r.tfm], [], [sod_have_latex=no]) |
| 181 | SOD_CHECK_LATEX_FILE([phvr8r.tfm], [], [sod_have_latex=no]) |
| 182 | SOD_CHECK_LATEX_FILE([phvb8r.tfm], [], [sod_have_latex=no]) |
| 183 | SOD_CHECK_LATEX_FILE([pcrr8rn.tfm], [], [sod_have_latex=no]) |
| 184 | |
| 185 | SOD_CHECK_LATEX_FILE([merlin.mbs], [sod_have_custom_bib=yes], [:]) |
| 186 | |
| 187 | case $sod_have_latex in |
| 188 | no) |
| 189 | AC_MSG_WARN([Necessary LaTeX packages not found: can't build manual!]) |
| 190 | ;; |
| 191 | esac |
| 192 | ;; esac |
| 193 | |
| 194 | case $sod_want_latex,$sod_have_latex in |
| 195 | must,no) |
| 196 | AC_MSG_ERROR([Couldn't find necessary LaTeX support to build manual!]) |
| 197 | ;; |
| 198 | *,maybe) |
| 199 | sod_have_latex=yes |
| 200 | ;; |
| 201 | esac |
| 202 | AM_CONDITIONAL([HAVE_LATEX], [test "$sod_have_latex" = "yes"]) |
| 203 | AM_CONDITIONAL([HAVE_CUSTOM_BIB], [test "$sod_have_custom_bib" = "yes"]) |
| 204 | |
| 205 | dnl-------------------------------------------------------------------------- |
| 206 | dnl Output. |
| 207 | |
| 208 | AC_CONFIG_FILES( |
| 209 | [Makefile] |
| 210 | [src/Makefile] |
| 211 | [lib/Makefile] |
| 212 | [doc/Makefile] |
| 213 | [test/Makefile]) |
| 214 | AC_OUTPUT |
| 215 | |
| 216 | dnl----- That's all, folks -------------------------------------------------- |