1 dnl configure.ac -*-shell-script-*-
2 dnl Process this file with autoconf to produce a configure script.
6 # Bootstrap the init process.
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])
16 # For avoiding x86 FPU precision issues
18 [i?86], [CXXFLAGS="$CXXFLAGS -msse2 -mfpmath=sse"]
21 # List a file that identifies your package.
22 AC_CONFIG_SRCDIR([lily/main.cc])
25 AC_CONFIG_HEADERS([config.hh:config.hh.in])
27 # Uncomment the configuration options your package needs.
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
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.]
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],
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
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)
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([])],
96 test_CXXFLAGS="-Werror=unknown-warning-option"],
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"],
112 CXXFLAGS="$save_CXXFLAGS"])
114 PKG_CHECK_MODULES(BDWGC, bdw-gc)
115 GUILE_CFLAGS="${GUILE_CFLAGS} ${BDWGC_CFLAGS}"
117 ## Check for usable cxxabi
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])])])
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)
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)
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)
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
183 DOCUMENTATION_REQUIRED=OPTIONAL
187 STEPMAKE_PATH_PROG(GHOSTSCRIPT, gs, $DOCUMENTATION_REQUIRED, 9.03)
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!]
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"])
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
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,
226 STEPMAKE_PROGS(GS920, gs, OPTIONAL, 9.20)
227 req=`STEPMAKE_NUMERIC_VERSION(9.20)`
228 if test "$GS920_VERSION" -lt "$req"; then
230 USE_EXTRACTPDFMARK=no
233 if test "$EXTRACTPDFMARK" = "false"; then
235 USE_EXTRACTPDFMARK=no
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"
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.)"])
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
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)
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)'])
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)'])
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)'])
316 STEPMAKE_PROGS(IMAGEMAGICK, convert, $DOCUMENTATION_REQUIRED)
317 STEPMAKE_PROGS(RSYNC, rsync, $DOCUMENTATION_REQUIRED)
319 # must also have local.make if configure fails.
322 # Gather requirements and generate output.
325 if make top-doc 1>/dev/null 2>&1; then
326 rm -f INSTALL.txt && ln Documentation/out/topdocs/INSTALL.txt .
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