| 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~]MAJOR.MINOR.PATCH[.BPB] |
| 46 | ## [-N-gHEX[+]]. ASDF insists on simple numeric things separated by dots. |
| 47 | ## If there's no interim-version thing on the front or Git thing on the end, |
| 48 | ## then the main version number will do fine. If there is, then we insert |
| 49 | ## /two/ `0's in, followed by N and the HEX converted to decimal. Why two? |
| 50 | ## Because if there's no brown-paper-bag number, we want to make sure that |
| 51 | ## the first BPB release is higher than any of the preceding Git revisions. |
| 52 | ver=AC_PACKAGE_VERSION |
| 53 | case $ver in |
| 54 | *-*-g*) |
| 55 | case $ver in |
| 56 | *~*) pre=${ver%%~*}. tail=${ver#*~} ;; |
| 57 | *) pre= tail=$ver ;; |
| 58 | esac |
| 59 | base=${tail%%-*} tail=${tail#*-} |
| 60 | n=${tail%%-*} tail=${tail#*-g} |
| 61 | case $tail in *+) grubby=.0.1 tail=${tail%+} ;; *) grubby= ;; esac |
| 62 | rev=$(( 0x$tail )) |
| 63 | ASDF_VERSION=$pre$base.0.0.$n.$rev$grubby |
| 64 | ;; |
| 65 | *) |
| 66 | ASDF_VERSION=$ver |
| 67 | ;; |
| 68 | esac |
| 69 | AC_SUBST([ASDF_VERSION]) |
| 70 | |
| 71 | dnl-------------------------------------------------------------------------- |
| 72 | dnl Common Lisp things. |
| 73 | |
| 74 | AC_ARG_WITH([lisp-system], |
| 75 | [AS_HELP_STRING([--with-lisp-system=SYSTEMS], |
| 76 | [preference order of cl-launch Lisp systems])], |
| 77 | [], [with_lisp_system="sbcl clisp"]) |
| 78 | |
| 79 | AC_CHECK_PROGS([CL_LAUNCH], [cl-launch], [not-found]) |
| 80 | case "$CL_LAUNCH" in |
| 81 | not-found) AC_MSG_ERROR([\`cl-launch' not found]) ;; |
| 82 | esac |
| 83 | |
| 84 | AC_MSG_CHECKING([for best choice of Lisp system]) |
| 85 | if ! LISPSYS=$($CL_LAUNCH -l "$with_lisp_system" \ |
| 86 | -ip '(string-downcase (lisp-implementation-type))'); then |
| 87 | AC_MSG_ERROR([cl-launch didn't like any Lisp system]) |
| 88 | fi |
| 89 | AC_SUBST([LISPSYS]) |
| 90 | AC_MSG_RESULT([$LISPSYS]) |
| 91 | |
| 92 | AC_MSG_CHECKING([FASL file extension]) |
| 93 | fasl=$($CL_LAUNCH -l $LISPSYS -ip \ |
| 94 | '(pathname-type (compile-file-pathname "foo.lisp"))') |
| 95 | AC_SUBST([fasl]) |
| 96 | AC_MSG_RESULT([.$fasl]) |
| 97 | |
| 98 | AC_ARG_WITH([lisp-source-dir], |
| 99 | [AS_HELP_STRING([--with-lisp-source-dir=DIR], |
| 100 | [where to install Common Lisp source files])], |
| 101 | [], [with_lisp_source_dir='${datadir}/common-lisp/source']) |
| 102 | AC_ARG_WITH([lisp-system-dir], |
| 103 | [AS_HELP_STRING([--with-lisp-system-dir=DIR], |
| 104 | [where to install ASDF system links])], |
| 105 | [], [with_lisp_system_dir='${datadir}/common-lisp/systems']) |
| 106 | AC_SUBST([lispsrcdir], [$with_lisp_source_dir]) |
| 107 | AC_SUBST([lispsysdir], [$with_lisp_system_dir]) |
| 108 | |
| 109 | dnl-------------------------------------------------------------------------- |
| 110 | dnl TeX things. |
| 111 | |
| 112 | AC_DEFUN([SOD_CHECK_LATEX_FILE], |
| 113 | [sod_thing="$1"; case $sod_thing in |
| 114 | *.sty) sod_thing=${sod_thing%.sty} sod_what=package ;; |
| 115 | *.cls) sod_thing=${sod_thing%.cls} sod_what="document class" ;; |
| 116 | *.tfm) sod_thing=${sod_thing%.tfm} sod_what="font metrics" ;; |
| 117 | *) sod_what="file" ;; |
| 118 | esac |
| 119 | AS_VAR_PUSHDEF([SOD_Pkg], [sod_cv_latex_$1]) |
| 120 | AC_CACHE_CHECK([for LaTeX `$sod_thing' $sod_what], |
| 121 | [SOD_Pkg], |
| 122 | [if $KPSEWHICH >/dev/null 2>&1 --progname=pdflatex $1 |
| 123 | then SOD_Pkg=yes |
| 124 | else SOD_Pkg=no; fi]) |
| 125 | case $SOD_Pkg in |
| 126 | yes) m4_default([$2], [:]) ;; |
| 127 | no) m4_default([$3], [AC_MSG_ERROR([Can't find `$1'])]) ;; |
| 128 | esac |
| 129 | AS_VAR_POPDEF([SOD_Pkg])]) |
| 130 | |
| 131 | dnl See if we want to build the documentation. |
| 132 | AC_ARG_ENABLE([manual], [AS_HELP_STRING([--enable-manual])], |
| 133 | [if test "$enableval" = "no" |
| 134 | then sod_want_latex=no sod_have_latex=no |
| 135 | else sod_want_latex=must sod_have_latex=maybe; fi], |
| 136 | [sod_want_latex=maybe sod_have_latex=maybe]) |
| 137 | |
| 138 | dnl Make sure the TeX programs we need are available. |
| 139 | case $sod_have_latex in maybe) |
| 140 | AC_CHECK_PROGS([TEX], [tex], [none]) |
| 141 | AC_CHECK_PROGS([PDFLATEX], [pdflatex], [none]) |
| 142 | AC_CHECK_PROGS([KPSEWHICH], [kpsewhich], [none]) |
| 143 | AC_CHECK_PROGS([BIBTEX], [bibtex], [none]) |
| 144 | AC_CHECK_PROGS([MAKEINDEX], [makeindex], [none]) |
| 145 | case ,$TEX,$PDFLATEX,$KPSEWHICH,$BIBTEX,$MAKEINDX, in |
| 146 | *,none,*) |
| 147 | AC_MSG_WARN([Necessary TeX programs not found: can't build manual!]) |
| 148 | sod_have_latex=no |
| 149 | ;; |
| 150 | esac |
| 151 | ;; esac |
| 152 | |
| 153 | sod_have_custom_bib=no |
| 154 | case $sod_have_latex in maybe) |
| 155 | SOD_CHECK_LATEX_FILE([strayman.cls], [], [sod_have_latex=no]) |
| 156 | SOD_CHECK_LATEX_FILE([fontenc.sty], [], [sod_have_latex=no]) |
| 157 | SOD_CHECK_LATEX_FILE([inputenc.sty], [], [sod_have_latex=no]) |
| 158 | SOD_CHECK_LATEX_FILE([longtable.sty], [], [sod_have_latex=no]) |
| 159 | SOD_CHECK_LATEX_FILE([makeidx.sty], [], [sod_have_latex=no]) |
| 160 | SOD_CHECK_LATEX_FILE([amssymb.sty], [], [sod_have_latex=no]) |
| 161 | SOD_CHECK_LATEX_FILE([tikz.sty], [], [sod_have_latex=no]) |
| 162 | SOD_CHECK_LATEX_FILE([at.sty], [], [sod_have_latex=no]) |
| 163 | SOD_CHECK_LATEX_FILE([footnote.sty], [], [sod_have_latex=no]) |
| 164 | SOD_CHECK_LATEX_FILE([mdwfonts.sty], [], [sod_have_latex=no]) |
| 165 | SOD_CHECK_LATEX_FILE([mdwref.sty], [], [sod_have_latex=no]) |
| 166 | SOD_CHECK_LATEX_FILE([mdwtab.sty], [], [sod_have_latex=no]) |
| 167 | SOD_CHECK_LATEX_FILE([mdwthm.sty], [], [sod_have_latex=no]) |
| 168 | SOD_CHECK_LATEX_FILE([sverb.sty], [], [sod_have_latex=no]) |
| 169 | SOD_CHECK_LATEX_FILE([syntax.sty], [], [sod_have_latex=no]) |
| 170 | |
| 171 | SOD_CHECK_LATEX_FILE([cmr12.tfm], [], [sod_have_latex=no]) |
| 172 | SOD_CHECK_LATEX_FILE([cmbx10.tfm], [], [sod_have_latex=no]) |
| 173 | SOD_CHECK_LATEX_FILE([cmcsc10.tfm], [], [sod_have_latex=no]) |
| 174 | SOD_CHECK_LATEX_FILE([cmex10.tfm], [], [sod_have_latex=no]) |
| 175 | SOD_CHECK_LATEX_FILE([cmmi12.tfm], [], [sod_have_latex=no]) |
| 176 | SOD_CHECK_LATEX_FILE([cmsy10.tfm], [], [sod_have_latex=no]) |
| 177 | SOD_CHECK_LATEX_FILE([cmti10.tfm], [], [sod_have_latex=no]) |
| 178 | SOD_CHECK_LATEX_FILE([msam10.tfm], [], [sod_have_latex=no]) |
| 179 | SOD_CHECK_LATEX_FILE([msbm10.tfm], [], [sod_have_latex=no]) |
| 180 | SOD_CHECK_LATEX_FILE([ecrm1000.tfm], [], [sod_have_latex=no]) |
| 181 | SOD_CHECK_LATEX_FILE([logo10.tfm], [], [sod_have_latex=no]) |
| 182 | SOD_CHECK_LATEX_FILE([pplr8r.tfm], [], [sod_have_latex=no]) |
| 183 | SOD_CHECK_LATEX_FILE([pplri8r.tfm], [], [sod_have_latex=no]) |
| 184 | SOD_CHECK_LATEX_FILE([pplb8r.tfm], [], [sod_have_latex=no]) |
| 185 | SOD_CHECK_LATEX_FILE([phvr8r.tfm], [], [sod_have_latex=no]) |
| 186 | SOD_CHECK_LATEX_FILE([phvb8r.tfm], [], [sod_have_latex=no]) |
| 187 | SOD_CHECK_LATEX_FILE([pcrr8rn.tfm], [], [sod_have_latex=no]) |
| 188 | |
| 189 | SOD_CHECK_LATEX_FILE([merlin.mbs], [sod_have_custom_bib=yes], [:]) |
| 190 | |
| 191 | case $sod_have_latex in |
| 192 | no) |
| 193 | AC_MSG_WARN([Necessary LaTeX packages not found: can't build manual!]) |
| 194 | ;; |
| 195 | esac |
| 196 | ;; esac |
| 197 | |
| 198 | case $sod_want_latex,$sod_have_latex in |
| 199 | must,no) |
| 200 | AC_MSG_ERROR([Couldn't find necessary LaTeX support to build manual!]) |
| 201 | ;; |
| 202 | *,maybe) |
| 203 | sod_have_latex=yes |
| 204 | ;; |
| 205 | esac |
| 206 | AM_CONDITIONAL([HAVE_LATEX], [test "$sod_have_latex" = "yes"]) |
| 207 | AM_CONDITIONAL([HAVE_CUSTOM_BIB], [test "$sod_have_custom_bib" = "yes"]) |
| 208 | |
| 209 | dnl-------------------------------------------------------------------------- |
| 210 | dnl Output. |
| 211 | |
| 212 | AC_CONFIG_FILES( |
| 213 | [Makefile] |
| 214 | [common/Makefile] |
| 215 | [src/Makefile] |
| 216 | [lib/Makefile] |
| 217 | [doc/Makefile] |
| 218 | [test/Makefile]) |
| 219 | AC_OUTPUT |
| 220 | |
| 221 | dnl----- That's all, folks -------------------------------------------------- |