NR: Add index entries for `<<`, `\\`, and `>>`
[lilypond/mirror.git] / configure.ac
blobac0b092769951307bfd43e916a2c66d2a6225552
1 dnl configure.ac   -*-shell-script-*-
2 dnl Process this file with autoconf to produce a configure script.
4 AC_PREREQ([2.60])
6 # Bootstrap the init process.
7 AC_INIT([LilyPond],
8     [m4_esyscmd_s([. ${SRCDIR:-.}/VERSION; echo $MAJOR_VERSION.$MINOR_VERSION.$PATCH_LEVEL])],
9     [bug-lilypond@gnu.org], [lilypond], [https://lilypond.org/])
11 # Bootstrap StepMake configure
12 AC_CONFIG_AUX_DIR([config])
14 STEPMAKE_INIT
16 # For avoiding x86 FPU precision issues
17 AS_CASE([$host_cpu],
18   [i?86], [CXXFLAGS="$CXXFLAGS -msse2 -mfpmath=sse"]
21 # List a file that identifies your package.
22 AC_CONFIG_SRCDIR([lily/main.cc])
24 # Move to aclocal.m4?
25 AC_CONFIG_HEADERS([config.hh:config.hh.in])
27 # Uncomment the configuration options your package needs.
29 CHECKING=no
30 AC_ARG_ENABLE(checking,
31     [AS_HELP_STRING([--enable-checking],
32                     [compile with expensive run-time checks.  Default: off])],
33     [CHECKING=$enableval])
35 if test "$CHECKING" = "yes"; then
36   AC_DEFINE(CHECKING)
39 DOCUMENTATION=yes
40 AC_ARG_ENABLE(documentation,
41     [AS_HELP_STRING([--enable-documentation],
42                     [build Documentation.  Default: on])],
43     [DOCUMENTATION=$enableval])
44 AC_SUBST(DOCUMENTATION)
46 AC_ARG_WITH(extractpdfmark,
47     [AS_HELP_STRING([--with-extractpdfmark],
48                     [use extractpdfmark for PDF documentation.]
49                     [Default: check])],
50     [],
51     [with_extractpdfmark=check])
53 AC_ARG_WITH(flexlexer-dir,
54     [AS_HELP_STRING([--with-flexlexer-dir=DIR],
55                     [location of FlexLexer.h.])],
56     [FLEXLEXER_DIR=$withval],
57     [FLEXLEXER_DIR=""])
59 LINK_GXX_STATICALLY=no
60 AC_ARG_ENABLE(static-gxx,
61     [AS_HELP_STRING([--enable-static-gxx],
62                     [link libstdc++.a statically.  Default: off])],
63     [LINK_GXX_STATICALLY=$enableval])
64 AC_SUBST(LINK_GXX_STATICALLY)
66 # must come before any header checks
67 STEPMAKE_COMPILE
69 AC_LANG([C++])
71 STEPMAKE_PYTHON(REQUIRED, 3.10, 3.99)
73 STEPMAKE_CXX(REQUIRED)
74 STEPMAKE_LIB(REQUIRED)
75 STEPMAKE_BISON(REQUIRED, 2.4.1)
76 STEPMAKE_FLEX(REQUIRED)
77 STEPMAKE_FLEXLEXER(REQUIRED)
78 STEPMAKE_LOCALE
79 STEPMAKE_GETTEXT
80 STEPMAKE_MSGFMT(REQUIRED)
81 STEPMAKE_TEXMF(REQUIRED)
82 STEPMAKE_TEXMF_DIRS(REQUIRED)
84 STEPMAKE_GUILE_DEVEL(REQUIRED)
86 # Check if the compiler understands -Werror=unknown-warning-option.
87 # This is important for Clang which otherwise just warns about unknown
88 # options.  GCC doesn't need this option and always returns an error.
89 # Unfortunately GCC doesn't support Clang's option either, so we can't
90 # just add it for all cases.
91 AC_MSG_CHECKING([whether $CXX supports -Werror=unknown-warning-option])
92 save_CXXFLAGS="$CXXFLAGS"
93 CXXFLAGS="-Werror=unknown-warning-option"
94 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])],
95                   [AC_MSG_RESULT([yes])
96                    test_CXXFLAGS="-Werror=unknown-warning-option"],
97                   [AC_MSG_RESULT([no])
98                    test_CXXFLAGS=""])
99 CXXFLAGS="$save_CXXFLAGS"
101 # -Wcast-function-type was added to GCC in version 8.  The Guile
102 # interface tends to trigger this warning, so disable it.
103 # g++ -Wno-whatever may compile even when the compiler does not
104 # support the warning, so we have to check for the warning itself.
105 AC_MSG_CHECKING([whether $CXX supports -Wcast-function-type])
106 save_CXXFLAGS="$CXXFLAGS"
107 CXXFLAGS="$test_CXXFLAGS -Wcast-function-type"
108 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])],
109                   [AC_MSG_RESULT([yes])
110                    CXXFLAGS="$save_CXXFLAGS -Wno-cast-function-type"],
111                   [AC_MSG_RESULT([no])
112                    CXXFLAGS="$save_CXXFLAGS"])
114 PKG_CHECK_MODULES(BDWGC, bdw-gc)
115 GUILE_CFLAGS="${GUILE_CFLAGS} ${BDWGC_CFLAGS}"
117 ## Check for usable cxxabi
118 save_LIBS="$LIBS"
119 LIBS="$LIBS $CXXABI_LIBS"
120 AC_MSG_CHECKING(for usable C++ demangler)
121 AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <cxxabi.h>],
122             [abi::__cxa_demangle ("", 0, 0, 0)])],
123     [AC_DEFINE(HAVE_CXA_DEMANGLE)
124         AC_MSG_RESULT(yes)],[
125         LIBS="$LIBS -lsupc++"
126         AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <cxxabi.h>],
127                     [abi::__cxa_demangle ("", 0, 0, 0)])],
128             [AC_DEFINE(HAVE_CXA_DEMANGLE)
129                 AC_MSG_RESULT([yes, using -lsupc++])
130                 CXXABI_LIBS="$CXXABI_LIBS -lsupc++"],
131             [AC_MSG_RESULT([no, use c++filt -t for manual demangling])])])
132 LIBS="$save_LIBS"
133 AC_SUBST(CXXABI_LIBS)
135 STEPMAKE_FONTFORGE(REQUIRED)
137 STEPMAKE_PATH_PROG(T1ASM, t1asm, REQUIRED)
139 AC_CHECK_HEADERS([grp.h pwd.h sys/stat.h])
140 AC_CHECK_FUNCS([chroot gettext])
142 PKG_CHECK_MODULES(FONTCONFIG, fontconfig >= 2.13)
143 AC_SUBST(FONTCONFIG_CFLAGS)
144 AC_SUBST(FONTCONFIG_LIBS)
146 PKG_CHECK_MODULES(FREETYPE2, freetype2 >= 2.10)
147 AC_SUBST(FREETYPE2_CFLAGS)
148 AC_SUBST(FREETYPE2_LIBS)
150 PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.64)
151 AC_SUBST(GLIB_CFLAGS)
152 AC_SUBST(GLIB_LIBS)
154 PKG_CHECK_MODULES(GOBJECT, gobject-2.0 >= 2.64)
155 AC_SUBST(GOBJECT_CFLAGS)
156 AC_SUBST(GOBJECT_LIBS)
158 PKG_CHECK_MODULES(PANGO_FT2, pangoft2 >= 1.44.5)
159 AC_SUBST(PANGO_FT2_CFLAGS)
160 AC_SUBST(PANGO_FT2_LIBS)
162 PKG_CHECK_MODULES(CAIRO, cairo >= 1.16)
163 AC_SUBST(CAIRO_CFLAGS)
164 AC_SUBST(CAIRO_LIBS)
166 PKG_CHECK_MODULES(LIBPNG, libpng >= 1.6.0)
167 AC_SUBST(LIBPNG_CFLAGS)
168 AC_SUBST(LIBPNG_LIBS)
170 PKG_CHECK_MODULES(ZLIB, zlib)
171 AC_SUBST(ZLIB_CFLAGS)
172 AC_SUBST(ZLIB_LIBS)
174 STEPMAKE_WINDOWS
176 # perl for help2man and for mf2pt1.pl
177 STEPMAKE_PERL(REQUIRED)
179 ## Optional tools for building documentation, website, extra fonts.
180 if test "$DOCUMENTATION" = "yes"; then
181   DOCUMENTATION_REQUIRED=REQUIRED
182 else
183   DOCUMENTATION_REQUIRED=OPTIONAL
186 # GhostScript
187 STEPMAKE_PATH_PROG(GHOSTSCRIPT, gs, $DOCUMENTATION_REQUIRED, 9.03)
189 GS_API=no
190 AC_ARG_ENABLE(gs-api,
191     [AS_HELP_STRING([--enable-gs-api],
192                     [link to libgs and use Ghostscript API instead of invoking]
193                     [the executable. Beware of licensing implications!]
194                     [Default: off])],
195     [GS_API=$enableval])
196 AC_SUBST(GS_API)
198 if test "$GS_API" = "yes"; then
199     AC_CHECK_HEADER([ghostscript/iapi.h], [
200         AC_CHECK_LIB([gs], [gsapi_new_instance], [GHOSTSCRIPT_FOUND="yes"],
201                      [GHOSTSCRIPT_FOUND="no"])
202     ], [GHOSTSCRIPT_FOUND="no"])
203     if test "$GHOSTSCRIPT_FOUND" = "no"; then
204         STEPMAKE_ADD_ENTRY(REQUIRED, ["libgs-dev"])
205     fi
206     AC_DEFINE(GS_API)
209 AC_SUBST(GS920)
210 AC_SUBST(EXTRACTPDFMARK)
211 AC_SUBST(EXTRACTPDFMARK_OPTIONS)
212 AC_SUBST(USE_EXTRACTPDFMARK)
214 if test "x$with_extractpdfmark" = "xyes"; then
215     EXTRACTPDFMARK_REQUIRED=REQUIRED
216 else
217     EXTRACTPDFMARK_REQUIRED=OPTIONAL
220 if test "x$with_extractpdfmark" != "xno"; then
221     USE_EXTRACTPDFMARK=yes
222     EXTRACTPDFMARK_OPTIONS=
223     STEPMAKE_PROGS(EXTRACTPDFMARK, extractpdfmark, $EXTRACTPDFMARK_REQUIRED,
224         1.0.0)
226     STEPMAKE_PROGS(GS920, gs, OPTIONAL, 9.20)
227     req=`STEPMAKE_NUMERIC_VERSION(9.20)`
228     if test "$GS920_VERSION" -lt "$req"; then
229         GS920=
230         USE_EXTRACTPDFMARK=no
231     fi
233     if test "$EXTRACTPDFMARK" = "false"; then
234         EXTRACTPDFMARK=
235         USE_EXTRACTPDFMARK=no
236     else
237         # pdftex + extractpdfmark 1.1.0 raises an error.
238         # extractpdfmark 1.1.1 has been fixed and does not raise the error.
239         # So we add a workaround option to prevent the error
240         # if extractpdfmark is older than 1.1.1.
241         req=`STEPMAKE_NUMERIC_VERSION(1.1.1)`
242         if test "$EXTRACTPDFMARK_VERSION" -lt "$req"; then
243             EXTRACTPDFMARK_OPTIONS="--style=hex"
244         fi
245     fi
247     if test "$EXTRACTPDFMARK_REQUIRED" = "OPTIONAL"; then
248         if test -z "$EXTRACTPDFMARK" || test -z "GS920"; then
249             STEPMAKE_ADD_ENTRY(OPTIONAL,
250                 ["(Using GhostScript >= 9.20 together with extractpdfmark"])
251             STEPMAKE_ADD_ENTRY(OPTIONAL,
252                 [" can significantly reduce the size of the final PDF files.)"])
253         fi
254     fi
255 else
256     USE_EXTRACTPDFMARK=no
259 STEPMAKE_PROGS(TEXI2ANY, texi2any, $DOCUMENTATION_REQUIRED, 6.8)
260 STEPMAKE_PROGS(DBLATEX, dblatex, OPTIONAL, 0.1.4)
261 STEPMAKE_PROGS(BIBTEX, bibtex, $DOCUMENTATION_REQUIRED)
262 STEPMAKE_PROGS(PDFLATEX, xelatex pdflatex, $DOCUMENTATION_REQUIRED)
263 if test "$PDFLATEX" = "xelatex"; then
264     STEPMAKE_PROGS(PDFTEX, xetex, $DOCUMENTATION_REQUIRED)
265     if test "$PDFTEX" = "xetex"; then
266         # For avoiding PDF destination name replacement.
267         PDFTEX=$abssrcdir/scripts/build/xetex-with-options.sh
268         PDFLATEX=$abssrcdir/scripts/build/xelatex-with-options.sh
269     fi
270 else
271     STEPMAKE_PROGS(PDFTEX, pdfetex pdftex etex, $DOCUMENTATION_REQUIRED)
273 STEPMAKE_PROGS(TEXI2PDF, texi2pdf, $DOCUMENTATION_REQUIRED)
274 STEPMAKE_PROGS(TEXINDEX, texindex, $DOCUMENTATION_REQUIRED)
276 AC_MSG_CHECKING(for epsf.tex)
277 TEX_EPSF=`kpsewhich -format=tex epsf`
278 if test "$TEX_EPSF" = ""; then
279     AC_MSG_RESULT(not found)
280     STEPMAKE_ADD_ENTRY($DOCUMENTATION_REQUIRED,epsf.tex)
281 else
282     AC_MSG_RESULT($TEX_EPSF)
285 STEPMAKE_PROGS(PLTOTF, pltotf, $DOCUMENTATION_REQUIRED)
286 AC_MSG_CHECKING(for TeX fontinst package support)
287 TEX_FONTINST=`kpsewhich -format=tex fontinst.sty`
288 if test "$TEX_FONTINST" = ""; then
289     AC_MSG_RESULT(not found)
290     STEPMAKE_ADD_ENTRY($DOCUMENTATION_REQUIRED,
291 ['fontinst CTAN package (texlive-fontinst or texlive-font-utils)'])
292 else
293     AC_MSG_RESULT(yes)
295 AC_MSG_CHECKING(for lmodern Type1 fonts)
296 # We check for `lmtl10.afm` -- if this file is present, the Type1 fonts are
297 # certainly installed, too.
298 TEX_LM=`kpsewhich -format=afm lmtl10`
299 if test "$TEX_LM" = ""; then
300     AC_MSG_RESULT(not found)
301     STEPMAKE_ADD_ENTRY($DOCUMENTATION_REQUIRED,
302 ['lm CTAN package (lmodern or texlive-lm)'])
303 else
304     AC_MSG_RESULT(yes)
306 AC_MSG_CHECKING(for Cyrillic characters support in TeX)
307 TEX_FIKPARM=`kpsewhich -format=mf fikparm`
308 if test "$TEX_FIKPARM" = ""; then
309     AC_MSG_RESULT(not found)
310     STEPMAKE_ADD_ENTRY($DOCUMENTATION_REQUIRED,
311 ['lh CTAN package (texlive-lang-cyrillic or texlive-texmf-fonts)'])
312 else
313     AC_MSG_RESULT(yes)
316 STEPMAKE_PROGS(IMAGEMAGICK, convert, $DOCUMENTATION_REQUIRED)
317 STEPMAKE_PROGS(RSYNC, rsync, $DOCUMENTATION_REQUIRED)
319 # must also have local.make if configure fails.
320 touch local.make
322 # Gather requirements and generate output.
323 STEPMAKE_END
325 if make top-doc 1>/dev/null 2>&1; then
326     rm -f INSTALL.txt && ln Documentation/out/topdocs/INSTALL.txt .
329 cat <<EOF
331 Type:
332     make all       to build LilyPond
333     make install   to install LilyPond
334     make help      to see all possible targets
336 Edit local.make for local Makefile overrides.
338 See INSTALL.txt and README.md for more information