koreader-from-src: add an update script (only updates the toplevel, at the moment)
This commit is contained in:
@@ -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];
|
||||
};
|
||||
}
|
||||
})
|
||||
|
50
pkgs/additional/koreader-from-src/update
Executable file
50
pkgs/additional/koreader-from-src/update
Executable 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}"
|
||||
|
50
pkgs/additional/koreader-from-src/versions.json
Normal file
50
pkgs/additional/koreader-from-src/versions.json
Normal 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="
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user