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 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";
37 withval="-"AC_PACKAGE_VERSION
38 ac_configure_args=`echo $ac_configure_args | sed "s,--with-version-suffix,--with-version-suffix=$withval,"`
40 version_suffix=$withval
41 RPM_VERSION_SUFFIX="--with-version-suffix=$withval"])
42 AC_SUBST(RPM_VERSION_SUFFIX)
43 AC_MSG_RESULT([$withval])
47 dnl Usage: LYX_ERROR(message) Displays the warning "message" and sets the
48 dnl flag lyx_error to yes.
49 AC_DEFUN([LYX_ERROR],[
50 lyx_error_txt="$lyx_error_txt
56 dnl Usage: LYX_WARNING(message) Displays the warning "message" and sets the
57 dnl flag lyx_warning to yes.
58 AC_DEFUN([LYX_WARNING],[
59 lyx_warning_txt="$lyx_warning_txt
65 dnl Usage: LYX_LIB_ERROR(file,library) Displays an error message indication
66 dnl that 'file' cannot be found because 'lib' may be uncorrectly installed.
67 AC_DEFUN([LYX_LIB_ERROR],[
68 LYX_ERROR([Cannot find $1. Please check that the $2 library
69 is correctly installed on your system.])])
72 dnl Usage: LYX_CHECK_ERRORS Displays a warning message if a LYX_ERROR
73 dnl has occured previously.
74 AC_DEFUN([LYX_CHECK_ERRORS],[
75 if test x$lyx_error = xyes; then
77 **** The following problems have been detected by configure.
78 **** Please check the messages below before running 'make'.
79 **** (see the section 'Problems' in the INSTALL file)
85 if test x$lyx_warning = xyes; then
87 === The following minor problems have been detected by configure.
88 === Please check the messages below before running 'make'.
89 === (see the section 'Problems' in the INSTALL file)
94 Configuration of LyX was successful.
95 Type 'make' to compile the program,
96 and then 'make install' to install it.
101 dnl LYX_SEARCH_PROG(VARIABLE-NAME,PROGRAMS-LIST,ACTION-IF-FOUND)
103 define(LYX_SEARCH_PROG,[dnl
104 for ac_prog in $2 ; do
105 # Extract the first word of "$ac_prog", so it can be a program name with args.
106 set dummy $ac_prog ; ac_word=$[2]
107 if test -z "[$]$1"; then
108 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
109 for ac_dir in $PATH; do
110 test -z "$ac_dir" && ac_dir=.
111 if test -f [$ac_dir/$ac_word]; then
119 if test -n "[$]$1"; then
125 test -n "[$]$1" && break
130 AC_DEFUN([LYX_PROG_CXX_WORKS],
132 cat >conftest.C <<EOF
134 // we require the mutable keyword
137 // we require namespace support
145 $CXX -c $CXXFLAGS $CPPFLAGS conftest.C >&5 || CXX=
146 rm -f conftest.C conftest.o conftest.obj || true
150 AC_DEFUN([LYX_PROG_CXX],
151 [AC_MSG_CHECKING([for a good enough C++ compiler])
152 LYX_SEARCH_PROG(CXX, $CXX $CCC g++ gcc c++ CC cxx xlC cc++, [LYX_PROG_CXX_WORKS])
154 if test -z "$CXX" ; then
155 AC_MSG_ERROR([Unable to find a good enough C++ compiler])
161 ### We might want to get or shut warnings.
162 AC_ARG_ENABLE(warnings,
163 AC_HELP_STRING([--enable-warnings],[tell the compiler to display more warnings]),,
164 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $ac_cv_prog_gxx = yes ; then
169 if test x$enable_warnings = xyes ; then
170 lyx_flags="warnings $lyx_flags"
171 AC_DEFINE(WITH_WARNINGS, 1,
172 [Define this if you want to see the warning directives put here and
173 there by the developpers to get attention])
176 ### We might want to disable debug
178 AC_HELP_STRING([--enable-debug],[enable debug information]),,
179 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes ; then
185 AC_ARG_ENABLE(stdlib-debug,
186 AC_HELP_STRING([--enable-stdlib-debug],[enable debug mode in the standard library]),,
187 [ if test $lyx_devel_version = yes ; then
188 enable_stdlib_debug=yes;
190 enable_stdlib_debug=no;
193 AC_ARG_ENABLE(concept-checks,
194 AC_HELP_STRING([--enable-concept-checks],[enable concept checks]),,
195 [ if test $lyx_devel_version = yes -o $lyx-prerelease = yes ; then
196 enable_concept_checks=yes;
198 enable_concept_checks=no;
201 AC_ARG_ENABLE(profiling,
202 AC_HELP_STRING([--enable-profiling],[enable profiling]),,
203 enable_profiling=no;)
205 ### set up optimization
206 AC_ARG_ENABLE(optimization,
207 AC_HELP_STRING([--enable-optimization[=value]],[enable compiler optimisation]),,
208 enable_optimization=yes;)
209 case $enable_optimization in
211 if test $lyx_devel_version = yes ; then
217 *) lyx_opt=${enable_optimization};;
221 AC_HELP_STRING([--enable-pch],[enable precompiled headers]),,
225 # set the compiler options correctly.
226 if test x$GXX = xyes; then
227 dnl Useful for global version info
228 gxx_version=`${CXX} -dumpversion`
229 CXX_VERSION="($gxx_version)"
231 if test "$ac_test_CXXFLAGS" = set; then
232 CXXFLAGS="$ac_save_CXXFLAGS"
236 if test x$enable_debug = xyes ; then
238 CXXFLAGS="-g $CXXFLAGS"
240 if test x$enable_profiling = xyes ; then
242 CXXFLAGS="-pg $CXXFLAGS"
243 LDFLAGS="-pg $LDFLAGS"
245 if test x$enable_warnings = xyes ; then
248 CPPFLAGS="-W -Wall $CPPFLAGS"
251 CPPFLAGS="-Wextra -Wall $CPPFLAGS "
257 2.95.1) AM_CXXFLAGS="-fpermissive -ftemplate-depth-30";;
258 2.95.*) AM_CXXFLAGS="-Wno-non-template-friend -ftemplate-depth-30";;
259 2.96*) AM_CXXFLAGS="-fno-exceptions -ftemplate-depth-30 -Wno-non-template-friend";;
260 3.1*) AM_CXXFLAGS="-finline-limit=500 -fno-exceptions";;
261 3.2*|3.3*) AM_CXXFLAGS="-fno-exceptions";;
263 AM_CXXFLAGS="-fno-exceptions"
264 test $enable_pch = yes && lyx_pch_comp=yes
268 if test x$enable_stdlib_debug = xyes ; then
271 lyx_flags="stdlib-debug $lyx_flags"
272 AC_DEFINE(_GLIBCXX_DEBUG, 1, [libstdc++ debug mode])
273 AC_DEFINE(_GLIBCXX_DEBUG_PEDANTIC, 1, [libstdc++ pedantic debug mode])
277 if test x$enable_concept_checks = xyes ; then
280 lyx_flags="concept-checks $lyx_flags"
281 AC_DEFINE(_GLIBCPP_CONCEPT_CHECKS, 1, [libstdc++ concept checking])
284 lyx_flags="concept-checks $lyx_flags"
285 AC_DEFINE(_GLIBCXX_CONCEPT_CHECKS, 1, [libstdc++ concept checking])
290 test "$lyx_pch_comp" = yes && lyx_flags="pch $lyx_flags"
291 AM_CONDITIONAL(LYX_BUILD_PCH, test "$lyx_pch_comp" = yes)
295 dnl NOT USED CURRENTLY*************************************
296 dnl Usage: LYX_CXX_RTTI : checks whether the C++ compiler
298 AC_DEFUN([LYX_CXX_RTTI],[
299 ### Check whether the compiler supports runtime type information
300 AC_CACHE_CHECK(whether the C++ compiler supports RTTI,lyx_cv_rtti,
304 virtual int tag() { return 0; }
306 class derived1 : public rtti {
308 int tag() { return 1; }
310 class derived2 : public rtti {
312 int tag() { return 2; }
315 derived1 * foo1 = new derived1();
316 derived2 * foo2 = new derived2();
318 derived1 * bar1 = dynamic_cast<derived1 *>(bar);
322 bar1 = dynamic_cast<derived1 *>(bar);
327 ],lyx_cv_rtti=yes,lyx_cv_rtti=no,lyx_cv_rtti=no)
329 if test x$lyx_cv_rtti = xyes ; then
330 AC_DEFINE(HAVE_RTTI, 1,
331 [Define to 1 if your compiler supports runtime type information])
335 dnl Usage: LYX_CXX_EXPLICIT : checks whether the C++ compiler
336 dnl understands the "explicit" directive.
337 AC_DEFUN([LYX_CXX_EXPLICIT],[
338 ### Check whether the compiler understands the keyword `explicit'
339 AC_CACHE_CHECK(whether the C++ compiler understands explicit,lyx_cv_explicit,
344 };],,lyx_cv_explicit=yes,lyx_cv_explicit=no)
346 if test $lyx_cv_explicit = no ; then
347 AC_DEFINE(explicit,[ ],
348 [Define to nothing if your compiler does not understand the
349 'explicit' directive])
353 dnl NOT USED CURRENTLY*************************************
354 dnl Usage: LYX_CXX_STL_STACK : checks whether the C++ compiler
355 dnl has a working stl stack template
356 AC_DEFUN([LYX_CXX_STL_STACK],[
357 AC_CACHE_CHECK(for broken STL stack template,lyx_cv_broken_stack,
364 ],lyx_cv_broken_stack=no,lyx_cv_broken_stack=yes)
366 if test $lyx_cv_broken_stack = yes ; then
367 AC_DEFINE(BROKEN_STL_STACK, 1,
368 [Define if you have the STL from libg++ 2.7.x, where stack<> is not defined
373 dnl Usage: LYX_STD_COUNT : checks wherer the C++ library have a conforming
374 dnl count template, if not the old HP version is assumed.
375 AC_DEFUN([LYX_STD_COUNT],[
376 AC_CACHE_CHECK(for conforming std::count,lyx_cv_std_count,
380 int countChar(char * b, char * e, char const c)
382 return count(b, e, c);
386 int i = countChar(a, a + 5, 'l');
387 ],lyx_cv_std_count=yes,lyx_cv_std_count=no)
389 if test $lyx_cv_std_count = yes ; then
390 AC_DEFINE(HAVE_STD_COUNT, 1,
391 [Define if you have a conforming std::count template, otherwise HP version of count template is assumed.])
395 dnl Usage: LYX_CXX_STL_MODERN_STREAMS : checks whether the C++ compiler
396 dnl supports modern STL streams
397 AC_DEFUN([LYX_CXX_STL_MODERN_STREAMS],[
398 AC_CACHE_CHECK(for modern STL streams,lyx_cv_modern_streams,
402 std::streambuf * test = std::cerr.rdbuf();
404 ],lyx_cv_modern_streams=yes,lyx_cv_modern_streams=no)
406 if test $lyx_cv_modern_streams = yes ; then
407 AC_DEFINE(MODERN_STL_STREAMS, 1,
408 [Define if you have modern standard-compliant STL streams])
412 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
414 AC_DEFUN([LYX_USE_INCLUDED_BOOST],[
415 AC_ARG_WITH(included-boost,
416 [ --with-included-boost use the boost lib supplied with LyX],
417 [lyx_cv_with_included_boost=$withval
418 AC_MSG_RESULT([$with_included_boost])],
419 [lyx_cv_with_included_boost=yes])
420 AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
424 dnl NOT USED CURRENTLY*************************************
426 AC_DEFUN([LYX_CXX_PARTIAL], [
427 AC_REQUIRE([AC_PROG_CXX])
428 AC_CACHE_CHECK([if C++ compiler supports partial specialization],
429 [lyx_cv_cxx_partial_specialization],
432 template<class T, class K>
436 template<class T> class k<void,T> { };
441 lyx_cv_cxx_partial_specialization=yes
443 lyx_cv_cxx_partial_specialization=no
446 if test x$lyx_cv_cxx_partial_specialization = xyes ; then
447 AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1,
448 [Defined if your compiler supports partial specialization.])
453 dnl Usage: LYX_CXX_GLOBAL_CSTD: checks whether C library functions
454 dnl are already in the global namespace
455 AC_DEFUN([LYX_CXX_GLOBAL_CSTD],[
456 AC_CACHE_CHECK(whether C library functions are already in the global namespace,
457 lyx_cv_cxx_global_cstd,
463 ],[lyx_cv_cxx_global_cstd=no],[lyx_cv_cxx_global_cstd=yes])])
464 if test x$lyx_cv_cxx_global_cstd = xyes; then
465 AC_DEFINE(CXX_GLOBAL_CSTD,1,
466 [Define if your C++ compiler puts C library functions in the global namespace])
471 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
472 dnl [default-yes-value])
473 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
474 dnl resulting directory name in 'dir-var-name'.
475 AC_DEFUN([LYX_WITH_DIR],[
476 AC_ARG_WITH($1,[ --with-$1 specify $2])
477 AC_MSG_CHECKING([for $2])
478 if test -z "$with_$3"; then
479 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
481 test "x$with_$3" = xyes && with_$3=$5
484 AC_MSG_RESULT($lyx_cv_$3)])
487 dnl Usage: LYX_LOOP_DIR(value,action)
488 dnl Executes action for values of variable `dir' in `values'. `values' can
489 dnl use ":" as a separator.
490 AC_DEFUN([LYX_LOOP_DIR],[
491 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
492 for dir in `eval "echo $1"`; do
493 if test ! "$dir" = NONE; then
494 test ! -d "$dir" && AC_MSG_ERROR([\"$dir\" is not a directory])
502 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
504 AC_DEFUN([LYX_ADD_LIB_DIR],[
506 if test "`(uname) 2>/dev/null`" = SunOS &&
507 uname -r | grep '^5' >/dev/null; then
508 if test $ac_cv_prog_gxx = yes ; then
509 $1="${$1} -Wl[,]-R$2"
516 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
518 AC_DEFUN([LYX_ADD_INC_DIR],[$1="${$1} -I$2 "])
520 ### Check for a headers existence and location iff it exists
521 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
522 ## It almost works. I've tried a few variations but they give errors
523 ## of one sort or other: bad substitution or file not found etc. The
524 ## actual header _is_ found though and the cache variable is set however
525 ## the reported setting (on screen) is equal to $ac_safe for some unknown
527 ## Additionally, autoheader can't figure out what to use as the name in
528 ## the config.h.in file so we need to write our own entries there -- one for
529 ## each header in the form PATH_HEADER_NAME_H
531 AC_DEFUN([LYX_PATH_HEADER],
532 [ AC_CHECK_HEADER($1,[
533 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
534 ### the only remaining problem is getting the second parameter to this
535 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
536 ### of $ac_safe being printed.
537 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
538 [ cat > conftest.$ac_ext <<EOF
539 #line __oline__ "configure"
540 #include "confdefs.h"
544 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
545 grep $1 2>/dev/null | \
546 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
547 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
549 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
551 ### end of LYX_PATH_HEADER
553 ### Check which frontends we want to use. The default is XForms only
555 AC_DEFUN([LYX_USE_FRONTENDS],
556 [AC_MSG_CHECKING([what frontend should be used for the GUI])
557 AC_ARG_WITH(frontend,
558 [ --with-frontend=THIS Use THIS frontend as main GUI:
559 Possible values: xforms, qt, gtk(EXPERIMENTAL)],
560 [FRONTENDS="$withval"])
561 if test "x$FRONTENDS" = x ; then
563 AC_ERROR("Please select a frontend using --with-frontend")
565 AC_MSG_RESULT($FRONTENDS)
567 AC_SUBST(FRONTENDS_SUBDIRS)
568 AC_SUBST(FRONTENDS_PROGS)
572 ## Check what kind of packaging should be used at install time.
573 ## The default is autodetected.
574 AC_DEFUN([LYX_USE_PACKAGING],
575 [AC_MSG_CHECKING([what packaging should be used])
576 AC_ARG_WITH(packaging,
577 [ --with-packaging=THIS Use THIS packaging for installation:
578 Possible values: posix, windows, macosx],
579 [lyx_use_packaging="$withval"], [
581 *-apple-darwin*) lyx_use_packaging=macosx ;;
582 *-pc-mingw32*) lyx_use_packaging=windows;;
583 *) lyx_use_packaging=posix;;
585 AC_MSG_RESULT($lyx_use_packaging)
586 case $lyx_use_packaging in
587 macosx) AC_DEFINE(USE_MACOSX_PACKAGING, 1, [Define to 1 if LyX should use a MacOS X application bundle file layout])
588 PACKAGE=LyX${version_suffix}
589 program_suffix=$version_suffix
590 default_prefix="/Applications/${PACKAGE}.app"
591 bindir='${prefix}/Contents/MacOS'
592 libdir='${prefix}/Contents/Resources'
593 datadir='${prefix}/Contents/Resources'
594 pkgdatadir='${datadir}'
595 mandir='${datadir}/man' ;;
596 windows) AC_DEFINE(USE_WINDOWS_PACKAGING, 1, [Define to 1 if LyX should use a Windows-style file layout])
597 PACKAGE=LyX${version_suffix}
598 program_suffix=$version_suffix
599 default_prefix="C:/Program Files/${PACKAGE}"
600 bindir='${prefix}/bin'
601 libdir='${prefix}/Resources'
602 datadir='${prefix}/Resources'
603 pkgdatadir='${datadir}'
604 mandir='${prefix}/Resources/man' ;;
605 posix) AC_DEFINE(USE_POSIX_PACKAGING, 1, [Define to 1 if LyX should use a POSIX-style file layout])
606 PACKAGE=lyx${version_suffix}
607 program_suffix=$version_suffix
608 pkgdatadir='${datadir}/${PACKAGE}'
609 default_prefix=$ac_default_prefix ;;
610 *) LYX_ERROR([Unknown packaging type $lyx_use_packaging]) ;;
616 ## ------------------------------------------------------------------------
617 ## Find a file (or one of more files in a list of dirs)
618 ## ------------------------------------------------------------------------
620 AC_DEFUN([AC_FIND_FILE],
627 if test -r "$i/$j"; then
635 dnl just a wrapper to clean up configure.in
636 AC_DEFUN([LYX_PROG_LIBTOOL],
638 AC_REQUIRE([AC_ENABLE_SHARED])
639 AC_REQUIRE([AC_ENABLE_STATIC])
640 dnl libtool is only for C, so I must force him
641 dnl to find the correct flags for C++
643 ac_save_cflags="$CFLAGS"
646 AC_PROG_LIBTOOL dnl for libraries
648 CFLAGS="$ac_save_cflags"
652 ## ------------------------------------------------------------------------
653 ## Check whether mkdir() is mkdir or _mkdir, and whether it takes
654 ## one or two arguments.
656 ## http://ac-archive.sourceforge.net/C_Support/ac_func_mkdir.html
657 ## ------------------------------------------------------------------------
659 AC_DEFUN([AC_FUNC_MKDIR],
660 [AC_CHECK_FUNCS([mkdir _mkdir])
661 AC_CACHE_CHECK([whether mkdir takes one argument],
662 [ac_cv_mkdir_takes_one_arg],
664 #include <sys/stat.h>
669 [ac_cv_mkdir_takes_one_arg=yes], [ac_cv_mkdir_takes_one_arg=no])])
670 if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then
671 AC_DEFINE([MKDIR_TAKES_ONE_ARG], 1,
672 [Define if mkdir takes only one argument.])
677 dnl Set VAR to the canonically resolved absolute equivalent of PATHNAME,
678 dnl (which may be a relative path, and need not refer to any existing
681 dnl On Win32-MSYS build hosts, the returned path is resolved to its true
682 dnl native Win32 path name, (but with slashes, not backslashes).
684 dnl On any other system, it is simply the result which would be obtained
685 dnl if PATHNAME represented an existing directory, and the pwd command was
686 dnl executed in that directory.
687 AC_DEFUN([MSYS_AC_CANONICAL_PATH],
689 ( exec 2>/dev/null; cd / && pwd -W ) | grep ':' >/dev/null &&
690 ac_pwd_w="pwd -W" || ac_pwd_w=pwd
691 until ac_val=`exec 2>/dev/null; cd "$ac_dir" && $ac_pwd_w`
693 ac_dir=`AS_DIRNAME(["$ac_dir"])`
695 ac_dir=`echo "$ac_dir" | sed 's?^[[./]]*??'`
696 ac_val=`echo "$ac_val" | sed 's?/*$[]??'`
697 $1=`echo "$2" | sed "s?^[[./]]*$ac_dir/*?$ac_val/?"'