summaryrefslogtreecommitdiff
path: root/os/emscripten/emsdk-liblzma.patch
diff options
context:
space:
mode:
Diffstat (limited to 'os/emscripten/emsdk-liblzma.patch')
-rw-r--r--os/emscripten/emsdk-liblzma.patch213
1 files changed, 213 insertions, 0 deletions
diff --git a/os/emscripten/emsdk-liblzma.patch b/os/emscripten/emsdk-liblzma.patch
new file mode 100644
index 000000000..103adae0c
--- /dev/null
+++ b/os/emscripten/emsdk-liblzma.patch
@@ -0,0 +1,213 @@
+From 90dd4d4c6b1cedec338ff5b375fffca93700f7bc Mon Sep 17 00:00:00 2001
+From: milek7 <me@milek7.pl>
+Date: Tue, 8 Dec 2020 01:03:31 +0100
+Subject: [PATCH] Add liblzma port
+
+---
+Source: https://github.com/emscripten-core/emscripten/pull/12990
+
+Modifed by OpenTTD to have the bare minimum needed to work. Otherwise there
+are constantly conflicts when trying to apply this patch to different versions
+of emsdk.
+
+diff --git a/embuilder.py b/embuilder.py
+index 818262190ed..ab7d5adb7b2 100755
+--- a/embuilder.py
++++ b/embuilder.py
+@@ -60,6 +60,7 @@
+ 'harfbuzz',
+ 'icu',
+ 'libjpeg',
++ 'liblzma',
+ 'libpng',
+ 'ogg',
+ 'regal',
+@@ -197,6 +198,8 @@ def main():
+ build_port('ogg', libname('libogg'))
+ elif what == 'libjpeg':
+ build_port('libjpeg', libname('libjpeg'))
++ elif what == 'liblzma':
++ build_port('liblzma', libname('liblzma'))
+ elif what == 'libpng':
+ build_port('libpng', libname('libpng'))
+ elif what == 'sdl2':
+diff --git a/src/settings.js b/src/settings.js
+index 61cd98939ba..be6fcb678c6 100644
+--- a/src/settings.js
++++ b/src/settings.js
+@@ -1197,6 +1197,9 @@ var USE_BZIP2 = 0;
+ // 1 = use libjpeg from emscripten-ports
+ var USE_LIBJPEG = 0;
+
++// 1 = use liblzma from emscripten-ports
++var USE_LIBLZMA = 0;
++
+ // 1 = use libpng from emscripten-ports
+ var USE_LIBPNG = 0;
+
+diff --git a/tools/ports/liblzma.py b/tools/ports/liblzma.py
+new file mode 100644
+index 00000000000..e9567ef36ff
+--- /dev/null
++++ b/tools/ports/liblzma.py
+@@ -0,0 +1,160 @@
++# Copyright 2020 The Emscripten Authors. All rights reserved.
++# Emscripten is available under two separate licenses, the MIT license and the
++# University of Illinois/NCSA Open Source License. Both these licenses can be
++# found in the LICENSE file.
++
++import os
++import shutil
++
++VERSION = '5.2.5'
++HASH = '7443674247deda2935220fbc4dfc7665e5bb5a260be8ad858c8bd7d7b9f0f868f04ea45e62eb17c0a5e6a2de7c7500ad2d201e2d668c48ca29bd9eea5a73a3ce'
++
++
++def needed(settings):
++ return settings.USE_LIBLZMA
++
++
++def get(ports, settings, shared):
++ libname = ports.get_lib_name('liblzma')
++ ports.fetch_project('liblzma', 'https://tukaani.org/xz/xz-' + VERSION + '.tar.gz', 'xz-' + VERSION, sha512hash=HASH)
++
++ def create():
++ ports.clear_project_build('liblzma')
++
++ source_path = os.path.join(ports.get_dir(), 'liblzma', 'xz-' + VERSION)
++ dest_path = os.path.join(ports.get_build_dir(), 'liblzma')
++
++ shared.try_delete(dest_path)
++ os.makedirs(dest_path)
++ shutil.rmtree(dest_path, ignore_errors=True)
++ shutil.copytree(source_path, dest_path)
++
++ build_flags = ['-DHAVE_CONFIG_H', '-DTUKLIB_SYMBOL_PREFIX=lzma_', '-fvisibility=hidden']
++ exclude_dirs = ['xzdec', 'xz', 'lzmainfo']
++ exclude_files = ['crc32_small.c', 'crc64_small.c', 'crc32_tablegen.c', 'crc64_tablegen.c', 'price_tablegen.c', 'fastpos_tablegen.c'
++ 'tuklib_exit.c', 'tuklib_mbstr_fw.c', 'tuklib_mbstr_width.c', 'tuklib_open_stdxxx.c', 'tuklib_progname.c']
++ include_dirs_rel = ['../common', 'api', 'common', 'check', 'lz', 'rangecoder', 'lzma', 'delta', 'simple']
++
++ open(os.path.join(dest_path, 'src', 'config.h'), 'w').write(config_h)
++
++ final = os.path.join(dest_path, libname)
++ include_dirs = [os.path.join(dest_path, 'src', 'liblzma', p) for p in include_dirs_rel]
++ ports.build_port(os.path.join(dest_path, 'src'), final, flags=build_flags, exclude_dirs=exclude_dirs, exclude_files=exclude_files, includes=include_dirs)
++
++ ports.install_headers(os.path.join(dest_path, 'src', 'liblzma', 'api'), 'lzma.h')
++ ports.install_headers(os.path.join(dest_path, 'src', 'liblzma', 'api', 'lzma'), '*.h', 'lzma')
++
++ return final
++
++ return [shared.Cache.get(libname, create, what='port')]
++
++
++def clear(ports, settings, shared):
++ shared.Cache.erase_file(ports.get_lib_name('liblzma'))
++
++
++def process_args(ports):
++ return []
++
++
++def show():
++ return 'liblzma (USE_LIBLZMA=1; public domain)'
++
++
++config_h = r'''
++#define ASSUME_RAM 128
++#define ENABLE_NLS 1
++#define HAVE_CHECK_CRC32 1
++#define HAVE_CHECK_CRC64 1
++#define HAVE_CHECK_SHA256 1
++#define HAVE_CLOCK_GETTIME 1
++#define HAVE_DCGETTEXT 1
++#define HAVE_DECL_CLOCK_MONOTONIC 1
++#define HAVE_DECL_PROGRAM_INVOCATION_NAME 1
++#define HAVE_DECODERS 1
++#define HAVE_DECODER_ARM 1
++#define HAVE_DECODER_ARMTHUMB 1
++#define HAVE_DECODER_DELTA 1
++#define HAVE_DECODER_IA64 1
++#define HAVE_DECODER_LZMA1 1
++#define HAVE_DECODER_LZMA2 1
++#define HAVE_DECODER_POWERPC 1
++#define HAVE_DECODER_SPARC 1
++#define HAVE_DECODER_X86 1
++#define HAVE_DLFCN_H 1
++#define HAVE_ENCODERS 1
++#define HAVE_ENCODER_ARM 1
++#define HAVE_ENCODER_ARMTHUMB 1
++#define HAVE_ENCODER_DELTA 1
++#define HAVE_ENCODER_IA64 1
++#define HAVE_ENCODER_LZMA1 1
++#define HAVE_ENCODER_LZMA2 1
++#define HAVE_ENCODER_POWERPC 1
++#define HAVE_ENCODER_SPARC 1
++#define HAVE_ENCODER_X86 1
++#define HAVE_FCNTL_H 1
++#define HAVE_FUTIMENS 1
++#define HAVE_GETOPT_H 1
++#define HAVE_GETOPT_LONG 1
++#define HAVE_GETTEXT 1
++#define HAVE_IMMINTRIN_H 1
++#define HAVE_INTTYPES_H 1
++#define HAVE_LIMITS_H 1
++#define HAVE_MBRTOWC 1
++#define HAVE_MEMORY_H 1
++#define HAVE_MF_BT2 1
++#define HAVE_MF_BT3 1
++#define HAVE_MF_BT4 1
++#define HAVE_MF_HC3 1
++#define HAVE_MF_HC4 1
++#define HAVE_OPTRESET 1
++#define HAVE_POSIX_FADVISE 1
++#define HAVE_PTHREAD_CONDATTR_SETCLOCK 1
++#define HAVE_PTHREAD_PRIO_INHERIT 1
++#define HAVE_STDBOOL_H 1
++#define HAVE_STDINT_H 1
++#define HAVE_STDLIB_H 1
++#define HAVE_STRINGS_H 1
++#define HAVE_STRING_H 1
++#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1
++#define HAVE_SYS_PARAM_H 1
++#define HAVE_SYS_STAT_H 1
++#define HAVE_SYS_TIME_H 1
++#define HAVE_SYS_TYPES_H 1
++#define HAVE_UINTPTR_T 1
++#define HAVE_UNISTD_H 1
++#define HAVE_VISIBILITY 1
++#define HAVE_WCWIDTH 1
++#define HAVE__BOOL 1
++#define HAVE___BUILTIN_ASSUME_ALIGNED 1
++#define HAVE___BUILTIN_BSWAPXX 1
++#define MYTHREAD_POSIX 1
++#define NDEBUG 1
++#define PACKAGE "xz"
++#define PACKAGE_BUGREPORT "lasse.collin@tukaani.org"
++#define PACKAGE_NAME "XZ Utils"
++#define PACKAGE_STRING "XZ Utils 5.2.5"
++#define PACKAGE_TARNAME "xz"
++#define PACKAGE_VERSION "5.2.5"
++#define SIZEOF_SIZE_T 4
++#define STDC_HEADERS 1
++#define TUKLIB_CPUCORES_SYSCONF 1
++#define TUKLIB_FAST_UNALIGNED_ACCESS 1
++#define TUKLIB_PHYSMEM_SYSCONF 1
++#ifndef _ALL_SOURCE
++# define _ALL_SOURCE 1
++#endif
++#ifndef _GNU_SOURCE
++# define _GNU_SOURCE 1
++#endif
++#ifndef _POSIX_PTHREAD_SEMANTICS
++# define _POSIX_PTHREAD_SEMANTICS 1
++#endif
++#ifndef _TANDEM_SOURCE
++# define _TANDEM_SOURCE 1
++#endif
++#ifndef __EXTENSIONS__
++# define __EXTENSIONS__ 1
++#endif
++#define VERSION "5.2.5"
++'''