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 $CXXFLAGS"
221 AC_DEFINE(_GLIBCXX_DEBUG, 1, [libstdc++ debug mode])
222 AC_DEFINE(_GLIBCXX_DEBUG_PEDANTIC, 1, [libstdc++ pedantic debug mode])
224 *) CXXFLAGS="-g $CXXFLAGS";;
228 if test x$enable_warnings = xyes ; then
230 2.95.*) CXXFLAGS="$CXXFLAGS -W -Wall";;
231 2.96*) CXXFLAGS="$CXXFLAGS -W -Wall";;
232 3.1*) CXXFLAGS="$CXXFLAGS -W -Wall";;
233 3.4*) CXXFLAGS="$CXXFLAGS -Wextra -Wall";;
234 *) CXXFLAGS="$CXXFLAGS -W -Wall";;
240 dnl NOT USED CURRENTLY*************************************
241 dnl Usage: LYX_CXX_RTTI : checks whether the C++ compiler
243 AC_DEFUN(LYX_CXX_RTTI,[
244 ### Check whether the compiler supports runtime type information
245 AC_CACHE_CHECK(whether the C++ compiler supports RTTI,lyx_cv_rtti,
249 virtual int tag() { return 0; }
251 class derived1 : public rtti {
253 int tag() { return 1; }
255 class derived2 : public rtti {
257 int tag() { return 2; }
260 derived1 * foo1 = new derived1();
261 derived2 * foo2 = new derived2();
263 derived1 * bar1 = dynamic_cast<derived1 *>(bar);
267 bar1 = dynamic_cast<derived1 *>(bar);
272 ],lyx_cv_rtti=yes,lyx_cv_rtti=no,lyx_cv_rtti=no)
274 if test x$lyx_cv_rtti = xyes ; then
275 AC_DEFINE(HAVE_RTTI, 1,
276 [Define to 1 if your compiler supports runtime type information])
280 dnl Usage: LYX_CXX_EXPLICIT : checks whether the C++ compiler
281 dnl understands the "explicit" directive.
282 AC_DEFUN(LYX_CXX_EXPLICIT,[
283 ### Check whether the compiler understands the keyword `explicit'
284 AC_CACHE_CHECK(whether the C++ compiler understands explicit,lyx_cv_explicit,
289 };],,lyx_cv_explicit=yes,lyx_cv_explicit=no)
291 if test $lyx_cv_explicit = no ; then
292 AC_DEFINE(explicit,[ ],
293 [Define to nothing if your compiler does not understand the
294 'explicit' directive])
298 dnl NOT USED CURRENTLY*************************************
299 dnl Usage: LYX_CXX_STL_STACK : checks whether the C++ compiler
300 dnl has a working stl stack template
301 AC_DEFUN(LYX_CXX_STL_STACK,[
302 AC_CACHE_CHECK(for broken STL stack template,lyx_cv_broken_stack,
309 ],lyx_cv_broken_stack=no,lyx_cv_broken_stack=yes)
311 if test $lyx_cv_broken_stack = yes ; then
312 AC_DEFINE(BROKEN_STL_STACK, 1,
313 [Define if you have the STL from libg++ 2.7.x, where stack<> is not defined
318 dnl Usage: LYX_STD_COUNT : checks wherer the C++ library have a conforming
319 dnl count template, if not the old HP version is assumed.
320 AC_DEFUN(LYX_STD_COUNT,[
321 AC_CACHE_CHECK(for conforming std::count,lyx_cv_std_count,
325 int countChar(char * b, char * e, char const c)
327 return count(b, e, c);
331 int i = countChar(a, a + 5, 'l');
332 ],lyx_cv_std_count=yes,lyx_cv_std_count=no)
334 if test $lyx_cv_std_count = yes ; then
335 AC_DEFINE(HAVE_STD_COUNT, 1,
336 [Define if you have a conforming std::count template, otherwise HP version of count template is assumed.])
340 dnl Usage: LYX_CXX_STL_MODERN_STREAMS : checks whether the C++ compiler
341 dnl supports modern STL streams
342 AC_DEFUN(LYX_CXX_STL_MODERN_STREAMS,[
343 AC_CACHE_CHECK(for modern STL streams,lyx_cv_modern_streams,
347 std::streambuf * test = std::cerr.rdbuf();
349 ],lyx_cv_modern_streams=yes,lyx_cv_modern_streams=no)
351 if test $lyx_cv_modern_streams = yes ; then
352 AC_DEFINE(MODERN_STL_STREAMS, 1,
353 [Define if you have modern standard-compliant STL streams])
357 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
359 AC_DEFUN(LYX_USE_INCLUDED_BOOST,[
360 AC_ARG_WITH(included-boost,
361 [ --with-included-boost use the boost lib supplied with LyX],
362 [lyx_cv_with_included_boost=$withval
363 AC_MSG_RESULT([$with_included_boost])],
364 [lyx_cv_with_included_boost=yes])
365 AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
369 dnl NOT USED CURRENTLY*************************************
371 AC_DEFUN(LYX_CXX_PARTIAL, [
372 AC_REQUIRE([AC_PROG_CXX])
373 AC_CACHE_CHECK([if C++ compiler supports partial specialization],
374 [lyx_cv_cxx_partial_specialization],
377 template<class T, class K>
381 template<class T> class k<void,T> { };
386 lyx_cv_cxx_partial_specialization=yes
388 lyx_cv_cxx_partial_specialization=no
391 if test x$lyx_cv_cxx_partial_specialization = xyes ; then
392 AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1,
393 [Defined if your compiler supports partial specialization.])
398 dnl Usage: LYX_CXX_CHEADERS : checks whether the C++ compiler
399 dnl provides wrappers for C headers and use our alternate version otherwise.
400 AC_DEFUN(LYX_CXX_CHEADERS,[
401 AC_CACHE_CHECK(for C headers wrappers,lyx_cv_cxx_cheaders,
411 #include <ctime>],[lyx_cv_cxx_cheaders=yes],[lyx_cv_cxx_cheaders=no])])
412 if test $lyx_cv_cxx_cheaders = no ; then
413 LYX_ADD_INC_DIR(lyx_cppflags,\$(top_srcdir)/src/cheaders)
417 dnl Usage: LYX_CXX_GLOBAL_CSTD: checks whether C library functions
418 dnl are already in the global namespace
419 AC_DEFUN(LYX_CXX_GLOBAL_CSTD,[
420 AC_CACHE_CHECK(whether C library functions are already in the global namespace,
421 lyx_cv_cxx_global_cstd,
427 ],[lyx_cv_cxx_global_cstd=no],[lyx_cv_cxx_global_cstd=yes])])
428 if test x$lyx_cv_cxx_global_cstd = xyes; then
429 AC_DEFINE(CXX_GLOBAL_CSTD,1,
430 [Define if your C++ compiler puts C library functions in the global namespace])
435 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
436 dnl [default-yes-value])
437 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
438 dnl resulting directory name in 'dir-var-name'.
439 AC_DEFUN(LYX_WITH_DIR,[
440 AC_ARG_WITH($1,[ --with-$1 specify $2])
441 AC_MSG_CHECKING([for $2])
442 if test -z "$with_$3"; then
443 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
445 test "x$with_$3" = xyes && with_$3=$5
448 AC_MSG_RESULT($lyx_cv_$3)])
451 dnl Usage: LYX_LOOP_DIR(value,action)
452 dnl Executes action for values of variable `dir' in `values'. `values' can
453 dnl use ":" as a separator.
454 AC_DEFUN(LYX_LOOP_DIR,[
455 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
456 for dir in `eval "echo $1"`; do
457 if test ! "$dir" = NONE; then
458 test ! -d "$dir" && AC_MSG_ERROR([\"$dir\" is not a directory])
466 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
468 AC_DEFUN(LYX_ADD_LIB_DIR,[
470 if test "`(uname) 2>/dev/null`" = SunOS &&
471 uname -r | grep '^5' >/dev/null; then
472 if test $ac_cv_prog_gxx = yes ; then
473 $1="${$1} -Wl[,]-R$2"
480 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
482 AC_DEFUN(LYX_ADD_INC_DIR,[$1="${$1} -I$2 "])
484 ### Check for a headers existence and location iff it exists
485 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
486 ## It almost works. I've tried a few variations but they give errors
487 ## of one sort or other: bad substitution or file not found etc. The
488 ## actual header _is_ found though and the cache variable is set however
489 ## the reported setting (on screen) is equal to $ac_safe for some unknown
491 ## Additionally, autoheader can't figure out what to use as the name in
492 ## the config.h.in file so we need to write our own entries there -- one for
493 ## each header in the form PATH_HEADER_NAME_H
495 AC_DEFUN(LYX_PATH_HEADER,
496 [ AC_CHECK_HEADER($1,[
497 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
498 ### the only remaining problem is getting the second parameter to this
499 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
500 ### of $ac_safe being printed.
501 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
502 [ cat > conftest.$ac_ext <<EOF
503 #line __oline__ "configure"
504 #include "confdefs.h"
508 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
509 grep $1 2>/dev/null | \
510 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
511 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
513 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
515 ### end of LYX_PATH_HEADER
517 ### Check which frontends we want to use. The default is XForms only
519 AC_DEFUN(LYX_USE_FRONTENDS,
520 [AC_MSG_CHECKING([what frontend should be used for the GUI])
521 AC_ARG_WITH(frontend,
522 [ --with-frontend=THIS Use THIS frontend as main GUI:
523 Possible values: xforms, qt],
524 [FRONTENDS="$withval"], [FRONTENDS="xforms"])
525 AC_MSG_RESULT($FRONTENDS)
527 AC_SUBST(FRONTENDS_SUBDIRS)
528 AC_SUBST(FRONTENDS_PROGS)
533 ## ------------------------------------------------------------------------
534 ## Find a file (or one of more files in a list of dirs)
535 ## ------------------------------------------------------------------------
537 AC_DEFUN(AC_FIND_FILE,
544 if test -r "$i/$j"; then
552 dnl just a wrapper to clean up configure.in
553 AC_DEFUN(LYX_PROG_LIBTOOL,
555 AC_REQUIRE([AC_ENABLE_SHARED])
556 AC_REQUIRE([AC_ENABLE_STATIC])
557 dnl libtool is only for C, so I must force him
558 dnl to find the correct flags for C++
560 ac_save_cflags="$CFLAGS"
563 AM_PROG_LIBTOOL dnl for libraries
565 CFLAGS="$ac_save_cflags"