koreader-from-src: add an update script (only updates the toplevel, at the moment)

This commit is contained in:
2024-08-08 18:16:12 +00:00
parent 1ee81db537
commit b3b38451b5
3 changed files with 283 additions and 188 deletions

View File

@@ -71,30 +71,28 @@
, zsync
}:
let
version = "2024.04";
src = fetchFromGitHub {
sourcesFor = pins: rec {
koreader = fetchFromGitHub {
owner = "koreader";
repo = "koreader";
name = "koreader"; # needed because `srcs = ` in the outer derivation is a list
fetchSubmodules = true;
rev = "v${version}";
hash = "sha256-BQnKoTj90wWZNxGn1C9iL8y1tozqdEHMgQDfQZo2axg=";
rev = "v${pins.version}";
inherit (pins.koreader) hash;
};
fbink-src-ko = fetchFromGitHub {
owner = "NiLuJe";
repo = "FBInk";
name = "fbink"; # where to unpack this in `srcs`
rev = "1a989b30a195ca240a3cf37f9de61b4b3c7e891c";
hash = "sha256-lXjAX0BoHW3L1E54d5J+wiAlAZXVmj9Y1Un8yaCwO8w=";
inherit (pins.fbink) rev hash;
};
kobo-usbms-src-ko = fetchFromGitHub {
owner = "koreader";
repo = "KoboUSBMS";
name = "kobo-usbms"; # where to unpack this in `srcs`
rev = "v1.3.9";
hash = "sha256-91B0FUnmpE6TP4Lg5mj6z/U1DZQTKiPhG3ccCSgY4mQ=";
inherit (pins.kobo-usbms) rev hash;
};
leptonica-src-ko = fetchFromGitHub {
@@ -108,32 +106,28 @@ let
owner = "DanBloomberg";
repo = "leptonica";
name = "leptonica"; # where to unpack this in `srcs`
rev = "1.74.1";
hash = "sha256-SDXKam768xvZZvTbXe3sssvZyeLEEiY97Vrzx8hoc6g=";
inherit (pins.leptonica) rev hash;
};
libk2pdfopt-src-ko = fetchFromGitHub {
owner = "koreader";
repo = "libk2pdfopt";
name = "libk2pdfopt"; # where to unpack this in `srcs`
rev = "47caea57aaf6200fc2b24669b6417fe6919926b7";
hash = "sha256-8Em4neXTovhrTb+GBhs6kDFEdsQSt5KiYoHURwdtjPQ=";
inherit (pins.libk2pdfopt) rev hash;
};
lodepng-src-ko = fetchFromGitHub {
owner = "lvandeve";
repo = "lodepng";
name = "lodepng"; # where to unpack this in `srcs`
rev = "d398e0f10d152a5d17fa30463474dc9f56523f9c";
hash = "sha256-ApOHUgU6X1rHwyjAHA/0Nt+buDFqY2ttXEnEvdrRl3A=";
inherit (pins.lodepng) rev hash;
};
lunasvg-src-ko = fetchFromGitHub {
owner = "sammycage";
repo = "lunasvg";
name = "lunasvg"; # where to unpack this in `srcs`
rev = "59d6f6ba835c1b7c7a0f9d4ea540ec3981777885";
hash = "sha256-gW2ikakS6Omz5upmy26nAo/jkGHYO2kjlB3UmKJBh1k=";
inherit (pins.lunasvg) rev hash;
};
minizip-src-ko = fetchFromGitHub {
@@ -141,8 +135,7 @@ let
owner = "nmoinvaz";
repo = "minizip";
name = "minizip"; # where to unpack this in `srcs`
rev = "0b46a2b4ca317b80bc53594688883f7188ac4d08";
hash = "sha256-P/3MMMGYDqD9NmkYvw/thKpUNa3wNOSlBBjANHSonAg=";
inherit (pins.minizip) rev hash;
};
mupdf-src-ko = fetchFromGitHub {
@@ -150,8 +143,7 @@ let
repo = "mupdf";
name = "mupdf"; # where to unpack this in `srcs`
fetchSubmodules = true; # specifically for jbig2dec, mujs, openjpeg
rev = "1.13.0";
hash = "sha256-pQejRon9fO9A1mhz3oLjBr1j4HveDLcQIWjR1/Rpy5Q=";
inherit (pins.mupdf) rev hash;
};
nanosvg-headers-ko = symlinkJoin {
@@ -160,7 +152,7 @@ let
name = "nanosvg-headers-ko";
paths = [
"${nanosvg.src}/src"
"${src}/base/thirdparty/nanosvg"
"${koreader}/base/thirdparty/nanosvg"
];
};
@@ -168,8 +160,7 @@ let
owner = "famzah";
repo = "popen-noshell";
name = "popen-noshell";
rev = "e715396a4951ee91c40a98d2824a130f158268bb";
hash = "sha256-JeBZMsg6ZUGSnyZ4eds4w63gM/L73EsAnLaHOPpL6iM=";
inherit (pins.popen-noshell) rev hash;
};
tesseract-src-ko = fetchFromGitHub {
@@ -177,29 +168,45 @@ let
owner = "tesseract-ocr";
repo = "tesseract";
name = "tesseract";
rev = "60176fc5ae5e7f6bdef60c926a4b5ea03de2bfa7";
hash = "sha256-FQvlrJ+Uy7+wtUxBuS5NdoToUwNRhYw2ju8Ya8MLyQw=";
inherit (pins.tesseract) rev hash;
};
turbo-src-ko = fetchFromGitHub {
owner = "kernelsauce";
repo = "turbo";
name = "turbo";
rev = "v2.1.3";
hash = "sha256-vBRkFdc5a0FIt15HBz3TnqMZ+GGsqjEefnfJEpuVTBs=";
inherit (pins.turbo) rev hash;
};
};
# XXX: for some inscrutable reason, `enable52Compat` is *partially* broken, only when cross compiling.
# `table.unpack` is non-nil, but `table.pack` is nil.
# the normal path is for `enable52Compat` to set `env.NIX_CFLAGS_COMPILE = "-DLUAJIT_ENABLE_LUA52COMPAT";`
# which in turn sets `#define LJ_52 1`, and gates functions like `table.pack`, `table.unpack`.
# instead, koreader just removes the `#if LJ_52` gates. doing the same in nixpkgs seems to work.
# luajit52 = luajit.override { enable52Compat = true; self = luajit52; };
luajit52 = (luajit.override { self = luajit52; }).overrideAttrs (super: {
patches = (super.patches or []) ++ [
"${src}/base/thirdparty/luajit/koreader-luajit-enable-table_pack.patch"
thirdparty = [
curl
czmq
djvulibre
dropbear
freetype
fribidi
gettext
giflib
glib
gnutar
harfbuzz
libiconvReal
libjpeg_turbo
libpng
libunibreak
libwebp
openssl
openssh
sdcv
SDL2
sqlite
utf8proc
zlib
zeromq4
zstd
zsync
];
});
overlayedLuaPkgs = luaPkgs: let
ps = with ps; {
@@ -257,21 +264,6 @@ let
} // luaPkgs;
in ps;
luaEnv = luajit52.withPackages (ps: with (overlayedLuaPkgs ps); [
luajson
htmlparser
lua-spore
lpeg
luasec
luasocket
rapidjson
]);
rockspecFor = luaPkgName: let
pkg = (overlayedLuaPkgs luaEnv.pkgs)."${luaPkgName}";
in
"${luaEnv}/${pkg.rocksSubdir}/${luaPkgName}/${pkg.rockspecVersion}/${luaPkgName}-${pkg.rockspecVersion}.rockspec";
crossTargets = {
# koreader-base Makefile targets to use when compiling for the given host platform
# only used when cross compiling
@@ -310,6 +302,37 @@ let
# mostly for k2pdf, which expects lib/ and include/ for each dep to live side-by-side
libAndDev = pkg: fhsLib pkg { lib = true; include = true; };
in
stdenv.mkDerivation (finalAttrs: with finalAttrs; let
pins = lib.importJSON ./versions.json;
sources = sourcesFor pins;
# XXX: for some inscrutable reason, `enable52Compat` is *partially* broken, only when cross compiling.
# `table.unpack` is non-nil, but `table.pack` is nil.
# the normal path is for `enable52Compat` to set `env.NIX_CFLAGS_COMPILE = "-DLUAJIT_ENABLE_LUA52COMPAT";`
# which in turn sets `#define LJ_52 1`, and gates functions like `table.pack`, `table.unpack`.
# instead, koreader just removes the `#if LJ_52` gates. doing the same in nixpkgs seems to work.
# luajit52 = luajit.override { enable52Compat = true; self = luajit52; };
luajit52 = (luajit.override { self = luajit52; }).overrideAttrs (super: {
patches = (super.patches or []) ++ [
"${sources.koreader}/base/thirdparty/luajit/koreader-luajit-enable-table_pack.patch"
];
});
luaEnv = luajit52.withPackages (ps: with (overlayedLuaPkgs ps); [
luajson
htmlparser
lua-spore
lpeg
luasec
luasocket
rapidjson
]);
rockspecFor = luaPkgName: let
pkg = (overlayedLuaPkgs luaEnv.pkgs)."${luaPkgName}";
in
"${luaEnv}/${pkg.rocksSubdir}/${luaPkgName}/${pkg.rockspecVersion}/${luaPkgName}-${pkg.rockspecVersion}.rockspec";
# these probably have more dirs than they really need.
djvulibreAll = fhsLib djvulibre { lib=true; include=true; flatInclude=true; };
@@ -323,7 +346,7 @@ let
# values to provide to koreader/base/Makefile.defs.
# should be ok to put this in `makeFlags` array, but i can't get that to work!
makefileDefs = ''
makefileDefs = with sources; ''
CURL_LIB="${lib.getLib curl}/lib/libcurl.so" \
CURL_DIR="${lib.getDev curl}" \
CZMQ_LIB="${lib.getLib czmq}/lib/libczmq.so" \
@@ -419,52 +442,22 @@ let
ln -sf "${lib.getBin sdcv}/bin/sdcv" "${outdir}/sdcv"
ln -sf "${lib.getBin zsync}/bin/zsync" "${outdir}/zsync2"
'';
thirdparty = [
curl
czmq
djvulibre
dropbear
freetype
fribidi
gettext
giflib
glib
gnutar
harfbuzz
libiconvReal
libjpeg_turbo
libpng
libunibreak
libwebp
openssl
openssh
sdcv
SDL2
sqlite
utf8proc
zlib
zeromq4
zstd
zsync
];
in
stdenv.mkDerivation rec {
in {
pname = "koreader-from-src";
inherit version;
inherit (pins) version;
srcs = [
src
fbink-src-ko
kobo-usbms-src-ko
leptonica-src-ko
libk2pdfopt-src-ko
lodepng-src-ko
lunasvg-src-ko
minizip-src-ko
mupdf-src-ko
popen-noshell-src-ko
tesseract-src-ko
turbo-src-ko
sources.koreader
sources.fbink-src-ko
sources.kobo-usbms-src-ko
sources.leptonica-src-ko
sources.libk2pdfopt-src-ko
sources.lodepng-src-ko
sources.lunasvg-src-ko
sources.minizip-src-ko
sources.mupdf-src-ko
sources.popen-noshell-src-ko
sources.tesseract-src-ko
sources.turbo-src-ko
];
patches = [
@@ -569,6 +562,8 @@ stdenv.mkDerivation rec {
htmlparser
lua-spore
;
# XXX: `update` doesn't update everything -- just the toplevel version/hash
updateScript = [ ./update ];
};
meta = with lib; {
@@ -580,4 +575,4 @@ stdenv.mkDerivation rec {
license = licenses.agpl3Only;
maintainers = with maintainers; [ colinsane contrun neonfuz];
};
}
})

View File

@@ -0,0 +1,50 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p bash curl jq moreutils nix-prefetch
# shellcheck shell=bash
#
# inspired by <repo:nixos/nixpkgs:pkgs/development/libraries/duckdb/update.sh>
cd /home/colin/nixos
# cd "$(dirname "${BASH_SOURCE[0]}")"
# nixpkgs=$(while [[ ! -e .git ]]; do [[ ${PWD} != / ]] || exit 1; cd ..; done; echo "${PWD}")
repo=koreader
owner=koreader
msg() {
echo "$*" >&2
}
get_latest() {
curl ${GITHUB_TOKEN:+" -u \":$GITHUB_TOKEN\""} -s \
"https://api.github.com/repos/${owner}/${repo}/releases/latest" | jq -r .tag_name
}
get_sha() {
curl ${GITHUB_TOKEN:+" -u \":$GITHUB_TOKEN\""} -s \
"https://api.github.com/repos/${owner}/${repo}/git/ref/tags/$1" | jq -r .object.sha
}
json_get() {
jq -r "$1" < 'versions.json'
}
json_set() {
jq --arg x "$2" "$1 = \$x" < 'versions.json' | sponge 'versions.json'
}
tag=$(get_latest)
version=${tag/v/}
msg "tag: $tag, version: $version"
[[ ${version} = $(json_get .version) ]] && { msg "${version} is up to date"; exit 0; }
sha=$(get_sha "${tag}")
sri=$(nix-prefetch --index 0 -E "koreader-from-src.overrideAttrs { version = \"${version}\"; }")
msg "sha: $sha, sri: $sri"
cd pkgs/additional/koreader-from-src
json_set ".version" "${version}"
json_set ".koreader.hash" "${sri}"

View File

@@ -0,0 +1,50 @@
{
"version": "2024.04",
"koreader": {
"hash": "sha256-BQnKoTj90wWZNxGn1C9iL8y1tozqdEHMgQDfQZo2axg="
},
"fbink": {
"rev": "1a989b30a195ca240a3cf37f9de61b4b3c7e891c",
"hash": "sha256-lXjAX0BoHW3L1E54d5J+wiAlAZXVmj9Y1Un8yaCwO8w="
},
"kobo-usbms": {
"rev": "v1.3.9",
"hash": "sha256-91B0FUnmpE6TP4Lg5mj6z/U1DZQTKiPhG3ccCSgY4mQ="
},
"leptonica": {
"rev": "1.74.1",
"hash": "sha256-SDXKam768xvZZvTbXe3sssvZyeLEEiY97Vrzx8hoc6g="
},
"libk2pdfopt": {
"rev": "47caea57aaf6200fc2b24669b6417fe6919926b7",
"hash": "sha256-8Em4neXTovhrTb+GBhs6kDFEdsQSt5KiYoHURwdtjPQ="
},
"lodepng": {
"rev": "d398e0f10d152a5d17fa30463474dc9f56523f9c",
"hash": "sha256-ApOHUgU6X1rHwyjAHA/0Nt+buDFqY2ttXEnEvdrRl3A="
},
"lunasvg": {
"rev": "59d6f6ba835c1b7c7a0f9d4ea540ec3981777885",
"hash": "sha256-gW2ikakS6Omz5upmy26nAo/jkGHYO2kjlB3UmKJBh1k="
},
"minizip": {
"rev": "0b46a2b4ca317b80bc53594688883f7188ac4d08",
"hash": "sha256-P/3MMMGYDqD9NmkYvw/thKpUNa3wNOSlBBjANHSonAg="
},
"mupdf": {
"rev": "1.13.0",
"hash": "sha256-pQejRon9fO9A1mhz3oLjBr1j4HveDLcQIWjR1/Rpy5Q="
},
"popen-noshell": {
"rev": "e715396a4951ee91c40a98d2824a130f158268bb",
"hash": "sha256-JeBZMsg6ZUGSnyZ4eds4w63gM/L73EsAnLaHOPpL6iM="
},
"tesseract": {
"rev": "60176fc5ae5e7f6bdef60c926a4b5ea03de2bfa7",
"hash": "sha256-FQvlrJ+Uy7+wtUxBuS5NdoToUwNRhYw2ju8Ya8MLyQw="
},
"turbo": {
"rev": "v2.1.3",
"hash": "sha256-vBRkFdc5a0FIt15HBz3TnqMZ+GGsqjEefnfJEpuVTBs="
}
}