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";;
210 2.95.2) CXXFLAGS="$lyx_opt";;
211 2.95.*) CXXFLAGS="$lyx_opt";;
212 2.96*) CXXFLAGS="$lyx_opt";;
213 3.0*) CXXFLAGS="$lyx_opt";;
214 3.1*) CXXFLAGS="$lyx_opt";;
215 *) CXXFLAGS="$lyx_opt";;
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
238 dnl NOT USED CURRENTLY*************************************
239 dnl Usage: LYX_CXX_RTTI : checks whether the C++ compiler
241 AC_DEFUN(LYX_CXX_RTTI,[
242 ### Check whether the compiler supports runtime type information
243 AC_CACHE_CHECK(whether the C++ compiler supports RTTI,lyx_cv_rtti,
247 virtual int tag() { return 0; }
249 class derived1 : public rtti {
251 int tag() { return 1; }
253 class derived2 : public rtti {
255 int tag() { return 2; }
258 derived1 * foo1 = new derived1();
259 derived2 * foo2 = new derived2();
261 derived1 * bar1 = dynamic_cast<derived1 *>(bar);
265 bar1 = dynamic_cast<derived1 *>(bar);
270 ],lyx_cv_rtti=yes,lyx_cv_rtti=no,lyx_cv_rtti=no)
272 if test x$lyx_cv_rtti = xyes ; then
273 AC_DEFINE(HAVE_RTTI, 1,
274 [Define to 1 if your compiler supports runtime type information])
278 dnl Usage: LYX_CXX_EXPLICIT : checks whether the C++ compiler
279 dnl understands the "explicit" directive.
280 AC_DEFUN(LYX_CXX_EXPLICIT,[
281 ### Check whether the compiler understands the keyword `explicit'
282 AC_CACHE_CHECK(whether the C++ compiler understands explicit,lyx_cv_explicit,
287 };],,lyx_cv_explicit=yes,lyx_cv_explicit=no)
289 if test $lyx_cv_explicit = no ; then
290 AC_DEFINE(explicit,[ ],
291 [Define to nothing if your compiler does not understand the
292 'explicit' directive])
296 dnl NOT USED CURRENTLY*************************************
297 dnl Usage: LYX_CXX_STL_STACK : checks whether the C++ compiler
298 dnl has a working stl stack template
299 AC_DEFUN(LYX_CXX_STL_STACK,[
300 AC_CACHE_CHECK(for broken STL stack template,lyx_cv_broken_stack,
307 ],lyx_cv_broken_stack=no,lyx_cv_broken_stack=yes)
309 if test $lyx_cv_broken_stack = yes ; then
310 AC_DEFINE(BROKEN_STL_STACK, 1,
311 [Define if you have the STL from libg++ 2.7.x, where stack<> is not defined
316 dnl Usage: LYX_STD_COUNT : checks wherer the C++ library have a conforming
317 dnl count template, if not the old HP version is assumed.
318 AC_DEFUN(LYX_STD_COUNT,[
319 AC_CACHE_CHECK(for conforming std::count,lyx_cv_std_count,
323 int countChar(char * b, char * e, char const c)
325 return count(b, e, c);
329 int i = countChar(a, a + 5, 'l');
330 ],lyx_cv_std_count=yes,lyx_cv_std_count=no)
332 if test $lyx_cv_std_count = yes ; then
333 AC_DEFINE(HAVE_STD_COUNT, 1,
334 [Define if you have a conforming std::count template, otherwise HP version of count template is assumed.])
338 dnl Usage: LYX_CXX_STL_MODERN_STREAMS : checks whether the C++ compiler
339 dnl supports modern STL streams
340 AC_DEFUN(LYX_CXX_STL_MODERN_STREAMS,[
341 AC_CACHE_CHECK(for modern STL streams,lyx_cv_modern_streams,
345 std::streambuf * test = std::cerr.rdbuf();
347 ],lyx_cv_modern_streams=yes,lyx_cv_modern_streams=no)
349 if test $lyx_cv_modern_streams = yes ; then
350 AC_DEFINE(MODERN_STL_STREAMS, 1,
351 [Define if you have modern standard-compliant STL streams])
355 dnl Usage: LYX_CXX_STL_STRING : checks whether the C++ compiler
356 dnl has a std::string that is usable for LyX. LyX does not require this
357 dnl std::string to be standard.
358 AC_DEFUN(LYX_CXX_STL_STRING,[
359 AC_REQUIRE([AC_PROG_CXX])
360 AC_MSG_CHECKING(whether the included std::string should be used)
361 AC_ARG_WITH(included-string,
362 [ --with-included-string use LyX string class instead of STL string],
363 [lyx_cv_with_included_string=$withval
364 AC_MSG_RESULT([$with_included_string])],
365 [AC_CACHE_CHECK([],lyx_cv_with_included_string,
370 // LyX has reduced its requirements on the basic_string
371 // implementation so that the basic_string supplied
372 // with gcc is usable. In particular this means that
373 // lyx does not use std::string::clear and not the
374 // strncmp version of std::string::compare. This is mainly
375 // done so that LyX can use precompiled C++ libraries that
376 // already uses the systems basic_string, e.g. gtk--
377 string a("hello there");
381 //int t = a.compare(a.length() - 1, 1, s);
384 lyx_cv_with_included_string=no
386 lyx_cv_with_included_string=yes
390 if test x$lyx_cv_with_included_string = xyes ; then
391 AC_DEFINE(USE_INCLUDED_STRING, 1,
392 [Define to use the lyxstring class bundled with LyX.])
393 lyx_flags="$lyx_flags included-string"
395 AM_CONDITIONAL(USE_LYXSTRING, test x$lyx_cv_with_included_string = xyes)
396 dnl AC_MSG_RESULT([$with_included_string])
400 dnl Usage: LYX_CXX_GOOD_STD_STRING : checks whether the C++ compiler
401 dnl has a std::string that is close to the standard. So close that
402 dnl methods not found in "unstandard" std::strings are present here.
403 AC_DEFUN(LYX_CXX_GOOD_STD_STRING,[
404 AC_REQUIRE([AC_PROG_CXX])
405 AC_CACHE_CHECK([whether the systems std::string is really good],
406 [lyx_cv_std_string_good],
411 // From a std::string that is supposed to be close to the
412 // standard we require at least three things:
413 // - clear() and erase()
414 // - the strncmp of compare()
416 string a("hello there");
420 int t = a.compare(a.length() - 1, 1, s);
424 lyx_cv_std_string_good=yes
426 lyx_cv_std_string_good=no
430 if test x$lyx_cv_std_string_good = xyes ; then
431 AC_DEFINE(STD_STRING_IS_GOOD, 1,
432 [Define if the systems std::string is really good.])
437 dnl Usage: LYX_REGEX : checks if the header regex.h is available
438 dnl if it is not available the automake variable USE_REGEX will be
439 dnl defined and the regex.h and regex.c that we provide will be used.
441 AC_CHECK_HEADERS(regex.h, lyx_regex=no, lyx_regex=yes)
442 AM_CONDITIONAL(USE_REGEX, test x$lyx_regex = xyes)
445 dnl NOT USED CURRENTLY*************************************
447 AC_DEFUN(LYX_CXX_PARTIAL, [
448 AC_REQUIRE([AC_PROG_CXX])
449 AC_CACHE_CHECK([if C++ compiler supports partial specialization],
450 [lyx_cv_cxx_partial_specialization],
453 template<class T, class K>
457 template<class T> class k<void,T> { };
462 lyx_cv_cxx_partial_specialization=yes
464 lyx_cv_cxx_partial_specialization=no
467 if test x$lyx_cv_cxx_partial_specialization = xyes ; then
468 AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1,
469 [Defined if your compiler supports partial specialization.])
474 dnl Usage: LYX_CXX_CHEADERS : checks whether the C++ compiler
475 dnl provides wrappers for C headers and use our alternate version otherwise.
476 AC_DEFUN(LYX_CXX_CHEADERS,[
477 AC_CACHE_CHECK(for C headers wrappers,lyx_cv_cxx_cheaders,
487 #include <ctime>],[lyx_cv_cxx_cheaders=yes],[lyx_cv_cxx_cheaders=no])])
488 if test $lyx_cv_cxx_cheaders = no ; then
489 LYX_ADD_INC_DIR(lyx_cppflags,\$(top_srcdir)/src/cheaders)
492 dnl Usage: LYX_CXX_GLOBAL_CSTD: checks whether C library functions
493 dnl are already in the global namespace
494 AC_DEFUN(LYX_CXX_GLOBAL_CSTD,[
495 AC_CACHE_CHECK(whether C library functions are already in the global namespace,
496 lyx_cv_cxx_global_cstd,
502 ],[lyx_cv_cxx_global_cstd=no],[lyx_cv_cxx_global_cstd=yes])])
503 if test x$lyx_cv_cxx_global_cstd = xyes; then
504 AC_DEFINE(CXX_GLOBAL_CSTD,1,
505 [Define if your C++ compiler puts C library functions in the global namespace])
509 dnl Usage LYX_PATH_XPM: Checks for xpm library and header
510 AC_DEFUN(LYX_PATH_XPM,[
511 ### Check for Xpm library
512 AC_CHECK_LIB(Xpm, XpmCreateBufferFromImage,XPM_LIB="-lXpm",
513 [LYX_LIB_ERROR(libXpm,Xpm)], $XPM_LIB)
515 ### Check for Xpm headers
516 lyx_cv_xpm_h_location="<xpm.h>"
517 AC_CHECK_HEADER(X11/xpm.h,[
518 ac_cv_header_xpm_h=yes
519 lyx_cv_xpm_h_location="<X11/xpm.h>"],[
520 AC_CHECK_HEADER(xpm.h,[],[
521 LYX_LIB_ERROR(xpm.h,Xpm)])])
522 AC_DEFINE_UNQUOTED(XPM_H_LOCATION,$lyx_cv_xpm_h_location)
524 ### Test for the header version
525 if test $ac_cv_header_xpm_h = yes; then
526 AC_CACHE_CHECK([xpm header version],lyx_cv_xpmversion,
527 [ cat > conftest.$ac_ext <<EOF
528 #line __oline__ "configure"
529 #include "confdefs.h"
531 #include XPM_H_LOCATION
532 "%%%"lyx_cv_xpmv=XpmVersion;lyx_cv_xpmr=XpmRevision"%%%"
534 eval `(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
535 grep '^"%%%"' 2>/dev/null | \
536 sed -e 's/^"%%%"\(.*\)"%%%"/\1/' -e 's/ //g'`
537 case "$lyx_cv_xpmr" in
539 [0-9]) lyxxpmr_alpha=`echo $lyx_cv_xpmr |tr 123456789 abcdefghi`
540 lyxxpmv_alpha=" (aka 3.$lyx_cv_xpmv$lyxxpmr_alpha)";;
544 lyx_cv_xpmversion="$lyx_cv_xpmv.$lyx_cv_xpmr$lyxxpmv_alpha"
546 XPM_VERSION=${lyx_cv_xpmversion}
547 case "$lyx_cv_xpmr" in
549 [789]|[0-9][0-9]*) ;;
551 *) LYX_WARNING([Version $lyx_cv_xpmversion of the Xpm library is a bit old.
552 If you experience strange crashes with LyX, try to upgrade
553 to at least version 4.7 (aka 3.4g).
554 If you have installed a newer version of the library, check whether you
555 have an old xpm.h header file in your include path.]);;
560 dnl Usage LYX_PATH_XFORMS: Checks for xforms library and flags
561 dnl If it is found, the variable XFORMS_LIB is set to the relevant -l flag.
562 AC_DEFUN(LYX_PATH_XFORMS,[
563 ### Check for xforms library
564 AC_CHECK_LIB(forms, fl_initialize, XFORMS_LIB="-lforms",
565 [AC_CHECK_LIB(xforms, fl_initialize, XFORMS_LIB="-lxforms",
566 [LYX_LIB_ERROR(libforms or libxforms,xforms)])])
568 ### Check for xforms headers
569 lyx_cv_forms_h_location="<forms.h>"
570 AC_CHECK_HEADER(X11/forms.h,[
571 ac_cv_header_forms_h=yes
572 lyx_cv_forms_h_location="<X11/forms.h>"],[
573 AC_CHECK_HEADER(forms.h,[],[
574 LYX_LIB_ERROR(forms.h,forms)])])
575 AC_DEFINE_UNQUOTED(FORMS_H_LOCATION,$lyx_cv_forms_h_location)
576 if test $ac_cv_header_forms_h = yes; then
577 AC_CACHE_CHECK([xforms header version],lyx_cv_xfversion,
578 [ cat > conftest.$ac_ext <<EOF
579 #line __oline__ "configure"
580 #include "confdefs.h"
582 #include FORMS_H_LOCATION
583 #if ! defined(FL_INCLUDE_VERSION)
586 "%%%"FL_VERSION.FL_REVISION.FL_FIXLEVEL"%%%"
589 lyx_cv_xfversion=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
590 grep '^"%%%"' 2>/dev/null | \
591 sed -e 's/^"%%%"\(.*\)"%%%"/\1/' -e 's/ //g'`
593 XFORMS_VERSION=$lyx_cv_xfversion
594 case "$lyx_cv_xfversion" in
595 "(unknown)"|0.8[1-7]*)
597 Version $lyx_cv_xfversion of xforms is not compatible with LyX.
598 This version of LyX works best with versions 0.88 (recommended) and later.) ;;
600 0.89[01234]) LYX_WARNING(dnl
601 LyX should work ok with version $lyx_cv_xfversion of xforms[,] but
602 it is an unproven version and might still have some bugs. You should
603 probably use version 0.89.6 (or 0.88) instead) ;;
606 Version $lyx_cv_xfversion of xforms might not be compatible with LyX[,]
607 since it is newer than 0.89. You might have slight problems with it.);;
612 dnl Check whether the xforms library has a viable image loader
613 AC_DEFUN(LYX_USE_XFORMS_IMAGE_LOADER,
616 LIBS="$XFORMS_LIB $LIBS"
617 lyx_use_xforms_image_loader=no
618 AC_CHECK_FUNCS(flimage_dup,[
619 AC_CHECK_FUNCS(flimage_to_pixmap,[
620 lyx_use_xforms_image_loader=yes
621 AC_CHECK_FUNCS(flimage_enable_ps)])])
623 test $lyx_use_xforms_image_loader = yes && lyx_flags="$lyx_flags xforms-image-loader"
624 ### If the gui cannot load images itself, then we default to the
625 ### very simple one in graphics/GraphicsImageXPM.[Ch]
626 AM_CONDITIONAL(USE_BASIC_IMAGE_LOADER,
627 test $lyx_use_xforms_image_loader = no)
631 dnl Check if the image loader needs libjpeg
632 AC_DEFUN(LYX_XFORMS_IMAGE_LOADER_NEEDS_JPEG,
634 if test "$lyx_use_xforms_image_loader" = "yes" ; then
635 AC_MSG_CHECKING([whether libjpeg is needed])
639 LIBS="$XFORMS_LIB $LIBS"
640 AC_TRY_LINK([#include <forms.h>],
642 [lyx_need_jpeg=no],[lyx_need_jpeg=yes])
645 AC_MSG_RESULT($lyx_need_jpeg)
646 if test "$lyx_need_jpeg" = "yes" ; then
653 dnl Usage: LYX_HPUX Checks for HP-UX and update CXXFLAGS accordingly
655 [#It seems that HPUX requires using -fpcc-struct-return with gcc.
656 AC_CACHE_CHECK(for HP-UX,ac_cv_hpux,[
657 os=`uname -s | tr '[A-Z]' '[a-z]'`
659 test "$os" = hp-ux && ac_cv_hpux=yes])
660 if test "$ac_cv_hpux" = yes; then
661 test "x$GXX" = xyes && CXXFLAGS="$CXXFLAGS -fpcc-struct-return"
665 dnl Usage: LYX_SUNOS4 Checks for SunOS 4.x and sets the flag lyx_broken_headers
668 [#The headers are not correct under SunOS4
669 AC_CACHE_CHECK(for SunOS 4.x,ac_cv_sunos4,[
671 os=`uname -a | sed -e 's/^\([^ ]*\) [^ ]* \([0-9]\)\..*/\1\2/'`
672 changequote([, ]) dnl
674 test "$os" = SunOS4 && ac_cv_sunos4=yes])
675 if test "$ac_cv_sunos4" = yes; then
676 test "x$GXX" = xyes && lyx_broken_headers=yes
680 dnl Usage: LYX_SCO Checks for SCO and sets the flag lyx_broken_headers
683 [AC_CACHE_CHECK(for SCO 3.2v4,ac_cv_sco,[
685 if test `uname -s` != "SCO_SV"; then
686 lyx_machine_rel=`uname -m`:`uname -r`
687 if test $lyx_machine_rel = i386:3.2 || test $lyx_machine_rel = i486:3.2;
689 if test -f /usr/options/cb.name; then
691 elif /bin/uname -X 2>/dev/null >/dev/null ; then
696 if test "$ac_cv_sco" = yes; then
697 test "x$GXX" = xyes && lyx_broken_headers=yes
700 dnl Usage: LYX_FUNC_PUTENV_ARGTYPE
701 dnl Checks whether putenv() takes 'char const *' or 'char *' as
702 dnl argument. This is needed because Solaris 7 (wrongly?) uses 'char *',
703 dnl while everybody else uses the former...
704 AC_DEFUN(LYX_FUNC_PUTENV_ARGTYPE,
705 [AC_MSG_CHECKING([type of argument for putenv()])
706 AC_CACHE_VAL(lyx_cv_func_putenv_arg,dnl
708 [#include <cstdlib>],
709 [char const * foo = "bar";
711 [lyx_cv_func_putenv_arg='char const *'],[lyx_cv_func_putenv_arg='char *'])])
712 AC_MSG_RESULT($lyx_cv_func_putenv_arg)
713 AC_DEFINE_UNQUOTED(PUTENV_TYPE_ARG,$lyx_cv_func_putenv_arg,dnl
714 [Define to the type of the argument of putenv(). Needed on Solaris 7.])])
717 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
718 dnl [default-yes-value])
719 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
720 dnl resulting directory name in 'dir-var-name'.
721 AC_DEFUN(LYX_WITH_DIR,[
722 AC_ARG_WITH($1,[ --with-$1 specify $2])
723 AC_MSG_CHECKING([for $2])
724 if test -z "$with_$3"; then
725 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
727 test "x$with_$3" = xyes && with_$3=$5
730 AC_MSG_RESULT($lyx_cv_$3)])
733 dnl Usage: LYX_LOOP_DIR(value,action)
734 dnl Executes action for values of variable `dir' in `values'. `values' can
735 dnl use ":" as a separator.
736 AC_DEFUN(LYX_LOOP_DIR,[
737 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
738 for dir in `eval "echo $1"`; do
739 if test ! "$dir" = NONE; then
740 test ! -d "$dir" && AC_ERROR([\"$dir\" is not a directory])
748 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
750 AC_DEFUN(LYX_ADD_LIB_DIR,[
752 if test "`(uname) 2>/dev/null`" = SunOS &&
753 uname -r | grep '^5' >/dev/null; then
754 if test $ac_cv_prog_gxx = yes ; then
755 $1="${$1} -Wl[,]-R$2"
762 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
764 AC_DEFUN(LYX_ADD_INC_DIR,[$1="${$1} -I$2 "])
766 ### Check which libsigc++ we're using and make sure any external one works
767 ### Check for libsigc++ library
768 AC_DEFUN(LYX_WITH_SIGC,
769 [AC_MSG_CHECKING(whether the included libsigc++ should be used)
770 AC_ARG_WITH([included-libsigc],
771 [ --without-included-libsigc
772 Use the libsigc++ installed on the system],
773 [lyx_use_included_libsigc=$withval],
774 [lyx_use_included_libsigc=yes])
775 AC_MSG_RESULT([$lyx_use_included_libsigc])
776 if test x$lyx_use_included_libsigc = xno; then
777 ### Check for libsigc++
778 ## can't use AC_SUBST right here!
783 [Cannot find libsigc++ library or headers at least as recent as 0.8.7.
784 Check your installation. Have you installed the development package?])
787 ### Use the included libsigc++
788 ### sigc-config hasn't been created yet so we can't just do the same as above
789 ### unless of course someone gets keen and merges the sigc++ configure.in
790 ### with this one. We don't really gain much by doing that though except
791 ### a considerably smaller dist and more difficult maintenance.
792 ### It'd also mean we'd have the equivalent of config/gettext.m4
793 lyx_flags="$lyx_flags included-libsigc"
794 SIGC_LIBS="\`\${top_builddir}/sigc++/sigc-config --libs-names | sed -e 's/-lsigc//'\`"
795 # Libsigc++ always installs into a subdirectory called sigc++. Therefore we
796 # have to always use #include <sigc++/signal_system.h> in our code.
797 # Remember if you decide to do anything to the sigc++ code to do your mods on
798 # the makeLyXsigc.sh script in development/tools using a current cvs checkout
799 # of libsigc++. A tarball distribution doesn't have everything in it that we
801 # We need both these -I entries to build when builddir != srcdir
802 if test "x$srcdir" = "x." ; then
803 SIGC_CFLAGS="-I\${top_srcdir}"
805 SIGC_CFLAGS="-I\${top_builddir} -I\${top_srcdir}"
807 INCLUDED_SIGC="\${top_builddir}/sigc++/libsigc.la"
808 ## can't substitute these here like this otherwise all remaining tests fail
809 ## instead we SUBST directly into the Makefiles
810 ##LIBS="$LIBS \$SIGC_LIBS"
811 ##CPPFLAGS="$CPPFLAGS \$SIGC_CFLAGS"
813 AC_SUBST(SIGC_CFLAGS)
815 AC_SUBST(INCLUDED_SIGC)
818 ### Check for a headers existence and location iff it exists
819 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
820 ## It almost works. I've tried a few variations but they give errors
821 ## of one sort or other: bad substitution or file not found etc. The
822 ## actual header _is_ found though and the cache variable is set however
823 ## the reported setting (on screen) is equal to $ac_safe for some unknown
825 ## Additionally, autoheader can't figure out what to use as the name in
826 ## the config.h.in file so we need to write our own entries there -- one for
827 ## each header in the form PATH_HEADER_NAME_H
829 AC_DEFUN(LYX_PATH_HEADER,
830 [ AC_CHECK_HEADER($1,[
831 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
832 ### the only remaining problem is getting the second parameter to this
833 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
834 ### of $ac_safe being printed.
835 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
836 [ cat > conftest.$ac_ext <<EOF
837 #line __oline__ "configure"
838 #include "confdefs.h"
842 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
843 grep $1 2>/dev/null | \
844 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
845 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
847 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path)])
849 ### end of LYX_PATH_HEADER
851 ### Check for stl_string_fwd.h existence and location if it exists
852 AC_DEFUN(LYX_STL_STRING_FWD,
853 [ AC_CHECK_HEADER(stl_string_fwd.h,[
854 AC_CACHE_CHECK([path to stl_string_fwd.h],lyx_cv_path_stl_string_fwd_h,
855 [ cat > conftest.$ac_ext <<EOF
856 #line __oline__ "configure"
857 #include "confdefs.h"
859 #include <stl_string_fwd.h>
861 lyx_cv_path_stl_string_fwd_h=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
862 grep 'stl_string_fwd.h' 2>/dev/null | \
863 sed -e 's/.*\(".*stl_string_fwd.h"\).*/\1/' -e "1q"`
865 AC_DEFINE_UNQUOTED(STL_STRING_FWD_H_LOCATION,$lyx_cv_path_stl_string_fwd_h,
866 [define this to the location of stl_string_fwd.h to be used with #include,
867 NOTE: Do not set it to <stl_string_fwd.h> as that will find the LyX
868 supplied version of the header.
869 e.g. <../include/stl_string_fwd.h> or better yet use an absolute path])])
873 dnl AC_VALIDATE_CACHE_SYSTEM_TYPE[(cmd)]
874 dnl if the cache file is inconsistent with the current host,
875 dnl target and build system types, execute CMD or print a default
877 AC_DEFUN(AC_VALIDATE_CACHE_SYSTEM_TYPE, [
878 AC_REQUIRE([AC_CANONICAL_SYSTEM])
879 AC_MSG_CHECKING([config.cache system type])
880 if { test x"${ac_cv_host_system_type+set}" = x"set" &&
881 test x"$ac_cv_host_system_type" != x"$host"; } ||
882 { test x"${ac_cv_build_system_type+set}" = x"set" &&
883 test x"$ac_cv_build_system_type" != x"$build"; } ||
884 { test x"${ac_cv_target_system_type+set}" = x"set" &&
885 test x"$ac_cv_target_system_type" != x"$target"; }; then
886 AC_MSG_RESULT([different])
888 [AC_MSG_ERROR(["you must remove config.cache and restart configure"])])
890 AC_MSG_RESULT([same])
892 ac_cv_host_system_type="$host"
893 ac_cv_build_system_type="$build"
894 ac_cv_target_system_type="$target"
897 dnl We use this until autoconf fixes its version.
898 AC_DEFUN(LYX_FUNC_SELECT_ARGTYPES,
899 [AC_MSG_CHECKING([types of arguments for select()])
900 AC_CACHE_VAL(ac_cv_func_select_arg234,dnl
901 [AC_CACHE_VAL(ac_cv_func_select_arg1,dnl
902 [AC_CACHE_VAL(ac_cv_func_select_arg5,dnl
903 [for ac_cv_func_select_arg234 in 'fd_set *' 'int *' 'void *'; do
904 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
906 [#ifdef HAVE_SYS_TYPES_H
907 #include <sys/types.h>
909 #ifdef HAVE_SYS_TIME_H
910 #include <sys/time.h>
912 #ifdef HAVE_SYS_SELECT_H
913 #include <sys/select.h>
915 #ifdef HAVE_SYS_SOCKET_H
916 #include <sys/socket.h>
918 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
919 [ac_not_found=no ; break 3],ac_not_found=yes)
926 if test "$ac_not_found" = yes; then
927 ac_cv_func_select_arg1=int
928 ac_cv_func_select_arg234='int *'
929 ac_cv_func_select_arg5='struct timeval *'
931 AC_MSG_RESULT([$ac_cv_func_select_arg1,$ac_cv_func_select_arg234,$ac_cv_func_select_arg5])
932 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG1,$ac_cv_func_select_arg1,
933 [Define to the type of arg1 for select().])
934 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG234,($ac_cv_func_select_arg234),
935 [Define to the type of args 2, 3 and 4 for select().])
936 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG5,($ac_cv_func_select_arg5),
937 [Define to the type of arg5 for select().])
940 ### Check which frontend we want to use. The default is XForms
942 AC_DEFUN(LYX_USE_FRONTEND,
943 [AC_MSG_CHECKING([what frontend should be used as main GUI])
944 AC_ARG_WITH(frontend,
945 [ --with-frontend=THIS Use THIS frontend as main GUI:
946 Possible values: xforms, qt2, gnome],
947 [lyx_use_frontend="$withval"], [lyx_use_frontend="xforms"])
948 AC_MSG_RESULT($lyx_use_frontend)
950 AC_SUBST(FRONTEND_GUILIB)
951 AC_SUBST(FRONTEND_LDFLAGS)
952 AC_SUBST(FRONTEND_INCLUDES)
953 AC_SUBST(FRONTEND_LIBS)
957 dnl Check things are declared in headers to avoid errors or warnings.
958 dnl Called like LYX_CHECK_DECL(function, headerfile)
959 dnl Defines HAVE_DECL_{FUNCTION}
960 AC_DEFUN(LYX_CHECK_DECL,
961 [AC_MSG_CHECKING(if $1 is declared by header $2)
962 tr_func=`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
964 tr_hdr=`echo $2 | tr . _`
965 AC_CACHE_VAL([lyx_cv_declare_${tr_hdr}_$1],
966 [AC_EGREP_HEADER($1, $2, [eval "lyx_cv_declare_${tr_hdr}_$1=yes"], [eval "lyx_cv_declare_${tr_hdr}_$1=no"])])
967 if eval "test \"\${lyx_cv_declare_${tr_hdr}_$1}\" = \"yes\""; then
968 AC_DEFINE_UNQUOTED(HAVE_DECL_${tr_func})
974 dnl This is the multiple headers version of the LYX_CHECK_DECL macro above.
975 dnl Called like LYX_CHECK_DECL_HDRS(function, file1 file2 file3)
976 AC_DEFUN(LYX_CHECK_DECL_HDRS,
979 tr_hdr=`echo $I | tr . _`
980 if test "${got}" = "no"; then
981 LYX_CHECK_DECL($1, $I)
983 if eval "test \"\${lyx_cv_declare_${tr_hdr}_$1}\" = \"yes\""; then
989 ## ------------------------------------------------------------------------
990 ## Find a file (or one of more files in a list of dirs)
991 ## ------------------------------------------------------------------------
993 AC_DEFUN(AC_FIND_FILE,
1000 if test -r "$i/$j"; then
1008 dnl just a wrapper to clean up configure.in
1009 AC_DEFUN(LYX_PROG_LIBTOOL,
1011 AC_REQUIRE([AC_ENABLE_SHARED])
1012 AC_REQUIRE([AC_ENABLE_STATIC])
1013 dnl libtool is only for C, so I must force him
1014 dnl to find the correct flags for C++
1016 ac_save_cflags="$CFLAGS"
1019 AM_PROG_LIBTOOL dnl for libraries
1021 CFLAGS="$ac_save_cflags"