lib/sod-hosted.c (sod_makev): Use two statements rather than tricky expression.
[sod] / configure.ac
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 [src/Makefile]
215 [lib/Makefile]
216 [doc/Makefile]
217 [test/Makefile])
218 AC_OUTPUT
219
220 dnl----- That's all, folks --------------------------------------------------