1 dnl Some useful functions for LyXs configure.in -*- sh -*-
2 dnl Author: Jean-Marc Lasgouttes (Jean-Marc.Lasgouttes@inria.fr)
3 dnl Lars Gullik Bjønnes (larsbj@lyx.org)
4 dnl Allan Rae (rae@lyx.org)
7 dnl Usage LYX_CHECK_VERSION Displays version of LyX being built and
8 dnl sets variables "lyx_devel_version" and "lyx_prerelease"
9 AC_DEFUN([LYX_CHECK_VERSION],[
10 echo "configuring LyX version $VERSION"
11 if echo "$VERSION" | grep 'cvs' >/dev/null ; then
13 AC_DEFINE(DEVEL_VERSION, 1, [Define if you are building a development version of LyX])
14 echo "WARNING: This is a development version. Expect bugs."
18 if echo "$VERSION" | grep 'pre' > /dev/null ; then
20 echo "WARNING: This is a prerelease. Be careful and backup your documents."
24 AC_SUBST(lyx_devel_version)])
27 dnl Define the option to set a LyX version on installed executables and directories
30 AC_DEFUN([LYX_VERSION_SUFFIX],[
31 AC_MSG_CHECKING([for install target ... ])
32 AC_ARG_WITH(version-suffix,
33 [ --with-version-suffix[=<version>] install lyx files as lyx<version>],
34 [if test "x$withval" = "xyes";
37 ac_configure_args=`echo $ac_configure_args | sed "s,--with-version-suffix,--with-version-suffix=$withval,"`
40 program_suffix=$withval
41 RPM_VERSION_SUFFIX="--with-version-suffix=$withval"],
43 AC_SUBST(RPM_VERSION_SUFFIX)
44 AC_MSG_RESULT([$lyxname])
48 dnl Usage: LYX_ERROR(message) Displays the warning "message" and sets the
49 dnl flag lyx_error to yes.
50 AC_DEFUN([LYX_ERROR],[
51 lyx_error_txt="$lyx_error_txt
57 dnl Usage: LYX_WARNING(message) Displays the warning "message" and sets the
58 dnl flag lyx_warning to yes.
59 AC_DEFUN([LYX_WARNING],[
60 lyx_warning_txt="$lyx_warning_txt
66 dnl Usage: LYX_LIB_ERROR(file,library) Displays an error message indication
67 dnl that 'file' cannot be found because 'lib' may be uncorrectly installed.
68 AC_DEFUN([LYX_LIB_ERROR],[
69 LYX_ERROR([Cannot find $1. Please check that the $2 library
70 is correctly installed on your system.])])
73 dnl Usage: LYX_CHECK_ERRORS Displays a warning message if a LYX_ERROR
74 dnl has occured previously.
75 AC_DEFUN([LYX_CHECK_ERRORS],[
76 if test x$lyx_error = xyes; then
78 **** The following problems have been detected by configure.
79 **** Please check the messages below before running 'make'.
80 **** (see the section 'Problems' in the INSTALL file)
86 if test x$lyx_warning = xyes; then
88 === The following minor problems have been detected by configure.
89 === Please check the messages below before running 'make'.
90 === (see the section 'Problems' in the INSTALL file)
95 Configuration of LyX was successful.
96 Type 'make' to compile the program,
97 and then 'make install' to install it.
102 dnl LYX_SEARCH_PROG(VARIABLE-NAME,PROGRAMS-LIST,ACTION-IF-FOUND)
104 define(LYX_SEARCH_PROG,[dnl
105 for ac_prog in $2 ; do
106 # Extract the first word of "$ac_prog", so it can be a program name with args.
107 set dummy $ac_prog ; ac_word=$[2]
108 if test -z "[$]$1"; then
109 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
110 for ac_dir in $PATH; do
111 test -z "$ac_dir" && ac_dir=.
112 if test -f [$ac_dir/$ac_word]; then
120 if test -n "[$]$1"; then
126 test -n "[$]$1" && break
131 AC_DEFUN([LYX_PROG_CXX_WORKS],
133 cat >conftest.C <<EOF
135 // we require the mutable keyword
138 // we require namespace support
146 $CXX -c $CXXFLAGS $CPPFLAGS conftest.C >&5 || CXX=
147 rm -f conftest.C conftest.o conftest.obj || true
151 AC_DEFUN([LYX_PROG_CXX],
152 [AC_MSG_CHECKING([for a good enough C++ compiler])
153 LYX_SEARCH_PROG(CXX, $CXX $CCC g++ gcc c++ CC cxx xlC cc++, [LYX_PROG_CXX_WORKS])
155 if test -z "$CXX" ; then
156 AC_MSG_ERROR([Unable to find a good enough C++ compiler])
162 ### We might want to get or shut warnings.
163 AC_ARG_ENABLE(warnings,
164 AC_HELP_STRING([--enable-warnings],[tell the compiler to display more warnings]),,
165 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $ac_cv_prog_gxx = yes ; then
170 if test x$enable_warnings = xyes ; then
171 lyx_flags="$lyx_flags warnings"
172 AC_DEFINE(WITH_WARNINGS, 1,
173 [Define this if you want to see the warning directives put here and
174 there by the developpers to get attention])
177 ### We might want to disable debug
179 AC_HELP_STRING([--enable-debug],[enable debug information]),,
180 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $ac_cv_prog_gxx = yes ; then
186 ### set up optimization
187 AC_ARG_ENABLE(optimization,
188 AC_HELP_STRING([--enable-optimization[=value]],[enable compiler optimisation]),,
189 enable_optimization=yes;)
190 case $enable_optimization in
193 *) lyx_opt=${enable_optimization};;
198 # set the debug flags correctly.
199 if test x$GXX = xyes; then
200 dnl Useful for global version info
201 gxx_version=`${CXX} -dumpversion`
202 CXX_VERSION="($gxx_version)"
204 if test "$ac_test_CXXFLAGS" = set; then
205 CXXFLAGS="$ac_save_CXXFLAGS"
208 2.95.1) CXXFLAGS="$lyx_opt -fpermissive -ftemplate-depth-30";;
209 2.95.*) CXXFLAGS="$lyx_opt -Wno-non-template-friend -ftemplate-depth-30";;
210 2.96*) CXXFLAGS="$lyx_opt -fno-exceptions -ftemplate-depth-30 -Wno-non-template-friend";;
211 3.0*) CXXFLAGS="$lyx_opt";;
212 3.1*) CXXFLAGS="$lyx_opt -finline-limit=500 -fno-exceptions";;
213 3.2*) CXXFLAGS="$lyx_opt -fno-exceptions";;
214 3.3*) CXXFLAGS="$lyx_opt -fno-exceptions";;
216 CXXFLAGS="$lyx_opt -fno-exceptions"
218 *) CXXFLAGS="$lyx_opt";;
220 if test x$enable_debug = xyes ; then
222 3.4*|3.5*) CXXFLAGS="-g $CXXFLAGS"
223 AC_DEFINE(_GLIBCXX_DEBUG, 1, [libstdc++ debug mode])
224 AC_DEFINE(_GLIBCXX_DEBUG_PEDANTIC, 1, [libstdc++ pedantic debug mode])
226 *) CXXFLAGS="-g $CXXFLAGS";;
230 if test x$enable_warnings = xyes ; then
232 2.95.*) CXXFLAGS="$CXXFLAGS -W -Wall";;
233 2.96*) CXXFLAGS="$CXXFLAGS -W -Wall";;
234 3.1*) CXXFLAGS="$CXXFLAGS -W -Wall";;
235 3.2*) CXXFLAGS="$CXXFLAGS -W -Wall";;
236 3.3*) CXXFLAGS="$CXXFLAGS -W -Wall";;
237 *) CXXFLAGS="$CXXFLAGS -Wextra -Wall";;
241 AM_CONDITIONAL(LYX_BUILD_PCH, test "$lyx_pch_comp" = yes)
245 dnl NOT USED CURRENTLY*************************************
246 dnl Usage: LYX_CXX_RTTI : checks whether the C++ compiler
248 AC_DEFUN([LYX_CXX_RTTI],[
249 ### Check whether the compiler supports runtime type information
250 AC_CACHE_CHECK(whether the C++ compiler supports RTTI,lyx_cv_rtti,
254 virtual int tag() { return 0; }
256 class derived1 : public rtti {
258 int tag() { return 1; }
260 class derived2 : public rtti {
262 int tag() { return 2; }
265 derived1 * foo1 = new derived1();
266 derived2 * foo2 = new derived2();
268 derived1 * bar1 = dynamic_cast<derived1 *>(bar);
272 bar1 = dynamic_cast<derived1 *>(bar);
277 ],lyx_cv_rtti=yes,lyx_cv_rtti=no,lyx_cv_rtti=no)
279 if test x$lyx_cv_rtti = xyes ; then
280 AC_DEFINE(HAVE_RTTI, 1,
281 [Define to 1 if your compiler supports runtime type information])
285 dnl Usage: LYX_CXX_EXPLICIT : checks whether the C++ compiler
286 dnl understands the "explicit" directive.
287 AC_DEFUN([LYX_CXX_EXPLICIT],[
288 ### Check whether the compiler understands the keyword `explicit'
289 AC_CACHE_CHECK(whether the C++ compiler understands explicit,lyx_cv_explicit,
294 };],,lyx_cv_explicit=yes,lyx_cv_explicit=no)
296 if test $lyx_cv_explicit = no ; then
297 AC_DEFINE(explicit,[ ],
298 [Define to nothing if your compiler does not understand the
299 'explicit' directive])
303 dnl NOT USED CURRENTLY*************************************
304 dnl Usage: LYX_CXX_STL_STACK : checks whether the C++ compiler
305 dnl has a working stl stack template
306 AC_DEFUN([LYX_CXX_STL_STACK],[
307 AC_CACHE_CHECK(for broken STL stack template,lyx_cv_broken_stack,
314 ],lyx_cv_broken_stack=no,lyx_cv_broken_stack=yes)
316 if test $lyx_cv_broken_stack = yes ; then
317 AC_DEFINE(BROKEN_STL_STACK, 1,
318 [Define if you have the STL from libg++ 2.7.x, where stack<> is not defined
323 dnl Usage: LYX_STD_COUNT : checks wherer the C++ library have a conforming
324 dnl count template, if not the old HP version is assumed.
325 AC_DEFUN([LYX_STD_COUNT],[
326 AC_CACHE_CHECK(for conforming std::count,lyx_cv_std_count,
330 int countChar(char * b, char * e, char const c)
332 return count(b, e, c);
336 int i = countChar(a, a + 5, 'l');
337 ],lyx_cv_std_count=yes,lyx_cv_std_count=no)
339 if test $lyx_cv_std_count = yes ; then
340 AC_DEFINE(HAVE_STD_COUNT, 1,
341 [Define if you have a conforming std::count template, otherwise HP version of count template is assumed.])
345 dnl Usage: LYX_CXX_STL_MODERN_STREAMS : checks whether the C++ compiler
346 dnl supports modern STL streams
347 AC_DEFUN([LYX_CXX_STL_MODERN_STREAMS],[
348 AC_CACHE_CHECK(for modern STL streams,lyx_cv_modern_streams,
352 std::streambuf * test = std::cerr.rdbuf();
354 ],lyx_cv_modern_streams=yes,lyx_cv_modern_streams=no)
356 if test $lyx_cv_modern_streams = yes ; then
357 AC_DEFINE(MODERN_STL_STREAMS, 1,
358 [Define if you have modern standard-compliant STL streams])
362 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
364 AC_DEFUN([LYX_USE_INCLUDED_BOOST],[
365 AC_ARG_WITH(included-boost,
366 [ --with-included-boost use the boost lib supplied with LyX],
367 [lyx_cv_with_included_boost=$withval
368 AC_MSG_RESULT([$with_included_boost])],
369 [lyx_cv_with_included_boost=yes])
370 AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
374 dnl NOT USED CURRENTLY*************************************
376 AC_DEFUN([LYX_CXX_PARTIAL], [
377 AC_REQUIRE([AC_PROG_CXX])
378 AC_CACHE_CHECK([if C++ compiler supports partial specialization],
379 [lyx_cv_cxx_partial_specialization],
382 template<class T, class K>
386 template<class T> class k<void,T> { };
391 lyx_cv_cxx_partial_specialization=yes
393 lyx_cv_cxx_partial_specialization=no
396 if test x$lyx_cv_cxx_partial_specialization = xyes ; then
397 AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1,
398 [Defined if your compiler supports partial specialization.])
403 dnl Usage: LYX_CXX_CHEADERS : checks whether the C++ compiler
404 dnl provides wrappers for C headers and use our alternate version otherwise.
405 AC_DEFUN([LYX_CXX_CHEADERS],[
406 AC_CACHE_CHECK(for C headers wrappers,lyx_cv_cxx_cheaders,
416 #include <ctime>],[lyx_cv_cxx_cheaders=yes],[lyx_cv_cxx_cheaders=no])])
417 if test $lyx_cv_cxx_cheaders = no ; then
418 LYX_ADD_INC_DIR(lyx_cppflags,\$(top_srcdir)/src/cheaders)
422 dnl Usage: LYX_CXX_GLOBAL_CSTD: checks whether C library functions
423 dnl are already in the global namespace
424 AC_DEFUN([LYX_CXX_GLOBAL_CSTD],[
425 AC_CACHE_CHECK(whether C library functions are already in the global namespace,
426 lyx_cv_cxx_global_cstd,
432 ],[lyx_cv_cxx_global_cstd=no],[lyx_cv_cxx_global_cstd=yes])])
433 if test x$lyx_cv_cxx_global_cstd = xyes; then
434 AC_DEFINE(CXX_GLOBAL_CSTD,1,
435 [Define if your C++ compiler puts C library functions in the global namespace])
440 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
441 dnl [default-yes-value])
442 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
443 dnl resulting directory name in 'dir-var-name'.
444 AC_DEFUN([LYX_WITH_DIR],[
445 AC_ARG_WITH($1,[ --with-$1 specify $2])
446 AC_MSG_CHECKING([for $2])
447 if test -z "$with_$3"; then
448 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
450 test "x$with_$3" = xyes && with_$3=$5
453 AC_MSG_RESULT($lyx_cv_$3)])
456 dnl Usage: LYX_LOOP_DIR(value,action)
457 dnl Executes action for values of variable `dir' in `values'. `values' can
458 dnl use ":" as a separator.
459 AC_DEFUN([LYX_LOOP_DIR],[
460 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
461 for dir in `eval "echo $1"`; do
462 if test ! "$dir" = NONE; then
463 test ! -d "$dir" && AC_MSG_ERROR([\"$dir\" is not a directory])
471 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
473 AC_DEFUN([LYX_ADD_LIB_DIR],[
475 if test "`(uname) 2>/dev/null`" = SunOS &&
476 uname -r | grep '^5' >/dev/null; then
477 if test $ac_cv_prog_gxx = yes ; then
478 $1="${$1} -Wl[,]-R$2"
485 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
487 AC_DEFUN([LYX_ADD_INC_DIR],[$1="${$1} -I$2 "])
489 ### Check for a headers existence and location iff it exists
490 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
491 ## It almost works. I've tried a few variations but they give errors
492 ## of one sort or other: bad substitution or file not found etc. The
493 ## actual header _is_ found though and the cache variable is set however
494 ## the reported setting (on screen) is equal to $ac_safe for some unknown
496 ## Additionally, autoheader can't figure out what to use as the name in
497 ## the config.h.in file so we need to write our own entries there -- one for
498 ## each header in the form PATH_HEADER_NAME_H
500 AC_DEFUN([LYX_PATH_HEADER],
501 [ AC_CHECK_HEADER($1,[
502 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
503 ### the only remaining problem is getting the second parameter to this
504 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
505 ### of $ac_safe being printed.
506 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
507 [ cat > conftest.$ac_ext <<EOF
508 #line __oline__ "configure"
509 #include "confdefs.h"
513 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
514 grep $1 2>/dev/null | \
515 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
516 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
518 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
520 ### end of LYX_PATH_HEADER
522 ### Check which frontends we want to use. The default is XForms only
524 AC_DEFUN([LYX_USE_FRONTENDS],
525 [AC_MSG_CHECKING([what frontend should be used for the GUI])
526 AC_ARG_WITH(frontend,
527 [ --with-frontend=THIS Use THIS frontend as main GUI:
528 Possible values: xforms, qt, gtk(EXPERIMENTAL)],
529 [FRONTENDS="$withval"], [FRONTENDS="xforms"])
530 AC_MSG_RESULT($FRONTENDS)
532 AC_SUBST(FRONTENDS_SUBDIRS)
533 AC_SUBST(FRONTENDS_PROGS)
538 ## ------------------------------------------------------------------------
539 ## Find a file (or one of more files in a list of dirs)
540 ## ------------------------------------------------------------------------
542 AC_DEFUN([AC_FIND_FILE],
549 if test -r "$i/$j"; then
557 dnl just a wrapper to clean up configure.in
558 AC_DEFUN([LYX_PROG_LIBTOOL],
560 AC_REQUIRE([AC_ENABLE_SHARED])
561 AC_REQUIRE([AC_ENABLE_STATIC])
562 dnl libtool is only for C, so I must force him
563 dnl to find the correct flags for C++
565 ac_save_cflags="$CFLAGS"
568 AM_PROG_LIBTOOL dnl for libraries
570 CFLAGS="$ac_save_cflags"