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" AC_PACKAGE_VERSION
11 if echo AC_PACKAGE_VERSION | grep 'svn' >/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 version suffix])
32 dnl We need the literal double quotes in the rpm spec file
33 RPM_VERSION_SUFFIX='""'
34 AC_ARG_WITH(version-suffix,
35 [ --with-version-suffix[=<version>] install lyx files as lyx<version>],
36 [if test "x$withval" = "xyes";
38 withval="-"AC_PACKAGE_VERSION
39 ac_configure_args=`echo $ac_configure_args | sed "s,--with-version-suffix,--with-version-suffix=$withval,"`
41 version_suffix=$withval
42 RPM_VERSION_SUFFIX="--with-version-suffix=$withval"])
43 AC_SUBST(RPM_VERSION_SUFFIX)
44 AC_MSG_RESULT([$withval])
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 3.1*) AM_CXXFLAGS="-finline-limit=500 ";;
259 3.2*|3.3*) AM_CXXFLAGS="";;
262 test $enable_pch = yes && lyx_pch_comp=yes
266 if test x$enable_stdlib_debug = xyes ; then
269 lyx_flags="stdlib-debug $lyx_flags"
270 AC_DEFINE(_GLIBCXX_DEBUG, 1, [libstdc++ debug mode])
271 AC_DEFINE(_GLIBCXX_DEBUG_PEDANTIC, 1, [libstdc++ pedantic debug mode])
275 if test x$enable_concept_checks = xyes ; then
278 lyx_flags="concept-checks $lyx_flags"
279 AC_DEFINE(_GLIBCPP_CONCEPT_CHECKS, 1, [libstdc++ concept checking])
282 lyx_flags="concept-checks $lyx_flags"
283 AC_DEFINE(_GLIBCXX_CONCEPT_CHECKS, 1, [libstdc++ concept checking])
288 test "$lyx_pch_comp" = yes && lyx_flags="pch $lyx_flags"
289 AM_CONDITIONAL(LYX_BUILD_PCH, test "$lyx_pch_comp" = yes)
293 dnl NOT USED CURRENTLY*************************************
294 dnl Usage: LYX_CXX_RTTI : checks whether the C++ compiler
296 AC_DEFUN([LYX_CXX_RTTI],[
297 ### Check whether the compiler supports runtime type information
298 AC_CACHE_CHECK(whether the C++ compiler supports RTTI,lyx_cv_rtti,
302 virtual int tag() { return 0; }
304 class derived1 : public rtti {
306 int tag() { return 1; }
308 class derived2 : public rtti {
310 int tag() { return 2; }
313 derived1 * foo1 = new derived1();
314 derived2 * foo2 = new derived2();
316 derived1 * bar1 = dynamic_cast<derived1 *>(bar);
320 bar1 = dynamic_cast<derived1 *>(bar);
325 ],lyx_cv_rtti=yes,lyx_cv_rtti=no,lyx_cv_rtti=no)
327 if test x$lyx_cv_rtti = xyes ; then
328 AC_DEFINE(HAVE_RTTI, 1,
329 [Define to 1 if your compiler supports runtime type information])
333 dnl Usage: LYX_CXX_EXPLICIT : checks whether the C++ compiler
334 dnl understands the "explicit" directive.
335 AC_DEFUN([LYX_CXX_EXPLICIT],[
336 ### Check whether the compiler understands the keyword `explicit'
337 AC_CACHE_CHECK(whether the C++ compiler understands explicit,lyx_cv_explicit,
342 };],,lyx_cv_explicit=yes,lyx_cv_explicit=no)
344 if test $lyx_cv_explicit = no ; then
345 AC_DEFINE(explicit,[ ],
346 [Define to nothing if your compiler does not understand the
347 'explicit' directive])
351 dnl NOT USED CURRENTLY*************************************
352 dnl Usage: LYX_CXX_STL_STACK : checks whether the C++ compiler
353 dnl has a working stl stack template
354 AC_DEFUN([LYX_CXX_STL_STACK],[
355 AC_CACHE_CHECK(for broken STL stack template,lyx_cv_broken_stack,
362 ],lyx_cv_broken_stack=no,lyx_cv_broken_stack=yes)
364 if test $lyx_cv_broken_stack = yes ; then
365 AC_DEFINE(BROKEN_STL_STACK, 1,
366 [Define if you have the STL from libg++ 2.7.x, where stack<> is not defined
371 dnl Usage: LYX_STD_COUNT : checks wherer the C++ library have a conforming
372 dnl count template, if not the old HP version is assumed.
373 AC_DEFUN([LYX_STD_COUNT],[
374 AC_CACHE_CHECK(for conforming std::count,lyx_cv_std_count,
378 int countChar(char * b, char * e, char const c)
380 return count(b, e, c);
384 int i = countChar(a, a + 5, 'l');
385 ],lyx_cv_std_count=yes,lyx_cv_std_count=no)
387 if test $lyx_cv_std_count = yes ; then
388 AC_DEFINE(HAVE_STD_COUNT, 1,
389 [Define if you have a conforming std::count template, otherwise HP version of count template is assumed.])
393 dnl Usage: LYX_CXX_STL_MODERN_STREAMS : checks whether the C++ compiler
394 dnl supports modern STL streams
395 AC_DEFUN([LYX_CXX_STL_MODERN_STREAMS],[
396 AC_CACHE_CHECK(for modern STL streams,lyx_cv_modern_streams,
400 std::streambuf * test = std::cerr.rdbuf();
402 ],lyx_cv_modern_streams=yes,lyx_cv_modern_streams=no)
404 if test $lyx_cv_modern_streams = yes ; then
405 AC_DEFINE(MODERN_STL_STREAMS, 1,
406 [Define if you have modern standard-compliant STL streams])
410 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
412 AC_DEFUN([LYX_USE_INCLUDED_BOOST],[
413 AC_ARG_WITH(included-boost,
414 [ --with-included-boost use the boost lib supplied with LyX],
415 [lyx_cv_with_included_boost=$withval
416 AC_MSG_RESULT([$with_included_boost])],
417 [lyx_cv_with_included_boost=yes])
418 AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
422 dnl NOT USED CURRENTLY*************************************
424 AC_DEFUN([LYX_CXX_PARTIAL], [
425 AC_REQUIRE([AC_PROG_CXX])
426 AC_CACHE_CHECK([if C++ compiler supports partial specialization],
427 [lyx_cv_cxx_partial_specialization],
430 template<class T, class K>
434 template<class T> class k<void,T> { };
439 lyx_cv_cxx_partial_specialization=yes
441 lyx_cv_cxx_partial_specialization=no
444 if test x$lyx_cv_cxx_partial_specialization = xyes ; then
445 AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1,
446 [Defined if your compiler supports partial specialization.])
451 dnl Usage: LYX_CXX_GLOBAL_CSTD: checks whether C library functions
452 dnl are already in the global namespace
453 AC_DEFUN([LYX_CXX_GLOBAL_CSTD],[
454 AC_CACHE_CHECK(whether C library functions are already in the global namespace,
455 lyx_cv_cxx_global_cstd,
461 ],[lyx_cv_cxx_global_cstd=no],[lyx_cv_cxx_global_cstd=yes])])
462 if test x$lyx_cv_cxx_global_cstd = xyes; then
463 AC_DEFINE(CXX_GLOBAL_CSTD,1,
464 [Define if your C++ compiler puts C library functions in the global namespace])
469 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
470 dnl [default-yes-value])
471 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
472 dnl resulting directory name in 'dir-var-name'.
473 AC_DEFUN([LYX_WITH_DIR],[
474 AC_ARG_WITH($1,[ --with-$1 specify $2])
475 AC_MSG_CHECKING([for $2])
476 if test -z "$with_$3"; then
477 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
479 test "x$with_$3" = xyes && with_$3=$5
482 AC_MSG_RESULT($lyx_cv_$3)])
485 dnl Usage: LYX_LOOP_DIR(value,action)
486 dnl Executes action for values of variable `dir' in `values'. `values' can
487 dnl use ":" as a separator.
488 AC_DEFUN([LYX_LOOP_DIR],[
489 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
490 for dir in `eval "echo $1"`; do
491 if test ! "$dir" = NONE; then
492 test ! -d "$dir" && AC_MSG_ERROR([\"$dir\" is not a directory])
500 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
502 AC_DEFUN([LYX_ADD_LIB_DIR],[
504 if test "`(uname) 2>/dev/null`" = SunOS &&
505 uname -r | grep '^5' >/dev/null; then
506 if test $ac_cv_prog_gxx = yes ; then
507 $1="${$1} -Wl[,]-R$2"
514 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
516 AC_DEFUN([LYX_ADD_INC_DIR],[$1="${$1} -I$2 "])
518 ### Check for a headers existence and location iff it exists
519 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
520 ## It almost works. I've tried a few variations but they give errors
521 ## of one sort or other: bad substitution or file not found etc. The
522 ## actual header _is_ found though and the cache variable is set however
523 ## the reported setting (on screen) is equal to $ac_safe for some unknown
525 ## Additionally, autoheader can't figure out what to use as the name in
526 ## the config.h.in file so we need to write our own entries there -- one for
527 ## each header in the form PATH_HEADER_NAME_H
529 AC_DEFUN([LYX_PATH_HEADER],
530 [ AC_CHECK_HEADER($1,[
531 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
532 ### the only remaining problem is getting the second parameter to this
533 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
534 ### of $ac_safe being printed.
535 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
536 [ cat > conftest.$ac_ext <<EOF
537 #line __oline__ "configure"
538 #include "confdefs.h"
542 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
543 grep $1 2>/dev/null | \
544 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
545 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
547 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
549 ### end of LYX_PATH_HEADER
551 ### Check which frontends we want to use. The default is XForms only
553 AC_DEFUN([LYX_USE_FRONTENDS],
554 [AC_MSG_CHECKING([what frontend should be used for the GUI])
555 AC_ARG_WITH(frontend,
556 [ --with-frontend=THIS Use THIS frontend as main GUI:
557 Possible values: xforms, qt, gtk(EXPERIMENTAL)],
558 [FRONTENDS="$withval"])
559 if test "x$FRONTENDS" = x ; then
561 AC_ERROR("Please select a frontend using --with-frontend")
563 AC_MSG_RESULT($FRONTENDS)
565 AC_SUBST(FRONTENDS_SUBDIRS)
566 AC_SUBST(FRONTENDS_PROGS)
570 ## Check what kind of packaging should be used at install time.
571 ## The default is autodetected.
572 AC_DEFUN([LYX_USE_PACKAGING],
573 [AC_MSG_CHECKING([what packaging should be used])
574 AC_ARG_WITH(packaging,
575 [ --with-packaging=THIS Use THIS packaging for installation:
576 Possible values: posix, windows, macosx],
577 [lyx_use_packaging="$withval"], [
579 *-apple-darwin*) lyx_use_packaging=macosx ;;
580 *-pc-mingw32*) lyx_use_packaging=windows;;
581 *) lyx_use_packaging=posix;;
583 AC_MSG_RESULT($lyx_use_packaging)
584 case $lyx_use_packaging in
585 macosx) AC_DEFINE(USE_MACOSX_PACKAGING, 1, [Define to 1 if LyX should use a MacOS X application bundle file layout])
586 PACKAGE=LyX${version_suffix}
587 default_prefix="/Applications/${PACKAGE}.app"
588 bindir='${prefix}/Contents/MacOS'
589 libdir='${prefix}/Contents/Resources'
590 datadir='${prefix}/Contents/Resources'
591 pkgdatadir='${datadir}'
592 mandir='${datadir}/man' ;;
593 windows) AC_DEFINE(USE_WINDOWS_PACKAGING, 1, [Define to 1 if LyX should use a Windows-style file layout])
594 PACKAGE=LyX${version_suffix}
595 default_prefix="C:/Program Files/${PACKAGE}"
596 bindir='${prefix}/bin'
597 libdir='${prefix}/Resources'
598 datadir='${prefix}/Resources'
599 pkgdatadir='${datadir}'
600 mandir='${prefix}/Resources/man' ;;
601 posix) AC_DEFINE(USE_POSIX_PACKAGING, 1, [Define to 1 if LyX should use a POSIX-style file layout])
602 PACKAGE=lyx${version_suffix}
603 program_suffix=$version_suffix
604 pkgdatadir='${datadir}/${PACKAGE}'
605 default_prefix=$ac_default_prefix ;;
606 *) LYX_ERROR([Unknown packaging type $lyx_use_packaging]) ;;
609 AC_SUBST(program_suffix)
613 ## ------------------------------------------------------------------------
614 ## Find a file (or one of more files in a list of dirs)
615 ## ------------------------------------------------------------------------
617 AC_DEFUN([AC_FIND_FILE],
624 if test -r "$i/$j"; then
632 dnl just a wrapper to clean up configure.in
633 AC_DEFUN([LYX_PROG_LIBTOOL],
635 AC_REQUIRE([AC_ENABLE_SHARED])
636 AC_REQUIRE([AC_ENABLE_STATIC])
637 dnl libtool is only for C, so I must force him
638 dnl to find the correct flags for C++
640 ac_save_cflags="$CFLAGS"
643 AC_PROG_LIBTOOL dnl for libraries
645 CFLAGS="$ac_save_cflags"
649 ## ------------------------------------------------------------------------
650 ## Check whether mkdir() is mkdir or _mkdir, and whether it takes
651 ## one or two arguments.
653 ## http://ac-archive.sourceforge.net/C_Support/ac_func_mkdir.html
654 ## ------------------------------------------------------------------------
656 AC_DEFUN([AC_FUNC_MKDIR],
657 [AC_CHECK_FUNCS([mkdir _mkdir])
658 AC_CACHE_CHECK([whether mkdir takes one argument],
659 [ac_cv_mkdir_takes_one_arg],
661 #include <sys/stat.h>
666 [ac_cv_mkdir_takes_one_arg=yes], [ac_cv_mkdir_takes_one_arg=no])])
667 if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then
668 AC_DEFINE([MKDIR_TAKES_ONE_ARG], 1,
669 [Define if mkdir takes only one argument.])
674 dnl Set VAR to the canonically resolved absolute equivalent of PATHNAME,
675 dnl (which may be a relative path, and need not refer to any existing
678 dnl On Win32-MSYS build hosts, the returned path is resolved to its true
679 dnl native Win32 path name, (but with slashes, not backslashes).
681 dnl On any other system, it is simply the result which would be obtained
682 dnl if PATHNAME represented an existing directory, and the pwd command was
683 dnl executed in that directory.
684 AC_DEFUN([MSYS_AC_CANONICAL_PATH],
686 ( exec 2>/dev/null; cd / && pwd -W ) | grep ':' >/dev/null &&
687 ac_pwd_w="pwd -W" || ac_pwd_w=pwd
688 until ac_val=`exec 2>/dev/null; cd "$ac_dir" && $ac_pwd_w`
690 ac_dir=`AS_DIRNAME(["$ac_dir"])`
692 ac_dir=`echo "$ac_dir" | sed 's?^[[./]]*??'`
693 ac_val=`echo "$ac_val" | sed 's?/*$[]??'`
694 $1=`echo "$2" | sed "s?^[[./]]*$ac_dir/*?$ac_val/?"'