1#                                               -*- Autoconf -*-
2# Process this file with autoconf to produce a configure script.
3
4dnl AC_PREREQ([2.63])
5AC_INIT([qmidiarp], [0.6.5], [qmidiarp-devel@lists.sourceforge.net])
6AC_CONFIG_SRCDIR([src/main.cpp])
7AC_CONFIG_HEADERS(src/config.h)
8AC_CONFIG_MACRO_DIR([m4])
9AM_INIT_AUTOMAKE([dist-bzip2])
10AC_DEFINE(APP_NAME, "QMidiArp", [application name])
11
12# Initialize doxygen
13DX_HTML_FEATURE(ON)
14DX_CHM_FEATURE(OFF)
15DX_CHI_FEATURE(OFF)
16DX_MAN_FEATURE(OFF)
17DX_RTF_FEATURE(OFF)
18DX_XML_FEATURE(OFF)
19DX_PDF_FEATURE(OFF)
20DX_PS_FEATURE(OFF)
21DX_INIT_DOXYGEN($PACKAGE_NAME, Doxyfile)
22
23# Checks for programs.
24AC_PROG_CXX
25AC_PROG_CC
26AC_PROG_INSTALL
27AC_PROG_LN_S
28
29AC_ENABLE_SHARED
30AC_DISABLE_STATIC
31LT_INIT([dlopen])
32
33
34# Checks for libraries
35AC_CHECK_LIB([m], [roundf], , AC_MSG_ERROR([required libm missing]))
36
37AC_ARG_ENABLE(alsa,
38  AC_HELP_STRING([--enable-alsa], [provide ALSA backend option (default=yes)]),
39  [ac_alsa="$enableval"],
40  [ac_alsa="yes"])
41alsalib_found="yes"
42
43# Build LV2 plugins
44AC_ARG_ENABLE(lv2plugins,
45  AC_HELP_STRING([--enable-lv2plugins], [build LV2 plugins (default=yes)]),
46  [ac_lv2plugins="$enableval"],
47  [ac_lv2plugins="yes"])
48
49AM_CONDITIONAL([BUILD_LV2], [test "x$ac_lv2plugins" = "xyes"])
50ac_lv2willbuild=no
51
52AM_COND_IF([BUILD_LV2],[
53dnl check for lv2atom
54AC_CHECK_HEADER( lv2/lv2plug.in/ns/ext/atom/atom.h, lv2include_found="yes", lv2include_found="no" )
55PKG_CHECK_MODULES(LV2, lv2 >= 1.10, lv2Works="yes", lv2Works="no")
56CFLAGSsave=$CFLAGS
57CFLAGS=$LV2_CFLAGS
58AC_SUBST(LV2_CFLAGS)
59CFLAGS="$CFLAGS $CFLAGSsave"
60
61if test $lv2include_found = "no" -o $lv2Works = "no"; then
62    AC_MSG_NOTICE(
63        [cannot find an lv2 component for building. Will not build LV2 plugins.])
64    AM_CONDITIONAL([BUILD_LV2], false)
65    AM_CONDITIONAL([BUILD_LV2_UI], false)
66else
67    ac_lv2willbuild=yes
68fi
69
70], [AC_MSG_NOTICE([LV2 plugins will not be built])])
71
72# Build LV2 plugin Qt UIs ?
73AC_ARG_ENABLE(lv2pluginuis,
74    AC_HELP_STRING([--enable-lv2pluginuis], [build LV2 plugin UIs (default=yes)]),
75  [ac_lv2pluginuis="$enableval"],
76  [ac_lv2pluginuis="yes"])
77
78AM_CONDITIONAL([BUILD_LV2_UI], [test "x$ac_lv2pluginuis" = "xyes" -a "x$ac_lv2willbuild" = "xyes"])
79
80# Build QMidiArp standalone application ?
81AC_ARG_ENABLE(buildapp,
82    AC_HELP_STRING([--enable-buildapp], [build standalone application (default=yes)]),
83  [ac_buildapp="$enableval"],
84  [ac_buildapp="yes"])
85
86AM_CONDITIONAL([BUILD_APP], [test "x$ac_buildapp" = "xyes"])
87
88AC_ARG_ENABLE(qt4, AC_HELP_STRING([--enable-qt4],
89                          [force Qt4 instead of Qt5 library (default=no)]),,
90                          enable_qt4=no)
91
92if test "x$ac_buildapp" = "xyes" -o ["x$ac_lv2pluginuis" = "xyes"  -a "x$ac_lv2willbuild" = "xyes"]; then
93    AC_MSG_NOTICE([QT stuff required for standalone app or LV2 UIs])
94    dnl Check for Qt stuff only if we require GUI building
95    AS_IF([test x$enable_qt4 = xyes],
96        dnl Check for Qt4 library files
97        [
98        PKG_CHECK_MODULES(Qt4, QtCore QtGui >= 4.2.0, HAVE_QT4="yes", HAVE_QT4="no")
99        if test "x$HAVE_QT4" = "xyes"; then
100          dnl Check needed because in some cases the QtGui includedir
101          dnl does not contain the subsystem dir.
102          QT_INCLUDE_DIR=`$PKG_CONFIG --variable=includedir QtGui`
103          QT_CXXFLAGS=`$PKG_CONFIG --cflags QtCore QtGui`
104          EXTRA_QT_INCLUDE_DIR="$QT_INCLUDE_DIR/Qt"
105          AC_CHECK_FILE([$QT_INCLUDE_DIR/QWidget],
106          AC_MSG_NOTICE([No extra QT_INCLUDE_DIR needed]),
107          AC_CHECK_FILE([$EXTRA_QT_INCLUDE_DIR/QWidget],
108                     QT_CPPFLAGS="$QT_CPPFLAGS -I$EXTRA_QT_INCLUDE_DIR",
109                     AC_MSG_WARN([QWidget not found])))
110
111          AC_MSG_NOTICE([Set QT_CXXFLAGS... $QT_CXXFLAGS])
112          AC_SUBST(QT_CXXFLAGS)
113          AC_SUBST(Qt4_LIBS)
114        else
115          AC_MSG_NOTICE([cannot find Qt4 library >= 4.2])
116          AM_CONDITIONAL([BUILD_APP], false)
117          AM_CONDITIONAL([BUILD_LV2_UI], false)
118        fi
119        ac_qtversion=qt4],
120        dnl ... or use Qt5
121        [
122        PKG_CHECK_MODULES(Qt5, Qt5Core Qt5Gui Qt5Widgets >= 5.0,
123                          HAVE_QT5="yes", HAVE_QT5="no")
124        if test "x$HAVE_QT5" = "xyes"; then
125          dnl Check needed because in some cases the QtGui includedir
126          dnl doesnt contain the subsystem dir.
127          QT_INCLUDE_DIR=`$PKG_CONFIG --variable=includedir Qt5Gui`
128          QT_CXXFLAGS=`$PKG_CONFIG --cflags Qt5Core Qt5Gui Qt5Widgets`
129          QT_CXXFLAGS="$QT_CXXFLAGS -fPIC"
130          EXTRA_QT_INCLUDE_DIR="$QT_INCLUDE_DIR/Qt"
131          AC_CHECK_FILE([$QT_INCLUDE_DIR/QtWidgets/QWidget],
132            AC_MSG_NOTICE([No extra QT_INCLUDE_DIR needed]),
133              AC_CHECK_FILE([$EXTRA_QT_INCLUDE_DIR/QtWidgets/QWidget],
134                QT_CPPFLAGS="$QT_CPPFLAGS -I$EXTRA_QT_INCLUDE_DIR",
135                  AC_MSG_WARN([QWidget not found])))
136
137          AC_SUBST(QT_CXXFLAGS)
138          AC_SUBST(Qt5_LIBS)
139          AC_DEFINE([HAVE_QT5], [1],[Define to 1 if you have Qt5.])
140
141        else
142          AC_MSG_NOTICE([cannot find Qt5 library >= 5.0])
143          AM_CONDITIONAL([BUILD_APP], false)
144          AM_CONDITIONAL([BUILD_LV2_UI], false)
145        fi
146        ac_qtversion=qt5
147    ])
148    dnl endo of qt version test
149
150    dnl check for moc
151    AC_PATH_PROGS(MOC, moc-$ac_qtversion moc, no, [$PATH:$QTDIR/bin])
152    if test "x$MOC" = "xno" ; then
153      AC_MSG_ERROR(
154        [cannot find 'moc', please install the Qt development tools package.])
155    fi
156
157    # Enable translations.
158    AC_ARG_ENABLE(translations,
159      AC_HELP_STRING([--enable-translations], [enable translation file generation (default=no)]),
160      [ac_translations="$enableval"],
161      [ac_translations="no"])
162
163    AM_CONDITIONAL([ENABLE_TRANSLATIONS], [test "x$ac_translations" = "xyes"])
164
165    AM_COND_IF([ENABLE_TRANSLATIONS],[
166    dnl check for lupdate
167    AC_PATH_PROGS(LUPDATE, lupdate-$ac_qtversion lupdate, no, [$PATH:$QTDIR/bin])
168    if test "x$LUPDATE" = "xno" ; then
169      AC_MSG_ERROR(
170        [cannot find 'lupdate', please install the Qt development tools package.])
171    fi
172
173    dnl check for lrelease
174    AC_PATH_PROGS(LRELEASE, lrelease-$ac_qtversion lrelease, no, [$PATH:$QTDIR/bin])
175    if test "x$LRELEASE" = "xno" ; then
176      AC_MSG_ERROR(
177        [cannot find 'lrelease', please install the Qt development tools package.])
178    fi
179    ], [AC_MSG_NOTICE([translations are disabled])])
180
181    # Modify the entries in the LV2 ttl files according to Qt version
182
183    if test "x$ac_qtversion" = "xqt5"; then
184        sed -i "s/Qt4UI/Qt5UI/g" qmidiarp_arp.lv2/qmidiarp_arp_ui.ttl
185        sed -i "s/Qt4UI/Qt5UI/g" qmidiarp_lfo.lv2/qmidiarp_lfo_ui.ttl
186        sed -i "s/Qt4UI/Qt5UI/g" qmidiarp_seq.lv2/qmidiarp_seq_ui.ttl
187    fi
188    if test "x$ac_qtversion" = "xqt4"; then
189        sed -i "s/Qt5UI/Qt4UI/g" qmidiarp_arp.lv2/qmidiarp_arp_ui.ttl
190        sed -i "s/Qt5UI/Qt4UI/g" qmidiarp_lfo.lv2/qmidiarp_lfo_ui.ttl
191        sed -i "s/Qt5UI/Qt4UI/g" qmidiarp_seq.lv2/qmidiarp_seq_ui.ttl
192    fi
193else
194    AM_CONDITIONAL([ENABLE_TRANSLATIONS], false)
195    AM_CONDITIONAL([NEED_MOC], false)
196fi
197
198AM_CONDITIONAL([NEED_MOC], [test "x$ac_buildapp" = "xyes" -o "x$ac_lv2pluginuis" = "xyes"])
199
200if test "x$ac_buildapp" = "xyes" ; then
201    AC_MSG_NOTICE([Application build enabled.])
202
203    # Checks done if the standalone app is required
204    # Checks for libraries
205    if test "x$ac_alsa" = "xyes" ; then
206        AC_CHECK_LIB([asound], [snd_pcm_open], , alsalib_found="no")
207    fi
208    AC_CHECK_LIB([jack], [jack_client_open], ,
209                 [AC_MSG_ERROR(JACK library (jack) is required)])
210    # Enable NSM support
211    AC_ARG_ENABLE(nsm,
212      AC_HELP_STRING([--enable-nsm], [enable NSM support generation (default=yes)]),
213      [ac_nsm="$enableval"],
214      [ac_nsm="yes"])
215
216    AM_CONDITIONAL([ENABLE_NSM], [test "x$ac_nsm" = "xyes"])
217
218    AM_COND_IF([ENABLE_NSM],[
219    dnl check for liblo
220    AC_CHECK_HEADER( lo/lo.h, loinclude_found="yes", loinclude_found="no" )
221    # OSC support
222    PKG_CHECK_MODULES(LIBLO, liblo >= 0.26, libloWorks="yes", libloWorks="no")
223    LIBSsave=$LIBS
224    CFLAGSsave=$CFLAGS
225    CFLAGS=$LIBLO_CFLAGS
226    LIBS=$LIBLO_LIBS
227
228    AC_SUBST(LIBLO_CFLAGS)
229    AC_SUBST(LIBLO_LIBS)
230    LIBS="$LIBS $LIBSsave"
231    CFLAGS="$CFLAGS $CFLAGSsave"
232
233    if test "$loinclude_found" = "no" -o "libloWorks" = "no"; then
234      AC_MSG_NOTICE(
235        [cannot find a liblo component for building. Will build without nsm support.])
236    else
237        AC_DEFINE(NSM, 1, [Define to enable NSM session manager support])
238    fi
239    ], [AC_MSG_NOTICE([NSM support is disabled])])
240
241    # JACK session support
242
243    AC_CHECK_HEADER(jack/session.h, jack_session_found="yes", jack_session_found="no")
244    if test "$jack_session_found" = "yes"; then
245        AC_DEFINE(JACK_SESSION, 1, [Define to enable jack session support])
246    fi
247else
248    AM_CONDITIONAL([ENABLE_NSM], false)
249    AC_DEFINE(JACK_SESSION, 0)
250fi
251
252if test "x$alsalib_found" = "xyes" -a "x$ac_alsa" = "xyes" ; then
253    AC_DEFINE(HAVE_ALSA, 1, [Define to enable ALSA backend availabilty])
254fi
255# Remove the following generated file during configure to avoid need for make clean
256rm -f src/mainwindow_moc.cpp
257
258# Checks for header files.
259AC_HEADER_STDC
260
261# Checks for typedefs, structures, and compiler characteristics.
262AC_HEADER_STDBOOL
263AC_C_CONST
264AC_C_INLINE
265AC_TYPE_SSIZE_T
266AC_STRUCT_TM
267
268# Checks for library functions.
269AC_FUNC_STAT
270AC_CHECK_FUNCS([floor ftruncate getcwd memset malloc mkdir pow rint sqrt])
271
272
273# Checks for typedefs, structures, and compiler characteristics.
274
275# Checks for library functions.
276AC_CHECK_FUNCS([strdup])
277
278AC_CONFIG_FILES([Makefile] [examples/Makefile] [src/Makefile])
279AC_CONFIG_FILES([src/pixmaps/Makefile] [man/Makefile] [man/fr/Makefile])
280AC_CONFIG_FILES([man/de/Makefile])
281AC_OUTPUT
282
283if test "x$ac_buildapp" = "xyes" -o "x$ac_lv2pluginuis" = "xyes" ; then
284
285    echo
286    echo "Will use the following QT libs:" $Qt4_LIBS $Qt5_LIBS
287
288    echo
289    if test "x$ac_translations" = "xno" ; then
290        echo "Translation file generation disabled."
291        echo "Use ./configure --enable-translations=yes to enable."
292    else
293        echo "Translation file generation enabled."
294    fi
295echo
296else
297    echo
298    echo "Will not use any QT libs"
299
300    echo
301fi
302
303if test "x$alsalib_found" = "xno" -o "x$ac_alsa" = "xno" ; then
304    echo "Will build without ALSA backend."
305    echo
306fi
307echo
308