]> git.lyx.org Git - lyx.git/blob - config/lyxinclude.m4
Make LaTeX export threadsafe.
[lyx.git] / config / lyxinclude.m4
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)
5
6
7 dnl Usage LYX_CHECK_VERSION   Displays version of LyX being built and
8 dnl sets variable "build_type"
9 AC_DEFUN([LYX_CHECK_VERSION],[
10 echo "configuring LyX version" AC_PACKAGE_VERSION
11 lyx_devel_version=no
12 lyx_prerelease=no
13 AC_MSG_CHECKING([for build type])
14 AC_ARG_ENABLE(build-type,
15   AC_HELP_STRING([--enable-build-type=TYPE],[set build setting according to TYPE=rel(ease), pre(release), dev(elopment), prof(iling), gprof]),
16   [case $enableval in
17     dev*) build_type=development;;
18     pre*) build_type=prerelease;;
19     prof*)  build_type=profiling;;
20     gprof*) build_type=gprof;;
21     rel*) build_type=release;;
22     *) AC_MSG_ERROR([bad build type specification \"$enableval\". Please use one of rel(ease), pre(release), dev(elopment), prof(iling), or gprof]);;
23    esac],
24   [case AC_PACKAGE_VERSION in
25     *dev*) build_type=development;;
26     *pre*|*alpha*|*beta*|*rc*) build_type=prerelease;;
27     *) build_type=release ;;
28    esac])
29 AC_MSG_RESULT([$build_type])
30 lyx_flags="$lyx_flags build=$build_type"
31 case $build_type in
32     development) lyx_devel_version=yes
33                  AC_DEFINE(DEVEL_VERSION, 1, [Define if you are building a development version of LyX])
34                  LYX_DATE="not released yet" ;;
35     prerelease) lyx_prerelease=yes ;;
36 esac
37
38 AC_SUBST(lyx_devel_version)
39 ])
40
41
42 dnl Define the option to set a LyX version on installed executables and directories
43 dnl
44 dnl
45 AC_DEFUN([LYX_VERSION_SUFFIX],[
46 AC_MSG_CHECKING([for version suffix])
47 dnl We need the literal double quotes in the rpm spec file
48 RPM_VERSION_SUFFIX='""'
49 AC_ARG_WITH(version-suffix,
50   [AC_HELP_STRING([--with-version-suffix@<:@=VERSION@:>@], install lyx files as lyxVERSION (VERSION=-AC_PACKAGE_VERSION))],
51   [if test "x$withval" = "xyes";
52    then
53      withval="-"AC_PACKAGE_VERSION
54      ac_configure_args=`echo "$ac_configure_args" | sed "s,--with-version-suffix,--with-version-suffix=$withval,"`
55    fi
56    AC_SUBST(version_suffix,$withval)
57    RPM_VERSION_SUFFIX="--with-version-suffix=$withval"])
58 AC_SUBST(RPM_VERSION_SUFFIX)
59 AC_SUBST(program_base_name,"lyx")
60 AC_MSG_RESULT([$withval])
61 ])
62
63
64 dnl Usage: LYX_WARNING(message)  Displays the warning "message" and sets the
65 dnl flag lyx_warning to yes.
66 AC_DEFUN([LYX_WARNING],[
67 lyx_warning_txt="$lyx_warning_txt
68 == $1
69 "
70 lyx_warning=yes])
71
72
73 dnl Usage: LYX_LIB_ERROR(file,library)  Displays an error message indication
74 dnl  that 'file' cannot be found because 'lib' may be uncorrectly installed.
75 AC_DEFUN([LYX_LIB_ERROR],[
76 AC_MSG_ERROR([cannot find $1. Please check that the $2 library
77    is correctly installed on your system.])])
78
79
80 dnl Usage: LYX_CHECK_WARNINGS  Displays a warning message if a LYX_WARNING
81 dnl   has occured previously.
82 AC_DEFUN([LYX_CHECK_WARNINGS],[
83 if test x$lyx_warning = xyes; then
84 cat <<EOF
85 === The following minor problems have been detected by configure.
86 === Please check the messages below before running 'make'.
87 === (see the section 'Problems' in the INSTALL file)
88 $lyx_warning_txt
89
90 EOF
91 fi])
92
93
94 dnl LYX_SEARCH_PROG(VARIABLE-NAME,PROGRAMS-LIST,ACTION-IF-FOUND)
95 dnl
96 define(LYX_SEARCH_PROG,[dnl
97 for ac_prog in $2 ; do
98 # Extract the first word of "$ac_prog", so it can be a program name with args.
99   set dummy $ac_prog ; ac_word=$[2]
100   if test -z "[$]$1"; then
101     IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
102     for ac_dir in $PATH; do
103       test -z "$ac_dir" && ac_dir=.
104       if test -f [$ac_dir/$ac_word]; then
105         $1="$ac_prog"
106         break
107       fi
108     done
109     IFS="$ac_save_ifs"
110   fi
111
112   if test -n "[$]$1"; then
113     ac_result=yes
114   else
115     ac_result=no
116   fi
117   ifelse($3,,,[$3])
118   test -n "[$]$1" && break
119 done
120 ])dnl
121
122
123 AC_DEFUN([LYX_PROG_CXX_WORKS],
124 [rm -f conftest.C
125 cat >conftest.C <<EOF
126 class foo {
127    // we require the mutable keyword
128    mutable int bar;
129  };
130  // we require namespace support
131  namespace baz {
132    int bar;
133  }
134  int main() {
135    return(0);
136  }
137 EOF
138 $CXX -c $CXXFLAGS $CPPFLAGS conftest.C >&5 || CXX=
139 rm -f conftest.C conftest.o conftest.obj || true
140 ])
141
142
143 AC_DEFUN([LYX_PROG_CXX],
144 [AC_MSG_CHECKING([for a good enough C++ compiler])
145 LYX_SEARCH_PROG(CXX, $CXX $CCC g++ gcc c++ CC cxx xlC cc++, [LYX_PROG_CXX_WORKS])
146
147 if test -z "$CXX" ; then
148   AC_MSG_ERROR([Unable to find a good enough C++ compiler])
149 fi
150 AC_MSG_RESULT($CXX)
151
152 AC_PROG_CXX
153 AC_PROG_CXXCPP
154
155 ### We might want to get or shut warnings.
156 AC_ARG_ENABLE(warnings,
157   AC_HELP_STRING([--enable-warnings],[tell the compiler to display more warnings]),,
158   [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $ac_cv_prog_gxx = yes ; then
159         enable_warnings=yes;
160     else
161         enable_warnings=no;
162     fi;])
163 if test x$enable_warnings = xyes ; then
164   lyx_flags="$lyx_flags warnings"
165 fi
166
167 ### We might want to disable debug
168 AC_ARG_ENABLE(debug,
169   AC_HELP_STRING([--enable-debug],[enable debug information]),,
170   [AS_CASE([$build_type], [rel*], [enable_debug=no], [enable_debug=yes])]
171 )
172
173 AC_ARG_ENABLE(stdlib-debug,
174   AC_HELP_STRING([--enable-stdlib-debug],[enable debug mode in the standard library]),,
175   [AS_CASE([$build_type], [dev*], [enable_stdlib_debug=yes], 
176           [enable_stdlib_debug=no])]
177 )
178
179 AC_ARG_ENABLE(concept-checks,
180   AC_HELP_STRING([--enable-concept-checks],[enable concept checks]),,
181   [AS_CASE([$build_type], [dev*|pre*], [enable_concept_checks=yes], 
182           [enable_concept_checks=no])]
183 )
184
185 ### set up optimization
186 AC_ARG_ENABLE(optimization,
187     AC_HELP_STRING([--enable-optimization[=value]],[enable compiler optimisation]),,
188     enable_optimization=yes;)
189 case $enable_optimization in
190     yes)
191         if test $lyx_devel_version = yes ; then
192             lyx_opt=-O
193         else
194             lyx_opt=-O2
195         fi;;
196     no) lyx_opt=;;
197     *) lyx_opt=${enable_optimization};;
198 esac
199
200 AC_ARG_ENABLE(pch,
201   AC_HELP_STRING([--enable-pch],[enable precompiled headers]),,
202         enable_pch=no;)
203 lyx_pch_comp=no
204
205 AC_ARG_ENABLE(cxx11,
206   AC_HELP_STRING([--enable-cxx11],[enable C++11 mode]),,
207   enable_cxx11=no;)
208
209 AC_ARG_ENABLE(assertions,
210   AC_HELP_STRING([--enable-assertions],[add runtime sanity checks in the program]),,
211   [AS_CASE([$build_type], [dev*|pre*], [enable_assertions=yes],
212           [enable_assertions=no])]
213 )
214 if test "x$enable_assertions" = xyes ; then
215    lyx_flags="$lyx_flags assertions"
216    AC_DEFINE(ENABLE_ASSERTIONS,1,
217     [Define if you want assertions to be enabled in the code])
218 fi
219
220 # set the compiler options correctly.
221 if test x$GXX = xyes; then
222   dnl Useful for global version info
223   gxx_version=`${CXX} -dumpversion`
224   CXX_VERSION="($gxx_version)"
225
226   if test "$ac_test_CXXFLAGS" = set; then
227     CXXFLAGS="$ac_save_CXXFLAGS"
228   else
229     CFLAGS="$lyx_opt"
230     CXXFLAGS="$lyx_opt"
231     if test x$enable_debug = xyes ; then
232       CFLAGS="-g $CFLAGS"
233       CXXFLAGS="-g $CXXFLAGS"
234     fi
235     if test $build_type = gprof ; then
236       CFLAGS="-pg $CFLAGS"
237       CXXFLAGS="-pg $CXXFLAGS"
238       LDFLAGS="-pg $LDFLAGS"
239     fi
240     if test $build_type = profiling ; then
241       CFLAGS="$CFLAGS -fno-omit-frame-pointer"
242       CXXFLAGS="$CXXFLAGS -fno-omit-frame-pointer"
243     fi
244   fi
245   if test "$ac_env_CPPFLAGS_set" != set; then
246     if test x$enable_warnings = xyes ; then
247         case $gxx_version in
248             3.1*|3.2*|3.3*)
249                 CPPFLAGS="-W -Wall $CPPFLAGS"
250                 ;;
251             *)
252                 CPPFLAGS="-Wextra -Wall $CPPFLAGS "
253                 ;;
254         esac
255     fi
256   fi
257   case $gxx_version in
258       3.1*)    AM_CXXFLAGS="-finline-limit=500 ";;
259       3.2*|3.3*)    AM_CXXFLAGS="";;
260       3.4*|4.*)
261           AM_CXXFLAGS=""
262           test $enable_pch = yes && lyx_pch_comp=yes
263           ;;
264       *)       AM_CXXFLAGS="";;
265   esac
266   if test x$enable_stdlib_debug = xyes ; then
267     case $gxx_version in
268       3.4*|4.*)
269         lyx_flags="$lyx_flags stdlib-debug"
270         AC_DEFINE(_GLIBCXX_DEBUG, 1, [libstdc++ debug mode])
271         AC_DEFINE(_GLIBCXX_DEBUG_PEDANTIC, 1, [libstdc++ pedantic debug mode])
272         ;;
273     esac
274   fi
275   if test x$enable_concept_checks = xyes ; then
276     case $gxx_version in
277       3.3*)
278         lyx_flags="$lyx_flags concept-checks"
279         AC_DEFINE(_GLIBCPP_CONCEPT_CHECKS, 1, [libstdc++ concept checking])
280         ;;
281       3.4*|4.*)
282         lyx_flags="$lyx_flags concept-checks"
283         AC_DEFINE(_GLIBCXX_CONCEPT_CHECKS, 1, [libstdc++ concept checking])
284         ;;
285     esac
286   fi
287   if test x$enable_cxx11 = xyes ; then
288       case $gxx_version in
289           4.3*|4.4*|4.5*|4.6*)
290               lyx_flags="$lyx_flags c++11-mode"
291               CXXFLAGS="-std=gnu++0x $CXXFLAGS"
292               ;;
293           4.7*|4.8*)
294               lyx_flags="$lyx_flags c++11-mode"
295               CXXFLAGS="-std=gnu++11 $CXXFLAGS"
296               ;;
297       esac
298   fi
299 fi
300 test "$lyx_pch_comp" = yes && lyx_flags="$lyx_flags pch"
301 AM_CONDITIONAL(LYX_BUILD_PCH, test "$lyx_pch_comp" = yes)
302 ])dnl
303
304 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
305 dnl        be used.
306 AC_DEFUN([LYX_USE_INCLUDED_BOOST],[
307         AC_MSG_CHECKING([whether to use included boost library])
308         AC_ARG_WITH(included-boost,
309             [AC_HELP_STRING([--without-included-boost], [do not use the boost lib supplied with LyX, try to find one in the system directories - compilation will abort if nothing suitable is found])],
310             [lyx_cv_with_included_boost=$withval],
311             [lyx_cv_with_included_boost=yes])
312         AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
313         AC_MSG_RESULT([$lyx_cv_with_included_boost])
314         if test x$lyx_cv_with_included_boost = xyes ; then
315             BOOST_INCLUDES='-I$(top_srcdir)/boost'
316             BOOST_LIBS='$(top_builddir)/boost/liblyxboost.a'
317         else
318             AC_LANG_PUSH(C++)
319             save_LIBS=$LIBS
320
321             AC_MSG_CHECKING([for multithreaded boost libraries])
322             LIBS="$save_LIBS -lboost_signals-mt -lm $LIBTHREAD"
323             AC_LINK_IFELSE(
324                 [AC_LANG_PROGRAM([#include <boost/signal.hpp>],
325                         [boost::signal<void ()> s;])],
326                 [AC_MSG_RESULT([yes])
327                  BOOST_MT="-mt"],
328                 [AC_MSG_RESULT([no])
329                  AC_MSG_CHECKING([for plain boost libraries])
330                  LIBS="$save_LIBS -lboost_signals -lm"
331                  AC_LINK_IFELSE(
332                      [AC_LANG_PROGRAM([#include <boost/signal.hpp>],
333                              [boost::signal<void ()> s;])],
334                      [AC_MSG_RESULT([yes])
335                       BOOST_MT=""],
336                      [AC_MSG_RESULT([no])
337                       AC_MSG_ERROR([cannot find suitable boost library (do not use --without-included-boost)])
338                  ])
339             ])
340             LIBS=$save_LIBS
341             AC_LANG_POP(C++)
342             BOOST_INCLUDES=
343             BOOST_LIBS="-lboost_regex${BOOST_MT} -lboost_signals${BOOST_MT}"
344         fi
345         AC_SUBST(BOOST_INCLUDES)
346         AC_SUBST(BOOST_LIBS)
347 ])
348
349
350 dnl Usage: LYX_USE_INCLUDED_MYTHES : select if the included MyThes should
351 dnl        be used.
352 AC_DEFUN([LYX_USE_INCLUDED_MYTHES],[
353         AC_MSG_CHECKING([whether to use included MyThes library])
354         AC_ARG_WITH(included-mythes,
355             [AC_HELP_STRING([--without-included-mythes], [do not use the MyThes lib supplied with LyX, try to find one in the system directories - compilation will abort if nothing suitable is found])],
356             [lyx_cv_with_included_mythes=$withval],
357             [lyx_cv_with_included_mythes=yes])
358         AM_CONDITIONAL(USE_INCLUDED_MYTHES, test x$lyx_cv_with_included_mythes = xyes)
359         AC_MSG_RESULT([$lyx_cv_with_included_mythes])
360         if test x$lyx_cv_with_included_mythes != xyes ; then
361                 AC_LANG_PUSH(C++)
362                 AC_CHECK_HEADER(mythes.hxx,[ac_cv_header_mythes_h=yes lyx_cv_mythes_h_location="<mythes.hxx>"])
363                 if test x$ac_cv_header_mythes_h != xyes; then
364                         AC_CHECK_HEADER(mythes/mythes.hxx,[ac_cv_header_mythes_h=yes lyx_cv_mythes_h_location="<mythes/mythes.hxx>"])
365                 fi
366                 AC_CHECK_LIB(mythes, main, [MYTHES_LIBS="-lmythes" lyx_mythes=yes], [lyx_mythes=no], [-lm])
367                 if test x$lyx_mythes != xyes; then
368                         AC_CHECK_LIB(mythes-1.2, main, [MYTHES_LIBS="-lmythes-1.2" lyx_mythes=yes], [lyx_mythes=no], [-lm])
369                 fi
370                 AC_LANG_POP(C++)
371                 if test x$lyx_mythes != xyes -o x$ac_cv_header_mythes_h != xyes; then
372                         AC_MSG_ERROR([cannot find suitable MyThes library (do not use --without-included-mythes)])
373                 fi
374                 AC_DEFINE(USE_EXTERNAL_MYTHES, 1, [Define as 1 to use an external MyThes library])
375                 AC_DEFINE_UNQUOTED(MYTHES_H_LOCATION,$lyx_cv_mythes_h_location,[Location of mythes.hxx])
376                 AC_SUBST(MYTHES_LIBS)
377         fi
378 ])
379
380
381 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
382 dnl                       [default-yes-value])
383 dnl  Adds a --with-'dir-name' option (described by 'desc') and puts the
384 dnl  resulting directory name in 'dir-var-name'.
385 AC_DEFUN([LYX_WITH_DIR],[
386   AC_ARG_WITH($1,[AC_HELP_STRING([--with-$1],[specify $2])])
387   AC_MSG_CHECKING([for $2])
388   if test -z "$with_$3"; then
389      AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
390   else
391     test "x$with_$3" = xyes && with_$3=$5
392     lyx_cv_$3="$with_$3"
393   fi
394   AC_MSG_RESULT($lyx_cv_$3)])
395
396
397 dnl Usage: LYX_LOOP_DIR(value,action)
398 dnl Executes action for values of variable `dir' in `values'. `values' can
399 dnl use ":" as a separator.
400 AC_DEFUN([LYX_LOOP_DIR],[
401 IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
402 for dir in `eval "echo $1"`; do
403   if test ! "$dir" = NONE; then
404     test ! -d "$dir" && AC_MSG_ERROR([\"$dir\" is not a directory])
405     $2
406   fi
407 done
408 IFS=$ac_save_ifs
409 ])
410
411
412 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
413 dnl var-name.
414 AC_DEFUN([LYX_ADD_LIB_DIR],[
415 $1="${$1} -L$2"
416 if test "`(uname) 2>/dev/null`" = SunOS &&
417     uname -r | grep '^5' >/dev/null; then
418   if test $ac_cv_prog_gxx = yes ; then
419     $1="${$1} -Wl[,]-R$2"
420   else
421     $1="${$1} -R$2"
422   fi
423 fi])
424
425
426 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
427 dnl var-name.
428 AC_DEFUN([LYX_ADD_INC_DIR],[$1="${$1} -I$2 "])
429
430 ### Check for a headers existence and location iff it exists
431 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
432 ## It almost works.  I've tried a few variations but they give errors
433 ## of one sort or other: bad substitution or file not found etc.  The
434 ## actual header _is_ found though and the cache variable is set however
435 ## the reported setting (on screen) is equal to $ac_safe for some unknown
436 ## reason.
437 ## Additionally, autoheader can't figure out what to use as the name in
438 ## the config.h.in file so we need to write our own entries there -- one for
439 ## each header in the form PATH_HEADER_NAME_H
440 ##
441 AC_DEFUN([LYX_PATH_HEADER],
442 [ AC_CHECK_HEADER($1,[
443   ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
444 ### the only remaining problem is getting the second parameter to this
445 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
446 ### of $ac_safe being printed.
447   AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
448   [ cat > conftest.$ac_ext <<EOF
449 #line __oline__ "configure"
450 #include "confdefs.h"
451
452 #include <$1>
453 EOF
454 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
455   grep $1  2>/dev/null | \
456   sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
457 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
458 rm -f conftest*])
459   AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
460 ])
461 ### end of LYX_PATH_HEADER
462
463 ## Check what kind of packaging should be used at install time.
464 ## The default is autodetected.
465 AC_DEFUN([LYX_USE_PACKAGING],
466 [AC_MSG_CHECKING([what packaging should be used])
467 AC_ARG_WITH(packaging,
468   [AC_HELP_STRING([--with-packaging=THIS], [use THIS packaging for installation:
469                             Possible values: posix, windows, macosx])],
470   [lyx_use_packaging="$withval"], [
471   case $host in
472     *-apple-darwin*) lyx_use_packaging=macosx ;;
473      *-pc-mingw32*) lyx_use_packaging=windows;;
474                   *) lyx_use_packaging=posix;;
475   esac])
476 AC_MSG_RESULT($lyx_use_packaging)
477 lyx_install_posix=false
478 lyx_install_macosx=false
479 lyx_install_cygwin=false
480 lyx_install_windows=false
481 case $lyx_use_packaging in
482    macosx) AC_DEFINE(USE_MACOSX_PACKAGING, 1, [Define to 1 if LyX should use a MacOS X application bundle file layout])
483            PACKAGE=LyX${version_suffix}
484            default_prefix="/Applications/${PACKAGE}.app"
485            AC_SUBST(osx_bundle_program_name,"${program_base_name}")
486            bindir='${prefix}/Contents/MacOS'
487            libdir='${prefix}/Contents/Resources'
488            datarootdir='${prefix}/Contents/Resources'
489            pkgdatadir='${datadir}'
490            mandir='${datadir}/man'
491            lyx_install_macosx=true ;;
492   windows) AC_DEFINE(USE_WINDOWS_PACKAGING, 1, [Define to 1 if LyX should use a Windows-style file layout])
493            PACKAGE=LyX${version_suffix}
494            default_prefix="C:/Program Files/${PACKAGE}"
495            bindir='${prefix}/bin'
496            libdir='${prefix}/Resources'
497            datarootdir='${prefix}/Resources'
498            pkgdatadir='${datadir}'
499            mandir='${prefix}/Resources/man'
500            lyx_install_windows=true ;;
501     posix) AC_DEFINE(USE_POSIX_PACKAGING, 1, [Define to 1 if LyX should use a POSIX-style file layout])
502            PACKAGE=lyx${version_suffix}
503            program_suffix=$version_suffix
504            pkgdatadir='${datadir}/${PACKAGE}'
505            default_prefix=$ac_default_prefix
506            case ${host} in
507            *cygwin*) lyx_install_cygwin=true ;;
508                 *apple-darwin*) lyx_install_macosx=true ;;
509            esac
510            lyx_install_posix=true ;;
511     *) AC_MSG_ERROR([unknown packaging type $lyx_use_packaging.]) ;;
512 esac
513 AM_CONDITIONAL(INSTALL_MACOSX, $lyx_install_macosx)
514 AM_CONDITIONAL(INSTALL_WINDOWS, $lyx_install_windows)
515 AM_CONDITIONAL(INSTALL_CYGWIN, $lyx_install_cygwin)
516 AM_CONDITIONAL(INSTALL_POSIX, $lyx_install_posix)
517 AC_SUBST(pkgdatadir)
518 AC_SUBST(program_suffix)
519 ])
520
521
522 ## ------------------------------------------------------------------------
523 ## Check whether mkdir() is mkdir or _mkdir, and whether it takes
524 ## one or two arguments.
525 ##
526 ## http://ac-archive.sourceforge.net/C_Support/ac_func_mkdir.html
527 ## ------------------------------------------------------------------------
528 ##
529 AC_DEFUN([AC_FUNC_MKDIR],
530 [AC_CHECK_FUNCS([mkdir _mkdir])
531 AC_CACHE_CHECK([whether mkdir takes one argument],
532                [ac_cv_mkdir_takes_one_arg],
533 [AC_TRY_COMPILE([
534 #include <sys/stat.h>
535 #if HAVE_UNISTD_H
536 #  include <unistd.h>
537 #endif
538 ], [mkdir (".");],
539 [ac_cv_mkdir_takes_one_arg=yes], [ac_cv_mkdir_takes_one_arg=no])])
540 if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then
541   AC_DEFINE([MKDIR_TAKES_ONE_ARG], 1,
542             [Define if mkdir takes only one argument.])
543 fi
544 ])
545
546
547 dnl Set VAR to the canonically resolved absolute equivalent of PATHNAME,
548 dnl (which may be a relative path, and need not refer to any existing
549 dnl entity).
550
551 dnl On Win32-MSYS build hosts, the returned path is resolved to its true
552 dnl native Win32 path name, (but with slashes, not backslashes).
553
554 dnl On any other system, it is simply the result which would be obtained
555 dnl if PATHNAME represented an existing directory, and the pwd command was
556 dnl executed in that directory.
557 AC_DEFUN([MSYS_AC_CANONICAL_PATH],
558 [ac_dir="$2"
559  ( exec 2>/dev/null; cd / && pwd -W ) | grep ':' >/dev/null &&
560     ac_pwd_w="pwd -W" || ac_pwd_w=pwd
561  until ac_val=`exec 2>/dev/null; cd "$ac_dir" && $ac_pwd_w`
562  do
563    ac_dir=`AS_DIRNAME(["$ac_dir"])`
564  done
565  ac_dir=`echo "$ac_dir" | sed 's?^[[./]]*??'`
566  ac_val=`echo "$ac_val" | sed 's?/*$[]??'`
567  $1=`echo "$2" | sed "s?^[[./]]*$ac_dir/*?$ac_val/?"'
568    s?/*$[]??'`
569 ])
570
571 dnl this is used by the macro blow to general a proper config.h.in entry
572 m4_define([LYX_AH_CHECK_DECL],
573 [AH_TEMPLATE(AS_TR_CPP(HAVE_DECL_$1),
574   [Define if you have the prototype for function `$1'])])
575
576 dnl Check things are declared in headers to avoid errors or warnings.
577 dnl Called like LYX_CHECK_DECL(function, header1 header2...)
578 dnl Defines HAVE_DECL_{FUNCTION}
579 AC_DEFUN([LYX_CHECK_DECL],
580 [LYX_AH_CHECK_DECL($1)
581 for ac_header in $2
582 do
583   AC_MSG_CHECKING([if $1 is declared by header $ac_header])
584   AC_EGREP_HEADER($1, $ac_header,
585       [AC_MSG_RESULT(yes)
586        AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DECL_$1))
587        break],
588       [AC_MSG_RESULT(no)])
589 done])
590
591 dnl this is used by the macro below to generate a proper config.h.in entry
592 m4_define([LYX_AH_CHECK_DEF],
593 [AH_TEMPLATE(AS_TR_CPP(HAVE_DEF_$1),
594   [Define to 1 if `$1' is defined in `$2'])])
595
596 dnl Check whether name is defined in header by using it in codesnippet.
597 dnl Called like LYX_CHECK_DEF(name, header, codesnippet)
598 dnl Defines HAVE_DEF_{NAME}
599 AC_DEFUN([LYX_CHECK_DEF],
600 [LYX_AH_CHECK_DEF($1, $2)
601  AC_MSG_CHECKING([whether $1 is defined by header $2])
602  AC_TRY_COMPILE([#include <$2>], [$3],
603      lyx_have_def_name=yes,
604      lyx_have_def_name=no)
605  AC_MSG_RESULT($lyx_have_def_name)
606  if test "x$lyx_have_def_name" = xyes; then
607    AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DEF_$1))
608  fi
609 ])
610
611 dnl Extract the single digits from PACKAGE_VERSION and make them available.
612 dnl Defines LYX_MAJOR_VERSION, LYX_MINOR_VERSION, LYX_RELEASE_LEVEL,
613 dnl LYX_RELEASE_PATCH (possibly equal to 0), LYX_DIR_VER, and LYX_USERDIR_VER.
614 AC_DEFUN([LYX_SET_VERSION_INFO],
615 [lyx_major=`echo $PACKAGE_VERSION | sed -e 's/[[.]].*//'`
616  lyx_patch=`echo $PACKAGE_VERSION | sed -e "s/^$lyx_major//" -e 's/^.//'`
617  lyx_minor=`echo $lyx_patch | sed -e 's/[[.]].*//'`
618  lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_minor//" -e 's/^.//'`
619  lyx_release=`echo $lyx_patch | sed -e 's/[[^0-9]].*//'`
620  lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_release//" -e 's/^[[.]]//' -e 's/[[^0-9]].*//'`
621  test "x$lyx_patch" = "x" && lyx_patch=0
622  lyx_dir_ver=LYX_DIR_${lyx_major}${lyx_minor}x
623  lyx_userdir_ver=LYX_USERDIR_${lyx_major}${lyx_minor}x
624  AC_SUBST(LYX_MAJOR_VERSION,$lyx_major)
625  AC_SUBST(LYX_MINOR_VERSION,$lyx_minor)
626  AC_SUBST(LYX_RELEASE_LEVEL,$lyx_release)
627  AC_SUBST(LYX_RELEASE_PATCH,$lyx_patch)
628  AC_SUBST(LYX_DIR_VER,"$lyx_dir_ver")
629  AC_SUBST(LYX_USERDIR_VER,"$lyx_userdir_ver")
630 ])
631
632 # AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
633 # ---------------------------------------------------------------------------
634 # Copied from autoconf 2.68, added a check that python version is < 3.0
635 # Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION.
636 # Run ACTION-IF-FALSE otherwise.
637 # This test uses sys.hexversion instead of the string equivalent (first
638 # word of sys.version), in order to cope with versions such as 2.2c1.
639 # This supports Python 2.0 or higher. (2.0 was released on October 16, 2000).
640 AC_DEFUN([AM_PYTHON_CHECK_VERSION],
641  [prog="import sys
642 # split strings by '.' and convert to numeric.  Append some zeros
643 # because we need at least 4 digits for the hex conversion.
644 # map returns an iterator in Python 3.0 and a list in 2.x
645 minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]]
646 minverhex = 0
647 maxverhex = 50331648 # = 3.0.0.0
648 # xrange is not present in Python 3.0 and range returns an iterator
649 for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]]
650 sys.exit(sys.hexversion < minverhex or sys.hexversion >= maxverhex)"
651   AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])])