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 *2.91.*) CXXFLAGS="$lyx_opt -fno-rtti -fno-exceptions";;
215 *) CXXFLAGS="$lyx_opt -fno-rtti -fno-exceptions";;
217 if test x$enable_debug = xyes ; then
218 CXXFLAGS="-g $CXXFLAGS"
221 if test x$enable_warnings = xyes ; then
223 2.95.*) CXXFLAGS="$CXXFLAGS -W -Wall";;
224 2.96*) CXXFLAGS="$CXXFLAGS -W -Wall";;
225 *) CXXFLAGS="$CXXFLAGS -W -Wall";;
227 if test $lyx_devel_version = yes ; then
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_CXX_STL_STRING : checks whether the C++ compiler
358 dnl has a std::string that is usable for LyX. LyX does not require this
359 dnl std::string to be standard.
360 AC_DEFUN(LYX_CXX_STL_STRING,[
361 AC_REQUIRE([AC_PROG_CXX])
362 AC_MSG_CHECKING(whether the included std::string should be used)
363 AC_ARG_WITH(included-string,
364 [ --with-included-string use LyX string class instead of STL string],
365 [lyx_cv_with_included_string=$withval
366 AC_MSG_RESULT([$with_included_string])],
367 [AC_CACHE_CHECK([],lyx_cv_with_included_string,
372 // LyX has reduced its requirements on the basic_string
373 // implementation so that the basic_string supplied
374 // with gcc is usable. In particular this means that
375 // lyx does not use std::string::clear and not the
376 // strncmp version of std::string::compare. This is mainly
377 // done so that LyX can use precompiled C++ libraries that
378 // already uses the systems basic_string, e.g. gtk--
379 string a("hello there");
383 //int t = a.compare(a.length() - 1, 1, s);
386 lyx_cv_with_included_string=no
388 lyx_cv_with_included_string=yes
392 if test x$lyx_cv_with_included_string = xyes ; then
393 AC_DEFINE(USE_INCLUDED_STRING, 1,
394 [Define to use the lyxstring class bundled with LyX.])
395 lyx_flags="$lyx_flags included-string"
397 AM_CONDITIONAL(USE_LYXSTRING, test x$lyx_cv_with_included_string = xyes)
398 dnl AC_MSG_RESULT([$with_included_string])
402 dnl Usage: LYX_CXX_GOOD_STD_STRING : checks whether the C++ compiler
403 dnl has a std::string that is close to the standard. So close that
404 dnl methods not found in "unstandard" std::strings are present here.
405 AC_DEFUN(LYX_CXX_GOOD_STD_STRING,[
406 AC_REQUIRE([AC_PROG_CXX])
407 AC_CACHE_CHECK([whether the systems std::string is really good],
408 [lyx_cv_std_string_good],
413 // From a std::string that is supposed to be close to the
414 // standard we require at least three things:
415 // - clear() and erase()
416 // - the strncmp of compare()
418 string a("hello there");
422 int t = a.compare(a.length() - 1, 1, s);
426 lyx_cv_std_string_good=yes
428 lyx_cv_std_string_good=no
432 if test x$lyx_cv_std_string_good = xyes ; then
433 AC_DEFINE(STD_STRING_IS_GOOD, 1,
434 [Define if the systems std::string is really good.])
439 dnl Usage: LYX_REGEX : checks if the header regex.h is available
440 dnl if it is not available the automake variable USE_REGEX will be
441 dnl defined and the regex.h and regex.c that we provide will be used.
443 AC_CHECK_HEADERS(regex.h, lyx_regex=no, lyx_regex=yes)
444 AM_CONDITIONAL(USE_REGEX, test x$lyx_regex = xyes)
447 dnl NOT USED CURRENTLY*************************************
449 AC_DEFUN(LYX_CXX_PARTIAL, [
450 AC_REQUIRE([AC_PROG_CXX])
451 AC_CACHE_CHECK([if C++ compiler supports partial specialization],
452 [lyx_cv_cxx_partial_specialization],
455 template<class T, class K>
459 template<class T> class k<void,T> { };
464 lyx_cv_cxx_partial_specialization=yes
466 lyx_cv_cxx_partial_specialization=no
469 if test x$lyx_cv_cxx_partial_specialization = xyes ; then
470 AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1,
471 [Defined if your compiler supports partial specialization.])
476 dnl Usage: LYX_CXX_CHEADERS : checks whether the C++ compiler
477 dnl provides wrappers for C headers and use our alternate version otherwise.
478 AC_DEFUN(LYX_CXX_CHEADERS,[
479 AC_CACHE_CHECK(for C headers wrappers,lyx_cv_cxx_cheaders,
489 #include <ctime>],[lyx_cv_cxx_cheaders=yes],[lyx_cv_cxx_cheaders=no])])
490 if test $lyx_cv_cxx_cheaders = no ; then
491 LYX_ADD_INC_DIR(lyx_cppflags,\$(top_srcdir)/src/cheaders)
494 dnl Usage: LYX_CXX_GLOBAL_CSTD: checks whether C library functions
495 dnl are already in the global namespace
496 AC_DEFUN(LYX_CXX_GLOBAL_CSTD,[
497 AC_CACHE_CHECK(whether C library functions are already in the global namespace,
498 lyx_cv_cxx_global_cstd,
504 ],[lyx_cv_cxx_global_cstd=no],[lyx_cv_cxx_global_cstd=yes])])
505 if test x$lyx_cv_cxx_global_cstd = xyes; then
506 AC_DEFINE(CXX_GLOBAL_CSTD,1,
507 [Define if your C++ compiler puts C library functions in the global namespace])
511 dnl Usage LYX_PATH_XPM: Checks for xpm library and header
512 AC_DEFUN(LYX_PATH_XPM,[
513 ### Check for Xpm library
514 AC_CHECK_LIB(Xpm, XpmCreateBufferFromImage,XPM_LIB="-lXpm",
515 [LYX_LIB_ERROR(libXpm,Xpm)], $XPM_LIB)
517 ### Check for Xpm headers
518 lyx_cv_xpm_h_location="<xpm.h>"
519 AC_CHECK_HEADER(X11/xpm.h,[
520 ac_cv_header_xpm_h=yes
521 lyx_cv_xpm_h_location="<X11/xpm.h>"],[
522 AC_CHECK_HEADER(xpm.h,[],[
523 LYX_LIB_ERROR(xpm.h,Xpm)])])
524 AC_DEFINE_UNQUOTED(XPM_H_LOCATION,$lyx_cv_xpm_h_location)
526 ### Test for the header version
527 if test $ac_cv_header_xpm_h = yes; then
528 AC_CACHE_CHECK([xpm header version],lyx_cv_xpmversion,
529 [ cat > conftest.$ac_ext <<EOF
530 #line __oline__ "configure"
531 #include "confdefs.h"
533 #include XPM_H_LOCATION
534 "%%%"lyx_cv_xpmv=XpmVersion;lyx_cv_xpmr=XpmRevision"%%%"
536 eval `(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
537 grep '^"%%%"' 2>/dev/null | \
538 sed -e 's/^"%%%"\(.*\)"%%%"/\1/' -e 's/ //g'`
539 case "$lyx_cv_xpmr" in
541 [0-9]) lyxxpmr_alpha=`echo $lyx_cv_xpmr |tr 123456789 abcdefghi`
542 lyxxpmv_alpha=" (aka 3.$lyx_cv_xpmv$lyxxpmr_alpha)";;
546 lyx_cv_xpmversion="$lyx_cv_xpmv.$lyx_cv_xpmr$lyxxpmv_alpha"
548 XPM_VERSION=${lyx_cv_xpmversion}
549 case "$lyx_cv_xpmr" in
551 [789]|[0-9][0-9]*) ;;
553 *) LYX_WARNING([Version $lyx_cv_xpmversion of the Xpm library is a bit old.
554 If you experience strange crashes with LyX, try to upgrade
555 to at least version 4.7 (aka 3.4g).
556 If you have installed a newer version of the library, check whether you
557 have an old xpm.h header file in your include path.]);;
562 dnl Usage LYX_PATH_XFORMS: Checks for xforms library and flags
563 dnl If it is found, the variable XFORMS_LIB is set to the relevant -l flag.
564 AC_DEFUN(LYX_PATH_XFORMS,[
565 ### Check for xforms library
566 AC_CHECK_LIB(forms, fl_initialize, XFORMS_LIB="-lforms",
567 [AC_CHECK_LIB(xforms, fl_initialize, XFORMS_LIB="-lxforms",
568 [LYX_LIB_ERROR(libforms or libxforms,xforms)])])
570 ### Check for xforms headers
571 lyx_cv_forms_h_location="<forms.h>"
572 AC_CHECK_HEADER(X11/forms.h,[
573 ac_cv_header_forms_h=yes
574 lyx_cv_forms_h_location="<X11/forms.h>"],[
575 AC_CHECK_HEADER(forms.h,[],[
576 LYX_LIB_ERROR(forms.h,forms)])])
577 AC_DEFINE_UNQUOTED(FORMS_H_LOCATION,$lyx_cv_forms_h_location)
578 if test $ac_cv_header_forms_h = yes; then
579 AC_CACHE_CHECK([xforms header version],lyx_cv_xfversion,
580 [ cat > conftest.$ac_ext <<EOF
581 #line __oline__ "configure"
582 #include "confdefs.h"
584 #include FORMS_H_LOCATION
585 #if ! defined(FL_INCLUDE_VERSION)
588 "%%%"FL_VERSION.FL_REVISION.FL_FIXLEVEL"%%%"
591 lyx_cv_xfversion=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
592 grep '^"%%%"' 2>/dev/null | \
593 sed -e 's/^"%%%"\(.*\)"%%%"/\1/' -e 's/ //g'`
595 XFORMS_VERSION=$lyx_cv_xfversion
596 case "$lyx_cv_xfversion" in
597 "(unknown)"|0.8[1-7]*)
599 Version $lyx_cv_xfversion of xforms is not compatible with LyX.
600 This version of LyX works best with versions 0.88 (recommended) and later.) ;;
602 0.89[01234]) LYX_WARNING(dnl
603 LyX should work ok with version $lyx_cv_xfversion of xforms[,] but
604 it is an unproven version and might still have some bugs. You should
605 probably use version 0.89.6 (or 0.88) instead) ;;
608 Version $lyx_cv_xfversion of xforms might not be compatible with LyX[,]
609 since it is newer than 0.89. You might have slight problems with it.);;
614 dnl Check whether the xforms library has a viable image loader
615 AC_DEFUN(LYX_USE_XFORMS_IMAGE_LOADER,
618 LIBS="$XFORMS_LIB $LIBS"
619 lyx_use_xforms_image_loader=no
620 AC_CHECK_FUNCS(flimage_dup,[
621 AC_CHECK_FUNCS(flimage_to_pixmap,[
622 lyx_use_xforms_image_loader=yes
623 AC_CHECK_FUNCS(flimage_enable_ps)])])
625 test $lyx_use_xforms_image_loader = yes && lyx_flags="$lyx_flags xforms-image-loader"
626 ### If the gui cannot load images itself, then we default to the
627 ### very simple one in graphics/GraphicsImageXPM.[Ch]
628 AM_CONDITIONAL(USE_BASIC_IMAGE_LOADER,
629 test $lyx_use_xforms_image_loader = no)
633 dnl Check if the image loader needs libjpeg
634 AC_DEFUN(LYX_XFORMS_IMAGE_LOADER_NEEDS_JPEG,
636 if test "$lyx_use_xforms_image_loader" = "yes" ; then
637 AC_MSG_CHECKING([whether libjpeg is needed])
641 LIBS="$XFORMS_LIB $LIBS"
642 AC_TRY_LINK([#include <forms.h>],
644 [lyx_need_jpeg=no],[lyx_need_jpeg=yes])
647 AC_MSG_RESULT($lyx_need_jpeg)
648 if test "$lyx_need_jpeg" = "yes" ; then
655 dnl Usage: LYX_HPUX Checks for HP-UX and update CXXFLAGS accordingly
657 [#It seems that HPUX requires using -fpcc-struct-return with gcc.
658 AC_CACHE_CHECK(for HP-UX,ac_cv_hpux,[
659 os=`uname -s | tr '[A-Z]' '[a-z]'`
661 test "$os" = hp-ux && ac_cv_hpux=yes])
662 if test "$ac_cv_hpux" = yes; then
663 test "x$GXX" = xyes && CXXFLAGS="$CXXFLAGS -fpcc-struct-return"
667 dnl Usage: LYX_SUNOS4 Checks for SunOS 4.x and sets the flag lyx_broken_headers
670 [#The headers are not correct under SunOS4
671 AC_CACHE_CHECK(for SunOS 4.x,ac_cv_sunos4,[
673 os=`uname -a | sed -e 's/^\([^ ]*\) [^ ]* \([0-9]\)\..*/\1\2/'`
674 changequote([, ]) dnl
676 test "$os" = SunOS4 && ac_cv_sunos4=yes])
677 if test "$ac_cv_sunos4" = yes; then
678 test "x$GXX" = xyes && lyx_broken_headers=yes
682 dnl Usage: LYX_SCO Checks for SCO and sets the flag lyx_broken_headers
685 [AC_CACHE_CHECK(for SCO 3.2v4,ac_cv_sco,[
687 if test `uname -s` != "SCO_SV"; then
688 lyx_machine_rel=`uname -m`:`uname -r`
689 if test $lyx_machine_rel = i386:3.2 || test $lyx_machine_rel = i486:3.2;
691 if test -f /usr/options/cb.name; then
693 elif /bin/uname -X 2>/dev/null >/dev/null ; then
698 if test "$ac_cv_sco" = yes; then
699 test "x$GXX" = xyes && lyx_broken_headers=yes
702 dnl Usage: LYX_FUNC_PUTENV_ARGTYPE
703 dnl Checks whether putenv() takes 'char const *' or 'char *' as
704 dnl argument. This is needed because Solaris 7 (wrongly?) uses 'char *',
705 dnl while everybody else uses the former...
706 AC_DEFUN(LYX_FUNC_PUTENV_ARGTYPE,
707 [AC_MSG_CHECKING([type of argument for putenv()])
708 AC_CACHE_VAL(lyx_cv_func_putenv_arg,dnl
710 [#include <cstdlib>],
711 [char const * foo = "bar";
713 [lyx_cv_func_putenv_arg='char const *'],[lyx_cv_func_putenv_arg='char *'])])
714 AC_MSG_RESULT($lyx_cv_func_putenv_arg)
715 AC_DEFINE_UNQUOTED(PUTENV_TYPE_ARG,$lyx_cv_func_putenv_arg,dnl
716 [Define to the type of the argument of putenv(). Needed on Solaris 7.])])
719 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
720 dnl [default-yes-value])
721 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
722 dnl resulting directory name in 'dir-var-name'.
723 AC_DEFUN(LYX_WITH_DIR,[
724 AC_ARG_WITH($1,[ --with-$1 specify $2])
725 AC_MSG_CHECKING([for $2])
726 if test -z "$with_$3"; then
727 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
729 test "x$with_$3" = xyes && with_$3=$5
732 AC_MSG_RESULT($lyx_cv_$3)])
735 dnl Usage: LYX_LOOP_DIR(value,action)
736 dnl Executes action for values of variable `dir' in `values'. `values' can
737 dnl use ":" as a separator.
738 AC_DEFUN(LYX_LOOP_DIR,[
739 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
740 for dir in `eval "echo $1"`; do
741 if test ! "$dir" = NONE; then
742 test ! -d "$dir" && AC_ERROR([\"$dir\" is not a directory])
750 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
752 AC_DEFUN(LYX_ADD_LIB_DIR,[
754 if test "`(uname) 2>/dev/null`" = SunOS &&
755 uname -r | grep '^5' >/dev/null; then
756 if test $ac_cv_prog_gxx = yes ; then
757 $1="${$1} -Wl[,]-R$2"
764 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
766 AC_DEFUN(LYX_ADD_INC_DIR,[$1="${$1} -I$2 "])
768 ### Check which libsigc++ we're using and make sure any external one works
769 ### Check for libsigc++ library
770 AC_DEFUN(LYX_WITH_SIGC,
771 [AC_MSG_CHECKING(whether the included libsigc++ should be used)
772 AC_ARG_WITH([included-libsigc],
773 [ --without-included-libsigc
774 Use the libsigc++ installed on the system],
775 [lyx_use_included_libsigc=$withval],
776 [lyx_use_included_libsigc=yes])
777 AC_MSG_RESULT([$lyx_use_included_libsigc])
778 if test x$lyx_use_included_libsigc = xno; then
779 ### Check for libsigc++
780 ## can't use AC_SUBST right here!
785 [Cannot find libsigc++ library or headers at least as recent as 0.8.7.
786 Check your installation. Have you installed the development package?])
789 ### Use the included libsigc++
790 ### sigc-config hasn't been created yet so we can't just do the same as above
791 ### unless of course someone gets keen and merges the sigc++ configure.in
792 ### with this one. We don't really gain much by doing that though except
793 ### a considerably smaller dist and more difficult maintenance.
794 ### It'd also mean we'd have the equivalent of config/gettext.m4
795 lyx_flags="$lyx_flags included-libsigc"
796 SIGC_LIBS="\`\${top_builddir}/sigc++/sigc-config --libs-names | sed -e 's/-lsigc//'\`"
797 # Libsigc++ always installs into a subdirectory called sigc++. Therefore we
798 # have to always use #include <sigc++/signal_system.h> in our code.
799 # Remember if you decide to do anything to the sigc++ code to do your mods on
800 # the makeLyXsigc.sh script in development/tools using a current cvs checkout
801 # of libsigc++. A tarball distribution doesn't have everything in it that we
803 # We need both these -I entries to build when builddir != srcdir
804 if test "x$srcdir" = "x." ; then
805 SIGC_CFLAGS="-I\${top_srcdir}"
807 SIGC_CFLAGS="-I\${top_builddir} -I\${top_srcdir}"
809 INCLUDED_SIGC="\${top_builddir}/sigc++/libsigc.la"
810 ## can't substitute these here like this otherwise all remaining tests fail
811 ## instead we SUBST directly into the Makefiles
812 ##LIBS="$LIBS \$SIGC_LIBS"
813 ##CPPFLAGS="$CPPFLAGS \$SIGC_CFLAGS"
815 AC_SUBST(SIGC_CFLAGS)
817 AC_SUBST(INCLUDED_SIGC)
820 ### Check for a headers existence and location iff it exists
821 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
822 ## It almost works. I've tried a few variations but they give errors
823 ## of one sort or other: bad substitution or file not found etc. The
824 ## actual header _is_ found though and the cache variable is set however
825 ## the reported setting (on screen) is equal to $ac_safe for some unknown
827 ## Additionally, autoheader can't figure out what to use as the name in
828 ## the config.h.in file so we need to write our own entries there -- one for
829 ## each header in the form PATH_HEADER_NAME_H
831 AC_DEFUN(LYX_PATH_HEADER,
832 [ AC_CHECK_HEADER($1,[
833 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
834 ### the only remaining problem is getting the second parameter to this
835 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
836 ### of $ac_safe being printed.
837 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
838 [ cat > conftest.$ac_ext <<EOF
839 #line __oline__ "configure"
840 #include "confdefs.h"
844 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
845 grep $1 2>/dev/null | \
846 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
847 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
849 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path)])
851 ### end of LYX_PATH_HEADER
853 ### Check for stl_string_fwd.h existence and location if it exists
854 AC_DEFUN(LYX_STL_STRING_FWD,
855 [ AC_CHECK_HEADER(stl_string_fwd.h,[
856 AC_CACHE_CHECK([path to stl_string_fwd.h],lyx_cv_path_stl_string_fwd_h,
857 [ cat > conftest.$ac_ext <<EOF
858 #line __oline__ "configure"
859 #include "confdefs.h"
861 #include <stl_string_fwd.h>
863 lyx_cv_path_stl_string_fwd_h=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
864 grep 'stl_string_fwd.h' 2>/dev/null | \
865 sed -e 's/.*\(".*stl_string_fwd.h"\).*/\1/' -e "1q"`
867 AC_DEFINE_UNQUOTED(STL_STRING_FWD_H_LOCATION,$lyx_cv_path_stl_string_fwd_h,
868 [define this to the location of stl_string_fwd.h to be used with #include,
869 NOTE: Do not set it to <stl_string_fwd.h> as that will find the LyX
870 supplied version of the header.
871 e.g. <../include/stl_string_fwd.h> or better yet use an absolute path])])
875 dnl AC_VALIDATE_CACHE_SYSTEM_TYPE[(cmd)]
876 dnl if the cache file is inconsistent with the current host,
877 dnl target and build system types, execute CMD or print a default
879 AC_DEFUN(AC_VALIDATE_CACHE_SYSTEM_TYPE, [
880 AC_REQUIRE([AC_CANONICAL_SYSTEM])
881 AC_MSG_CHECKING([config.cache system type])
882 if { test x"${ac_cv_host_system_type+set}" = x"set" &&
883 test x"$ac_cv_host_system_type" != x"$host"; } ||
884 { test x"${ac_cv_build_system_type+set}" = x"set" &&
885 test x"$ac_cv_build_system_type" != x"$build"; } ||
886 { test x"${ac_cv_target_system_type+set}" = x"set" &&
887 test x"$ac_cv_target_system_type" != x"$target"; }; then
888 AC_MSG_RESULT([different])
890 [AC_MSG_ERROR(["you must remove config.cache and restart configure"])])
892 AC_MSG_RESULT([same])
894 ac_cv_host_system_type="$host"
895 ac_cv_build_system_type="$build"
896 ac_cv_target_system_type="$target"
899 dnl We use this until autoconf fixes its version.
900 AC_DEFUN(LYX_FUNC_SELECT_ARGTYPES,
901 [AC_MSG_CHECKING([types of arguments for select()])
902 AC_CACHE_VAL(ac_cv_func_select_arg234,dnl
903 [AC_CACHE_VAL(ac_cv_func_select_arg1,dnl
904 [AC_CACHE_VAL(ac_cv_func_select_arg5,dnl
905 [for ac_cv_func_select_arg234 in 'fd_set *' 'int *' 'void *'; do
906 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
908 [#ifdef HAVE_SYS_TYPES_H
909 #include <sys/types.h>
911 #ifdef HAVE_SYS_TIME_H
912 #include <sys/time.h>
914 #ifdef HAVE_SYS_SELECT_H
915 #include <sys/select.h>
917 #ifdef HAVE_SYS_SOCKET_H
918 #include <sys/socket.h>
920 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
921 [ac_not_found=no ; break 3],ac_not_found=yes)
928 if test "$ac_not_found" = yes; then
929 ac_cv_func_select_arg1=int
930 ac_cv_func_select_arg234='int *'
931 ac_cv_func_select_arg5='struct timeval *'
933 AC_MSG_RESULT([$ac_cv_func_select_arg1,$ac_cv_func_select_arg234,$ac_cv_func_select_arg5])
934 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG1,$ac_cv_func_select_arg1,
935 [Define to the type of arg1 for select().])
936 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG234,($ac_cv_func_select_arg234),
937 [Define to the type of args 2, 3 and 4 for select().])
938 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG5,($ac_cv_func_select_arg5),
939 [Define to the type of arg5 for select().])
942 ### Check which frontend we want to use. The default is XForms
944 AC_DEFUN(LYX_USE_FRONTEND,
945 [AC_MSG_CHECKING([what frontend should be used as main GUI])
946 AC_ARG_WITH(frontend,
947 [ --with-frontend=THIS Use THIS frontend as main GUI:
948 Possible values: xforms, qt2, gnome],
949 [lyx_use_frontend="$withval"], [lyx_use_frontend="xforms"])
950 AC_MSG_RESULT($lyx_use_frontend)
952 AC_SUBST(FRONTEND_GUILIB)
953 AC_SUBST(FRONTEND_LDFLAGS)
954 AC_SUBST(FRONTEND_INCLUDES)
955 AC_SUBST(FRONTEND_LIBS)
959 dnl Check things are declared in headers to avoid errors or warnings.
960 dnl Called like LYX_CHECK_DECL(function, headerfile)
961 dnl Defines HAVE_DECL_{FUNCTION}
962 AC_DEFUN(LYX_CHECK_DECL,
963 [AC_MSG_CHECKING(if $1 is declared by header $2)
964 tr_func=`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
966 tr_hdr=`echo $2 | tr . _`
967 AC_CACHE_VAL([lyx_cv_declare_${tr_hdr}_$1],
968 [AC_EGREP_HEADER($1, $2, [eval "lyx_cv_declare_${tr_hdr}_$1=yes"], [eval "lyx_cv_declare_${tr_hdr}_$1=no"])])
969 if eval "test \"\${lyx_cv_declare_${tr_hdr}_$1}\" = \"yes\""; then
970 AC_DEFINE_UNQUOTED(HAVE_DECL_${tr_func})
976 dnl This is the multiple headers version of the LYX_CHECK_DECL macro above.
977 dnl Called like LYX_CHECK_DECL_HDRS(function, file1 file2 file3)
978 AC_DEFUN(LYX_CHECK_DECL_HDRS,
981 tr_hdr=`echo $I | tr . _`
982 if test "${got}" = "no"; then
983 LYX_CHECK_DECL($1, $I)
985 if eval "test \"\${lyx_cv_declare_${tr_hdr}_$1}\" = \"yes\""; then
991 ## ------------------------------------------------------------------------
992 ## Find a file (or one of more files in a list of dirs)
993 ## ------------------------------------------------------------------------
995 AC_DEFUN(AC_FIND_FILE,
1002 if test -r "$i/$j"; then
1010 dnl just a wrapper to clean up configure.in
1011 AC_DEFUN(LYX_PROG_LIBTOOL,
1013 AC_REQUIRE([AC_ENABLE_SHARED])
1014 AC_REQUIRE([AC_ENABLE_STATIC])
1015 dnl libtool is only for C, so I must force him
1016 dnl to find the correct flags for C++
1018 ac_save_cflags="$CFLAGS"
1021 AM_PROG_LIBTOOL dnl for libraries
1023 CFLAGS="$ac_save_cflags"