summaryrefslogtreecommitdiff
path: root/m4
diff options
context:
space:
mode:
authorDavid Tardon <dtardon@redhat.com>2012-03-18 09:18:28 +0100
committerDavid Tardon <dtardon@redhat.com>2012-03-18 21:23:40 +0100
commit1118f57582aaa7275a8fe1d1460e1515c111ac2e (patch)
tree43b7c2752ad86d643709d4df6b08fc22d584fbf0 /m4
parentc7b319d2f1f1daef509cd1ac53035294b39a6299 (diff)
mingw: avoid hardcoded dll versions and deps
The idea is to use libo_MINGW_CHECK_DLL for libs that must be available (typically that would be the "main" library, e.g., libxml2 or libcurl) and libo_MINGW_TRY_DLL for possible dependencies (that may not be the same on different systems). All further references to the dlls are exclusively through the configured variables or defines set from these variables (e.g., instead of hardcoding libxml2-2.dll, use $(MINGW_LIBXML2_DLL)). The macros are documented in m4/mingw.m4 . Files that must be changed when adding a new dll: * configure.in * config_host.mk.in * external/mingw-dlls/makefile.mk * scp2/source/ooo/makefile.mk * scp2/source/ooo/mingw_dlls.scp
Diffstat (limited to 'm4')
-rw-r--r--m4/mingw.m4170
1 files changed, 96 insertions, 74 deletions
diff --git a/m4/mingw.m4 b/m4/mingw.m4
index 35d638c9565d..1cf5649e5014 100644
--- a/m4/mingw.m4
+++ b/m4/mingw.m4
@@ -1,82 +1,104 @@
-# libo_FIND_MINGW_EXTERNAL_DLLS([library-names],[variable],[?exclude],[?default-value])
-# uses: CC, SED, WITH_MINGW
-# --------------------------------------------------------------------
-AC_DEFUN([libo_FIND_MINGW_EXTERNAL_DLLS],
-[if test "$WITH_MINGW" = yes -a -n "$CC"; then
- _libo_mingw_libdir=`$CC -print-sysroot`/mingw/lib
- _libo_mingw_found_la=
- _libo_mingw_test_la([$1],[_libo_mingw_found_la],[$_libo_mingw_libdir])
- if test "$_libo_mingw_found_la" = yes; then
- _libo_mingw_find_dlls([$1],[$2],[$3],[$_libo_mingw_libdir])
- else
- # no .la files found, use defaults
- $2="$4"
- fi
-fi[]dnl
-]) # libo_FIND_MINGW_EXTERNAL_DLLS
+dnl Version: MPL 1.1 / GPLv3+ / LGPLv3+
+dnl
+dnl The contents of this file are subject to the Mozilla Public License Version
+dnl 1.1 (the "License"); you may not use this file except in compliance with
+dnl the License or as specified alternatively below. You may obtain a copy of
+dnl the License at http://www.mozilla.org/MPL/
+dnl
+dnl Software distributed under the License is distributed on an "AS IS" basis,
+dnl WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+dnl for the specific language governing rights and limitations under the
+dnl License.
+dnl
+dnl Major Contributor(s):
+dnl Copyright (C) 2012 Red Hat, Inc., David Tardon <dtardon@redhat.com>
+dnl (initial developer)
+dnl
+dnl All Rights Reserved.
+dnl
+dnl For minor contributions see the git repository.
+dnl
+dnl Alternatively, the contents of this file may be used under the terms of
+dnl either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+dnl the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+dnl in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+dnl instead of those above.
-# libo_ADD_MINGW_EXTERNAL_DLLS([library-names],[variable],[?default-value])
-# uses: CC, SED, WITH_MINGW
-# --------------------------------------------------------
-AC_DEFUN([libo_ADD_MINGW_EXTERNAL_DLLS],
-[libo_FIND_MINGW_EXTERNAL_DLLS([$1],[_libo_mingw_found_dlls],[$$2],[$3])
-if test -n "$_libo_mingw_found_dlls"; then
- $2="$$2 $_libo_mingw_found_dlls"
-fi[]dnl
-]) # libo_ADD_MINGW_EXTERNAL_DLLS
+# libo_MINGW_CHECK_DLL(variable-infix,dll-name-stem,[action-if-found],[action-if-not-found])
+#
+# Checks for presence of dll dll-name-stem . Sets variable
+# MINGW_variable-infix_DLL if found, issues an error otherwise.
+#
+# It recognizes these dll patterns (x, y match any character, but they
+# are supposed to be numerals):
+# * name-x.dll
+# * name-xy.dll
+# * name-x.y.dll
+# * name.dll
+#
+#
+# Example:
+# libo_MINGW_CHECK_DLL([EXPAT], [libexpat])
+# might result in MINGW_EXPAT_DLL=libexpat-1.dll being set.
+#
+# uses CC, WITH_MINGW
+# ------------------------------------------------------------------------------------------
+AC_DEFUN([libo_MINGW_CHECK_DLL],
+[AC_ARG_VAR([MINGW_][$1][_DLL],[output variable containing the found dll name])dnl
-# _libo_mingw_get_libtool_var([key],[lib],[out-var])
-m4_define([_libo_mingw_get_libtool_var],
-[$3=`$SED -n -e '/^$1=/{' -e "s/.*='//" -e "s/'//" -e p -e '}' $2`[]dnl
-]) # _libo_mingw_get_libtool_var
+if test -n "$WITH_MINGW"; then
+ dnl TODO move this to configure: there is no need to call $CC more than once
+ _libo_mingw_dlldir=`$CC -print-sysroot`/mingw/bin
+ _libo_mingw_dllname=
+ AC_MSG_CHECKING([for $2 dll])
-# _libo_mingw_find_dll([library],[dlls],[out-var])
-m4_define([_libo_mingw_find_dll],
-[_libo_mingw_get_libtool_var([dlname],[$1],[_libo_mingw_dlname])
-_libo_mingw_dlname=`basename $_libo_mingw_dlname`
-_libo_mingw_dll_present=
-for _libo_mingw_dll in $2; do
- if test "$_libo_mingw_dlname" = "$_libo_mingw_dll"; then
- _libo_mingw_dll_present=yes
- break
+ dnl try one- or two-numbered version
+ _libo_mingw_try_dll([$2][-?.dll])
+ if test "$_libo_mingw_dllname" = ""; then
+ _libo_mingw_try_dll([$2][-??.dll])
+ fi
+ dnl maybe the version contains a dot (e.g., libdb)
+ if test "$_libo_mingw_dllname" = ""; then
+ _libo_mingw_try_dll([$2][-?.?.dll])
+ fi
+ dnl maybe it is not versioned
+ if test "$_libo_mingw_dllname" = ""; then
+ _libo_mingw_try_dll([$2][.dll])
fi
-done
-if test -z "$_libo_mingw_dll_present"; then
- $3="$_libo_mingw_dlname"
-fi[]dnl
-]) # _libo_mingw_find_dll
-# _libo_mingw_find_dlls([libraries],[dlls],[out-var],[libdir])
-m4_define([_libo_mingw_find_dlls],
-[_libo_mingw_new_dlls=
-for _libo_mingw_lib in $1; do
- _libo_mingw_lib="$4/$_libo_mingw_lib.la"
- _libo_mingw_new_dll=
- _libo_mingw_find_dll([$_libo_mingw_lib],[$3 $_libo_mingw_new_dlls],[_libo_mingw_new_dll])
- if test -n "$_libo_mingw_new_dll"; then
- _libo_mingw_new_dlls="$_libo_mingw_new_dlls $_libo_mingw_new_dll"
+ if test "$_libo_mingw_dllname" = ""; then
+ AC_MSG_RESULT([no])
+ m4_default([$4],[AC_MSG_ERROR([no dll found for $2])])
+ else
+ AC_MSG_RESULT([$_libo_mingw_dllname])
+ [MINGW_][$1][_DLL]="$_libo_mingw_dllname"
+ m4_default([$3],[])
fi
+fi[]dnl
+]) # libo_MINGW_CHECK_DLL
+
+# libo_MINGW_TRY_DLL(variable-infix,dll-name-stem)
+#
+# Checks for presence of dll dll-name-stem . Sets variable
+# MINGW_variable-infix_DLL if found, does nothing otherwise.
+#
+# See libo_MINGW_CHECK_DLL for further info.
+#
+# uses CC, WITH_MINGW
+# ------------------------------------------------
+AC_DEFUN([libo_MINGW_TRY_DLL],
+[dnl shortcut: do not test for already found dlls
+if test -z "$[MINGW_][$1][_DLL]"; then
+ libo_MINGW_CHECK_DLL([$1],[$2],[[]],[[]])
+fi[]dnl
+]) # libo_MINGW_TRY_DLL
- _libo_mingw_get_libtool_var([dependency_libs],[$_libo_mingw_lib],[_libo_mingw_dep_libs])
- for _libo_mingw_dep_lib in $_libo_mingw_dep_libs; do
- if test "${_libo_mingw_dep_lib%.la}" != "$_libo_mingw_dep_lib"; then
- _libo_mingw_new_dll=''
- _libo_mingw_find_dll([$_libo_mingw_dep_lib],[$3 $_libo_mingw_new_dlls],[_libo_mingw_new_dll])
- if test -n "$_libo_mingw_new_dll"; then
- _libo_mingw_new_dlls="$_libo_mingw_new_dlls $_libo_mingw_new_dll"
- fi
- fi
- done
-done
-$2="$_libo_mingw_new_dlls"[]dnl
-]) # _libo_mingw_find_dlls
+# _libo_mingw_try_dll(dll-name,dll-dir)
+m4_define([_libo_mingw_try_dll],
+[_libo_mingw_trying_dll=`ls "[$_libo_mingw_dlldir]"/[$1] 2>/dev/null`
+if test -f "$_libo_mingw_trying_dll"; then
+ _libo_mingw_dllname=`basename "$_libo_mingw_trying_dll"`
+fi[]dnl
+]) # _libo_mingw_try_dll
-# _libo_mingw_test_la([libraries],[out-var],[libdir])
-m4_define([_libo_mingw_test_la],
-[for _libo_mingw_lib in $1; do
- if test -f "$3/$_libo_mingw_lib.la"; then
- $2=yes
- break
- fi
-done[]dnl
-]) # _libo_mingw_test_la
+dnl vim:set shiftwidth=4 softtabstop=4 expandtab: