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,[
11 echo "configuring LyX version $VERSION"
12 if echo "$VERSION" | grep 'cvs' >/dev/null ; then
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."
25 AC_SUBST(lyx_devel_version)
26 if test $lyx_devel_version = yes ; then
27 AC_DEFINE(DEVEL_VERSION, 1, Define if you are building a development version of LyX)
31 dnl Define the option to set a LyX version on installed executables and directories
34 AC_DEFUN(LYX_VERSION_SUFFIX,[
35 AC_MSG_CHECKING([for install target ... ])
36 AC_ARG_WITH(version-suffix,
37 [ --with-version-suffix[=<version>] install lyx files as lyx<version>],
38 [if test "x$withval" = "xyes";
41 ac_configure_args=`echo $ac_configure_args | sed "s,--with-version-suffix,--with-version-suffix=$withval,"`
44 program_suffix=$withval],
46 AC_MSG_RESULT([$lyxname])
50 dnl Usage: LYX_ERROR(message) Displays the warning "message" and sets the
51 dnl flag lyx_error to yes.
53 lyx_error_txt="$lyx_error_txt
59 dnl Usage: LYX_WARNING(message) Displays the warning "message" and sets the
60 dnl flag lyx_warning to yes.
61 AC_DEFUN(LYX_WARNING,[
62 lyx_warning_txt="$lyx_warning_txt
68 dnl Usage: LYX_LIB_ERROR(file,library) Displays an error message indication
69 dnl that 'file' cannot be found because 'lib' may be uncorrectly installed.
70 AC_DEFUN(LYX_LIB_ERROR,[
71 LYX_ERROR([Cannot find $1. Please check that the $2 library
72 is correctly installed on your system.])])
75 dnl Usage: LYX_CHECK_ERRORS Displays a warning message if a LYX_ERROR
76 dnl has occured previously.
77 AC_DEFUN(LYX_CHECK_ERRORS,[
78 if test x$lyx_error = xyes; then
80 **** The following problems have been detected by configure.
81 **** Please check the messages below before running 'make'.
82 **** (see the section 'Problems' in the INSTALL file)
88 if test x$lyx_warning = xyes; then
90 === The following minor problems have been detected by configure.
91 === Please check the messages below before running 'make'.
92 === (see the section 'Problems' in the INSTALL file)
97 Configuration of LyX was successful.
98 Type 'make' to compile the program,
99 and then 'make install' to install it.
104 dnl LYX_SEARCH_PROG(VARIABLE-NAME,PROGRAMS-LIST,ACTION-IF-FOUND)
106 define(LYX_SEARCH_PROG,[dnl
107 for ac_prog in $2 ; do
108 # Extract the first word of "$ac_prog", so it can be a program name with args.
109 set dummy $ac_prog ; ac_word=$[2]
110 if test -z "[$]$1"; then
111 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
112 for ac_dir in $PATH; do
113 test -z "$ac_dir" && ac_dir=.
114 if test -f [$ac_dir/$ac_word]; then
122 if test -n "[$]$1"; then
128 test -n "[$]$1" && break
133 AC_DEFUN([LYX_PROG_CXX_WORKS],
135 cat >conftest.C <<EOF
137 // we require the mutable keyword
140 // we require namespace support
148 $CXX -c $CXXFLAGS $CPPFLAGS conftest.C >&5 || CXX=
149 rm -f conftest.C conftest.o conftest.obj || true
153 AC_DEFUN(LYX_PROG_CXX,
154 [AC_MSG_CHECKING([for a good enough C++ compiler])
155 LYX_SEARCH_PROG(CXX, $CXX $CCC g++ gcc c++ CC cxx xlC cc++, [LYX_PROG_CXX_WORKS])
157 if test -z "$CXX" ; then
158 AC_MSG_ERROR([Unable to find a good enough C++ compiler])
164 ### We might want to get or shut warnings.
165 AC_ARG_ENABLE(warnings,
166 AC_HELP_STRING([--enable-warnings],[tell the compiler to display more warnings]),,
167 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $ac_cv_prog_gxx = yes ; then
172 if test x$enable_warnings = xyes ; then
173 lyx_flags="$lyx_flags warnings"
174 AC_DEFINE(WITH_WARNINGS, 1,
175 [Define this if you want to see the warning directives put here and
176 there by the developpers to get attention])
179 ### We might want to disable debug
181 AC_HELP_STRING([--enable-debug],[enable debug information]),,
182 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $ac_cv_prog_gxx = yes ; then
188 ### set up optimization
189 AC_ARG_ENABLE(optimization,
190 AC_HELP_STRING([--enable-optimization[=value]],[enable compiler optimisation]),,
191 enable_optimization=yes;)
192 case $enable_optimization in
195 *) 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";;
215 3.4*) CXXFLAGS="$lyx_opt -fno-exceptions";;
216 *) CXXFLAGS="$lyx_opt";;
218 if test x$enable_debug = xyes ; then
220 3.4*) CXXFLAGS="-g -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC $CXXFLAGS";;
221 *) CXXFLAGS="-g $CXXFLAGS";;
225 if test x$enable_warnings = xyes ; then
227 2.95.*) CXXFLAGS="$CXXFLAGS -W -Wall";;
228 2.96*) CXXFLAGS="$CXXFLAGS -W -Wall";;
229 3.1*) CXXFLAGS="$CXXFLAGS -W -Wall";;
230 *) CXXFLAGS="$CXXFLAGS -W -Wall";;
236 dnl NOT USED CURRENTLY*************************************
237 dnl Usage: LYX_CXX_RTTI : checks whether the C++ compiler
239 AC_DEFUN(LYX_CXX_RTTI,[
240 ### Check whether the compiler supports runtime type information
241 AC_CACHE_CHECK(whether the C++ compiler supports RTTI,lyx_cv_rtti,
245 virtual int tag() { return 0; }
247 class derived1 : public rtti {
249 int tag() { return 1; }
251 class derived2 : public rtti {
253 int tag() { return 2; }
256 derived1 * foo1 = new derived1();
257 derived2 * foo2 = new derived2();
259 derived1 * bar1 = dynamic_cast<derived1 *>(bar);
263 bar1 = dynamic_cast<derived1 *>(bar);
268 ],lyx_cv_rtti=yes,lyx_cv_rtti=no,lyx_cv_rtti=no)
270 if test x$lyx_cv_rtti = xyes ; then
271 AC_DEFINE(HAVE_RTTI, 1,
272 [Define to 1 if your compiler supports runtime type information])
276 dnl Usage: LYX_CXX_EXPLICIT : checks whether the C++ compiler
277 dnl understands the "explicit" directive.
278 AC_DEFUN(LYX_CXX_EXPLICIT,[
279 ### Check whether the compiler understands the keyword `explicit'
280 AC_CACHE_CHECK(whether the C++ compiler understands explicit,lyx_cv_explicit,
285 };],,lyx_cv_explicit=yes,lyx_cv_explicit=no)
287 if test $lyx_cv_explicit = no ; then
288 AC_DEFINE(explicit,[ ],
289 [Define to nothing if your compiler does not understand the
290 'explicit' directive])
294 dnl NOT USED CURRENTLY*************************************
295 dnl Usage: LYX_CXX_STL_STACK : checks whether the C++ compiler
296 dnl has a working stl stack template
297 AC_DEFUN(LYX_CXX_STL_STACK,[
298 AC_CACHE_CHECK(for broken STL stack template,lyx_cv_broken_stack,
305 ],lyx_cv_broken_stack=no,lyx_cv_broken_stack=yes)
307 if test $lyx_cv_broken_stack = yes ; then
308 AC_DEFINE(BROKEN_STL_STACK, 1,
309 [Define if you have the STL from libg++ 2.7.x, where stack<> is not defined
314 dnl Usage: LYX_STD_COUNT : checks wherer the C++ library have a conforming
315 dnl count template, if not the old HP version is assumed.
316 AC_DEFUN(LYX_STD_COUNT,[
317 AC_CACHE_CHECK(for conforming std::count,lyx_cv_std_count,
321 int countChar(char * b, char * e, char const c)
323 return count(b, e, c);
327 int i = countChar(a, a + 5, 'l');
328 ],lyx_cv_std_count=yes,lyx_cv_std_count=no)
330 if test $lyx_cv_std_count = yes ; then
331 AC_DEFINE(HAVE_STD_COUNT, 1,
332 [Define if you have a conforming std::count template, otherwise HP version of count template is assumed.])
336 dnl Usage: LYX_CXX_STL_MODERN_STREAMS : checks whether the C++ compiler
337 dnl supports modern STL streams
338 AC_DEFUN(LYX_CXX_STL_MODERN_STREAMS,[
339 AC_CACHE_CHECK(for modern STL streams,lyx_cv_modern_streams,
343 std::streambuf * test = std::cerr.rdbuf();
345 ],lyx_cv_modern_streams=yes,lyx_cv_modern_streams=no)
347 if test $lyx_cv_modern_streams = yes ; then
348 AC_DEFINE(MODERN_STL_STREAMS, 1,
349 [Define if you have modern standard-compliant STL streams])
353 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
355 AC_DEFUN(LYX_USE_INCLUDED_BOOST,[
356 AC_ARG_WITH(included-boost,
357 [ --with-included-boost use the boost lib supplied with LyX],
358 [lyx_cv_with_included_boost=$withval
359 AC_MSG_RESULT([$with_included_boost])],
360 [lyx_cv_with_included_boost=yes])
361 AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
365 dnl NOT USED CURRENTLY*************************************
367 AC_DEFUN(LYX_CXX_PARTIAL, [
368 AC_REQUIRE([AC_PROG_CXX])
369 AC_CACHE_CHECK([if C++ compiler supports partial specialization],
370 [lyx_cv_cxx_partial_specialization],
373 template<class T, class K>
377 template<class T> class k<void,T> { };
382 lyx_cv_cxx_partial_specialization=yes
384 lyx_cv_cxx_partial_specialization=no
387 if test x$lyx_cv_cxx_partial_specialization = xyes ; then
388 AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1,
389 [Defined if your compiler supports partial specialization.])
394 dnl Usage: LYX_CXX_CHEADERS : checks whether the C++ compiler
395 dnl provides wrappers for C headers and use our alternate version otherwise.
396 AC_DEFUN(LYX_CXX_CHEADERS,[
397 AC_CACHE_CHECK(for C headers wrappers,lyx_cv_cxx_cheaders,
407 #include <ctime>],[lyx_cv_cxx_cheaders=yes],[lyx_cv_cxx_cheaders=no])])
408 if test $lyx_cv_cxx_cheaders = no ; then
409 LYX_ADD_INC_DIR(lyx_cppflags,\$(top_srcdir)/src/cheaders)
413 dnl Usage: LYX_CXX_GLOBAL_CSTD: checks whether C library functions
414 dnl are already in the global namespace
415 AC_DEFUN(LYX_CXX_GLOBAL_CSTD,[
416 AC_CACHE_CHECK(whether C library functions are already in the global namespace,
417 lyx_cv_cxx_global_cstd,
423 ],[lyx_cv_cxx_global_cstd=no],[lyx_cv_cxx_global_cstd=yes])])
424 if test x$lyx_cv_cxx_global_cstd = xyes; then
425 AC_DEFINE(CXX_GLOBAL_CSTD,1,
426 [Define if your C++ compiler puts C library functions in the global namespace])
431 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
432 dnl [default-yes-value])
433 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
434 dnl resulting directory name in 'dir-var-name'.
435 AC_DEFUN(LYX_WITH_DIR,[
436 AC_ARG_WITH($1,[ --with-$1 specify $2])
437 AC_MSG_CHECKING([for $2])
438 if test -z "$with_$3"; then
439 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
441 test "x$with_$3" = xyes && with_$3=$5
444 AC_MSG_RESULT($lyx_cv_$3)])
447 dnl Usage: LYX_LOOP_DIR(value,action)
448 dnl Executes action for values of variable `dir' in `values'. `values' can
449 dnl use ":" as a separator.
450 AC_DEFUN(LYX_LOOP_DIR,[
451 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
452 for dir in `eval "echo $1"`; do
453 if test ! "$dir" = NONE; then
454 test ! -d "$dir" && AC_MSG_ERROR([\"$dir\" is not a directory])
462 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
464 AC_DEFUN(LYX_ADD_LIB_DIR,[
466 if test "`(uname) 2>/dev/null`" = SunOS &&
467 uname -r | grep '^5' >/dev/null; then
468 if test $ac_cv_prog_gxx = yes ; then
469 $1="${$1} -Wl[,]-R$2"
476 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
478 AC_DEFUN(LYX_ADD_INC_DIR,[$1="${$1} -I$2 "])
480 ### Check for a headers existence and location iff it exists
481 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
482 ## It almost works. I've tried a few variations but they give errors
483 ## of one sort or other: bad substitution or file not found etc. The
484 ## actual header _is_ found though and the cache variable is set however
485 ## the reported setting (on screen) is equal to $ac_safe for some unknown
487 ## Additionally, autoheader can't figure out what to use as the name in
488 ## the config.h.in file so we need to write our own entries there -- one for
489 ## each header in the form PATH_HEADER_NAME_H
491 AC_DEFUN(LYX_PATH_HEADER,
492 [ AC_CHECK_HEADER($1,[
493 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
494 ### the only remaining problem is getting the second parameter to this
495 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
496 ### of $ac_safe being printed.
497 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
498 [ cat > conftest.$ac_ext <<EOF
499 #line __oline__ "configure"
500 #include "confdefs.h"
504 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
505 grep $1 2>/dev/null | \
506 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
507 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
509 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
511 ### end of LYX_PATH_HEADER
513 ### Check which frontends we want to use. The default is XForms only
515 AC_DEFUN(LYX_USE_FRONTENDS,
516 [AC_MSG_CHECKING([what frontend should be used for the GUI])
517 AC_ARG_WITH(frontend,
518 [ --with-frontend=THIS Use THIS frontend as main GUI:
519 Possible values: xforms, qt],
520 [FRONTENDS="$withval"], [FRONTENDS="xforms"])
521 AC_MSG_RESULT($FRONTENDS)
523 AC_SUBST(FRONTENDS_SUBDIRS)
524 AC_SUBST(FRONTENDS_PROGS)
529 ## ------------------------------------------------------------------------
530 ## Find a file (or one of more files in a list of dirs)
531 ## ------------------------------------------------------------------------
533 AC_DEFUN(AC_FIND_FILE,
540 if test -r "$i/$j"; then
548 dnl just a wrapper to clean up configure.in
549 AC_DEFUN(LYX_PROG_LIBTOOL,
551 AC_REQUIRE([AC_ENABLE_SHARED])
552 AC_REQUIRE([AC_ENABLE_STATIC])
553 dnl libtool is only for C, so I must force him
554 dnl to find the correct flags for C++
556 ac_save_cflags="$CFLAGS"
559 AM_PROG_LIBTOOL dnl for libraries
561 CFLAGS="$ac_save_cflags"