[Libreoffice-commits] core.git: Branch 'feature/cib_contract891' - 29 commits - download.lst editeng/source external/graphite external/icu external/lcms2 external/lpsolve external/openssl external/python3 Makefile.fetch vcl/inc vcl/source vcl/win
David Tardon
dtardon at redhat.com
Mon Apr 30 14:46:54 UTC 2018
Rebased ref, commits from common ancestor:
commit 044f467cbe14fcbad5ce929a24795676d4463d61
Author: David Tardon <dtardon at redhat.com>
Date: Tue Jan 31 22:35:37 2017 +0100
upload zlib 1.2.11
Reviewed-on: https://gerrit.libreoffice.org/33770
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: David Tardon <dtardon at redhat.com>
Conflicts:
download.lst
Change-Id: I4e19a9d976c28f5e6649bdbb3dd609e03a4c03a8
diff --git a/Makefile.fetch b/Makefile.fetch
index 6b6fbcb4cd1e..9b0e231d85ef 100644
--- a/Makefile.fetch
+++ b/Makefile.fetch
@@ -90,6 +90,7 @@ $(WORKDIR)/download: $(BUILDDIR)/config_host.mk $(SRCDIR)/download.lst $(SRCDIR)
$(call fetch_Optional,ODFGEN,ODFGEN_TARBALL) \
$(call fetch_Optional,PYTHON,PYTHON_TARBALL) \
$(call fetch_Optional,VISIO,VISIO_TARBALL) \
+ $(call fetch_Optional,ZLIB,ZLIB_TARBALL) \
,$(call fetch_Download_item_special,http://dev-www.libreoffice.org/src,$(item)))
$(foreach item, \
$(call fetch_Optional,AFMS,$(AFMS_TARBALL)) \
@@ -172,7 +173,6 @@ $(WORKDIR)/download: $(BUILDDIR)/config_host.mk $(SRCDIR)/download.lst $(SRCDIR)
$(call fetch_Optional,WPG,$(WPG_TARBALL)) \
$(call fetch_Optional,WPS,$(WPS_TARBALL)) \
$(call fetch_Optional,XSLTML,$(XSLTML_TARBALL)) \
- $(call fetch_Optional,ZLIB,$(ZLIB_TARBALL)) \
,$(call fetch_Download_item,http://dev-www.libreoffice.org/src,$(item)))
$(foreach item, \
$(call fetch_Optional,DBGHELP,$(DBGHELP_DLL)) \
diff --git a/download.lst b/download.lst
index 059a06f684da..1e8e665767cf 100644
--- a/download.lst
+++ b/download.lst
@@ -32,6 +32,8 @@ PYTHON_MD5SUM := 803a75927f8f241ca78633890c798021
export PYTHON_TARBALL := Python-3.3.5.tgz
OPENSSL_MD5SUM := 44279b8557c3247cbe324e2322ecd114
export OPENSSL_TARBALL := openssl-1.0.2o.tar.gz
+ZLIB_MD5SUM := 85adef240c5f370b308da8c938951a68
+export ZLIB_TARBALL := zlib-1.2.11.tar.xz
export AFMS_TARBALL := 1756c4fa6c616ae15973c104cd8cb256-Adobe-Core35_AFMs-314.tar.gz
export APACHE_COMMONS_CODEC_TARBALL := 2e482c7567908d334785ce7d69ddfff7-commons-codec-1.6-src.tar.gz
@@ -110,7 +112,6 @@ export WPD_TARBALL := a3dcac551fae5ebbec16e844810828c4-libwpd-0.9.9.tar.bz2
export WPG_TARBALL := b85436266b2ac91d351ab5684b181151-libwpg-0.2.2.tar.bz2
export WPS_TARBALL := 46eb0e7f213ad61bd5dee0c494132cb0-libwps-0.2.9.tar.bz2
export XSLTML_TARBALL := a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip
-export ZLIB_TARBALL := 2ab442d169156f34c379c968f3f482dd-zlib-1.2.7.tar.bz2
export MOZ_ZIP_INC := $(OS)$(COM)$(if $(filter INTEL,$(CPUNAME)),I,X)inc.zip
export MOZ_ZIP_LIB := $(OS)$(COM)$(if $(filter INTEL,$(CPUNAME)),I,X)lib.zip
commit 53299350e2aabe9f24b9a73c6033531358e881c2
Author: Thorsten Behrens <Thorsten.Behrens at CIB.de>
Date: Mon Apr 30 14:33:09 2018 +0200
update openssl to 1.0.2o
Change-Id: I6f7308e60ba74bbcec1719c9aeec8e6c21d24ecc
diff --git a/Makefile.fetch b/Makefile.fetch
index bb0b02f4ac5e..6b6fbcb4cd1e 100644
--- a/Makefile.fetch
+++ b/Makefile.fetch
@@ -86,6 +86,7 @@ $(WORKDIR)/download: $(BUILDDIR)/config_host.mk $(SRCDIR)/download.lst $(SRCDIR)
$(call fetch_Optional,LIBLANGTAG,LANGTAGREG_TARBALL) \
$(call fetch_Optional,MSPUB,MSPUB_TARBALL) \
$(call fetch_Optional,MWAW,MWAW_TARBALL) \
+ $(call fetch_Optional,OPENSSL,OPENSSL_TARBALL) \
$(call fetch_Optional,ODFGEN,ODFGEN_TARBALL) \
$(call fetch_Optional,PYTHON,PYTHON_TARBALL) \
$(call fetch_Optional,VISIO,VISIO_TARBALL) \
@@ -154,7 +155,6 @@ $(WORKDIR)/download: $(BUILDDIR)/config_host.mk $(SRCDIR)/download.lst $(SRCDIR)
$(call fetch_Optional,NSS,$(NSS_TARBALL)) \
$(NUMBERTEXT_EXTENSION_PACK) \
$(call fetch_Optional,OPENLDAP,$(OPENLDAP_TARBALL)) \
- $(call fetch_Optional,OPENSSL,$(OPENSSL_TARBALL)) \
$(call fetch_Optional,ORCUS,$(ORCUS_TARBALL)) \
$(call fetch_Optional,CAIRO,$(PIXMAN_TARBALL)) \
$(call fetch_Optional,LIBPNG,$(PNG_TARBALL)) \
diff --git a/download.lst b/download.lst
index f83677a20ba9..059a06f684da 100644
--- a/download.lst
+++ b/download.lst
@@ -30,6 +30,8 @@ LANGTAGREG_MD5SUM := 504af523f5d1a5590bbeb6a4b55e8a97
export LANGTAGREG_TARBALL := language-subtag-registry-2014-03-27.tar.bz2
PYTHON_MD5SUM := 803a75927f8f241ca78633890c798021
export PYTHON_TARBALL := Python-3.3.5.tgz
+OPENSSL_MD5SUM := 44279b8557c3247cbe324e2322ecd114
+export OPENSSL_TARBALL := openssl-1.0.2o.tar.gz
export AFMS_TARBALL := 1756c4fa6c616ae15973c104cd8cb256-Adobe-Core35_AFMs-314.tar.gz
export APACHE_COMMONS_CODEC_TARBALL := 2e482c7567908d334785ce7d69ddfff7-commons-codec-1.6-src.tar.gz
@@ -92,7 +94,6 @@ export MYTHES_TARBALL := 46e92b68e31e858512b680b3b61dc4c1-mythes-1.2.3.tar.gz
export NEON_TARBALL := ff369e69ef0f0143beb5626164e87ae2-neon-0.29.5.tar.gz
export NSS_TARBALL := b279551b7638d0e36d1199548124c247-nss-3.16.5-with-nspr-4.10.6.tar.gz
export OPENLDAP_TARBALL := 804c6cb5698db30b75ad0ff1c25baefd-openldap-2.4.31.tgz
-export OPENSSL_TARBALL := 66bf6f10f060d561929de96f9dfe5b8c-openssl-1.0.1e.tar.gz
export ORCUS_TARBALL := ea2acaf140ae40a87a952caa75184f4d-liborcus-0.5.1.tar.bz2
export PIXMAN_TARBALL := c63f411b3ad147db2bcce1bf262a0e02-pixman-0.24.4.tar.bz2
export PNG_TARBALL := 9e5d864bce8f06751bbd99962ecf4aad-libpng-1.5.10.tar.gz
commit 2ede29cb953330ba184a770e6e8fa9904c52b294
Author: Michael Stahl <mstahl at redhat.com>
Date: Mon Jan 8 17:48:40 2018 +0100
openssl: fix MSVC 64-bit build
For whatever reason OpenSSL wants to use "masm" (ml.exe) on 32-bit
builds but "nasm" on 64-bit builds - this despite INSTALL.W32 claiming
that only nasm is "supported".
But /safeseh doesn't make sense on 64-bit anyway because there
is no "unsafe" SEH there, so just apply the patch only for 32-bit.
Change-Id: Ie32b17dfeeaf11c49ee29c3181021ffa5bd99091
diff --git a/external/openssl/UnpackedTarball_openssl.mk b/external/openssl/UnpackedTarball_openssl.mk
index 1d8728381e78..05fd56448a58 100644
--- a/external/openssl/UnpackedTarball_openssl.mk
+++ b/external/openssl/UnpackedTarball_openssl.mk
@@ -14,6 +14,7 @@ $(eval $(call gb_UnpackedTarball_set_tarball,openssl,$(OPENSSL_TARBALL),,openssl
$(eval $(call gb_UnpackedTarball_add_patches,openssl,\
external/openssl/openssllnx.patch \
external/openssl/opensslwnt.patch \
+ $(if $(filter INTEL,$(CPUNAME)),external/openssl/opensslwnt_safeseh.patch) \
external/openssl/openssl-1.0.1h-win64.patch.1 \
external/openssl/opensslsol.patch \
external/openssl/opensslios.patch \
diff --git a/external/openssl/opensslwnt.patch b/external/openssl/opensslwnt.patch
index ffdcc5353913..2d00736f1317 100644
--- a/external/openssl/opensslwnt.patch
+++ b/external/openssl/opensslwnt.patch
@@ -79,26 +79,15 @@ diff -ru openssl.orig/util/mk1mf.pl openssl/util/mk1mf.pl
APP_CFLAG=$app_cflag
LIB_CFLAG=$lib_cflag
SHLIB_CFLAG=$shl_cflag
-@@ -488,8 +493,8 @@
- SRC_D=$src_dir
+@@ -488,7 +493,7 @@
LINK_CMD=$link
--LFLAGS=$lflags
-+LFLAGS=$lflags /SAFESEH
+ LFLAGS=$lflags
-RSC=$rsc
+RSC=$rsc \$(SOLARINC)
# The output directory for everything interesting
OUT_D=$out_dir
-@@ -511,7 +516,7 @@
- MKDIR=$mkdir
- MKLIB=$bin_dir$mklib
- MLFLAGS=$mlflags
--ASM=$bin_dir$asm
-+ASM=$bin_dir$asm /safeseh
-
- # FIPS validated module and support file locations
-
@@ -669,7 +674,7 @@
printf OUT <<EOF;
#ifdef $platform_cpp_symbol
diff --git a/external/openssl/opensslwnt_safeseh.patch b/external/openssl/opensslwnt_safeseh.patch
new file mode 100644
index 000000000000..f2eafab5b9ed
--- /dev/null
+++ b/external/openssl/opensslwnt_safeseh.patch
@@ -0,0 +1,23 @@
+use /safeseh in 32-bit MSVC builds; this is not required for 64-bit
+
+diff -ru openssl.orig/util/mk1mf.pl openssl/util/mk1mf.pl
+--- a/openssl.orig/util/mk1mf.pl 2016-03-03 20:22:21.043924505 +0100
++++ b/openssl/util/mk1mf.pl 2016-03-03 20:34:45.015901171 +0100
+@@ -488,7 +493,7 @@
+ SRC_D=$src_dir
+
+ LINK_CMD=$link
+-LFLAGS=$lflags
++LFLAGS=$lflags /SAFESEH
+ RSC=$rsc \$(SOLARINC)
+
+ # The output directory for everything interesting
+@@ -511,7 +516,7 @@
+ MKDIR=$mkdir
+ MKLIB=$bin_dir$mklib
+ MLFLAGS=$mlflags
+-ASM=$bin_dir$asm
++ASM=$bin_dir$asm /safeseh
+
+ # FIPS validated module and support file locations
+
commit 2f3ec3a30128b6428e9fcf7785780430393d559d
Author: David Tardon <dtardon at redhat.com>
Date: Wed Feb 1 12:47:04 2017 +0100
upload openssl 1.0.2k
Change-Id: I26d49db0207b3f4f64aa9698da4cf3567d195834
Reviewed-on: https://gerrit.libreoffice.org/33800
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: David Tardon <dtardon at redhat.com>
diff --git a/external/openssl/openssllnx.patch b/external/openssl/openssllnx.patch
index de19807b313e..224df8f87b2e 100644
--- a/external/openssl/openssllnx.patch
+++ b/external/openssl/openssllnx.patch
@@ -19,5 +19,5 @@
- AS='$(CC)' ASFLAG='$(CFLAG) -c' \
+ AS='$(CC)' ASFLAG='$(CFLAG) -c -Wa,--noexecstack' \
AR='$(AR)' NM='$(NM)' RANLIB='$(RANLIB)' \
+ RC='$(RC)' \
CROSS_COMPILE='$(CROSS_COMPILE)' \
- PERL='$(PERL)' ENGDIRS='$(ENGDIRS)' \
commit 364ed6405fe416182f8a5a0ffa4f6a69312c5229
Author: Michael Stahl <mstahl at redhat.com>
Date: Mon Jan 8 12:31:39 2018 +0100
openssl: MSVC build: link and run MSASM with /SAFESEH
Actually the assembler requires lowercase /safeseh, oddly enough.
Change-Id: I1569409a2d6358282a7463ea996a6b1615e6ed8c
diff --git a/external/openssl/opensslwnt.patch b/external/openssl/opensslwnt.patch
index 2d00736f1317..ffdcc5353913 100644
--- a/external/openssl/opensslwnt.patch
+++ b/external/openssl/opensslwnt.patch
@@ -79,15 +79,26 @@ diff -ru openssl.orig/util/mk1mf.pl openssl/util/mk1mf.pl
APP_CFLAG=$app_cflag
LIB_CFLAG=$lib_cflag
SHLIB_CFLAG=$shl_cflag
-@@ -488,7 +493,7 @@
+@@ -488,8 +493,8 @@
+ SRC_D=$src_dir
LINK_CMD=$link
- LFLAGS=$lflags
+-LFLAGS=$lflags
++LFLAGS=$lflags /SAFESEH
-RSC=$rsc
+RSC=$rsc \$(SOLARINC)
# The output directory for everything interesting
OUT_D=$out_dir
+@@ -511,7 +516,7 @@
+ MKDIR=$mkdir
+ MKLIB=$bin_dir$mklib
+ MLFLAGS=$mlflags
+-ASM=$bin_dir$asm
++ASM=$bin_dir$asm /safeseh
+
+ # FIPS validated module and support file locations
+
@@ -669,7 +674,7 @@
printf OUT <<EOF;
#ifdef $platform_cpp_symbol
commit f1019f5c599a991624877a633d7a9d1071f49181
Author: Caolán McNamara <caolanm at redhat.com>
Date: Thu Jan 28 14:51:47 2016 +0000
upgrade openssl to 1.0.2g
We can't "break symlinks after extracting tarball" because they populate
that dir during the build now. So instead cripple mklink.pl to
copy instead of link. (Configure no-symlinks simply skips the symlink
step instead of copying, so that appears useless)
Change-Id: Ib30b2c1b8b3de72511d09c478297a7a5a4bc691e
Reviewed-on: https://gerrit.libreoffice.org/21880
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
Tested-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/external/openssl/UnpackedTarball_openssl.mk b/external/openssl/UnpackedTarball_openssl.mk
index d36aba5ebdd0..1d8728381e78 100644
--- a/external/openssl/UnpackedTarball_openssl.mk
+++ b/external/openssl/UnpackedTarball_openssl.mk
@@ -11,24 +11,14 @@ $(eval $(call gb_UnpackedTarball_UnpackedTarball,openssl))
$(eval $(call gb_UnpackedTarball_set_tarball,openssl,$(OPENSSL_TARBALL),,openssl))
-# break symlinks after extracting tarball
-# note: escape \; because LO patched make 3.82 cuts off the command otherwise
-ifeq ($(OS_FOR_BUILD),WNT)
-$(eval $(call gb_UnpackedTarball_set_pre_action,openssl,\
- cd include/openssl && \
- for header in `find . -type l` \; do \
- cp --remove-destination `readlink $$$$header` $$$$header \; \
- done && cd -))
-endif
-
$(eval $(call gb_UnpackedTarball_add_patches,openssl,\
external/openssl/openssllnx.patch \
external/openssl/opensslwnt.patch \
- external/openssl/openssl-1.0.1g-msvc2012-winxp.patch.1 \
external/openssl/openssl-1.0.1h-win64.patch.1 \
external/openssl/opensslsol.patch \
external/openssl/opensslios.patch \
external/openssl/openssl-3650-masm.patch.1 \
+ external/openssl/openssl-fixbuild.patch.1 \
))
# vim: set noet sw=4 ts=4:
diff --git a/external/openssl/openssl-1.0.1g-msvc2012-winxp.patch.1 b/external/openssl/openssl-1.0.1g-msvc2012-winxp.patch.1
deleted file mode 100644
index de9e6fc09f4a..000000000000
--- a/external/openssl/openssl-1.0.1g-msvc2012-winxp.patch.1
+++ /dev/null
@@ -1,20 +0,0 @@
---- openssl.org/util/pl/VC-32.pl 2014-05-18 23:41:39.336594400 +0200
-+++ openssl/util/pl/VC-32.pl 2014-05-18 23:47:40.055279300 +0200
-@@ -48,7 +48,7 @@
- my $f = $shlib || $fips ?' /MD':' /MT';
- $opt_cflags=$f.' /Ox';
- $dbg_cflags=$f.'d /Od -DDEBUG -D_DEBUG';
-- $lflags="/nologo /subsystem:console /opt:ref";
-+ $lflags="/nologo /subsystem:console,5.02 /opt:ref";
-
- *::perlasm_compile_target = sub {
- my ($target,$source,$bname)=@_;
-@@ -135,7 +135,7 @@
- $ff = "/fixed";
- $opt_cflags=$f.' -Ox -O2 -Ob2';
- $dbg_cflags=$f.'d -Od -DDEBUG -D_DEBUG';
-- $lflags="/nologo /subsystem:console /opt:ref";
-+ $lflags="/nologo /subsystem:console,5.01 /opt:ref";
- }
- $lib_cflag='-Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib
- $mlflags='';
diff --git a/external/openssl/openssl-fixbuild.patch.1 b/external/openssl/openssl-fixbuild.patch.1
new file mode 100644
index 000000000000..5a986e87214b
--- /dev/null
+++ b/external/openssl/openssl-fixbuild.patch.1
@@ -0,0 +1,23 @@
+--- a/crypto/evp/Makefile
++++ b/crypto/evp/Makefile
+@@ -289,7 +289,7 @@
+ e_idea.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
+ e_idea.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
+ e_idea.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
+-e_idea.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
++e_idea.o: ../../include/openssl/evp.h ../idea/idea.h
+ e_idea.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
+ e_idea.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
+ e_idea.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
+--- a/util/mklink.pl
++++ b/util/mklink.pl
+@@ -50,8 +50,7 @@
+ my $to = join('/', @to_path);
+
+ my $file;
+-$symlink_exists=eval {symlink("",""); 1};
+-if ($^O eq "msys") { $symlink_exists=0 };
++$symlink_exists=0;
+ foreach $file (@files) {
+ my $err = "";
+ if ($symlink_exists) {
diff --git a/external/openssl/openssllnx.patch b/external/openssl/openssllnx.patch
index 23a7d9e4c228..de19807b313e 100644
--- a/external/openssl/openssllnx.patch
+++ b/external/openssl/openssllnx.patch
@@ -12,12 +12,12 @@
--- build/openssl-0.9.8v/Makefile.org 2010-01-27 17:06:36.000000000 +0100
+++ build/openssl-0.9.8v/Makefile.org 2010-09-20 09:24:00.000000000 +0100
-@@ -199,7 +199,7 @@
-
- BUILDENV= PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)' \
+@@ -206,7 +206,7 @@
+ # same language for uniform treatment.
+ BUILDENV= LC_ALL=C PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)'\
CC='$(CC)' CFLAG='$(CFLAG)' \
- AS='$(CC)' ASFLAG='$(CFLAG) -c' \
-+ AS='$(CC)' ASFLAG='$(CFLAG) -c -Wa,--noexecstack' \
++ AS='$(CC)' ASFLAG='$(CFLAG) -c -Wa,--noexecstack' \
AR='$(AR)' NM='$(NM)' RANLIB='$(RANLIB)' \
CROSS_COMPILE='$(CROSS_COMPILE)' \
PERL='$(PERL)' ENGDIRS='$(ENGDIRS)' \
diff --git a/external/openssl/opensslwnt.patch b/external/openssl/opensslwnt.patch
index e033d25f602f..2d00736f1317 100644
--- a/external/openssl/opensslwnt.patch
+++ b/external/openssl/opensslwnt.patch
@@ -1,32 +1,39 @@
---- misc/openssl-0.9.8v/crypto/x509v3/v3_pci.c 2007-03-05 01:06:47.000000000 +0100
-+++ build/openssl-0.9.8v/crypto/x509v3/v3_pci.c 2010-03-26 12:04:20.961547300 +0100
+diff -ru openssl.orig/crypto/x509v3/v3_pci.c openssl/crypto/x509v3/v3_pci.c
+--- a/openssl.orig/crypto/x509v3/v3_pci.c 2016-03-01 14:35:05.000000000 +0100
++++ b/openssl/crypto/x509v3/v3_pci.c 2016-03-03 20:27:42.195914432 +0100
@@ -3,7 +3,7 @@
* Contributed to the OpenSSL Project 2004 by Richard Levitte
* (richard at levitte.org)
*/
--/* Copyright (c) 2004 Kungliga Tekniska Högskolan
+-/* Copyright (c) 2004 Kungliga Tekniska Högskolan
+/* Copyright (c) 2004 Kungliga Tekniska Hoegskolan
* (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved.
*
---- misc/openssl-0.9.8v/crypto/x509v3/v3_pcia.c 2004-12-28 01:21:33.000000000 +0100
-+++ build/openssl-0.9.8v/crypto/x509v3/v3_pcia.c 2010-03-26 12:04:20.961547300 +0100
+diff -ru openssl.orig/crypto/x509v3/v3_pcia.c openssl/crypto/x509v3/v3_pcia.c
+--- a/openssl.orig/crypto/x509v3/v3_pcia.c 2016-03-01 14:35:05.000000000 +0100
++++ b/openssl/crypto/x509v3/v3_pcia.c 2016-03-03 20:27:56.495913984 +0100
@@ -3,7 +3,7 @@
* Contributed to the OpenSSL Project 2004 by Richard Levitte
* (richard at levitte.org)
*/
--/* Copyright (c) 2004 Kungliga Tekniska Högskolan
+-/* Copyright (c) 2004 Kungliga Tekniska Högskolan
+/* Copyright (c) 2004 Kungliga Tekniska Hoegskolan
* (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved.
*
---- misc/openssl-0.9.8v/ms/do_ms.bat 2009-07-28 14:51:19.000000000 +0200
-+++ build/openssl-0.9.8v/ms/do_ms.bat 2010-03-26 12:19:19.399047300 +0100
+diff -ru openssl.orig/ms/do_ms.bat openssl/ms/do_ms.bat
+--- a/openssl.orig/ms/do_ms.bat 2015-01-15 15:43:14.000000000 +0100
++++ b/openssl/ms/do_ms.bat 2016-03-03 20:31:09.355907935 +0100
@@ -1,11 +1,11 @@
-perl util\mkfiles.pl >MINFO
-perl util\mk1mf.pl no-asm VC-WIN32 >ms\nt.mak
-perl util\mk1mf.pl dll no-asm VC-WIN32 >ms\ntdll.mak
+-if x%OSVERSION% == x goto skipce
+-perl util\mk1mf.pl no-asm VC-CE >ms\ce.mak
+-perl util\mk1mf.pl dll no-asm VC-CE >ms\cedll.mak
+-:skipce
+%1 util\mkfiles.pl >MINFO
+if %2 == VC-WIN32 goto not64a
+perl ms\uplink.pl win64a > ms\uptable.asm
@@ -34,17 +41,14 @@
+:not64a
+%1 util\mk1mf.pl no-asm %2 >ms\nt.mak
+%1 util\mk1mf.pl dll no-asm %2 >ms\ntdll.mak
--if x%OSVERSION% == x goto skipce
--perl util\mk1mf.pl no-asm VC-CE >ms\ce.mak
--perl util\mk1mf.pl dll no-asm VC-CE >ms\cedll.mak
--:skipce
-perl util\mkdef.pl 32 libeay > ms\libeay32.def
-perl util\mkdef.pl 32 ssleay > ms\ssleay32.def
+%1 util\mkdef.pl 32 libeay > ms\libeay32.def
+%1 util\mkdef.pl 32 ssleay > ms\ssleay32.def
---- misc/openssl-0.9.8v/util/mk1mf.pl 2009-09-20 14:46:42.000000000 +0200
-+++ build/openssl-0.9.8v/util/mk1mf.pl 2010-03-26 12:04:20.977172300 +0100
+diff -ru openssl.orig/util/mk1mf.pl openssl/util/mk1mf.pl
+--- a/openssl.orig/util/mk1mf.pl 2016-03-03 20:22:21.043924505 +0100
++++ b/openssl/util/mk1mf.pl 2016-03-03 20:34:45.015901171 +0100
@@ -163,7 +163,7 @@
$inc_def="outinc";
$tmp_def="tmp";
@@ -54,8 +58,8 @@
$mkdir="-mkdir" unless defined $mkdir;
($ssl,$crypto)=("ssl","crypto");
-@@ -343,6 +343,11 @@
- chop;
+@@ -347,6 +347,11 @@
+ s/\s*$//; # was chop, didn't work in mixture of perls for Windows...
($key,$val)=/^([^=]+)=(.*)/;
+
@@ -66,7 +70,7 @@
if ($key eq "RELATIVE_DIRECTORY")
{
if ($lib ne "")
-@@ -469,7 +474,7 @@
+@@ -473,7 +478,7 @@
# Set your compiler options
PLATFORM=$platform
CC=$bin_dir${cc}
@@ -75,16 +79,16 @@
APP_CFLAG=$app_cflag
LIB_CFLAG=$lib_cflag
SHLIB_CFLAG=$shl_cflag
-@@ -484,7 +489,7 @@
+@@ -488,7 +493,7 @@
- LINK=$link
+ LINK_CMD=$link
LFLAGS=$lflags
-RSC=$rsc
+RSC=$rsc \$(SOLARINC)
# The output directory for everything interesting
OUT_D=$out_dir
-@@ -665,7 +670,7 @@
+@@ -669,7 +674,7 @@
printf OUT <<EOF;
#ifdef $platform_cpp_symbol
/* auto-generated/updated by util/mk1mf.pl for crypto/cversion.c */
@@ -93,8 +97,9 @@
#define PLATFORM "$platform"
EOF
printf OUT " #define DATE \"%s\"\n", scalar gmtime();
---- misc/openssl-0.9.8v/util/pl/VC-32.pl 2010-02-04 02:10:24.000000000 +0100
-+++ build/openssl-0.9.8v/util/pl/VC-32.pl 2010-03-26 12:04:20.977172300 +0100
+diff -ru openssl.orig/util/pl/VC-32.pl openssl/util/pl/VC-32.pl
+--- a/openssl.orig/util/pl/VC-32.pl 2016-03-01 14:35:53.000000000 +0100
++++ b/openssl/util/pl/VC-32.pl 2016-03-03 21:15:14.083824986 +0100
@@ -30,7 +30,7 @@
my $ff = "";
@@ -104,6 +109,15 @@
if ($FLAVOR =~ /WIN64/)
{
# Note that we currently don't have /WX on Win64! There is a lot of
+@@ -48,7 +48,7 @@
+ my $f = $shlib || $fips ?' /MD':' /MT';
+ $opt_cflags=$f.' /Ox';
+ $dbg_cflags=$f.'d /Od -DDEBUG -D_DEBUG';
+- $lflags="/nologo /subsystem:console /opt:ref";
++ $lflags="/nologo /subsystem:console,5.02 /opt:ref";
+
+ *::perlasm_compile_target = sub {
+ my ($target,$source,$bname)=@_;
@@ -114,7 +114,7 @@
}
@@ -132,9 +146,10 @@
$ff = "/fixed";
- $opt_cflags=$f.' /Ox /O2 /Ob2';
- $dbg_cflags=$f.'d /Od -DDEBUG -D_DEBUG';
+- $lflags="/nologo /subsystem:console /opt:ref";
++ $lflags="/nologo /subsystem:console,5.01 /opt:ref";
+ $opt_cflags=$f.' -Ox -O2 -Ob2';
+ $dbg_cflags=$f.'d -Od -DDEBUG -D_DEBUG';
- $lflags="/nologo /subsystem:console /opt:ref";
}
-$lib_cflag='/Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib
+$lib_cflag='-Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib
@@ -150,8 +165,9 @@
# EXE linking stuff
$link="link";
---- build/openssl-0.9.8v/ms/uplink.c
-+++ build/openssl-0.9.8v/ms/uplink.c
+diff -ru openssl.orig/ms/uplink.c openssl/ms/uplink.c
+--- a/openssl.orig/ms/uplink.c 2015-03-19 15:02:02.000000000 +0100
++++ b/openssl/ms/uplink.c 2016-03-03 20:39:19.403892565 +0100
@@ -1,5 +1,6 @@
#if (defined(_WIN64) || defined(_WIN32_WCE)) && !defined(UNICODE)
# define UNICODE
commit 5a607ab52498bc731f7ffe15d6ceeee0de0d9760
Author: Caolán McNamara <caolanm at redhat.com>
Date: Tue Apr 7 11:51:50 2015 +0100
upgrade to openssl-1.0.2a
and de-ifdef-per-platform the patch makefile so an upgrade attempt on one
platform tests the patchs applying on all platforms
ubsan.patch.0 was effectively applied upstream while need
to add http://rt.openssl.org/Ticket/Display.html?id=3650 to build
under windows
Change-Id: Ieffd9bc3dd861a94a083d8b6b8d4117bba7f527c
Reviewed-on: https://gerrit.libreoffice.org/15183
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
Tested-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/external/openssl/UnpackedTarball_openssl.mk b/external/openssl/UnpackedTarball_openssl.mk
index eb521bc196b9..d36aba5ebdd0 100644
--- a/external/openssl/UnpackedTarball_openssl.mk
+++ b/external/openssl/UnpackedTarball_openssl.mk
@@ -22,33 +22,13 @@ $(eval $(call gb_UnpackedTarball_set_pre_action,openssl,\
endif
$(eval $(call gb_UnpackedTarball_add_patches,openssl,\
- external/openssl/CVE-2013-6449.patch \
- external/openssl/CVE-2013-6450.patch \
- external/openssl/CVE-2013-4353.patch \
- external/openssl/CVE-2014-0160.patch \
- external/openssl/CVE-2010-5298.patch \
- external/openssl/CVE-2014-0195.patch \
- external/openssl/CVE-2014-0198.patch \
- external/openssl/CVE-2014-0221.patch \
- external/openssl/CVE-2014-0224.patch \
- external/openssl/CVE-2014-3470.patch \
- external/openssl/CVE-2014-3505.patch \
- external/openssl/CVE-2014-3506.patch \
- external/openssl/CVE-2014-3507.patch \
- external/openssl/CVE-2014-3508.patch \
- external/openssl/CVE-2014-3509.patch \
- external/openssl/CVE-2014-3510.patch \
- external/openssl/CVE-2014-3511.patch \
- external/openssl/CVE-2014-3513.patch \
- external/openssl/CVE-2014-3567.patch \
- external/openssl/CVE-2014-3566.patch \
- $(if $(filter LINUX FREEBSD ANDROID,$(OS)),external/openssl/openssllnx.patch) \
- $(if $(filter WNTGCC,$(OS)$(COM)),external/openssl/opensslmingw.patch) \
- $(if $(filter MSC,$(COM)),external/openssl/opensslwnt.patch) \
- $(if $(filter MSC,$(COM)),external/openssl/openssl-1.0.1g-msvc2012-winxp.patch.1) \
- $(if $(filter MSC,$(COM)),external/openssl/openssl-1.0.1h-win64.patch.1) \
- $(if $(filter SOLARIS,$(OS)),external/openssl/opensslsol.patch) \
- $(if $(filter IOS,$(OS)),external/openssl/opensslios.patch) \
+ external/openssl/openssllnx.patch \
+ external/openssl/opensslwnt.patch \
+ external/openssl/openssl-1.0.1g-msvc2012-winxp.patch.1 \
+ external/openssl/openssl-1.0.1h-win64.patch.1 \
+ external/openssl/opensslsol.patch \
+ external/openssl/opensslios.patch \
+ external/openssl/openssl-3650-masm.patch.1 \
))
# vim: set noet sw=4 ts=4:
diff --git a/external/openssl/openssl-1.0.1g-msvc2012-winxp.patch.1 b/external/openssl/openssl-1.0.1g-msvc2012-winxp.patch.1
index 611ffbcd67f3..de9e6fc09f4a 100644
--- a/external/openssl/openssl-1.0.1g-msvc2012-winxp.patch.1
+++ b/external/openssl/openssl-1.0.1g-msvc2012-winxp.patch.1
@@ -1,7 +1,7 @@
--- openssl.org/util/pl/VC-32.pl 2014-05-18 23:41:39.336594400 +0200
+++ openssl/util/pl/VC-32.pl 2014-05-18 23:47:40.055279300 +0200
-@@ -49,7 +49,7 @@
- $lib_cflag='/Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib
+@@ -48,7 +48,7 @@
+ my $f = $shlib || $fips ?' /MD':' /MT';
$opt_cflags=$f.' /Ox';
$dbg_cflags=$f.'d /Od -DDEBUG -D_DEBUG';
- $lflags="/nologo /subsystem:console /opt:ref";
@@ -9,12 +9,12 @@
*::perlasm_compile_target = sub {
my ($target,$source,$bname)=@_;
-@@ -131,7 +131,7 @@
+@@ -135,7 +135,7 @@
$ff = "/fixed";
$opt_cflags=$f.' -Ox -O2 -Ob2';
$dbg_cflags=$f.'d -Od -DDEBUG -D_DEBUG';
- $lflags="/nologo /subsystem:console /opt:ref";
+ $lflags="/nologo /subsystem:console,5.01 /opt:ref";
}
+ $lib_cflag='-Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib
$mlflags='';
-
diff --git a/external/openssl/openssl-3650-masm.patch.1 b/external/openssl/openssl-3650-masm.patch.1
new file mode 100644
index 000000000000..97f1eb6446c3
--- /dev/null
+++ b/external/openssl/openssl-3650-masm.patch.1
@@ -0,0 +1,35 @@
+diff --git a/crypto/perlasm/x86masm.pl b/crypto/perlasm/x86masm.pl
+index 1741342..917d0f8 100644
+--- a/crypto/perlasm/x86masm.pl
++++ b/crypto/perlasm/x86masm.pl
+@@ -18,10 +18,10 @@ sub ::generic
+
+ if ($opcode =~ /lea/ && @arg[1] =~ s/.*PTR\s+(\(.*\))$/OFFSET $1/) # no []
+ { $opcode="mov"; }
+- elsif ($opcode !~ /movq/)
++ elsif ($opcode !~ /mov[dq]$/)
+ { # fix xmm references
+- $arg[0] =~ s/\b[A-Z]+WORD\s+PTR/XMMWORD PTR/i if ($arg[1]=~/\bxmm[0-7]\b/i);
+- $arg[1] =~ s/\b[A-Z]+WORD\s+PTR/XMMWORD PTR/i if ($arg[0]=~/\bxmm[0-7]\b/i);
++ $arg[0] =~ s/\b[A-Z]+WORD\s+PTR/XMMWORD PTR/i if ($arg[-1]=~/\bxmm[0-7]\b/i);
++ $arg[-1] =~ s/\b[A-Z]+WORD\s+PTR/XMMWORD PTR/i if ($arg[0]=~/\bxmm[0-7]\b/i);
+ }
+
+ &::emit($opcode, at arg);
+@@ -160,13 +160,13 @@ sub ::public_label
+ { push(@out,"PUBLIC\t".&::LABEL($_[0],$nmdecor.$_[0])."\n"); }
+
+ sub ::data_byte
+-{ push(@out,("DB\t").join(',', at _)."\n"); }
++{ push(@out,("DB\t").join(',',splice(@_,0,16))."\n") while(@_); }
+
+ sub ::data_short
+-{ push(@out,("DW\t").join(',', at _)."\n"); }
++{ push(@out,("DW\t").join(',',splice(@_,0,8))."\n") while(@_); }
+
+ sub ::data_word
+-{ push(@out,("DD\t").join(',', at _)."\n"); }
++{ push(@out,("DD\t").join(',',splice(@_,0,4))."\n") while(@_); }
+
+ sub ::align
+ { push(@out,"ALIGN\t$_[0]\n"); }
diff --git a/external/openssl/opensslmingw.patch b/external/openssl/opensslmingw.patch
deleted file mode 100644
index e0dc96029d6b..000000000000
--- a/external/openssl/opensslmingw.patch
+++ /dev/null
@@ -1,109 +0,0 @@
---- misc/openssl-0.9.8v/Makefile.shared 2008-09-17 17:56:40.000000000 +0200
-+++ misc/build/openssl-0.9.8v/Makefile.shared 2009-03-30 11:52:53.684538000 +0200
-@@ -254,13 +254,17 @@
- base=-Wl,--enable-auto-image-base; \
- if expr $(PLATFORM) : 'mingw' > /dev/null; then \
- SHLIB=$(LIBNAME)eay32; \
-- base=; [ $(LIBNAME) = "crypto" ] && base=-Wl,--image-base,0x63000000; \
-+ base=; \
-+ if test $(LIBNAME) = "crypto"; then \
-+ SHLIB=libeay32; \
-+ base=-Wl,--image-base,0x63000000; \
-+ fi; \
- fi; \
- SHLIB_SUFFIX=.dll; \
-- SHLIB_SOVER=-$(LIBVERSION); \
-+ SHLIB_SOVER=; \
- ALLSYMSFLAGS='-Wl,--whole-archive'; \
- NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
-- SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a"; \
-+ SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base -Wl,-Bsymbolic -Wl,--export-all-symbols -Wl,--out-implib,lib$(LIBNAME).dll.a"; \
- [ -f apps/$$SHLIB$$SHLIB_SUFFIX ] && rm apps/$$SHLIB$$SHLIB_SUFFIX; \
- [ -f test/$$SHLIB$$SHLIB_SUFFIX ] && rm test/$$SHLIB$$SHLIB_SUFFIX; \
- $(LINK_SO_A) || exit 1; \
---- misc/openssl-0.9.8v/e_os2.h 2005-12-19 03:57:07.000000000 +0900
-+++ misc/build/openssl-0.9.8v/e_os2.h 2009-04-04 23:07:15.324250000 +0900
-@@ -264,7 +264,7 @@
- # define OPENSSL_IMPLEMENT_GLOBAL(type,name) \
- extern type _hide_##name; \
- type *_shadow_##name(void) { return &_hide_##name; } \
-- static type _hide_##name
-+ type _hide_##name
- # define OPENSSL_DECLARE_GLOBAL(type,name) type *_shadow_##name(void)
- # define OPENSSL_GLOBAL_REF(name) (*(_shadow_##name()))
- #else
---- misc/openssl-0.9.8v/ms/mingw32.bat 2006-05-05 15:19:32.000000000 +0200
-+++ misc/build/openssl-0.9.8v/ms/mingw32.bat 2009-03-30 11:54:10.000000000 +0200
-@@ -79,15 +79,41 @@
- rem copy ms\tlhelp32.h outinc
-
- echo Building the libraries
--mingw32-make -f ms/mingw32a.mak
-+make -f ms/mingw32a.mak
- if errorlevel 1 goto end
-
- echo Generating the DLLs and input libraries
--dllwrap --dllname libeay32.dll --output-lib out/libeay32.a --def ms/libeay32.def out/libcrypto.a -lwsock32 -lgdi32
-+mv out/libcrypto.a out/libcrypto_static.a
-+mv out/libssl.a out/libssl_static.a
-+dlltool --dllname libeay32.dll --output-lib out/libcrypto.a --input-def ms/libeay32.def
- if errorlevel 1 goto end
--dllwrap --dllname libssl32.dll --output-lib out/libssl32.a --def ms/ssleay32.def out/libssl.a out/libeay32.a
-+gcc --shared --enable-pseudo-reloc -Wl,-Map,out/libeay32.map ms/libeay32.def -o out/libeay32.dll out/libcrypto_static.a -lwsock32 -lgdi32
- if errorlevel 1 goto end
-+dlltool --dllname ssleay32.dll --output-lib out/libssl.a --input-def ms/ssleay32.def
-+if errorlevel 1 goto end
-+if "%MINGW_SHARED_GXXLIB%"=="YES" goto shared_gxxlib
-+if "%MINGW_SHARED_GCCLIB%"=="YES" goto shared_gcclib
-+gcc --shared --enable-pseudo-reloc -Wl,-Map,out/libeay32.map ms/libeay32.def -o out/libeay32.dll out/libcrypto_static.a -lwsock32 -lgdi32
-+if errorlevel 1 goto end
-+gcc --shared --enable-pseudo-reloc -Wl,-Map,out/ssleay32.map -Lout ms/ssleay32.def -o out/ssleay32.dll out/libssl_static.a -lcrypto
-+if errorlevel 1 goto end
-+goto finished
-+
-+:shared_gcclib
-+gcc --shared -shared-libgcc --enable-pseudo-reloc -Wl,-Map,out/libeay32.map ms/libeay32.def -o out/libeay32.dll out/libcrypto_static.a -lwsock32 -lgdi32
-+if errorlevel 1 goto end
-+gcc --shared -shared-libgcc --enable-pseudo-reloc -Wl,-Map,out/ssleay32.map -Lout ms/ssleay32.def -o out/ssleay32.dll out/libssl_static.a -lcrypto
-+if errorlevel 1 goto end
-+goto finished
-+
-+:shared_gxxlib
-+gcc --shared -shared-libgcc --enable-pseudo-reloc -Wl,-Map,out/libeay32.map ms/libeay32.def -o out/libeay32.dll out/libcrypto_static.a -lwsock32 -lgdi32 %MINGW_SHARED_LIBSTDSPP%
-+if errorlevel 1 goto end
-+gcc --shared -shared-libgcc --enable-pseudo-reloc -Wl,-Map,out/ssleay32.map -Lout ms/ssleay32.def -o out/ssleay32.dll out/libssl_static.a -lcrypto %MINGW_SHARED_LIBSTDSPP%
-+if errorlevel 1 goto end
-+goto finished
-
-+:finished
- echo Done compiling OpenSSL
-
- :end
---- misc/openssl-0.9.8v/util/pl/Mingw32.pl 2006-05-05 15:19:34.000000000 +0200
-+++ misc/build/openssl-0.9.8v/util/pl/Mingw32.pl 2009-03-30 11:55:04.000000000 +0200
-@@ -6,11 +6,11 @@
- $o='/';
- $cp='cp';
- $rm='rm -f';
--$mkdir='gmkdir';
-+#$mkdir='gmkdir';
-
--$o='\\';
--$cp='copy';
--$rm='del';
-+#$o='\\';
-+#$cp='copy';
-+#$rm='del';
- $mkdir='mkdir';
-
- # C compiler stuff
-@@ -87,7 +87,8 @@
- ($Name=$name) =~ tr/a-z/A-Z/;
-
- $ret.="$target: \$(${Name}OBJ)\n";
-- $ret.="\tif exist $target \$(RM) $target\n";
-+ $ret.="\t\$(RM) $target\n";
-+# $ret.="\tif exist $target \$(RM) $target\n";
- $ret.="\t\$(MKLIB) $target \$(${Name}OBJ)\n";
- $ret.="\t\$(RANLIB) $target\n\n";
- }
diff --git a/external/openssl/opensslsol.patch b/external/openssl/opensslsol.patch
index a22dc05cee39..ef70130aab9b 100644
--- a/external/openssl/opensslsol.patch
+++ b/external/openssl/opensslsol.patch
@@ -1,81 +1,33 @@
--- misc/openssl-0.9.8v/Configure Mon Nov 9 15:14:26 2009
+++ build/openssl-0.9.8v/Configure Fri Mar 26 16:01:32 2010
-@@ -212,8 +212,8 @@
- "solaris64-x86_64-gcc","gcc:-m64 -O3 -Wall -DL_ENDIAN -DMD32_REG_T=int::-D_REENTRANT::-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:dlfcn:solaris-shared:-fPIC:-m64 -shared -static-libgcc:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+@@ -228,8 +228,8 @@
+ "solaris64-x86_64-gcc","gcc:-m64 -O3 -Wall -DL_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:solaris-shared:-fPIC:-m64 -shared -static-libgcc:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/64",
#### Solaris x86 with Sun C setups
--"solaris-x86-cc","cc:-fast -O -Xa::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
--"solaris64-x86_64-cc","cc:-fast -xarch=amd64 -xstrconst -Xa -DL_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:dlfcn:solaris-shared:-KPIC:-xarch=amd64 -G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"solaris-x86-cc","cc:-O -Xa::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"solaris64-x86_64-cc","cc:-xarch=amd64 -xstrconst -Xa -DL_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL:${x86_64_asm}:dlfcn:solaris-shared:-KPIC:-xarch=amd64 -G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+-"solaris-x86-cc","cc:-fast -xarch=generic -O -Xa::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+-"solaris64-x86_64-cc","cc:-fast -xarch=amd64 -xstrconst -Xa -DL_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:solaris-shared:-KPIC:-xarch=amd64 -G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/64",
++"solaris-x86-cc","cc:-xarch=generic -O -Xa::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"solaris64-x86_64-cc","cc:-xarch=amd64 -xstrconst -Xa -DL_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:solaris-shared:-KPIC:-xarch=amd64 -G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/64",
#### SPARC Solaris with GNU C setups
"solaris-sparcv7-gcc","gcc:-O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
--- misc/openssl-0.9.8v/Makefile.shared Wed Sep 17 17:56:40 2008
+++ build/openssl-0.9.8v/Makefile.shared Fri Mar 26 16:04:41 2010
-@@ -93,7 +93,7 @@
+@@ -95,7 +95,7 @@
LDCMD="$${LDCMD:-$(CC)}"; LDFLAGS="$${LDFLAGS:-$(CFLAGS)}"; \
- LIBPATH=`for x in $$LIBDEPS; do if echo $$x | grep '^ *-L' > /dev/null 2>&1; then echo $$x | sed -e 's/^ *-L//'; fi; done | uniq`; \
+ LIBPATH=`for x in $$LIBDEPS; do echo $$x; done | sed -e 's/^ *-L//;t' -e d | uniq`; \
LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \
- LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \
+ LD_LIBRARY_PATH=$$LD_LIBRARY_PATH \
$${LDCMD} $${LDFLAGS} -o $${APPNAME:=$(APPNAME)} $(OBJECTS) $${LIBDEPS} )
LINK_SO= \
-@@ -103,7 +103,7 @@
+@@ -105,7 +105,7 @@
SHAREDFLAGS="$${SHAREDFLAGS:-$(CFLAGS) $(SHARED_LDFLAGS)}"; \
- LIBPATH=`for x in $$LIBDEPS; do if echo $$x | grep '^ *-L' > /dev/null 2>&1; then echo $$x | sed -e 's/^ *-L//'; fi; done | uniq`; \
+ LIBPATH=`for x in $$LIBDEPS; do echo $$x; done | sed -e 's/^ *-L//;t' -e d | uniq`; \
LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \
- LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \
+ LD_LIBRARY_PATH=$$LD_LIBRARY_PATH \
$${SHAREDCMD} $${SHAREDFLAGS} \
-o $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX \
$$ALLSYMSFLAGS $$SHOBJECTS $$NOALLSYMSFLAGS $$LIBDEPS \
---- misc/openssl-0.9.8v/config Tue Mar 9 18:08:24 2010
-+++ build/openssl-0.9.8v/config Fri Mar 26 16:07:55 2010
-@@ -399,28 +399,25 @@
- # this is where the translation occurs into SSLeay terms
- # ---------------------------------------------------------------------------
-
--GCCVER=`(gcc -dumpversion) 2>/dev/null`
--if [ "$GCCVER" != "" ]; then
-- # then strip off whatever prefix egcs prepends the number with...
-- # Hopefully, this will work for any future prefixes as well.
-- GCCVER=`echo $GCCVER | LC_ALL=C sed 's/^[a-zA-Z]*\-//'`
-- # Since gcc 3.1 gcc --version behaviour has changed. gcc -dumpversion
-- # does give us what we want though, so we use that. We just just the
-- # major and minor version numbers.
-- # peak single digit before and after first dot, e.g. 2.95.1 gives 29
-- GCCVER=`echo $GCCVER | sed 's/\([0-9]\)\.\([0-9]\).*/\1\2/'`
-+if [ -z "$CC" ];then
-+ GCCVER=`(gcc -dumpversion) 2>/dev/null`
-+ if [ "$GCCVER" != "" ]; then
-+ CC=gcc
-+ # then strip off whatever prefix egcs prepends the number with...
-+ # Hopefully, this will work for any future prefixes as well.
-+ GCCVER=`echo $GCCVER | LC_ALL=C sed 's/^[a-zA-Z]*\-//'`
-+ # Since gcc 3.1 gcc --version behaviour has changed. gcc -dumpversion
-+ # does give us what we want though, so we use that. We just just the
-+ # major and minor version numbers.
-+ # peak single digit before and after first dot, e.g. 2.95.1 gives 29
-+ GCCVER=`echo $GCCVER | sed 's/\([0-9]\)\.\([0-9]\).*/\1\2/'`
-+ else
-+ CC=cc
-+ fi
-+else
-+ CC=`echo $CC | sed 's/^[^ ]*\/\(..\).*/\1/'`
- fi
-
--# Only set CC if not supplied already
--if [ -z "$CC" ]; then
--# figure out if gcc is available and if so we use it otherwise
--# we fallback to whatever cc does on the system
-- if [ "$GCCVER" != "" ]; then
-- CC=gcc
-- else
-- CC=cc
-- fi
--fi
- GCCVER=${GCCVER:-0}
- if [ "$SYSTEM" = "HP-UX" ];then
- # By default gcc is a ILP32 compiler (with long long == 64).
diff --git a/external/openssl/opensslwnt.patch b/external/openssl/opensslwnt.patch
index 5be9c958a37a..e033d25f602f 100644
--- a/external/openssl/opensslwnt.patch
+++ b/external/openssl/opensslwnt.patch
@@ -1,8 +1,8 @@
--- misc/openssl-0.9.8v/crypto/x509v3/v3_pci.c 2007-03-05 01:06:47.000000000 +0100
+++ build/openssl-0.9.8v/crypto/x509v3/v3_pci.c 2010-03-26 12:04:20.961547300 +0100
-@@ -2,7 +2,7 @@
- /* Contributed to the OpenSSL Project 2004
- * by Richard Levitte (richard at levitte.org)
+@@ -3,7 +3,7 @@
+ * Contributed to the OpenSSL Project 2004 by Richard Levitte
+ * (richard at levitte.org)
*/
-/* Copyright (c) 2004 Kungliga Tekniska Högskolan
+/* Copyright (c) 2004 Kungliga Tekniska Hoegskolan
@@ -11,9 +11,9 @@
*
--- misc/openssl-0.9.8v/crypto/x509v3/v3_pcia.c 2004-12-28 01:21:33.000000000 +0100
+++ build/openssl-0.9.8v/crypto/x509v3/v3_pcia.c 2010-03-26 12:04:20.961547300 +0100
-@@ -2,7 +2,7 @@
- /* Contributed to the OpenSSL Project 2004
- * by Richard Levitte (richard at levitte.org)
+@@ -3,7 +3,7 @@
+ * Contributed to the OpenSSL Project 2004 by Richard Levitte
+ * (richard at levitte.org)
*/
-/* Copyright (c) 2004 Kungliga Tekniska Högskolan
+/* Copyright (c) 2004 Kungliga Tekniska Hoegskolan
@@ -45,7 +45,7 @@
+%1 util\mkdef.pl 32 ssleay > ms\ssleay32.def
--- misc/openssl-0.9.8v/util/mk1mf.pl 2009-09-20 14:46:42.000000000 +0200
+++ build/openssl-0.9.8v/util/mk1mf.pl 2010-03-26 12:04:20.977172300 +0100
-@@ -128,7 +128,7 @@
+@@ -163,7 +163,7 @@
$inc_def="outinc";
$tmp_def="tmp";
@@ -54,7 +54,7 @@
$mkdir="-mkdir" unless defined $mkdir;
($ssl,$crypto)=("ssl","crypto");
-@@ -290,6 +290,11 @@
+@@ -343,6 +343,11 @@
chop;
($key,$val)=/^([^=]+)=(.*)/;
@@ -66,7 +66,7 @@
if ($key eq "RELATIVE_DIRECTORY")
{
if ($lib ne "")
-@@ -529,7 +529,7 @@
+@@ -469,7 +474,7 @@
# Set your compiler options
PLATFORM=$platform
CC=$bin_dir${cc}
@@ -75,27 +75,27 @@
APP_CFLAG=$app_cflag
LIB_CFLAG=$lib_cflag
SHLIB_CFLAG=$shl_cflag
-@@ -544,7 +544,7 @@
+@@ -484,7 +489,7 @@
LINK=$link
LFLAGS=$lflags
-RSC=$rsc
+RSC=$rsc \$(SOLARINC)
- # The output directory for everything intersting
+ # The output directory for everything interesting
OUT_D=$out_dir
-@@ -730,7 +735,7 @@
+@@ -665,7 +670,7 @@
printf OUT <<EOF;
#ifdef $platform_cpp_symbol
/* auto-generated/updated by util/mk1mf.pl for crypto/cversion.c */
-- #define CFLAGS "$cc $cflags"
-+ #define CFLAGS "$cflags"
+- #define CFLAGS "compiler: $cc $cflags"
++ #define CFLAGS "compiler: $cflags"
#define PLATFORM "$platform"
EOF
printf OUT " #define DATE \"%s\"\n", scalar gmtime();
--- misc/openssl-0.9.8v/util/pl/VC-32.pl 2010-02-04 02:10:24.000000000 +0100
+++ build/openssl-0.9.8v/util/pl/VC-32.pl 2010-03-26 12:04:20.977172300 +0100
-@@ -32,7 +32,7 @@
+@@ -30,7 +30,7 @@
my $ff = "";
# C compiler stuff
@@ -104,29 +104,31 @@
if ($FLAVOR =~ /WIN64/)
{
# Note that we currently don't have /WX on Win64! There is a lot of
-@@ -103,22 +103,22 @@
+@@ -114,7 +114,7 @@
}
- $cc='$(CC)';
+ $cc=($ENV{CC} or "cl");
- $base_cflags=' /W3 /WX /GF /Gy /nologo -DUNICODE -D_UNICODE -DOPENSSL_SYSNAME_WINCE -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -DNO_CHMOD -DOPENSSL_SMALL_FOOTPRINT';
+ $base_cflags=' -W3 -GF -Gy -nologo -DUNICODE -D_UNICODE -DOPENSSL_SYSNAME_WINCE -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -DNO_CHMOD -DOPENSSL_SMALL_FOOTPRINT';
$base_cflags.=" $wcecdefs";
$base_cflags.=' -I$(WCECOMPAT)/include' if (defined($ENV{'WCECOMPAT'}));
$base_cflags.=' -I$(PORTSDK_LIBPATH)/../../include' if (defined($ENV{'PORTSDK_LIBPATH'}));
-- $opt_cflags=' /MC /O1i'; # optimize for space, but with intrinsics...
-- $dbg_cflags=' /MC /Od -DDEBUG -D_DEBUG';
-+ $opt_cflags=' -MC -O1i'; # optimize for space, but with intrinsics...
-+ $dbg_cflags=' -MC -Od -DDEBUG -D_DEBUG';
+@@ -123,20 +123,21 @@
+ } else {
+ $base_cflags.=' /MC';
+ }
+- $opt_cflags=' /O1i'; # optimize for space, but with intrinsics...
+- $dbg_cflags=' /Od -DDEBUG -D_DEBUG';
++ $opt_cflags=' -O1i'; # optimize for space, but with intrinsics...
++ $dbg_cflags=' -Od -DDEBUG -D_DEBUG';
++
$lflags="/nologo /opt:ref $wcelflag";
}
else # Win32
{
-- $base_cflags= " $mf_cflag";
-+ $base_cflags= " $mf_cflag";
+ $base_cflags= " $mf_cflag";
- my $f = $shlib || $fips ?' /MD':' /MT';
-- $lib_cflag='/Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib
+ my $f = $shlib || $fips ? (($ENV{MSVC_USE_DEBUG_RUNTIME} eq "TRUE") ? ' -MDd' : ' -MD' ):' -MT';
-+ $lib_cflag='-Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib
$ff = "/fixed";
- $opt_cflags=$f.' /Ox /O2 /Ob2';
- $dbg_cflags=$f.'d /Od -DDEBUG -D_DEBUG';
@@ -134,8 +136,12 @@
+ $dbg_cflags=$f.'d -Od -DDEBUG -D_DEBUG';
$lflags="/nologo /subsystem:console /opt:ref";
}
+-$lib_cflag='/Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib
++$lib_cflag='-Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib
$mlflags='';
-@@ -138,7 +138,7 @@
+
+ $out_def ="out32"; $out_def.="dll" if ($shlib);
+@@ -161,7 +162,7 @@
$obj='.obj';
$asm_suffix='.asm';
@@ -148,8 +154,8 @@
+++ build/openssl-0.9.8v/ms/uplink.c
@@ -1,5 +1,6 @@
#if (defined(_WIN64) || defined(_WIN32_WCE)) && !defined(UNICODE)
- #define UNICODE
-+#define _CRT_NON_CONFORMING_SWPRINTFS
+ # define UNICODE
++# define _CRT_NON_CONFORMING_SWPRINTFS
#endif
#if defined(UNICODE) && !defined(_UNICODE)
- #define _UNICODE
+ # define _UNICODE
commit 7c908cbb75eac06f90bb9516fb021a368957969c
Author: Thomas Arnhold <thomas at arnhold.org>
Date: Sun Aug 10 04:08:27 2014 +0200
win64: make openssl work
fix windows style path separator to unix style, needed for cygwin.
Change-Id: I4de78d6901378644857c28a59467b59ef886f47b
Reviewed-on: https://gerrit.libreoffice.org/10855
Reviewed-by: Thomas Arnhold <thomas at arnhold.org>
Tested-by: Thomas Arnhold <thomas at arnhold.org>
diff --git a/external/openssl/UnpackedTarball_openssl.mk b/external/openssl/UnpackedTarball_openssl.mk
index 23ba0e7fcf16..eb521bc196b9 100644
--- a/external/openssl/UnpackedTarball_openssl.mk
+++ b/external/openssl/UnpackedTarball_openssl.mk
@@ -46,6 +46,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,openssl,\
$(if $(filter WNTGCC,$(OS)$(COM)),external/openssl/opensslmingw.patch) \
$(if $(filter MSC,$(COM)),external/openssl/opensslwnt.patch) \
$(if $(filter MSC,$(COM)),external/openssl/openssl-1.0.1g-msvc2012-winxp.patch.1) \
+ $(if $(filter MSC,$(COM)),external/openssl/openssl-1.0.1h-win64.patch.1) \
$(if $(filter SOLARIS,$(OS)),external/openssl/opensslsol.patch) \
$(if $(filter IOS,$(OS)),external/openssl/opensslios.patch) \
))
diff --git a/external/openssl/openssl-1.0.1h-win64.patch.1 b/external/openssl/openssl-1.0.1h-win64.patch.1
new file mode 100644
index 000000000000..aea914633ebb
--- /dev/null
+++ b/external/openssl/openssl-1.0.1h-win64.patch.1
@@ -0,0 +1,47 @@
+diff --git a/ms/do_win64a.bat b/ms/do_win64a.bat
+index 8768dc6..6772390 100755
+--- a/ms/do_win64a.bat
++++ b/ms/do_win64a.bat
+@@ -1,19 +1,19 @@
+-perl util\mkfiles.pl >MINFO
++perl util/mkfiles.pl >MINFO
+
+ cmd /c "nasm -f win64 -v" >NUL 2>&1
+ if %errorlevel% neq 0 goto ml64
+
+-perl ms\uplink-x86_64.pl nasm > ms\uptable.asm
+-nasm -f win64 -o ms\uptable.obj ms\uptable.asm
++perl ms/uplink-x86_64.pl nasm > ms/uptable.asm
++nasm -f win64 -o ms/uptable.obj ms/uptable.asm
+ goto proceed
+
+ :ml64
+-perl ms\uplink-x86_64.pl masm > ms\uptable.asm
+-ml64 -c -Foms\uptable.obj ms\uptable.asm
++perl ms/uplink-x86_64.pl masm > ms/uptable.asm
++ml64 -c -Foms/uptable.obj ms/uptable.asm
+
+ :proceed
+-perl util\mk1mf.pl VC-WIN64A >ms\nt.mak
+-perl util\mk1mf.pl dll VC-WIN64A >ms\ntdll.mak
++perl util/mk1mf.pl VC-WIN64A >ms/nt.mak
++perl util/mk1mf.pl dll VC-WIN64A >ms/ntdll.mak
+
+-perl util\mkdef.pl 32 libeay > ms\libeay32.def
+-perl util\mkdef.pl 32 ssleay > ms\ssleay32.def
++perl util/mkdef.pl 32 libeay > ms/libeay32.def
++perl util/mkdef.pl 32 ssleay > ms/ssleay32.def
+diff --git a/util/mk1mf.pl b/util/mk1mf.pl
+index 72fa089..d98def1 100755
+--- a/util/mk1mf.pl
++++ b/util/mk1mf.pl
+@@ -233,6 +233,9 @@ else
+ $cflags.=' -DTERMIO';
+ }
+
++# force unix style path separator
++${o} = "/";
++
+ $fipsdir =~ s/\//${o}/g;
+
+ $out_dir=(defined($VARS{'OUT'}))?$VARS{'OUT'}:$out_def.($debug?".dbg":"");
commit eb5618e0455de320308736f0fd567b2bff0b6379
Author: Michael Stahl <mstahl at redhat.com>
Date: Mon Jun 2 23:30:03 2014 +0200
openssl: stop (ab)using fix_end_of_line to break symlinks
Win32 make has problems because the command line gets too long.
Change-Id: I157b7b2b61353b158b1a3f412331e54aafec206c
diff --git a/external/openssl/UnpackedTarball_openssl.mk b/external/openssl/UnpackedTarball_openssl.mk
index 681049f9542e..23ba0e7fcf16 100644
--- a/external/openssl/UnpackedTarball_openssl.mk
+++ b/external/openssl/UnpackedTarball_openssl.mk
@@ -11,84 +11,15 @@ $(eval $(call gb_UnpackedTarball_UnpackedTarball,openssl))
$(eval $(call gb_UnpackedTarball_set_tarball,openssl,$(OPENSSL_TARBALL),,openssl))
-# hack to fix symlinks with MSVC
-$(eval $(call gb_UnpackedTarball_fix_end_of_line,openssl,\
- include/openssl/aes.h \
- include/openssl/asn1.h \
- include/openssl/asn1_mac.h \
- include/openssl/asn1t.h \
- include/openssl/bio.h \
- include/openssl/blowfish.h \
- include/openssl/bn.h \
- include/openssl/buffer.h \
- include/openssl/camellia.h \
- include/openssl/cast.h \
- include/openssl/cmac.h \
- include/openssl/cms.h \
- include/openssl/comp.h \
- include/openssl/conf.h \
- include/openssl/conf_api.h \
- include/openssl/crypto.h \
- include/openssl/des.h \
- include/openssl/des_old.h \
- include/openssl/dh.h \
- include/openssl/dsa.h \
- include/openssl/dso.h \
- include/openssl/dtls1.h \
- include/openssl/e_os2.h \
- include/openssl/ebcdic.h \
- include/openssl/ec.h \
- include/openssl/ecdh.h \
- include/openssl/ecdsa.h \
- include/openssl/engine.h \
- include/openssl/err.h \
- include/openssl/evp.h \
- include/openssl/hmac.h \
- include/openssl/idea.h \
- include/openssl/krb5_asn.h \
- include/openssl/kssl.h \
- include/openssl/lhash.h \
- include/openssl/md4.h \
- include/openssl/md5.h \
- include/openssl/mdc2.h \
- include/openssl/modes.h \
- include/openssl/obj_mac.h \
- include/openssl/objects.h \
- include/openssl/ocsp.h \
- include/openssl/opensslconf.h \
- include/openssl/opensslv.h \
- include/openssl/ossl_typ.h \
- include/openssl/pem.h \
- include/openssl/pem2.h \
- include/openssl/pkcs12.h \
- include/openssl/pkcs7.h \
- include/openssl/pqueue.h \
- include/openssl/rand.h \
- include/openssl/rc2.h \
- include/openssl/rc4.h \
- include/openssl/ripemd.h \
- include/openssl/rsa.h \
- include/openssl/safestack.h \
- include/openssl/seed.h \
- include/openssl/sha.h \
- include/openssl/srp.h \
- include/openssl/srtp.h \
- include/openssl/ssl.h \
- include/openssl/ssl2.h \
- include/openssl/ssl23.h \
- include/openssl/ssl3.h \
- include/openssl/stack.h \
- include/openssl/symhacks.h \
- include/openssl/tls1.h \
- include/openssl/ts.h \
- include/openssl/txt_db.h \
- include/openssl/ui.h \
- include/openssl/ui_compat.h \
- include/openssl/whrlpool.h \
- include/openssl/x509.h \
- include/openssl/x509_vfy.h \
- include/openssl/x509v3.h \
-))
+# break symlinks after extracting tarball
+# note: escape \; because LO patched make 3.82 cuts off the command otherwise
+ifeq ($(OS_FOR_BUILD),WNT)
+$(eval $(call gb_UnpackedTarball_set_pre_action,openssl,\
+ cd include/openssl && \
+ for header in `find . -type l` \; do \
+ cp --remove-destination `readlink $$$$header` $$$$header \; \
+ done && cd -))
+endif
$(eval $(call gb_UnpackedTarball_add_patches,openssl,\
external/openssl/CVE-2013-6449.patch \
commit d1da9c141b0b4f625f7397462bd766f9aabb89f4
Author: Michael Stahl <mstahl at redhat.com>
Date: Tue Apr 8 14:35:38 2014 +0200
openssl: fix WNT patch to apply
Change-Id: I31494d4314557672b7e3c2ff6846663fb9ed981a
diff --git a/external/openssl/opensslwnt.patch b/external/openssl/opensslwnt.patch
index b68e03715f2a..5be9c958a37a 100644
--- a/external/openssl/opensslwnt.patch
+++ b/external/openssl/opensslwnt.patch
@@ -96,7 +96,7 @@
--- misc/openssl-0.9.8v/util/pl/VC-32.pl 2010-02-04 02:10:24.000000000 +0100
+++ build/openssl-0.9.8v/util/pl/VC-32.pl 2010-03-26 12:04:20.977172300 +0100
@@ -32,7 +32,7 @@
- $l_flags =~ s/-L(\S+)/\/libpath:$1/g;
+ my $ff = "";
# C compiler stuff
-$cc='cl';
@@ -104,7 +104,7 @@
if ($FLAVOR =~ /WIN64/)
{
# Note that we currently don't have /WX on Win64! There is a lot of
-@@ -103,21 +103,21 @@
+@@ -103,22 +103,22 @@
}
$cc='$(CC)';
@@ -125,10 +125,11 @@
+ $base_cflags= " $mf_cflag";
- my $f = $shlib || $fips ?' /MD':' /MT';
- $lib_cflag='/Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib
-- $opt_cflags=$f.' /Ox /O2 /Ob2';
-- $dbg_cflags=$f.'d /Od -DDEBUG -D_DEBUG';
+ my $f = $shlib || $fips ? (($ENV{MSVC_USE_DEBUG_RUNTIME} eq "TRUE") ? ' -MDd' : ' -MD' ):' -MT';
+ $lib_cflag='-Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib
+ $ff = "/fixed";
+- $opt_cflags=$f.' /Ox /O2 /Ob2';
+- $dbg_cflags=$f.'d /Od -DDEBUG -D_DEBUG';
+ $opt_cflags=$f.' -Ox -O2 -Ob2';
+ $dbg_cflags=$f.'d -Od -DDEBUG -D_DEBUG';
$lflags="/nologo /subsystem:console /opt:ref";
commit 67aae7bc2aa6909e7d8c1ac684f6e8be0ae80ccc
Author: Thorsten Behrens <Thorsten.Behrens at CIB.de>
Date: Mon Apr 30 14:01:29 2018 +0200
Update graphite to 1.3.6
Change-Id: I4cd07ffd7cd2be94a830c9ecdeedb59950b115bb
diff --git a/download.lst b/download.lst
index c1ed0723601c..f83677a20ba9 100644
--- a/download.lst
+++ b/download.lst
@@ -60,7 +60,7 @@ export FONT_PTSERIF_TARBALL := c3c1a8ba7452950636e871d25020ce0d-pt-serif-font-1.
export FONT_SOURCECODE_TARBALL := 0279a21fab6f245e85a6f85fea54f511-source-code-font-1.009.tar.gz
export FONT_SOURCESANS_TARBALL := 1e9ddfe25ac9577da709d7b2ea36f939-source-sans-font-1.036.tar.gz
export FREETYPE_TARBALL := dbf2caca1d3afd410a29217a9809d397-freetype-2.4.8.tar.bz2
-export GRAPHITE_TARBALL := 28935e208c311761c29983c739db08d8-graphite2-minimal-1.3.5.tgz
+export GRAPHITE_TARBALL := 17df8301bcc459e83f8a8f3aca6183b2-graphite-minimal-1.3.6.tgz
export HSQLDB_TARBALL := 17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip
export HUNSPELL_TARBALL := 3121aaf3e13e5d88dfff13fb4a5f1ab8-hunspell-1.3.2.tar.gz
export HYPHEN_TARBALL := a2f6010987e1c601274ab5d63b72c944-hyphen-2.8.4.tar.gz
commit 6b4e39d603ef8a214067361a1fdc3c55078af119
Author: Thorsten Behrens <Thorsten.Behrens at CIB.de>
Date: Mon Apr 30 13:45:25 2018 +0200
fixup update graphite to 1.3.5
Change-Id: I50c07f8698c06c96bc922845e11e7e7e57b2ca1d
diff --git a/Makefile.fetch b/Makefile.fetch
index 6f246571a538..bb0b02f4ac5e 100644
--- a/Makefile.fetch
+++ b/Makefile.fetch
@@ -81,7 +81,6 @@ $(WORKDIR)/download: $(BUILDDIR)/config_host.mk $(SRCDIR)/download.lst $(SRCDIR)
$(call fetch_Optional,FREEHAND,FREEHAND_TARBALL) \
$(call fetch_Optional,ETONYEK,ETONYEK_TARBALL) \
$(call fetch_Optional,FIREBIRD,FIREBIRD_TARBALL) \
- $(call fetch_Optional,GRAPHITE,GRAPHITE_TARBALL) \
$(call fetch_Optional,HARFBUZZ,HARFBUZZ_TARBALL) \
$(call fetch_Optional,LIBEOT,LIBEOT_TARBALL) \
$(call fetch_Optional,LIBLANGTAG,LANGTAGREG_TARBALL) \
@@ -121,6 +120,7 @@ $(WORKDIR)/download: $(BUILDDIR)/config_host.mk $(SRCDIR)/download.lst $(SRCDIR)
$(call fetch_Optional,MORE_FONTS,$(FONT_SOURCECODE_TARBALL)) \
$(call fetch_Optional,FONTCONFIG,$(FONTCONFIG_TARBALL)) \
$(call fetch_Optional,FREETYPE,$(FREETYPE_TARBALL)) \
+ $(call fetch_Optional,GRAPHITE,$(GRAPHITE_TARBALL)) \
$(GOOGLE_DOCS_EXTENSION_PACK) \
$(call fetch_Optional,HSQLDB,$(HSQLDB_TARBALL)) \
$(call fetch_Optional,HUNSPELL,$(HUNSPELL_TARBALL)) \
diff --git a/download.lst b/download.lst
index fdd5bff22d53..c1ed0723601c 100644
--- a/download.lst
+++ b/download.lst
@@ -20,8 +20,6 @@ FIREBIRD_MD5SUM := 21154d2004e025c8a3666625b0357bb5
export FIREBIRD_TARBALL := Firebird-2.5.2.26540-0.tar.bz2
# FIREBIRD_MD5SUM := b259c2d1c60a03bd104108405ae990a7
# export FIREBIRD_TARBALL := Firebird-3.0-alpha1-20130302.tar.gz
-GRAPHITE_MD5SUM := 2ef839348fe28e3b923bf8cced440227
-export GRAPHITE_TARBALL := graphite2-1.2.4.tgz
HARFBUZZ_MD5SUM := a4a9b548577e2ee22f0887937da5fd6c
export HARFBUZZ_TARBALL := harfbuzz-0.9.23.tar.bz2
LIBATOMIC_OPS_MD5SUM := c0b86562d5aa40761a87134f83e6adcf
diff --git a/vcl/source/glyphs/graphite_layout.cxx b/vcl/source/glyphs/graphite_layout.cxx
index c6c3c7b3dd31..ef76f85172de 100644
--- a/vcl/source/glyphs/graphite_layout.cxx
+++ b/vcl/source/glyphs/graphite_layout.cxx
@@ -701,7 +701,7 @@ unsigned int GraphiteLayout::ScanFwdForChar(int &findChar, bool fallback) const
void GraphiteLayout::ApplyDXArray(ImplLayoutArgs &args, std::vector<int> & rDeltaWidth)
{
- bool bRtl(mnLayoutFlags & SalLayoutFlags::BiDiRtl);
+ bool bRtl(mnLayoutFlags & SAL_LAYOUT_BIDI_RTL);
int startChar = args.mnMinCharPos < mnMinCharPos ? mnMinCharPos : args.mnMinCharPos;
int endChar = args.mnEndCharPos >= mnEndCharPos ? mnEndCharPos - 1 : args.mnEndCharPos;
unsigned int startGi = ScanFwdForChar(startChar, !bRtl);
commit 925ddedc250eeaf1da75d565e42e5c6bf1544dfa
Author: Tomáš Chvátal <tchvatal at suse.com>
Date: Tue Dec 22 15:41:25 2015 +0100
Refresh graphite2.win64.patch.1 to apply using sle11 patch binary.
Change-Id: If43ca99631fab5a3a04e7dead9b694cf52944666
Reviewed-on: https://gerrit.libreoffice.org/20882
Reviewed-by: Michael Stahl <mstahl at redhat.com>
Tested-by: Michael Stahl <mstahl at redhat.com>
(cherry picked from commit 817192b3f55be0b0a4a6e877a3c1ab95d3a4b4cb)
Reviewed-on: https://gerrit.libreoffice.org/22845
Tested-by: Christian Lohmaier <lohmaier+LibreOffice at googlemail.com>
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice at googlemail.com>
diff --git a/external/graphite/graphite2.win64.patch.1 b/external/graphite/graphite2.win64.patch.1
index e7c36c63c21b..4e1172ad8222 100644
--- a/external/graphite/graphite2.win64.patch.1
+++ b/external/graphite/graphite2.win64.patch.1
@@ -1,19 +1,6 @@
-diff -ur graphite.org/src/inc/Main.h graphite/src/inc/Main.h
---- graphite.org/src/inc/Main.h 2015-09-07 20:09:25.572279671 +0700
---- graphite/src/inc/Main.h 2015-09-07 20:09:25.572279671 +0700
-@@ -25,6 +25,9 @@
- of the License or (at your option) any later version.
- */
- #pragma once
-+#ifdef _WIN32
-+#pragma warning(disable: 4510 4610)
-+#endif
-
- #include <cstdlib>
- #include "graphite2/Types.h"
-diff -ur graphite.org/src/inc/json.h graphite/src/inc/json.h
---- graphite.org/src/inc/json.h 2015-02-03 14:49:24.408101900 +0100
-+++ graphite/src/inc/json.h 2015-02-03 14:50:59.697552200 +0100
+diff -urN graphite2-1.3.4.orig/src/inc/json.h graphite2-1.3.4/src/inc/json.h
+--- graphite2-1.3.4.orig/src/inc/json.h 2015-12-22 14:25:46.403566441 +0100
++++ graphite2-1.3.4/src/inc/json.h 2015-12-22 14:26:13.439722846 +0100
@@ -85,6 +85,9 @@
json & operator << (string) throw();
json & operator << (number) throw();
@@ -24,10 +11,24 @@ diff -ur graphite.org/src/inc/json.h graphite/src/inc/json.h
json & operator << (long unsigned int d) throw();
json & operator << (boolean) throw();
json & operator << (_null_t) throw();
-diff -ur graphite.org/src/json.cpp graphite/src/json.cpp
---- graphite.org/src/json.cpp 2015-02-03 14:49:24.409102000 +0100
-+++ graphite/src/json.cpp 2015-02-03 14:50:49.814986900 +0100
-@@ -134,5 +134,8 @@
+diff -urN graphite2-1.3.4.orig/src/inc/Main.h graphite2-1.3.4/src/inc/Main.h
+--- graphite2-1.3.4.orig/src/inc/Main.h 2015-12-22 14:25:46.399566417 +0100
++++ graphite2-1.3.4/src/inc/Main.h 2015-12-22 14:26:13.439722846 +0100
+@@ -25,6 +25,9 @@
+ of the License or (at your option) any later version.
+ */
+ #pragma once
++#ifdef _WIN32
++#pragma warning(disable: 4510 4610)
++#endif
+
+ #include <cstdlib>
+ #include "graphite2/Types.h"
+diff -urN graphite2-1.3.4.orig/src/json.cpp graphite2-1.3.4/src/json.cpp
+--- graphite2-1.3.4.orig/src/json.cpp 2015-12-22 14:25:46.399566417 +0100
++++ graphite2-1.3.4/src/json.cpp 2015-12-22 14:26:13.439722846 +0100
+@@ -133,6 +133,9 @@
+ }
json & json::operator << (json::integer d) throw() { context(seq); fprintf(_stream, "%ld", d); return *this; }
json & json::operator << (long unsigned d) throw() { context(seq); fprintf(_stream, "%ld", d); return *this; }
+#ifdef _WIN64
@@ -36,10 +37,10 @@ diff -ur graphite.org/src/json.cpp graphite/src/json.cpp
json & json::operator << (json::boolean b) throw() { context(seq); fputs(b ? "true" : "false", _stream); return *this; }
json & json::operator << (json::_null_t) throw() { context(seq); fputs("null",_stream); return *this; }
-diff -ur graphite.org/src/Pass.cpp graphite/src/Pass.cpp
---- graphite.org/src/Pass.cpp 2015-02-03 14:49:24.413102200 +0100
-+++ graphite/src/Pass.cpp 2015-02-03 14:50:37.873303900 +0100
-@@ -544,7 +544,7 @@
+diff -urN graphite2-1.3.4.orig/src/Pass.cpp graphite2-1.3.4/src/Pass.cpp
+--- graphite2-1.3.4.orig/src/Pass.cpp 2015-12-22 14:25:46.399566417 +0100
++++ graphite2-1.3.4/src/Pass.cpp 2015-12-22 14:26:13.439722846 +0100
+@@ -554,7 +554,7 @@
if (r->rule->preContext > fsm.slots.context())
continue;
*fsm.dbgout << json::flat << json::object
@@ -48,7 +49,7 @@ diff -ur graphite.org/src/Pass.cpp graphite/src/Pass.cpp
<< "failed" << true
<< "input" << json::flat << json::object
<< "start" << objectid(dslot(&fsm.slots.segment, input_slot(fsm.slots, -r->rule->preContext)))
-@@ -558,7 +558,7 @@
+@@ -568,7 +568,7 @@
void Pass::dumpRuleEventOutput(const FiniteStateMachine & fsm, Machine & m, const Rule & r, Slot * const last_slot) const
{
*fsm.dbgout << json::item << json::flat << json::object
commit d9aeaac9d5b35988f717e072ff0956a7f155fd23
Author: Caolán McNamara <caolanm at redhat.com>
Date: Mon Jun 29 12:26:16 2015 +0200
update graphite to 1.3.5
(cherry picked from commit c64ea526dc71da6e3aad188ac71e58047ed74b5a)
and sync the various upgrade patches together
Change-Id: I3287d51430d7a0901dd8bbf2458b845bcf92a8d2
Reviewed-on: https://gerrit.libreoffice.org/22210
Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
Tested-by: Miklos Vajna <vmiklos at collabora.co.uk>
diff --git a/download.lst b/download.lst
index 542a0f516e64..fdd5bff22d53 100644
--- a/download.lst
+++ b/download.lst
@@ -62,6 +62,7 @@ export FONT_PTSERIF_TARBALL := c3c1a8ba7452950636e871d25020ce0d-pt-serif-font-1.
export FONT_SOURCECODE_TARBALL := 0279a21fab6f245e85a6f85fea54f511-source-code-font-1.009.tar.gz
export FONT_SOURCESANS_TARBALL := 1e9ddfe25ac9577da709d7b2ea36f939-source-sans-font-1.036.tar.gz
export FREETYPE_TARBALL := dbf2caca1d3afd410a29217a9809d397-freetype-2.4.8.tar.bz2
+export GRAPHITE_TARBALL := 28935e208c311761c29983c739db08d8-graphite2-minimal-1.3.5.tgz
export HSQLDB_TARBALL := 17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip
export HUNSPELL_TARBALL := 3121aaf3e13e5d88dfff13fb4a5f1ab8-hunspell-1.3.2.tar.gz
export HYPHEN_TARBALL := a2f6010987e1c601274ab5d63b72c944-hyphen-2.8.4.tar.gz
diff --git a/editeng/source/editeng/impedit3.cxx b/editeng/source/editeng/impedit3.cxx
index a2d92a65311f..34fb23145180 100644
--- a/editeng/source/editeng/impedit3.cxx
+++ b/editeng/source/editeng/impedit3.cxx
@@ -734,6 +734,8 @@ sal_Bool ImpEditEngine::CreateLines( sal_Int32 nPara, sal_uInt32 nStartPosY )
EditLine aSaveLine( *pLine );
SvxFont aTmpFont( pNode->GetCharAttribs().GetDefFont() );
+ ImplInitLayoutMode( GetRefDevice(), nPara, nIndex );
+
sal_Bool bCalcCharPositions = sal_True;
sal_Int32* pBuf = new sal_Int32[ pNode->Len() ];
@@ -1058,6 +1060,8 @@ sal_Bool ImpEditEngine::CreateLines( sal_Int32 nPara, sal_uInt32 nStartPosY )
aTmpFont.SetPhysFont( GetRefDevice() );
ImplInitDigitMode(GetRefDevice(), aTmpFont.GetLanguage());
+ pPortion->SetRightToLeft( GetRightToLeft( nPara, nTmpPos+1 ) );
+
if ( bCalcCharPositions || !pPortion->HasValidSize() )
{
pPortion->GetSize() = aTmpFont.QuickGetTextSize( GetRefDevice(), pParaPortion->GetNode()->GetString(), nTmpPos, pPortion->GetLen(), pBuf );
@@ -1089,8 +1093,6 @@ sal_Bool ImpEditEngine::CreateLines( sal_Int32 nPara, sal_uInt32 nStartPosY )
nTmpWidth += pPortion->GetSize().Width();
- pPortion->SetRightToLeft( GetRightToLeft( nPara, nTmpPos+1 ) );
-
sal_uInt16 _nPortionEnd = nTmpPos + pPortion->GetLen();
if( bScriptSpace && ( _nPortionEnd < pNode->Len() ) && ( nTmpWidth < nXWidth ) && IsScriptChange( EditPaM( pNode, _nPortionEnd ) ) )
{
diff --git a/external/graphite/StaticLibrary_graphite.mk b/external/graphite/StaticLibrary_graphite.mk
index de3950f10b86..ddbf9955e6d7 100644
--- a/external/graphite/StaticLibrary_graphite.mk
+++ b/external/graphite/StaticLibrary_graphite.mk
@@ -19,8 +19,8 @@ $(eval $(call gb_StaticLibrary_set_include,graphite,\
))
$(eval $(call gb_StaticLibrary_add_defs,graphite,\
- -DDISABLE_TRACING \
- -DGR2_STATIC \
+ -DGRAPHITE2_NTRACING \
+ -DGRAPHITE2_STATIC \
))
ifeq ($(COM),GCC)
@@ -43,19 +43,22 @@ $(eval $(call gb_StaticLibrary_add_generated_cxxobjects,graphite,\
UnpackedTarball/graphite/src/gr_segment \
UnpackedTarball/graphite/src/gr_slot \
UnpackedTarball/graphite/src/json \
- UnpackedTarball/graphite/src/Bidi \
UnpackedTarball/graphite/src/CachedFace \
UnpackedTarball/graphite/src/CmapCache \
UnpackedTarball/graphite/src/Code \
+ UnpackedTarball/graphite/src/Collider \
+ UnpackedTarball/graphite/src/Decompressor \
UnpackedTarball/graphite/src/Face \
UnpackedTarball/graphite/src/FeatureMap \
UnpackedTarball/graphite/src/FileFace \
UnpackedTarball/graphite/src/Font \
UnpackedTarball/graphite/src/GlyphCache \
UnpackedTarball/graphite/src/GlyphFace \
+ UnpackedTarball/graphite/src/Intervals \
UnpackedTarball/graphite/src/Justifier \
UnpackedTarball/graphite/src/NameTable \
UnpackedTarball/graphite/src/Pass \
+ UnpackedTarball/graphite/src/Position \
UnpackedTarball/graphite/src/SegCache \
UnpackedTarball/graphite/src/SegCacheEntry \
UnpackedTarball/graphite/src/SegCacheStore \
diff --git a/external/graphite/UnpackedTarball_graphite.mk b/external/graphite/UnpackedTarball_graphite.mk
index c7fa86e0e149..a162d172b795 100644
--- a/external/graphite/UnpackedTarball_graphite.mk
+++ b/external/graphite/UnpackedTarball_graphite.mk
@@ -11,10 +11,12 @@ $(eval $(call gb_UnpackedTarball_UnpackedTarball,graphite))
$(eval $(call gb_UnpackedTarball_set_tarball,graphite,$(GRAPHITE_TARBALL)))
-# http://projects.palaso.org/issues/1115
+$(eval $(call gb_UnpackedTarball_set_patchlevel,graphite,0))
+
$(eval $(call gb_UnpackedTarball_add_patches,graphite,\
external/graphite/graphite2.issue1115.patch.1 \
external/graphite/graphite2.win64.patch.1 \
+ external/graphite/ubsan.patch \
))
# vim: set noet sw=4 ts=4:
diff --git a/external/graphite/graphite2.issue1115.patch.1 b/external/graphite/graphite2.issue1115.patch.1
index f19c8a3749f4..454114bb32c9 100644
--- a/external/graphite/graphite2.issue1115.patch.1
+++ b/external/graphite/graphite2.issue1115.patch.1
@@ -1,6 +1,6 @@
--- graphite/src/Code.cpp
+++ graphite/src/Code.cpp
-@@ -169,8 +169,8 @@ Machine::Code::Code(bool is_constraint,
+@@ -175,8 +175,8 @@ Machine::Code::Code(bool is_constraint,
bytecode_end,
pre_context,
rule_length,
@@ -11,7 +11,7 @@
face.numFeatures(),
{1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,255,
-@@ -178,7 +178,7 @@ Machine::Code::Code(bool is_constraint,
+@@ -184,7 +184,7 @@ Machine::Code::Code(bool is_constraint,
1,1,1,1,1,1,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
@@ -19,4 +19,4 @@
+ 0,0,0,0,0,0,0, static_cast<byte>(silf.numUser())}
};
- decoder dec(lims, *this);
+ decoder dec(lims, *this, pt);
diff --git a/external/graphite/graphite2.win64.patch.1 b/external/graphite/graphite2.win64.patch.1
index 6bf8c88907d1..e7c36c63c21b 100644
--- a/external/graphite/graphite2.win64.patch.1
+++ b/external/graphite/graphite2.win64.patch.1
@@ -1,7 +1,20 @@
+diff -ur graphite.org/src/inc/Main.h graphite/src/inc/Main.h
+--- graphite.org/src/inc/Main.h 2015-09-07 20:09:25.572279671 +0700
+--- graphite/src/inc/Main.h 2015-09-07 20:09:25.572279671 +0700
+@@ -25,6 +25,9 @@
+ of the License or (at your option) any later version.
+ */
+ #pragma once
++#ifdef _WIN32
++#pragma warning(disable: 4510 4610)
++#endif
+
+ #include <cstdlib>
+ #include "graphite2/Types.h"
diff -ur graphite.org/src/inc/json.h graphite/src/inc/json.h
--- graphite.org/src/inc/json.h 2015-02-03 14:49:24.408101900 +0100
+++ graphite/src/inc/json.h 2015-02-03 14:50:59.697552200 +0100
-@@ -78,6 +78,9 @@
+@@ -85,6 +85,9 @@
json & operator << (string) throw();
json & operator << (number) throw();
json & operator << (integer) throw();
@@ -14,8 +27,7 @@ diff -ur graphite.org/src/inc/json.h graphite/src/inc/json.h
diff -ur graphite.org/src/json.cpp graphite/src/json.cpp
--- graphite.org/src/json.cpp 2015-02-03 14:49:24.409102000 +0100
+++ graphite/src/json.cpp 2015-02-03 14:50:49.814986900 +0100
-@@ -119,6 +119,9 @@
- json & json::operator << (json::number f) throw() { context(seq); fprintf(_stream, "%g", f); return *this; }
+@@ -134,5 +134,8 @@
json & json::operator << (json::integer d) throw() { context(seq); fprintf(_stream, "%ld", d); return *this; }
json & json::operator << (long unsigned d) throw() { context(seq); fprintf(_stream, "%ld", d); return *this; }
+#ifdef _WIN64
@@ -27,17 +39,17 @@ diff -ur graphite.org/src/json.cpp graphite/src/json.cpp
diff -ur graphite.org/src/Pass.cpp graphite/src/Pass.cpp
--- graphite.org/src/Pass.cpp 2015-02-03 14:49:24.413102200 +0100
+++ graphite/src/Pass.cpp 2015-02-03 14:50:37.873303900 +0100
-@@ -466,7 +466,7 @@
- {
- if (r->rule->preContext > fsm.slots.context()) continue;
- *fsm.dbgout << json::flat << json::object
-- << "id" << r->rule - m_rules
-+ << "id" << static_cast<size_t>(r->rule - m_rules)
+@@ -544,7 +544,7 @@
+ if (r->rule->preContext > fsm.slots.context())
+ continue;
+ *fsm.dbgout << json::flat << json::object
+- << "id" << r->rule - m_rules
++ << "id" << static_cast<size_t>(r->rule - m_rules)
<< "failed" << true
<< "input" << json::flat << json::object
<< "start" << objectid(dslot(&fsm.slots.segment, input_slot(fsm.slots, -r->rule->preContext)))
-@@ -480,7 +480,7 @@
- void Pass::dumpRuleEventOutput(const FiniteStateMachine & fsm, const Rule & r, Slot * const last_slot) const
+@@ -558,7 +558,7 @@
+ void Pass::dumpRuleEventOutput(const FiniteStateMachine & fsm, Machine & m, const Rule & r, Slot * const last_slot) const
{
*fsm.dbgout << json::item << json::flat << json::object
- << "id" << &r - m_rules
diff --git a/external/graphite/ubsan.patch b/external/graphite/ubsan.patch
new file mode 100644
index 000000000000..b1617b138630
--- /dev/null
+++ b/external/graphite/ubsan.patch
@@ -0,0 +1,51 @@
+--- src/Pass.cpp
++++ src/Pass.cpp
+@@ -294,7 +294,7 @@
+ s->rules = begin;
+ s->rules_end = (end - begin <= FiniteStateMachine::MAX_RULES)? end :
+ begin + FiniteStateMachine::MAX_RULES;
+- qsort(begin, end - begin, sizeof(RuleEntry), &cmpRuleEntry);
++ if (end != begin) qsort(begin, end - begin, sizeof(RuleEntry), &cmpRuleEntry);
+ }
+
+ return true;
+--- src/gr_face.cpp
++++ src/gr_face.cpp
+@@ -87,7 +87,7 @@
+
+ Face *res = new Face(appFaceHandle, *ops);
+ if (res && load_face(*res, faceOptions))
+- return static_cast<gr_face *>(res);
++ return reinterpret_cast<gr_face *>(res);
+
+ delete res;
+ return 0;
+@@ -195,7 +195,7 @@
+
+ void gr_face_destroy(gr_face *face)
+ {
+- delete face;
++ delete static_cast<Face *>(face);
+ }
+
+
+--- src/gr_font.cpp
++++ src/gr_font.cpp
+@@ -50,7 +50,7 @@
+ if (face == 0) return 0;
+
+ Font * const res = new Font(ppm, *face, appFontHandle, font_ops);
+- return static_cast<gr_font*>(res);
++ return reinterpret_cast<gr_font*>(res);
+ }
+
+ gr_font* gr_make_font_with_advance_fn(float ppm/*pixels per em*/, const void* appFontHandle/*non-NULL*/, gr_advance_fn getAdvance, const gr_face * face/*needed for scaling*/)
+@@ -61,7 +61,7 @@
+
+ void gr_font_destroy(gr_font *font)
+ {
+- delete font;
++ delete static_cast<Font *>(font);
+ }
+
+
diff --git a/vcl/inc/graphite_layout.hxx b/vcl/inc/graphite_layout.hxx
index 434d6f6dca94..d439026f1fcb 100644
--- a/vcl/inc/graphite_layout.hxx
+++ b/vcl/inc/graphite_layout.hxx
@@ -97,9 +97,10 @@ public:
private:
const gr_face * mpFace; // not owned by layout
gr_font * mpFont; // not owned by layout
- int mnSegCharOffset; // relative to ImplLayoutArgs::mpStr
+ unsigned int mnSegCharOffset; // relative to ImplLayoutArgs::mpStr
long mnWidth;
std::vector<int> mvChar2BaseGlyph;
+ std::vector<int> mvChar2Glyph;
std::vector<int> mvGlyph2Char;
std::vector<int> mvCharDxs;
std::vector<int> mvCharBreaks;
@@ -113,8 +114,6 @@ public:
// used by upper layers
virtual bool LayoutText( ImplLayoutArgs& ); // first step of layout
// split into two stages to allow dc to be restored on the segment
- gr_segment * CreateSegment(ImplLayoutArgs& rArgs);
- bool LayoutGlyphs(ImplLayoutArgs& rArgs, gr_segment * pSegment);
virtual void AdjustLayout( ImplLayoutArgs& ); // adjusting positions
@@ -149,13 +148,14 @@ public:
static const int EXTRA_CONTEXT_LENGTH;
private:
void expandOrCondense(ImplLayoutArgs &rArgs);
- void fillFrom(gr_segment * rSeg, ImplLayoutArgs & rArgs, float fScaling);
+ void fillFrom(gr_segment * rSeg, ImplLayoutArgs & rArgs, float fScaling, bool bRtl, int firstCharOffset);
float append(gr_segment * pSeg,
ImplLayoutArgs & rArgs,
const gr_slot * pSlot, float gOrigin,
float nextGlyphOrigin, float fScaling,
- long & rDXOffset, bool bIsBase, int baseChar);
+ long & rDXOffset, bool bIsBase, int baseChar, int baseGlyph, bool bRtl);
+ unsigned int ScanFwdForChar(int &findChar, bool fallback) const;
};
#endif // INCLUDED_VCL_INC_GRAPHITE_LAYOUT_HXX
diff --git a/vcl/source/fontsubset/sft.cxx b/vcl/source/fontsubset/sft.cxx
index 76f8abfe44d2..408fa1eb49ee 100644
--- a/vcl/source/fontsubset/sft.cxx
+++ b/vcl/source/fontsubset/sft.cxx
@@ -1782,6 +1782,9 @@ int GetTTGlyphComponents(TrueTypeFont *ttf, sal_uInt32 glyphID, std::vector< sal
const sal_uInt8* glyf = getTable(ttf, O_glyf);
const sal_uInt8* ptr = glyf + ttf->goffsets[glyphID];
+ const sal_uInt8* nptr = glyf + ttf->goffsets[glyphID+1];
+ if (nptr <= ptr)
+ return 0;
glyphlist.push_back( glyphID );
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx
index 89355ad6422d..a5d3c375b1b4 100644
--- a/vcl/source/gdi/pdfwriter_impl.cxx
+++ b/vcl/source/gdi/pdfwriter_impl.cxx
@@ -7567,22 +7567,27 @@ void PDFWriterImpl::drawLayout( SalLayout& rLayout, const OUString& rText, bool
else if( pCharPosAry[i] >= nMinCharPos && pCharPosAry[i] <= nMaxCharPos )
{
int nChars = 1;
- aUnicodes.push_back( rText[ sal::static_int_cast<xub_StrLen>(pCharPosAry[i]) ] );
pUnicodesPerGlyph[i] = 1;
// try to handle ligatures and such
if( i < nGlyphs-1 )
{
nChars = pCharPosAry[i+1] - pCharPosAry[i];
+ int start = pCharPosAry[i];
// #i115618# fix for simple RTL+CTL cases
- // TODO: sanitize for RTL ligatures, more complex CTL, etc.
+ // supports RTL ligatures. TODO: more complex CTL, etc.
if( nChars < 0 )
+ {
nChars = -nChars;
- else if( nChars == 0 )
+ start = pCharPosAry[i+1] + 1;
+ }
+ else if (nChars == 0)
nChars = 1;
pUnicodesPerGlyph[i] = nChars;
- for( int n = 1; n < nChars; n++ )
- aUnicodes.push_back( rText[ sal::static_int_cast<xub_StrLen>(pCharPosAry[i]+n) ] );
+ for( int n = 0; n < nChars; n++ )
+ aUnicodes.push_back( rText[ start + n ] );
}
+ else
+ aUnicodes.push_back( rText[ pCharPosAry[i] ] );
// #i36691# hack that is needed because currently the pGlyphs[]
// argument is ignored for embeddable fonts and so the layout
// engine's glyph work is ignored (i.e. char mirroring)
diff --git a/vcl/source/glyphs/graphite_layout.cxx b/vcl/source/glyphs/graphite_layout.cxx
index 230583b191af..c6c3c7b3dd31 100644
--- a/vcl/source/glyphs/graphite_layout.cxx
+++ b/vcl/source/glyphs/graphite_layout.cxx
@@ -27,7 +27,7 @@
#undef NDEBUG
#endif
-// #define GRLAYOUT_DEBUG 1
+//#define GRLAYOUT_DEBUG 1
// Header files
//
@@ -105,23 +105,6 @@ namespace
return is_subrange(s.first, s.second, b, e);
}
- int findSameDirLimit(const sal_Unicode* buffer, int charCount, bool rtl)
- {
- UErrorCode status = U_ZERO_ERROR;
- UBiDi *ubidi = ubidi_openSized(charCount, 0, &status);
- int limit = 0;
- ubidi_setPara(ubidi, reinterpret_cast<const UChar *>(buffer), charCount,
- (rtl)?UBIDI_DEFAULT_RTL:UBIDI_DEFAULT_LTR, NULL, &status);
- UBiDiLevel level = 0;
- ubidi_getLogicalRun(ubidi, 0, &limit, &level);
- ubidi_close(ubidi);
- if ((rtl && !(level & 1)) || (!rtl && (level & 1)))
- {
- limit = 0;
- }
- return limit;
- }
-
template <typename T>
T maximum(T a, T b)
{
@@ -141,43 +124,21 @@ namespace
// o Querying clustering relationships.
// o manipulations that affect neighouring glyphs.
-const int GraphiteLayout::EXTRA_CONTEXT_LENGTH = 10;
+const int GraphiteLayout::EXTRA_CONTEXT_LENGTH = 32;
-// find first slot of cluster and first slot of subsequent cluster
-static void findFirstClusterSlot(const gr_slot* base, gr_slot const** first, gr_slot const** after, int * firstChar, int * lastChar, bool bRtl)
+const gr_slot *get_next_base(const gr_slot *slot, bool bRtl)
{
- if (gr_slot_attached_to(base) == NULL)
- {
- *first = base;
- *after = (bRtl)? gr_slot_prev_in_segment(base) :
- gr_slot_next_in_segment(base);
- *firstChar = gr_slot_before(base);
- *lastChar = gr_slot_after(base);
- }
- const gr_slot * attachment = gr_slot_first_attachment(base);
- while (attachment)
- {
- if (gr_slot_origin_X(*first) > gr_slot_origin_X(attachment))
- *first = attachment;
- const gr_slot* attachmentNext = (bRtl)?
- gr_slot_prev_in_segment(attachment) : gr_slot_next_in_segment(attachment);
- if (attachmentNext)
- {
- if (*after && (gr_slot_origin_X(*after) < gr_slot_origin_X(attachmentNext)))
- *after = attachmentNext;
- }
- else
- {
- *after = NULL;
- }
- if (gr_slot_before(attachment) < *firstChar)
- *firstChar = gr_slot_before(attachment);
- if (gr_slot_after(attachment) > *lastChar)
- *lastChar = gr_slot_after(attachment);
- if (gr_slot_first_attachment(attachment))
- findFirstClusterSlot(attachment, first, after, firstChar, lastChar, bRtl);
- attachment = gr_slot_next_sibling_attachment(attachment);
- }
+ for ( ; slot; slot = bRtl ? gr_slot_prev_in_segment(slot) : gr_slot_next_in_segment(slot))
+ if (!gr_slot_attached_to(slot) || gr_slot_can_insert_before(slot))
+ break;
+ return slot;
+}
+
+bool isWhite(sal_Unicode nChar)
+{
+ if (nChar <= 0x0020 || nChar == 0x00A0 || (nChar >= 0x2000 && nChar <= 0x200F) || nChar == 0x3000)
+ return true;
+ return false;
}
// The Graphite glyph stream is really a sequence of glyph attachment trees
@@ -185,202 +146,130 @@ static void findFirstClusterSlot(const gr_slot* base, gr_slot const** first, gr_
// finds each non-attached base glyph and calls append to record them as a
// sequence of clusters.
void
-GraphiteLayout::fillFrom(gr_segment * pSegment, ImplLayoutArgs &rArgs, float fScaling)
+GraphiteLayout::fillFrom(gr_segment * pSegment, ImplLayoutArgs &rArgs, float fScaling, bool bRtl, int lastCharPos)
{
- bool bRtl = (rArgs.mnFlags & SAL_LAYOUT_BIDI_RTL);
- int nCharRequested = rArgs.mnEndCharPos - rArgs.mnMinCharPos;
- int nChar = gr_seg_n_cinfo(pSegment);
float fMinX = gr_seg_advance_X(pSegment);
float fMaxX = 0.0f;
long nDxOffset = 0; // from dropped glyphs
- int nFirstCharInCluster = 0;
- int nLastCharInCluster = 0;
+ int origNumGlyphs = mvGlyphs.size();
unsigned int nGlyphs = gr_seg_n_slots(pSegment);
- mvGlyph2Char.assign(nGlyphs, -1);
- mvGlyphs.reserve(nGlyphs);
-
- if (bRtl)
+ mvGlyph2Char.resize(mvGlyph2Char.size() + nGlyphs, -1);
+ mvGlyphs.reserve(mvGlyphs.size() + nGlyphs);
+ int clusterStart = -1;
+ int clusterFirstChar = -1;
+ const gr_slot *nextBaseSlot;
+ const sal_Unicode *pStr = rArgs.mpStr;
+ int firstChar;
+
+ if (!nGlyphs || lastCharPos - mnSegCharOffset == 0) return;
+ const gr_slot* baseSlot = bRtl ? gr_seg_last_slot(pSegment) : gr_seg_first_slot(pSegment);
+ // find first base
+ while (baseSlot && gr_slot_attached_to(baseSlot) != NULL && !gr_slot_can_insert_before(baseSlot))
+ baseSlot = bRtl ? gr_slot_prev_in_segment(baseSlot) : gr_slot_next_in_segment(baseSlot);
+ assert(baseSlot);
+ int nextChar = gr_cinfo_base(gr_seg_cinfo(pSegment, gr_slot_before(baseSlot))) + mnSegCharOffset;
+ float thisBoundary = 0.;
+ float nextBoundary = gr_slot_origin_X(baseSlot);
+ // now loop over bases
+ for ( ; baseSlot; baseSlot = nextBaseSlot)
{
- const gr_slot* baseSlot = gr_seg_last_slot(pSegment);
- // find first base
- while (baseSlot && (gr_slot_attached_to(baseSlot) != NULL))
- baseSlot = gr_slot_prev_in_segment(baseSlot);
- int iChar = nChar - 1;
- int iNextChar = nChar - 1;
- bool reordered = false;
- int nBaseGlyphIndex = 0;
- // now loop over bases
- while (baseSlot)
+ firstChar = nextChar;
+ thisBoundary = nextBoundary;
+ nextBaseSlot = get_next_base(bRtl ? gr_slot_prev_in_segment(baseSlot) : gr_slot_next_in_segment(baseSlot), bRtl);
+ nextChar = nextBaseSlot ? gr_cinfo_base(gr_seg_cinfo(pSegment, gr_slot_before(nextBaseSlot))) + mnSegCharOffset : -1;
+ nextBoundary = nextBaseSlot ? gr_slot_origin_X(nextBaseSlot) : gr_seg_advance_X(pSegment);
+
+ if (firstChar < mnMinCharPos || firstChar >= mnEndCharPos)
{
- bool bCluster = !reordered;
- const gr_slot * clusterFirst = NULL;
- const gr_slot * clusterAfter = NULL;
- int firstChar = -1;
- int lastChar = -1;
- findFirstClusterSlot(baseSlot, &clusterFirst, &clusterAfter, &firstChar, &lastChar, bRtl);
- iNextChar = minimum<int>(firstChar, iNextChar);
- if (bCluster)
- {
- nBaseGlyphIndex = mvGlyphs.size();
- mvGlyph2Char[nBaseGlyphIndex] = iChar + mnSegCharOffset;
- nFirstCharInCluster = firstChar;
- nLastCharInCluster = lastChar;
- }
- else
- {
- mvGlyph2Char[mvGlyphs.size()] = firstChar + mnSegCharOffset;
- nFirstCharInCluster = minimum<int>(firstChar, nFirstCharInCluster);
- nLastCharInCluster = maximum<int>(firstChar, nLastCharInCluster);
- }
- float leftBoundary = gr_slot_origin_X(clusterFirst);
- float rightBoundary = (clusterAfter)?
- gr_slot_origin_X(clusterAfter) : gr_seg_advance_X(pSegment);
- if (
- lastChar < iChar &&
- (gr_cinfo_after(gr_seg_cinfo(pSegment, iChar)) >
- static_cast<int>(gr_slot_index(clusterAfter)))
- )
- {
- reordered = true;
- }
- else
- {
- reordered = false;
- iChar = iNextChar - 1;
- }
- if (mnSegCharOffset + nFirstCharInCluster >= mnMinCharPos &&
- mnSegCharOffset + nFirstCharInCluster < mnEndCharPos)
- {
- fMinX = minimum<float>(fMinX, leftBoundary);
- fMaxX = maximum<float>(fMaxX, rightBoundary);
- if (!reordered)
- {
- for (int i = nFirstCharInCluster; i <= nLastCharInCluster; i++)
- {
- if (mnSegCharOffset + i >= mnEndCharPos)
- break;
- // from the point of view of the dx array, the xpos is
- // the origin of the first glyph of the cluster rtl
- mvCharDxs[mnSegCharOffset + i - mnMinCharPos] =
- static_cast<int>(leftBoundary * fScaling) + nDxOffset;
- mvCharBreaks[mnSegCharOffset + i - mnMinCharPos] = gr_cinfo_break_weight(gr_seg_cinfo(pSegment, i));
- }
- mvChar2BaseGlyph[mnSegCharOffset + nFirstCharInCluster - mnMinCharPos] = nBaseGlyphIndex;
- }
- append(pSegment, rArgs, baseSlot, gr_slot_origin_X(baseSlot), rightBoundary, fScaling,
- nDxOffset, bCluster, mnSegCharOffset + firstChar);
- }
- if (mnSegCharOffset + nLastCharInCluster < mnMinCharPos)
- break;
- baseSlot = gr_slot_next_sibling_attachment(baseSlot);
+ // handle clipping of diacritic from base
+ nextBaseSlot = bRtl ? gr_slot_prev_in_segment(baseSlot) : gr_slot_next_in_segment(baseSlot);
+ nextBoundary = nextBaseSlot ? gr_slot_origin_X(nextBaseSlot) : gr_seg_advance_X(pSegment);
+ nextChar = nextBaseSlot ? gr_cinfo_base(gr_seg_cinfo(pSegment, gr_slot_before(nextBaseSlot))) + mnSegCharOffset : -1;
+ continue;
}
- }
- else
- {
- const gr_slot* baseSlot = gr_seg_first_slot(pSegment);
- // find first base
- while (baseSlot && (gr_slot_attached_to(baseSlot) != NULL))
- baseSlot = gr_slot_next_in_segment(baseSlot);
- int iChar = 0; // relative to segment
- int iNextChar = 0;
- bool reordered = false;
- int nBaseGlyphIndex = 0;
- // now loop over bases
- while (baseSlot)
+ // handle reordered clusters. Presumes reordered glyphs have monotonic opposite char index until the cluster base.
+ bool isReordered = (nextBaseSlot && ((bRtl != (gr_cinfo_base(gr_seg_cinfo(pSegment, gr_slot_before(nextBaseSlot))) < firstChar - mnSegCharOffset))
+ || gr_cinfo_base(gr_seg_cinfo(pSegment, gr_slot_before(nextBaseSlot))) == firstChar - mnSegCharOffset));
+ if (clusterStart >= 0 && !isReordered) // we hit the base (end) of a reordered cluster
{
- bool bCluster = !reordered;
- const gr_slot * clusterFirst = NULL;
- const gr_slot * clusterAfter = NULL;
- int firstChar = -1;
- int lastChar = -1;
- findFirstClusterSlot(baseSlot, &clusterFirst, &clusterAfter, &firstChar, &lastChar, bRtl);
- iNextChar = maximum<int>(lastChar, iNextChar);
- if (bCluster)
- {
- nBaseGlyphIndex = mvGlyphs.size();
- mvGlyph2Char[nBaseGlyphIndex] = iChar + mnSegCharOffset;
- nFirstCharInCluster = firstChar;
- nLastCharInCluster = lastChar;
- }
- else
- {
- mvGlyph2Char[mvGlyphs.size()] = firstChar + mnSegCharOffset;
- nFirstCharInCluster = minimum<int>(firstChar, nFirstCharInCluster);
- nLastCharInCluster = maximum<int>(lastChar, nLastCharInCluster);
- }
- if (
- firstChar > iChar &&
- (gr_cinfo_before(gr_seg_cinfo(pSegment, iChar)) >
- static_cast<int>(gr_slot_index(clusterFirst)))
- )
+ int clusterEnd = mvGlyphs.size();
+ for (int i = clusterStart; i < clusterEnd; ++i)
+ mvGlyph2Char[i] = firstChar;
+ if (bRtl)
{
- reordered = true;
+ for ( ; clusterFirstChar < firstChar; ++clusterFirstChar)
+ if (clusterFirstChar >= mnMinCharPos && clusterFirstChar < mnEndCharPos)
+ {
+ mvChar2BaseGlyph[clusterFirstChar - mnMinCharPos] = clusterStart; // lowest glyphItem index
+ mvCharDxs[clusterFirstChar - mnMinCharPos] = static_cast<int>(thisBoundary * fScaling) + mnWidth + nDxOffset;
+ }
}
else
{
- reordered = false;
- iChar = iNextChar + 1;
- }
- float leftBoundary = gr_slot_origin_X(clusterFirst);
- float rightBoundary = (clusterAfter)?
- gr_slot_origin_X(clusterAfter) : gr_seg_advance_X(pSegment);
- int bFirstChar = gr_cinfo_base(gr_seg_cinfo(pSegment, nFirstCharInCluster));
- if (mnSegCharOffset + bFirstChar >= mnMinCharPos &&
- mnSegCharOffset + bFirstChar < mnEndCharPos)
- {
- fMinX = minimum<float>(fMinX, leftBoundary);
- fMaxX = maximum<float>(fMaxX, rightBoundary);
- if (!reordered)
- {
- for (int i = nFirstCharInCluster; i <= nLastCharInCluster; i++)
+ for ( ; clusterFirstChar > firstChar; --clusterFirstChar)
+ if (clusterFirstChar < mnEndCharPos && clusterFirstChar >= mnMinCharPos)
{
- int ibase = gr_cinfo_base(gr_seg_cinfo(pSegment, i));
- if (mnSegCharOffset + ibase >= mnEndCharPos)
- break;
- // from the point of view of the dx array, the xpos is
- // the origin of the first glyph of the next cluster ltr
- mvCharDxs[mnSegCharOffset + ibase - mnMinCharPos] =
- static_cast<int>(rightBoundary * fScaling) + nDxOffset;
- mvCharBreaks[mnSegCharOffset + ibase - mnMinCharPos] = gr_cinfo_break_weight(gr_seg_cinfo(pSegment, i));
+ mvChar2BaseGlyph[clusterFirstChar - mnMinCharPos] = clusterStart;
+ mvCharDxs[clusterFirstChar - mnMinCharPos] = static_cast<int>(nextBoundary * fScaling) + mnWidth + nDxOffset;
}
- // only set mvChar2BaseGlyph for first character of cluster
- mvChar2BaseGlyph[mnSegCharOffset + bFirstChar - mnMinCharPos] = nBaseGlyphIndex;
- }
- append(pSegment, rArgs, baseSlot, gr_slot_origin_X(baseSlot), rightBoundary, fScaling,
- nDxOffset, true, mnSegCharOffset + firstChar);
}
- if (mnSegCharOffset + bFirstChar >= mnEndCharPos)
- break;
- baseSlot = gr_slot_next_sibling_attachment(baseSlot);
+ clusterStart = -1;
+ clusterFirstChar = -1;
}
+ else if (clusterStart < 0 && isReordered) // we hit the start of a reordered cluster
+ {
+ clusterStart = mvGlyphs.size();
+ clusterFirstChar = firstChar;
+ }
+
+ int baseGlyph = mvGlyphs.size();
+ int scaledGlyphPos = round(gr_slot_origin_X(baseSlot) * fScaling) + mnWidth + nDxOffset;
+ if (mvChar2Glyph[firstChar - mnMinCharPos] == -1 || mvGlyphs[mvChar2Glyph[firstChar - mnMinCharPos]].maLinearPos.X() < scaledGlyphPos)
+ {
+ mvChar2Glyph[firstChar - mnMinCharPos] = mvGlyphs.size();
+ mvCharDxs[firstChar - mnMinCharPos] = static_cast<int>((bRtl ? thisBoundary : nextBoundary) * fScaling) + mnWidth + nDxOffset;
+ mvChar2BaseGlyph[firstChar - mnMinCharPos] = baseGlyph;
+ mvCharBreaks[firstChar - mnMinCharPos] = gr_cinfo_break_weight(gr_seg_cinfo(pSegment, gr_slot_before(baseSlot)));
+ }
+ mvGlyph2Char[baseGlyph] = firstChar;
+ append(pSegment, rArgs, baseSlot, thisBoundary, nextBoundary, fScaling, nDxOffset, true, firstChar, baseGlyph, bRtl);
+ if (thisBoundary < fMinX) fMinX = thisBoundary;
+ if (nextBoundary > fMaxX && (nextChar < mnMinCharPos || nextChar >= mnEndCharPos || !isWhite(pStr[nextChar]) || fMaxX <= 0.0f))
+ fMaxX = nextBoundary;
}
long nXOffset = round(fMinX * fScaling);
- mnWidth = round(fMaxX * fScaling) - nXOffset + nDxOffset;
- if (mnWidth < 0)
- {
- // This can happen when there was no base inside the range
- mnWidth = 0;
- }
+ long nXEnd = round(fMaxX * fScaling);
+ int nCharRequested = minimum<int>(lastCharPos, mnEndCharPos) - mnMinCharPos;
+ int firstCharOffset = maximum<int>(mnSegCharOffset, mnMinCharPos) - mnMinCharPos;
// fill up non-base char dx with cluster widths from previous base glyph
if (bRtl)
{
if (mvCharDxs[nCharRequested-1] == -1)
- mvCharDxs[nCharRequested-1] = 0;
+ mvCharDxs[nCharRequested-1] = nXEnd - nXOffset + mnWidth + nDxOffset;
else
- mvCharDxs[nCharRequested-1] -= nXOffset;
- for (int i = nCharRequested - 2; i >= 0; i--)
+ mvCharDxs[nCharRequested-1] = nXEnd - mvCharDxs[nCharRequested-1] + 2 * (mnWidth + nDxOffset);
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"%d,%d ", nCharRequested - 1, (int)mvCharDxs[nCharRequested-1]);
+#endif
+ for (int i = nCharRequested - 2; i >= firstCharOffset; i--)
{
if (mvCharDxs[i] == -1) mvCharDxs[i] = mvCharDxs[i+1];
- else mvCharDxs[i] -= nXOffset;
+ else mvCharDxs[i] = nXEnd - mvCharDxs[i] + 2 * (mnWidth + nDxOffset);
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"%d,%d ", (int)i, (int)mvCharDxs[i]);
+#endif
}
}
else
{
- if (mvCharDxs[0] == -1)
- mvCharDxs[0] = 0;
+ if (mvCharDxs[firstCharOffset] == -1)
+ mvCharDxs[firstCharOffset] = 0;
else
- mvCharDxs[0] -= nXOffset;
- for (int i = 1; i < nCharRequested; i++)
+ mvCharDxs[firstCharOffset] -= nXOffset;
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"%d,%d ", firstCharOffset, (int)mvCharDxs[firstCharOffset]);
+#endif
+ for (int i = firstCharOffset + 1; i < nCharRequested; i++)
{
if (mvCharDxs[i] == -1) mvCharDxs[i] = mvCharDxs[i-1];
else mvCharDxs[i] -= nXOffset;
@@ -392,11 +281,17 @@ GraphiteLayout::fillFrom(gr_segment * pSegment, ImplLayoutArgs &rArgs, float fSc
// remove offset due to context if there is one
if (nXOffset != 0)
{
- for (size_t i = 0; i < mvGlyphs.size(); i++)
+ for (size_t i = origNumGlyphs; i < mvGlyphs.size(); i++)
mvGlyphs[i].maLinearPos.X() -= nXOffset;
}
+ mnWidth += nXEnd - nXOffset + nDxOffset;
+ if (mnWidth < 0)
+ {
+ // This can happen when there was no base inside the range
+ mnWidth = 0;
+ }
#ifdef GRLAYOUT_DEBUG
- fprintf(grLog(), "fillFrom %" SAL_PRI_SIZET "u glyphs offset %ld width %ld\n", mvGlyphs.size(), nXOffset, mnWidth);
+ fprintf(grLog(), "fillFrom %" SAL_PRI_SIZET "u glyphs offset %ld width %ld for %d\n", mvGlyphs.size(), nXOffset, mnWidth, nCharRequested);
#endif
}
@@ -405,37 +300,29 @@ GraphiteLayout::fillFrom(gr_segment * pSegment, ImplLayoutArgs &rArgs, float fSc
float
GraphiteLayout::append(gr_segment *pSeg, ImplLayoutArgs &rArgs,
const gr_slot * gi, float gOrigin, float nextGlyphOrigin, float scaling, long & rDXOffset,
- bool bIsBase, int baseChar)
+ bool bIsBase, int baseChar, int baseGlyph, bool bRtl)
{
- bool bRtl = (rArgs.mnFlags & SAL_LAYOUT_BIDI_RTL);
- float nextOrigin;
assert(gi);
- assert(gr_slot_before(gi) <= gr_slot_after(gi));
- int firstChar = gr_slot_before(gi) + mnSegCharOffset;
+ // assert(gr_slot_before(gi) <= gr_slot_after(gi));
+ int firstChar = gr_cinfo_base(gr_seg_cinfo(pSeg, gr_slot_before(gi))) + mnSegCharOffset;
assert(mvGlyphs.size() < mvGlyph2Char.size());
- if (!bIsBase) mvGlyph2Char[mvGlyphs.size()] = baseChar;//firstChar;
- // is the next glyph attached or in the next cluster?
- //glyph_set_range_t iAttached = gi.attachedClusterGlyphs();
- const gr_slot * pFirstAttached = gr_slot_first_attachment(gi);
- const gr_slot * pNextSibling = gr_slot_next_sibling_attachment(gi);
- if (pFirstAttached)
- nextOrigin = gr_slot_origin_X(pFirstAttached);
- else if (!bIsBase && pNextSibling)
- nextOrigin = gr_slot_origin_X(pNextSibling);
- else
- nextOrigin = nextGlyphOrigin;
+ if (firstChar < mnMinCharPos || firstChar >= mnEndCharPos)
+ return nextGlyphOrigin;
+
long glyphId = gr_slot_gid(gi);
long deltaOffset = 0;
- int scaledGlyphPos = round(gr_slot_origin_X(gi) * scaling);
- int glyphWidth = round((nextOrigin - gOrigin) * scaling);
-// if (glyphWidth < 0)
-// {
-// nextOrigin = gOrigin;
-// glyphWidth = 0;
-// }
+ int scaledGlyphPos = round(gr_slot_origin_X(gi) * scaling) + mnWidth + rDXOffset;
+ int glyphWidth = round((nextGlyphOrigin - gOrigin) * scaling);
+ if (!bIsBase)
+ {
+ mvChar2BaseGlyph[firstChar - mnMinCharPos] = baseGlyph;
+ mvCharDxs[firstChar - mnMinCharPos] = mvCharDxs[baseChar - mnMinCharPos];
+ mvCharBreaks[firstChar - mnMinCharPos] = gr_cinfo_break_weight(gr_seg_cinfo(pSeg, gr_slot_before(gi)));
+ }
+
#ifdef GRLAYOUT_DEBUG
- fprintf(grLog(),"c%d g%ld,X%d W%d nX%f ", firstChar, glyphId,
- (int)(gr_slot_origin_X(gi) * scaling), glyphWidth, nextOrigin * scaling);
+ fprintf(grLog(),"c%d g%ld,X%d W%d nX%f @%d=%d ", firstChar, glyphId,
+ scaledGlyphPos, glyphWidth, nextGlyphOrigin * scaling, mvChar2Glyph[firstChar-mnMinCharPos], mvCharDxs[firstChar-mnMinCharPos]);
#endif
if (glyphId == 0)
{
@@ -465,11 +352,12 @@ GraphiteLayout::append(gr_segment *pSeg, ImplLayoutArgs &rArgs,
}
// append this glyph. Set the cluster flag if this glyph is attached to another
long nGlyphFlags = bIsBase ? 0 : GlyphItem::IS_IN_CLUSTER;
+ if (gr_slot_attached_to(gi))
+ nGlyphFlags |= GlyphItem::IS_DIACRITIC;
nGlyphFlags |= (bRtl)? GlyphItem::IS_RTL_GLYPH : 0;
GlyphItem aGlyphItem(mvGlyphs.size(),
glyphId,
- Point(scaledGlyphPos + rDXOffset,
- round((-gr_slot_origin_Y(gi) * scaling))),
+ Point(scaledGlyphPos, round((-gr_slot_origin_Y(gi) * scaling))),
nGlyphFlags,
glyphWidth);
if (glyphId != static_cast<long>(GF_DROPPED))
@@ -480,9 +368,10 @@ GraphiteLayout::append(gr_segment *pSeg, ImplLayoutArgs &rArgs,
rDXOffset += deltaOffset;
// Recursively append all the attached glyphs.
- float cOrigin = nextOrigin;
+ float cOrigin = nextGlyphOrigin;
for (const gr_slot * agi = gr_slot_first_attachment(gi); agi != NULL; agi = gr_slot_next_sibling_attachment(agi))
- cOrigin = append(pSeg, rArgs, agi, cOrigin, nextGlyphOrigin, scaling, rDXOffset, false, baseChar);
+ if (!gr_slot_can_insert_before(agi))
+ cOrigin = append(pSeg, rArgs, agi, cOrigin, nextGlyphOrigin, scaling, rDXOffset, false, baseChar, baseGlyph, bRtl);
return cOrigin;
}
@@ -516,6 +405,7 @@ void GraphiteLayout::clear()
mvGlyphs.clear();
mvCharDxs.clear();
mvChar2BaseGlyph.clear();
+ mvChar2Glyph.clear();
mvGlyph2Char.clear();
// Reset the state to the empty state.
@@ -526,168 +416,61 @@ void GraphiteLayout::clear()
// This method shouldn't be called on windows, since it needs the dc reset
bool GraphiteLayout::LayoutText(ImplLayoutArgs & rArgs)
{
+ clear();
bool success = true;
- if (rArgs.mnMinCharPos < rArgs.mnEndCharPos)
- {
... etc. - the rest is truncated
More information about the Libreoffice-commits
mailing list