Compare commits
No commits in common. "main" and "r_66" have entirely different histories.
|
@ -0,0 +1,12 @@
|
||||||
|
# These are supported funding model platforms
|
||||||
|
|
||||||
|
github: kiwix # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||||
|
patreon: # Replace with a single Patreon username
|
||||||
|
open_collective: # Replace with a single Open Collective username
|
||||||
|
ko_fi: # Replace with a single Ko-fi username
|
||||||
|
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||||
|
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||||
|
liberapay: # Replace with a single Liberapay username
|
||||||
|
issuehunt: # Replace with a single IssueHunt username
|
||||||
|
otechie: # Replace with a single Otechie username
|
||||||
|
custom: # https://kiwix.org/support-us/
|
|
@ -1,46 +0,0 @@
|
||||||
[DEFAULTS]
|
|
||||||
|
|
||||||
[aqt]
|
|
||||||
concurrency: 4
|
|
||||||
baseurl: https://qt.mirror.constant.com/
|
|
||||||
7zcmd: 7z
|
|
||||||
print_stacktrace_on_error: False
|
|
||||||
always_keep_archives: False
|
|
||||||
archive_download_location: .
|
|
||||||
min_module_size: 41
|
|
||||||
|
|
||||||
[requests]
|
|
||||||
connection_timeout: 3.5
|
|
||||||
response_timeout: 30
|
|
||||||
max_retries_on_connection_error: 5
|
|
||||||
retry_backoff: 0.1
|
|
||||||
max_retries_on_checksum_error: 5
|
|
||||||
max_retries_to_retrieve_hash: 5
|
|
||||||
hash_algorithm: sha256
|
|
||||||
INSECURE_NOT_FOR_PRODUCTION_ignore_hash: False
|
|
||||||
|
|
||||||
[mirrors]
|
|
||||||
trusted_mirrors:
|
|
||||||
https://download.qt.io
|
|
||||||
https://qt.mirror.constant.com/
|
|
||||||
https://ftp.fau.de/qtproject/
|
|
||||||
blacklist:
|
|
||||||
http://mirrors.ocf.berkeley.edu
|
|
||||||
http://mirrors.tuna.tsinghua.edu.cn
|
|
||||||
http://mirrors.geekpie.club
|
|
||||||
fallbacks:
|
|
||||||
https://qtproject.mirror.liquidtelecom.com/
|
|
||||||
https://mirrors.aliyun.com/qt/
|
|
||||||
https://mirrors.ustc.edu.cn/qtproject/
|
|
||||||
https://ftp.jaist.ac.jp/pub/qtproject/
|
|
||||||
https://ftp.yz.yamagata-u.ac.jp/pub/qtproject/
|
|
||||||
https://qt-mirror.dannhauer.de/
|
|
||||||
https://ftp.fau.de/qtproject/
|
|
||||||
https://mirror.netcologne.de/qtproject/
|
|
||||||
https://mirrors.dotsrc.org/qtproject/
|
|
||||||
https://www.nic.funet.fi/pub/mirrors/download.qt-project.org/
|
|
||||||
https://master.qt.io/
|
|
||||||
https://mirrors.ukfast.co.uk/sites/qt.io/
|
|
||||||
https://ftp2.nluug.nl/languages/qt/
|
|
||||||
https://ftp1.nluug.nl/languages/qt/
|
|
||||||
https://qt.mirror.constant.com/
|
|
|
@ -22,9 +22,9 @@ BUILD_DEF = """
|
||||||
| manylinux | aarch64_mixed | BP | | | | | linux-aarch64-manylinux | |
|
| manylinux | aarch64_mixed | BP | | | | | linux-aarch64-manylinux | |
|
||||||
----------------------------------------------------------------------------------------------------------------------------------------------
|
----------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
# On Windows, we build only libzim for now. And only native_mixed as xapian doesn't compile as dll
|
# On Windows, we build only libzim for now. And only native_mixed as xapian doesn't compile as dll
|
||||||
| windows | native_static | Bd | d | BPd | BPd | | win-x86_64 | win-x86_64-static |
|
| windows | native_static | Bd | d | d | d | | win-x86_64 | win-x86_64-static |
|
||||||
| windows | native_dyn | Bd | | | | | win-x86_64 | win-x86_64-dyn |
|
| windows | native_dyn | Bd | | | | | win-x86_64 | win-x86_64-dyn |
|
||||||
| windows | native_mixed | BPd | d | | | BPd | win-x86_64 | win-x86_64-mixed |
|
| windows | native_mixed | BPd | d | | | Bd | win-x86_64 | win-x86_64-mixed |
|
||||||
----------------------------------------------------------------------------------------------------------------------------------------------
|
----------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
# Osx builds, build binaries on native_dyn and native_static. On anyother things, build only the libraries
|
# Osx builds, build binaries on native_dyn and native_static. On anyother things, build only the libraries
|
||||||
| macos | native_dyn | d | d | dB | B | | | macos-x86_64-dyn |
|
| macos | native_dyn | d | d | dB | B | | | macos-x86_64-dyn |
|
||||||
|
@ -38,33 +38,34 @@ BUILD_DEF = """
|
||||||
| macos | macOS_x86_64 | B | B | | | | | |
|
| macos | macOS_x86_64 | B | B | | | | | |
|
||||||
| macos | apple_all_static | | BP | | | | xcframework | |
|
| macos | apple_all_static | | BP | | | | xcframework | |
|
||||||
----------------------------------------------------------------------------------------------------------------------------------------------
|
----------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
| focal | flatpak | | | | | BP | | |
|
| | flatpak | | | | | BP | | |
|
||||||
| focal | native_static | d | d | dBPSD | dBPSD | | linux-x86_64 | linux-x86_64-static |
|
| | native_static | d | d | dBPSD | dBPSD | | linux-x86_64 | linux-x86_64-static |
|
||||||
| focal | native_mixed | BPS | BPS | | | | linux-x86_64 | |
|
| | native_mixed | BPS | BPS | | | | linux-x86_64 | |
|
||||||
| focal | native_dyn | d | d | dB | dB | | | linux-x86_64-dyn |
|
| | native_dyn | d | d | dB | dB | dBPS | | linux-x86_64-dyn |
|
||||||
| jammy | native_dyn | | | | | dBPS | | linux-x86_64-dyn |
|
|
||||||
# libzim CI is building alpine_dyn but not us
|
# libzim CI is building alpine_dyn but not us
|
||||||
| focal | android_arm | dBP | dBP | | | | android-arm | android-arm |
|
| | android_arm | dBP | dBP | | | | android-arm | android-arm |
|
||||||
| focal | android_arm64 | dBP | dBP | | | | android-arm64 | android-arm64 |
|
| | android_arm64 | dBP | dBP | | | | android-arm64 | android-arm64 |
|
||||||
| focal | android_x86 | BP | BP | | | | android-x86 | |
|
| | android_x86 | BP | BP | | | | android-x86 | |
|
||||||
| focal | android_x86_64 | BP | BP | | | | android-x86_64 | |
|
| | android_x86_64 | BP | BP | | | | android-x86_64 | |
|
||||||
| focal | armv6_static | | | BP | BP | | linux-armv6 | |
|
| | armv6_static | | | BP | BP | | linux-armv6 | |
|
||||||
| focal | armv6_mixed | BP | | | | | linux-armv6 | |
|
| | armv6_mixed | BP | | | | | linux-armv6 | |
|
||||||
| focal | armv6_dyn | | | B | B | | | |
|
| | armv6_dyn | | | B | B | | | |
|
||||||
| focal | armv8_static | | | BP | BP | | linux-armv8 | |
|
| | armv8_static | | | BP | BP | | linux-armv8 | |
|
||||||
| focal | armv8_mixed | BP | | | | | linux-armv8 | |
|
| | armv8_mixed | BP | | | | | linux-armv8 | |
|
||||||
| focal | armv8_dyn | | | B | B | | | |
|
| | armv8_dyn | | | B | B | | | |
|
||||||
| focal | aarch64_static | | | BP | BP | | linux-aarch64 | |
|
| | aarch64_static | | | BP | BP | | linux-aarch64 | |
|
||||||
| focal | aarch64_mixed | BP | | | | | linux-aarch64 | |
|
| | aarch64_mixed | BP | | | | | linux-aarch64 | |
|
||||||
| focal | aarch64_dyn | d | | B | B | | | linux-aarch64-dyn |
|
| | aarch64_dyn | d | | B | B | | | linux-aarch64-dyn |
|
||||||
| focal | aarch64_musl_static| | | BP | BP | | linux-aarch64-musl | |
|
| | aarch64_musl_static| | | BP | BP | | linux-aarch64-musl | |
|
||||||
| focal | aarch64_musl_mixed | BP | | | | | linux-aarch64-musl | |
|
| | aarch64_musl_mixed | BP | | | | | linux-aarch64-musl | |
|
||||||
| focal | aarch64_musl_dyn | d | | B | B | | | linux-aarch64-musl-dyn |
|
| | aarch64_musl_dyn | d | | B | B | | | linux-aarch64-musl-dyn |
|
||||||
| focal | x86-64_musl_static | | | BP | BP | | linux-x86_64-musl | |
|
| | x86-64_musl_static | | | BP | BP | | linux-x86_64-musl | |
|
||||||
| focal | x86-64_musl_mixed | BP | | | | | linux-x86_64-musl | |
|
| | x86-64_musl_mixed | BP | | | | | linux-x86_64-musl | |
|
||||||
| focal | i586_static | | | BP | BP | | linux-i586 | |
|
| | win32_static | d | dB | dBP | dBP | | win-i686 |win32-static |
|
||||||
| focal | i586_dyn | | | B | B | | | |
|
| | win32_dyn | d | dB | dB | dB | | |win32-dyn |
|
||||||
| focal | wasm | dBP | | | | | wasm-emscripten | wasm |
|
| | i586_static | | | BP | BP | | linux-i586 | |
|
||||||
|
| | i586_dyn | | | B | B | | | |
|
||||||
|
| | wasm | dBP | | | | | wasm-emscripten | wasm |
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -21,15 +21,16 @@ from common import (
|
||||||
from build_definition import select_build_targets, BUILD, PUBLISH, SOURCE_PUBLISH
|
from build_definition import select_build_targets, BUILD, PUBLISH, SOURCE_PUBLISH
|
||||||
|
|
||||||
|
|
||||||
def release_filter(project):
|
|
||||||
return release_versions.get(project) is not None
|
|
||||||
|
|
||||||
|
|
||||||
# Filter what to build if we are doing a release.
|
# Filter what to build if we are doing a release.
|
||||||
TARGETS = select_build_targets(PUBLISH)
|
|
||||||
|
|
||||||
if MAKE_RELEASE:
|
if MAKE_RELEASE:
|
||||||
|
TARGETS = select_build_targets(PUBLISH)
|
||||||
|
|
||||||
|
def release_filter(project):
|
||||||
|
return release_versions.get(project) is not None
|
||||||
|
|
||||||
TARGETS = tuple(filter(release_filter, TARGETS))
|
TARGETS = tuple(filter(release_filter, TARGETS))
|
||||||
|
else:
|
||||||
|
TARGETS = select_build_targets(BUILD)
|
||||||
|
|
||||||
for target in TARGETS:
|
for target in TARGETS:
|
||||||
run_kiwix_build(target, config=COMPILE_CONFIG, make_release=MAKE_RELEASE)
|
run_kiwix_build(target, config=COMPILE_CONFIG, make_release=MAKE_RELEASE)
|
||||||
|
|
|
@ -46,10 +46,8 @@ default_tmp_dir = os.getenv("TEMP") if platform.system() == "Windows" else "/tmp
|
||||||
TMP_DIR = Path(os.getenv("TMP_DIR", default_tmp_dir))
|
TMP_DIR = Path(os.getenv("TMP_DIR", default_tmp_dir))
|
||||||
if platform.system() == "Windows":
|
if platform.system() == "Windows":
|
||||||
KBUILD_SOURCE_DIR = Path(_environ["GITHUB_WORKSPACE"])
|
KBUILD_SOURCE_DIR = Path(_environ["GITHUB_WORKSPACE"])
|
||||||
BIN_EXT = ".exe"
|
|
||||||
else:
|
else:
|
||||||
KBUILD_SOURCE_DIR = HOME / "kiwix-build"
|
KBUILD_SOURCE_DIR = HOME / "kiwix-build"
|
||||||
BIN_EXT = ""
|
|
||||||
|
|
||||||
|
|
||||||
_ref = _environ.get("GITHUB_REF", "").split("/")[-1]
|
_ref = _environ.get("GITHUB_REF", "").split("/")[-1]
|
||||||
|
@ -64,19 +62,13 @@ else:
|
||||||
FLATPAK_HTTP_GIT_REMOTE = "https://github.com/flathub/org.kiwix.desktop.git"
|
FLATPAK_HTTP_GIT_REMOTE = "https://github.com/flathub/org.kiwix.desktop.git"
|
||||||
FLATPAK_GIT_REMOTE = "git@github.com:flathub/org.kiwix.desktop.git"
|
FLATPAK_GIT_REMOTE = "git@github.com:flathub/org.kiwix.desktop.git"
|
||||||
|
|
||||||
|
BIN_EXT = ".exe" if COMPILE_CONFIG.startswith("win32_") else ""
|
||||||
|
|
||||||
|
|
||||||
def major_version(version: str) -> str:
|
def major_version(version: str) -> str:
|
||||||
return version.split(".")[0]
|
return version.split(".")[0]
|
||||||
|
|
||||||
|
|
||||||
# Depending of base distribution, libraries are in "lib64" (redhat base) or "lib/<arch>" (debian base).
|
|
||||||
# On top of that, when cross-compiling, libraries are always put in `lib/<arch>`.
|
|
||||||
# As we use this as glob regex to select which files to add to archive, this is not a problem to have both.
|
|
||||||
def lib_prefix(file):
|
|
||||||
yield "lib64/" + file
|
|
||||||
yield "lib/*/" + file
|
|
||||||
|
|
||||||
|
|
||||||
# We have build everything. Now create archives for public deployement.
|
# We have build everything. Now create archives for public deployement.
|
||||||
EXPORT_FILES = {
|
EXPORT_FILES = {
|
||||||
"kiwix-tools": (
|
"kiwix-tools": (
|
||||||
|
@ -105,25 +97,18 @@ EXPORT_FILES = {
|
||||||
"libzim": (
|
"libzim": (
|
||||||
INSTALL_DIR,
|
INSTALL_DIR,
|
||||||
(
|
(
|
||||||
## Linux
|
|
||||||
# We need to package all dependencies (`*.a`) on wasm
|
# We need to package all dependencies (`*.a`) on wasm
|
||||||
*lib_prefix("libzim.a" if COMPILE_CONFIG != "wasm" else "*.a"),
|
"lib/*/libzim.a" if COMPILE_CONFIG != "wasm" else "lib/*.a",
|
||||||
*lib_prefix("libzim.so"),
|
"lib/*/libzim.so",
|
||||||
*lib_prefix(
|
"lib/*/libzim.so.{version}".format(version=main_project_versions["libzim"]),
|
||||||
"libzim.so.{version}".format(version=main_project_versions["libzim"])
|
"lib/*/libzim.so.{version}".format(
|
||||||
|
version=major_version(main_project_versions["libzim"])
|
||||||
),
|
),
|
||||||
*lib_prefix(
|
|
||||||
"libzim.so.{version}".format(
|
|
||||||
version=major_version(main_project_versions["libzim"])
|
|
||||||
)
|
|
||||||
),
|
|
||||||
## MacOS
|
|
||||||
"lib/libzim.{}.dylib".format(
|
"lib/libzim.{}.dylib".format(
|
||||||
major_version(main_project_versions["libzim"])
|
major_version(main_project_versions["libzim"])
|
||||||
),
|
),
|
||||||
"lib/libzim.dylib",
|
"lib/libzim.dylib",
|
||||||
"lib/*/libzim.pc",
|
"lib/*/libzim.pc",
|
||||||
## Windows
|
|
||||||
"bin/zim-{version}.dll".format(
|
"bin/zim-{version}.dll".format(
|
||||||
version=major_version(main_project_versions["libzim"])
|
version=major_version(main_project_versions["libzim"])
|
||||||
),
|
),
|
||||||
|
@ -132,7 +117,6 @@ EXPORT_FILES = {
|
||||||
version=major_version(main_project_versions["libzim"])
|
version=major_version(main_project_versions["libzim"])
|
||||||
),
|
),
|
||||||
"lib/zim.lib",
|
"lib/zim.lib",
|
||||||
## Includes and others
|
|
||||||
"include/zim/**/*.h",
|
"include/zim/**/*.h",
|
||||||
"share/icu/{}/icudt{}l.dat".format(
|
"share/icu/{}/icudt{}l.dat".format(
|
||||||
base_deps_versions["icu4c"], major_version(base_deps_versions["icu4c"])
|
base_deps_versions["icu4c"], major_version(base_deps_versions["icu4c"])
|
||||||
|
@ -153,14 +137,7 @@ EXPORT_FILES = {
|
||||||
"lib/libkiwix.{}.dylib".format(
|
"lib/libkiwix.{}.dylib".format(
|
||||||
major_version(main_project_versions["libkiwix"])
|
major_version(main_project_versions["libkiwix"])
|
||||||
),
|
),
|
||||||
"bin/kiwix-{version}.dll".format(
|
|
||||||
version=major_version(main_project_versions["libkiwix"])
|
|
||||||
),
|
|
||||||
"bin/icu*.dll",
|
"bin/icu*.dll",
|
||||||
"bin/kiwix-{version}.pdb".format(
|
|
||||||
version=major_version(main_project_versions["libkiwix"])
|
|
||||||
),
|
|
||||||
"lib/kiwix.lib",
|
|
||||||
"lib/libkiwix.dylib",
|
"lib/libkiwix.dylib",
|
||||||
"lib/*/libkiwix.pc",
|
"lib/*/libkiwix.pc",
|
||||||
"include/kiwix/**/*.h",
|
"include/kiwix/**/*.h",
|
||||||
|
@ -310,10 +287,7 @@ except ModuleNotFoundError:
|
||||||
else:
|
else:
|
||||||
port = "22"
|
port = "22"
|
||||||
|
|
||||||
# Using SFTP to create the directory hierarchy because we can not
|
# sending SFTP mkdir command to the sftp interactive mode and not batch (-b) mode
|
||||||
# use SSH (no shell for this user); and then scp to upload the file.
|
|
||||||
#
|
|
||||||
# Sending SFTP mkdir command to the SFTP interactive mode and not batch (-b) mode
|
|
||||||
# as the latter would exit on any mkdir error while it is most likely
|
# as the latter would exit on any mkdir error while it is most likely
|
||||||
# the first parts of the destination is already present and thus can't be created
|
# the first parts of the destination is already present and thus can't be created
|
||||||
sftp_commands = "\n".join(
|
sftp_commands = "\n".join(
|
||||||
|
@ -324,8 +298,6 @@ except ModuleNotFoundError:
|
||||||
)
|
)
|
||||||
command = [
|
command = [
|
||||||
"sftp",
|
"sftp",
|
||||||
"-c",
|
|
||||||
"aes128-ctr",
|
|
||||||
"-i",
|
"-i",
|
||||||
_environ.get("SSH_KEY"),
|
_environ.get("SSH_KEY"),
|
||||||
"-P",
|
"-P",
|
||||||
|
@ -461,25 +433,6 @@ def get_postfix(project):
|
||||||
return postfix
|
return postfix
|
||||||
|
|
||||||
|
|
||||||
def sign_binary(path):
|
|
||||||
# We assume here that signtool and certificate are properly configured.
|
|
||||||
# Env var `SIGNTOOL_THUMBPRINT` must contain thumbprint of the certificate to use.
|
|
||||||
command = [
|
|
||||||
os.getenv("SIGNTOOL_PATH", "signtool.exe"),
|
|
||||||
"sign",
|
|
||||||
"/fd",
|
|
||||||
"sha256",
|
|
||||||
"/tr",
|
|
||||||
"http://ts.ssl.com",
|
|
||||||
"/td",
|
|
||||||
"sha256",
|
|
||||||
"/sha1",
|
|
||||||
os.environ["SIGNTOOL_THUMBPRINT"],
|
|
||||||
str(path),
|
|
||||||
]
|
|
||||||
subprocess.run(command, check=True)
|
|
||||||
|
|
||||||
|
|
||||||
def make_archive(project, make_release):
|
def make_archive(project, make_release):
|
||||||
platform_name = get_platform_name()
|
platform_name = get_platform_name()
|
||||||
if not platform_name:
|
if not platform_name:
|
||||||
|
@ -501,12 +454,6 @@ def make_archive(project, make_release):
|
||||||
files_to_archive = []
|
files_to_archive = []
|
||||||
for export_file in export_files:
|
for export_file in export_files:
|
||||||
files_to_archive.extend(base_dir.glob(export_file))
|
files_to_archive.extend(base_dir.glob(export_file))
|
||||||
|
|
||||||
if make_release and platform.system() == "Windows":
|
|
||||||
for file in files_to_archive:
|
|
||||||
if str(file).endswith(".exe"):
|
|
||||||
sign_binary(file)
|
|
||||||
|
|
||||||
if platform_name == "win-i686" or platform.system() == "Windows":
|
if platform_name == "win-i686" or platform.system() == "Windows":
|
||||||
open_archive = lambda a: zipfile.ZipFile(
|
open_archive = lambda a: zipfile.ZipFile(
|
||||||
str(a), "w", compression=zipfile.ZIP_DEFLATED
|
str(a), "w", compression=zipfile.ZIP_DEFLATED
|
||||||
|
@ -542,9 +489,9 @@ def create_desktop_image(make_release):
|
||||||
app_name = "org.kiwix.desktop.{}.flatpak".format(postfix)
|
app_name = "org.kiwix.desktop.{}.flatpak".format(postfix)
|
||||||
print_message("archive is {}", build_path)
|
print_message("archive is {}", build_path)
|
||||||
elif platform.system() == "Windows":
|
elif platform.system() == "Windows":
|
||||||
archive_basename = "kiwix-desktop_windows_x64_{}".format(postfix)
|
archive_basename = "Kiwix-{}-win-amd64".format(postfix)
|
||||||
working_dir = INSTALL_DIR / archive_basename
|
working_dir = INSTALL_DIR / archive_basename
|
||||||
build_path = Path(str(working_dir) + ".zip")
|
build_path = working_dir.with_suffix(".zip")
|
||||||
app_name = build_path.name
|
app_name = build_path.name
|
||||||
command = [
|
command = [
|
||||||
"python",
|
"python",
|
||||||
|
@ -595,7 +542,7 @@ def update_flathub_git():
|
||||||
call(command)
|
call(command)
|
||||||
shutil.copy(str(BASE_DIR / "org.kiwix.desktop.json"), str(git_repo_dir))
|
shutil.copy(str(BASE_DIR / "org.kiwix.desktop.json"), str(git_repo_dir))
|
||||||
patch_dir = KBUILD_SOURCE_DIR / "kiwixbuild" / "patches"
|
patch_dir = KBUILD_SOURCE_DIR / "kiwixbuild" / "patches"
|
||||||
for dep in ["pugixml", "libmicrohttpd"]:
|
for dep in ["pugixml"]:
|
||||||
for f in patch_dir.glob("{}_*.patch".format(dep)):
|
for f in patch_dir.glob("{}_*.patch".format(dep)):
|
||||||
shutil.copy(str(f), str(git_repo_dir / "patches"))
|
shutil.copy(str(f), str(git_repo_dir / "patches"))
|
||||||
command = ["git", "add", "-A", "."]
|
command = ["git", "add", "-A", "."]
|
||||||
|
|
|
@ -15,7 +15,6 @@ from common import (
|
||||||
HOME,
|
HOME,
|
||||||
COMPILE_CONFIG,
|
COMPILE_CONFIG,
|
||||||
OS_NAME,
|
OS_NAME,
|
||||||
MAKE_RELEASE,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -33,40 +32,29 @@ def download_base_archive(base_name):
|
||||||
return file_path
|
return file_path
|
||||||
|
|
||||||
|
|
||||||
def get_archive_name():
|
ARCHIVE_NAME_TEMPLATE = "base_deps_{os}_{config}_{version}.tar.gz"
|
||||||
ARCHIVE_NAME_TEMPLATE = "base_deps_{os}_{config}_{version}.tar.gz"
|
|
||||||
|
|
||||||
if COMPILE_CONFIG == "flatpak":
|
if COMPILE_CONFIG == "flatpak":
|
||||||
return "base_deps_flatpak.tar.gz"
|
base_dep_archive_name = "base_deps_flatpak.tar.gz"
|
||||||
|
else:
|
||||||
return ARCHIVE_NAME_TEMPLATE.format(
|
base_dep_archive_name = ARCHIVE_NAME_TEMPLATE.format(
|
||||||
os=OS_NAME,
|
os=OS_NAME,
|
||||||
config=COMPILE_CONFIG,
|
config=COMPILE_CONFIG,
|
||||||
version=base_deps_meta_version,
|
version=base_deps_meta_version,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
print_message("Getting archive {}", base_dep_archive_name)
|
||||||
def main():
|
try:
|
||||||
base_dep_archive_name = get_archive_name()
|
local_filename = download_base_archive(base_dep_archive_name)
|
||||||
print_message("Getting archive {}", base_dep_archive_name)
|
with tarfile.open(local_filename) as f:
|
||||||
try:
|
f.extractall(str(HOME))
|
||||||
local_filename = download_base_archive(base_dep_archive_name)
|
os.remove(str(local_filename))
|
||||||
with tarfile.open(local_filename) as f:
|
except URLError:
|
||||||
f.extractall(str(HOME))
|
if COMPILE_CONFIG == "flatpak":
|
||||||
os.remove(str(local_filename))
|
print_message("Cannot get archive. Move on")
|
||||||
except URLError:
|
|
||||||
if COMPILE_CONFIG == "flatpak":
|
|
||||||
print_message("Cannot get archive. Move on")
|
|
||||||
else:
|
|
||||||
print_message("Cannot get archive. Build dependencies")
|
|
||||||
run_kiwix_build("alldependencies", config=COMPILE_CONFIG)
|
|
||||||
archive_file = make_deps_archive(name=base_dep_archive_name, full=True)
|
|
||||||
upload(archive_file, "ci@tmp.kiwix.org:30022", "/data/tmp/ci")
|
|
||||||
os.remove(str(archive_file))
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
if MAKE_RELEASE:
|
|
||||||
print_message("We are building release. Don't download deps archive.")
|
|
||||||
else:
|
else:
|
||||||
main()
|
print_message("Cannot get archive. Build dependencies")
|
||||||
|
run_kiwix_build("alldependencies", config=COMPILE_CONFIG)
|
||||||
|
archive_file = make_deps_archive(name=base_dep_archive_name, full=True)
|
||||||
|
upload(archive_file, "ci@tmp.kiwix.org:30022", "/data/tmp/ci")
|
||||||
|
os.remove(str(archive_file))
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
daysUntilClose: false
|
||||||
|
staleLabel: stale
|
||||||
|
|
||||||
|
issues:
|
||||||
|
daysUntilStale: 60
|
||||||
|
markComment: >
|
||||||
|
This issue has been automatically marked as stale because it has not had
|
||||||
|
recent activity. It will be now be reviewed manually. Thank you
|
||||||
|
for your contributions.
|
||||||
|
pulls:
|
||||||
|
daysUntilStale: 7
|
||||||
|
markComment: >
|
||||||
|
This pull request has been automatically marked as stale because it has not had
|
||||||
|
recent activity. It will be now be reviewed manually. Thank you
|
||||||
|
for your contributions.
|
|
@ -21,9 +21,9 @@ jobs:
|
||||||
HOME: 'C:\\Users\\runneradmin'
|
HOME: 'C:\\Users\\runneradmin'
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v3
|
||||||
- name: Setup python 3.12
|
- name: Setup python 3.12
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v3
|
||||||
with:
|
with:
|
||||||
python-version: '3.12'
|
python-version: '3.12'
|
||||||
- name: Install packages
|
- name: Install packages
|
||||||
|
@ -35,14 +35,11 @@ jobs:
|
||||||
pip3 install meson pytest requests distro paramiko
|
pip3 install meson pytest requests distro paramiko
|
||||||
pip3 install --no-deps $GITHUB_WORKSPACE
|
pip3 install --no-deps $GITHUB_WORKSPACE
|
||||||
- name: Install QT
|
- name: Install QT
|
||||||
if: ${{ matrix.config == 'native_mixed' }}
|
|
||||||
uses: jurplel/install-qt-action@v4
|
uses: jurplel/install-qt-action@v4
|
||||||
with:
|
with:
|
||||||
version: 6.4.3
|
version: 5.15.2
|
||||||
modules: "qtwebengine qtwebchannel qtpositioning"
|
modules: "qtwebengine"
|
||||||
setup-python: false
|
setup-python: false
|
||||||
env:
|
|
||||||
AQT_CONFIG: ${{ github.workspace }}/.github/configs/aqt.ini
|
|
||||||
- name: Setup MSVC compiler
|
- name: Setup MSVC compiler
|
||||||
uses: bus1/cabuild/action/msdevshell@v1
|
uses: bus1/cabuild/action/msdevshell@v1
|
||||||
with:
|
with:
|
||||||
|
@ -110,15 +107,16 @@ jobs:
|
||||||
image_variant: manylinux
|
image_variant: manylinux
|
||||||
- config: aarch64_mixed
|
- config: aarch64_mixed
|
||||||
image_variant: manylinux
|
image_variant: manylinux
|
||||||
- config: native_dyn
|
- config: win32_static
|
||||||
image_variant: jammy
|
image_variant: f35
|
||||||
|
- config: win32_dyn
|
||||||
|
image_variant: f35
|
||||||
env:
|
env:
|
||||||
HOME: /home/runner
|
HOME: /home/runner
|
||||||
SSH_KEY: /tmp/id_rsa
|
SSH_KEY: /tmp/id_rsa
|
||||||
OS_NAME: ${{matrix.image_variant}}
|
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
container:
|
container:
|
||||||
image: "ghcr.io/kiwix/kiwix-build_ci_${{matrix.image_variant}}:2024-11-30"
|
image: "ghcr.io/kiwix/kiwix-build_ci_${{matrix.image_variant}}:2024-06-03"
|
||||||
options: "--device /dev/fuse --privileged"
|
options: "--device /dev/fuse --privileged"
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
|
@ -242,7 +240,7 @@ jobs:
|
||||||
python-version: '3.10'
|
python-version: '3.10'
|
||||||
- name: Install packages
|
- name: Install packages
|
||||||
run:
|
run:
|
||||||
brew install automake # ninja
|
brew install pkg-config ninja automake autoconf
|
||||||
- name: Install python modules
|
- name: Install python modules
|
||||||
run: |
|
run: |
|
||||||
pip3 install meson pytest requests distro paramiko
|
pip3 install meson pytest requests distro paramiko
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
name: CD
|
name: Release&Nigthly
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
tags:
|
tags:
|
||||||
- r_[0-9]+
|
- r_[0-9]+
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '0 3 * * *'
|
- cron: '0 1 * * *'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
Windows:
|
Windows:
|
||||||
|
@ -23,9 +23,9 @@ jobs:
|
||||||
HOME: 'C:\\Users\\runneradmin'
|
HOME: 'C:\\Users\\runneradmin'
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v3
|
||||||
- name: Setup python 3.12
|
- name: Setup python 3.12
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v3
|
||||||
with:
|
with:
|
||||||
python-version: '3.12'
|
python-version: '3.12'
|
||||||
- name: Install packages
|
- name: Install packages
|
||||||
|
@ -37,14 +37,11 @@ jobs:
|
||||||
pip3 install meson pytest requests distro paramiko
|
pip3 install meson pytest requests distro paramiko
|
||||||
pip3 install --no-deps $GITHUB_WORKSPACE
|
pip3 install --no-deps $GITHUB_WORKSPACE
|
||||||
- name: Install QT
|
- name: Install QT
|
||||||
if: ${{ matrix.config == 'native_mixed' }}
|
|
||||||
uses: jurplel/install-qt-action@v4
|
uses: jurplel/install-qt-action@v4
|
||||||
with:
|
with:
|
||||||
version: 5.15.2
|
version: 5.15.2
|
||||||
modules: "qtwebengine"
|
modules: "qtwebengine"
|
||||||
setup-python: false
|
setup-python: false
|
||||||
env:
|
|
||||||
AQT_CONFIG: ${{ github.workspace }}/.github/configs/aqt.ini
|
|
||||||
- name: Setup MSVC compiler
|
- name: Setup MSVC compiler
|
||||||
uses: bus1/cabuild/action/msdevshell@v1
|
uses: bus1/cabuild/action/msdevshell@v1
|
||||||
with:
|
with:
|
||||||
|
@ -55,37 +52,6 @@ jobs:
|
||||||
echo "${{secrets.ssh_key}}" > $SSH_KEY
|
echo "${{secrets.ssh_key}}" > $SSH_KEY
|
||||||
env:
|
env:
|
||||||
SSH_KEY: ${{ runner.temp }}/id_rsa
|
SSH_KEY: ${{ runner.temp }}/id_rsa
|
||||||
- name: Install and configure eSigner CKA and Windows SDK
|
|
||||||
if: github.event_name == 'push'
|
|
||||||
env:
|
|
||||||
ESIGNER_URL: https://github.com/SSLcom/eSignerCKA/releases/download/v1.0.7/SSL.COM-eSigner-CKA_1.0.7.zip
|
|
||||||
run: |
|
|
||||||
Set-StrictMode -Version 'Latest'
|
|
||||||
|
|
||||||
# Download and Unzip eSignerCKA Setup
|
|
||||||
Invoke-WebRequest -OutFile eSigner_CKA_Setup.zip "$env:ESIGNER_URL"
|
|
||||||
Expand-Archive -Force eSigner_CKA_Setup.zip
|
|
||||||
Remove-Item eSigner_CKA_Setup.zip
|
|
||||||
Move-Item -Destination “eSigner_CKA_Installer.exe” -Path “eSigner_CKA_*\*.exe”
|
|
||||||
|
|
||||||
# Install eSignerCKA
|
|
||||||
New-Item -ItemType Directory -Force -Path "C:\esigner"
|
|
||||||
./eSigner_CKA_Installer.exe /CURRENTUSER /VERYSILENT /SUPPRESSMSGBOXES /DIR=”C:\esigner” /TYPE=automatic | Out-Null
|
|
||||||
Remove-Item "eSigner_CKA_Installer.exe"
|
|
||||||
|
|
||||||
# Configure the CKA with SSL.com credentials
|
|
||||||
C:\esigner\eSignerCKATool.exe config -mode product -user "${{ secrets.ESIGNER_USERNAME }}" -pass "${{ secrets.ESIGNER_PASSWORD }}" -totp "${{ secrets.ESIGNER_TOTP_SECRET }}" -key "C:\esigner\master.key" -r
|
|
||||||
C:\esigner\eSignerCKATool.exe unload
|
|
||||||
C:\esigner\eSignerCKATool.exe load
|
|
||||||
|
|
||||||
# Find certificate
|
|
||||||
$CodeSigningCert = Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert | Select-Object -First 1
|
|
||||||
echo Certificate: $CodeSigningCert
|
|
||||||
|
|
||||||
# Extract thumbprint and subject name
|
|
||||||
$Thumbprint = $CodeSigningCert.Thumbprint
|
|
||||||
echo "SIGNTOOL_THUMBPRINT=$Thumbprint" >> $env:GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Ensure base deps
|
- name: Ensure base deps
|
||||||
run: |
|
run: |
|
||||||
python .github\\scripts\\ensure_base_deps.py
|
python .github\\scripts\\ensure_base_deps.py
|
||||||
|
@ -95,7 +61,6 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
python .github\\scripts\\build_release_nightly.py
|
python .github\\scripts\\build_release_nightly.py
|
||||||
env:
|
env:
|
||||||
SIGNTOOL_PATH: "C:/Program Files (x86)/Windows Kits/10/bin/10.0.22621.0/x86/signtool.exe"
|
|
||||||
SSH_KEY: ${{ runner.temp }}/id_rsa
|
SSH_KEY: ${{ runner.temp }}/id_rsa
|
||||||
- name: Upload failure logs
|
- name: Upload failure logs
|
||||||
if: failure()
|
if: failure()
|
||||||
|
@ -134,14 +99,14 @@ jobs:
|
||||||
image_variant: manylinux
|
image_variant: manylinux
|
||||||
- config: aarch64_mixed
|
- config: aarch64_mixed
|
||||||
image_variant: manylinux
|
image_variant: manylinux
|
||||||
- config: native_dyn
|
- config: win32_static
|
||||||
image_variant: jammy
|
image_variant: f35
|
||||||
env:
|
env:
|
||||||
HOME: /home/runner
|
HOME: /home/runner
|
||||||
SSH_KEY: /tmp/id_rsa
|
SSH_KEY: /tmp/id_rsa
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
container:
|
container:
|
||||||
image: "ghcr.io/kiwix/kiwix-build_ci_${{matrix.image_variant}}:2024-11-30"
|
image: "ghcr.io/kiwix/kiwix-build_ci_${{matrix.image_variant}}:2024-06-03"
|
||||||
options: "--device /dev/fuse --privileged"
|
options: "--device /dev/fuse --privileged"
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
|
@ -173,9 +138,11 @@ jobs:
|
||||||
kiwix-build/.github/scripts/build_release_nightly.py
|
kiwix-build/.github/scripts/build_release_nightly.py
|
||||||
env:
|
env:
|
||||||
COMPILE_CONFIG: ${{matrix.config}}
|
COMPILE_CONFIG: ${{matrix.config}}
|
||||||
|
BINTRAY_USER: kiwix
|
||||||
|
BINTRAY_PASS: ${{secrets.bintray_pass}}
|
||||||
- name: Upload failure logs
|
- name: Upload failure logs
|
||||||
if: failure()
|
if: failure()
|
||||||
run: $HOME/kiwix-build/.github/scripts/upload_failure_logs.py
|
run: $HOME/kiwix-build/.github/scripts/upload_failure_logs.sh
|
||||||
env:
|
env:
|
||||||
COMPILE_CONFIG: ${{matrix.config}}
|
COMPILE_CONFIG: ${{matrix.config}}
|
||||||
|
|
||||||
|
@ -220,7 +187,7 @@ jobs:
|
||||||
kiwix-build/.github/scripts/build_release_nightly.py
|
kiwix-build/.github/scripts/build_release_nightly.py
|
||||||
- name: Upload failure logs
|
- name: Upload failure logs
|
||||||
if: failure()
|
if: failure()
|
||||||
run: $HOME/kiwix-build/.github/scripts/upload_failure_logs.py
|
run: $HOME/kiwix-build/.github/scripts/upload_failure_logs.sh
|
||||||
|
|
||||||
Macos:
|
Macos:
|
||||||
strategy:
|
strategy:
|
||||||
|
@ -254,7 +221,7 @@ jobs:
|
||||||
python-version: '3.10'
|
python-version: '3.10'
|
||||||
- name: Install packages
|
- name: Install packages
|
||||||
run:
|
run:
|
||||||
brew install automake # ninja
|
brew install pkg-config ninja automake autoconf
|
||||||
- name: Install python modules
|
- name: Install python modules
|
||||||
run: |
|
run: |
|
||||||
pip3 install meson pytest requests distro
|
pip3 install meson pytest requests distro
|
||||||
|
@ -299,7 +266,7 @@ jobs:
|
||||||
COMPILE_CONFIG: ${{matrix.config}}
|
COMPILE_CONFIG: ${{matrix.config}}
|
||||||
- name: Upload failure logs
|
- name: Upload failure logs
|
||||||
if: failure()
|
if: failure()
|
||||||
run: $GITHUB_WORKSPACE/.github/scripts/upload_failure_logs.py
|
run: $GITHUB_WORKSPACE/.github/scripts/upload_failure_logs.sh
|
||||||
env:
|
env:
|
||||||
COMPILE_CONFIG: ${{matrix.config}}
|
COMPILE_CONFIG: ${{matrix.config}}
|
||||||
|
|
||||||
|
@ -309,7 +276,7 @@ jobs:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
env:
|
env:
|
||||||
COMPILE_CONFIG: native_static
|
COMPILE_CONFIG: native_static
|
||||||
OS_NAME: focal
|
OS_NAME: linux
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
|
@ -12,7 +12,7 @@ Kiwix Build audience is:
|
||||||
* Kiwix developer team for its own CI/CD
|
* Kiwix developer team for its own CI/CD
|
||||||
|
|
||||||
[](https://github.com/kiwix/kiwix-build/actions/workflows/ci.yml?query=branch%3Amain)
|
[](https://github.com/kiwix/kiwix-build/actions/workflows/ci.yml?query=branch%3Amain)
|
||||||
[](https://github.com/kiwix/kiwix-build/actions/workflows/cd.yml?query=branch%3Amain)
|
[](https://github.com/kiwix/kiwix-build/actions/workflows/releaseNigthly.yml?query=branch%3Amain)
|
||||||
[](https://www.gnu.org/licenses/gpl-3.0)
|
[](https://www.gnu.org/licenses/gpl-3.0)
|
||||||
|
|
||||||
Prerequisites
|
Prerequisites
|
||||||
|
@ -89,6 +89,8 @@ platforms:
|
||||||
- native_dyn
|
- native_dyn
|
||||||
- native_mixed
|
- native_mixed
|
||||||
- native_static
|
- native_static
|
||||||
|
- win32_dyn
|
||||||
|
- win32_static
|
||||||
- android
|
- android
|
||||||
- android_arm
|
- android_arm
|
||||||
- android_arm64
|
- android_arm64
|
||||||
|
@ -99,6 +101,11 @@ platforms:
|
||||||
All `native_*` config means using the native compiler without any cross-compilation option.
|
All `native_*` config means using the native compiler without any cross-compilation option.
|
||||||
Other may simply use cross-compilation or may download a specific toolchain to use.
|
Other may simply use cross-compilation or may download a specific toolchain to use.
|
||||||
|
|
||||||
|
If you want to compile `kiwix-tools` for win32 using static linkage:
|
||||||
|
```bash
|
||||||
|
kiwix-build --config win32_dyn
|
||||||
|
```
|
||||||
|
|
||||||
Android
|
Android
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
|
|
@ -114,9 +114,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/undici": {
|
"node_modules/undici": {
|
||||||
"version": "5.28.4",
|
"version": "5.28.2",
|
||||||
"resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz",
|
"resolved": "https://registry.npmjs.org/undici/-/undici-5.28.2.tgz",
|
||||||
"integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==",
|
"integrity": "sha512-wh1pHJHnUeQV5Xa8/kyQhO7WFa8M34l026L5P/+2TYiakvGy5Rdc8jWZVyG7ieht/0WgJLEd3kcU5gKx+6GC8w==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fastify/busboy": "^2.0.0"
|
"@fastify/busboy": "^2.0.0"
|
||||||
},
|
},
|
||||||
|
|
|
@ -0,0 +1,69 @@
|
||||||
|
image: Visual Studio 2019
|
||||||
|
version: '0.1.{build}'
|
||||||
|
environment:
|
||||||
|
EXTRA_DIR: 'C:\extra'
|
||||||
|
MINGW64_EXTRA_DIR: '/c/extra'
|
||||||
|
PATH: 'C:\\Python312\\Scripts;%PATH%;%EXTRA_DIR%\bin;C:\\Program Files (x86)\\Windows Kits\\10\\bin\\%platform%'
|
||||||
|
PKG_CONFIG_PATH: '%EXTRA_DIR%\lib\pkgconfig'
|
||||||
|
MSYS2_PATH_TYPE: 'inherit'
|
||||||
|
MSYS2_ARG_CONV_EXCL: '-Tp'
|
||||||
|
MINGW64_RUN: 'C:\msys64\usr\bin\bash.exe --login -c'
|
||||||
|
MSYSTEM: 'MINGW64'
|
||||||
|
KIWIX_DESKTOP_VERSION: '2.3.1-3'
|
||||||
|
KIWIX_DESKTOP_RELEASE: 0
|
||||||
|
|
||||||
|
|
||||||
|
init:
|
||||||
|
- cmd: |
|
||||||
|
echo %TEST_VAR%
|
||||||
|
REM Set VC 2019
|
||||||
|
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
|
||||||
|
mkdir C:\extra\bin
|
||||||
|
|
||||||
|
install:
|
||||||
|
- cmd: |
|
||||||
|
cd C:\projects
|
||||||
|
REM Install meson
|
||||||
|
C:\Python312\Scripts\pip install meson
|
||||||
|
|
||||||
|
REM Install ninja
|
||||||
|
curl -o ninja-win.zip -L https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-win.zip
|
||||||
|
7z e ninja-win.zip -o%EXTRA_DIR%\bin
|
||||||
|
|
||||||
|
REM Install pkg-config-lite
|
||||||
|
curl -o pkg-config-lite-0.28-1.zip -L https://deac-fra.dl.sourceforge.net/project/pkgconfiglite/0.28-1/pkg-config-lite-0.28-1_bin-win32.zip
|
||||||
|
7z e pkg-config-lite-0.28-1.zip -o%EXTRA_DIR%\bin pkg-config-lite-0.28-1/bin/pkg-config.exe
|
||||||
|
cd kiwix-build
|
||||||
|
|
||||||
|
REM Install openssh (scp) for deployement
|
||||||
|
choco install openssh openssl.light
|
||||||
|
|
||||||
|
- cmd: openssl enc -d -aes-256-cbc -md sha256 -pass pass:%ENC_PASSWD% -in appveyor\nightlybot_id_key.enc -out appveyor\nightlybot_id_key
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
build_script:
|
||||||
|
- IF "%USE_CACHE%" EQU "1" appveyor\setup_from_cache.cmd
|
||||||
|
- IF "%USE_CACHE%" NEQ "1" appveyor\install_zlib.cmd
|
||||||
|
- IF "%USE_CACHE%" NEQ "1" appveyor\install_lzma.cmd
|
||||||
|
- IF "%USE_CACHE%" NEQ "1" appveyor\install_zstd.cmd
|
||||||
|
- IF "%USE_CACHE%" NEQ "1" appveyor\install_libcurl.cmd
|
||||||
|
- IF "%USE_CACHE%" NEQ "1" appveyor\install_pthread.cmd
|
||||||
|
- IF "%USE_CACHE%" NEQ "1" appveyor\install_dirent.cmd
|
||||||
|
- IF "%USE_CACHE%" NEQ "1" appveyor\install_xapian.cmd
|
||||||
|
- IF "%USE_CACHE%" NEQ "1" appveyor\install_icu.cmd
|
||||||
|
- IF "%USE_CACHE%" NEQ "1" appveyor\install_pugixml.cmd
|
||||||
|
- IF "%USE_CACHE%" NEQ "1" appveyor\install_aria2.cmd
|
||||||
|
- IF "%USE_CACHE%" NEQ "1" appveyor\install_mustache.cmd
|
||||||
|
- IF "%USE_CACHE%" NEQ "1" appveyor\install_libmicrohttpd.cmd
|
||||||
|
- IF "%USE_CACHE%" NEQ "1" %MINGW64_RUN% "cd /c/projects/kiwix-build && appveyor/create_cache.sh"
|
||||||
|
- appveyor\install_libzim.cmd
|
||||||
|
- appveyor\install_libkiwix.cmd
|
||||||
|
- appveyor\install_kiwix-desktop.cmd
|
||||||
|
|
||||||
|
before_deploy:
|
||||||
|
- cmd: openssl enc -d -pbkdf2 -aes-256-cbc -md sha256 -pass pass:%win_certificate_secret% -in appveyor\kiwix.pfx.enc -out appveyor\kiwix.pfx
|
||||||
|
- cmd: '%MINGW64_RUN% "cd /c/projects/kiwix-build && appveyor/package_kiwix-desktop.sh"'
|
||||||
|
|
||||||
|
deploy_script:
|
||||||
|
- cmd: '%MINGW64_RUN% "cd /c/projects/kiwix-build && appveyor/deploy.sh"'
|
|
@ -0,0 +1,16 @@
|
||||||
|
|
||||||
|
XAPIAN_SOURCE=$(pwd)/..
|
||||||
|
|
||||||
|
$XAPIAN_SOURCE/configure \
|
||||||
|
CC="cl -nologo" \
|
||||||
|
CXX="$XAPIAN_SOURCE/compile cl -nologo" \
|
||||||
|
CXXFLAGS="-EHsc -MD" AR=lib \
|
||||||
|
CPPFLAGS="-I${MINGW64_EXTRA_DIR}/include" \
|
||||||
|
LDFLAGS="-L${MINGW64_EXTRA_DIR}/lib" \
|
||||||
|
--disable-backend-remote \
|
||||||
|
--disable-documentation \
|
||||||
|
--prefix=${MINGW64_EXTRA_DIR}
|
||||||
|
|
||||||
|
make -j2
|
||||||
|
|
||||||
|
make install
|
|
@ -0,0 +1,11 @@
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
ARCHIVE_NAME="deps_windows_windows.zip"
|
||||||
|
SSH_KEY=C:\\projects\\kiwix-build\\appveyor\\nightlybot_id_key
|
||||||
|
|
||||||
|
7z a -tzip $ARCHIVE_NAME $MINGW64_EXTRA_DIR
|
||||||
|
scp -P 30022 -vrp -i ${SSH_KEY} -o StrictHostKeyChecking=no \
|
||||||
|
${ARCHIVE_NAME} \
|
||||||
|
ci@tmp.kiwix.org:/data/tmp/ci
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
set -e
|
||||||
|
|
||||||
|
NIGHTLY_DATE=$(date +%Y-%m-%d)
|
||||||
|
NIGHTLY_KIWIX_ARCHIVES_DIR=/c/projects/NIGHTLY_KIWIX_ARCHIVES/${NIGHTLY_DATE}
|
||||||
|
RELEASE_KIWIX_ARCHIVES_DIR=/c/projects/RELEASE_KIWIX_ARCHIVES
|
||||||
|
SSH_KEY=C:\\projects\\kiwix-build\\appveyor\\nightlybot_id_key
|
||||||
|
|
||||||
|
if [[ "$APPVEYOR_SCHEDULED_BUILD" = "True" ]]
|
||||||
|
then
|
||||||
|
scp -P 30022 -vrp -i ${SSH_KEY} -o StrictHostKeyChecking=no \
|
||||||
|
${NIGHTLY_KIWIX_ARCHIVES_DIR} \
|
||||||
|
ci@master.download.kiwix.org:/data/download/nightly
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$APPVEYOR_REPO_TAG" = "true" ]]
|
||||||
|
then
|
||||||
|
RELEASE_ARCHIVES=$(find $RELEASE_KIWIX_ARCHIVES_DIR -type f)
|
||||||
|
scp -P 30022 -vrp -i ${SSH_KEY} -o StrictHostKeyChecking=no \
|
||||||
|
${RELEASE_ARCHIVES} \
|
||||||
|
ci@master.download.kiwix.org:/data/download/release/kiwix-desktop
|
||||||
|
fi
|
|
@ -0,0 +1,29 @@
|
||||||
|
import re, sys, os
|
||||||
|
|
||||||
|
makefile = sys.argv[-1]
|
||||||
|
print("Patching '{}'".format(makefile))
|
||||||
|
|
||||||
|
with open(makefile, 'r') as f:
|
||||||
|
lines = f.readlines()
|
||||||
|
|
||||||
|
with open(makefile, 'w') as f:
|
||||||
|
for line in lines:
|
||||||
|
# if "/SUBSYSTEM:WINDOWS" in line:
|
||||||
|
# line = line.replace("/SUBSYSTEM:WINDOWS", "/SUBSYSTEM:CONSOLE")
|
||||||
|
# f.write(line)
|
||||||
|
# continue
|
||||||
|
if not line.startswith('LIBS '):
|
||||||
|
f.write(line)
|
||||||
|
continue
|
||||||
|
print("-- INPUT : {}".format(line))
|
||||||
|
for lib in ('kiwix', 'zim', 'pugixml', 'z', 'zstd'):
|
||||||
|
line = line.replace('{}.lib'.format(lib), 'lib{}.a'.format(lib))
|
||||||
|
for lib in ('lzma', 'curl'):
|
||||||
|
line = line.replace('lib{}.lib'.format(lib), 'lib{}.a'.format(lib))
|
||||||
|
line = line.strip()
|
||||||
|
# line += " pthreadVC2.lib"
|
||||||
|
# line += " icuin.lib icudt.lib icuuc.lib"
|
||||||
|
line += " Rpcrt4.lib Ws2_32.lib winmm.lib Shlwapi.lib"
|
||||||
|
line += os.linesep
|
||||||
|
print("++ OUTPUT : {}".format(line))
|
||||||
|
f.write(line)
|
|
@ -0,0 +1,4 @@
|
||||||
|
REM ========================================================
|
||||||
|
REM Install aria2
|
||||||
|
curl -fsSL -O https://github.com/aria2/aria2/releases/download/release-1.36.0/aria2-1.36.0-win-64bit-build1.zip || exit /b 1
|
||||||
|
7z e aria2-1.36.0-win-64bit-build1.zip -o%EXTRA_DIR% aria2-1.36.0-win-64bit-build1\aria2c.exe || exit /b 1
|
|
@ -0,0 +1,3 @@
|
||||||
|
REM ========================================================
|
||||||
|
REM Install dirent.h
|
||||||
|
curl -fsSL -o%EXTRA_DIR%\include\dirent.h https://raw.githubusercontent.com/tronkko/dirent/master/include/dirent.h || exit /b 1
|
|
@ -0,0 +1,14 @@
|
||||||
|
REM Set VC 2017
|
||||||
|
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
|
||||||
|
mkdir C:\extra\bin
|
||||||
|
cd C:\projects
|
||||||
|
C:\Python36\Scripts\pip install meson || exit /b 1
|
||||||
|
|
||||||
|
REM Set ninja
|
||||||
|
curl -fsSL -o ninja-win.zip https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-win.zip || exit /b 1
|
||||||
|
7z e ninja-win.zip -o%EXTRA_DIR%\bin || exit /b 1
|
||||||
|
|
||||||
|
REM Set pkg-config-lit
|
||||||
|
curl --insecure -fsSL -o pkg-config-lite-0.28-1.zip https://netix.dl.sourceforge.net/project/pkgconfiglite/0.28-1/pkg-config-lite-0.28-1_bin-win32.zip || exit /b 1
|
||||||
|
7z e pkg-config-lite-0.28-1.zip -o%EXTRA_DIR%\bin pkg-config-lite-0.28-1/bin/pkg-config.exe || exit /b 1
|
||||||
|
cd kiwix-build
|
|
@ -0,0 +1,7 @@
|
||||||
|
REM ========================================================
|
||||||
|
REM Install icu
|
||||||
|
curl -SL -O http://public.kymeria.fr/KIWIX/windows/icu4c-62_1-Win64-MSVC2017.zip || exit /b 1
|
||||||
|
7z x icu4c-62_1-Win64-MSVC2017.zip -o%EXTRA_DIR% -r include || exit /b 1
|
||||||
|
7z e icu4c-62_1-Win64-MSVC2017.zip -o%EXTRA_DIR%\lib lib64\* || exit /b 1
|
||||||
|
7z e icu4c-62_1-Win64-MSVC2017.zip -o%EXTRA_DIR%\bin bin64\*.dll || exit /b 1
|
||||||
|
curl -fsSL -o%PKG_CONFIG_PATH%\icu-i18n.pc http://public.kymeria.fr/KIWIX/windows/icu-i18n.pc || exit /b 1
|
|
@ -0,0 +1,22 @@
|
||||||
|
REM ========================================================
|
||||||
|
REM Install kiwix-desktop
|
||||||
|
git clone https://github.com/kiwix/kiwix-desktop || exit /b 1
|
||||||
|
cd kiwix-desktop
|
||||||
|
echo "Running qmake"
|
||||||
|
SET _WITH_CONSOLE=1
|
||||||
|
IF %KIWIX_DESKTOP_RELEASE% EQU 1 (
|
||||||
|
IF %APPVEYOR_REPO_TAG% == true (
|
||||||
|
SET _WITH_CONSOLE=0
|
||||||
|
)
|
||||||
|
)
|
||||||
|
IF %_WITH_CONSOLE% EQU 1 (
|
||||||
|
C:\Qt\5.15\msvc2019_64\bin\qmake.exe "CONFIG+=static console" || exit /b 1
|
||||||
|
) else (
|
||||||
|
C:\Qt\5.15\msvc2019_64\bin\qmake.exe "CONFIG+=static" || exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
echo "Running fix_desktop"
|
||||||
|
C:\Python312\Python ..\appveyor\fix_desktop_makefile.py Makefile.Release || exit /b 1
|
||||||
|
echo "Running nmake"
|
||||||
|
nmake || exit /b 1
|
||||||
|
cd ..
|
|
@ -0,0 +1,14 @@
|
||||||
|
REM ========================================================
|
||||||
|
REM Install libcurl
|
||||||
|
curl -fsSL -O https://curl.haxx.se/download/curl-7.61.1.zip || exit /b 1
|
||||||
|
7z x curl-7.61.1.zip || exit /b 1
|
||||||
|
cd curl-7.61.1\winbuild
|
||||||
|
nmake /f Makefile.vc mode=static MACHINE=x64 DEBUG=no VC=15 ENABLE_IDN=no || exit /b 1
|
||||||
|
mkdir %EXTRA_DIR%\include\curl
|
||||||
|
copy ..\builds\libcurl-vc15-x64-release-static-ipv6-sspi-winssl\include\curl\*.h %EXTRA_DIR%\include\curl
|
||||||
|
copy ..\builds\libcurl-vc15-x64-release-static-ipv6-sspi-winssl\lib\libcurl_a.lib %EXTRA_DIR%\lib
|
||||||
|
move %EXTRA_DIR%\lib\libcurl_a.lib %EXTRA_DIR%\lib\libcurl.a
|
||||||
|
dir %EXTRA_DIR%\include\curl
|
||||||
|
dir %EXTRA_DIR%\lib
|
||||||
|
curl -fsSl -o%PKG_CONFIG_PATH%\libcurl.pc http://public.kymeria.fr/KIWIX/windows/libcurl.pc || exit /b 1
|
||||||
|
cd ..\..
|
|
@ -0,0 +1,10 @@
|
||||||
|
REM ========================================================
|
||||||
|
REM Install libkiwix
|
||||||
|
git clone https://github.com/kiwix/libkiwix.git || exit /b 1
|
||||||
|
cd libkiwix
|
||||||
|
set CPPFLAGS="-I%EXTRA_DIR%/include"
|
||||||
|
meson . build --prefix %EXTRA_DIR% --default-library static --buildtype release || exit /b 1
|
||||||
|
cd build
|
||||||
|
ninja || exit /b 1
|
||||||
|
ninja install || exit /b 1
|
||||||
|
cd ..\..
|
|
@ -0,0 +1,11 @@
|
||||||
|
REM ========================================================
|
||||||
|
REM Install libmicrohttpd
|
||||||
|
curl -fsSL -O https://ftpmirror.gnu.org/libmicrohttpd/libmicrohttpd-latest-w32-bin.zip || exit /b 1
|
||||||
|
7z e libmicrohttpd-latest-w32-bin.zip -o%EXTRA_DIR%/include libmicrohttpd-*-w32-bin/x86_64/VS2019/Release-static/microhttpd.h || exit /b 1
|
||||||
|
7z e libmicrohttpd-latest-w32-bin.zip -o%EXTRA_DIR%/lib libmicrohttpd-*-w32-bin/x86_64/VS2019/Release-static/libmicrohttpd.lib || exit /b 1
|
||||||
|
7z e libmicrohttpd-latest-w32-bin.zip -o%EXTRA_DIR%/lib/pkgconfig libmicrohttpd-*-w32-bin/x86_64/MinGW/static/mingw64/lib/pkgconfig/* || exit /b 1
|
||||||
|
|
||||||
|
rename %EXTRA_DIR%\lib\libmicrohttpd.lib microhttpd.lib
|
||||||
|
dir %EXTRA_DIR%
|
||||||
|
dir %EXTRA_DIR%\lib
|
||||||
|
dir %EXTRA_DIR%\lib\pkgconfig
|
|
@ -0,0 +1,9 @@
|
||||||
|
REM ========================================================
|
||||||
|
REM Install libzim
|
||||||
|
git clone https://github.com/openzim/libzim.git || exit /b 1
|
||||||
|
cd libzim
|
||||||
|
meson . build --prefix %EXTRA_DIR% --default-library static --buildtype release || exit /b 1
|
||||||
|
cd build
|
||||||
|
ninja || exit /b 1
|
||||||
|
ninja install || exit /b 1
|
||||||
|
cd ..\..
|
|
@ -0,0 +1,6 @@
|
||||||
|
REM ========================================================
|
||||||
|
REM Install lzma
|
||||||
|
curl -fsSL -O https://tukaani.org/xz/xz-5.2.4-windows.zip || exit /b 1
|
||||||
|
7z x xz-5.2.4-windows.zip -o%EXTRA_DIR% -r include || exit /b 1
|
||||||
|
7z e xz-5.2.4-windows.zip -o%EXTRA_DIR%\lib bin_x86-64\liblzma.a || exit /b 1
|
||||||
|
curl -fsSL -o%PKG_CONFIG_PATH%\liblzma.pc http://public.kymeria.fr/KIWIX/windows/liblzma.pc || exit /b 1
|
|
@ -0,0 +1,3 @@
|
||||||
|
REM ========================================================
|
||||||
|
REM Install mustache.hpp
|
||||||
|
curl -fsSL -o%EXTRA_DIR%\include\mustache.hpp https://raw.githubusercontent.com/kainjow/mustache/v3.2.1/mustache.hpp || exit /b 1
|
|
@ -0,0 +1,14 @@
|
||||||
|
REM ========================================================
|
||||||
|
REM Install pthread
|
||||||
|
curl -fsSL -O ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip || exit /b 1
|
||||||
|
7z x pthreads-w32-2-9-1-release.zip -r pthreads.2 || exit /b 1
|
||||||
|
cd pthreads.2
|
||||||
|
REM Patch is pthread_timespec.patch
|
||||||
|
curl -fsSL -O http://public.kymeria.fr/KIWIX/windows/pthread.h || exit /b 1
|
||||||
|
nmake clean VC-inlined || exit /b 1
|
||||||
|
copy pthread.h %EXTRA_DIR%\include
|
||||||
|
copy sched.h %EXTRA_DIR%\include
|
||||||
|
copy pthreadVC2.lib %EXTRA_DIR%\lib
|
||||||
|
copy pthreadVC2.dll %EXTRA_DIR%\bin
|
||||||
|
curl -fsSL -o%PKG_CONFIG_PATH%\libpthreadVC2.pc http://public.kymeria.fr/KIWIX/windows/libpthreadVC2.pc || exit /b 1
|
||||||
|
cd ..
|
|
@ -0,0 +1,10 @@
|
||||||
|
REM ========================================================
|
||||||
|
REM Install pugixml
|
||||||
|
curl -fsSL -O http://public.kymeria.fr/KIWIX/windows/pugixml-1.2-meson.zip || exit /b 1
|
||||||
|
7z x pugixml-1.2-meson.zip -o. || exit /b 1
|
||||||
|
cd pugixml-1.2-meson
|
||||||
|
meson . build --prefix %EXTRA_DIR% --default-library static --buildtype release || exit /b 1
|
||||||
|
cd build
|
||||||
|
ninja || exit /b 1
|
||||||
|
ninja install || exit /b 1
|
||||||
|
cd ..\..
|
|
@ -0,0 +1,9 @@
|
||||||
|
REM ========================================================
|
||||||
|
REM Install xapian
|
||||||
|
curl -fsSL -O http://mirror.download.kiwix.org/dev/kiwix-build/xapian-core-1.4.18.zip || exit /b 1
|
||||||
|
7z x xapian-core-1.4.18.zip || exit /b 1
|
||||||
|
cd xapian-core-1.4.18
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
%MINGW64_RUN% "cd /c/Projects/kiwix-build/xapian-core-1.4.18/build && /c/Projects/kiwix-build/appveyor/build_xapian.sh" > build_xapian.log || exit /b 1
|
||||||
|
cd ..\..
|
|
@ -0,0 +1,10 @@
|
||||||
|
REM ========================================================
|
||||||
|
REM Install zlib
|
||||||
|
curl -fsSL -O http://mirror.download.kiwix.org/dev/kiwix-build/zlib-1.2.12.meson.zip || exit /b 1
|
||||||
|
7z x zlib-1.2.12.meson.zip || exit /b 1
|
||||||
|
cd zlib-1.2.12
|
||||||
|
meson . build --prefix %EXTRA_DIR% --default-library static --buildtype release || exit /b 1
|
||||||
|
cd build
|
||||||
|
ninja || exit /b 1
|
||||||
|
ninja install || exit /b 1
|
||||||
|
cd ..\..
|
|
@ -0,0 +1,10 @@
|
||||||
|
REM ========================================================
|
||||||
|
REM Install zstd
|
||||||
|
curl -fsSL -o zstd-v1.5.2.zip https://github.com/facebook/zstd/archive/refs/tags/v1.5.2.zip || exit /b 1
|
||||||
|
7z x zstd-v1.5.2.zip || exit /b 1
|
||||||
|
cd zstd-1.5.2/build/meson
|
||||||
|
meson . builddir --prefix %EXTRA_DIR% --default-library static --buildtype release -Dbin_programs=false -Dbin_contrib=false || exit /b 1
|
||||||
|
cd builddir
|
||||||
|
ninja || exit /b 1
|
||||||
|
ninja install || exit /b 1
|
||||||
|
cd ..\..\..\..
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,35 @@
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [[ "$APPVEYOR_REPO_TAG" = "false" ]]
|
||||||
|
then
|
||||||
|
NIGHTLY_DATE=$(date +%Y-%m-%d)
|
||||||
|
KIWIX_ARCHIVES_DIR=/c/projects/NIGHTLY_KIWIX_ARCHIVES/${NIGHTLY_DATE}
|
||||||
|
KIWIX_DIR=kiwix-desktop_windows_x64_$NIGHTLY_DATE
|
||||||
|
else
|
||||||
|
if [ $KIWIX_DESKTOP_RELEASE -eq 1 ]
|
||||||
|
then
|
||||||
|
KIWIX_ARCHIVES_DIR=/c/projects/RELEASE_KIWIX_ARCHIVES
|
||||||
|
KIWIX_DIR=kiwix-desktop_windows_x64_${KIWIX_DESKTOP_VERSION}
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$KIWIX_DIR" ]]
|
||||||
|
then
|
||||||
|
KIWIX_ARCH_NAME=${KIWIX_DIR}.zip
|
||||||
|
|
||||||
|
mkdir $KIWIX_DIR
|
||||||
|
mkdir -p KIWIX_ARCHIVES_DIR
|
||||||
|
|
||||||
|
cp /c/projects/kiwix-build/kiwix-desktop/Release/kiwix-desktop.exe $KIWIX_DIR
|
||||||
|
/c/Qt/5.15/msvc2019_64/bin/windeployqt --compiler-runtime $KIWIX_DIR
|
||||||
|
|
||||||
|
cp $MINGW64_EXTRA_DIR/aria2c.exe $KIWIX_DIR
|
||||||
|
cp $MINGW64_EXTRA_DIR/bin/*.dll $KIWIX_DIR
|
||||||
|
cp /c/OpenSSL-v111-Win64/bin/libcrypto-1_1-x64.dll $KIWIX_DIR
|
||||||
|
cp /c/OpenSSL-v111-Win64/bin/libssl-1_1-x64.dll $KIWIX_DIR
|
||||||
|
|
||||||
|
signtool.exe sign -f appveyor/kiwix.pfx -p $win_certificate_password -t http://timestamp.digicert.com -d "Kiwix-desktop application" -fd SHA256 $KIWIX_DIR/kiwix-desktop.exe
|
||||||
|
|
||||||
|
7z a -tzip $KIWIX_ARCHIVES_DIR/$KIWIX_ARCH_NAME $KIWIX_DIR
|
||||||
|
fi
|
|
@ -0,0 +1,4 @@
|
||||||
|
REM ========================================================
|
||||||
|
REM Setup from cache
|
||||||
|
curl -fsSL -O http://tmp.kiwix.org/ci/deps_windows_windows.zip || exit /b 1
|
||||||
|
7z x deps_windows_windows.zip -oc: -aoa || exit /b 1
|
|
@ -1,3 +1,3 @@
|
||||||
from .base import *
|
from .base import *
|
||||||
|
|
||||||
from . import android, armhf, musl, flatpak, i586, ios, native, neutral, wasm
|
from . import android, armhf, musl, flatpak, i586, ios, native, neutral, win32, wasm
|
||||||
|
|
|
@ -0,0 +1,99 @@
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
from .base import ConfigInfo
|
||||||
|
from kiwixbuild.utils import which, pj
|
||||||
|
from kiwixbuild._global import neutralEnv
|
||||||
|
|
||||||
|
|
||||||
|
class Win32ConfigInfo(ConfigInfo):
|
||||||
|
build = "win32"
|
||||||
|
compatible_hosts = ["fedora", "debian"]
|
||||||
|
arch_full = "i686-w64-mingw32"
|
||||||
|
extra_libs = ["-lwinmm", "-lshlwapi", "-lws2_32", "-lssp"]
|
||||||
|
|
||||||
|
def get_cross_config(self):
|
||||||
|
return {
|
||||||
|
"exe_wrapper_def": self.exe_wrapper_def,
|
||||||
|
"binaries": self.binaries,
|
||||||
|
"root_path": self.root_path,
|
||||||
|
"extra_libs": self.extra_libs,
|
||||||
|
"extra_cflags": [
|
||||||
|
"-DWIN32",
|
||||||
|
*(
|
||||||
|
"-I{}".format(include_dir)
|
||||||
|
for include_dir in self.get_include_dirs()
|
||||||
|
),
|
||||||
|
],
|
||||||
|
"host_machine": {
|
||||||
|
"system": "Windows",
|
||||||
|
"lsystem": "windows",
|
||||||
|
"cpu_family": "x86",
|
||||||
|
"cpu": "i686",
|
||||||
|
"endian": "little",
|
||||||
|
"abi": "",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
def finalize_setup(self):
|
||||||
|
super().finalize_setup()
|
||||||
|
self.buildEnv.cmake_crossfile = self._gen_crossfile("cmake_cross_file.txt")
|
||||||
|
self.buildEnv.meson_crossfile = self._gen_crossfile("meson_cross_file.txt")
|
||||||
|
|
||||||
|
@property
|
||||||
|
def root_path(self):
|
||||||
|
root_paths = {
|
||||||
|
"fedora": "/usr/i686-w64-mingw32/sys-root/mingw",
|
||||||
|
"debian": "/usr/i686-w64-mingw32",
|
||||||
|
}
|
||||||
|
return root_paths[neutralEnv("distname")]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def binaries(self):
|
||||||
|
return {
|
||||||
|
k: which("{}-{}".format(self.arch_full, v))
|
||||||
|
for k, v in (
|
||||||
|
("CC", "gcc"),
|
||||||
|
("CXX", "g++"),
|
||||||
|
("AR", "ar"),
|
||||||
|
("STRIP", "strip"),
|
||||||
|
("WINDRES", "windres"),
|
||||||
|
("RANLIB", "ranlib"),
|
||||||
|
("PKGCONFIG", "pkg-config"),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@property
|
||||||
|
def exe_wrapper_def(self):
|
||||||
|
try:
|
||||||
|
which("wine")
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
return ""
|
||||||
|
else:
|
||||||
|
return "exe_wrapper = 'wine'"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def configure_options(self):
|
||||||
|
yield f"--host={self.arch_full}"
|
||||||
|
|
||||||
|
def set_compiler(self, env):
|
||||||
|
for k, v in self.binaries.items():
|
||||||
|
env[k] = v
|
||||||
|
|
||||||
|
def get_bin_dir(self):
|
||||||
|
return [pj(self.root_path, "bin")]
|
||||||
|
|
||||||
|
def get_env(self):
|
||||||
|
env = super().get_env()
|
||||||
|
env["PKG_CONFIG_LIBDIR"] = pj(self.root_path, "lib", "pkgconfig")
|
||||||
|
env["LIBS"] = " ".join(self.extra_libs) + " " + env["LIBS"]
|
||||||
|
return env
|
||||||
|
|
||||||
|
|
||||||
|
class Win32Dyn(Win32ConfigInfo):
|
||||||
|
name = "win32_dyn"
|
||||||
|
static = False
|
||||||
|
|
||||||
|
|
||||||
|
class Win32Static(Win32ConfigInfo):
|
||||||
|
name = "win32_static"
|
||||||
|
static = True
|
|
@ -24,7 +24,7 @@ class AllBaseDependencies(Dependency):
|
||||||
"zim-testing-suite",
|
"zim-testing-suite",
|
||||||
"icu4c",
|
"icu4c",
|
||||||
"boostregex",
|
"boostregex",
|
||||||
"docoptcpp",
|
"docoptcpp"
|
||||||
]
|
]
|
||||||
|
|
||||||
if not configInfo.name.endswith("_dyn"):
|
if not configInfo.name.endswith("_dyn"):
|
||||||
|
@ -50,7 +50,10 @@ class AllBaseDependencies(Dependency):
|
||||||
# Add specific dependencies depending of the config
|
# Add specific dependencies depending of the config
|
||||||
if configInfo.build not in ("android", "iOS"):
|
if configInfo.build not in ("android", "iOS"):
|
||||||
# For zimtools
|
# For zimtools
|
||||||
base_deps += ["docoptcpp", "libmagic", "gumbo"]
|
base_deps += ["docoptcpp"]
|
||||||
|
if configInfo.build != "win32":
|
||||||
|
# zimwriterfs
|
||||||
|
base_deps += ["libmagic", "gumbo"]
|
||||||
if (
|
if (
|
||||||
configInfo.build == "native"
|
configInfo.build == "native"
|
||||||
and neutralEnv("distname") != "Darwin"
|
and neutralEnv("distname") != "Darwin"
|
||||||
|
|
|
@ -4,8 +4,6 @@ from kiwixbuild.utils import Remotefile, run_command, pj
|
||||||
import platform
|
import platform
|
||||||
from shutil import copy2
|
from shutil import copy2
|
||||||
|
|
||||||
# Important: in case of aria2c update,
|
|
||||||
# 'scripts/create_kiwix-desktop_appImage.sh' should not be forgotten!
|
|
||||||
|
|
||||||
class Aria2(Dependency):
|
class Aria2(Dependency):
|
||||||
name = "aria2"
|
name = "aria2"
|
||||||
|
@ -16,7 +14,7 @@ class Aria2(Dependency):
|
||||||
archive = Remotefile(
|
archive = Remotefile(
|
||||||
"aria2-1.37.0-win-64bit-build1.zip",
|
"aria2-1.37.0-win-64bit-build1.zip",
|
||||||
"67d015301eef0b612191212d564c5bb0a14b5b9c4796b76454276a4d28d9b288",
|
"67d015301eef0b612191212d564c5bb0a14b5b9c4796b76454276a4d28d9b288",
|
||||||
"https://dev.kiwix.org/kiwix-desktop/aria2-1.37.0-win-64bit-build1.zip",
|
"https://github.com/aria2/aria2/releases/download/release-1.37.0/aria2-1.37.0-win-64bit-build1.zip",
|
||||||
)
|
)
|
||||||
|
|
||||||
class Builder(NoopBuilder):
|
class Builder(NoopBuilder):
|
||||||
|
@ -36,7 +34,7 @@ class Aria2(Dependency):
|
||||||
archive = Remotefile(
|
archive = Remotefile(
|
||||||
"aria2-1.37.0.tar.xz",
|
"aria2-1.37.0.tar.xz",
|
||||||
"60a420ad7085eb616cb6e2bdf0a7206d68ff3d37fb5a956dc44242eb2f79b66b",
|
"60a420ad7085eb616cb6e2bdf0a7206d68ff3d37fb5a956dc44242eb2f79b66b",
|
||||||
"https://dev.kiwix.org/kiwix-desktop/aria2-1.37.0.tar.xz",
|
"https://github.com/aria2/aria2/releases/download/release-1.37.0/aria2-1.37.0.tar.xz",
|
||||||
)
|
)
|
||||||
|
|
||||||
def _post_prepare_script(self, context):
|
def _post_prepare_script(self, context):
|
||||||
|
|
|
@ -524,8 +524,8 @@ class QMakeBuilder(MakeBuilder):
|
||||||
*neutralEnv("git_command"),
|
*neutralEnv("git_command"),
|
||||||
"archive",
|
"archive",
|
||||||
"-o",
|
"-o",
|
||||||
f"{self.build_path}/{self.target.full_name()}.tar.gz",
|
f"{self.build_path}/{self.target_full_name()}.tar.gz",
|
||||||
f"--prefix={self.target.full_name()}/",
|
f"--prefix={self.target_full_name()}/",
|
||||||
"HEAD",
|
"HEAD",
|
||||||
]
|
]
|
||||||
run_command(command, self.source_path, context)
|
run_command(command, self.source_path, context)
|
||||||
|
@ -538,9 +538,6 @@ class MesonBuilder(Builder):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def build_type(self):
|
def build_type(self):
|
||||||
if platform.system() == "Windows":
|
|
||||||
return "release"
|
|
||||||
|
|
||||||
return "release" if option("make_release") else "debug"
|
return "release" if option("make_release") else "debug"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|
|
@ -8,9 +8,9 @@ class Gumbo(Dependency):
|
||||||
|
|
||||||
class Source(ReleaseDownload):
|
class Source(ReleaseDownload):
|
||||||
archive = Remotefile(
|
archive = Remotefile(
|
||||||
"gumbo-parser-0.12.1.tar.gz",
|
"gumbo-0.10.1.tar.gz",
|
||||||
"c0bb5354e46539680724d638dbea07296b797229a7e965b13305c930ddc10d82",
|
"28463053d44a5dfbc4b77bcf49c8cee119338ffa636cc17fc3378421d714efad",
|
||||||
"https://dev.kiwix.org/kiwix-build/gumbo-parser-0.12.1.tar.gz",
|
"https://github.com/google/gumbo-parser/archive/v0.10.1.tar.gz",
|
||||||
)
|
)
|
||||||
|
|
||||||
def _post_prepare_script(self, context):
|
def _post_prepare_script(self, context):
|
||||||
|
|
|
@ -15,19 +15,19 @@ class KiwixDesktop(Dependency):
|
||||||
dependencies = ["qt", "qtwebengine", "libkiwix", "aria2"]
|
dependencies = ["qt", "qtwebengine", "libkiwix", "aria2"]
|
||||||
configure_env = None
|
configure_env = None
|
||||||
|
|
||||||
flatpack_build_options = {"env": {"QMAKEPATH": "/app"}}
|
flatpack_build_options = {"env": {"QMAKEPATH": "/app/lib"}}
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def make_targets(self):
|
def make_targets(self):
|
||||||
if platform.system() == "Windows":
|
if platform.system() == "Windows":
|
||||||
yield "release-all"
|
yield "release-all" if option("make_release") else "debug-all"
|
||||||
else:
|
else:
|
||||||
yield from super().make_targets
|
yield from super().make_targets
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def make_install_targets(self):
|
def make_install_targets(self):
|
||||||
if platform.system() == "Windows":
|
if platform.system() == "Windows":
|
||||||
yield "release-install"
|
yield "release-install" if option("make_release") else "debug-install"
|
||||||
else:
|
else:
|
||||||
yield "install"
|
yield "install"
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ class LibCurl(Dependency):
|
||||||
meson_archive = Remotefile(
|
meson_archive = Remotefile(
|
||||||
"curl_8.4.0-2_patch.zip",
|
"curl_8.4.0-2_patch.zip",
|
||||||
"bbb6ae75225c36ef9bb336cface729794c7c070c623a003fff40bd416042ff6e",
|
"bbb6ae75225c36ef9bb336cface729794c7c070c623a003fff40bd416042ff6e",
|
||||||
"https://dev.kiwix.org/libkiwix/curl_8.4.0-2_patch.zip",
|
"https://public.kymeria.fr/KIWIX/curl_8.4.0-2_patch.zip",
|
||||||
)
|
)
|
||||||
archives = [src_archive, meson_archive]
|
archives = [src_archive, meson_archive]
|
||||||
|
|
||||||
|
@ -32,10 +32,8 @@ class LibCurl(Dependency):
|
||||||
configure_options = [
|
configure_options = [
|
||||||
f"-D{p}=disabled"
|
f"-D{p}=disabled"
|
||||||
for p in (
|
for p in (
|
||||||
"psl",
|
|
||||||
"kerberos-auth",
|
|
||||||
"gss-api",
|
|
||||||
"ssh",
|
"ssh",
|
||||||
|
"ssl",
|
||||||
"rtmp",
|
"rtmp",
|
||||||
"http2",
|
"http2",
|
||||||
"idn",
|
"idn",
|
||||||
|
@ -53,7 +51,6 @@ class LibCurl(Dependency):
|
||||||
"smb",
|
"smb",
|
||||||
"smtp",
|
"smtp",
|
||||||
"gopher",
|
"gopher",
|
||||||
"tool",
|
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,6 @@ class MicroHttpd(Dependency):
|
||||||
patches = [
|
patches = [
|
||||||
"libmicrohttpd_meson_pkgconfig.patch",
|
"libmicrohttpd_meson_pkgconfig.patch",
|
||||||
"libmicrohttpd_meson_timeval_tvsec_size.patch",
|
"libmicrohttpd_meson_timeval_tvsec_size.patch",
|
||||||
"libmicrohttpd_meson_winet6.patch",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
class Builder(MesonBuilder):
|
class Builder(MesonBuilder):
|
||||||
|
|
|
@ -11,7 +11,7 @@ class Mustache(Dependency):
|
||||||
archive = Remotefile(
|
archive = Remotefile(
|
||||||
"Mustache-4.1.tar.gz",
|
"Mustache-4.1.tar.gz",
|
||||||
"acd66359feb4318b421f9574cfc5a511133a77d916d0b13c7caa3783c0bfe167",
|
"acd66359feb4318b421f9574cfc5a511133a77d916d0b13c7caa3783c0bfe167",
|
||||||
"https://dev.kiwix.org/kiwix-build/mustache-4.1.tar.gz",
|
"https://github.com/kainjow/Mustache/archive/v4.1.tar.gz",
|
||||||
)
|
)
|
||||||
|
|
||||||
class Builder(BaseBuilder):
|
class Builder(BaseBuilder):
|
||||||
|
|
|
@ -24,10 +24,6 @@ class android_ndk(Dependency):
|
||||||
def source_dir(self):
|
def source_dir(self):
|
||||||
return self.target.full_name()
|
return self.target.full_name()
|
||||||
|
|
||||||
patches = [
|
|
||||||
"android-ndk-r21e-linux-x86_64-python3.12+.patch",
|
|
||||||
]
|
|
||||||
|
|
||||||
class Builder(Builder):
|
class Builder(Builder):
|
||||||
@property
|
@property
|
||||||
def install_path(self):
|
def install_path(self):
|
||||||
|
|
|
@ -50,6 +50,9 @@ class Xapian(Dependency):
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_dependencies(cls, configInfo, allDeps):
|
def get_dependencies(cls, configInfo, allDeps):
|
||||||
deps = ["zlib", "lzma"]
|
deps = ["zlib", "lzma"]
|
||||||
if configInfo.build == "wasm" or neutralEnv("distname") == "Darwin":
|
if (
|
||||||
|
configInfo.build in ("win32", "win64", "wasm")
|
||||||
|
or neutralEnv("distname") == "Darwin"
|
||||||
|
):
|
||||||
return deps
|
return deps
|
||||||
return deps + ["uuid"]
|
return deps + ["uuid"]
|
||||||
|
|
|
@ -9,9 +9,9 @@ class ZimTestingSuite(Dependency):
|
||||||
|
|
||||||
class Source(ReleaseDownload):
|
class Source(ReleaseDownload):
|
||||||
archive = Remotefile(
|
archive = Remotefile(
|
||||||
"zim-testing-suite-0.8.0.tar.gz",
|
"zim-testing-suite-0.6.0.tar.gz",
|
||||||
"28f51449a3f9aea02652ca21f32c5598fd610d6cec3810fa552bd0c0f7a2d5fc",
|
"5aa91349a2791c862217b4d2ddd002f08589146ec047f10d5fa1f5fd85d0ea92",
|
||||||
"https://github.com/openzim/zim-testing-suite/releases/download/0.8.0/zim-testing-suite-0.8.0.tar.gz",
|
"https://github.com/openzim/zim-testing-suite/releases/download/0.6.0/zim-testing-suite-0.6.0.tar.gz",
|
||||||
)
|
)
|
||||||
|
|
||||||
Builder = NoopBuilder
|
Builder = NoopBuilder
|
||||||
|
|
|
@ -14,14 +14,17 @@ class ZimTools(Dependency):
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_dependencies(cls, configInfo, allDeps):
|
def get_dependencies(cls, configInfo, allDeps):
|
||||||
base_deps = ["libzim", "docoptcpp", "mustache"]
|
base_deps = ["libzim", "docoptcpp", "mustache"]
|
||||||
if neutralEnv("distname") != "Windows":
|
if configInfo.build != "win32" and neutralEnv("distname") != "Windows":
|
||||||
base_deps += ["libmagic", "gumbo"]
|
base_deps += ["libmagic", "gumbo"]
|
||||||
return base_deps
|
return base_deps
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def configure_options(self):
|
def configure_options(self):
|
||||||
# We don't build zimwriterfs on Windows, and so we don't have magic
|
# We don't build zimwriterfs on win32, and so we don't have magic
|
||||||
if neutralEnv("distname") != "Windows":
|
if (
|
||||||
|
self.buildEnv.configInfo.build != "win32"
|
||||||
|
and neutralEnv("distname") != "Windows"
|
||||||
|
):
|
||||||
yield f"-Dmagic-install-prefix={self.buildEnv.install_dir}"
|
yield f"-Dmagic-install-prefix={self.buildEnv.install_dir}"
|
||||||
if self.buildEnv.configInfo.static:
|
if self.buildEnv.configInfo.static:
|
||||||
yield "-Dstatic-linkage=true"
|
yield "-Dstatic-linkage=true"
|
||||||
|
|
|
@ -49,7 +49,6 @@ MANIFEST = {
|
||||||
"--socket=pulseaudio",
|
"--socket=pulseaudio",
|
||||||
"--share=network",
|
"--share=network",
|
||||||
"--share=ipc",
|
"--share=ipc",
|
||||||
"--filesystem=host:ro",
|
|
||||||
],
|
],
|
||||||
"cleanup": [
|
"cleanup": [
|
||||||
"/include",
|
"/include",
|
||||||
|
|
|
@ -50,7 +50,7 @@ PACKAGE_NAME_MAPPERS = {
|
||||||
},
|
},
|
||||||
"fedora_native_static": {
|
"fedora_native_static": {
|
||||||
"COMMON": _fedora_common + ["glibc-static", "libstdc++-static"],
|
"COMMON": _fedora_common + ["glibc-static", "libstdc++-static"],
|
||||||
"lzma": ["xz-devel", "xz-static"],
|
"lzma": ["xz-devel", "xz-static"]
|
||||||
# Either there is no packages, or no static or too old
|
# Either there is no packages, or no static or too old
|
||||||
},
|
},
|
||||||
"fedora_i586_dyn": {
|
"fedora_i586_dyn": {
|
||||||
|
@ -59,6 +59,33 @@ PACKAGE_NAME_MAPPERS = {
|
||||||
"fedora_i586_static": {
|
"fedora_i586_static": {
|
||||||
"COMMON": _fedora_common + ["glibc-devel.i686"],
|
"COMMON": _fedora_common + ["glibc-devel.i686"],
|
||||||
},
|
},
|
||||||
|
"fedora_win32_dyn": {
|
||||||
|
"COMMON": _fedora_common
|
||||||
|
+ [
|
||||||
|
"mingw32-gcc-c++",
|
||||||
|
"mingw32-bzip2",
|
||||||
|
"mingw32-win-iconv",
|
||||||
|
"mingw32-winpthreads",
|
||||||
|
"wine",
|
||||||
|
],
|
||||||
|
"zlib": ["mingw32-zlib"],
|
||||||
|
"lzma": ["mingw32-xz-libs"],
|
||||||
|
"libmicrohttpd": ["mingw32-libmicrohttpd"],
|
||||||
|
},
|
||||||
|
"fedora_win32_static": {
|
||||||
|
"COMMON": _fedora_common
|
||||||
|
+ [
|
||||||
|
"mingw32-gcc-c++",
|
||||||
|
"mingw32-bzip2-static",
|
||||||
|
"mingw32-win-iconv-static",
|
||||||
|
"mingw32-winpthreads-static",
|
||||||
|
"wine",
|
||||||
|
],
|
||||||
|
"zlib": ["mingw32-zlib-static"],
|
||||||
|
"lzma": ["mingw32-xz-libs-static"],
|
||||||
|
"libmicrohttpd": None, # ['mingw32-libmicrohttpd-static'] packaging dependecy seems buggy, and some static lib are name libfoo.dll.a and
|
||||||
|
# gcc cannot found them.
|
||||||
|
},
|
||||||
"fedora_armhf_static": {"COMMON": _fedora_common},
|
"fedora_armhf_static": {"COMMON": _fedora_common},
|
||||||
"fedora_armhf_dyn": {"COMMON": _fedora_common},
|
"fedora_armhf_dyn": {"COMMON": _fedora_common},
|
||||||
"fedora_android": {"COMMON": _fedora_common},
|
"fedora_android": {"COMMON": _fedora_common},
|
||||||
|
@ -82,6 +109,24 @@ PACKAGE_NAME_MAPPERS = {
|
||||||
"COMMON": _debian_common
|
"COMMON": _debian_common
|
||||||
+ ["libc6-dev-i386", "lib32stdc++6", "gcc-multilib", "g++-multilib"],
|
+ ["libc6-dev-i386", "lib32stdc++6", "gcc-multilib", "g++-multilib"],
|
||||||
},
|
},
|
||||||
|
"debian_win32_dyn": {
|
||||||
|
"COMMON": _debian_common
|
||||||
|
+ [
|
||||||
|
"g++-mingw-w64-i686",
|
||||||
|
"gcc-mingw-w64-i686",
|
||||||
|
"gcc-mingw-w64-base",
|
||||||
|
"mingw-w64-tools",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"debian_win32_static": {
|
||||||
|
"COMMON": _debian_common
|
||||||
|
+ [
|
||||||
|
"g++-mingw-w64-i686",
|
||||||
|
"gcc-mingw-w64-i686",
|
||||||
|
"gcc-mingw-w64-base",
|
||||||
|
"mingw-w64-tools",
|
||||||
|
],
|
||||||
|
},
|
||||||
"debian_armhf_static": {
|
"debian_armhf_static": {
|
||||||
"COMMON": _debian_common,
|
"COMMON": _debian_common,
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,33 +0,0 @@
|
||||||
diff -ur android-ndk-r21e/build/tools/make_standalone_toolchain.py android-ndk-r21e.patched/build/tools/make_standalone_toolchain.py
|
|
||||||
--- android-ndk-r21e/build/tools/make_standalone_toolchain.py 2025-03-04 20:48:14.681288830 +0400
|
|
||||||
+++ android-ndk-r21e.patched/build/tools/make_standalone_toolchain.py 2025-03-05 12:10:47.252578915 +0400
|
|
||||||
@@ -1,4 +1,4 @@
|
|
||||||
-#!/usr/bin/env python
|
|
||||||
+#!/usr/bin/env python3
|
|
||||||
#
|
|
||||||
# Copyright (C) 2016 The Android Open Source Project
|
|
||||||
#
|
|
||||||
@@ -21,7 +21,6 @@
|
|
||||||
"""
|
|
||||||
import argparse
|
|
||||||
import atexit
|
|
||||||
-from distutils.dir_util import copy_tree
|
|
||||||
import inspect
|
|
||||||
import logging
|
|
||||||
import os
|
|
||||||
@@ -221,13 +220,13 @@
|
|
||||||
|
|
||||||
def create_toolchain(install_path, arch, api, toolchain_path, host_tag):
|
|
||||||
"""Create a standalone toolchain."""
|
|
||||||
- copy_tree(toolchain_path, install_path)
|
|
||||||
+ shutil.copytree(toolchain_path, install_path)
|
|
||||||
triple = get_triple(arch)
|
|
||||||
make_clang_scripts(install_path, arch, api, host_tag == 'windows-x86_64')
|
|
||||||
replace_gcc_wrappers(install_path, triple, host_tag == 'windows-x86_64')
|
|
||||||
|
|
||||||
prebuilt_path = os.path.join(NDK_DIR, 'prebuilt', host_tag)
|
|
||||||
- copy_tree(prebuilt_path, install_path)
|
|
||||||
+ shutil.copytree(prebuilt_path, install_path, dirs_exist_ok=True)
|
|
||||||
|
|
||||||
gdbserver_path = os.path.join(
|
|
||||||
NDK_DIR, 'prebuilt', 'android-' + arch, 'gdbserver')
|
|
|
@ -1,15 +0,0 @@
|
||||||
--- libmicrohttpd-0.9.76_orig/meson.build 2024-10-08 15:53:53.370828250 +0400
|
|
||||||
+++ libmicrohttpd-0.9.76/meson.build 2024-10-08 16:23:24.985668690 +0400
|
|
||||||
@@ -77,7 +77,11 @@
|
|
||||||
endforeach
|
|
||||||
|
|
||||||
cdata.set('HAVE_ASSERT', cc.has_header_symbol('assert.h', 'assert'))
|
|
||||||
-cdata.set10('HAVE_INET6', cc.has_header_symbol('netinet/in.h', 'struct in6_addr'))
|
|
||||||
+if host_machine.system() == 'windows'
|
|
||||||
+ cdata.set10('HAVE_INET6', 1)
|
|
||||||
+else
|
|
||||||
+ cdata.set10('HAVE_INET6', cc.has_header_symbol('netinet/in.h', 'struct in6_addr'))
|
|
||||||
+endif
|
|
||||||
|
|
||||||
functions = [
|
|
||||||
'accept4',
|
|
|
@ -28,7 +28,7 @@ COLORS = {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
REMOTE_PREFIX = "https://dev.kiwix.org/kiwix-build/"
|
REMOTE_PREFIX = "http://mirror.download.kiwix.org/dev/kiwix-build/"
|
||||||
|
|
||||||
|
|
||||||
def which(name):
|
def which(name):
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
# This file reference all the versions of the depedencies we use in kiwix-build.
|
# This file reference all the versions of the depedencies we use in kiwix-build.
|
||||||
|
|
||||||
main_project_versions = {
|
main_project_versions = {
|
||||||
"libzim": "9.3.0",
|
"libzim": "9.2.3",
|
||||||
"libkiwix": "14.0.0",
|
"libkiwix": "13.1.0",
|
||||||
"kiwix-tools": "3.7.0",
|
"kiwix-tools": "3.7.0",
|
||||||
"zim-tools": "3.6.0",
|
"zim-tools": "3.4.2",
|
||||||
"kiwix-desktop": "2.4.1",
|
"kiwix-desktop": "2.3.1", # Also change KIWIX_DESKTOP_VERSION and KIWIX_DESKTOP_RELEASE in appveyor.yml
|
||||||
}
|
}
|
||||||
|
|
||||||
# This dictionnary specify what we need to build at each release process.
|
# This dictionnary specify what we need to build at each release process.
|
||||||
|
@ -22,18 +22,24 @@ main_project_versions = {
|
||||||
# `(was ...)`.
|
# `(was ...)`.
|
||||||
# - Else, increment the value. If no value was present, see `(was ...)`.
|
# - Else, increment the value. If no value was present, see `(was ...)`.
|
||||||
|
|
||||||
|
# For kiwix-desktop, if this is not None:
|
||||||
|
# - set KIWIX_DESKTOP_RELEASE to 1
|
||||||
|
# - set KIWIX_DESKTOP_VERSION to the version of the release (including release_versions)
|
||||||
|
# If this is None:
|
||||||
|
# - set KIWIX_DESKTOP_RELEASE to 0
|
||||||
|
|
||||||
release_versions = {
|
release_versions = {
|
||||||
"libzim": 1, # Depends of base deps (was 0)
|
"libzim": 0, # Depends of base deps (was 0)
|
||||||
"libkiwix": None, # Depends of libzim (was 1)
|
"libkiwix": None, # Depends of libzim (was 4)
|
||||||
"kiwix-tools": None, # Depends of libkiwix and libzim (was 2)
|
"kiwix-tools": None, # Depends of libkiwix and libzim (was 2)
|
||||||
"zim-tools": 0, # Depends of libzim (was None)
|
"zim-tools": None, # Depends of libzim (was 0)
|
||||||
"kiwix-desktop": None, # Depends of libkiwix and libzim (was 0)
|
"kiwix-desktop": None, # Depends of libkiwix and libzim (was 4)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# This is the "version" of the whole base_deps_versions dict.
|
# This is the "version" of the whole base_deps_versions dict.
|
||||||
# Change this when you change base_deps_versions.
|
# Change this when you change base_deps_versions.
|
||||||
base_deps_meta_version = "13"
|
base_deps_meta_version = "07"
|
||||||
|
|
||||||
base_deps_versions = {
|
base_deps_versions = {
|
||||||
"zlib": "1.2.12",
|
"zlib": "1.2.12",
|
||||||
|
@ -45,13 +51,13 @@ base_deps_versions = {
|
||||||
"mustache": "4.1",
|
"mustache": "4.1",
|
||||||
"pugixml": "1.2",
|
"pugixml": "1.2",
|
||||||
"libmicrohttpd": "0.9.76",
|
"libmicrohttpd": "0.9.76",
|
||||||
"gumbo": "0.12.1",
|
"gumbo": "0.10.1",
|
||||||
"icu4c": "73.2",
|
"icu4c": "73.2",
|
||||||
"libaria2": "1.37.0",
|
"libaria2": "1.37.0",
|
||||||
"libmagic": "5.44",
|
"libmagic": "5.44",
|
||||||
"android-ndk": "r21e",
|
"android-ndk": "r21e",
|
||||||
"org.kde": "6.7",
|
"org.kde": "5.15-23.08",
|
||||||
"io.qt.qtwebengine": "6.7",
|
"io.qt.qtwebengine": "5.15-23.08",
|
||||||
"zim-testing-suite": "0.8.0",
|
"zim-testing-suite": "0.6.0",
|
||||||
"emsdk": "3.1.41",
|
"emsdk": "3.1.41",
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,33 +14,98 @@ fi
|
||||||
ICONFILE=$SOURCEDIR/resources/icons/kiwix/scalable/kiwix-desktop.svg
|
ICONFILE=$SOURCEDIR/resources/icons/kiwix/scalable/kiwix-desktop.svg
|
||||||
DESKTOPFILE=$SOURCEDIR/resources/org.kiwix.desktop.desktop
|
DESKTOPFILE=$SOURCEDIR/resources/org.kiwix.desktop.desktop
|
||||||
|
|
||||||
# Get linuxdeploy
|
# Create structure
|
||||||
wget --continue https://github.com/linuxdeploy/linuxdeploy/releases/download/1-alpha-20240109-1/linuxdeploy-x86_64.AppImage
|
mkdir -p $APPDIR/usr/{bin,lib,share} $APPDIR/usr/share/applications $APPDIR/usr/share/icons/hicolor/48x48/apps
|
||||||
chmod u+x linuxdeploy-x86_64.AppImage
|
# Copy our files
|
||||||
wget --continue https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/1-alpha-20240109-1/linuxdeploy-plugin-qt-x86_64.AppImage
|
cp $INSTALLDIR/bin/kiwix-desktop $APPDIR/usr/bin/
|
||||||
chmod u+x linuxdeploy-plugin-qt-x86_64.AppImage
|
cp $INSTALLDIR/$SYSTEMLIBDIR/*.so* $APPDIR/usr/lib
|
||||||
|
# Remove it as it break with linuxdeployqt (should we compile without it) ?
|
||||||
|
rm -f $APPDIR/usr/lib/libmagic.so*
|
||||||
|
# Copy nss lib (to not conflict with host's ones)
|
||||||
|
cp -a /usr/$SYSTEMLIBDIR/nss $APPDIR/usr/lib
|
||||||
|
# Copy libthai.so (see kiwix-desktop issue#1016)
|
||||||
|
cp -a /usr/$SYSTEMLIBDIR/libthai.so* $APPDIR/usr/lib
|
||||||
|
|
||||||
|
# Copy ssl libs so that the appimage runs on newer systems
|
||||||
|
# that use a backward incompatible version of openssl
|
||||||
|
cp /usr/$SYSTEMLIBDIR/lib{crypto,ssl}.so.1.1 $APPDIR/usr/lib
|
||||||
|
|
||||||
|
patch_rodata()
|
||||||
|
{
|
||||||
|
local elffile=$1
|
||||||
|
local sedscript=$2
|
||||||
|
local rodatafile=$elffile.rodata
|
||||||
|
objcopy --dump-section .rodata="$rodatafile" "$elffile"
|
||||||
|
sed -i "$sedscript" "$rodatafile"
|
||||||
|
objcopy --update-section .rodata="$rodatafile" "$elffile"
|
||||||
|
rm $rodatafile
|
||||||
|
}
|
||||||
|
|
||||||
|
# copy and patch a couple of libs depending on ssl functionalty before
|
||||||
|
# linuxdeployqt copies and modifies them whereupon the patch_rodata procedure
|
||||||
|
# stops working on them correctly
|
||||||
|
cp -rL /usr/$SYSTEMLIBDIR/{libgnutls.so.30,libQt5Network.so.5} $APPDIR/usr/lib
|
||||||
|
|
||||||
|
# patch libQt5Network.so so that if it fails to load certificates from
|
||||||
|
# system paths the last path that it tries points to the certificate bundle
|
||||||
|
# included with the appimage
|
||||||
|
|
||||||
|
# !!! crt_bundle_new_path must have the same length as crt_bundle_old_path
|
||||||
|
crt_bundle_old_path=/usr/local/share/certs/ca-root-nss.crt
|
||||||
|
crt_bundle_new_path=/tmp/cert_bundle_provided_by_kiwix.crt
|
||||||
|
# !!! crt_bundle_new_path must have the same length as crt_bundle_old_path
|
||||||
|
|
||||||
|
libQtNetworkPatchingSedScript="s|$crt_bundle_old_path|$crt_bundle_new_path|"
|
||||||
|
|
||||||
|
patch_rodata $APPDIR/usr/lib/libQt5Network.so.5 "$libQtNetworkPatchingSedScript"
|
||||||
|
|
||||||
|
|
||||||
|
cp $ICONFILE $APPDIR/usr/share/icons/hicolor/48x48/apps/kiwix-desktop.svg
|
||||||
|
mkdir -p $APPDIR/usr/share/applications
|
||||||
|
cp $DESKTOPFILE $APPDIR/usr/share/applications/kiwix-desktop.desktop
|
||||||
|
|
||||||
|
# get the aria2
|
||||||
|
wget --continue https://github.com/q3aql/aria2-static-builds/releases/download/v1.36.0/aria2-1.36.0-linux-gnu-64bit-build1.tar.bz2
|
||||||
|
mkdir -p $APPDIR/usr/bin/ && tar -C $APPDIR/usr/bin/ -xf aria2-1.36.0-linux-gnu-64bit-build1.tar.bz2 aria2-1.36.0-linux-gnu-64bit-build1/aria2c --strip-components=1
|
||||||
|
mkdir -p $APPDIR/etc/ssl/certs/ && tar -C $APPDIR/etc/ssl/certs/ -xf aria2-1.36.0-linux-gnu-64bit-build1.tar.bz2 aria2-1.36.0-linux-gnu-64bit-build1/ca-certificates.crt --strip-components=1
|
||||||
|
|
||||||
|
# Get linuxdeployqt
|
||||||
|
# Dispite the 'continuous' in the file name, it IS release 8
|
||||||
|
wget --continue https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage -O linuxdeployqt
|
||||||
|
chmod u+x linuxdeployqt
|
||||||
|
|
||||||
# Fill with all deps libs and so
|
# Fill with all deps libs and so
|
||||||
LD_LIBRARY_PATH=$INSTALLDIR/lib/x86_64-linux-gnu ./linuxdeploy-x86_64.AppImage \
|
./linuxdeployqt $APPDIR/usr/bin/kiwix-desktop -bundle-non-qt-libs -extra-plugins=imageformats,iconengines
|
||||||
--plugin=qt \
|
|
||||||
--appdir="$APPDIR" \
|
|
||||||
--executable=$INSTALLDIR/bin/kiwix-desktop \
|
|
||||||
--desktop-file=$DESKTOPFILE \
|
|
||||||
--icon-file=$ICONFILE \
|
|
||||||
--library=/usr/lib/x86_64-linux-gnu/libthai.so.0 \
|
|
||||||
|
|
||||||
# Get the aria2c (https://github.com/abcfy2/aria2-static-build/releases/download/1.37.0/aria2-x86_64-linux-musl_libressl_static.zip)
|
|
||||||
wget --continue https://dev.kiwix.org/kiwix-desktop/aria2-1.37.0-x86_64-linux-musl_libressl_static.zip
|
|
||||||
mkdir -p $APPDIR/usr/bin/ && unzip aria2-1.37.0-x86_64-linux-musl_libressl_static.zip -d $APPDIR/usr/bin/
|
|
||||||
|
|
||||||
# Copy the CA trustore from the hosting system
|
|
||||||
mkdir -p $APPDIR/etc/ssl/certs/ && cp /etc/ssl/certs/ca-certificates.crt $APPDIR/etc/ssl/certs/
|
|
||||||
|
|
||||||
# Fix the RPATH of QtWebEngineProcess [TODO] Fill a issue ?
|
# Fix the RPATH of QtWebEngineProcess [TODO] Fill a issue ?
|
||||||
patchelf --set-rpath '$ORIGIN/../lib' $APPDIR/usr/libexec/QtWebEngineProcess
|
patchelf --set-rpath '$ORIGIN/../lib' $APPDIR/usr/libexec/QtWebEngineProcess
|
||||||
|
|
||||||
mv $APPDIR/{AppRun.wrapped,kiwix-desktop}
|
cp $DESKTOPFILE $APPDIR/kiwix-desktop.desktop
|
||||||
sed -i 's/AppRun\.wrapped/kiwix-desktop/g' $APPDIR/AppRun
|
cp $ICONFILE $APPDIR/
|
||||||
|
cp $ICONFILE $APPDIR/.DirIcon
|
||||||
|
|
||||||
|
rm "$APPDIR"/AppRun
|
||||||
|
|
||||||
|
cat > "$APPDIR"/AppRun <<'END'
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
mydir=$(dirname "$0")
|
||||||
|
mydir=$(cd "$mydir" && pwd)
|
||||||
|
|
||||||
|
crt_path=??? # this is set by postprocessing via sed
|
||||||
|
|
||||||
|
if [ ! -e "$crt_path" ]
|
||||||
|
then
|
||||||
|
ln -s "$mydir"/etc/ssl/certs/ca-certificates.crt "$crt_path"
|
||||||
|
trap "rm '$crt_path'" EXIT
|
||||||
|
fi
|
||||||
|
|
||||||
|
"$mydir"/usr/bin/kiwix-desktop "$@"
|
||||||
|
END
|
||||||
|
|
||||||
|
sed -i "s#^crt_path=.*#crt_path=$crt_bundle_new_path#" "$APPDIR"/AppRun
|
||||||
|
|
||||||
|
chmod 0755 "$APPDIR"/AppRun
|
||||||
|
|
||||||
wget --continue https://github.com/AppImage/AppImageKit/releases/download/13/appimagetool-x86_64.AppImage
|
wget --continue https://github.com/AppImage/AppImageKit/releases/download/13/appimagetool-x86_64.AppImage
|
||||||
chmod u+x appimagetool-x86_64.AppImage
|
chmod u+x appimagetool-x86_64.AppImage
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
import sys, subprocess, shutil, argparse, os
|
import sys, subprocess, shutil, argparse
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
|
@ -48,23 +48,9 @@ ssl_directory = Path("C:/") / "Program Files" / "OpenSSL"
|
||||||
shutil.copy2(ssl_directory / "libcrypto-1_1-x64.dll", out_dir)
|
shutil.copy2(ssl_directory / "libcrypto-1_1-x64.dll", out_dir)
|
||||||
shutil.copy2(ssl_directory / "libssl-1_1-x64.dll", out_dir)
|
shutil.copy2(ssl_directory / "libssl-1_1-x64.dll", out_dir)
|
||||||
|
|
||||||
|
# [TODO] Sign binary
|
||||||
if args.sign:
|
if args.sign:
|
||||||
# We assume here that signtool and certificate are properly configured.
|
pass
|
||||||
# Env var `SIGNTOOL_THUMBPRINT` must contain thumbprint of the certificate to use.
|
|
||||||
command = [
|
|
||||||
os.getenv("SIGNTOOL_PATH", "signtool.exe"),
|
|
||||||
"sign",
|
|
||||||
"/fd",
|
|
||||||
"sha256",
|
|
||||||
"/tr",
|
|
||||||
"http://ts.ssl.com",
|
|
||||||
"/td",
|
|
||||||
"sha256",
|
|
||||||
"/sha1",
|
|
||||||
os.environ["SIGNTOOL_THUMBPRINT"],
|
|
||||||
str(out_dir / "kiwix-desktop.exe"),
|
|
||||||
]
|
|
||||||
subprocess.run(command, check=True)
|
|
||||||
|
|
||||||
print(
|
print(
|
||||||
f"""Create archive
|
f"""Create archive
|
||||||
|
@ -73,5 +59,5 @@ print(
|
||||||
- With {out_dir.name}"""
|
- With {out_dir.name}"""
|
||||||
)
|
)
|
||||||
shutil.make_archive(
|
shutil.make_archive(
|
||||||
archive_path.with_suffix(""), "zip", root_dir=out_dir, base_dir=""
|
archive_path.with_suffix(""), "zip", root_dir=out_dir.parent, base_dir=out_dir.name
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,83 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import os, sys
|
||||||
|
import json
|
||||||
|
import requests
|
||||||
|
|
||||||
|
bintray_auth = (os.environ['BINTRAY_USER'], os.environ['BINTRAY_PASS'])
|
||||||
|
|
||||||
|
def create_version(version):
|
||||||
|
url = "https://api.bintray.com/packages/kiwix/kiwix/kiwixlib/versions"
|
||||||
|
payload = {
|
||||||
|
'name': version,
|
||||||
|
'desc': 'Release of libkiwix'
|
||||||
|
}
|
||||||
|
headers = {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
}
|
||||||
|
|
||||||
|
r = requests.post(url, data=json.dumps(payload), headers=headers, auth=bintray_auth)
|
||||||
|
rcode = r.status_code
|
||||||
|
|
||||||
|
if rcode == 409:
|
||||||
|
print("Bintray version %s already exists, skipping." % version)
|
||||||
|
return True
|
||||||
|
|
||||||
|
rcode_family = rcode // 100
|
||||||
|
if rcode_family in (2, 3):
|
||||||
|
print("Bintray Version created!")
|
||||||
|
return True
|
||||||
|
|
||||||
|
print("ERROR : Bintray API response {}".format(rcode))
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def upload(version, filepath, artefact):
|
||||||
|
url_template = "https://api.bintray.com/content/kiwix/kiwix/kiwixlib/{version}/org/kiwix/kiwixlib/kiwixlib/{version}/{artefact}"
|
||||||
|
parameters = {
|
||||||
|
'publish': 1,
|
||||||
|
'override': 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Upload the main artefact
|
||||||
|
url = url_template.format(version=version, artefact=artefact)
|
||||||
|
with open(filepath, 'rb') as f:
|
||||||
|
r = requests.put(url, data=f, auth=bintray_auth, params=parameters)
|
||||||
|
|
||||||
|
rcode = r.status_code
|
||||||
|
rcode_family = rcode // 100
|
||||||
|
if rcode_family not in (2, 3):
|
||||||
|
print("ERROR: Fail to upload artefact")
|
||||||
|
print(r.text)
|
||||||
|
return False
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def upload_from_json(json_path):
|
||||||
|
basedir = os.path.dirname(json_path)
|
||||||
|
with open(str(json_path)) as f:
|
||||||
|
options = json.load(f)
|
||||||
|
|
||||||
|
if not create_version(options['version']):
|
||||||
|
raise RuntimeError("Cannot create version")
|
||||||
|
|
||||||
|
for file_ in options['files']:
|
||||||
|
path = os.path.join(basedir, file_)
|
||||||
|
if not upload(options['version'], path, file_):
|
||||||
|
raise RuntimeError("Cannot upload file {}".format(file_))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
try:
|
||||||
|
info_file = sys.argv[1]
|
||||||
|
except IndexError:
|
||||||
|
print("Usage {} infofile".format(sys.argv[0]))
|
||||||
|
sys.exit(-1)
|
||||||
|
|
||||||
|
print("Use info file {}".format(info_file))
|
||||||
|
try:
|
||||||
|
upload_from_json(info_file)
|
||||||
|
except RuntimeError as e:
|
||||||
|
sys.exit(str(e))
|
||||||
|
|
Loading…
Reference in New Issue