summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.fetch3
-rw-r--r--RepositoryExternal.mk52
-rw-r--r--config_host.mk.in6
-rw-r--r--configure.ac41
-rw-r--r--download.lst6
-rw-r--r--external/Module_external.mk2
-rw-r--r--external/apr/ExternalProject_apr.mk37
-rw-r--r--external/apr/ExternalProject_apr_util.mk40
-rw-r--r--external/apr/Makefile7
-rw-r--r--external/apr/Module_apr.mk19
-rw-r--r--external/apr/README5
-rw-r--r--external/apr/UnpackedTarball_apr.mk14
-rw-r--r--external/apr/UnpackedTarball_apr_util.mk22
-rw-r--r--external/apr/windows.build.patch.153
-rw-r--r--external/serf/ExternalProject_serf.mk48
-rw-r--r--external/serf/Makefile7
-rw-r--r--external/serf/Module_serf.mk17
-rw-r--r--external/serf/README4
-rw-r--r--external/serf/UnpackedTarball_serf.mk22
-rw-r--r--external/serf/windows.build.patch.129
-rw-r--r--solenv/gbuild/ExternalProject.mk1
-rw-r--r--solenv/gbuild/platform/com_GCC_class.mk1
-rw-r--r--solenv/gbuild/platform/com_MSC_class.mk10
23 files changed, 433 insertions, 13 deletions
diff --git a/Makefile.fetch b/Makefile.fetch
index 3c1799afd130..683f2385578d 100644
--- a/Makefile.fetch
+++ b/Makefile.fetch
@@ -76,6 +76,8 @@ $(WORKDIR)/download: $(BUILDDIR)/config_host.mk $(SRCDIR)/download.lst $(SRCDIR)
$(foreach item, \
$(call fetch_Optional,LIBATOMIC_OPS,LIBATOMIC_OPS_TARBALL) \
$(call fetch_Optional,ABW,ABW_TARBALL) \
+ $(call fetch_Optional,APR,APR_TARBALL) \
+ $(call fetch_Optional,APR,APR_UTIL_TARBALL) \
$(call fetch_Optional,CDR,CDR_TARBALL) \
$(call fetch_Optional,COINMP,COINMP_TARBALL) \
$(call fetch_Optional,EBOOK,EBOOK_TARBALL) \
@@ -88,6 +90,7 @@ $(WORKDIR)/download: $(BUILDDIR)/config_host.mk $(SRCDIR)/download.lst $(SRCDIR)
$(call fetch_Optional,MSPUB,MSPUB_TARBALL) \
$(call fetch_Optional,MWAW,MWAW_TARBALL) \
$(call fetch_Optional,ODFGEN,ODFGEN_TARBALL) \
+ $(call fetch_Optional,SERF,SERF_TARBALL) \
$(call fetch_Optional,VISIO,VISIO_TARBALL) \
,$(call fetch_Download_item_special,http://dev-www.libreoffice.org/src,$(item)))
$(foreach item, \
diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk
index 4ff67480f8fd..eec50bd83019 100644
--- a/RepositoryExternal.mk
+++ b/RepositoryExternal.mk
@@ -1000,6 +1000,57 @@ gb_LinkTarget__use_liblangtag :=
endif # ENABLE_LIBLANGTAG
+ifneq ($(DISABLE_NEON),)
+
+define gb_LinkTarget__use_apr
+$(call gb_LinkTarget_set_include,$(1),\
+ $$(INCLUDE) \
+ $(APR_CFLAGS) \
+)
+$(call gb_LinkTarget_add_libs,$(1),\
+ $(APR_LIBS) \
+)
+
+ifeq ($(SYSTEM_APR),)
+$(call gb_LinkTarget_use_system_win32_libs,$(1),\
+ mswsock \
+ rpcrt4 \
+ shell32 \
+)
+$(call gb_LinkTarget_add_defs,$(1),\
+ -DAPR_DECLARE_STATIC \
+ -DAPU_DECLARE_STATIC \
+)
+$(call gb_LinkTarget_use_external_project,$(1),apr_util)
+endif
+
+endef
+
+define gb_ExternalProject__use_apr
+ifeq ($(SYSTEM_APR),)
+$(call gb_ExternalProject_use_external_project,$(1),apr_util)
+endif
+
+endef
+
+define gb_LinkTarget__use_serf
+$(call gb_LinkTarget_set_include,$(1),\
+ $(SERF_CFLAGS) \
+ $$(INCLUDE) \
+)
+$(call gb_LinkTarget_add_libs,$(1),\
+ $(SERF_LIBS) \
+)
+
+ifeq ($(SYSTEM_SERF),)
+$(call gb_LinkTarget_use_external_project,$(1),serf)
+endif
+
+endef
+
+else
+
+gb_ExternalProject__use_apr :=
ifneq ($(SYSTEM_NEON),)
@@ -1037,6 +1088,7 @@ endef
endif # SYSTEM_NEON
+endif # DISABLE_NEON
ifneq ($(SYSTEM_REDLAND),)
diff --git a/config_host.mk.in b/config_host.mk.in
index 2108ffeeb578..cbe2978bf86f 100644
--- a/config_host.mk.in
+++ b/config_host.mk.in
@@ -23,6 +23,8 @@ export ANDROID_SDK_HOME=@ANDROID_SDK_HOME@
export ANT=@ANT@
export ANT_HOME=@ANT_HOME@
export ANT_LIB=@ANT_LIB@
+export APR_CFLAGS=$(gb_SPACE)@APR_CFLAGS@
+export APR_LIBS=$(gb_SPACE)@APR_LIBS@
export AR=@AR@
export ASSERT_ALWAYS_ABORT=@ASSERT_ALWAYS_ABORT@
export ATL_INCLUDE=@ATL_INCLUDE@
@@ -467,6 +469,8 @@ export SAL_ENABLE_FILE_LOCKING=1
export SCPDEFS=@SCPDEFS@
export SDKDIRNAME=@SDKDIRNAME@
export SDKDIRNAME_FOR_BUILD=@SDKDIRNAME_FOR_BUILD@
+export SERF_CFLAGS=$(gb_SPACE)@SERF_CFLAGS@
+export SERF_LIBS=$(gb_SPACE)@SERF_LIBS@
export SHOWINCLUDES_PREFIX=@SHOWINCLUDES_PREFIX@
export SOLARINC=@SOLARINC@
export SPLIT_APP_MODULES=@SPLIT_APP_MODULES@
@@ -483,6 +487,7 @@ export SUNTEMPLATES_IT_PACK=@SUNTEMPLATES_IT_PACK@
export SYSBASE=@SYSBASE@
export SYSTEM_ABW=@SYSTEM_ABW@
export SYSTEM_APACHE_COMMONS=@SYSTEM_APACHE_COMMONS@
+export SYSTEM_APR=@SYSTEM_APR@
export SYSTEM_BOOST=@SYSTEM_BOOST@
export SYSTEM_BSH=@SYSTEM_BSH@
export SYSTEM_CAIRO=@SYSTEM_CAIRO@
@@ -543,6 +548,7 @@ export SYSTEM_POSTGRESQL=@SYSTEM_POSTGRESQL@
export SYSTEM_PYTHON=@SYSTEM_PYTHON@
export SYSTEM_REDLAND=@SYSTEM_REDLAND@
export SYSTEM_RHINO=@SYSTEM_RHINO@
+export SYSTEM_SERF=@SYSTEM_SERF@
export SYSTEM_UCPP=@SYSTEM_UCPP@
export SYSTEM_VIGRA=@SYSTEM_VIGRA@
export SYSTEM_VISIO=@SYSTEM_VISIO@
diff --git a/configure.ac b/configure.ac
index 6742046b54d6..6c78067acb95 100644
--- a/configure.ac
+++ b/configure.ac
@@ -9164,21 +9164,36 @@ if test "$enable_neon" = "no"; then
AC_MSG_RESULT([no])
DISABLE_NEON=TRUE
AC_SUBST(DISABLE_NEON)
+
+ # Check for system apr-util
+ libo_CHECK_SYSTEM_MODULE([apr],[APR],[apr-util-1],
+ ["-I${WORKDIR}/UnpackedTarball/apr/include -I${WORKDIR}/UnpackedTarball/apr_util/include"],
+ ["-L${WORKDIR}/UnpackedTarball/apr/.libs -lapr-1 -L${WORKDIR}/UnpackedTarball/apr_util/.libs -laprutil-1"])
+ if test "$COM" = "MSC"; then
+ APR_LIBS="${WORKDIR}/UnpackedTarball/apr/LibR/apr-1.lib ${WORKDIR}/UnpackedTarball/apr_util/LibR/aprutil-1.lib"
+ fi
+
+ # Check for system serf
+ libo_CHECK_SYSTEM_MODULE([serf],[SERF],[serf-1 >= 1.1.0],["-I${WORKDIR}/UnpackedTarball/serf"],
+ ["-L${WORKDIR}/UnpackedTarball/serf/.libs -lserf-1"])
+ if test "$COM" = "MSC"; then
+ SERF_LIBS="${WORKDIR}/UnpackedTarball/serf/Release/serf-1.lib"
+ fi
else
AC_MSG_RESULT([yes])
-dnl ===================================================================
-dnl Check for system neon
-dnl ===================================================================
-libo_CHECK_SYSTEM_MODULE([neon],[NEON],[neon >= 0.26.0])
-if test "$with_system_neon" = "yes"; then
- NEON_VERSION="`$PKG_CONFIG --modversion neon | $SED 's/\.//g'`"
- libo_MINGW_CHECK_DLL([libneon])
- libo_MINGW_TRY_DLL([libtasn1])
- libo_MINGW_TRY_DLL([libgnutls])
-else
- NEON_VERSION=0295
-fi
-AC_SUBST(NEON_VERSION)
+ dnl ===================================================================
+ dnl Check for system neon
+ dnl ===================================================================
+ libo_CHECK_SYSTEM_MODULE([neon],[NEON],[neon >= 0.26.0])
+ if test "$with_system_neon" = "yes"; then
+ NEON_VERSION="`$PKG_CONFIG --modversion neon | $SED 's/\.//g'`"
+ libo_MINGW_CHECK_DLL([libneon])
+ libo_MINGW_TRY_DLL([libtasn1])
+ libo_MINGW_TRY_DLL([libgnutls])
+ else
+ NEON_VERSION=0295
+ fi
+ AC_SUBST(NEON_VERSION)
fi
dnl ===================================================================
diff --git a/download.lst b/download.lst
index fbcad54f7de6..5de30f10864b 100644
--- a/download.lst
+++ b/download.lst
@@ -1,5 +1,9 @@
ABW_MD5SUM := 40fa48e03b1e28ae0325cc34b35bc46d
export ABW_TARBALL := libabw-0.0.2.tar.bz2
+APR_MD5SUM := eff9d741b0999a9bbab96862dd2a2a3d
+export APR_TARBALL := apr-1.4.8.tar.gz
+APR_UTIL_MD5SUM := 71a11d037240b292f824ba1eb537b4e3
+export APR_UTIL_TARBALL := apr-util-1.5.3.tar.gz
CDR_MD5SUM := d88f9b94df880d2c05be943b000ca112
export CDR_TARBALL := libcdr-0.0.14.tar.bz2
COINMP_MD5SUM := 1cce53bf4b40ae29790d2c5c9f8b1129
@@ -30,6 +34,8 @@ LIBATOMIC_OPS_MD5SUM := c0b86562d5aa40761a87134f83e6adcf
export LIBATOMIC_OPS_TARBALL := libatomic_ops-7_2d.zip
LIBEOT_MD5SUM := aa24f5dd2a2992f4a116aa72af817548
export LIBEOT_TARBALL := libeot-0.01.tar.bz2
+SERF_MD5SUM := 4f8e76c9c6567aee1d66aba49f76a58b
+export SERF_TARBALL := serf-1.2.1.tar.bz2
export APACHE_COMMONS_CODEC_TARBALL := 2e482c7567908d334785ce7d69ddfff7-commons-codec-1.6-src.tar.gz
export APACHE_COMMONS_HTTPCLIENT_TARBALL := 2c9b0f83ed5890af02c0df1c1776f39b-commons-httpclient-3.1-src.tar.gz
diff --git a/external/Module_external.mk b/external/Module_external.mk
index a3ad7d4a44bf..3fa5501e1819 100644
--- a/external/Module_external.mk
+++ b/external/Module_external.mk
@@ -23,6 +23,7 @@ $(eval $(call gb_Module_add_moduledirs,external,\
np_sdk \
$(call gb_Helper_optional,ABW,libabw) \
$(call gb_Helper_optional,APACHE_COMMONS,apache-commons) \
+ $(call gb_Helper_optional,APR,apr) \
$(call gb_Helper_optional,BOOST,boost) \
$(call gb_Helper_optional,BSH,beanshell) \
$(call gb_Helper_optional,CAIRO,cairo) \
@@ -81,6 +82,7 @@ $(eval $(call gb_Module_add_moduledirs,external,\
$(call gb_Helper_optional,PYTHON,python3) \
$(call gb_Helper_optional,REDLAND,redland) \
$(call gb_Helper_optional,RHINO,rhino) \
+ $(call gb_Helper_optional,SERF,serf) \
$(call gb_Helper_optional,UCPP,ucpp) \
$(call gb_Helper_optional,VIGRA,vigra) \
$(call gb_Helper_optional,VISIO,libvisio) \
diff --git a/external/apr/ExternalProject_apr.mk b/external/apr/ExternalProject_apr.mk
new file mode 100644
index 000000000000..4848ae8ce1a7
--- /dev/null
+++ b/external/apr/ExternalProject_apr.mk
@@ -0,0 +1,37 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_ExternalProject_ExternalProject,apr))
+
+$(eval $(call gb_ExternalProject_register_targets,apr,\
+ build \
+))
+
+$(eval $(call gb_ExternalProject_use_nmake,apr,build))
+
+ifeq ($(COM),MSC)
+$(call gb_ExternalProject_get_state_target,apr,build):
+ $(call gb_ExternalProject_run,build,\
+ nmake -nologo -f apr.mak \
+ CFG="apr - Win32 $(if $(MSVC_USE_DEBUG_RUNTIME),Debug,Release)" \
+ RECURSE=0 \
+ )
+
+else
+$(call gb_ExternalProject_get_state_target,apr,build):
+ +$(call gb_ExternalProject_run,build,\
+ ./configure \
+ --enable-static --disable-shared \
+ $(if $(filter YES,$(CROSS_COMPILING)),--build=$(BUILD_PLATFORM) --host=$(HOST_PLATFORM))\
+ && $(MAKE) libapr-1.la \
+ )
+
+endif
+
+# vim: set noet sw=4 ts=4:
diff --git a/external/apr/ExternalProject_apr_util.mk b/external/apr/ExternalProject_apr_util.mk
new file mode 100644
index 000000000000..ba0f7cbde419
--- /dev/null
+++ b/external/apr/ExternalProject_apr_util.mk
@@ -0,0 +1,40 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_ExternalProject_ExternalProject,apr_util))
+
+$(eval $(call gb_ExternalProject_use_external_project,apr_util,apr))
+
+$(eval $(call gb_ExternalProject_register_targets,apr_util,\
+ build \
+))
+
+$(eval $(call gb_ExternalProject_use_nmake,apr_util,build))
+
+ifeq ($(COM),MSC)
+$(call gb_ExternalProject_get_state_target,apr_util,build):
+ $(call gb_ExternalProject_run,build,\
+ nmake -nologo -f aprutil.mak \
+ CFG="aprutil - Win32 $(if $(MSVC_USE_DEBUG_RUNTIME),Debug,Release)" \
+ RECURSE=0 \
+ )
+
+else
+$(call gb_ExternalProject_get_state_target,apr_util,build):
+ +$(call gb_ExternalProject_run,build,\
+ ./configure \
+ --enable-static --disable-shared \
+ $(if $(filter YES,$(CROSS_COMPILING)),--build=$(BUILD_PLATFORM) --host=$(HOST_PLATFORM))\
+ --with-apr=$(call gb_UnpackedTarball_get_dir,apr)/apr-1-config \
+ && $(MAKE) libaprutil-1.la \
+ )
+
+endif
+
+# vim: set noet sw=4 ts=4:
diff --git a/external/apr/Makefile b/external/apr/Makefile
new file mode 100644
index 000000000000..e4968cf85fb6
--- /dev/null
+++ b/external/apr/Makefile
@@ -0,0 +1,7 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+
+module_directory:=$(dir $(realpath $(firstword $(MAKEFILE_LIST))))
+
+include $(module_directory)/../../solenv/gbuild/partial_build.mk
+
+# vim: set noet sw=4 ts=4:
diff --git a/external/apr/Module_apr.mk b/external/apr/Module_apr.mk
new file mode 100644
index 000000000000..6bb85fb76204
--- /dev/null
+++ b/external/apr/Module_apr.mk
@@ -0,0 +1,19 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_Module_Module,apr))
+
+$(eval $(call gb_Module_add_targets,apr,\
+ UnpackedTarball_apr \
+ UnpackedTarball_apr_util \
+ ExternalProject_apr \
+ ExternalProject_apr_util \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/external/apr/README b/external/apr/README
new file mode 100644
index 000000000000..778bdfdf692f
--- /dev/null
+++ b/external/apr/README
@@ -0,0 +1,5 @@
+The mission of the Apache Portable Runtime (APR) project is to create
+and maintain software libraries that provide a predictable and consistent
+interface to underlying platform-specific implementations.
+
+From [http://apr.apache.org/].
diff --git a/external/apr/UnpackedTarball_apr.mk b/external/apr/UnpackedTarball_apr.mk
new file mode 100644
index 000000000000..5fa9d05082a7
--- /dev/null
+++ b/external/apr/UnpackedTarball_apr.mk
@@ -0,0 +1,14 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_UnpackedTarball_UnpackedTarball,apr))
+
+$(eval $(call gb_UnpackedTarball_set_tarball,apr,$(APR_TARBALL)))
+
+# vim: set noet sw=4 ts=4:
diff --git a/external/apr/UnpackedTarball_apr_util.mk b/external/apr/UnpackedTarball_apr_util.mk
new file mode 100644
index 000000000000..06860f13967e
--- /dev/null
+++ b/external/apr/UnpackedTarball_apr_util.mk
@@ -0,0 +1,22 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_UnpackedTarball_UnpackedTarball,apr_util))
+
+$(eval $(call gb_UnpackedTarball_set_tarball,apr_util,$(APR_UTIL_TARBALL)))
+
+$(eval $(call gb_UnpackedTarball_fix_end_of_line,apr_util,\
+ aprutil.mak \
+))
+
+$(eval $(call gb_UnpackedTarball_add_patches,apr_util,\
+ external/apr/windows.build.patch.1 \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/external/apr/windows.build.patch.1 b/external/apr/windows.build.patch.1
new file mode 100644
index 000000000000..929910beaccb
--- /dev/null
+++ b/external/apr/windows.build.patch.1
@@ -0,0 +1,53 @@
+diff -ur apr_util.org/aprutil.mak apr_util/aprutil.mak
+--- apr_util.org/aprutil.mak 2014-03-05 16:40:02.385701779 +0100
++++ apr_util/aprutil.mak 2014-03-05 16:40:49.409702332 +0100
+@@ -210,8 +210,6 @@
+ "$(INTDIR)\apr_uri.obj" \
+ "$(INTDIR)\xlate.obj" \
+ "$(INTDIR)\apr_xml.obj" \
+- "..\apr-iconv\LibR\apriconv-1.lib" \
+- ".\xml\expat\lib\LibR\xml.lib"
+
+ "$(OUTDIR)\aprutil-1.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS)
+ $(LIB32) @<<
+@@ -406,8 +404,6 @@
+ "$(INTDIR)\apr_uri.obj" \
+ "$(INTDIR)\xlate.obj" \
+ "$(INTDIR)\apr_xml.obj" \
+- "..\apr-iconv\LibD\apriconv-1.lib" \
+- ".\xml\expat\lib\LibD\xml.lib"
+
+ "$(OUTDIR)\aprutil-1.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS)
+ $(LIB32) @<<
+@@ -602,8 +598,6 @@
+ "$(INTDIR)\apr_uri.obj" \
+ "$(INTDIR)\xlate.obj" \
+ "$(INTDIR)\apr_xml.obj" \
+- "..\apr-iconv\x64\LibR\apriconv-1.lib" \
+- ".\xml\expat\lib\x64\LibR\xml.lib"
+
+ "$(OUTDIR)\aprutil-1.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS)
+ $(LIB32) @<<
+@@ -798,8 +792,6 @@
+ "$(INTDIR)\apr_uri.obj" \
+ "$(INTDIR)\xlate.obj" \
+ "$(INTDIR)\apr_xml.obj" \
+- "..\apr-iconv\x64\LibD\apriconv-1.lib" \
+- ".\xml\expat\lib\x64\LibD\xml.lib"
+
+ "$(OUTDIR)\aprutil-1.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS)
+ $(LIB32) @<<
+diff -ur apr_util.org/include/apu.hw apr_util/include/apu.hw
+--- apr_util.org/include/apu.hw 2014-03-05 16:40:02.377701779 +0100
++++ apr_util/include/apu.hw 2014-03-05 16:40:38.769702207 +0100
+@@ -138,8 +138,8 @@
+ #define APU_HAVE_NSS 0
+ #endif
+
+-#define APU_HAVE_APR_ICONV 1
+-#define APU_HAVE_ICONV 0
++#undef APU_HAVE_APR_ICONV
++#undef APU_HAVE_ICONV
+ #define APR_HAS_XLATE (APU_HAVE_APR_ICONV || APU_HAVE_ICONV)
+
+ #endif /* APU_H */
diff --git a/external/serf/ExternalProject_serf.mk b/external/serf/ExternalProject_serf.mk
new file mode 100644
index 000000000000..afa2018a73fa
--- /dev/null
+++ b/external/serf/ExternalProject_serf.mk
@@ -0,0 +1,48 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_ExternalProject_ExternalProject,serf))
+
+$(eval $(call gb_ExternalProject_use_externals,serf,\
+ apr \
+))
+
+$(eval $(call gb_ExternalProject_register_targets,serf,\
+ build \
+))
+
+$(eval $(call gb_ExternalProject_use_nmake,serf,build))
+
+ifeq ($(COM),MSC)
+$(call gb_ExternalProject_get_state_target,serf,build):
+ $(call gb_ExternalProject_run,build,\
+ APR_SRC="..\apr" \
+ APRUTIL_SRC="..\apr_util" \
+ OPENSSL_SRC="..\openssl" \
+ ZLIB_SRC="..\zlib" \
+ nmake -nologo -f serf.mak \
+ $(if $(MSVC_USE_DEBUG_RUNTIME),DEBUG_BUILD=T Debug,Release)/serf-1.lib \
+ )
+
+else
+# serf is using SERF_LIBS variable, so pass it empty
+$(call gb_ExternalProject_get_state_target,serf,build):
+ +$(call gb_ExternalProject_run,build,\
+ ./configure SERF_LIBS= \
+ --enable-option-checking=fatal \
+ $(if $(filter YES,$(CROSS_COMPILING)),--build=$(BUILD_PLATFORM) --host=$(HOST_PLATFORM))\
+ $(if $(SYSTEM_APR),,--with-apr=$(call gb_UnpackedTarball_get_dir,apr)/apr-1-config) \
+ $(if $(SYSTEM_APR),,--with-apr-util=$(call gb_UnpackedTarball_get_dir,apr_util)/apu-1-config) \
+ $(if $(SYSTEM_OPENSSL),,--with-openssl=$(call gb_UnpackedTarball_get_dir,openssl)) \
+ && $(MAKE) libserf-1.la \
+ )
+
+endif
+
+# vim: set noet sw=4 ts=4:
diff --git a/external/serf/Makefile b/external/serf/Makefile
new file mode 100644
index 000000000000..e4968cf85fb6
--- /dev/null
+++ b/external/serf/Makefile
@@ -0,0 +1,7 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+
+module_directory:=$(dir $(realpath $(firstword $(MAKEFILE_LIST))))
+
+include $(module_directory)/../../solenv/gbuild/partial_build.mk
+
+# vim: set noet sw=4 ts=4:
diff --git a/external/serf/Module_serf.mk b/external/serf/Module_serf.mk
new file mode 100644
index 000000000000..10ec039359a2
--- /dev/null
+++ b/external/serf/Module_serf.mk
@@ -0,0 +1,17 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_Module_Module,serf))
+
+$(eval $(call gb_Module_add_targets,serf,\
+ UnpackedTarball_serf \
+ ExternalProject_serf \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/external/serf/README b/external/serf/README
new file mode 100644
index 000000000000..0cfe55fb26c0
--- /dev/null
+++ b/external/serf/README
@@ -0,0 +1,4 @@
+The serf library is a high performance C-based HTTP client library
+built upon the Apache Portable Runtime (APR) library.
+
+From [http://code.google.com/p/serf/].
diff --git a/external/serf/UnpackedTarball_serf.mk b/external/serf/UnpackedTarball_serf.mk
new file mode 100644
index 000000000000..e6e950920b95
--- /dev/null
+++ b/external/serf/UnpackedTarball_serf.mk
@@ -0,0 +1,22 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_UnpackedTarball_UnpackedTarball,serf))
+
+$(eval $(call gb_UnpackedTarball_set_tarball,serf,$(SERF_TARBALL)))
+
+$(eval $(call gb_UnpackedTarball_fix_end_of_line,serf,\
+ serf.mak \
+))
+
+$(eval $(call gb_UnpackedTarball_add_patches,serf,\
+ external/serf/windows.build.patch.1 \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/external/serf/windows.build.patch.1 b/external/serf/windows.build.patch.1
new file mode 100644
index 000000000000..c659d41cdf43
--- /dev/null
+++ b/external/serf/windows.build.patch.1
@@ -0,0 +1,29 @@
+diff -ur serf.org/serf.mak serf/serf.mak
+--- serf.org/serf.mak 2014-03-05 16:31:26.681695709 +0100
++++ serf/serf.mak 2014-03-05 16:32:20.969696348 +0100
+@@ -93,7 +93,7 @@
+ WIN32_DEFS = /D WIN32 /D WIN32_LEAN_AND_MEAN /D NOUSER /D NOGDI /D NONLS /D NOCRYPT /D SERF_HAVE_SSPI
+
+ CPP=cl.exe
+-CPP_PROJ = /c /nologo $(CFLAGS) $(WIN32_DEFS) $(APR_FLAGS) $(APRUTIL_FLAGS) $(OPENSSL_FLAGS) $(ZLIB_FLAGS) /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\"
++CPP_PROJ = /c /nologo /D APR_DECLARE_STATIC /D APU_DECLARE_STATIC $(CFLAGS) $(WIN32_DEFS) $(APR_FLAGS) $(APRUTIL_FLAGS) $(OPENSSL_FLAGS) $(ZLIB_FLAGS) /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\"
+ LIB32=link.exe
+ LIB32_FLAGS=/nologo
+
+@@ -127,16 +127,6 @@
+ "$(INTDIR)\socket_buckets.obj" \
+ "$(INTDIR)\ssl_buckets.obj" \
+
+-!IFDEF OPENSSL_STATIC
+-LIB32_OBJS = $(LIB32_OBJS) "$(OPENSSL_SRC)\out32\libeay32.lib" \
+- "$(OPENSSL_SRC)\out32\ssleay32.lib"
+-!ELSE
+-LIB32_OBJS = $(LIB32_OBJS) "$(OPENSSL_SRC)\out32dll\libeay32.lib" \
+- "$(OPENSSL_SRC)\out32dll\ssleay32.lib"
+-!ENDIF
+-
+-LIB32_OBJS = $(LIB32_OBJS) $(APR_LIBS) $(APRUTIL_LIBS) $(ZLIB_LIBS)
+-
+ SYS_LIBS = secur32.lib
+
+ TEST_OBJS = \
diff --git a/solenv/gbuild/ExternalProject.mk b/solenv/gbuild/ExternalProject.mk
index 0495340f33a6..f57649f10d3d 100644
--- a/solenv/gbuild/ExternalProject.mk
+++ b/solenv/gbuild/ExternalProject.mk
@@ -212,6 +212,7 @@ $(if $(findstring YES,$(UNPACKED_IS_BIN_TARBALL)),\
touch $@,
$(call gb_Helper_print_on_error,cd $(EXTERNAL_WORKDIR)/$(3) && \
$(if $(WRAPPERS),export $(WRAPPERS) &&) \
+ $(if $(NMAKE),INCLUDE="$(gb_ExternalProject_INCLUDE)" LIB="$(ILIB)" MAKEFLAGS=) \
$(2) && touch $@,$(EXTERNAL_WORKDIR)/$(if $(3),$(3)/,)$(if $(4),$(4),$(1).log))
)
endef
diff --git a/solenv/gbuild/platform/com_GCC_class.mk b/solenv/gbuild/platform/com_GCC_class.mk
index df582ca803fb..3c109fea83be 100644
--- a/solenv/gbuild/platform/com_GCC_class.mk
+++ b/solenv/gbuild/platform/com_GCC_class.mk
@@ -187,6 +187,7 @@ endef
# ExternalProject class
gb_ExternalProject_use_autoconf :=
+gb_ExternalProject_use_nmake :=
# StaticLibrary class
diff --git a/solenv/gbuild/platform/com_MSC_class.mk b/solenv/gbuild/platform/com_MSC_class.mk
index eeb0fa001173..fb617ac9e85b 100644
--- a/solenv/gbuild/platform/com_MSC_class.mk
+++ b/solenv/gbuild/platform/com_MSC_class.mk
@@ -492,6 +492,13 @@ $(call gb_ExternalProject_get_preparation_target,$(1)) : $(call gb_Executable_ge
$(call gb_ExternalProject_get_state_target,$(1),$(2)): WRAPPERS := $(gb_AUTOCONF_WRAPPERS)
endef
+# Set INCLUDE and LIB variables and unset MAKEFLAGS when using nmake
+#
+# gb_ExternalProject_use_nmake project state_target
+define gb_ExternalProject_use_nmake
+$(call gb_ExternalProject_get_state_target,$(1),$(2)): NMAKE := $(true)
+endef
+
# if ccache is enabled, then split it and use lastword as REAL_FOO
# /opt/lo/bin/ccache /cygdrive/c/PROGRA~2/MICROS~2.0/VC/bin/cl.exe
@@ -502,6 +509,9 @@ gb_AUTOCONF_WRAPPERS = \
CXX="$(call gb_Executable_get_target,g++-wrapper)" \
LD="$(shell cygpath -w $(COMPATH)/bin/link.exe) -nologo"
+gb_ExternalProject_INCLUDE := \
+ $(subst -I,,$(subst $(WHITESPACE),;,$(subst -I. , ,$(SOLARINC))))
+
# InstallScript class
gb_InstallScript_EXT := .inf