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.
52 AC_DEFUN([LYX_ERROR],[
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*|3.5*) CXXFLAGS="$lyx_opt -fno-exceptions";;
216 *) CXXFLAGS="$lyx_opt";;
218 if test x$enable_debug = xyes ; then
220 3.4*|3.5*) 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.2*) CXXFLAGS="$CXXFLAGS -W -Wall";;
234 3.3*) CXXFLAGS="$CXXFLAGS -W -Wall";;
235 *) CXXFLAGS="$CXXFLAGS -Wextra -Wall";;
241 dnl NOT USED CURRENTLY*************************************
242 dnl Usage: LYX_CXX_RTTI : checks whether the C++ compiler
244 AC_DEFUN([LYX_CXX_RTTI],[
245 ### Check whether the compiler supports runtime type information
246 AC_CACHE_CHECK(whether the C++ compiler supports RTTI,lyx_cv_rtti,
250 virtual int tag() { return 0; }
252 class derived1 : public rtti {
254 int tag() { return 1; }
256 class derived2 : public rtti {
258 int tag() { return 2; }
261 derived1 * foo1 = new derived1();
262 derived2 * foo2 = new derived2();
264 derived1 * bar1 = dynamic_cast<derived1 *>(bar);
268 bar1 = dynamic_cast<derived1 *>(bar);
273 ],lyx_cv_rtti=yes,lyx_cv_rtti=no,lyx_cv_rtti=no)
275 if test x$lyx_cv_rtti = xyes ; then
276 AC_DEFINE(HAVE_RTTI, 1,
277 [Define to 1 if your compiler supports runtime type information])
281 dnl Usage: LYX_CXX_EXPLICIT : checks whether the C++ compiler
282 dnl understands the "explicit" directive.
283 AC_DEFUN([LYX_CXX_EXPLICIT],[
284 ### Check whether the compiler understands the keyword `explicit'
285 AC_CACHE_CHECK(whether the C++ compiler understands explicit,lyx_cv_explicit,
290 };],,lyx_cv_explicit=yes,lyx_cv_explicit=no)
292 if test $lyx_cv_explicit = no ; then
293 AC_DEFINE(explicit,[ ],
294 [Define to nothing if your compiler does not understand the
295 'explicit' directive])
299 dnl NOT USED CURRENTLY*************************************
300 dnl Usage: LYX_CXX_STL_STACK : checks whether the C++ compiler
301 dnl has a working stl stack template
302 AC_DEFUN([LYX_CXX_STL_STACK],[
303 AC_CACHE_CHECK(for broken STL stack template,lyx_cv_broken_stack,
310 ],lyx_cv_broken_stack=no,lyx_cv_broken_stack=yes)
312 if test $lyx_cv_broken_stack = yes ; then
313 AC_DEFINE(BROKEN_STL_STACK, 1,
314 [Define if you have the STL from libg++ 2.7.x, where stack<> is not defined
319 dnl Usage: LYX_STD_COUNT : checks wherer the C++ library have a conforming
320 dnl count template, if not the old HP version is assumed.
321 AC_DEFUN([LYX_STD_COUNT],[
322 AC_CACHE_CHECK(for conforming std::count,lyx_cv_std_count,
326 int countChar(char * b, char * e, char const c)
328 return count(b, e, c);
332 int i = countChar(a, a + 5, 'l');
333 ],lyx_cv_std_count=yes,lyx_cv_std_count=no)
335 if test $lyx_cv_std_count = yes ; then
336 AC_DEFINE(HAVE_STD_COUNT, 1,
337 [Define if you have a conforming std::count template, otherwise HP version of count template is assumed.])
341 dnl Usage: LYX_CXX_STL_MODERN_STREAMS : checks whether the C++ compiler
342 dnl supports modern STL streams
343 AC_DEFUN([LYX_CXX_STL_MODERN_STREAMS],[
344 AC_CACHE_CHECK(for modern STL streams,lyx_cv_modern_streams,
348 std::streambuf * test = std::cerr.rdbuf();
350 ],lyx_cv_modern_streams=yes,lyx_cv_modern_streams=no)
352 if test $lyx_cv_modern_streams = yes ; then
353 AC_DEFINE(MODERN_STL_STREAMS, 1,
354 [Define if you have modern standard-compliant STL streams])
358 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
360 AC_DEFUN([LYX_USE_INCLUDED_BOOST],[
361 AC_ARG_WITH(included-boost,
362 [ --with-included-boost use the boost lib supplied with LyX],
363 [lyx_cv_with_included_boost=$withval
364 AC_MSG_RESULT([$with_included_boost])],
365 [lyx_cv_with_included_boost=yes])
366 AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
370 dnl NOT USED CURRENTLY*************************************
372 AC_DEFUN([LYX_CXX_PARTIAL], [
373 AC_REQUIRE([AC_PROG_CXX])
374 AC_CACHE_CHECK([if C++ compiler supports partial specialization],
375 [lyx_cv_cxx_partial_specialization],
378 template<class T, class K>
382 template<class T> class k<void,T> { };
387 lyx_cv_cxx_partial_specialization=yes
389 lyx_cv_cxx_partial_specialization=no
392 if test x$lyx_cv_cxx_partial_specialization = xyes ; then
393 AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1,
394 [Defined if your compiler supports partial specialization.])
399 dnl Usage: LYX_CXX_CHEADERS : checks whether the C++ compiler
400 dnl provides wrappers for C headers and use our alternate version otherwise.
401 AC_DEFUN([LYX_CXX_CHEADERS],[
402 AC_CACHE_CHECK(for C headers wrappers,lyx_cv_cxx_cheaders,
412 #include <ctime>],[lyx_cv_cxx_cheaders=yes],[lyx_cv_cxx_cheaders=no])])
413 if test $lyx_cv_cxx_cheaders = no ; then
414 LYX_ADD_INC_DIR(lyx_cppflags,\$(top_srcdir)/src/cheaders)
418 dnl Usage: LYX_CXX_GLOBAL_CSTD: checks whether C library functions
419 dnl are already in the global namespace
420 AC_DEFUN([LYX_CXX_GLOBAL_CSTD],[
421 AC_CACHE_CHECK(whether C library functions are already in the global namespace,
422 lyx_cv_cxx_global_cstd,
428 ],[lyx_cv_cxx_global_cstd=no],[lyx_cv_cxx_global_cstd=yes])])
429 if test x$lyx_cv_cxx_global_cstd = xyes; then
430 AC_DEFINE(CXX_GLOBAL_CSTD,1,
431 [Define if your C++ compiler puts C library functions in the global namespace])
436 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
437 dnl [default-yes-value])
438 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
439 dnl resulting directory name in 'dir-var-name'.
440 AC_DEFUN([LYX_WITH_DIR],[
441 AC_ARG_WITH($1,[ --with-$1 specify $2])
442 AC_MSG_CHECKING([for $2])
443 if test -z "$with_$3"; then
444 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
446 test "x$with_$3" = xyes && with_$3=$5
449 AC_MSG_RESULT($lyx_cv_$3)])
452 dnl Usage: LYX_LOOP_DIR(value,action)
453 dnl Executes action for values of variable `dir' in `values'. `values' can
454 dnl use ":" as a separator.
455 AC_DEFUN([LYX_LOOP_DIR],[
456 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
457 for dir in `eval "echo $1"`; do
458 if test ! "$dir" = NONE; then
459 test ! -d "$dir" && AC_MSG_ERROR([\"$dir\" is not a directory])
467 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
469 AC_DEFUN([LYX_ADD_LIB_DIR],[
471 if test "`(uname) 2>/dev/null`" = SunOS &&
472 uname -r | grep '^5' >/dev/null; then
473 if test $ac_cv_prog_gxx = yes ; then
474 $1="${$1} -Wl[,]-R$2"
481 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
483 AC_DEFUN([LYX_ADD_INC_DIR],[$1="${$1} -I$2 "])
485 ### Check for a headers existence and location iff it exists
486 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
487 ## It almost works. I've tried a few variations but they give errors
488 ## of one sort or other: bad substitution or file not found etc. The
489 ## actual header _is_ found though and the cache variable is set however
490 ## the reported setting (on screen) is equal to $ac_safe for some unknown
492 ## Additionally, autoheader can't figure out what to use as the name in
493 ## the config.h.in file so we need to write our own entries there -- one for
494 ## each header in the form PATH_HEADER_NAME_H
496 AC_DEFUN([LYX_PATH_HEADER],
497 [ AC_CHECK_HEADER($1,[
498 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
499 ### the only remaining problem is getting the second parameter to this
500 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
501 ### of $ac_safe being printed.
502 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
503 [ cat > conftest.$ac_ext <<EOF
504 #line __oline__ "configure"
505 #include "confdefs.h"
509 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
510 grep $1 2>/dev/null | \
511 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
512 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
514 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
516 ### end of LYX_PATH_HEADER
518 ### Check which frontends we want to use. The default is XForms only
520 AC_DEFUN([LYX_USE_FRONTENDS],
521 [AC_MSG_CHECKING([what frontend should be used for the GUI])
522 AC_ARG_WITH(frontend,
523 [ --with-frontend=THIS Use THIS frontend as main GUI:
524 Possible values: xforms, qt],
525 [FRONTENDS="$withval"], [FRONTENDS="xforms"])
526 AC_MSG_RESULT($FRONTENDS)
528 AC_SUBST(FRONTENDS_SUBDIRS)
529 AC_SUBST(FRONTENDS_PROGS)
534 ## ------------------------------------------------------------------------
535 ## Find a file (or one of more files in a list of dirs)
536 ## ------------------------------------------------------------------------
538 AC_DEFUN([AC_FIND_FILE],
545 if test -r "$i/$j"; then
553 dnl just a wrapper to clean up configure.in
554 AC_DEFUN([LYX_PROG_LIBTOOL],
556 AC_REQUIRE([AC_ENABLE_SHARED])
557 AC_REQUIRE([AC_ENABLE_STATIC])
558 dnl libtool is only for C, so I must force him
559 dnl to find the correct flags for C++
561 ac_save_cflags="$CFLAGS"
564 AM_PROG_LIBTOOL dnl for libraries
566 CFLAGS="$ac_save_cflags"