]> git.lyx.org Git - lyx.git/blob - config/lyxinclude.m4
cf58df7b17708a242f7f9bff44c8fbc8f493fc33
[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 dnl Compute the default build type from AC_PACKAGE_VERSION at autoconf time.
7 m4_define([LYX_BUILD_TYPE], [m4_bmatch(AC_PACKAGE_VERSION,
8     [dev], [development],
9     [pre\|alpha\|beta\|rc], [prerelease],
10     [release])])
11
12
13 dnl Usage LYX_CHECK_VERSION   Displays version of LyX being built and
14 dnl sets variable "build_type"
15 AC_DEFUN([LYX_CHECK_VERSION],[
16 echo "configuring LyX version" AC_PACKAGE_VERSION
17
18 AC_MSG_CHECKING([for build type])
19 lyx_devel_version=no
20 lyx_prerelease=no
21 AC_ARG_ENABLE(build-type,
22   AS_HELP_STRING([--enable-build-type=STR],[set build type to rel(ease), pre(release), dev(elopment), prof(iling), or gprof (default: LYX_BUILD_TYPE)]),
23   [case $enableval in
24     dev*) build_type=development;;
25     pre*) build_type=prerelease;;
26     prof*)  build_type=profiling;;
27     gprof*) build_type=gprof;;
28     rel*) build_type=release;;
29     *) AC_MSG_ERROR([bad build type specification '$enableval'. Please use one of rel(ease), pre(release), dev(elopment), prof(iling), or gprof]);;
30    esac],
31   [build_type=LYX_BUILD_TYPE])
32 AC_MSG_RESULT([$build_type])
33 lyx_flags="$lyx_flags build=$build_type"
34 case $build_type in
35     development) lyx_devel_version=yes
36                  LYX_DATE="not released yet" ;;
37     prerelease) lyx_prerelease=yes ;;
38 esac
39
40 AC_SUBST(lyx_devel_version)
41 ])
42
43
44 dnl Define the option to set a LyX version on installed executables and directories
45 dnl
46 dnl
47 AC_DEFUN([LYX_VERSION_SUFFIX],[
48 AC_MSG_CHECKING([for version suffix])
49 dnl We need the literal double quotes in the rpm spec file
50 RPM_VERSION_SUFFIX='""'
51 AC_ARG_WITH(version-suffix,
52   [AS_HELP_STRING([--with-version-suffix@<:@=STR@:>@], install lyx files as lyxSTR (default STR: -AC_PACKAGE_VERSION))],
53   [if test "x$withval" = "xyes";
54    then
55      withval="-"AC_PACKAGE_VERSION
56      ac_configure_args=`echo "$ac_configure_args" | sed "s,--with-version-suffix,--with-version-suffix=$withval,"`
57    fi
58    AC_SUBST(version_suffix,$withval)
59    RPM_VERSION_SUFFIX="--with-version-suffix=$withval"])
60 AC_SUBST(RPM_VERSION_SUFFIX)
61 AC_SUBST(program_base_name,"lyx")
62 AC_MSG_RESULT([$withval])
63 ])
64
65
66 dnl Check whether to configure for Qt4 or Qt5. Default is Qt5.
67 dnl
68 AC_DEFUN([LYX_CHECK_QT5],[
69 AC_MSG_CHECKING([whether Qt5 is disabled])
70 AC_ARG_ENABLE([qt5],
71   [AS_HELP_STRING([--disable-qt5],[do not use Qt5 for building])],
72   USE_QT5=$enableval, USE_QT5=yes)
73 if test x$USE_QT5 != xno ; then
74   AC_MSG_RESULT([no])
75 else
76   AC_MSG_RESULT([yes])
77 fi
78 AC_SUBST([USE_QT5])
79 ])
80
81
82 dnl Usage: LYX_WARNING(message)  Displays the warning "message" and sets the
83 dnl flag lyx_warning to yes.
84 AC_DEFUN([LYX_WARNING],[
85 lyx_warning_txt="$lyx_warning_txt
86 == $1
87 "
88 lyx_warning=yes])
89
90
91 dnl Usage: LYX_LIB_ERROR(file,library)  Displays an error message indication
92 dnl  that 'file' cannot be found because 'lib' may be uncorrectly installed.
93 AC_DEFUN([LYX_LIB_ERROR],[
94 AC_MSG_ERROR([cannot find $1. Please check that the $2 library
95    is correctly installed on your system.])])
96
97
98 dnl Usage: LYX_CHECK_WARNINGS  Displays a warning message if a LYX_WARNING
99 dnl   has occurred previously.
100 AC_DEFUN([LYX_CHECK_WARNINGS],[
101 if test x$lyx_warning = xyes; then
102 cat <<EOF
103 === The following minor problems have been detected by configure.
104 === Please check the messages below before running 'make'.
105 === (see the section 'Problems' in the INSTALL file)
106 $lyx_warning_txt
107
108 EOF
109 fi])
110
111
112 dnl LYX_SEARCH_PROG(VARIABLE-NAME,PROGRAMS-LIST,ACTION-IF-FOUND)
113 dnl
114 define(LYX_SEARCH_PROG,[dnl
115 for ac_prog in $2 ; do
116 # Extract the first word of "$ac_prog", so it can be a program name with args.
117   set dummy $ac_prog ; ac_word=$[2]
118   if test -z "[$]$1"; then
119     IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
120     for ac_dir in $PATH; do
121       test -z "$ac_dir" && ac_dir=.
122       if test -f [$ac_dir/$ac_word]; then
123         $1="$ac_prog"
124         break
125       fi
126     done
127     IFS="$ac_save_ifs"
128   fi
129
130   if test -n "[$]$1"; then
131     ac_result=yes
132   else
133     ac_result=no
134   fi
135   ifelse($3,,,[$3])
136   test -n "[$]$1" && break
137 done
138 ])dnl
139
140
141 dnl Usage: LYX_PROG_CLANG: set CLANG to yes if the compiler is clang.
142 AC_DEFUN([LYX_PROG_CLANG],
143 [AC_CACHE_CHECK([whether the compiler is clang],
144                [lyx_cv_prog_clang],
145 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
146 #ifndef __clang__
147             this is not clang
148 #endif
149 ]])],[lyx_cv_prog_clang=yes ; CLANG=yes],[lyx_cv_prog_clang=no ; CLANG=no])])
150 if test $CLANG = yes ; then
151   AC_CACHE_CHECK([for clang version],
152     [lyx_cv_clang_version],
153     [clang_noversion=no
154      AC_COMPUTE_INT(clang_major,__clang_major__,,[clang_noversion_=yes])
155      AC_COMPUTE_INT(clang_minor,__clang_minor__,,[clang_noversion_=yes])
156      AC_COMPUTE_INT(clang_patchlevel,__clang_patchlevel__,,[clang_noversion_=yes])
157      if test $clang_noversion = yes ; then
158        clang_version=unknown
159      else
160        clang_version=$clang_major.$clang_minor.$clang_patchlevel
161      fi
162      lyx_cv_clang_version=$clang_version])
163 fi
164 ])
165
166
167 dnl Usage: LYX_CXX_CXX11_FLAGS(VERSION): add to AM_CXXFLAGS the best flag that
168 dnl selects C++11 mode; gives an error when C++11 mode is not found.
169 dnl VERSION is a list of years to try (e.g. 11 or {14,11}).
170 AC_DEFUN([LYX_CXX_CXX11_FLAGS],
171 [AC_CACHE_CHECK([for a good C++ mode], [lyx_cv_cxx11_flags],
172  [lyx_cv_cxx11_flags=none
173   for flag in `eval echo -std=c++$1 default -std=gnu++$1` ; do
174     if test $flag = default ; then
175       flag=
176     fi
177     save_CPPFLAGS=$CPPFLAGS
178     CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
179     save_CXXFLAGS=$CXXFLAGS
180     CXXFLAGS="$flag $AM_CXXFLAGS $CXXFLAGS"
181     dnl sample openmp source code to test
182     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
183        template <typename T>
184        struct check
185        {
186            static_assert(sizeof(int) <= sizeof(T), "not big enough");
187        };
188
189        typedef check<check<bool>> right_angle_brackets;
190
191        class TestDeleted
192        {
193        public:
194            TestDeleted() = delete;
195        };
196
197
198        int a;
199        decltype(a) b;
200
201        typedef check<int> check_type;
202        check_type c;
203        check_type&& cr = static_cast<check_type&&>(c);
204
205        auto d = a;]], [[]])],[lyx_cv_cxx11_flags=$flag; break],[])
206    CXXFLAGS=$save_CXXFLAGS
207    CPPFLAGS=$save_CPPFLAGS
208   done])
209   if test x$lyx_cv_cxx11_flags = xnone ; then
210     AC_MSG_ERROR([Cannot find suitable mode for compiler $CXX])
211   fi
212   AM_CXXFLAGS="$lyx_cv_cxx11_flags $AM_CXXFLAGS"
213 ])
214
215
216 dnl Usage: LYX_CXX_USE_REGEX
217 dnl decide whether we want to use std::regex and set the
218 dnl LYX_USE_STD_REGEX macro and conditional accordingly.
219 AC_DEFUN([LYX_CXX_USE_REGEX],
220 [AC_ARG_ENABLE(std-regex,
221   AS_HELP_STRING([--enable-std-regex],[use std::regex instead of boost::regex (default is autodetected)]),
222   [lyx_std_regex=$enableval],
223   [AC_MSG_CHECKING([for correct regex implementation])
224    save_CPPFLAGS=$CPPFLAGS
225    CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
226    save_CXXFLAGS=$CXXFLAGS
227    CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS"
228    # The following code snippet has been taken taken from example in
229    #   http://stackoverflow.com/questions/8561850/compile-stdregex-iterator-with-gcc
230    AC_LINK_IFELSE([AC_LANG_PROGRAM([[
231         #include <regex>
232         #include <iostream>
233
234         #include <string.h>
235
236         typedef std::regex_iterator<const char *> Myiter;
237      ]], [[
238         const char *pat = "axayaz";
239         Myiter::regex_type rx("a");
240         Myiter next(pat, pat + strlen(pat), rx);
241         Myiter end;
242    ]])],[lyx_std_regex=yes],[lyx_std_regex=no])
243    CXXFLAGS=$save_CXXFLAGS
244    CPPFLAGS=$save_CPPFLAGS
245    AC_MSG_RESULT([$lyx_std_regex])
246  ])
247
248  if test $lyx_std_regex = yes ; then
249   lyx_flags="$lyx_flags std-regex"
250   AC_DEFINE([LYX_USE_STD_REGEX], 1, [define to 1 if std::regex should be preferred to boost::regex])
251  fi
252  AM_CONDITIONAL([LYX_USE_STD_REGEX], test $lyx_std_regex = yes)
253 ])
254
255
256 dnl Usage: LYX_CXX_USE_CALL_ONCE
257 dnl check whether we can use std::call_once and set the
258 dnl LYX_USE_STD_CALL_ONCE macro and conditional accordingly.
259 AC_DEFUN([LYX_CXX_USE_CALL_ONCE],
260 [AC_MSG_CHECKING([for std::call_once availability])
261    save_CPPFLAGS=$CPPFLAGS
262    CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
263    save_CXXFLAGS=$CXXFLAGS
264    CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS"
265    AC_LINK_IFELSE([AC_LANG_PROGRAM([[
266         #include <mutex>
267         static std::once_flag flag;
268      ]], [[
269         std::call_once(flag, [](){ return; });
270    ]])],[lyx_std_call_once=yes],[lyx_std_call_once=no])
271    CXXFLAGS=$save_CXXFLAGS
272    CPPFLAGS=$save_CPPFLAGS
273    AC_MSG_RESULT([$lyx_std_call_once])
274
275  if test $lyx_std_call_once = yes ; then
276   AC_DEFINE([LYX_USE_STD_CALL_ONCE], 1, [define to 1 if std::call_once is supported by the compiler])
277  fi
278  AM_CONDITIONAL([LYX_USE_STD_CALL_ONCE], test $lyx_std_call_once = yes)
279 ])
280
281
282 dnl Usage: LYX_LIB_STDCXX: set lyx_cv_lib_stdcxx to yes if the STL library is libstdc++.
283 AC_DEFUN([LYX_LIB_STDCXX],
284 [AC_CACHE_CHECK([whether STL is libstdc++],
285                [lyx_cv_lib_stdcxx],
286 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include<vector>]], [[
287 #if ! defined(__GLIBCXX__) && ! defined(__GLIBCPP__)
288             this is not libstdc++
289 #endif
290 ]])],[lyx_cv_lib_stdcxx=yes],[lyx_cv_lib_stdcxx=no])])
291 ])
292
293
294 dnl Usage: LYX_LIB_STDCXX_CXX11_ABI: set lyx_cv_lib_stdcxx_cxx11_abi to yes
295 dnl        if the STL library is GNU libstdc++ and the C++11 ABI is used.
296 AC_DEFUN([LYX_LIB_STDCXX_CXX11_ABI],
297 [AC_CACHE_CHECK([whether STL is libstdc++ using the C++11 ABI],
298                [lyx_cv_lib_stdcxx_cxx11_abi],
299 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include<vector>]], [[
300 #if ! defined(_GLIBCXX_USE_CXX11_ABI) || ! _GLIBCXX_USE_CXX11_ABI
301             this is not libstdc++ using the C++11 ABI
302 #endif
303 ]])],[lyx_cv_lib_stdcxx_cxx11_abi=yes],[lyx_cv_lib_stdcxx_cxx11_abi=no])])
304 ])
305
306
307 AC_DEFUN([LYX_PROG_CXX],
308 [AC_REQUIRE([AC_PROG_CXX])
309 AC_REQUIRE([AC_PROG_CXXCPP])
310
311 ### We might want to force the C++ standard.
312 AC_ARG_ENABLE(cxx-mode,
313   AS_HELP_STRING([--enable-cxx-mode],[choose C++ standard (default: 14, then 11)]),,
314   [enable_cxx_mode={14,11}]
315 )
316
317 AC_LANG_PUSH(C++)
318 LYX_PROG_CLANG
319 LYX_CXX_CXX11_FLAGS($enable_cxx_mode)
320 LYX_LIB_STDCXX
321 LYX_LIB_STDCXX_CXX11_ABI
322 LYX_CXX_USE_REGEX
323 LYX_CXX_USE_CALL_ONCE
324 AC_LANG_POP(C++)
325
326 if test $lyx_cv_lib_stdcxx = "yes" ; then
327   if test $lyx_cv_lib_stdcxx_cxx11_abi = "yes" ; then
328     AC_DEFINE(USE_GLIBCXX_CXX11_ABI, 1, [use GNU libstdc++ with C++11 ABI])
329   else
330     AC_DEFINE(STD_STRING_USES_COW, 1, [std::string uses copy-on-write])
331   fi
332 else
333   if test $lyx_cv_prog_clang = "yes" ; then
334     AC_DEFINE(USE_LLVM_LIBCPP, 1, [use libc++ provided by llvm instead of GNU libstdc++])
335   fi
336 fi
337
338 ### We might want to get or shut warnings.
339 AC_ARG_ENABLE(warnings,
340   AS_HELP_STRING([--enable-warnings],[tell the compiler to display more warnings]),,
341   [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $GXX = yes ; then
342         enable_warnings=yes;
343     else
344         enable_warnings=no;
345     fi;])
346 if test x$enable_warnings = xyes ; then
347   lyx_flags="$lyx_flags warnings"
348 fi
349
350 ### We might want to disable debug
351 AC_ARG_ENABLE(debug,
352   AS_HELP_STRING([--enable-debug],[enable debug information]),,
353   [AS_CASE([$build_type], [rel*], [enable_debug=no], [enable_debug=yes])]
354 )
355
356 AC_ARG_ENABLE(stdlib-debug,
357   AS_HELP_STRING([--enable-stdlib-debug],[enable debug mode in the standard library]),,
358   [AS_CASE([$build_type], [dev*], [enable_stdlib_debug=yes], 
359           [enable_stdlib_debug=no])]
360 )
361
362 ### set up optimization
363 AC_ARG_ENABLE(optimization,
364     AS_HELP_STRING([--enable-optimization@<:@=ARG@:>@],[enable compiler optimisation]),,
365     enable_optimization=yes;)
366 case $enable_optimization in
367     yes)
368         if test $lyx_devel_version = yes ; then
369             lyx_optim=-O
370         else
371             lyx_optim=-O2
372         fi;;
373     no) lyx_optim=;;
374     *) lyx_optim=${enable_optimization};;
375 esac
376
377 AC_ARG_ENABLE(assertions,
378   AS_HELP_STRING([--enable-assertions],[add runtime sanity checks in the program]),,
379   [AS_CASE([$build_type], [dev*|pre*], [enable_assertions=yes],
380           [enable_assertions=no])]
381 )
382 if test "x$enable_assertions" = xyes ; then
383    lyx_flags="$lyx_flags assertions"
384    AC_DEFINE(ENABLE_ASSERTIONS,1,
385     [Define if you want assertions to be enabled in the code])
386 fi
387
388 # set the compiler options correctly.
389 if test x$GXX = xyes; then
390   dnl clang++ pretends to be g++ 4.2.1; this is not useful
391   if test x$CLANG = xno; then
392     dnl Useful for global version info
393     gxx_version=`${CXX} -dumpversion`
394     case $gxx_version in
395         *.*) ;;
396         *) gxx_version=`${CXX} -dumpfullversion` ;;
397     esac
398     CXX_VERSION="($gxx_version)"
399   else
400     gxx_version=clang-$clang_version
401     CXX_VERSION="($clang_version)"
402   fi
403
404   AM_CXXFLAGS="$lyx_optim $AM_CXXFLAGS"
405   if test x$enable_debug = xyes ; then
406       AM_CXXFLAGS="-g $AM_CXXFLAGS"
407   fi
408   if test $build_type = gprof ; then
409     AM_CXXFLAGS="$AM_CXXFLAGS -pg"
410     AM_LDFLAGS="$AM_LDFLAGS -pg"
411   fi
412   if test $build_type = profiling ; then
413     AM_CXXFLAGS="$AM_CXXFLAGS -fno-omit-frame-pointer"
414   fi
415
416   if test x$USE_QT5 = xyes ; then
417       AS_CASE([$host], [*mingw*|*cygwin*], [], [AM_CXXFLAGS="-fPIC $AM_CXXFLAGS"])
418   fi
419   dnl Warnings are for preprocessor too
420   if test x$enable_warnings = xyes ; then
421       AM_CXXFLAGS="$AM_CPPFLAGS -Wall -Wextra"
422       dnl Shut off warning -Wdeprecated-copy, which triggers too much
423       dnl note that g++ always accepts -Wno-xxx, even when -Wxxx is an error.
424       AC_LANG_PUSH(C++)
425       AX_CHECK_COMPILE_FLAG([-Wno-deprecated-copy],
426         [AM_CXXFLAGS="$AM_CXXFLAGS -Wno-deprecated-copy"], [], [-Werror])
427       AC_LANG_POP(C++)
428     fi
429   case $gxx_version in
430       2.*|3.*|4.@<:@0-6@:>@) AC_MSG_ERROR([gcc >= 4.7 is required]);;
431   esac
432   if test x$enable_stdlib_debug = xyes ; then
433     dnl FIXME: for clang/libc++, one should define _LIBCPP_DEBUG2=0
434     dnl See http://clang-developers.42468.n3.nabble.com/libc-debug-mode-td3336742.html
435     if test x$lyx_cv_lib_stdcxx = xyes ; then
436         lyx_flags="$lyx_flags stdlib-debug"
437         AC_DEFINE(_GLIBCXX_DEBUG, 1, [libstdc++ debug mode])
438         AC_DEFINE(_GLIBCXX_DEBUG_PEDANTIC, 1, [libstdc++ pedantic debug mode])
439         AC_SUBST(STDLIB_DEBUG, "-D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC")
440     else
441         enable_stdlib_debug=no
442     fi
443   fi
444 fi
445
446 # Some additional flags may be needed
447 if test x$GXX = xyes; then
448     case $gxx_version in
449       clang-3.0*|clang-3.1*|clang-3.2*|clang-3.3*)
450         dnl boost contains pragmas that are annoying on older clang versions
451         AM_CPPFLAGS="-Wno-unknown-pragmas $AM_CPPFLAGS";;
452       clang*)
453         dnl the more recent versions support the deprecated-register warning,
454         dnl which  is very annoying with Qt4.x right now.
455         AM_CXXFLAGS="$AM_CXXFLAGS -Wno-deprecated-register";;
456     esac
457 fi
458 ])
459
460 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
461 dnl        be used.
462 AC_DEFUN([LYX_USE_INCLUDED_BOOST],[
463         AC_MSG_CHECKING([whether to use included boost library])
464         AC_ARG_WITH(included-boost,
465             [AS_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])],
466             [lyx_cv_with_included_boost=$withval],
467             [lyx_cv_with_included_boost=yes])
468         AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
469         AC_MSG_RESULT([$lyx_cv_with_included_boost])
470         if test x$lyx_cv_with_included_boost = xyes ; then
471             lyx_included_libs="$lyx_included_libs boost"
472             BOOST_INCLUDES='-I$(top_srcdir)/3rdparty/boost'
473             if test $lyx_std_regex = yes ; then
474               BOOST_LIBS=""
475             else
476               BOOST_LIBS='$(top_builddir)/3rdparty/boost/liblyxboost.a'
477             fi
478         else
479             BOOST_INCLUDES=
480             if test $lyx_std_regex = yes ; then
481               BOOST_LIBS=""
482             else
483               AC_LANG_PUSH(C++)
484               save_LIBS=$LIBS
485
486               AC_MSG_CHECKING([for multithreaded boost libraries])
487               LIBS="$save_LIBS -lboost_regex-mt $LIBTHREAD"
488               AC_LINK_IFELSE(
489                 [AC_LANG_PROGRAM([#include <boost/regex.hpp>],
490                         [boost::regex reg;])],
491                 [AC_MSG_RESULT([yes])
492                  BOOST_MT="-mt"],
493                 [AC_MSG_RESULT([no])
494                  AC_MSG_CHECKING([for plain boost libraries])
495                  LIBS="$save_LIBS -lboost_regex"
496                  AC_LINK_IFELSE(
497                      [AC_LANG_PROGRAM([#include <boost/regex.hpp>],
498                              [boost::regex reg;])],
499                      [AC_MSG_RESULT([yes])
500                       BOOST_MT=""],
501                      [AC_MSG_RESULT([no])
502                       AC_MSG_ERROR([cannot find suitable boost library (do not use --without-included-boost)])
503                  ])
504               ])
505               LIBS=$save_LIBS
506               AC_LANG_POP(C++)
507
508               dnl In general, system boost libraries are incompatible with
509               dnl the use of stdlib-debug in libstdc++. See ticket #9736 for
510               dnl details.
511               if test $enable_stdlib_debug = "yes" ; then
512                 LYX_WARNING([Compiling LyX with stdlib-debug and system boost libraries may lead to
513    crashes. Consider using --disable-stdlib-debug or removing
514    --without-included-boost.])
515               fi
516
517               BOOST_LIBS="-lboost_regex${BOOST_MT}"
518             fi
519         fi
520         AC_SUBST(BOOST_INCLUDES)
521         AC_SUBST(BOOST_LIBS)
522 ])
523
524
525 dnl Usage: LYX_USE_INCLUDED_ICONV : select if the included iconv should
526 dnl        be used.
527 AC_DEFUN([LYX_USE_INCLUDED_ICONV],[
528   AC_MSG_CHECKING([whether to use included iconv library])
529   AC_ARG_WITH(included-iconv,
530     [AS_HELP_STRING([--with-included-iconv], [use the iconv lib supplied with LyX instead of the system one])],
531     [lyx_cv_with_included_iconv=$withval],
532     [lyx_cv_with_included_iconv=no])
533   AM_CONDITIONAL(USE_INCLUDED_ICONV, test x$lyx_cv_with_included_iconv = xyes)
534   AC_MSG_RESULT([$lyx_cv_with_included_iconv])
535   if test x$lyx_cv_with_included_iconv = xyes ; then
536   lyx_included_libs="$lyx_included_libs iconv"
537
538 dnl This is hardcoded to make it compile
539     AC_DEFINE([HAVE_WORKING_O_NOFOLLOW], 0, [Define to 1 if O_NOFOLLOW works.])
540
541 dnl Some bits from libiconv configure.ac to avoid a nested configure call:
542     AC_EILSEQ
543     AC_TYPE_MBSTATE_T
544     AC_CHECK_FUNCS([getc_unlocked mbrtowc wcrtomb mbsinit setlocale])
545 dnl Ymbstate_t is used if HAVE_WCRTOMB || HAVE_MBRTOWC, see 3rdparty/libiconv/1.15/lib/loop_wchar.h.
546     if test $ac_cv_func_wcrtomb = yes || test $ac_cv_func_mbrtowc = yes; then
547       USE_MBSTATE_T=1
548     else
549       USE_MBSTATE_T=0
550     fi
551     AC_SUBST([USE_MBSTATE_T])
552     AC_CACHE_CHECK([whether <wchar.h> is standalone],
553       [gl_cv_header_wchar_h_standalone],
554       [AC_COMPILE_IFELSE(
555         [AC_LANG_PROGRAM(
556           [[#include <wchar.h>
557             wchar_t w;]],
558           [[]])],
559         [gl_cv_header_wchar_h_standalone=yes],
560         [gl_cv_header_wchar_h_standalone=no])])
561     if test $gl_cv_header_wchar_h_standalone = yes; then
562       BROKEN_WCHAR_H=0
563     else
564       BROKEN_WCHAR_H=1
565     fi
566     AC_SUBST([BROKEN_WCHAR_H])
567 dnl we want const correctness
568     AC_DEFINE_UNQUOTED([ICONV_CONST], [const],
569       [Define as const if the declaration of iconv() needs const.])
570     ICONV_CONST=const
571     AC_SUBST([ICONV_CONST])
572 dnl we build a static lib
573     DLL_VARIABLE=
574     AC_SUBST([DLL_VARIABLE])
575     ICONV_INCLUDES='-I$(top_srcdir)/3rdparty/libiconv/1.15 -I$(top_builddir)/3rdparty/libiconv'
576     ICONV_LIBS='\$(top_builddir)/3rdparty/libiconv/liblyxiconv.a'
577     ICONV_ICONV_H_IN=3rdparty/libiconv/iconv.h:3rdparty/libiconv/1.15/include/iconv.h.in
578   else
579     ICONV_INCLUDES=
580     AM_ICONV
581     if test "$am_cv_func_iconv" = no; then
582       AC_MSG_ERROR([cannot find required library iconv.])
583     else
584       ICONV_LIBS="$LIBICONV"
585     fi
586     ICONV_ICONV_H_IN=
587   fi
588   AC_SUBST(ICONV_INCLUDES)
589   AC_SUBST(ICONV_LIBS)
590   AC_SUBST(ICONV_ICONV_H_IN)
591 ])
592
593
594 dnl Usage: LYX_USE_INCLUDED_ZLIB : select if the included zlib should
595 dnl        be used.
596 AC_DEFUN([LYX_USE_INCLUDED_ZLIB],[
597   AC_MSG_CHECKING([whether to use included zlib library])
598   AC_ARG_WITH(included-zlib,
599     [AS_HELP_STRING([--with-included-zlib], [use the zlib lib supplied with LyX instead of the system one])],
600     [lyx_cv_with_included_zlib=$withval],
601     [lyx_cv_with_included_zlib=no])
602   AM_CONDITIONAL(USE_INCLUDED_ZLIB, test x$lyx_cv_with_included_zlib = xyes)
603   AC_MSG_RESULT([$lyx_cv_with_included_zlib])
604   if test x$lyx_cv_with_included_zlib = xyes ; then
605     lyx_included_libs="$lyx_included_libs zlib"
606     ZLIB_INCLUDES='-I$(top_srcdir)/3rdparty/zlib/1.2.8 -I$(top_builddir)/3rdparty/zlib'
607     ZLIB_LIBS='$(top_builddir)/3rdparty/zlib/liblyxzlib.a'
608     mkdir -p 3rdparty/zlib
609 dnl include standard config.h for HAVE_UNISTD_H
610     echo "#include <../../config.h>" > 3rdparty/zlib/zconf.h
611 dnl prevent clash with system zlib that might be dragged in by other libs
612     echo "#define Z_PREFIX 1" >> 3rdparty/zlib/zconf.h
613     cat "${srcdir}/3rdparty/zlib/1.2.8/zconf.h.in" >> 3rdparty/zlib/zconf.h
614   else
615     ZLIB_INCLUDES=
616     AC_CHECK_HEADERS(zlib.h,
617       [AC_CHECK_LIB(z, gzopen, [ZLIB_LIBS="-lz"], LYX_LIB_ERROR(libz,zlib))],
618       [LYX_LIB_ERROR(zlib.h,zlib)])
619   fi
620   AC_SUBST(ZLIB_INCLUDES)
621   AC_SUBST(ZLIB_LIBS)
622 ])
623
624
625 dnl Usage: LYX_BUILD_INCLUDED_DTL : select if the included dtl should
626 dnl        be built and installed.
627 AC_DEFUN([LYX_BUILD_INCLUDED_DTL],[
628         AC_MSG_CHECKING([whether to build dv2dt and dt2dv])
629         AC_ARG_WITH(included-dtl,
630             [AS_HELP_STRING([--with-included-dtl], [build and install the dv2dt and dt2dv programs supplied with LyX])],
631             [lyx_cv_with_included_dtl=$withval],
632             [lyx_cv_with_included_dtl=no])
633         AM_CONDITIONAL(BUILD_INCLUDED_DTL, test x$lyx_cv_with_included_dtl = xyes)
634         AC_MSG_RESULT([$lyx_cv_with_included_dtl])
635         if test x$lyx_cv_with_included_dtl = xyes ; then
636             lyx_flags="$lyx_flags build-dtl"
637         fi])
638
639
640 dnl Usage: LYX_CHECK_CALLSTACK_PRINTING: define LYX_CALLSTACK_PRINTING if the
641 dnl        necessary APIs are available to print callstacks.
642 AC_DEFUN([LYX_CHECK_CALLSTACK_PRINTING],
643 [AC_ARG_ENABLE([callstack-printing],
644                [AS_HELP_STRING([--disable-callstack-printing],[do not print a callstack when crashing])],
645                lyx_cv_callstack_printing=$enableval, lyx_cv_callstack_printing=yes)
646
647 if test x"$lyx_cv_callstack_printing" = xyes; then
648   AC_CACHE_CHECK([whether printing callstack is possible],
649                  [lyx_cv_callstack_printing],
650   [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
651   #include <execinfo.h>
652   #include <cxxabi.h>
653   ]], [[
654           void* array[200];
655           size_t size = backtrace(array, 200);
656           backtrace_symbols(array, size);
657           int status = 0;
658           abi::__cxa_demangle("abcd", 0, 0, &status);
659   ]])],[],[lyx_cv_callstack_printing=no])])
660 fi
661 if test x"$lyx_cv_callstack_printing" = xyes; then
662   AC_DEFINE([LYX_CALLSTACK_PRINTING], 1,
663             [Define if callstack can be printed])
664   lyx_flags="$lyx_flags callback-printing"
665   AM_LDFLAGS="${AM_LDFLAGS} -rdynamic"
666 fi
667 ])
668
669
670 dnl Usage: LYX_USE_INCLUDED_MYTHES : select if the included MyThes should
671 dnl        be used.
672 AC_DEFUN([LYX_USE_INCLUDED_MYTHES],[
673   AC_ARG_WITH(included-mythes,
674     [AS_HELP_STRING([--with-included-mythes], [force to use the MyThes lib supplied with LyX])],
675     [use_included_mythes=$withval],
676     [use_included_mythes=no])
677   if test x$use_included_mythes != xyes ; then
678     AC_LANG_PUSH(C++)
679     use_included_mythes=yes
680     AC_CHECK_HEADERS([mythes.hxx mythes/mythes.hxx],
681       [mythes_h_location="<$ac_header>"
682        save_LIBS=$LIBS
683        AC_MSG_CHECKING([checking for MyThes library])
684        for ac_lib in mythes mythes-1.2 ; do
685          LIBS="-l$ac_lib $save_LIBS"
686          AC_LINK_IFELSE(
687            [AC_LANG_PROGRAM([#include <cstdio>]
688               [#include $mythes_h_location], [MyThes dummy("idx","dat")])],
689            [MYTHES_LIBS=-l$ac_lib
690             AC_MSG_RESULT([$MYTHES_LIBS])
691             use_included_mythes=no])
692        done
693        if test $use_included_mythes != no ; then
694          AC_MSG_RESULT([not found])
695        fi
696        break])
697     AC_LANG_POP(C++)
698   fi
699   if test $use_included_mythes = yes ; then
700     mythes_h_location="<mythes.hxx>"
701     MYTHES_INCLUDES='-I$(top_srcdir)/3rdparty/mythes/1.2.5/'
702     MYTHES_LIBS='$(top_builddir)/3rdparty/mythes/liblyxmythes.a'
703     lyx_included_libs="$lyx_included_libs mythes"
704   fi
705   AM_CONDITIONAL(USE_INCLUDED_MYTHES, test x$use_included_mythes = xyes)
706   AC_DEFINE_UNQUOTED(MYTHES_H_LOCATION,$mythes_h_location,[Location of mythes.hxx])
707   AC_SUBST(MYTHES_INCLUDES)
708   AC_SUBST(MYTHES_LIBS)
709   AC_MSG_CHECKING([whether to use included MyThes library])
710   AC_MSG_RESULT([$use_included_mythes])
711 ])
712
713
714 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
715 dnl                       [default-yes-value])
716 dnl  Adds a --with-'dir-name' option (described by 'desc') and puts the
717 dnl  resulting directory name in 'dir-var-name'.
718 AC_DEFUN([LYX_WITH_DIR],[
719   AC_ARG_WITH($1,[AS_HELP_STRING([--with-$1],[specify $2])])
720   AC_MSG_CHECKING([for $2])
721   if test -z "$with_$3"; then
722      AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
723   else
724     test "x$with_$3" = xyes && with_$3=$5
725     lyx_cv_$3="$with_$3"
726   fi
727   AC_MSG_RESULT($lyx_cv_$3)
728 ])
729
730
731 dnl Usage: LYX_LOOP_DIR(value,action)
732 dnl Executes action for values of variable `dir' in `values'. `values' can
733 dnl use ":" as a separator.
734 AC_DEFUN([LYX_LOOP_DIR],[
735 IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
736 for dir in `eval "echo $1"`; do
737   if test ! "$dir" = NONE; then
738     test ! -d "$dir" && AC_MSG_ERROR(['$dir' is not a directory])
739     $2
740   fi
741 done
742 IFS=$ac_save_ifs
743 ])
744
745
746 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
747 dnl var-name.
748 AC_DEFUN([LYX_ADD_LIB_DIR],[
749 $1="${$1} -L$2"
750 if test "`(uname) 2>/dev/null`" = SunOS &&
751     uname -r | grep '^5' >/dev/null; then
752   if test $GXX = yes ; then
753     $1="${$1} -Wl[,]-R$2"
754   else
755     $1="${$1} -R$2"
756   fi
757 fi])
758
759
760 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
761 dnl var-name.
762 AC_DEFUN([LYX_ADD_INC_DIR],[$1="${$1} -I$2 "])
763
764 ### Check for a headers existence and location iff it exists
765 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
766 ## It almost works.  I've tried a few variations but they give errors
767 ## of one sort or other: bad substitution or file not found etc.  The
768 ## actual header _is_ found though and the cache variable is set however
769 ## the reported setting (on screen) is equal to $ac_safe for some unknown
770 ## reason.
771 ## Additionally, autoheader can't figure out what to use as the name in
772 ## the config.h.in file so we need to write our own entries there -- one for
773 ## each header in the form PATH_HEADER_NAME_H
774 ##
775 AC_DEFUN([LYX_PATH_HEADER],
776 [ AC_CHECK_HEADER($1,[
777   ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
778 ### the only remaining problem is getting the second parameter to this
779 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
780 ### of $ac_safe being printed.
781   AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
782   [ cat > conftest.$ac_ext <<EOF
783 #line __oline__ "configure"
784 #include "confdefs.h"
785
786 #include <$1>
787 EOF
788 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
789   grep $1  2>/dev/null | \
790   sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
791 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
792 rm -f conftest*])
793   AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
794 ])
795 ### end of LYX_PATH_HEADER
796
797 ## Check what kind of packaging should be used at install time.
798 ## The default is autodetected.
799 AC_DEFUN([LYX_USE_PACKAGING],
800 [AC_MSG_CHECKING([what packaging should be used])
801 AC_ARG_WITH(packaging,
802   [AS_HELP_STRING([--with-packaging=STR], [set packaging for installation among:
803                             posix, windows, macosx, haiku (default is autodetected)])],
804   [lyx_use_packaging="$withval"], [
805   case $host in
806     *-apple-darwin*) lyx_use_packaging=macosx ;;
807     *-pc-mingw*) lyx_use_packaging=windows ;;
808     *-mingw32*) lyx_use_packaging=windows ;;
809     *haiku*) lyx_use_packaging=haiku ;;
810     *) lyx_use_packaging=posix ;;
811   esac])
812 AC_MSG_RESULT($lyx_use_packaging)
813 lyx_install_posix=false
814 lyx_install_macosx=false
815 lyx_install_cygwin=false
816 lyx_install_windows=false
817 case $lyx_use_packaging in
818    macosx) AC_DEFINE(USE_MACOSX_PACKAGING, 1, [Define to 1 if LyX should use a MacOS X application bundle file layout])
819            PACKAGE=LyX${version_suffix}
820            default_prefix="/Applications/${PACKAGE}.app"
821            AC_SUBST(osx_bundle_program_name,"${program_base_name}")
822            bindir='${prefix}/Contents/MacOS'
823            libdir='${prefix}/Contents/Resources'
824            datarootdir='${prefix}/Contents/Resources'
825            pkgdatadir='${datadir}'
826            mandir='${datadir}/man'
827            lyx_install_macosx=true ;;
828   windows) AC_DEFINE(USE_WINDOWS_PACKAGING, 1, [Define to 1 if LyX should use a Windows-style file layout])
829            PACKAGE=LyX${version_suffix}
830            default_prefix="C:/Program Files/${PACKAGE}"
831            bindir='${prefix}/bin'
832            libdir='${prefix}/Resources'
833            datarootdir='${prefix}/Resources'
834            pkgdatadir='${datadir}'
835            mandir='${prefix}/Resources/man'
836            lyx_install_windows=true ;;
837     posix) AC_DEFINE(USE_POSIX_PACKAGING, 1, [Define to 1 if LyX should use a POSIX-style file layout])
838            PACKAGE=lyx${version_suffix}
839            program_suffix=$version_suffix
840            pkgdatadir='${datadir}/${PACKAGE}'
841            default_prefix=$ac_default_prefix
842            case ${host} in
843              *cygwin*) lyx_install_cygwin=true ;;
844              *apple-darwin*) lyx_install_macosx=true ;;
845            esac
846            lyx_install_posix=true ;;
847         haiku) AC_DEFINE(USE_HAIKU_PACKAGING, 1, [Define to 1 if LyX should use a Haiku-style file layout])
848            PACKAGE=lyx${version_suffix}
849            program_suffix=$version_suffix
850            pkgdatadir='${datadir}/${PACKAGE}'
851            default_prefix=$ac_default_prefix
852            lyx_install_posix=true ;;
853     *) AC_MSG_ERROR([unknown packaging type $lyx_use_packaging.]) ;;
854 esac
855 AM_CONDITIONAL(INSTALL_MACOSX, $lyx_install_macosx)
856 AM_CONDITIONAL(INSTALL_WINDOWS, $lyx_install_windows)
857 AM_CONDITIONAL(INSTALL_CYGWIN, $lyx_install_cygwin)
858 AM_CONDITIONAL(INSTALL_POSIX, $lyx_install_posix)
859 AC_SUBST(pkgdatadir)
860 AC_SUBST(program_suffix)
861 ])
862
863
864 ## ------------------------------------------------------------------------
865 ## Check whether mkdir() is mkdir or _mkdir, and whether it takes
866 ## one or two arguments.
867 ##
868 ## http://ac-archive.sourceforge.net/C_Support/ac_func_mkdir.html
869 ## ------------------------------------------------------------------------
870 ##
871 AC_DEFUN([AC_FUNC_MKDIR],
872 [AC_CHECK_FUNCS([mkdir _mkdir])
873 AC_CACHE_CHECK([whether mkdir takes one argument],
874                [ac_cv_mkdir_takes_one_arg],
875 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
876 #include <sys/stat.h>
877 #if HAVE_UNISTD_H
878 #  include <unistd.h>
879 #endif
880 ]], [[mkdir (".");]])],[ac_cv_mkdir_takes_one_arg=yes],[ac_cv_mkdir_takes_one_arg=no])])
881 if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then
882   AC_DEFINE([MKDIR_TAKES_ONE_ARG], 1,
883             [Define if mkdir takes only one argument.])
884 fi
885 ])
886
887
888 dnl Set VAR to the canonically resolved absolute equivalent of PATHNAME,
889 dnl (which may be a relative path, and need not refer to any existing
890 dnl entity).
891
892 dnl On Win32-MSYS build hosts, the returned path is resolved to its true
893 dnl native Win32 path name, (but with slashes, not backslashes).
894
895 dnl On any other system, it is simply the result which would be obtained
896 dnl if PATHNAME represented an existing directory, and the pwd command was
897 dnl executed in that directory.
898 AC_DEFUN([MSYS_AC_CANONICAL_PATH],
899 [ac_dir="$2"
900  ( exec 2>/dev/null; cd / && pwd -W ) | grep ':' >/dev/null &&
901     ac_pwd_w="pwd -W" || ac_pwd_w=pwd
902  until ac_val=`exec 2>/dev/null; cd "$ac_dir" && $ac_pwd_w`
903  do
904    ac_dir=`AS_DIRNAME(["$ac_dir"])`
905  done
906  ac_dir=`echo "$ac_dir" | sed 's?^[[./]]*??'`
907  ac_val=`echo "$ac_val" | sed 's?/*$[]??'`
908  $1=`echo "$2" | sed "s?^[[./]]*$ac_dir/*?$ac_val/?"'
909    s?/*$[]??'`
910 ])
911
912 dnl this is used by the macro blow to general a proper config.h.in entry
913 m4_define([LYX_AH_CHECK_DECL],
914 [AH_TEMPLATE(AS_TR_CPP(HAVE_DECL_$1),
915   [Define if you have the prototype for function `$1'])])dnl`
916
917 dnl Check things are declared in headers to avoid errors or warnings.
918 dnl Called like LYX_CHECK_DECL(function, header1 header2...)
919 dnl Defines HAVE_DECL_{FUNCTION}
920 AC_DEFUN([LYX_CHECK_DECL],
921 [LYX_AH_CHECK_DECL($1)
922 for ac_header in $2
923 do
924   AC_MSG_CHECKING([if $1 is declared by header $ac_header])
925   AC_EGREP_HEADER($1, $ac_header,
926       [AC_MSG_RESULT(yes)
927        AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DECL_$1))
928        break],
929       [AC_MSG_RESULT(no)])
930 done])
931
932 dnl this is used by the macro below to generate a proper config.h.in entry
933 m4_define([LYX_AH_CHECK_DEF],
934 [AH_TEMPLATE(AS_TR_CPP(HAVE_DEF_$1),
935   [Define to 1 if `$1' is defined in `$2'])])dnl'
936
937 dnl Check whether name is defined in header by using it in codesnippet.
938 dnl Called like LYX_CHECK_DEF(name, header, codesnippet)
939 dnl Defines HAVE_DEF_{NAME}
940 AC_DEFUN([LYX_CHECK_DEF],
941 [LYX_AH_CHECK_DEF($1, $2)
942  AC_MSG_CHECKING([whether $1 is defined by header $2])
943  save_CPPFLAGS=$CPPFLAGS
944  CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
945  save_CXXFLAGS=$CXXFLAGS
946  CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS"
947  AC_LANG_PUSH(C++)
948  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <$2>]], [[$3]])],[lyx_have_def_name=yes],[lyx_have_def_name=no])
949  AC_LANG_POP(C++)
950  CXXFLAGS=$save_CXXFLAGS
951  CPPFLAGS=$save_CPPFLAGS
952  AC_MSG_RESULT($lyx_have_def_name)
953  if test "x$lyx_have_def_name" = xyes; then
954    AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DEF_$1))
955  fi
956 ])
957
958 dnl Extract the single digits from PACKAGE_VERSION and make them available.
959 dnl Defines LYX_MAJOR_VERSION, LYX_MINOR_VERSION, LYX_RELEASE_LEVEL,
960 dnl LYX_RELEASE_PATCH (possibly equal to 0), LYX_DIR_VER, and LYX_USERDIR_VER.
961 AC_DEFUN([LYX_SET_VERSION_INFO],
962 [lyx_major=`echo $PACKAGE_VERSION | sed -e 's/[[.]].*//'`
963  lyx_patch=`echo $PACKAGE_VERSION | sed -e "s/^$lyx_major//" -e 's/^.//'`
964  lyx_minor=`echo $lyx_patch | sed -e 's/[[.]].*//'`
965  lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_minor//" -e 's/^.//'`
966  lyx_release=`echo $lyx_patch | sed -e 's/[[^0-9]].*//'`
967  lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_release//" -e 's/^[[.]]//' -e 's/[[^0-9]].*//'`
968  test "x$lyx_patch" = "x" && lyx_patch=0
969  lyx_dir_ver=LYX_DIR_${lyx_major}${lyx_minor}x
970  lyx_userdir_ver=LYX_USERDIR_${lyx_major}${lyx_minor}x
971  AC_SUBST(LYX_MAJOR_VERSION,$lyx_major)
972  AC_SUBST(LYX_MINOR_VERSION,$lyx_minor)
973  AC_SUBST(LYX_RELEASE_LEVEL,$lyx_release)
974  AC_SUBST(LYX_RELEASE_PATCH,$lyx_patch)
975  AC_SUBST(LYX_DIR_VER,"$lyx_dir_ver")
976  AC_SUBST(LYX_USERDIR_VER,"$lyx_userdir_ver")
977 ])
978