libreoffice: write a whole, batteries included updateScript
This commit is contained in:
parent
90160e5fe3
commit
582e1924c9
18 changed files with 138 additions and 150 deletions
|
@ -1,19 +0,0 @@
|
||||||
LibreOffice
|
|
||||||
===========
|
|
||||||
|
|
||||||
Here are instructions how to update libreoffice. In the below commands and
|
|
||||||
instructions, $VARIANT is either `still` or `fresh`.
|
|
||||||
|
|
||||||
1. Update the necessary version parts in `src-$VARIANT/primary.nix`.
|
|
||||||
2. Run the following command:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
nix-shell gen-shell.nix --argstr variant VARIANT --run generate
|
|
||||||
```
|
|
||||||
|
|
||||||
3. It will fail initially, due to hash mismatch in the main `src` attribute.
|
|
||||||
Fix the hash according to the failure.
|
|
||||||
4. Run the command from step 2 again, now it will take a while.
|
|
||||||
5. Zero-out the hashes of the translations and help attributes in
|
|
||||||
`src-$VARIANT/primary.nix`.
|
|
||||||
6. Update the hashes above by building `libreoffice-$VARIANT`.
|
|
|
@ -145,29 +145,33 @@ let
|
||||||
};
|
};
|
||||||
|
|
||||||
importVariant = f: import (./. + "/src-${variant}/${f}");
|
importVariant = f: import (./. + "/src-${variant}/${f}");
|
||||||
|
# Update these files with:
|
||||||
primary-src = importVariant "primary.nix" { inherit fetchurl; };
|
# nix-shell maintainers/scripts/update.nix --argstr package libreoffice-$VARIANT.unwrapped
|
||||||
|
version = importVariant "version.nix";
|
||||||
inherit (primary-src) major minor version;
|
srcsAttributes = {
|
||||||
|
main = importVariant "main.nix";
|
||||||
langsSpaces = concatStringsSep " " langs;
|
help = importVariant "help.nix";
|
||||||
|
translations = importVariant "translations.nix";
|
||||||
|
deps = (importVariant "deps.nix") ++ [
|
||||||
|
# TODO: Why is this needed?
|
||||||
|
(rec {
|
||||||
|
name = "unowinreg.dll";
|
||||||
|
url = "https://dev-www.libreoffice.org/extern/${md5name}";
|
||||||
|
sha256 = "1infwvv1p6i21scywrldsxs22f62x85mns4iq8h6vr6vlx3fdzga";
|
||||||
|
md5 = "185d60944ea767075d27247c3162b3bc";
|
||||||
|
md5name = "${md5}-${name}";
|
||||||
|
})
|
||||||
|
];
|
||||||
|
};
|
||||||
srcs = {
|
srcs = {
|
||||||
primary = primary-src;
|
third_party = map (x:
|
||||||
third_party =
|
(fetchurl {
|
||||||
map (x: ((fetchurl { inherit (x) url sha256 name; }) // { inherit (x) md5name md5; }))
|
inherit (x) url sha256 name;
|
||||||
(importVariant "download.nix" ++ [
|
}) // {
|
||||||
(rec {
|
inherit (x) md5name md5;
|
||||||
name = "unowinreg.dll";
|
}) srcsAttributes.deps;
|
||||||
url = "https://dev-www.libreoffice.org/extern/${md5name}";
|
translations = fetchurl srcsAttributes.translations;
|
||||||
sha256 = "1infwvv1p6i21scywrldsxs22f62x85mns4iq8h6vr6vlx3fdzga";
|
help = fetchurl srcsAttributes.help;
|
||||||
md5 = "185d60944ea767075d27247c3162b3bc";
|
|
||||||
md5name = "${md5}-${name}";
|
|
||||||
})
|
|
||||||
]);
|
|
||||||
|
|
||||||
translations = primary-src.translations;
|
|
||||||
help = primary-src.help;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# See `postPatch` for details
|
# See `postPatch` for details
|
||||||
|
@ -188,8 +192,7 @@ let
|
||||||
in stdenv.mkDerivation (finalAttrs: {
|
in stdenv.mkDerivation (finalAttrs: {
|
||||||
pname = "libreoffice";
|
pname = "libreoffice";
|
||||||
inherit version;
|
inherit version;
|
||||||
|
src = fetchurl srcsAttributes.main;
|
||||||
inherit (primary-src) src;
|
|
||||||
|
|
||||||
env.NIX_CFLAGS_COMPILE = toString ([
|
env.NIX_CFLAGS_COMPILE = toString ([
|
||||||
"-I${librdf_rasqal}/include/rasqal" # librdf_redland refers to rasqal.h instead of rasqal/rasqal.h
|
"-I${librdf_rasqal}/include/rasqal" # librdf_redland refers to rasqal.h instead of rasqal/rasqal.h
|
||||||
|
@ -276,7 +279,7 @@ in stdenv.mkDerivation (finalAttrs: {
|
||||||
preConfigure = ''
|
preConfigure = ''
|
||||||
configureFlagsArray=(
|
configureFlagsArray=(
|
||||||
"--with-parallelism=$NIX_BUILD_CORES"
|
"--with-parallelism=$NIX_BUILD_CORES"
|
||||||
"--with-lang=${langsSpaces}"
|
"--with-lang=${concatStringsSep " " langs}"
|
||||||
);
|
);
|
||||||
|
|
||||||
chmod a+x ./bin/unpack-sources
|
chmod a+x ./bin/unpack-sources
|
||||||
|
@ -609,6 +612,13 @@ in stdenv.mkDerivation (finalAttrs: {
|
||||||
passthru = {
|
passthru = {
|
||||||
inherit srcs;
|
inherit srcs;
|
||||||
jdk = jre';
|
jdk = jre';
|
||||||
|
updateScript = [
|
||||||
|
./update.sh
|
||||||
|
# Pass it this file name as argument
|
||||||
|
(builtins.unsafeGetAttrPos "pname" finalAttrs.finalPackage).file
|
||||||
|
# And the variant
|
||||||
|
variant
|
||||||
|
];
|
||||||
inherit kdeIntegration;
|
inherit kdeIntegration;
|
||||||
# For the wrapper.nix
|
# For the wrapper.nix
|
||||||
inherit gtk3;
|
inherit gtk3;
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
if [ -e .attrs.sh ]; then source .attrs.sh; fi
|
|
||||||
source $stdenv/setup
|
|
||||||
|
|
||||||
tar --extract --file=$src libreoffice-$version/download.lst -O > $out
|
|
|
@ -1,29 +0,0 @@
|
||||||
{ pkgs ? (import <nixpkgs> {}), variant }:
|
|
||||||
|
|
||||||
with pkgs;
|
|
||||||
|
|
||||||
let
|
|
||||||
|
|
||||||
primary-src = callPackage (./. + "/src-${variant}/primary.nix") {};
|
|
||||||
|
|
||||||
in
|
|
||||||
|
|
||||||
stdenv.mkDerivation {
|
|
||||||
name = "generate-libreoffice-srcs-shell";
|
|
||||||
|
|
||||||
buildCommand = "exit 1";
|
|
||||||
|
|
||||||
downloadList = stdenv.mkDerivation {
|
|
||||||
name = "libreoffice-${primary-src.version}-download-list";
|
|
||||||
inherit (primary-src) src version;
|
|
||||||
builder = ./download-list-builder.sh;
|
|
||||||
};
|
|
||||||
|
|
||||||
buildInputs = [ python3 ];
|
|
||||||
|
|
||||||
shellHook = ''
|
|
||||||
function generate {
|
|
||||||
python3 generate-libreoffice-srcs.py ${variant} > src-${variant}/download.nix
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
}
|
|
4
pkgs/applications/office/libreoffice/src-fresh/help.nix
Normal file
4
pkgs/applications/office/libreoffice/src-fresh/help.nix
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
sha256 = "sha256-qQ+THdMjjrZOb2WWTqj5DlrM2a0Qkl1aYMevaqWFwfE=";
|
||||||
|
url = "https://download.documentfoundation.org/libreoffice/src/7.5.4/libreoffice-help-7.5.4.2.tar.xz";
|
||||||
|
}
|
4
pkgs/applications/office/libreoffice/src-fresh/main.nix
Normal file
4
pkgs/applications/office/libreoffice/src-fresh/main.nix
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
sha256 = "sha256-dWE7yXldkiEnsJOxfxyZ9p05eARqexgRRgNV158VVF4=";
|
||||||
|
url = "https://download.documentfoundation.org/libreoffice/src/7.5.4/libreoffice-7.5.4.2.tar.xz";
|
||||||
|
}
|
|
@ -1,36 +0,0 @@
|
||||||
{ fetchurl }:
|
|
||||||
|
|
||||||
rec {
|
|
||||||
fetchSrc = {name, hash}: fetchurl {
|
|
||||||
url = "https://download.documentfoundation.org/libreoffice/src/${subdir}/libreoffice-${name}-${version}.tar.xz";
|
|
||||||
sha256 = hash;
|
|
||||||
};
|
|
||||||
|
|
||||||
major = "7";
|
|
||||||
minor = "5";
|
|
||||||
patch = "4";
|
|
||||||
tweak = "1";
|
|
||||||
|
|
||||||
subdir = "${major}.${minor}.${patch}";
|
|
||||||
|
|
||||||
version = "${subdir}${if tweak == "" then "" else "."}${tweak}";
|
|
||||||
|
|
||||||
src = fetchurl {
|
|
||||||
url = "https://download.documentfoundation.org/libreoffice/src/${subdir}/libreoffice-${version}.tar.xz";
|
|
||||||
hash = "sha256-dWE7yXldkiEnsJOxfxyZ9p05eARqexgRRgNV158VVF4=";
|
|
||||||
};
|
|
||||||
|
|
||||||
# FIXME rename
|
|
||||||
translations = fetchSrc {
|
|
||||||
name = "translations";
|
|
||||||
hash = "sha256-dv3L8DtdxZcwmeXnqtTtwIpOvwZg3aH3VvJBiiZzbh0=";
|
|
||||||
};
|
|
||||||
|
|
||||||
# the "dictionaries" archive is not used for LO build because we already build hunspellDicts packages from
|
|
||||||
# it and LibreOffice can use these by pointing DICPATH environment variable at the hunspell directory
|
|
||||||
|
|
||||||
help = fetchSrc {
|
|
||||||
name = "help";
|
|
||||||
hash = "sha256-2CrGEyK5AQEAo1Qz1ACmvMH7BaOubW5BNLWv3fDEdOY=";
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
sha256 = "sha256-frJkws1m8CiDFTW+wNP837aH+uTet30gDP5ANMo6EK0=";
|
||||||
|
url = "https://download.documentfoundation.org/libreoffice/src/7.5.4/libreoffice-translations-7.5.4.2.tar.xz";
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
"7.5.4.2"
|
4
pkgs/applications/office/libreoffice/src-still/help.nix
Normal file
4
pkgs/applications/office/libreoffice/src-still/help.nix
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
sha256 = "sha256-vcQWE3mBZx2sBQ9KzTh6zM7277mK9twfvyESTzTiII8=";
|
||||||
|
url = "https://download.documentfoundation.org/libreoffice/src/7.4.7/libreoffice-help-7.4.7.2.tar.xz";
|
||||||
|
}
|
4
pkgs/applications/office/libreoffice/src-still/main.nix
Normal file
4
pkgs/applications/office/libreoffice/src-still/main.nix
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
sha256 = "sha256-dD2R8qE4png4D6eo7LWyQB2ZSwZ7MwdQ8DrY9SOi+yA=";
|
||||||
|
url = "https://download.documentfoundation.org/libreoffice/src/7.4.7/libreoffice-7.4.7.2.tar.xz";
|
||||||
|
}
|
|
@ -1,36 +0,0 @@
|
||||||
{ fetchurl }:
|
|
||||||
|
|
||||||
rec {
|
|
||||||
fetchSrc = {name, hash}: fetchurl {
|
|
||||||
url = "https://download.documentfoundation.org/libreoffice/src/${subdir}/libreoffice-${name}-${version}.tar.xz";
|
|
||||||
inherit hash;
|
|
||||||
};
|
|
||||||
|
|
||||||
major = "7";
|
|
||||||
minor = "4";
|
|
||||||
patch = "7";
|
|
||||||
tweak = "2";
|
|
||||||
|
|
||||||
subdir = "${major}.${minor}.${patch}";
|
|
||||||
|
|
||||||
version = "${subdir}${if tweak == "" then "" else "."}${tweak}";
|
|
||||||
|
|
||||||
src = fetchurl {
|
|
||||||
url = "https://download.documentfoundation.org/libreoffice/src/${subdir}/libreoffice-${version}.tar.xz";
|
|
||||||
hash = "sha256-dD2R8qE4png4D6eo7LWyQB2ZSwZ7MwdQ8DrY9SOi+yA=";
|
|
||||||
};
|
|
||||||
|
|
||||||
# FIXME rename
|
|
||||||
translations = fetchSrc {
|
|
||||||
name = "translations";
|
|
||||||
hash = "sha256-7wea0EClmvwcPvgQDGagkOF7eBVvYTZScCEEpirdXnE=";
|
|
||||||
};
|
|
||||||
|
|
||||||
# the "dictionaries" archive is not used for LO build because we already build hunspellDicts packages from
|
|
||||||
# it and LibreOffice can use these by pointing DICPATH environment variable at the hunspell directory
|
|
||||||
|
|
||||||
help = fetchSrc {
|
|
||||||
name = "help";
|
|
||||||
hash = "sha256-vcQWE3mBZx2sBQ9KzTh6zM7277mK9twfvyESTzTiII8=";
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
sha256 = "sha256-7wea0EClmvwcPvgQDGagkOF7eBVvYTZScCEEpirdXnE=";
|
||||||
|
url = "https://download.documentfoundation.org/libreoffice/src/7.4.7/libreoffice-translations-7.4.7.2.tar.xz";
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
"7.4.7.1"
|
74
pkgs/applications/office/libreoffice/update.sh
Executable file
74
pkgs/applications/office/libreoffice/update.sh
Executable file
|
@ -0,0 +1,74 @@
|
||||||
|
#!/usr/bin/env nix-shell
|
||||||
|
#!nix-shell -i bash -p python3 pup curl jq nix
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
echoerr() { echo "$@" 1>&2; }
|
||||||
|
|
||||||
|
fname="$1"
|
||||||
|
echoerr got fname $fname
|
||||||
|
shift
|
||||||
|
|
||||||
|
variant="$1"
|
||||||
|
# See comment near version_major variable
|
||||||
|
if [[ $variant == fresh ]]; then
|
||||||
|
head_tail=head
|
||||||
|
elif [[ $variant == still ]]; then
|
||||||
|
head_tail=tail
|
||||||
|
else
|
||||||
|
echoerr got unknown variant $variant
|
||||||
|
exit 3
|
||||||
|
fi
|
||||||
|
echoerr got variant $variant
|
||||||
|
shift
|
||||||
|
|
||||||
|
# Not totally needed, but makes it easy to run the update in case tis folder is
|
||||||
|
# deleted.
|
||||||
|
mkdir -p "$(dirname $fname)/src-$variant"
|
||||||
|
cd "$(dirname $fname)/src-$variant"
|
||||||
|
|
||||||
|
# The pup command prints both fresh and still versions one after another, and
|
||||||
|
# we use either head -1 or tail -1 to get the right version, per the if elif
|
||||||
|
# above.
|
||||||
|
version_major="$(curl --silent https://www.libreoffice.org/download/download-libreoffice/ |\
|
||||||
|
pup '.dl_version_number text{}' | $head_tail -1)"
|
||||||
|
echoerr got from website ${variant}_version $version_major
|
||||||
|
baseurl=https://download.documentfoundation.org/libreoffice/src/$version_major
|
||||||
|
tarballs=($(curl --silent $baseurl/ |\
|
||||||
|
pup 'table json{}' |\
|
||||||
|
jq --raw-output '.. | .href? | strings' |\
|
||||||
|
grep "$version_major.*.tar.xz$"))
|
||||||
|
|
||||||
|
full_version="$(echo ${tarballs[0]} | sed -e 's/^libreoffice-//' -e 's/.tar.xz$//')"
|
||||||
|
echoerr full version is $full_version
|
||||||
|
echo \"$full_version\" > version.nix
|
||||||
|
|
||||||
|
for t in help translations; do
|
||||||
|
echo "{" > $t.nix
|
||||||
|
echo " sha256 = "\"$(nix-prefetch-url $baseurl/libreoffice-$t-$full_version.tar.xz)'";' >> $t.nix
|
||||||
|
echo " url = "\"$baseurl/libreoffice-$t-$full_version.tar.xz'";' >> $t.nix
|
||||||
|
echo "}" >> $t.nix
|
||||||
|
done
|
||||||
|
|
||||||
|
# Out of loop nix-prefetch-url, because there is no $t, and we want the output
|
||||||
|
# path as well, to get the download.lst file from there afterwards.
|
||||||
|
main_path_hash=($(nix-prefetch-url --print-path $baseurl/libreoffice-$full_version.tar.xz))
|
||||||
|
echo "{" > main.nix
|
||||||
|
echo " sha256 = "\"${main_path_hash[0]}'";' >> main.nix
|
||||||
|
echo " url = "\"$baseurl/libreoffice-$full_version.tar.xz'";' >> main.nix
|
||||||
|
echo "}" >> main.nix
|
||||||
|
echoerr got filename ${main_path_hash[1]}
|
||||||
|
|
||||||
|
# Environment variable required by ../generate-libreoffice-srcs.py
|
||||||
|
export downloadList=/tmp/nixpkgs-libreoffice-update-download-$full_version.lst
|
||||||
|
# Need to extract the file only if it doesn't exist, otherwise spare time be
|
||||||
|
# skipping this.
|
||||||
|
if [[ ! -f "$downloadList" ]]; then
|
||||||
|
tar --extract \
|
||||||
|
--file=${main_path_hash[1]} \
|
||||||
|
libreoffice-$full_version/download.lst \
|
||||||
|
-O > $downloadList
|
||||||
|
else
|
||||||
|
echoerr relying on previously downloaded downloadList file
|
||||||
|
fi
|
||||||
|
cd ..
|
||||||
|
python3 ./generate-libreoffice-srcs.py > src-$variant/deps.nix
|
|
@ -19,7 +19,9 @@
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
inherit (unwrapped.srcs.primary) major minor;
|
inherit (unwrapped) version;
|
||||||
|
major = lib.versions.major version;
|
||||||
|
minor = lib.versions.minor version;
|
||||||
|
|
||||||
makeWrapperArgs = builtins.concatStringsSep " " ([
|
makeWrapperArgs = builtins.concatStringsSep " " ([
|
||||||
"--set" "GDK_PIXBUF_MODULE_FILE" "${librsvg}/${gdk-pixbuf.moduleDir}.cache"
|
"--set" "GDK_PIXBUF_MODULE_FILE" "${librsvg}/${gdk-pixbuf.moduleDir}.cache"
|
||||||
|
|
Loading…
Reference in a new issue