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