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],[
10 echo "configuring LyX version $VERSION"
11 if echo AC_PACKAGE_VERSION | grep 'cvs' >/dev/null ; then
13 AC_DEFINE(DEVEL_VERSION, 1, [Define if you are building a development version of LyX])
14 echo "WARNING: This is a development version. Expect bugs."
18 if echo AC_PACKAGE_VERSION | grep 'pre' > /dev/null ; then
20 echo "WARNING: This is a prerelease. Be careful and backup your documents."
24 AC_SUBST(lyx_devel_version)])
27 dnl Define the option to set a LyX version on installed executables and directories
30 AC_DEFUN([LYX_VERSION_SUFFIX],[
31 AC_MSG_CHECKING([for install target])
32 RPM_VERSION_SUFFIX='""'
33 AC_ARG_WITH(version-suffix,
34 [ --with-version-suffix[=<version>] install lyx files as lyx<version>],
35 [if test "x$withval" = "xyes";
38 ac_configure_args=`echo $ac_configure_args | sed "s,--with-version-suffix,--with-version-suffix=$withval,"`
40 PACKAGE="$PACKAGE$withval"
41 program_suffix=$withval
42 RPM_VERSION_SUFFIX="--with-version-suffix=$withval"])
43 AC_SUBST(RPM_VERSION_SUFFIX)
44 AC_MSG_RESULT([$PACKAGE])
48 dnl Usage: LYX_ERROR(message) Displays the warning "message" and sets the
49 dnl flag lyx_error to yes.
50 AC_DEFUN([LYX_ERROR],[
51 lyx_error_txt="$lyx_error_txt
57 dnl Usage: LYX_WARNING(message) Displays the warning "message" and sets the
58 dnl flag lyx_warning to yes.
59 AC_DEFUN([LYX_WARNING],[
60 lyx_warning_txt="$lyx_warning_txt
66 dnl Usage: LYX_LIB_ERROR(file,library) Displays an error message indication
67 dnl that 'file' cannot be found because 'lib' may be uncorrectly installed.
68 AC_DEFUN([LYX_LIB_ERROR],[
69 LYX_ERROR([Cannot find $1. Please check that the $2 library
70 is correctly installed on your system.])])
73 dnl Usage: LYX_CHECK_ERRORS Displays a warning message if a LYX_ERROR
74 dnl has occured previously.
75 AC_DEFUN([LYX_CHECK_ERRORS],[
76 if test x$lyx_error = xyes; then
78 **** The following problems have been detected by configure.
79 **** Please check the messages below before running 'make'.
80 **** (see the section 'Problems' in the INSTALL file)
86 if test x$lyx_warning = xyes; then
88 === The following minor problems have been detected by configure.
89 === Please check the messages below before running 'make'.
90 === (see the section 'Problems' in the INSTALL file)
95 Configuration of LyX was successful.
96 Type 'make' to compile the program,
97 and then 'make install' to install it.
102 dnl LYX_SEARCH_PROG(VARIABLE-NAME,PROGRAMS-LIST,ACTION-IF-FOUND)
104 define(LYX_SEARCH_PROG,[dnl
105 for ac_prog in $2 ; do
106 # Extract the first word of "$ac_prog", so it can be a program name with args.
107 set dummy $ac_prog ; ac_word=$[2]
108 if test -z "[$]$1"; then
109 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
110 for ac_dir in $PATH; do
111 test -z "$ac_dir" && ac_dir=.
112 if test -f [$ac_dir/$ac_word]; then
120 if test -n "[$]$1"; then
126 test -n "[$]$1" && break
131 AC_DEFUN([LYX_PROG_CXX_WORKS],
133 cat >conftest.C <<EOF
135 // we require the mutable keyword
138 // we require namespace support
146 $CXX -c $CXXFLAGS $CPPFLAGS conftest.C >&5 || CXX=
147 rm -f conftest.C conftest.o conftest.obj || true
151 AC_DEFUN([LYX_PROG_CXX],
152 [AC_MSG_CHECKING([for a good enough C++ compiler])
153 LYX_SEARCH_PROG(CXX, $CXX $CCC g++ gcc c++ CC cxx xlC cc++, [LYX_PROG_CXX_WORKS])
155 if test -z "$CXX" ; then
156 AC_MSG_ERROR([Unable to find a good enough C++ compiler])
162 ### We might want to get or shut warnings.
163 AC_ARG_ENABLE(warnings,
164 AC_HELP_STRING([--enable-warnings],[tell the compiler to display more warnings]),,
165 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $ac_cv_prog_gxx = yes ; then
170 if test x$enable_warnings = xyes ; then
171 lyx_flags="warnings $lyx_flags"
172 AC_DEFINE(WITH_WARNINGS, 1,
173 [Define this if you want to see the warning directives put here and
174 there by the developpers to get attention])
177 ### We might want to disable debug
179 AC_HELP_STRING([--enable-debug],[enable debug information]),,
180 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes ; then
186 AC_ARG_ENABLE(stdlib-debug,
187 AC_HELP_STRING([--enable-stdlib-debug],[enable debug mode in the standard library]),,
188 [ if test $lyx_devel_version = yes ; then
189 enable_stdlib_debug=yes;
191 enable_stdlib_debug=no;
194 AC_ARG_ENABLE(concept-checks,
195 AC_HELP_STRING([--enable-concept-checks],[enable concept checks]),,
196 [ if test $lyx_devel_version = yes -o $lyx-prerelease = yes ; then
197 enable_concept_checks=yes;
199 enable_concept_checks=no;
202 AC_ARG_ENABLE(profiling,
203 AC_HELP_STRING([--enable-profiling],[enable profiling]),,
204 enable_profiling=no;)
206 ### set up optimization
207 AC_ARG_ENABLE(optimization,
208 AC_HELP_STRING([--enable-optimization[=value]],[enable compiler optimisation]),,
209 enable_optimization=yes;)
210 case $enable_optimization in
212 if test $lyx_devel_version = yes ; then
218 *) lyx_opt=${enable_optimization};;
222 AC_HELP_STRING([--enable-pch],[enable precompiled headers]),,
226 # set the compiler options correctly.
227 if test x$GXX = xyes; then
228 dnl Useful for global version info
229 gxx_version=`${CXX} -dumpversion`
230 CXX_VERSION="($gxx_version)"
232 if test "$ac_test_CXXFLAGS" = set; then
233 CXXFLAGS="$ac_save_CXXFLAGS"
237 if test x$enable_debug = xyes ; then
239 CXXFLAGS="-g $CXXFLAGS"
241 if test x$enable_profiling = xyes ; then
243 CXXFLAGS="-pg $CXXFLAGS"
244 LDFLAGS="-pg $LDFLAGS"
246 if test x$enable_warnings = xyes ; then
249 CPPFLAGS="-W -Wall $CPPFLAGS"
252 CPPFLAGS="-Wextra -Wall $CPPFLAGS "
258 2.95.1) AM_CXXFLAGS="-fpermissive -ftemplate-depth-30";;
259 2.95.*) AM_CXXFLAGS="-Wno-non-template-friend -ftemplate-depth-30";;
260 2.96*) AM_CXXFLAGS="-fno-exceptions -ftemplate-depth-30 -Wno-non-template-friend";;
261 3.1*) AM_CXXFLAGS="-finline-limit=500 -fno-exceptions";;
262 3.2*|3.3*) AM_CXXFLAGS="-fno-exceptions";;
264 AM_CXXFLAGS="-fno-exceptions"
265 test $enable_pch = yes && lyx_pch_comp=yes
269 if test x$enable_stdlib_debug = xyes ; then
272 lyx_flags="stdlib-debug $lyx_flags"
273 AC_DEFINE(_GLIBCXX_DEBUG, 1, [libstdc++ debug mode])
274 AC_DEFINE(_GLIBCXX_DEBUG_PEDANTIC, 1, [libstdc++ pedantic debug mode])
278 if test x$enable_concept_checks = xyes ; then
281 lyx_flags="concept-checks $lyx_flags"
282 AC_DEFINE(_GLIBCPP_CONCEPT_CHECKS, 1, [libstdc++ concept checking])
285 lyx_flags="concept-checks $lyx_flags"
286 AC_DEFINE(_GLIBCXX_CONCEPT_CHECKS, 1, [libstdc++ concept checking])
291 test "$lyx_pch_comp" = yes && lyx_flags="pch $lyx_flags"
292 AM_CONDITIONAL(LYX_BUILD_PCH, test "$lyx_pch_comp" = yes)
296 dnl NOT USED CURRENTLY*************************************
297 dnl Usage: LYX_CXX_RTTI : checks whether the C++ compiler
299 AC_DEFUN([LYX_CXX_RTTI],[
300 ### Check whether the compiler supports runtime type information
301 AC_CACHE_CHECK(whether the C++ compiler supports RTTI,lyx_cv_rtti,
305 virtual int tag() { return 0; }
307 class derived1 : public rtti {
309 int tag() { return 1; }
311 class derived2 : public rtti {
313 int tag() { return 2; }
316 derived1 * foo1 = new derived1();
317 derived2 * foo2 = new derived2();
319 derived1 * bar1 = dynamic_cast<derived1 *>(bar);
323 bar1 = dynamic_cast<derived1 *>(bar);
328 ],lyx_cv_rtti=yes,lyx_cv_rtti=no,lyx_cv_rtti=no)
330 if test x$lyx_cv_rtti = xyes ; then
331 AC_DEFINE(HAVE_RTTI, 1,
332 [Define to 1 if your compiler supports runtime type information])
336 dnl Usage: LYX_CXX_EXPLICIT : checks whether the C++ compiler
337 dnl understands the "explicit" directive.
338 AC_DEFUN([LYX_CXX_EXPLICIT],[
339 ### Check whether the compiler understands the keyword `explicit'
340 AC_CACHE_CHECK(whether the C++ compiler understands explicit,lyx_cv_explicit,
345 };],,lyx_cv_explicit=yes,lyx_cv_explicit=no)
347 if test $lyx_cv_explicit = no ; then
348 AC_DEFINE(explicit,[ ],
349 [Define to nothing if your compiler does not understand the
350 'explicit' directive])
354 dnl NOT USED CURRENTLY*************************************
355 dnl Usage: LYX_CXX_STL_STACK : checks whether the C++ compiler
356 dnl has a working stl stack template
357 AC_DEFUN([LYX_CXX_STL_STACK],[
358 AC_CACHE_CHECK(for broken STL stack template,lyx_cv_broken_stack,
365 ],lyx_cv_broken_stack=no,lyx_cv_broken_stack=yes)
367 if test $lyx_cv_broken_stack = yes ; then
368 AC_DEFINE(BROKEN_STL_STACK, 1,
369 [Define if you have the STL from libg++ 2.7.x, where stack<> is not defined
374 dnl Usage: LYX_STD_COUNT : checks wherer the C++ library have a conforming
375 dnl count template, if not the old HP version is assumed.
376 AC_DEFUN([LYX_STD_COUNT],[
377 AC_CACHE_CHECK(for conforming std::count,lyx_cv_std_count,
381 int countChar(char * b, char * e, char const c)
383 return count(b, e, c);
387 int i = countChar(a, a + 5, 'l');
388 ],lyx_cv_std_count=yes,lyx_cv_std_count=no)
390 if test $lyx_cv_std_count = yes ; then
391 AC_DEFINE(HAVE_STD_COUNT, 1,
392 [Define if you have a conforming std::count template, otherwise HP version of count template is assumed.])
396 dnl Usage: LYX_CXX_STL_MODERN_STREAMS : checks whether the C++ compiler
397 dnl supports modern STL streams
398 AC_DEFUN([LYX_CXX_STL_MODERN_STREAMS],[
399 AC_CACHE_CHECK(for modern STL streams,lyx_cv_modern_streams,
403 std::streambuf * test = std::cerr.rdbuf();
405 ],lyx_cv_modern_streams=yes,lyx_cv_modern_streams=no)
407 if test $lyx_cv_modern_streams = yes ; then
408 AC_DEFINE(MODERN_STL_STREAMS, 1,
409 [Define if you have modern standard-compliant STL streams])
413 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
415 AC_DEFUN([LYX_USE_INCLUDED_BOOST],[
416 AC_ARG_WITH(included-boost,
417 [ --with-included-boost use the boost lib supplied with LyX],
418 [lyx_cv_with_included_boost=$withval
419 AC_MSG_RESULT([$with_included_boost])],
420 [lyx_cv_with_included_boost=yes])
421 AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
425 dnl NOT USED CURRENTLY*************************************
427 AC_DEFUN([LYX_CXX_PARTIAL], [
428 AC_REQUIRE([AC_PROG_CXX])
429 AC_CACHE_CHECK([if C++ compiler supports partial specialization],
430 [lyx_cv_cxx_partial_specialization],
433 template<class T, class K>
437 template<class T> class k<void,T> { };
442 lyx_cv_cxx_partial_specialization=yes
444 lyx_cv_cxx_partial_specialization=no
447 if test x$lyx_cv_cxx_partial_specialization = xyes ; then
448 AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1,
449 [Defined if your compiler supports partial specialization.])
454 dnl Usage: LYX_CXX_GLOBAL_CSTD: checks whether C library functions
455 dnl are already in the global namespace
456 AC_DEFUN([LYX_CXX_GLOBAL_CSTD],[
457 AC_CACHE_CHECK(whether C library functions are already in the global namespace,
458 lyx_cv_cxx_global_cstd,
464 ],[lyx_cv_cxx_global_cstd=no],[lyx_cv_cxx_global_cstd=yes])])
465 if test x$lyx_cv_cxx_global_cstd = xyes; then
466 AC_DEFINE(CXX_GLOBAL_CSTD,1,
467 [Define if your C++ compiler puts C library functions in the global namespace])
472 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
473 dnl [default-yes-value])
474 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
475 dnl resulting directory name in 'dir-var-name'.
476 AC_DEFUN([LYX_WITH_DIR],[
477 AC_ARG_WITH($1,[ --with-$1 specify $2])
478 AC_MSG_CHECKING([for $2])
479 if test -z "$with_$3"; then
480 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
482 test "x$with_$3" = xyes && with_$3=$5
485 AC_MSG_RESULT($lyx_cv_$3)])
488 dnl Usage: LYX_LOOP_DIR(value,action)
489 dnl Executes action for values of variable `dir' in `values'. `values' can
490 dnl use ":" as a separator.
491 AC_DEFUN([LYX_LOOP_DIR],[
492 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
493 for dir in `eval "echo $1"`; do
494 if test ! "$dir" = NONE; then
495 test ! -d "$dir" && AC_MSG_ERROR([\"$dir\" is not a directory])
503 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
505 AC_DEFUN([LYX_ADD_LIB_DIR],[
507 if test "`(uname) 2>/dev/null`" = SunOS &&
508 uname -r | grep '^5' >/dev/null; then
509 if test $ac_cv_prog_gxx = yes ; then
510 $1="${$1} -Wl[,]-R$2"
517 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
519 AC_DEFUN([LYX_ADD_INC_DIR],[$1="${$1} -I$2 "])
521 ### Check for a headers existence and location iff it exists
522 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
523 ## It almost works. I've tried a few variations but they give errors
524 ## of one sort or other: bad substitution or file not found etc. The
525 ## actual header _is_ found though and the cache variable is set however
526 ## the reported setting (on screen) is equal to $ac_safe for some unknown
528 ## Additionally, autoheader can't figure out what to use as the name in
529 ## the config.h.in file so we need to write our own entries there -- one for
530 ## each header in the form PATH_HEADER_NAME_H
532 AC_DEFUN([LYX_PATH_HEADER],
533 [ AC_CHECK_HEADER($1,[
534 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
535 ### the only remaining problem is getting the second parameter to this
536 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
537 ### of $ac_safe being printed.
538 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
539 [ cat > conftest.$ac_ext <<EOF
540 #line __oline__ "configure"
541 #include "confdefs.h"
545 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
546 grep $1 2>/dev/null | \
547 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
548 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
550 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
552 ### end of LYX_PATH_HEADER
554 ### Check which frontends we want to use. The default is XForms only
556 AC_DEFUN([LYX_USE_FRONTENDS],
557 [AC_MSG_CHECKING([what frontend should be used for the GUI])
558 AC_ARG_WITH(frontend,
559 [ --with-frontend=THIS Use THIS frontend as main GUI:
560 Possible values: xforms, qt, gtk(EXPERIMENTAL)],
561 [FRONTENDS="$withval"])
562 if test "x$FRONTENDS" = x ; then
564 AC_ERROR("Please select a frontend using --with-frontend")
566 AC_MSG_RESULT($FRONTENDS)
568 AC_SUBST(FRONTENDS_SUBDIRS)
569 AC_SUBST(FRONTENDS_PROGS)
573 ## Check what kind of packaging should be used at install time.
574 ## The default is autodetected.
575 AC_DEFUN([LYX_USE_PACKAGING],
576 [AC_MSG_CHECKING([what packaging should be used])
577 AC_ARG_WITH(packaging,
578 [ --with-packaging=THIS Use THIS packaging for installation:
579 Possible values: posix, windows, macosx],
580 [lyx_use_packaging="$withval"], [
582 *-apple-darwin*) lyx_use_packaging=macosx ;;
583 *-pc-mingw32*) lyx_use_packaging=windows;;
584 *) lyx_use_packaging=posix;;
586 AC_MSG_RESULT($lyx_use_packaging)
587 case $lyx_use_packaging in
588 macosx) AC_DEFINE(USE_MACOSX_PACKAGING, 1, [Define to 1 if LyX should use a MacOS X application bundle file layout])
590 default_prefix="/Applications/LyX.app"
591 bindir='${prefix}/Contents/MacOS'
592 libdir='${prefix}/Contents/Resources'
593 datadir='${prefix}/Contents/Resources'
594 mandir='${prefix}/Contents/Resources/man' ;;
595 windows) AC_DEFINE(USE_WINDOWS_PACKAGING, 1, [Define to 1 if LyX should use a Windows-style file layout])
597 default_prefix="C:/Program Files/LyX"
598 bindir='${prefix}/bin'
599 libdir='${prefix}/Resources'
600 datadir='${prefix}/Resources'
601 mandir='${prefix}/Resources/man' ;;
602 posix) AC_DEFINE(USE_POSIX_PACKAGING, 1, [Define to 1 if LyX should use a POSIX-style file layout])
604 default_prefix=$ac_default_prefix ;;
605 *) LYX_ERROR([Unknown packaging type $lyx_use_packaging]) ;;
610 ## ------------------------------------------------------------------------
611 ## Find a file (or one of more files in a list of dirs)
612 ## ------------------------------------------------------------------------
614 AC_DEFUN([AC_FIND_FILE],
621 if test -r "$i/$j"; then
629 dnl just a wrapper to clean up configure.in
630 AC_DEFUN([LYX_PROG_LIBTOOL],
632 AC_REQUIRE([AC_ENABLE_SHARED])
633 AC_REQUIRE([AC_ENABLE_STATIC])
634 dnl libtool is only for C, so I must force him
635 dnl to find the correct flags for C++
637 ac_save_cflags="$CFLAGS"
640 AC_PROG_LIBTOOL dnl for libraries
642 CFLAGS="$ac_save_cflags"
646 ## ------------------------------------------------------------------------
647 ## Check whether mkdir() is mkdir or _mkdir, and whether it takes
648 ## one or two arguments.
650 ## http://ac-archive.sourceforge.net/C_Support/ac_func_mkdir.html
651 ## ------------------------------------------------------------------------
653 AC_DEFUN([AC_FUNC_MKDIR],
654 [AC_CHECK_FUNCS([mkdir _mkdir])
655 AC_CACHE_CHECK([whether mkdir takes one argument],
656 [ac_cv_mkdir_takes_one_arg],
658 #include <sys/stat.h>
663 [ac_cv_mkdir_takes_one_arg=yes], [ac_cv_mkdir_takes_one_arg=no])])
664 if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then
665 AC_DEFINE([MKDIR_TAKES_ONE_ARG], 1,
666 [Define if mkdir takes only one argument.])
671 dnl Set VAR to the canonically resolved absolute equivalent of PATHNAME,
672 dnl (which may be a relative path, and need not refer to any existing
675 dnl On Win32-MSYS build hosts, the returned path is resolved to its true
676 dnl native Win32 path name, (but with slashes, not backslashes).
678 dnl On any other system, it is simply the result which would be obtained
679 dnl if PATHNAME represented an existing directory, and the pwd command was
680 dnl executed in that directory.
681 AC_DEFUN([MSYS_AC_CANONICAL_PATH],
683 ( exec 2>/dev/null; cd / && pwd -W ) | grep ':' >/dev/null &&
684 ac_pwd_w="pwd -W" || ac_pwd_w=pwd
685 until ac_val=`exec 2>/dev/null; cd "$ac_dir" && $ac_pwd_w`
687 ac_dir=`AS_DIRNAME(["$ac_dir"])`
689 ac_dir=`echo "$ac_dir" | sed 's?^[[./]]*??'`
690 ac_val=`echo "$ac_val" | sed 's?/*$[]??'`
691 $1=`echo "$2" | sed "s?^[[./]]*$ac_dir/*?$ac_val/?"'