tdf#139778 bundle external:zxing lib

Change-Id: I0023f6ce8315427b1a3deaf755e78ae06475b08c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112053
Reviewed-by: René Engelhard <rene@debian.org>
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Tested-by: René Engelhard <rene@debian.org>
Tested-by: Jenkins
diff --git a/Makefile.fetch b/Makefile.fetch
index 54c38a5..5c50142 100644
--- a/Makefile.fetch
+++ b/Makefile.fetch
@@ -171,6 +171,7 @@ $(WORKDIR)/download: $(BUILDDIR)/config_$(gb_Side).mk $(SRCDIR)/download.lst $(S
		$(call fetch_Optional,MARIADB_CONNECTOR_C,MARIADB_CONNECTOR_C_TARBALL) \
		$(call fetch_Optional,MDDS,MDDS_TARBALL) \
		$(call fetch_Optional,QRCODEGEN,QRCODEGEN_TARBALL) \
		$(call fetch_Optional,ZXING,ZXING_TARBALL) \
		$(call fetch_Optional,MDNSRESPONDER,MDNSRESPONDER_TARBALL) \
		$(call fetch_Optional,MORE_FONTS,FONT_CALADEA_TARBALL) \
		$(call fetch_Optional,MORE_FONTS,FONT_CARLITO_TARBALL) \
diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk
index 03833bd..97d54f1 100644
--- a/RepositoryExternal.mk
+++ b/RepositoryExternal.mk
@@ -4283,4 +4283,48 @@ endef

endif # SYSTEM_BOX2D

ifneq ($(SYSTEM_ZXING),)

define gb_LinkTarget__use_zxing
$(call gb_LinkTarget_set_include,$(1),\
	-DSYSTEM_ZXING \
	$$(INCLUDE) \
	$(ZXING_CFLAGS) \
)
$(call gb_LinkTarget_add_libs,$(1),$(ZXING_LIBS))

endef

gb_ExternalProject__use_zxing :=

else # !SYSTEM_ZXING

ifneq ($(ENABLE_ZXING),)

define gb_LinkTarget__use_zxing
$(call gb_LinkTarget_use_unpacked,$(1),zxing)
$(call gb_LinkTarget_set_include,$(1),\
	-I$(call gb_UnpackedTarball_get_dir,zxing/core/src/)\
	$$(INCLUDE) \
)
$(call gb_LinkTarget_use_static_libraries,$(1),\
	zxing \
)

endef

define gb_ExternalProject__use_zxing
$(call gb_ExternalProject_use_static_libraries,$(1),zxing)

endef

else # !ENABLE_ZXING

define gb_LinkTarget__use_zxing
endef

endif # ENABLE_ZXING

endif # SYSTEM_ZXING

# vim: set noet sw=4 ts=4:
diff --git a/config_host.mk.in b/config_host.mk.in
index 2f52785..e42dfcf 100644
--- a/config_host.mk.in
+++ b/config_host.mk.in
@@ -503,6 +503,9 @@ export PYTHONWARNINGS=@PYTHONWARNINGS@
export ENABLE_QRCODEGEN=@ENABLE_QRCODEGEN@
export QRCODEGEN_CFLAGS=$(gb_SPACE)@QRCODEGEN_CFLAGS@
export QRCODEGEN_LIBS=$(gb_SPACE)@QRCODEGEN_LIBS@
export ENABLE_ZXING=@ENABLE_ZXING@
export ZXING_CFLAGS=$(gb_SPACE)@ZXING_CFLAGS@
export ZXING_LIBS=$(gb_SPACE)@ZXING_LIBS@
export QT5_CFLAGS=$(gb_SPACE)@QT5_CFLAGS@
export QT5_LIBS=$(gb_SPACE)@QT5_LIBS@
export QT5_GOBJECT_CFLAGS=$(gb_SPACE)@QT5_GOBJECT_CFLAGS@
@@ -611,6 +614,7 @@ export SYSTEM_POPPLER=@SYSTEM_POPPLER@
export SYSTEM_POSTGRESQL=@SYSTEM_POSTGRESQL@
export SYSTEM_PYTHON=@SYSTEM_PYTHON@
export SYSTEM_QRCODEGEN=@SYSTEM_QRCODEGEN@
export SYSTEM_ZXING=@SYSTEM_ZXING@
export SYSTEM_QXP=@SYSTEM_QXP@
export SYSTEM_REDLAND=@SYSTEM_REDLAND@
export SYSTEM_REVENGE=@SYSTEM_REVENGE@
diff --git a/config_host/config_zxing.h.in b/config_host/config_zxing.h.in
new file mode 100644
index 0000000..6463cb6
--- /dev/null
+++ b/config_host/config_zxing.h.in
@@ -0,0 +1,17 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * 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/.
 */

#ifndef INCLUDED_CONFIG_ZXING_H
#define INCLUDED_CONFIG_ZXING_H

#define ENABLE_ZXING 0

#endif

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/configure.ac b/configure.ac
index 5984c98..8a79221 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2242,11 +2242,20 @@ libo_FUZZ_ARG_ENABLE(qrcodegen,
    AS_HELP_STRING([--disable-qrcodegen],
        [Disable use of qrcodegen external library.]))

libo_FUZZ_ARG_ENABLE(zxing,
    AS_HELP_STRING([--disable-zxing],
       [Disable use of zxing external library.]))

AC_ARG_WITH(system-qrcodegen,
    AS_HELP_STRING([--with-system-qrcodegen],
        [Use libqrcodegen already on system.]),,
    [with_system_qrcodegen="$with_system_libs"])

AC_ARG_WITH(system-zxing,
    AS_HELP_STRING([--with-system-zxing],
        [Use libzxing already on system.]),,
    [with_system_zxing="$with_system_libs"])

AC_ARG_WITH(system-box2d,
    AS_HELP_STRING([--with-system-box2d],
        [Use box2d already on system.]),,
@@ -10834,6 +10843,45 @@ AC_SUBST(QRCODEGEN_CFLAGS)
AC_SUBST(QRCODEGEN_LIBS)

dnl ===================================================================
dnl Check for system zxing
dnl ===================================================================
AC_MSG_CHECKING([whether to use zxing])
if test "$enable_zxing" = "no"; then
    AC_MSG_RESULT([no])
    ENABLE_ZXING=
    SYSTEM_ZXING=
else
    AC_MSG_RESULT([yes])
    ENABLE_ZXING=TRUE
    AC_MSG_CHECKING([which libzxing to use])
    if test "$with_system_zxing" = "yes"; then
        AC_MSG_RESULT([external])
        SYSTEM_ZXING=TRUE
        AC_LANG_PUSH([C++])
        AC_CHECK_HEADER(ZXing/MultiFormatWriter.h, [],
            [AC_MSG_ERROR(zxing headers not found.)], [#include <stdexcept>])
        AC_CHECK_LIB([ZXing], [main], [ZXING_LIBS=-lZXing],
            [ AC_CHECK_LIB([ZXingCore], [main], [ZXING_LIBS=-lZXingCore],
            [ AC_MSG_ERROR(zxing C++ library not found.) ])], [])
        AC_LANG_POP([C++])
        ZXING_CFLAGS=$(printf '%s' "$ZXING_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
        FilterLibs "${ZXING_LIBS}"
        ZXING_LIBS="${filteredlibs}"
    else
        AC_MSG_RESULT([internal])
        SYSTEM_ZXING=
        BUILD_TYPE="$BUILD_TYPE ZXING"
    fi
    if test "$ENABLE_ZXING" = TRUE; then
        AC_DEFINE(ENABLE_ZXING)
    fi
fi
AC_SUBST(SYSTEM_ZXING)
AC_SUBST(ENABLE_ZXING)
AC_SUBST(ZXING_CFLAGS)
AC_SUBST(ZXING_LIBS)

dnl ===================================================================
dnl Check for system box2d
dnl ===================================================================
AC_MSG_CHECKING([which box2d to use])
@@ -14088,6 +14136,7 @@ AC_CONFIG_HEADERS([config_host/config_oox.h])
AC_CONFIG_HEADERS([config_host/config_options.h])
AC_CONFIG_HEADERS([config_host/config_options_calc.h])
AC_CONFIG_HEADERS([config_host/config_qrcodegen.h])
AC_CONFIG_HEADERS([config_host/config_zxing.h])
AC_CONFIG_HEADERS([config_host/config_skia.h])
AC_CONFIG_HEADERS([config_host/config_typesizes.h])
AC_CONFIG_HEADERS([config_host/config_vendor.h])
diff --git a/download.lst b/download.lst
index 46013d7..eca1650 100644
--- a/download.lst
+++ b/download.lst
@@ -269,6 +269,7 @@ export ZLIB_SHA256SUM := 4ff941449631ace0d4d203e3483be9dbc9da454084111f97ea0a211
export ZLIB_TARBALL := zlib-1.2.11.tar.xz
export ZMF_SHA256SUM := 27051a30cb057fdb5d5de65a1f165c7153dc76e27fe62251cbb86639eb2caf22
export ZMF_TARBALL := libzmf-0.0.2.tar.xz

export ZXING_SHA256SUM := e595b3fa2ec320beb0b28f6af56b1141853257c2611686685639cebb3b248c86
export ZXING_TARBALL := zxing-cpp-1.1.1.tar.gz
NUMBERTEXT_EXTENSION_SHA256SUM := 1568ed1d2feb8210bb5de61d69574a165cded536cfa17c6953c9064076469de2
OPENSYMBOL_SHA256SUM := f543e6e2d7275557a839a164941c0a86e5f2c3f2a0042bfc434c88c6dde9e140
diff --git a/external/Module_external.mk b/external/Module_external.mk
index 1c722a3..a87ee85 100644
--- a/external/Module_external.mk
+++ b/external/Module_external.mk
@@ -91,6 +91,7 @@ $(eval $(call gb_Module_add_moduledirs,external,\
	$(call gb_Helper_optional,PYTHON,python3) \
	$(call gb_Helper_optional,QXP,libqxp) \
	$(call gb_Helper_optional,QRCODEGEN,qrcodegen) \
	$(call gb_Helper_optional,ZXING,zxing) \
	$(call gb_Helper_optional,REDLAND,redland) \
	$(call gb_Helper_optional,REVENGE,librevenge) \
	$(call gb_Helper_optional,RHINO,rhino) \
diff --git a/external/zxing/Makefile b/external/zxing/Makefile
new file mode 100644
index 0000000..e4968cf8
--- /dev/null
+++ b/external/zxing/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/zxing/Module_zxing.mk b/external/zxing/Module_zxing.mk
new file mode 100644
index 0000000..ee53696
--- /dev/null
+++ b/external/zxing/Module_zxing.mk
@@ -0,0 +1,20 @@
# -*- 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,zxing))

$(eval $(call gb_Module_add_targets,zxing,\
	UnpackedTarball_zxing \
))

$(eval $(call gb_Module_add_targets,zxing,\
	StaticLibrary_zxing \
))

# vim: set noet sw=4 ts=4:
\ No newline at end of file
diff --git a/external/zxing/README b/external/zxing/README
new file mode 100644
index 0000000..1ca49cb
--- /dev/null
+++ b/external/zxing/README
@@ -0,0 +1,3 @@
Qr code generation library availaible from [https://github.com/nu-book/zxing-cpp]

Qr code generator to make a QR code out of a provided link or text in LibreOffice.
\ No newline at end of file
diff --git a/external/zxing/StaticLibrary_zxing.mk b/external/zxing/StaticLibrary_zxing.mk
new file mode 100644
index 0000000..9a5ca26
--- /dev/null
+++ b/external/zxing/StaticLibrary_zxing.mk
@@ -0,0 +1,149 @@
# -*- 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_StaticLibrary_StaticLibrary,zxing))

$(eval $(call gb_StaticLibrary_use_unpacked,zxing,zxing))

$(eval $(call gb_StaticLibrary_set_generated_cxx_suffix,zxing,cpp))

$(eval $(call gb_StaticLibrary_use_external,zxing,icu_headers))

$(eval $(call gb_StaticLibrary_set_warnings_disabled,zxing))

$(eval $(call gb_StaticLibrary_set_include,zxing,\
	-I$(call gb_UnpackedTarball_get_dir,zxing/core/src/) \
	$$(INCLUDE) \
))

$(eval $(call gb_StaticLibrary_add_generated_exception_objects,zxing,\
	UnpackedTarball/zxing/core/src/aztec/AZReader \
	UnpackedTarball/zxing/core/src/aztec/AZToken \
	UnpackedTarball/zxing/core/src/aztec/AZEncoder \
	UnpackedTarball/zxing/core/src/aztec/AZDecoder \
	UnpackedTarball/zxing/core/src/aztec/AZDetector \
	UnpackedTarball/zxing/core/src/aztec/AZHighLevelEncoder \
	UnpackedTarball/zxing/core/src/aztec/AZWriter \
	UnpackedTarball/zxing/core/src/BarcodeFormat \
	UnpackedTarball/zxing/core/src/BitArray \
	UnpackedTarball/zxing/core/src/BitMatrixIO \
	UnpackedTarball/zxing/core/src/BitMatrix \
	UnpackedTarball/zxing/core/src/BitSource \
	UnpackedTarball/zxing/core/src/textcodec/Big5TextDecoder \
	UnpackedTarball/zxing/core/src/textcodec/Big5TextEncoder \
	UnpackedTarball/zxing/core/src/textcodec/Big5MapTable \
	UnpackedTarball/zxing/core/src/CharacterSetECI \
	UnpackedTarball/zxing/core/src/DecodeHints \
	UnpackedTarball/zxing/core/src/DecodeStatus \
	UnpackedTarball/zxing/core/src/datamatrix/DMWriter \
	UnpackedTarball/zxing/core/src/datamatrix/DMDefaultPlacement \
	UnpackedTarball/zxing/core/src/datamatrix/DMDetector \
	UnpackedTarball/zxing/core/src/datamatrix/DMVersion \
	UnpackedTarball/zxing/core/src/datamatrix/DMSymbolInfo \
	UnpackedTarball/zxing/core/src/datamatrix/DMDecoder \
	UnpackedTarball/zxing/core/src/datamatrix/DMBitMatrixParser \
	UnpackedTarball/zxing/core/src/datamatrix/DMReader \
	UnpackedTarball/zxing/core/src/datamatrix/DMDataBlock \
	UnpackedTarball/zxing/core/src/datamatrix/DMECEncoder \
	UnpackedTarball/zxing/core/src/datamatrix/DMHighLevelEncoder \
	UnpackedTarball/zxing/core/src/GlobalHistogramBinarizer \
	UnpackedTarball/zxing/core/src/GenericGF \
	UnpackedTarball/zxing/core/src/GridSampler \
	UnpackedTarball/zxing/core/src/GenericLuminanceSource \
	UnpackedTarball/zxing/core/src/GenericGFPoly \
	UnpackedTarball/zxing/core/src/textcodec/GBTextEncoder \
	UnpackedTarball/zxing/core/src/textcodec/GBTextDecoder \
	UnpackedTarball/zxing/core/src/HybridBinarizer \
	UnpackedTarball/zxing/core/src/textcodec/JPTextEncoder \
	UnpackedTarball/zxing/core/src/textcodec/JPTextDecoder \
	UnpackedTarball/zxing/core/src/textcodec/KRHangulMapping \
	UnpackedTarball/zxing/core/src/textcodec/KRTextEncoder \
	UnpackedTarball/zxing/core/src/textcodec/KRTextDecoder \
	UnpackedTarball/zxing/core/src/LuminanceSource \
	UnpackedTarball/zxing/core/src/MultiFormatWriter \
	UnpackedTarball/zxing/core/src/MultiFormatReader \
	UnpackedTarball/zxing/core/src/maxicode/MCDecoder \
	UnpackedTarball/zxing/core/src/maxicode/MCBitMatrixParser \
	UnpackedTarball/zxing/core/src/maxicode/MCReader \
	UnpackedTarball/zxing/core/src/oned/ODUPCEANExtensionSupport \
	UnpackedTarball/zxing/core/src/oned/ODUPCEWriter \
	UnpackedTarball/zxing/core/src/oned/ODEAN8Writer \
	UnpackedTarball/zxing/core/src/oned/ODWriterHelper \
	UnpackedTarball/zxing/core/src/oned/ODITFWriter \
	UnpackedTarball/zxing/core/src/oned/ODITFReader \
	UnpackedTarball/zxing/core/src/oned/ODCode39Reader \
	UnpackedTarball/zxing/core/src/oned/ODRSSExpandedReader \
	UnpackedTarball/zxing/core/src/oned/ODCode128Reader \
	UnpackedTarball/zxing/core/src/oned/ODEAN13Writer \
	UnpackedTarball/zxing/core/src/oned/ODEANManufacturerOrgSupport \
	UnpackedTarball/zxing/core/src/oned/ODMultiUPCEANReader \
	UnpackedTarball/zxing/core/src/oned/ODUPCEANReader \
	UnpackedTarball/zxing/core/src/oned/ODCodabarWriter \
	UnpackedTarball/zxing/core/src/oned/ODCode128Writer \
	UnpackedTarball/zxing/core/src/oned/ODCode93Reader \
	UnpackedTarball/zxing/core/src/oned/ODCodabarReader \
	UnpackedTarball/zxing/core/src/oned/ODCode39Writer \
	UnpackedTarball/zxing/core/src/oned/ODUPCEANCommon \
	UnpackedTarball/zxing/core/src/oned/ODRowReader \
	UnpackedTarball/zxing/core/src/oned/ODReader \
	UnpackedTarball/zxing/core/src/oned/ODCode93Writer \
	UnpackedTarball/zxing/core/src/oned/ODUPCEReader \
	UnpackedTarball/zxing/core/src/oned/ODCode128Patterns \
	UnpackedTarball/zxing/core/src/oned/ODEAN13Reader \
	UnpackedTarball/zxing/core/src/oned/ODUPCAWriter \
	UnpackedTarball/zxing/core/src/oned/ODRSS14Reader \
	UnpackedTarball/zxing/core/src/oned/ODUPCAReader \
	UnpackedTarball/zxing/core/src/oned/ODEAN8Reader \
	UnpackedTarball/zxing/core/src/PerspectiveTransform \
	UnpackedTarball/zxing/core/src/pdf417/PDFCodewordDecoder \
	UnpackedTarball/zxing/core/src/pdf417/PDFHighLevelEncoder \
	UnpackedTarball/zxing/core/src/pdf417/PDFDetectionResultColumn \
	UnpackedTarball/zxing/core/src/pdf417/PDFReader \
	UnpackedTarball/zxing/core/src/pdf417/PDFBoundingBox \
	UnpackedTarball/zxing/core/src/pdf417/PDFScanningDecoder \
	UnpackedTarball/zxing/core/src/pdf417/PDFModulusGF \
	UnpackedTarball/zxing/core/src/pdf417/PDFEncoder \
	UnpackedTarball/zxing/core/src/pdf417/PDFDecodedBitStreamParser \
	UnpackedTarball/zxing/core/src/pdf417/PDFWriter \
	UnpackedTarball/zxing/core/src/pdf417/PDFDetectionResult \
	UnpackedTarball/zxing/core/src/pdf417/PDFModulusPoly \
	UnpackedTarball/zxing/core/src/pdf417/PDFDetector \
	UnpackedTarball/zxing/core/src/pdf417/PDFBarcodeValue \
	UnpackedTarball/zxing/core/src/qrcode/QRFinderPatternFinder \
	UnpackedTarball/zxing/core/src/qrcode/QRDecoder \
	UnpackedTarball/zxing/core/src/qrcode/QRReader \
	UnpackedTarball/zxing/core/src/qrcode/QRErrorCorrectionLevel \
	UnpackedTarball/zxing/core/src/qrcode/QRAlignmentPattern \
	UnpackedTarball/zxing/core/src/qrcode/QRFormatInformation \
	UnpackedTarball/zxing/core/src/qrcode/QREncoder \
	UnpackedTarball/zxing/core/src/qrcode/QRFinderPattern \
	UnpackedTarball/zxing/core/src/qrcode/QRMaskUtil \
	UnpackedTarball/zxing/core/src/qrcode/QRWriter \
	UnpackedTarball/zxing/core/src/qrcode/QRDataMask \
	UnpackedTarball/zxing/core/src/qrcode/QRMatrixUtil \
	UnpackedTarball/zxing/core/src/qrcode/QRDetector \
	UnpackedTarball/zxing/core/src/qrcode/QRVersion \
	UnpackedTarball/zxing/core/src/qrcode/QRCodecMode \
	UnpackedTarball/zxing/core/src/qrcode/QRAlignmentPatternFinder \
	UnpackedTarball/zxing/core/src/qrcode/QRDataBlock \
	UnpackedTarball/zxing/core/src/qrcode/QRBitMatrixParser \
	UnpackedTarball/zxing/core/src/Result \
	UnpackedTarball/zxing/core/src/ReadBarcode \
	UnpackedTarball/zxing/core/src/ResultPoint \
	UnpackedTarball/zxing/core/src/ResultMetadata \
	UnpackedTarball/zxing/core/src/ReedSolomonDecoder \
	UnpackedTarball/zxing/core/src/ReedSolomonEncoder \
	UnpackedTarball/zxing/core/src/TextDecoder \
	UnpackedTarball/zxing/core/src/TextEncoder \
	UnpackedTarball/zxing/core/src/TextUtfEncoding \
	UnpackedTarball/zxing/core/src/WhiteRectDetector \
	UnpackedTarball/zxing/core/src/ZXBigInteger \
))

# vim: set noet sw=4 ts=4:
\ No newline at end of file
diff --git a/external/zxing/UnpackedTarball_zxing.mk b/external/zxing/UnpackedTarball_zxing.mk
new file mode 100644
index 0000000..335440e
--- /dev/null
+++ b/external/zxing/UnpackedTarball_zxing.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_UnpackedTarball_UnpackedTarball,zxing))

$(eval $(call gb_UnpackedTarball_set_tarball,zxing,$(ZXING_TARBALL)))

$(eval $(call gb_UnpackedTarball_set_patchlevel,zxing,1))

$(eval $(call gb_UnpackedTarball_add_patches,zxing, \
))

# vim: set noet sw=4 ts=4:
\ No newline at end of file