]> git.lyx.org Git - lyx.git/blob - config/qt.m4
cosmetics, incidently fixing bug 1458
[lyx.git] / config / qt.m4
1 dnl find a binary in the path
2 AC_DEFUN([QT_FIND_PATH],
3 [
4         AC_MSG_CHECKING([for $1])
5         AC_CACHE_VAL(qt_cv_path_$1,
6         [
7                 qt_cv_path_$1="NONE"
8                 if test -n "$$2"; then
9                         qt_cv_path_$1="$$2";
10                 else
11                         dirs="$3"
12                         qt_save_IFS=$IFS
13                         IFS=':'
14                         for dir in $PATH; do
15                                 dirs="$dirs $dir"
16                         done
17                         IFS=$qt_save_IFS
18
19                         for dir in $dirs; do
20                                 if test -x "$dir/$1"; then
21                                         if test -n "$5"; then
22                                                 evalstr="$dir/$1 $5 2>&1 "
23                                                 if eval $evalstr; then
24                                                         qt_cv_path_$1="$dir/$1"
25                                                         break
26                                                 fi
27                                         else
28                                                 qt_cv_path_$1="$dir/$1"
29                                                 break
30                                         fi
31                                 fi
32                         done
33                 fi
34         ])
35
36         if test -z "$qt_cv_path_$1" || test "$qt_cv_path_$1" = "NONE"; then
37                 AC_MSG_RESULT(not found)
38                 $4
39         else
40                 AC_MSG_RESULT($qt_cv_path_$1)
41                 $2=$qt_cv_path_$1
42         fi
43 ])
44
45 dnl Find the uic compiler on the path or in qt_cv_dir
46 AC_DEFUN([QT_FIND_UIC],
47 [
48         QT_FIND_PATH(uic, ac_uic, $qt_cv_dir/bin)
49         if test -z "$ac_uic" -a "$FATAL" = 1; then
50                 AC_MSG_ERROR([uic binary not found in \$PATH or $qt_cv_dir/bin !])
51         fi
52 ])
53
54 dnl Find the right moc in path/qt_cv_dir
55 AC_DEFUN([QT_FIND_MOC],
56 [
57         QT_FIND_PATH(moc2, ac_moc2, $qt_cv_dir/bin)
58         QT_FIND_PATH(moc, ac_moc1, $qt_cv_dir/bin)
59
60         if test -n "$ac_moc1" -a -n "$ac_moc2"; then
61                 dnl found both. Prefer Qt3's if it exists else moc2
62                 $ac_moc1 -v 2>&1 | grep "Qt 3" >/dev/null
63                 if test "$?" = 0; then
64                         ac_moc=$ac_moc1;
65                 else
66                         ac_moc=$ac_moc2;
67                 fi
68         else
69                 if test -n "$ac_moc1"; then
70                         ac_moc=$ac_moc1;
71                 else
72                         ac_moc=$ac_moc2;
73                 fi
74         fi
75
76         if test -z "$ac_moc"  -a "$FATAL" = 1; then
77                 AC_MSG_ERROR([moc binary not found in \$PATH or $qt_cv_dir/bin !])
78         fi
79 ])
80
81 dnl check a particular libname
82 AC_DEFUN([QT_TRY_LINK],
83 [
84         SAVE_LIBS="$LIBS"
85         LIBS="$LIBS $1"
86         AC_TRY_LINK([
87         #include <qglobal.h>
88         #include <qstring.h>
89                 ],
90         [
91         QString s("mangle_failure");
92         #if (QT_VERSION < 221)
93         break_me_(\\\);
94         #endif
95         ],
96         qt_cv_libname=$1,
97         )
98         LIBS="$SAVE_LIBS"
99 ])
100
101 dnl check we can do a compile
102 AC_DEFUN([QT_CHECK_COMPILE],
103 [
104         AC_MSG_CHECKING([for Qt library name])
105
106         AC_CACHE_VAL(qt_cv_libname,
107         [
108                 AC_LANG_CPLUSPLUS
109                 SAVE_CXXFLAGS=$CXXFLAGS
110                 CXXFLAGS="$CXXFLAGS $QT_INCLUDES $QT_LDFLAGS"
111
112                 for libname in -lqt-mt -lqt-mt3 -lqt3 -lqt2 -lqt;
113                 do
114                         QT_TRY_LINK($libname)
115                         if test -n "$qt_cv_libname"; then
116                                 break;
117                         fi
118                 done
119
120                 CXXFLAGS=$SAVE_CXXFLAGS
121         ])
122
123         if test -z "$qt_cv_libname"; then
124                 AC_MSG_RESULT([failed])
125                 if test "$FATAL" = 1 ; then
126                         AC_MSG_ERROR([Cannot compile a simple Qt executable. Check you have the right \$QTDIR !])
127                 fi
128         else
129                 AC_MSG_RESULT([$qt_cv_libname])
130         fi
131 ])
132
133 dnl get Qt version we're using
134 AC_DEFUN([QT_GET_VERSION],
135 [
136         AC_CACHE_CHECK([Qt version],lyx_cv_qtversion,
137         [
138                 AC_LANG_CPLUSPLUS
139                 SAVE_CPPFLAGS=$CPPFLAGS
140                 CPPFLAGS="$CPPFLAGS $QT_INCLUDES"
141
142                 cat > conftest.$ac_ext <<EOF
143 #line __oline__ "configure"
144 #include "confdefs.h"
145 #include <qglobal.h>
146 "%%%"QT_VERSION_STR"%%%"
147 EOF
148                 lyx_cv_qtversion=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
149                         grep '^"%%%"'  2>/dev/null | \
150                         sed -e 's/"%%%"//g' -e 's/"//g'`
151                 rm -f conftest.$ac_ext
152                 CPPFLAGS=$SAVE_CPPFLAGS
153         ])
154
155         QT_VERSION=$lyx_cv_qtversion
156         AC_SUBST(QT_VERSION)
157 ])
158
159 dnl Ascertain whether the Qt libraries are multi-threaded or not
160 AC_DEFUN([QT_CHECK_IS_MULTITHREADED],
161 [
162         AC_CACHE_CHECK([whether the Qt library is multi-threaded],
163                        qt_cv_is_multithreaded,
164         [
165                 AC_LANG_CPLUSPLUS
166                 SAVE_CXXFLAGS=$CXXFLAGS
167                 SAVE_LIBS="$LIBS"
168                 CXXFLAGS="$CXXFLAGS $QT_INCLUDES $QT_LDFLAGS"
169                 LIBS="$LIBS $QT_LIB"
170
171                 AC_TRY_LINK(
172                 [
173 #define QT_THREAD_SUPPORT
174 #include <qapplication.h>
175                 ],
176                 [
177         QApplication a(0,0);
178         a.unlock();
179                 ],
180                 qt_cv_is_multithreaded=yes,
181                 qt_cv_is_multithreaded=no
182                 )
183
184                 LIBS="$SAVE_LIBS"
185                 CXXFLAGS=$SAVE_CXXFLAGS
186         ])
187
188         if test x"$qt_cv_is_multithreaded" = xyes; then
189                 QT_CPPFLAGS="$QT_CPPFLAGS -DQT_THREAD_SUPPORT"
190         fi
191 ])
192
193 dnl start here
194 AC_DEFUN([QT_DO_IT_ALL],
195 [
196         dnl this variable is precious
197         AC_ARG_VAR(QTDIR, [the place where the Qt files are, e.g. /usr/lib/qt])
198
199         dnl Please leave this alone. I use this file in
200         dnl oprofile.
201         FATAL=0
202
203         AC_ARG_WITH(qt-dir, [  --with-qt-dir           where the root of Qt is installed ],
204                 [ qt_cv_dir=`eval echo "$withval"/` ])
205
206         AC_ARG_WITH(qt-includes, [  --with-qt-includes      where the Qt includes are. ],
207                 [ qt_cv_includes=`eval echo "$withval"` ])
208
209         AC_ARG_WITH(qt-libraries, [  --with-qt-libraries     where the Qt library is installed.],
210                 [  qt_cv_libraries=`eval echo "$withval"` ])
211
212         dnl pay attention to $QTDIR unless overridden
213         if test -z "$qt_cv_dir"; then
214                 qt_cv_dir=$QTDIR
215         fi
216
217         dnl derive inc/lib if needed
218         if test -n "$qt_cv_dir"; then
219                 if test -z "$qt_cv_includes"; then
220                         qt_cv_includes=$qt_cv_dir/include
221                 fi
222                 if test -z "$qt_cv_libraries"; then
223                         qt_cv_libraries=$qt_cv_dir/lib
224                 fi
225         fi
226
227         dnl flags for compilation
228         QT_INCLUDES=
229         QT_LDFLAGS=
230         if test -n "$qt_cv_includes"; then
231                 QT_INCLUDES="-I$qt_cv_includes"
232         fi
233         if test -n "$qt_cv_libraries"; then
234                 QT_LDFLAGS="-L$qt_cv_libraries"
235         fi
236         AC_SUBST(QT_INCLUDES)
237         AC_SUBST(QT_LDFLAGS)
238
239         dnl Preprocessor flags
240         case ${host} in
241         *mingw*) QT_CPPFLAGS="-DQT_DLL -DQT_CLEAN_NAMESPACE -DQT_GENUINE_STR";;
242               *) QT_CPPFLAGS="-DQT_CLEAN_NAMESPACE -DQT_GENUINE_STR";;
243         esac
244         AC_SUBST(QT_CPPFLAGS)
245
246         if test -z "$MOC"; then
247                 QT_FIND_MOC
248                 MOC=$ac_moc
249         fi
250         AC_SUBST(MOC)
251         if test -z "$UIC"; then
252                 QT_FIND_UIC
253                 UIC=$ac_uic
254         fi
255         AC_SUBST(UIC)
256
257         QT_CHECK_COMPILE
258
259         QT_LIB=$qt_cv_libname;
260         AC_SUBST(QT_LIB)
261
262         QT_CHECK_IS_MULTITHREADED
263
264         if test -n "$qt_cv_libname"; then
265                 QT_GET_VERSION
266         fi
267 ])