From 907535f1e786cea8bd30f74cf93f6600fec4e09d Mon Sep 17 00:00:00 2001 From: Christian Persch Date: Wed, 9 Nov 2005 21:40:27 +0000 Subject: A m4/gecko.m4: 2005-11-09 Christian Persch * configure.ac: A m4/gecko.m4: Distill the gecko detection logic into a macro package. --- m4/gecko.m4 | 241 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 241 insertions(+) create mode 100644 m4/gecko.m4 (limited to 'm4') diff --git a/m4/gecko.m4 b/m4/gecko.m4 new file mode 100644 index 000000000..2c656d0a7 --- /dev/null +++ b/m4/gecko.m4 @@ -0,0 +1,241 @@ +dnl Copyright (C) 2000-2004 Marco Pesenti Gritti +dnl Copyright (C) 2003, 2004, 2005 Christian Persch +dnl +dnl This program is free software; you can redistribute it and/or modify it +dnl under the terms of the GNU General Public License as published by the +dnl Free Software Foundation; either version 2 of the License, or (at your +dnl option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but +dnl WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License along +dnl with this program; if not, write to the Free Software Foundation, Inc., +dnl 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +dnl GECKO_INIT([VARIABLE]) +dnl +dnl Checks for gecko, and aborts if it's not found +dnl +dnl Checks for -fshort-wchar compiler variable, and adds it to +dnl CXXFLAGS and AM_CXXFLAGS if found +dnl +dnl Checks whether RTTI is enabled, and adds -fno-rtti to +dnl CXXFLAGS and AM_CXXFLAGS otherwise +dnl +dnl Expanded variables: +dnl VARIABLE: Which gecko was found (e.g. "xulrunnner", "seamonkey", ...) +dnl VARIABLE_FLAVOUR: The flavour of the gecko that was found +dnl VARIABLE_HOME: +dnl VARIABLE_PREFIX: +dnl VARIABLE_INCLUDE_ROOT: + +AC_DEFUN([GECKO_INIT], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl + +AC_MSG_CHECKING([which gecko to use]) + +AC_ARG_WITH([gecko], + AS_HELP_STRING([--with-gecko@<:@=mozilla|firefox|xulrunner@:>@], + [Which gecko engine to use (default: autodetect)])) + +dnl Backward compat +AC_ARG_WITH([mozilla],[],[with_gecko=$withval],[]) + +_GECKO=$with_gecko + +dnl Autodetect gecko +_geckos="firefox mozilla-firefox seamonkey mozilla xulrunner" +if test "x$_GECKO" = "x"; then + for lizard in $_geckos; do + if $PKG_CONFIG --exists $lizard-xpcom; then + _GECKO=$lizard + break; + fi + done +fi + +if test "x$_GECKO" = "x"; then + AC_MSG_ERROR([No gecko found]) +elif ! ( echo "$_geckos" | egrep "(^| )$_GECKO(\$| )" > /dev/null); then + AC_MSG_ERROR([Unknown gecko "$_GECKO" specified]) +fi + +AC_MSG_RESULT([$_GECKO]) + +case "$_GECKO" in +mozilla) _GECKO_FLAVOUR=mozilla ;; +seamonkey) _GECKO_FLAVOUR=mozilla ;; +*firefox) _GECKO_FLAVOUR=toolkit ;; +xulrunner) _GECKO_FLAVOUR=toolkit ;; +esac + + +_GECKO_INCLUDE_ROOT="`$PKG_CONFIG --variable=includedir $_GECKO-gtkmozembed`" +_GECKO_HOME="`$PKG_CONFIG --variable=libdir $_GECKO-gtkmozembed`" +_GECKO_PREFIX="`$PKG_CONFIG --variable=prefix $_GECKO-gtkmozembed`" + +$1[]=$_GECKO +$1[]_FLAVOUR=$_GECKO_FLAVOUR +$1[]_INCLUDE_ROOT=$_GECKO_INCLUDE_ROOT +$1[]_HOME=$_GECKO_HOME +$1[]_PREFIX=$_GECKO_PREFIX + +dnl ************************************************************** +dnl This is really gcc-only +dnl Do this test using CXX only since some versions of gcc +dnl 2.95-2.97 have a signed wchar_t in c++ only and some versions +dnl only have short-wchar support for c++. +dnl ************************************************************** + +AC_LANG_PUSH([C++]) + +_SAVE_CPPFLAGS=$CPPFLAGS +_SAVE_CXXFLAGS=$CXXFLAGS +CXXFLAGS="$CXXFLAGS -fshort-wchar" + +AC_CACHE_CHECK([for compiler -fshort-wchar option], + gecko_cv_have_usable_wchar_option, + [AC_RUN_IFELSE([AC_LANG_SOURCE( + [[#include + int main () { + return (sizeof(wchar_t) != 2) || (wchar_t)-1 < (wchar_t) 0 ; + } ]])], + [gecko_cv_have_usable_wchar_option="yes"], + [gecko_cv_have_usable_wchar_option="no"], + [gecko_cv_have_usable_wchar_option="maybe"])]) + +CXXFLAGS="$_SAVE_CXXFLAGS" + +if test "$_GECKO_cv_have_usable_wchar_option" = "yes"; then + CXXFLAGS="$CXXFLAGS -fshort-wchar" + AM_CXXFLAGS="$AM_CXXFLAGS -fshort-wchar" +fi + +dnl ************** +dnl Check for RTTI +dnl ************** + +AC_MSG_CHECKING([whether to enable C++ RTTI]) +AC_ARG_ENABLE([cpp-rtti], + AS_HELP_STRING([--enable-cpp-rtti],[Enable C++ RTTI]), + [],[enable_cpp_rtti=no]) +AC_MSG_RESULT([$enable_cpp_rtti]) + +if test "x$enable_cpp_rtti" = "xno"; then + CXXFLAGS="-fno-rtti $CXXFLAGS" + AM_CXXFLAGS="-fno-rtti $AM_CXXFLAGS" +fi + +dnl ************* +dnl Various tests +dnl ************* + +AC_LANG_PUSH([C++]) +_SAVE_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="$CPPFLAGS -I$_GECKO_INCLUDE_ROOT" + +AC_MSG_CHECKING([[whether we have a gtk 2 gecko build]]) +AC_RUN_IFELSE( + [AC_LANG_SOURCE( + [[#include + #include + int main(void) { + return strcmp (MOZ_DEFAULT_TOOLKIT, "gtk2") != 0; + } ]] + )], + [result=yes], + [AC_MSG_ERROR([[This program needs a gtk 2 gecko build]])], + [result=maybe]) +AC_MSG_RESULT([$result]) + +AC_MSG_CHECKING([[whether we have a gecko debug build]]) +AC_PREPROC_IFELSE( + [AC_LANG_SOURCE( + [[#include + #if !defined(MOZ_REFLOW_PERF) || !defined(MOZ_REFLOW_PERF_DSP) + #error No + #endif]] + )], + [gecko_cv_have_debug=yes], + [gecko_cv_have_debug=no]) +AC_MSG_RESULT([$gecko_cv_have_debug]) + +CPPFLAGS="$_SAVE_CPPFLAGS" +AC_LANG_POP([C++]) + +if test "$gecko_cv_have_debug" = "xyes"; then + CXXFLAGS="-DDEBUG -D_DEBUG $CXXFLAGS" + AM_CXXFLAGS="-DDEBUG -D_DEBUG $AM_CXXFLAGS" +fi + +]) + +dnl *************************************************************************** +dnl *************************************************************************** +dnl *************************************************************************** + +dnl GECKO_CHECK_CONTRACTID_REGISTERED(IDENTIFIER, CONTRACTID, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl +AC_DEFUN([GECKO_CHECK_CONTRACTID_REGISTERED], +[AC_REQUIRE([GECKO_INIT])dnl + +AC_CACHE_CHECK([for the $2 XPCOM component], +[gecko_cv_xpcom_service_[]$1], +[ +gecko_cv_xpcom_service_[]$1[]=no + +AC_LANG_PUSH([C++]) + +_SAVE_CPPFLAGS="$CPPFLAGS" +_SAVE_CXXFLAGS="$CFLAGS" +_SAVE_LDFLAGS="$LDFLAGS" +CPPFLAGS="$CPPFLAGS -I$_GECKO_INCLUDE_ROOT $($PKG_CONFIG --cflags-only-I $_GECKO-xpcom)" +CXXFLAGS="$CXXFLAGS $($PKG_CONFIG --cflags-only-other $_GECKO-xpcom)" +LDFLAGS="$LDFLAGS $($PKG_CONFIG --libs $_GECKO-xpcom) -Wl,--rpath=$_GECKO_HOME" + +AC_RUN_IFELSE([AC_LANG_PROGRAM([ +#include +#include +#include +#include +#include +],[ +nsCOMPtr serviceManager; +nsresult rv = NS_InitXPCOM2 (getter_AddRefs (serviceManager), nsnull, nsnull); +if (NS_FAILED (rv) || !serviceManager) { + exit (EXIT_FAILURE); +} + +nsCOMPtr service; +rv = serviceManager->GetServiceByContractID ($2, NS_GET_IID (nsISupports), getter_AddRefs (service)); +if (NS_FAILED (rv) || !service) { + NS_ShutdownXPCOM (nsnull); + exit (EXIT_FAILURE); +} + +NS_ShutdownXPCOM (nsnull); +exit (EXIT_SUCCESS); +]) +], +[gecko_cv_xpcom_service_[]$1[]=yes], +[gecko_cv_xpcom_service_[]$1[]=no], +[gecko_cv_xpcom_service_[]$1[]="no (cross-compiling)"]) + +CPPFLAGS="$_SAVE_CPPFLAGS" +CXXFLAGS="$_SAVE_CXXFLAGS" +LDFLAGS="$_SAVE_LDFLAGS" + +AC_LANG_POP([C++]) + +]) + +if test "$gecko_cv_xpcom_service_[]$1" = "yes"; then + ifelse([$3],,[:],[$3]) +else + ifelse([$4],,[:],[$4]) +fi + +]) -- cgit v1.2.3