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])
49 dnl Usage: LYX_ERROR(message) Displays the warning "message" and sets the
50 dnl flag lyx_error to yes.
52 lyx_error_txt="$lyx_error_txt
58 dnl Usage: LYX_WARNING(message) Displays the warning "message" and sets the
59 dnl flag lyx_warning to yes.
60 AC_DEFUN(LYX_WARNING,[
61 lyx_warning_txt="$lyx_warning_txt
67 dnl Usage: LYX_LIB_ERROR(file,library) Displays an error message indication
68 dnl that 'file' cannot be found because 'lib' may be uncorrectly installed.
69 AC_DEFUN(LYX_LIB_ERROR,[
70 LYX_ERROR([Cannot find $1. Please check that the $2 library
71 is correctly installed on your system.])])
74 dnl Usage: LYX_CHECK_ERRORS Displays a warning message if a LYX_ERROR
75 dnl has occured previously.
76 AC_DEFUN(LYX_CHECK_ERRORS,[
77 if test x$lyx_error = xyes; then
79 **** The following problems have been detected by configure.
80 **** Please check the messages below before running 'make'.
81 **** (see the section 'Problems' in the INSTALL file)
84 deleting cache $cache_file
89 if test x$lyx_warning = xyes; then
91 === The following minor problems have been detected by configure.
92 === Please check the messages below before running 'make'.
93 === (see the section 'Problems' in the INSTALL file)
98 Configuration of LyX was successful.
99 Type 'make' to compile the program,
100 and then 'make install' to install it.
105 dnl LYX_SEARCH_PROG(VARIABLE-NAME,PROGRAMS-LIST,ACTION-IF-FOUND)
107 define(LYX_SEARCH_PROG,[dnl
108 for ac_prog in $2 ; do
109 # Extract the first word of "$ac_prog", so it can be a program name with args.
110 set dummy $ac_prog ; ac_word=$[2]
111 if test -z "[$]$1"; then
112 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
113 for ac_dir in $PATH; do
114 test -z "$ac_dir" && ac_dir=.
115 if test -f [$ac_dir/$ac_word]; then
123 if test -n "[$]$1"; then
129 test -n "[$]$1" && break
134 AC_DEFUN([LYX_PROG_CXX_WORKS],
136 cat >conftest.C <<EOF
138 // we require the mutable keyword
141 // we require namespace support
149 $CXX -c $CXXFLAGS $CPPFLAGS conftest.C >&5 || CXX=
150 rm -f conftest.C conftest.o conftest.obj || true
154 AC_DEFUN(LYX_PROG_CXX,
155 [AC_MSG_CHECKING([for a good enough C++ compiler])
156 LYX_SEARCH_PROG(CXX, $CXX $CCC g++ gcc c++ CC cxx xlC cc++, [LYX_PROG_CXX_WORKS])
158 if test -z "$CXX" ; then
159 AC_ERROR([Unable to find a good enough C++ compiler])
165 ### We might want to get or shut warnings.
166 AC_ARG_ENABLE(warnings,
167 [ --enable-warnings tell the compiler to display more warnings],,
168 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $ac_cv_prog_gxx = yes ; then
173 if test x$enable_warnings = xyes ; then
174 lyx_flags="$lyx_flags warnings"
175 AC_DEFINE(WITH_WARNINGS, 1,
176 [Define this if you want to see the warning directives put here and
177 there by the developpers to get attention])
180 ### We might want to disable debug
182 [ --enable-debug enable debug information],,
183 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $ac_cv_prog_gxx = yes ; then
189 ### set up optimization
190 AC_ARG_ENABLE(optimization,
191 [ --enable-optimization[=value] enable compiler optimisation],,
192 enable_optimization=yes;)
193 case $enable_optimization in
196 *) lyx_opt=${enable_optimization};;
199 # set the debug flags correctly.
200 if test x$GXX = xyes; then
201 dnl Useful for global version info
202 gxx_version=`${CXX} -dumpversion`
203 CXX_VERSION="($gxx_version)"
205 if test "$ac_test_CXXFLAGS" = set; then
206 CXXFLAGS="$ac_save_CXXFLAGS"
209 2.95.1) CXXFLAGS="$lyx_opt -fpermissive -fno-rtti -fno-exceptions";;
210 2.95.2) CXXFLAGS="$lyx_opt -fno-rtti -fno-exceptions";;
211 2.95.*) CXXFLAGS="$lyx_opt -fno-exceptions";;
212 2.96*) CXXFLAGS="$lyx_opt -fno-exceptions";;
213 3.0*) CXXFLAGS="$lyx_opt -fno-rtti -fno-exceptions";;
214 3.1*) CXXFLAGS="$lyx_opt";;
215 *2.91.*) CXXFLAGS="$lyx_opt -fno-rtti -fno-exceptions";;
216 *) CXXFLAGS="$lyx_opt -fno-rtti -fno-exceptions";;
218 if test x$enable_debug = xyes ; then
219 CXXFLAGS="-g $CXXFLAGS"
222 if test x$enable_warnings = xyes ; then
224 2.95.*) CXXFLAGS="$CXXFLAGS -W -Wall";;
225 2.96*) CXXFLAGS="$CXXFLAGS -W -Wall";;
226 *) CXXFLAGS="$CXXFLAGS -W -Wall";;
228 if test $lyx_devel_version = yes ; then
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_CXX_STL_STRING : checks whether the C++ compiler
359 dnl has a std::string that is usable for LyX. LyX does not require this
360 dnl std::string to be standard.
361 AC_DEFUN(LYX_CXX_STL_STRING,[
362 AC_REQUIRE([AC_PROG_CXX])
363 AC_MSG_CHECKING(whether the included std::string should be used)
364 AC_ARG_WITH(included-string,
365 [ --with-included-string use LyX string class instead of STL string],
366 [lyx_cv_with_included_string=$withval
367 AC_MSG_RESULT([$with_included_string])],
368 [AC_CACHE_CHECK([],lyx_cv_with_included_string,
373 // LyX has reduced its requirements on the basic_string
374 // implementation so that the basic_string supplied
375 // with gcc is usable. In particular this means that
376 // lyx does not use std::string::clear and not the
377 // strncmp version of std::string::compare. This is mainly
378 // done so that LyX can use precompiled C++ libraries that
379 // already uses the systems basic_string, e.g. gtk--
380 string a("hello there");
384 //int t = a.compare(a.length() - 1, 1, s);
387 lyx_cv_with_included_string=no
389 lyx_cv_with_included_string=yes
393 if test x$lyx_cv_with_included_string = xyes ; then
394 AC_DEFINE(USE_INCLUDED_STRING, 1,
395 [Define to use the lyxstring class bundled with LyX.])
396 lyx_flags="$lyx_flags included-string"
398 AM_CONDITIONAL(USE_LYXSTRING, test x$lyx_cv_with_included_string = xyes)
399 dnl AC_MSG_RESULT([$with_included_string])
403 dnl Usage: LYX_CXX_GOOD_STD_STRING : checks whether the C++ compiler
404 dnl has a std::string that is close to the standard. So close that
405 dnl methods not found in "unstandard" std::strings are present here.
406 AC_DEFUN(LYX_CXX_GOOD_STD_STRING,[
407 AC_REQUIRE([AC_PROG_CXX])
408 AC_CACHE_CHECK([whether the systems std::string is really good],
409 [lyx_cv_std_string_good],
414 // From a std::string that is supposed to be close to the
415 // standard we require at least three things:
416 // - clear() and erase()
417 // - the strncmp of compare()
419 string a("hello there");
423 int t = a.compare(a.length() - 1, 1, s);
427 lyx_cv_std_string_good=yes
429 lyx_cv_std_string_good=no
433 if test x$lyx_cv_std_string_good = xyes ; then
434 AC_DEFINE(STD_STRING_IS_GOOD, 1,
435 [Define if the systems std::string is really good.])
440 dnl Usage: LYX_REGEX : checks if the header regex.h is available
441 dnl if it is not available the automake variable USE_REGEX will be
442 dnl defined and the regex.h and regex.c that we provide will be used.
444 AC_CHECK_HEADERS(regex.h, lyx_regex=no, lyx_regex=yes)
445 AM_CONDITIONAL(USE_REGEX, test x$lyx_regex = xyes)
448 dnl NOT USED CURRENTLY*************************************
450 AC_DEFUN(LYX_CXX_PARTIAL, [
451 AC_REQUIRE([AC_PROG_CXX])
452 AC_CACHE_CHECK([if C++ compiler supports partial specialization],
453 [lyx_cv_cxx_partial_specialization],
456 template<class T, class K>
460 template<class T> class k<void,T> { };
465 lyx_cv_cxx_partial_specialization=yes
467 lyx_cv_cxx_partial_specialization=no
470 if test x$lyx_cv_cxx_partial_specialization = xyes ; then
471 AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1,
472 [Defined if your compiler supports partial specialization.])
477 dnl Usage: LYX_CXX_CHEADERS : checks whether the C++ compiler
478 dnl provides wrappers for C headers and use our alternate version otherwise.
479 AC_DEFUN(LYX_CXX_CHEADERS,[
480 AC_CACHE_CHECK(for C headers wrappers,lyx_cv_cxx_cheaders,
490 #include <ctime>],[lyx_cv_cxx_cheaders=yes],[lyx_cv_cxx_cheaders=no])])
491 if test $lyx_cv_cxx_cheaders = no ; then
492 LYX_ADD_INC_DIR(lyx_cppflags,\$(top_srcdir)/src/cheaders)
495 dnl Usage: LYX_CXX_GLOBAL_CSTD: checks whether C library functions
496 dnl are already in the global namespace
497 AC_DEFUN(LYX_CXX_GLOBAL_CSTD,[
498 AC_CACHE_CHECK(whether C library functions are already in the global namespace,
499 lyx_cv_cxx_global_cstd,
505 ],[lyx_cv_cxx_global_cstd=no],[lyx_cv_cxx_global_cstd=yes])])
506 if test x$lyx_cv_cxx_global_cstd = xyes; then
507 AC_DEFINE(CXX_GLOBAL_CSTD,1,
508 [Define if your C++ compiler puts C library functions in the global namespace])
512 dnl Usage LYX_PATH_XPM: Checks for xpm library and header
513 AC_DEFUN(LYX_PATH_XPM,[
514 ### Check for Xpm library
515 AC_CHECK_LIB(Xpm, XpmCreateBufferFromImage,XPM_LIB="-lXpm",
516 [LYX_LIB_ERROR(libXpm,Xpm)], $XPM_LIB)
518 ### Check for Xpm headers
519 lyx_cv_xpm_h_location="<xpm.h>"
520 AC_CHECK_HEADER(X11/xpm.h,[
521 ac_cv_header_xpm_h=yes
522 lyx_cv_xpm_h_location="<X11/xpm.h>"],[
523 AC_CHECK_HEADER(xpm.h,[],[
524 LYX_LIB_ERROR(xpm.h,Xpm)])])
525 AC_DEFINE_UNQUOTED(XPM_H_LOCATION,$lyx_cv_xpm_h_location)
527 ### Test for the header version
528 if test $ac_cv_header_xpm_h = yes; then
529 AC_CACHE_CHECK([xpm header version],lyx_cv_xpmversion,
530 [ cat > conftest.$ac_ext <<EOF
531 #line __oline__ "configure"
532 #include "confdefs.h"
534 #include XPM_H_LOCATION
535 "%%%"lyx_cv_xpmv=XpmVersion;lyx_cv_xpmr=XpmRevision"%%%"
537 eval `(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
538 grep '^"%%%"' 2>/dev/null | \
539 sed -e 's/^"%%%"\(.*\)"%%%"/\1/' -e 's/ //g'`
540 case "$lyx_cv_xpmr" in
542 [0-9]) lyxxpmr_alpha=`echo $lyx_cv_xpmr |tr 123456789 abcdefghi`
543 lyxxpmv_alpha=" (aka 3.$lyx_cv_xpmv$lyxxpmr_alpha)";;
547 lyx_cv_xpmversion="$lyx_cv_xpmv.$lyx_cv_xpmr$lyxxpmv_alpha"
549 XPM_VERSION=${lyx_cv_xpmversion}
550 case "$lyx_cv_xpmr" in
552 [789]|[0-9][0-9]*) ;;
554 *) LYX_WARNING([Version $lyx_cv_xpmversion of the Xpm library is a bit old.
555 If you experience strange crashes with LyX, try to upgrade
556 to at least version 4.7 (aka 3.4g).
557 If you have installed a newer version of the library, check whether you
558 have an old xpm.h header file in your include path.]);;
563 dnl Usage LYX_PATH_XFORMS: Checks for xforms library and flags
564 dnl If it is found, the variable XFORMS_LIB is set to the relevant -l flag.
565 AC_DEFUN(LYX_PATH_XFORMS,[
566 ### Check for xforms library
567 AC_CHECK_LIB(forms, fl_initialize, XFORMS_LIB="-lforms",
568 [AC_CHECK_LIB(xforms, fl_initialize, XFORMS_LIB="-lxforms",
569 [LYX_LIB_ERROR(libforms or libxforms,xforms)])])
571 ### Check for xforms headers
572 lyx_cv_forms_h_location="<forms.h>"
573 AC_CHECK_HEADER(X11/forms.h,[
574 ac_cv_header_forms_h=yes
575 lyx_cv_forms_h_location="<X11/forms.h>"],[
576 AC_CHECK_HEADER(forms.h,[],[
577 LYX_LIB_ERROR(forms.h,forms)])])
578 AC_DEFINE_UNQUOTED(FORMS_H_LOCATION,$lyx_cv_forms_h_location)
579 if test $ac_cv_header_forms_h = yes; then
580 AC_CACHE_CHECK([xforms header version],lyx_cv_xfversion,
581 [ cat > conftest.$ac_ext <<EOF
582 #line __oline__ "configure"
583 #include "confdefs.h"
585 #include FORMS_H_LOCATION
586 #if ! defined(FL_INCLUDE_VERSION)
589 "%%%"FL_VERSION.FL_REVISION.FL_FIXLEVEL"%%%"
592 lyx_cv_xfversion=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
593 grep '^"%%%"' 2>/dev/null | \
594 sed -e 's/^"%%%"\(.*\)"%%%"/\1/' -e 's/ //g'`
596 XFORMS_VERSION=$lyx_cv_xfversion
597 case "$lyx_cv_xfversion" in
598 "(unknown)"|0.8[1-7]*)
600 Version $lyx_cv_xfversion of xforms is not compatible with LyX.
601 This version of LyX works best with versions 0.88 (recommended) and later.) ;;
603 0.89[01234]) LYX_WARNING(dnl
604 LyX should work ok with version $lyx_cv_xfversion of xforms[,] but
605 it is an unproven version and might still have some bugs. You should
606 probably use version 0.89.6 (or 0.88) instead) ;;
609 Version $lyx_cv_xfversion of xforms might not be compatible with LyX[,]
610 since it is newer than 0.89. You might have slight problems with it.);;
615 dnl Check whether the xforms library has a viable image loader
616 AC_DEFUN(LYX_USE_XFORMS_IMAGE_LOADER,
619 LIBS="$XFORMS_LIB $LIBS"
620 lyx_use_xforms_image_loader=no
621 AC_CHECK_FUNCS(flimage_dup,[
622 AC_CHECK_FUNCS(flimage_to_pixmap,[
623 lyx_use_xforms_image_loader=yes
624 AC_CHECK_FUNCS(flimage_enable_ps)])])
626 test $lyx_use_xforms_image_loader = yes && lyx_flags="$lyx_flags xforms-image-loader"
627 ### If the gui cannot load images itself, then we default to the
628 ### very simple one in graphics/GraphicsImageXPM.[Ch]
629 AM_CONDITIONAL(USE_BASIC_IMAGE_LOADER,
630 test $lyx_use_xforms_image_loader = no)
634 dnl Check if the image loader needs libjpeg
635 AC_DEFUN(LYX_XFORMS_IMAGE_LOADER_NEEDS_JPEG,
637 if test "$lyx_use_xforms_image_loader" = "yes" ; then
638 AC_MSG_CHECKING([whether libjpeg is needed])
642 LIBS="$XFORMS_LIB $LIBS"
643 AC_TRY_LINK([#include <forms.h>],
645 [lyx_need_jpeg=no],[lyx_need_jpeg=yes])
648 AC_MSG_RESULT($lyx_need_jpeg)
649 if test "$lyx_need_jpeg" = "yes" ; then
656 dnl Usage: LYX_HPUX Checks for HP-UX and update CXXFLAGS accordingly
658 [#It seems that HPUX requires using -fpcc-struct-return with gcc.
659 AC_CACHE_CHECK(for HP-UX,ac_cv_hpux,[
660 os=`uname -s | tr '[A-Z]' '[a-z]'`
662 test "$os" = hp-ux && ac_cv_hpux=yes])
663 if test "$ac_cv_hpux" = yes; then
664 test "x$GXX" = xyes && CXXFLAGS="$CXXFLAGS -fpcc-struct-return"
668 dnl Usage: LYX_SUNOS4 Checks for SunOS 4.x and sets the flag lyx_broken_headers
671 [#The headers are not correct under SunOS4
672 AC_CACHE_CHECK(for SunOS 4.x,ac_cv_sunos4,[
674 os=`uname -a | sed -e 's/^\([^ ]*\) [^ ]* \([0-9]\)\..*/\1\2/'`
675 changequote([, ]) dnl
677 test "$os" = SunOS4 && ac_cv_sunos4=yes])
678 if test "$ac_cv_sunos4" = yes; then
679 test "x$GXX" = xyes && lyx_broken_headers=yes
683 dnl Usage: LYX_SCO Checks for SCO and sets the flag lyx_broken_headers
686 [AC_CACHE_CHECK(for SCO 3.2v4,ac_cv_sco,[
688 if test `uname -s` != "SCO_SV"; then
689 lyx_machine_rel=`uname -m`:`uname -r`
690 if test $lyx_machine_rel = i386:3.2 || test $lyx_machine_rel = i486:3.2;
692 if test -f /usr/options/cb.name; then
694 elif /bin/uname -X 2>/dev/null >/dev/null ; then
699 if test "$ac_cv_sco" = yes; then
700 test "x$GXX" = xyes && lyx_broken_headers=yes
703 dnl Usage: LYX_FUNC_PUTENV_ARGTYPE
704 dnl Checks whether putenv() takes 'char const *' or 'char *' as
705 dnl argument. This is needed because Solaris 7 (wrongly?) uses 'char *',
706 dnl while everybody else uses the former...
707 AC_DEFUN(LYX_FUNC_PUTENV_ARGTYPE,
708 [AC_MSG_CHECKING([type of argument for putenv()])
709 AC_CACHE_VAL(lyx_cv_func_putenv_arg,dnl
711 [#include <cstdlib>],
712 [char const * foo = "bar";
714 [lyx_cv_func_putenv_arg='char const *'],[lyx_cv_func_putenv_arg='char *'])])
715 AC_MSG_RESULT($lyx_cv_func_putenv_arg)
716 AC_DEFINE_UNQUOTED(PUTENV_TYPE_ARG,$lyx_cv_func_putenv_arg,dnl
717 [Define to the type of the argument of putenv(). Needed on Solaris 7.])])
720 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
721 dnl [default-yes-value])
722 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
723 dnl resulting directory name in 'dir-var-name'.
724 AC_DEFUN(LYX_WITH_DIR,[
725 AC_ARG_WITH($1,[ --with-$1 specify $2])
726 AC_MSG_CHECKING([for $2])
727 if test -z "$with_$3"; then
728 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
730 test "x$with_$3" = xyes && with_$3=$5
733 AC_MSG_RESULT($lyx_cv_$3)])
736 dnl Usage: LYX_LOOP_DIR(value,action)
737 dnl Executes action for values of variable `dir' in `values'. `values' can
738 dnl use ":" as a separator.
739 AC_DEFUN(LYX_LOOP_DIR,[
740 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
741 for dir in `eval "echo $1"`; do
742 if test ! "$dir" = NONE; then
743 test ! -d "$dir" && AC_ERROR([\"$dir\" is not a directory])
751 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
753 AC_DEFUN(LYX_ADD_LIB_DIR,[
755 if test "`(uname) 2>/dev/null`" = SunOS &&
756 uname -r | grep '^5' >/dev/null; then
757 if test $ac_cv_prog_gxx = yes ; then
758 $1="${$1} -Wl[,]-R$2"
765 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
767 AC_DEFUN(LYX_ADD_INC_DIR,[$1="${$1} -I$2 "])
769 ### Check which libsigc++ we're using and make sure any external one works
770 ### Check for libsigc++ library
771 AC_DEFUN(LYX_WITH_SIGC,
772 [AC_MSG_CHECKING(whether the included libsigc++ should be used)
773 AC_ARG_WITH([included-libsigc],
774 [ --without-included-libsigc
775 Use the libsigc++ installed on the system],
776 [lyx_use_included_libsigc=$withval],
777 [lyx_use_included_libsigc=yes])
778 AC_MSG_RESULT([$lyx_use_included_libsigc])
779 if test x$lyx_use_included_libsigc = xno; then
780 ### Check for libsigc++
781 ## can't use AC_SUBST right here!
786 [Cannot find libsigc++ library or headers at least as recent as 0.8.7.
787 Check your installation. Have you installed the development package?])
790 ### Use the included libsigc++
791 ### sigc-config hasn't been created yet so we can't just do the same as above
792 ### unless of course someone gets keen and merges the sigc++ configure.in
793 ### with this one. We don't really gain much by doing that though except
794 ### a considerably smaller dist and more difficult maintenance.
795 ### It'd also mean we'd have the equivalent of config/gettext.m4
796 lyx_flags="$lyx_flags included-libsigc"
797 SIGC_LIBS="\`\${top_builddir}/sigc++/sigc-config --libs-names | sed -e 's/-lsigc//'\`"
798 # Libsigc++ always installs into a subdirectory called sigc++. Therefore we
799 # have to always use #include <sigc++/signal_system.h> in our code.
800 # Remember if you decide to do anything to the sigc++ code to do your mods on
801 # the makeLyXsigc.sh script in development/tools using a current cvs checkout
802 # of libsigc++. A tarball distribution doesn't have everything in it that we
804 # We need both these -I entries to build when builddir != srcdir
805 if test "x$srcdir" = "x." ; then
806 SIGC_CFLAGS="-I\${top_srcdir}"
808 SIGC_CFLAGS="-I\${top_builddir} -I\${top_srcdir}"
810 INCLUDED_SIGC="\${top_builddir}/sigc++/libsigc.la"
811 ## can't substitute these here like this otherwise all remaining tests fail
812 ## instead we SUBST directly into the Makefiles
813 ##LIBS="$LIBS \$SIGC_LIBS"
814 ##CPPFLAGS="$CPPFLAGS \$SIGC_CFLAGS"
816 AC_SUBST(SIGC_CFLAGS)
818 AC_SUBST(INCLUDED_SIGC)
821 ### Check for a headers existence and location iff it exists
822 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
823 ## It almost works. I've tried a few variations but they give errors
824 ## of one sort or other: bad substitution or file not found etc. The
825 ## actual header _is_ found though and the cache variable is set however
826 ## the reported setting (on screen) is equal to $ac_safe for some unknown
828 ## Additionally, autoheader can't figure out what to use as the name in
829 ## the config.h.in file so we need to write our own entries there -- one for
830 ## each header in the form PATH_HEADER_NAME_H
832 AC_DEFUN(LYX_PATH_HEADER,
833 [ AC_CHECK_HEADER($1,[
834 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
835 ### the only remaining problem is getting the second parameter to this
836 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
837 ### of $ac_safe being printed.
838 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
839 [ cat > conftest.$ac_ext <<EOF
840 #line __oline__ "configure"
841 #include "confdefs.h"
845 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
846 grep $1 2>/dev/null | \
847 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
848 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
850 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path)])
852 ### end of LYX_PATH_HEADER
854 ### Check for stl_string_fwd.h existence and location if it exists
855 AC_DEFUN(LYX_STL_STRING_FWD,
856 [ AC_CHECK_HEADER(stl_string_fwd.h,[
857 AC_CACHE_CHECK([path to stl_string_fwd.h],lyx_cv_path_stl_string_fwd_h,
858 [ cat > conftest.$ac_ext <<EOF
859 #line __oline__ "configure"
860 #include "confdefs.h"
862 #include <stl_string_fwd.h>
864 lyx_cv_path_stl_string_fwd_h=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
865 grep 'stl_string_fwd.h' 2>/dev/null | \
866 sed -e 's/.*\(".*stl_string_fwd.h"\).*/\1/' -e "1q"`
868 AC_DEFINE_UNQUOTED(STL_STRING_FWD_H_LOCATION,$lyx_cv_path_stl_string_fwd_h,
869 [define this to the location of stl_string_fwd.h to be used with #include,
870 NOTE: Do not set it to <stl_string_fwd.h> as that will find the LyX
871 supplied version of the header.
872 e.g. <../include/stl_string_fwd.h> or better yet use an absolute path])])
876 dnl AC_VALIDATE_CACHE_SYSTEM_TYPE[(cmd)]
877 dnl if the cache file is inconsistent with the current host,
878 dnl target and build system types, execute CMD or print a default
880 AC_DEFUN(AC_VALIDATE_CACHE_SYSTEM_TYPE, [
881 AC_REQUIRE([AC_CANONICAL_SYSTEM])
882 AC_MSG_CHECKING([config.cache system type])
883 if { test x"${ac_cv_host_system_type+set}" = x"set" &&
884 test x"$ac_cv_host_system_type" != x"$host"; } ||
885 { test x"${ac_cv_build_system_type+set}" = x"set" &&
886 test x"$ac_cv_build_system_type" != x"$build"; } ||
887 { test x"${ac_cv_target_system_type+set}" = x"set" &&
888 test x"$ac_cv_target_system_type" != x"$target"; }; then
889 AC_MSG_RESULT([different])
891 [AC_MSG_ERROR(["you must remove config.cache and restart configure"])])
893 AC_MSG_RESULT([same])
895 ac_cv_host_system_type="$host"
896 ac_cv_build_system_type="$build"
897 ac_cv_target_system_type="$target"
900 dnl We use this until autoconf fixes its version.
901 AC_DEFUN(LYX_FUNC_SELECT_ARGTYPES,
902 [AC_MSG_CHECKING([types of arguments for select()])
903 AC_CACHE_VAL(ac_cv_func_select_arg234,dnl
904 [AC_CACHE_VAL(ac_cv_func_select_arg1,dnl
905 [AC_CACHE_VAL(ac_cv_func_select_arg5,dnl
906 [for ac_cv_func_select_arg234 in 'fd_set *' 'int *' 'void *'; do
907 for ac_cv_func_select_arg1 in 'int' 'size_t' 'unsigned long' 'unsigned'; do for ac_cv_func_select_arg5 in 'struct timeval *' 'const struct timeval *'; do
909 [#ifdef HAVE_SYS_TYPES_H
910 #include <sys/types.h>
912 #ifdef HAVE_SYS_TIME_H
913 #include <sys/time.h>
915 #ifdef HAVE_SYS_SELECT_H
916 #include <sys/select.h>
918 #ifdef HAVE_SYS_SOCKET_H
919 #include <sys/socket.h>
921 extern int select ($ac_cv_func_select_arg1,$ac_cv_func_select_arg234,$ac_cv_func_select_arg234,$ac_cv_func_select_arg234,$ac_cv_func_select_arg5);],,dnl
922 [ac_not_found=no ; break 3],ac_not_found=yes)
929 if test "$ac_not_found" = yes; then
930 ac_cv_func_select_arg1=int
931 ac_cv_func_select_arg234='int *'
932 ac_cv_func_select_arg5='struct timeval *'
934 AC_MSG_RESULT([$ac_cv_func_select_arg1,$ac_cv_func_select_arg234,$ac_cv_func_select_arg5])
935 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG1,$ac_cv_func_select_arg1,
936 [Define to the type of arg1 for select().])
937 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG234,($ac_cv_func_select_arg234),
938 [Define to the type of args 2, 3 and 4 for select().])
939 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG5,($ac_cv_func_select_arg5),
940 [Define to the type of arg5 for select().])
943 ### Check which frontend we want to use. The default is XForms
945 AC_DEFUN(LYX_USE_FRONTEND,
946 [AC_MSG_CHECKING([what frontend should be used as main GUI])
947 AC_ARG_WITH(frontend,
948 [ --with-frontend=THIS Use THIS frontend as main GUI:
949 Possible values: xforms, qt2, gnome],
950 [lyx_use_frontend="$withval"], [lyx_use_frontend="xforms"])
951 AC_MSG_RESULT($lyx_use_frontend)
953 AC_SUBST(FRONTEND_GUILIB)
954 AC_SUBST(FRONTEND_LDFLAGS)
955 AC_SUBST(FRONTEND_INCLUDES)
956 AC_SUBST(FRONTEND_LIBS)
960 dnl Check things are declared in headers to avoid errors or warnings.
961 dnl Called like LYX_CHECK_DECL(function, headerfile)
962 dnl Defines HAVE_DECL_{FUNCTION}
963 AC_DEFUN(LYX_CHECK_DECL,
964 [AC_MSG_CHECKING(if $1 is declared by header $2)
965 tr_func=`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
967 tr_hdr=`echo $2 | tr . _`
968 AC_CACHE_VAL([lyx_cv_declare_${tr_hdr}_$1],
969 [AC_EGREP_HEADER($1, $2, [eval "lyx_cv_declare_${tr_hdr}_$1=yes"], [eval "lyx_cv_declare_${tr_hdr}_$1=no"])])
970 if eval "test \"\${lyx_cv_declare_${tr_hdr}_$1}\" = \"yes\""; then
971 AC_DEFINE_UNQUOTED(HAVE_DECL_${tr_func})
977 dnl This is the multiple headers version of the LYX_CHECK_DECL macro above.
978 dnl Called like LYX_CHECK_DECL_HDRS(function, file1 file2 file3)
979 AC_DEFUN(LYX_CHECK_DECL_HDRS,
982 tr_hdr=`echo $I | tr . _`
983 if test "${got}" = "no"; then
984 LYX_CHECK_DECL($1, $I)
986 if eval "test \"\${lyx_cv_declare_${tr_hdr}_$1}\" = \"yes\""; then
992 ## ------------------------------------------------------------------------
993 ## Find a file (or one of more files in a list of dirs)
994 ## ------------------------------------------------------------------------
996 AC_DEFUN(AC_FIND_FILE,
1003 if test -r "$i/$j"; then
1011 dnl just a wrapper to clean up configure.in
1012 AC_DEFUN(LYX_PROG_LIBTOOL,
1014 AC_REQUIRE([AC_ENABLE_SHARED])
1015 AC_REQUIRE([AC_ENABLE_STATIC])
1016 dnl libtool is only for C, so I must force him
1017 dnl to find the correct flags for C++
1019 ac_save_cflags="$CFLAGS"
1022 AM_PROG_LIBTOOL dnl for libraries
1024 CFLAGS="$ac_save_cflags"