]> git.lyx.org Git - lyx.git/blob - config/lyxinclude.m4
446dce894e462b1de813f6b7ff99cfe224c704e8
[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 variables "lyx_devel_version" and "lyx_prerelease"
9 AC_DEFUN([LYX_CHECK_VERSION],[
10 echo "configuring LyX version" AC_PACKAGE_VERSION
11 lyx_devel_version=no
12 lyx_prerelease=no
13 build_type=release
14 AC_MSG_CHECKING([for build type])
15 AC_ARG_ENABLE(build-type,
16   AC_HELP_STRING([--enable-build-type=TYPE],[set build setting according to TYPE=dev(elopment), rel(ease) or pre(release)]),
17   [case $enableval in
18     dev*) lyx_devel_version=yes
19           build_type=development;;
20     pre*) lyx_prerelease=yes
21           build_type=prerelease;;
22     rel*) ;;
23     *) AC_ERROR([Bad build type specification \"$enableval\". Please use one of dev(elopment), rel(ease) or pre(release)]);;
24    esac],
25   [case AC_PACKAGE_VERSION in
26     *svn*) lyx_devel_version=yes
27           build_type=development;;
28     *pre*|*alpha*|*beta*|*rc*) lyx_prerelease=yes
29           build_type=prerelease;;
30    esac])
31 AC_MSG_RESULT([$build_type])
32 if test $lyx_devel_version == yes ; then
33            AC_DEFINE(DEVEL_VERSION, 1, [Define if you are building a development version of LyX])
34            LYX_DATE="not released yet"
35 fi
36 AC_SUBST(lyx_devel_version)])
37
38
39 dnl Define the option to set a LyX version on installed executables and directories
40 dnl
41 dnl
42 AC_DEFUN([LYX_VERSION_SUFFIX],[
43 AC_MSG_CHECKING([for version suffix])
44 dnl We need the literal double quotes in the rpm spec file
45 RPM_VERSION_SUFFIX='""'
46 AC_ARG_WITH(version-suffix,
47   [  --with-version-suffix[=<version>]  install lyx files as lyx<version>],
48   [if test "x$withval" = "xyes";
49    then
50      withval="-"AC_PACKAGE_VERSION
51      ac_configure_args=`echo "$ac_configure_args" | sed "s,--with-version-suffix,--with-version-suffix=$withval,"`
52    fi
53    AC_SUBST(version_suffix,$withval)
54    RPM_VERSION_SUFFIX="--with-version-suffix=$withval"])
55 AC_SUBST(RPM_VERSION_SUFFIX)
56 AC_MSG_RESULT([$withval])
57 ])
58
59
60 dnl Usage: LYX_ERROR(message)  Displays the warning "message" and sets the
61 dnl flag lyx_error to yes.
62 AC_DEFUN([LYX_ERROR],[
63 lyx_error_txt="$lyx_error_txt
64 ** $1
65 "
66 lyx_error=yes])
67
68
69 dnl Usage: LYX_WARNING(message)  Displays the warning "message" and sets the
70 dnl flag lyx_warning to yes.
71 AC_DEFUN([LYX_WARNING],[
72 lyx_warning_txt="$lyx_warning_txt
73 == $1
74 "
75 lyx_warning=yes])
76
77
78 dnl Usage: LYX_LIB_ERROR(file,library)  Displays an error message indication
79 dnl  that 'file' cannot be found because 'lib' may be uncorrectly installed.
80 AC_DEFUN([LYX_LIB_ERROR],[
81 LYX_ERROR([Cannot find $1. Please check that the $2 library
82    is correctly installed on your system.])])
83
84
85 dnl Usage: LYX_CHECK_ERRORS  Displays a warning message if a LYX_ERROR
86 dnl   has occured previously.
87 AC_DEFUN([LYX_CHECK_ERRORS],[
88 if test x$lyx_warning = xyes; then
89 cat <<EOF
90 === The following minor problems have been detected by configure.
91 === Please check the messages below before running 'make'.
92 === (see the section 'Problems' in the INSTALL file)
93 $lyx_warning_txt
94 EOF
95 fi
96 if test x$lyx_error = xyes; then
97 cat <<EOF
98 **** The following problems have been detected by configure.
99 **** Please check the messages below before running 'make'.
100 **** (see the section 'Problems' in the INSTALL file)
101 $lyx_error_txt
102 $lyx_warning_txt
103 EOF
104 exit 1
105 else
106
107 cat <<EOF
108 Configuration of LyX was successful.
109 Type 'make' to compile the program,
110 and then 'make install' to install it.
111 EOF
112 fi])
113
114
115 dnl LYX_SEARCH_PROG(VARIABLE-NAME,PROGRAMS-LIST,ACTION-IF-FOUND)
116 dnl
117 define(LYX_SEARCH_PROG,[dnl
118 for ac_prog in $2 ; do
119 # Extract the first word of "$ac_prog", so it can be a program name with args.
120   set dummy $ac_prog ; ac_word=$[2]
121   if test -z "[$]$1"; then
122     IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
123     for ac_dir in $PATH; do
124       test -z "$ac_dir" && ac_dir=.
125       if test -f [$ac_dir/$ac_word]; then
126         $1="$ac_prog"
127         break
128       fi
129     done
130     IFS="$ac_save_ifs"
131   fi
132
133   if test -n "[$]$1"; then
134     ac_result=yes
135   else
136     ac_result=no
137   fi
138   ifelse($3,,,[$3])
139   test -n "[$]$1" && break
140 done
141 ])dnl
142
143
144 AC_DEFUN([LYX_PROG_CXX_WORKS],
145 [rm -f conftest.C
146 cat >conftest.C <<EOF
147 class foo {
148    // we require the mutable keyword
149    mutable int bar;
150  };
151  // we require namespace support
152  namespace baz {
153    int bar;
154  }
155  int main() {
156    return(0);
157  }
158 EOF
159 $CXX -c $CXXFLAGS $CPPFLAGS conftest.C >&5 || CXX=
160 rm -f conftest.C conftest.o conftest.obj || true
161 ])
162
163
164 AC_DEFUN([LYX_PROG_CXX],
165 [AC_MSG_CHECKING([for a good enough C++ compiler])
166 LYX_SEARCH_PROG(CXX, $CXX $CCC g++ gcc c++ CC cxx xlC cc++, [LYX_PROG_CXX_WORKS])
167
168 if test -z "$CXX" ; then
169   AC_MSG_ERROR([Unable to find a good enough C++ compiler])
170 fi
171 AC_MSG_RESULT($CXX)
172
173 AC_PROG_CXX
174 AC_PROG_CXXCPP
175
176 ### We might want to get or shut warnings.
177 AC_ARG_ENABLE(warnings,
178   AC_HELP_STRING([--enable-warnings],[tell the compiler to display more warnings]),,
179   [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $ac_cv_prog_gxx = yes ; then
180         enable_warnings=yes;
181     else
182         enable_warnings=no;
183     fi;])
184 if test x$enable_warnings = xyes ; then
185   lyx_flags="warnings $lyx_flags"
186 fi
187
188 ### We might want to disable debug
189 AC_ARG_ENABLE(debug,
190   AC_HELP_STRING([--enable-debug],[enable debug information]),,
191   [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes ; then
192         enable_debug=yes;
193     else
194         enable_debug=no;
195     fi;])
196
197 AC_ARG_ENABLE(stdlib-debug,
198   AC_HELP_STRING([--enable-stdlib-debug],[enable debug mode in the standard library]),,
199   [ if test $lyx_devel_version = yes ; then
200       enable_stdlib_debug=yes;
201     else
202       enable_stdlib_debug=no;
203     fi;])
204
205 AC_ARG_ENABLE(concept-checks,
206   AC_HELP_STRING([--enable-concept-checks],[enable concept checks]),,
207   [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes ; then
208         enable_concept_checks=yes;
209     else
210         enable_concept_checks=no;
211     fi;])
212
213 AC_ARG_ENABLE(profiling,
214   AC_HELP_STRING([--enable-profiling],[enable profiling]),,
215   enable_profiling=no;)
216
217 ### set up optimization
218 AC_ARG_ENABLE(optimization,
219     AC_HELP_STRING([--enable-optimization[=value]],[enable compiler optimisation]),,
220     enable_optimization=yes;)
221 case $enable_optimization in
222     yes)
223         if test $lyx_devel_version = yes ; then
224             lyx_opt=-O
225         else
226             lyx_opt=-O2
227         fi;;
228     no) lyx_opt=;;
229     *) lyx_opt=${enable_optimization};;
230 esac
231
232 AC_ARG_ENABLE(pch,
233   AC_HELP_STRING([--enable-pch],[enable precompiled headers]),,
234         enable_pch=no;)
235 lyx_pch_comp=no
236
237 # set the compiler options correctly.
238 if test x$GXX = xyes; then
239   dnl Useful for global version info
240   gxx_version=`${CXX} -dumpversion`
241   CXX_VERSION="($gxx_version)"
242
243   if test "$ac_test_CXXFLAGS" = set; then
244     CXXFLAGS="$ac_save_CXXFLAGS"
245   else
246       CFLAGS="$lyx_opt"
247       CXXFLAGS="$lyx_opt"
248     if test x$enable_debug = xyes ; then
249         CFLAGS="-g $CFLAGS"
250         CXXFLAGS="-g $CXXFLAGS"
251     fi
252     if test x$enable_profiling = xyes ; then
253         CFLAGS="-pg $CFLAGS"
254         CXXFLAGS="-pg $CXXFLAGS"
255         LDFLAGS="-pg $LDFLAGS"
256     fi
257   fi
258   if test "$ac_env_CPPFLAGS_set" != set; then
259     if test x$enable_warnings = xyes ; then
260         case $gxx_version in
261             3.1*|3.2*|3.3*)
262                 CPPFLAGS="-W -Wall $CPPFLAGS"
263                 ;;
264             *)
265                 CPPFLAGS="-Wextra -Wall $CPPFLAGS "
266                 ;;
267         esac
268     fi
269   fi
270   case $gxx_version in
271       3.1*)    AM_CXXFLAGS="-finline-limit=500 ";;
272       3.2*|3.3*)    AM_CXXFLAGS="";;
273       3.4*|4.*)
274           AM_CXXFLAGS=""
275           test $enable_pch = yes && lyx_pch_comp=yes
276           ;;
277       *)       AM_CXXFLAGS="";;
278   esac
279   if test x$enable_stdlib_debug = xyes ; then
280     case $gxx_version in
281       3.4*|4.*)
282         lyx_flags="stdlib-debug $lyx_flags"
283         AC_DEFINE(_GLIBCXX_DEBUG, 1, [libstdc++ debug mode])
284         AC_DEFINE(_GLIBCXX_DEBUG_PEDANTIC, 1, [libstdc++ pedantic debug mode])
285         ;;
286     esac
287   fi
288   if test x$enable_concept_checks = xyes ; then
289     case $gxx_version in
290       3.3*)
291         lyx_flags="concept-checks $lyx_flags"
292         AC_DEFINE(_GLIBCPP_CONCEPT_CHECKS, 1, [libstdc++ concept checking])
293         ;;
294       3.4*|4.*)
295         lyx_flags="concept-checks $lyx_flags"
296         AC_DEFINE(_GLIBCXX_CONCEPT_CHECKS, 1, [libstdc++ concept checking])
297         ;;
298     esac
299   fi
300 fi
301 test "$lyx_pch_comp" = yes && lyx_flags="pch $lyx_flags"
302 AM_CONDITIONAL(LYX_BUILD_PCH, test "$lyx_pch_comp" = yes)
303 ])dnl
304
305
306 dnl NOT USED CURRENTLY*************************************
307 dnl Usage: LYX_CXX_RTTI : checks whether the C++ compiler
308 dnl   supports RTTI
309 AC_DEFUN([LYX_CXX_RTTI],[
310 ### Check whether the compiler supports runtime type information
311 AC_CACHE_CHECK(whether the C++ compiler supports RTTI,lyx_cv_rtti,
312  [AC_TRY_RUN([
313 class rtti {
314 public:
315    virtual int tag() { return 0; }
316 };
317 class derived1 : public rtti {
318 public:
319     int tag() { return 1; }
320 };
321 class derived2 : public rtti {
322 public:
323     int tag() { return 2; }
324 };
325 int main() {
326     derived1 * foo1 = new derived1();
327     derived2 * foo2 = new derived2();
328     rtti * bar = foo1;
329     derived1 * bar1 = dynamic_cast<derived1 *>(bar);
330     if (bar1 == 0)
331         exit(1);
332     bar = foo2;
333     bar1 = dynamic_cast<derived1 *>(bar);
334     if (bar1 != 0)
335         exit(1);
336     return 0;
337 }
338 ],lyx_cv_rtti=yes,lyx_cv_rtti=no,lyx_cv_rtti=no)
339 ])
340 if test x$lyx_cv_rtti = xyes ; then
341   AC_DEFINE(HAVE_RTTI, 1,
342    [Define to 1 if your compiler supports runtime type information])
343 fi])
344
345
346 dnl Usage: LYX_CXX_EXPLICIT : checks whether the C++ compiler
347 dnl   understands the "explicit" directive.
348 AC_DEFUN([LYX_CXX_EXPLICIT],[
349 ### Check whether the compiler understands the keyword `explicit'
350 AC_CACHE_CHECK(whether the C++ compiler understands explicit,lyx_cv_explicit,
351  [AC_TRY_COMPILE([
352 class Expl {
353 public:
354         explicit Expl() {}
355 };],,lyx_cv_explicit=yes,lyx_cv_explicit=no)
356 ])
357 if test $lyx_cv_explicit = no ; then
358   AC_DEFINE(explicit,[ ],
359    [Define to nothing if your compiler does not understand the
360    'explicit' directive])
361 fi])
362
363
364 dnl NOT USED CURRENTLY*************************************
365 dnl Usage: LYX_CXX_STL_STACK : checks whether the C++ compiler
366 dnl   has a working stl stack template
367 AC_DEFUN([LYX_CXX_STL_STACK],[
368 AC_CACHE_CHECK(for broken STL stack template,lyx_cv_broken_stack,
369  [AC_TRY_COMPILE([
370 #include <stack>
371 using std::stack;
372 ],[
373     stack<int> stakk;
374     stakk.push(0);
375 ],lyx_cv_broken_stack=no,lyx_cv_broken_stack=yes)
376 ])
377 if test $lyx_cv_broken_stack = yes ; then
378   AC_DEFINE(BROKEN_STL_STACK, 1,
379    [Define if you have the STL from libg++ 2.7.x, where stack<> is not defined
380    correctly])
381 fi])
382
383
384 dnl Usage: LYX_STD_COUNT : checks wherer the C++ library have a conforming
385 dnl    count template, if not the old HP version is assumed.
386 AC_DEFUN([LYX_STD_COUNT],[
387 AC_CACHE_CHECK(for conforming std::count,lyx_cv_std_count,
388  [AC_TRY_COMPILE([
389 #include <algorithm>
390 using std::count;
391 int countChar(char * b, char * e, char const c)
392 {
393         return count(b, e, c);
394 }
395 ],[
396     char a[] = "hello";
397     int i = countChar(a, a + 5, 'l');
398 ],lyx_cv_std_count=yes,lyx_cv_std_count=no)
399 ])
400 if test $lyx_cv_std_count = yes ; then
401     AC_DEFINE(HAVE_STD_COUNT, 1,
402     [Define if you have a conforming std::count template, otherwise HP version of count template is assumed.])
403 fi])
404
405
406 dnl Usage: LYX_CXX_STL_MODERN_STREAMS : checks whether the C++ compiler
407 dnl   supports modern STL streams
408 AC_DEFUN([LYX_CXX_STL_MODERN_STREAMS],[
409 AC_CACHE_CHECK(for modern STL streams,lyx_cv_modern_streams,
410  [AC_TRY_COMPILE([
411 #include <iostream>
412 ],[
413  std::streambuf * test = std::cerr.rdbuf();
414  test->pubsync();
415 ],lyx_cv_modern_streams=yes,lyx_cv_modern_streams=no)
416 ])
417 if test $lyx_cv_modern_streams = yes ; then
418   AC_DEFINE(MODERN_STL_STREAMS, 1,
419    [Define if you have modern standard-compliant STL streams])
420 fi])
421
422
423 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
424 dnl        be used.
425 AC_DEFUN([LYX_USE_INCLUDED_BOOST],[
426         AC_MSG_CHECKING([whether to use boost included library])
427         AC_ARG_WITH(included-boost,
428             [  --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],
429             [lyx_cv_with_included_boost=$withval],
430             [lyx_cv_with_included_boost=yes])
431         AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
432         AC_MSG_RESULT([$lyx_cv_with_included_boost])
433         if test x$lyx_cv_with_included_boost != xyes ; then
434                 AC_CHECK_LIB(boost_signals, main, [lyx_boost_underscore=yes], [], [-lm])
435                 AC_CHECK_LIB(boost_signals-mt, main, [lyx_boost_underscore_mt=yes], [], [-lm $LIBTHREAD])
436                 if test x$lyx_boost_underscore_mt = xyes ; then
437                         BOOST_MT="-mt"
438                 else
439                         BOOST_MT=""
440                         if test x$lyx_boost_plain != xyes -a x$lyx_boost_underscore != xyes ; then
441                                 LYX_ERROR([No suitable boost library found (do not use --without-included-boost)])
442                         fi
443                 fi
444                 AC_SUBST(BOOST_SEP)
445                 AC_SUBST(BOOST_MT)
446         fi
447 ])
448
449
450 dnl NOT USED CURRENTLY*************************************
451 dnl LYX_CXX_PARTIAL
452 AC_DEFUN([LYX_CXX_PARTIAL], [
453     AC_REQUIRE([AC_PROG_CXX])
454     AC_CACHE_CHECK([if C++ compiler supports partial specialization],
455         [lyx_cv_cxx_partial_specialization],
456         [AC_TRY_COMPILE(
457             [
458             template<class T, class K>
459             class k {
460             public:
461             };
462             template<class T> class k<void,T> { };
463             ],[
464             k<float, float> b;
465             k<void,void> a;
466             ],[
467             lyx_cv_cxx_partial_specialization=yes
468             ],[
469             lyx_cv_cxx_partial_specialization=no
470             ])
471         ])
472     if test x$lyx_cv_cxx_partial_specialization = xyes ; then
473         AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1,
474         [Defined if your compiler supports partial specialization.])
475     fi
476 ])
477
478
479 dnl Usage: LYX_CXX_GLOBAL_CSTD: checks whether C library functions
480 dnl   are already in the global namespace
481 AC_DEFUN([LYX_CXX_GLOBAL_CSTD],[
482     AC_CACHE_CHECK(whether C library functions are already in the global namespace,
483     lyx_cv_cxx_global_cstd,
484     [AC_TRY_COMPILE([
485     #include <cctype>
486     using std::tolower;
487     ],[
488     return 0;
489     ],[lyx_cv_cxx_global_cstd=no],[lyx_cv_cxx_global_cstd=yes])])
490     if test x$lyx_cv_cxx_global_cstd = xyes; then
491         AC_DEFINE(CXX_GLOBAL_CSTD,1,
492         [Define if your C++ compiler puts C library functions in the global namespace])
493     fi
494 ])
495
496
497 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
498 dnl                       [default-yes-value])
499 dnl  Adds a --with-'dir-name' option (described by 'desc') and puts the
500 dnl  resulting directory name in 'dir-var-name'.
501 AC_DEFUN([LYX_WITH_DIR],[
502   AC_ARG_WITH($1,[AC_HELP_STRING([--with-$1],[specify $2])])
503   AC_MSG_CHECKING([for $2])
504   if test -z "$with_$3"; then
505      AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
506   else
507     test "x$with_$3" = xyes && with_$3=$5
508     lyx_cv_$3="$with_$3"
509   fi
510   AC_MSG_RESULT($lyx_cv_$3)])
511
512
513 dnl Usage: LYX_LOOP_DIR(value,action)
514 dnl Executes action for values of variable `dir' in `values'. `values' can
515 dnl use ":" as a separator.
516 AC_DEFUN([LYX_LOOP_DIR],[
517 IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
518 for dir in `eval "echo $1"`; do
519   if test ! "$dir" = NONE; then
520     test ! -d "$dir" && AC_MSG_ERROR([\"$dir\" is not a directory])
521     $2
522   fi
523 done
524 IFS=$ac_save_ifs
525 ])
526
527
528 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
529 dnl var-name.
530 AC_DEFUN([LYX_ADD_LIB_DIR],[
531 $1="${$1} -L$2"
532 if test "`(uname) 2>/dev/null`" = SunOS &&
533     uname -r | grep '^5' >/dev/null; then
534   if test $ac_cv_prog_gxx = yes ; then
535     $1="${$1} -Wl[,]-R$2"
536   else
537     $1="${$1} -R$2"
538   fi
539 fi])
540
541
542 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
543 dnl var-name.
544 AC_DEFUN([LYX_ADD_INC_DIR],[$1="${$1} -I$2 "])
545
546 ### Check for a headers existence and location iff it exists
547 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
548 ## It almost works.  I've tried a few variations but they give errors
549 ## of one sort or other: bad substitution or file not found etc.  The
550 ## actual header _is_ found though and the cache variable is set however
551 ## the reported setting (on screen) is equal to $ac_safe for some unknown
552 ## reason.
553 ## Additionally, autoheader can't figure out what to use as the name in
554 ## the config.h.in file so we need to write our own entries there -- one for
555 ## each header in the form PATH_HEADER_NAME_H
556 ##
557 AC_DEFUN([LYX_PATH_HEADER],
558 [ AC_CHECK_HEADER($1,[
559   ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
560 ### the only remaining problem is getting the second parameter to this
561 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
562 ### of $ac_safe being printed.
563   AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
564   [ cat > conftest.$ac_ext <<EOF
565 #line __oline__ "configure"
566 #include "confdefs.h"
567
568 #include <$1>
569 EOF
570 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
571   grep $1  2>/dev/null | \
572   sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
573 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
574 rm -f conftest*])
575   AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
576 ])
577 ### end of LYX_PATH_HEADER
578
579 ### Check which frontends we want to use.
580 ###
581 AC_DEFUN([LYX_USE_FRONTENDS],
582 [AC_MSG_CHECKING([what frontend should be used for the GUI])
583 AC_ARG_WITH(frontend,
584   [  --with-frontend=THIS    Use THIS frontend as main GUI:
585                             Possible values: qt4],
586   [FRONTENDS="$withval"],[FRONTENDS="qt4"])
587 if test "x$FRONTENDS" = x ; then
588   AC_MSG_RESULT(none)
589   AC_ERROR("Please select a frontend using --with-frontend")
590 fi
591 AC_MSG_RESULT($FRONTENDS)
592 AC_SUBST(FRONTENDS)
593 AC_SUBST(FRONTENDS_SUBDIRS)
594 AC_SUBST(FRONTENDS_PROGS)
595 ])
596
597
598 ## Check what kind of packaging should be used at install time.
599 ## The default is autodetected.
600 AC_DEFUN([LYX_USE_PACKAGING],
601 [AC_MSG_CHECKING([what packaging should be used])
602 AC_ARG_WITH(packaging,
603   [  --with-packaging=THIS   Use THIS packaging for installation:
604                             Possible values: posix, windows, macosx],
605   [lyx_use_packaging="$withval"], [
606   case $host in
607     *-apple-darwin*) lyx_use_packaging=macosx ;;
608      *-pc-mingw32*) lyx_use_packaging=windows;;
609                   *) lyx_use_packaging=posix;;
610   esac])
611 AC_MSG_RESULT($lyx_use_packaging)
612 lyx_install_macosx=false
613 lyx_install_cygwin=false
614 case $lyx_use_packaging in
615    macosx) AC_DEFINE(USE_MACOSX_PACKAGING, 1, [Define to 1 if LyX should use a MacOS X application bundle file layout])
616            PACKAGE=LyX${version_suffix}
617            default_prefix="/Applications/${PACKAGE}.app"
618            bindir='${prefix}/Contents/MacOS'
619            libdir='${prefix}/Contents/Resources'
620            datarootdir='${prefix}/Contents/Resources'
621            pkgdatadir='${datadir}'
622            mandir='${datadir}/man'
623            lyx_install_macosx=true ;;
624   windows) AC_DEFINE(USE_WINDOWS_PACKAGING, 1, [Define to 1 if LyX should use a Windows-style file layout])
625            PACKAGE=LyX${version_suffix}
626            default_prefix="C:/Program Files/${PACKAGE}"
627            bindir='${prefix}/bin'
628            libdir='${prefix}/Resources'
629            datarootdir='${prefix}/Resources'
630            pkgdatadir='${datadir}'
631            mandir='${prefix}/Resources/man' ;;
632     posix) AC_DEFINE(USE_POSIX_PACKAGING, 1, [Define to 1 if LyX should use a POSIX-style file layout])
633            PACKAGE=lyx${version_suffix}
634            program_suffix=$version_suffix
635            pkgdatadir='${datadir}/${PACKAGE}'
636            default_prefix=$ac_default_prefix
637            case ${host} in
638            *cygwin*) lyx_install_cygwin=true ;;
639            esac ;;
640     *) LYX_ERROR([Unknown packaging type $lyx_use_packaging]) ;;
641 esac
642 AM_CONDITIONAL(INSTALL_MACOSX, $lyx_install_macosx)
643 AM_CONDITIONAL(INSTALL_CYGWIN, $lyx_install_cygwin)
644 dnl Next two lines are only for autoconf <= 2.59
645 datadir='${datarootdir}'
646 AC_SUBST(datarootdir)
647 AC_SUBST(pkgdatadir)
648 AC_SUBST(program_suffix)
649 ])
650
651
652 ## ------------------------------------------------------------------------
653 ## Find a file (or one of more files in a list of dirs)
654 ## ------------------------------------------------------------------------
655 ##
656 AC_DEFUN([AC_FIND_FILE],
657 [
658 $3=NO
659 for i in $2;
660 do
661   for j in $1;
662   do
663     if test -r "$i/$j"; then
664       $3=$i
665       break 2
666     fi
667   done
668 done
669 ])
670
671 dnl just a wrapper to clean up configure.in
672 AC_DEFUN([LYX_PROG_LIBTOOL],
673 [
674 AC_REQUIRE([AC_ENABLE_SHARED])
675 AC_REQUIRE([AC_ENABLE_STATIC])
676 dnl libtool is only for C, so I must force him
677 dnl to find the correct flags for C++
678 ac_save_cc=$CC
679 ac_save_cflags="$CFLAGS"
680 CC=$CXX
681 CFLAGS="$CXXFLAGS"
682 AC_PROG_LIBTOOL dnl for libraries
683 CC=$ac_save_cc
684 CFLAGS="$ac_save_cflags"
685 ])
686
687
688 ## ------------------------------------------------------------------------
689 ## Check whether mkdir() is mkdir or _mkdir, and whether it takes
690 ## one or two arguments.
691 ##
692 ## http://ac-archive.sourceforge.net/C_Support/ac_func_mkdir.html
693 ## ------------------------------------------------------------------------
694 ##
695 AC_DEFUN([AC_FUNC_MKDIR],
696 [AC_CHECK_FUNCS([mkdir _mkdir])
697 AC_CACHE_CHECK([whether mkdir takes one argument],
698                [ac_cv_mkdir_takes_one_arg],
699 [AC_TRY_COMPILE([
700 #include <sys/stat.h>
701 #if HAVE_UNISTD_H
702 #  include <unistd.h>
703 #endif
704 ], [mkdir (".");],
705 [ac_cv_mkdir_takes_one_arg=yes], [ac_cv_mkdir_takes_one_arg=no])])
706 if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then
707   AC_DEFINE([MKDIR_TAKES_ONE_ARG], 1,
708             [Define if mkdir takes only one argument.])
709 fi
710 ])
711
712
713 dnl Set VAR to the canonically resolved absolute equivalent of PATHNAME,
714 dnl (which may be a relative path, and need not refer to any existing
715 dnl entity).
716
717 dnl On Win32-MSYS build hosts, the returned path is resolved to its true
718 dnl native Win32 path name, (but with slashes, not backslashes).
719
720 dnl On any other system, it is simply the result which would be obtained
721 dnl if PATHNAME represented an existing directory, and the pwd command was
722 dnl executed in that directory.
723 AC_DEFUN([MSYS_AC_CANONICAL_PATH],
724 [ac_dir="$2"
725  ( exec 2>/dev/null; cd / && pwd -W ) | grep ':' >/dev/null &&
726     ac_pwd_w="pwd -W" || ac_pwd_w=pwd
727  until ac_val=`exec 2>/dev/null; cd "$ac_dir" && $ac_pwd_w`
728  do
729    ac_dir=`AS_DIRNAME(["$ac_dir"])`
730  done
731  ac_dir=`echo "$ac_dir" | sed 's?^[[./]]*??'`
732  ac_val=`echo "$ac_val" | sed 's?/*$[]??'`
733  $1=`echo "$2" | sed "s?^[[./]]*$ac_dir/*?$ac_val/?"'
734    s?/*$[]??'`
735 ])
736
737 dnl this is used by the macro blow to general a proper config.h.in entry
738 m4_define([LYX_AH_CHECK_DECL],
739 [AH_TEMPLATE(AS_TR_CPP(HAVE_DECL_$1),
740   [Define if you have the prototype for function `$1'])])
741
742 dnl Check things are declared in headers to avoid errors or warnings.
743 dnl Called like LYX_CHECK_DECL(function, header1 header2...)
744 dnl Defines HAVE_DECL_{FUNCTION}
745 AC_DEFUN([LYX_CHECK_DECL],
746 [LYX_AH_CHECK_DECL($1)
747 for ac_header in $2
748 do
749   AC_MSG_CHECKING([if $1 is declared by header $ac_header])
750   AC_EGREP_HEADER($1, $ac_header,
751       [AC_MSG_RESULT(yes)
752        AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_DECL_$1))
753        break],
754       [AC_MSG_RESULT(no)])
755 done])
756
757 dnl Extract the single digits from PACKAGE_VERSION and make them available.
758 dnl Defines LYX_MAJOR_VERSION, LYX_MINOR_VERSION, LYX_RELEASE_LEVEL,
759 dnl LYX_RELEASE_PATCH (possibly equal to 0), LYX_DIR_VER, and LYX_USERDIR_VER.
760 AC_DEFUN([LYX_SET_VERSION_INFO],
761 [lyx_major=`echo $PACKAGE_VERSION | sed -e 's/[[.]].*//'`
762  lyx_patch=`echo $PACKAGE_VERSION | sed -e "s/^$lyx_major//" -e 's/^.//'`
763  lyx_minor=`echo $lyx_patch | sed -e 's/[[.]].*//'`
764  lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_minor//" -e 's/^.//'`
765  lyx_release=`echo $lyx_patch | sed -e 's/[[^0-9]].*//'`
766  lyx_patch=`echo $lyx_patch | sed -e "s/^$lyx_release//" -e 's/^[[.]]//' -e 's/[[^0-9]].*//'`
767  test "x$lyx_patch" = "x" && lyx_patch=0
768  lyx_dir_ver=LYX_DIR_${lyx_major}${lyx_minor}x
769  lyx_userdir_ver=LYX_USERDIR_${lyx_major}${lyx_minor}x
770  AC_SUBST(LYX_MAJOR_VERSION,$lyx_major)
771  AC_SUBST(LYX_MINOR_VERSION,$lyx_minor)
772  AC_SUBST(LYX_RELEASE_LEVEL,$lyx_release)
773  AC_SUBST(LYX_RELEASE_PATCH,$lyx_patch)
774  AC_SUBST(LYX_DIR_VER,"$lyx_dir_ver")
775  AC_SUBST(LYX_USERDIR_VER,"$lyx_userdir_ver")
776 ])