From def27ab1829a9677d8263ab5bc99d8600732ac0b Mon Sep 17 00:00:00 2001 From: Sam Clegg Date: Fri, 28 Oct 2022 10:45:41 -0700 Subject: [PATCH] Upgrade freetype port from v2.6 to v2.13.3 Also, switch from a fork to using the upstream github repo. We had a single patch in our fork: https://github.com/emscripten-ports/FreeType/commit/40a760c963bc2b76575918ff91a515c8474db4e0 However, this was upstreamed in: https://github.com/freetype/freetype/commit/2f4b740ce435bc1ad5ef8570bb91ab7cd5682720 This change is based on #18088. Fixes: #22571 --- ChangeLog.md | 1 + test/browser/test_sdl2_ttf.png | Bin 10831 -> 8261 bytes test/browser/test_sdl2_ttf_rtl.png | Bin 8411 -> 7980 bytes test/test_freetype.out | 24 +- tools/ports/freetype.py | 550 ++--------------------------- tools/system_libs.py | 10 +- 6 files changed, 55 insertions(+), 530 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index 54b51f998f55b..e1712e283c4a4 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -20,6 +20,7 @@ See docs/process.md for more on how version tagging works. 3.1.68 (in development) ----------------------- +- The freetype port was updated from v2.6 to v2.13.3. (#22585) 3.1.67 - 09/17/24 ----------------- diff --git a/test/browser/test_sdl2_ttf.png b/test/browser/test_sdl2_ttf.png index 6d7b12f1de5d90663bffb9bb0402f2620ac0e056..10aedc82d42e49ed5c89bc699c9c59d22da767a2 100644 GIT binary patch literal 8261 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 bSM4P>zp>*{EWqCbn6$3yT`Bm(D)c`94f`?V literal 10831 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 B!b$)D literal 8411 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 diff --git a/test/test_freetype.out b/test/test_freetype.out index 536477f83bdd8..87e18e6a0b3d1 100644 --- a/test/test_freetype.out +++ b/test/test_freetype.out @@ -2,15 +2,15 @@ -*** +***+ -***+ ***** + -+**+ ***** + -+*** +**+**+ * - ***+ ***+**+ +* - +**+ *** *** +* - +**++**+ +**+** - ***+**+ +**+** - ****** ***** - +****+ +**** - +****+ +**** - **** **** +*** +***+ ** +***+ +**** +** ++**+ ***** +** ++**+ +**+**+ +** ++*** +**+**+ *** + *** +** *** *** + +**+*** +**+*** + +**+**+ +**+**+ + +*****+ +*****+ + ***** ***** + +**** +***+ + +***+ +***+ diff --git a/tools/ports/freetype.py b/tools/ports/freetype.py index b668856ac0736..9b877aa22a57a 100644 --- a/tools/ports/freetype.py +++ b/tools/ports/freetype.py @@ -5,8 +5,8 @@ import os -TAG = 'version_1' -HASH = '0d0b1280ba0501ad0a23cf1daa1f86821c722218b59432734d3087a89acd22aabd5c3e5e1269700dcd41e87073046e906060f167c032eb91a3ac8c5808a02783' +TAG = 'VER-2-13-3' +HASH = 'ce413487c24e689631d705f53b64725256f89fffe9aade7cf07bbd785a9cd49eb6b8d2297a55554f3fee0a50b17e8af78f505cdab565768afab833794f968c2f' variants = {'freetype-wasm-sjlj': {'SUPPORT_LONGJMP': 'wasm'}} deps = ['zlib'] @@ -24,47 +24,35 @@ def get_lib_name(settings): def get(ports, settings, shared): - ports.fetch_project('freetype', f'https://github.com/emscripten-ports/FreeType/archive/{TAG}.zip', sha512hash=HASH) + ports.fetch_project('freetype', f'https://github.com/freetype/freetype/archive/{TAG}.zip', sha512hash=HASH) def create(final): - source_path = ports.get_dir('freetype', 'FreeType-' + TAG) + source_path = ports.get_dir('freetype', f'freetype-{TAG}') ports.write_file(os.path.join(source_path, 'include/ftconfig.h'), ftconf_h) ports.install_header_dir(os.path.join(source_path, 'include'), target=os.path.join('freetype2')) # build - srcs = ['src/autofit/autofit.c', - 'src/base/ftadvanc.c', + srcs = ['builds/unix/ftsystem.c', + 'src/autofit/autofit.c', + 'src/base/ftbase.c', 'src/base/ftbbox.c', 'src/base/ftbdf.c', 'src/base/ftbitmap.c', - 'src/base/ftcalc.c', 'src/base/ftcid.c', - 'src/base/ftdbgmem.c', 'src/base/ftdebug.c', - 'src/base/ftfntfmt.c', 'src/base/ftfstype.c', 'src/base/ftgasp.c', - 'src/base/ftgloadr.c', 'src/base/ftglyph.c', 'src/base/ftgxval.c', 'src/base/ftinit.c', - 'src/base/ftlcdfil.c', 'src/base/ftmm.c', - 'src/base/ftobjs.c', 'src/base/ftotval.c', - 'src/base/ftoutln.c', 'src/base/ftpatent.c', 'src/base/ftpfr.c', - 'src/base/ftrfork.c', - 'src/base/ftsnames.c', - 'src/base/ftstream.c', 'src/base/ftstroke.c', 'src/base/ftsynth.c', - 'src/base/ftsystem.c', - 'src/base/fttrigon.c', 'src/base/fttype1.c', - 'src/base/ftutil.c', 'src/base/ftwinfnt.c', 'src/bdf/bdf.c', 'src/bzip2/ftbzip2.c', @@ -77,10 +65,12 @@ def create(final): 'src/pfr/pfr.c', 'src/psaux/psaux.c', 'src/pshinter/pshinter.c', - 'src/psnames/psmodule.c', + 'src/psnames/psnames.c', 'src/raster/raster.c', + 'src/sdf/sdf.c', 'src/sfnt/sfnt.c', 'src/smooth/smooth.c', + 'src/svg/svg.c', 'src/truetype/truetype.c', 'src/type1/type1.c', 'src/type42/type42.c', @@ -88,6 +78,7 @@ def create(final): flags = [ '-DFT2_BUILD_LIBRARY', + '-DFT_CONFIG_CONFIG_H=', '-DFT_CONFIG_OPTION_SYSTEM_ZLIB', '-I' + source_path + '/include', '-I' + source_path + '/truetype', @@ -121,501 +112,36 @@ def show(): return 'freetype (-sUSE_FREETYPE=1 or --use-port=freetype; freetype license)' -ftconf_h = r'''/***************************************************************************/ -/* */ -/* ftconfig.in */ -/* */ -/* UNIX-specific configuration file (specification only). */ -/* */ -/* Copyright 1996-2015 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* This header file contains a number of macro definitions that are used */ - /* by the rest of the engine. Most of the macros here are automatically */ - /* determined at compile time, and you should not need to change it to */ - /* port FreeType, except to compile the library with a non-ANSI */ - /* compiler. */ - /* */ - /* Note however that if some specific modifications are needed, we */ - /* advise you to place a modified copy in your build directory. */ - /* */ - /* The build directory is usually `builds/', and contains */ - /* system-specific files that are always included first when building */ - /* the library. */ - /* */ - /*************************************************************************/ - - -#ifndef __FTCONFIG_H__ -#define __FTCONFIG_H__ +ftconf_h = r''' + /************************************************************************** + * + * This header file contains a number of macro definitions that are used by + * the rest of the engine. Most of the macros here are automatically + * determined at compile time, and you should not need to change it to port + * FreeType, except to compile the library with a non-ANSI compiler. + * + * Note however that if some specific modifications are needed, we advise + * you to place a modified copy in your build directory. + * + * The build directory is usually `builds/`, and contains + * system-specific files that are always included first when building the + * library. + * + */ + +#ifndef FTCONFIG_H_ +#define FTCONFIG_H_ #include -#include -#include - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /* */ - /* PLATFORM-SPECIFIC CONFIGURATION MACROS */ - /* */ - /* These macros can be toggled to suit a specific system. The current */ - /* ones are defaults used to compile FreeType in an ANSI C environment */ - /* (16bit compilers are also supported). Copy this file to your own */ - /* `builds/' directory, and edit it to port the engine. */ - /* */ - /*************************************************************************/ - - -#undef HAVE_UNISTD_H -#undef HAVE_FCNTL_H -#undef HAVE_STDINT_H - - - /* There are systems (like the Texas Instruments 'C54x) where a `char' */ - /* has 16 bits. ANSI C says that sizeof(char) is always 1. Since an */ - /* `int' has 16 bits also for this system, sizeof(int) gives 1 which */ - /* is probably unexpected. */ - /* */ - /* `CHAR_BIT' (defined in limits.h) gives the number of bits in a */ - /* `char' type. */ - -#ifndef FT_CHAR_BIT -#define FT_CHAR_BIT CHAR_BIT -#endif - - -#undef FT_USE_AUTOCONF_SIZEOF_TYPES -#ifdef FT_USE_AUTOCONF_SIZEOF_TYPES - -#undef SIZEOF_INT -#undef SIZEOF_LONG -#define FT_SIZEOF_INT SIZEOF_INT -#define FT_SIZEOF_LONG SIZEOF_LONG - -#else /* !FT_USE_AUTOCONF_SIZEOF_TYPES */ - - /* Following cpp computation of the bit length of int and long */ - /* is copied from default include/config/ftconfig.h. */ - /* If any improvement is required for this file, it should be */ - /* applied to the original header file for the builders that */ - /* do not use configure script. */ - - /* The size of an `int' type. */ -#if FT_UINT_MAX == 0xFFFFUL -#define FT_SIZEOF_INT (16 / FT_CHAR_BIT) -#elif FT_UINT_MAX == 0xFFFFFFFFUL -#define FT_SIZEOF_INT (32 / FT_CHAR_BIT) -#elif FT_UINT_MAX > 0xFFFFFFFFUL && FT_UINT_MAX == 0xFFFFFFFFFFFFFFFFUL -#define FT_SIZEOF_INT (64 / FT_CHAR_BIT) -#else -#error "Unsupported size of `int' type!" -#endif - - /* The size of a `long' type. A five-byte `long' (as used e.g. on the */ - /* DM642) is recognized but avoided. */ -#if FT_ULONG_MAX == 0xFFFFFFFFUL -#define FT_SIZEOF_LONG (32 / FT_CHAR_BIT) -#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFUL -#define FT_SIZEOF_LONG (32 / FT_CHAR_BIT) -#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFFFFFFFUL -#define FT_SIZEOF_LONG (64 / FT_CHAR_BIT) -#else -#error "Unsupported size of `long' type!" -#endif - -#endif /* !FT_USE_AUTOCONF_SIZEOF_TYPES */ - - - /* FT_UNUSED is a macro used to indicate that a given parameter is not */ - /* used -- this is only used to get rid of unpleasant compiler warnings */ -#ifndef FT_UNUSED -#define FT_UNUSED( arg ) ( (arg) = (arg) ) -#endif - - - /*************************************************************************/ - /* */ - /* AUTOMATIC CONFIGURATION MACROS */ - /* */ - /* These macros are computed from the ones defined above. Don't touch */ - /* their definition, unless you know precisely what you are doing. No */ - /* porter should need to mess with them. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* Mac support */ - /* */ - /* This is the only necessary change, so it is defined here instead */ - /* providing a new configuration file. */ - /* */ -#if defined( __APPLE__ ) || ( defined( __MWERKS__ ) && defined( macintosh ) ) - /* no Carbon frameworks for 64bit 10.4.x */ - /* AvailabilityMacros.h is available since Mac OS X 10.2, */ - /* so guess the system version by maximum errno before inclusion */ -#include -#ifdef ECANCELED /* defined since 10.2 */ -#include "AvailabilityMacros.h" -#endif -#if defined( __LP64__ ) && \ - ( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 ) -#undef FT_MACINTOSH -#endif - -#elif defined( __SC__ ) || defined( __MRC__ ) - /* Classic MacOS compilers */ -#include "ConditionalMacros.h" -#if TARGET_OS_MAC -#define FT_MACINTOSH 1 -#endif - -#endif - - - /* Fix compiler warning with sgi compiler */ -#if defined( __sgi ) && !defined( __GNUC__ ) -#if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 ) -#pragma set woff 3505 -#endif -#endif - - - /*************************************************************************/ - /* */ - /*
*/ - /* basic_types */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* */ - /* FT_Int16 */ - /* */ - /* */ - /* A typedef for a 16bit signed integer type. */ - /* */ - typedef signed short FT_Int16; - - - /*************************************************************************/ - /* */ - /* */ - /* FT_UInt16 */ - /* */ - /* */ - /* A typedef for a 16bit unsigned integer type. */ - /* */ - typedef unsigned short FT_UInt16; - - /* */ - - - /* this #if 0 ... #endif clause is for documentation purposes */ -#if 0 - - /*************************************************************************/ - /* */ - /* */ - /* FT_Int32 */ - /* */ - /* */ - /* A typedef for a 32bit signed integer type. The size depends on */ - /* the configuration. */ - /* */ - typedef signed XXX FT_Int32; - - - /*************************************************************************/ - /* */ - /* */ - /* FT_UInt32 */ - /* */ - /* A typedef for a 32bit unsigned integer type. The size depends on */ - /* the configuration. */ - /* */ - typedef unsigned XXX FT_UInt32; - - - /*************************************************************************/ - /* */ - /* */ - /* FT_Int64 */ - /* */ - /* A typedef for a 64bit signed integer type. The size depends on */ - /* the configuration. Only defined if there is real 64bit support; */ - /* otherwise, it gets emulated with a structure (if necessary). */ - /* */ - typedef signed XXX FT_Int64; - - - /*************************************************************************/ - /* */ - /* */ - /* FT_UInt64 */ - /* */ - /* A typedef for a 64bit unsigned integer type. The size depends on */ - /* the configuration. Only defined if there is real 64bit support; */ - /* otherwise, it gets emulated with a structure (if necessary). */ - /* */ - typedef unsigned XXX FT_UInt64; - - /* */ - -#endif - -#if FT_SIZEOF_INT == 4 - - typedef signed int FT_Int32; - typedef unsigned int FT_UInt32; - -#elif FT_SIZEOF_LONG == 4 - - typedef signed long FT_Int32; - typedef unsigned long FT_UInt32; - -#else -#error "no 32bit type found -- please check your configuration files" -#endif - - - /* look up an integer type that is at least 32 bits */ -#if FT_SIZEOF_INT >= 4 - - typedef int FT_Fast; - typedef unsigned int FT_UFast; - -#elif FT_SIZEOF_LONG >= 4 - - typedef long FT_Fast; - typedef unsigned long FT_UFast; - -#endif - - - /* determine whether we have a 64-bit int type for platforms without */ - /* Autoconf */ -#if FT_SIZEOF_LONG == 8 - - /* FT_LONG64 must be defined if a 64-bit type is available */ -#define FT_LONG64 -#define FT_INT64 long -#define FT_UINT64 unsigned long - - /*************************************************************************/ - /* */ - /* A 64-bit data type may create compilation problems if you compile */ - /* in strict ANSI mode. To avoid them, we disable other 64-bit data */ - /* types if __STDC__ is defined. You can however ignore this rule */ - /* by defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */ - /* */ -#elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 ) - -#if defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */ - - /* this compiler provides the __int64 type */ -#define FT_LONG64 -#define FT_INT64 __int64 -#define FT_UINT64 unsigned __int64 - -#elif defined( __BORLANDC__ ) /* Borland C++ */ - - /* XXXX: We should probably check the value of __BORLANDC__ in order */ - /* to test the compiler version. */ - - /* this compiler provides the __int64 type */ -#define FT_LONG64 -#define FT_INT64 __int64 -#define FT_UINT64 unsigned __int64 - -#elif defined( __WATCOMC__ ) /* Watcom C++ */ - - /* Watcom doesn't provide 64-bit data types */ - -#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */ - -#define FT_LONG64 -#define FT_INT64 long long int -#define FT_UINT64 unsigned long long int - -#elif defined( __GNUC__ ) - - /* GCC provides the `long long' type */ -#define FT_LONG64 -#define FT_INT64 long long int -#define FT_UINT64 unsigned long long int - -#endif /* _MSC_VER */ - -#endif /* FT_SIZEOF_LONG == 8 */ - -#ifdef FT_LONG64 - typedef FT_INT64 FT_Int64; - typedef FT_UINT64 FT_UInt64; -#endif - - - /*************************************************************************/ - /* */ - /* miscellaneous */ - /* */ - /*************************************************************************/ - - -#define FT_BEGIN_STMNT do { -#define FT_END_STMNT } while ( 0 ) -#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT - - - /* typeof condition taken from gnulib's `intprops.h' header file */ -#if ( __GNUC__ >= 2 || \ - defined( __IBM__TYPEOF__ ) || \ - ( __SUNPRO_C >= 0x5110 && !__STDC__ ) ) -#define TYPEOF( type ) (__typeof__ (type)) -#else -#define TYPEOF( type ) /* empty */ -#endif - - -#ifdef FT_MAKE_OPTION_SINGLE_OBJECT - -#define FT_LOCAL( x ) static x -#define FT_LOCAL_DEF( x ) static x - -#else - -#ifdef __cplusplus -#define FT_LOCAL( x ) extern "C" x -#define FT_LOCAL_DEF( x ) extern "C" x -#else -#define FT_LOCAL( x ) extern x -#define FT_LOCAL_DEF( x ) x -#endif - -#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */ - -#define FT_LOCAL_ARRAY( x ) extern const x -#define FT_LOCAL_ARRAY_DEF( x ) const x - - -#ifndef FT_BASE - -#ifdef __cplusplus -#define FT_BASE( x ) extern "C" x -#else -#define FT_BASE( x ) extern x -#endif - -#endif /* !FT_BASE */ - - -#ifndef FT_BASE_DEF - -#ifdef __cplusplus -#define FT_BASE_DEF( x ) x -#else -#define FT_BASE_DEF( x ) x -#endif - -#endif /* !FT_BASE_DEF */ - - -#ifndef FT_EXPORT - -#ifdef __cplusplus -#define FT_EXPORT( x ) extern "C" x -#else -#define FT_EXPORT( x ) extern x -#endif - -#endif /* !FT_EXPORT */ - - -#ifndef FT_EXPORT_DEF - -#ifdef __cplusplus -#define FT_EXPORT_DEF( x ) extern "C" x -#else -#define FT_EXPORT_DEF( x ) extern x -#endif - -#endif /* !FT_EXPORT_DEF */ - - -#ifndef FT_EXPORT_VAR - -#ifdef __cplusplus -#define FT_EXPORT_VAR( x ) extern "C" x -#else -#define FT_EXPORT_VAR( x ) extern x -#endif - -#endif /* !FT_EXPORT_VAR */ - - /* The following macros are needed to compile the library with a */ - /* C++ compiler and with 16bit compilers. */ - /* */ - - /* This is special. Within C++, you must specify `extern "C"' for */ - /* functions which are used via function pointers, and you also */ - /* must do that for structures which contain function pointers to */ - /* assure C linkage -- it's not possible to have (local) anonymous */ - /* functions which are accessed by (global) function pointers. */ - /* */ - /* */ - /* FT_CALLBACK_DEF is used to _define_ a callback function. */ - /* */ - /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */ - /* contains pointers to callback functions. */ - /* */ - /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */ - /* that contains pointers to callback functions. */ - /* */ - /* */ - /* Some 16bit compilers have to redefine these macros to insert */ - /* the infamous `_cdecl' or `__fastcall' declarations. */ - /* */ -#ifndef FT_CALLBACK_DEF -#ifdef __cplusplus -#define FT_CALLBACK_DEF( x ) extern "C" x -#else -#define FT_CALLBACK_DEF( x ) static x -#endif -#endif /* FT_CALLBACK_DEF */ - -#ifndef FT_CALLBACK_TABLE -#ifdef __cplusplus -#define FT_CALLBACK_TABLE extern "C" -#define FT_CALLBACK_TABLE_DEF extern "C" -#else -#define FT_CALLBACK_TABLE extern -#define FT_CALLBACK_TABLE_DEF /* nothing */ -#endif -#endif /* FT_CALLBACK_TABLE */ - - -FT_END_HEADER - +#include FT_CONFIG_OPTIONS_H +#include FT_CONFIG_STANDARD_LIBRARY_H -#endif /* __FTCONFIG_H__ */ +#define HAVE_UNISTD_H +#define HAVE_FCNTL_H +#include +#include +#include -/* END */ +#endif /* FTCONFIG_H_ */ ''' diff --git a/tools/system_libs.py b/tools/system_libs.py index 4ad44faaa5661..464c96de2445c 100644 --- a/tools/system_libs.py +++ b/tools/system_libs.py @@ -12,6 +12,7 @@ import os import shutil import textwrap +import shlex from enum import IntEnum, auto from glob import iglob from typing import List, Optional @@ -168,16 +169,13 @@ def create_ninja_file(input_files, filename, libname, cflags, asflags=None, cust if asflags is None: asflags = [] - def join(flags): - return ' '.join(flags) - out = f'''\ # Automatically generated by tools/system_libs.py. DO NOT EDIT ninja_required_version = 1.5 -ASFLAGS = {join(asflags)} -CFLAGS = {join(cflags)} +ASFLAGS = {shlex.join(asflags)} +CFLAGS = {shlex.join(cflags)} EMCC = {shared.EMCC} EMXX = {shared.EMXX} EMAR = {shared.EMAR} @@ -257,7 +255,7 @@ def join(flags): if customize_build_flags: custom_flags = customize_build_flags(flags, src) if custom_flags != flags: - out += f' CFLAGS = {join(custom_flags)}' + out += f' CFLAGS = {shlex.join(custom_flags)}' out += '\n' objects = sorted(objects, key=objectfile_sort_key)