aboutsummaryrefslogtreecommitdiffstats
path: root/m4
diff options
context:
space:
mode:
Diffstat (limited to 'm4')
-rw-r--r--m4/gecko.m4241
1 files changed, 241 insertions, 0 deletions
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 <stddef.h>
+ 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 <mozilla-config.h>
+ #include <string.h>
+ 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 <mozilla-config.h>
+ #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 <stdlib.h>
+#include <nsXPCOM.h>
+#include <nsCOMPtr.h>
+#include <nsISupports.h>
+#include <nsIServiceManager.h>
+],[
+nsCOMPtr<nsIServiceManager> serviceManager;
+nsresult rv = NS_InitXPCOM2 (getter_AddRefs (serviceManager), nsnull, nsnull);
+if (NS_FAILED (rv) || !serviceManager) {
+ exit (EXIT_FAILURE);
+}
+
+nsCOMPtr<nsISupports> 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
+
+])