wpsoffice-cn: 12.1.0.17900 -> 12.1.2.22571 (#441614)

rewine 6131b8b1 a80e12c2

Changed files
+101 -78
pkgs
by-name
+55 -78
pkgs/by-name/wp/wpsoffice-cn/package.nix
···
libtool,
libxkbcommon,
nspr,
-
mesa,
-
libtiff,
udev,
gtk3,
+
libgbm,
+
libusb1,
libsForQt5,
xorg,
cups,
pango,
-
libjpeg,
-
gtk2,
-
gdk-pixbuf,
-
libpulseaudio,
-
libbsd,
-
libusb1,
+
bzip2,
libmysqlclient,
-
llvmPackages,
-
dbus,
-
gcc-unwrapped,
-
freetype,
-
curl,
-
makeWrapper,
runCommandLocal,
+
curl,
+
coreutils,
cacert,
-
coreutils,
}:
+
let
-
pkgVersion = "12.1.0.17900";
-
url = "https://wps-linux-personal.wpscdn.cn/wps/download/ep/Linux2023/${lib.last (lib.splitVersion pkgVersion)}/wps-office_${pkgVersion}_amd64.deb";
-
hash = "sha256-i2EVCmDLE2gx7l2aAo+fW8onP/z+xlPIbQYwKhQ46+o=";
-
uri = builtins.replaceStrings [ "https://wps-linux-personal.wpscdn.cn" ] [ "" ] url;
-
securityKey = "7f8faaaa468174dc1c9cd62e5f218a5b";
-
in
-
stdenv.mkDerivation rec {
pname = "wpsoffice-cn";
-
version = pkgVersion;
+
sources = import ./sources.nix;
+
version = sources.version;
-
src =
-
runCommandLocal "wps-office_${version}_amd64.deb"
+
fetch =
+
{
+
url,
+
uri,
+
hash,
+
}:
+
runCommandLocal "wpsoffice-cn-${version}-src"
{
-
outputHashMode = "recursive";
outputHashAlgo = "sha256";
outputHash = hash;
···
SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt";
}
''
+
readonly SECURITY_KEY="7f8faaaa468174dc1c9cd62e5f218a5b"
+
timestamp10=$(date '+%s')
-
md5hash=($(echo -n "${securityKey}${uri}$timestamp10" | md5sum))
-
curl \
-
--retry 3 --retry-delay 3 \
-
"${url}?t=$timestamp10&k=$md5hash" \
-
> $out
+
md5hash=($(printf '%s' "$SECURITY_KEY${uri}$timestamp10" | md5sum))
+
+
curl --retry 3 --retry-delay 3 "${url}?t=$timestamp10&k=$md5hash" > $out
'';
+
srcs = {
+
x86_64-linux = fetch sources.x86_64;
+
};
+
+
src =
+
srcs.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
+
in
+
+
stdenv.mkDerivation {
+
inherit pname src version;
+
unpackCmd = "dpkg -x $src .";
sourceRoot = ".";
nativeBuildInputs = [
dpkg
autoPatchelfHook
-
makeWrapper
];
buildInputs = [
alsa-lib
at-spi2-core
libtool
-
libjpeg
libxkbcommon
nspr
-
mesa
-
libtiff
udev
gtk3
-
libsForQt5.qt5.qtbase
+
libgbm
+
libusb1
+
libsForQt5.qtbase
xorg.libXdamage
xorg.libXtst
xorg.libXv
-
gtk2
-
gdk-pixbuf
-
libpulseaudio
-
xorg.libXScrnSaver
-
xorg.libXxf86vm
-
libbsd
-
libusb1
-
libmysqlclient
-
llvmPackages.openmp
-
dbus
];
dontWrapQtApps = true;
+
stripAllList = [ "opt" ];
+
runtimeDependencies = map lib.getLib [
cups
pango
-
freetype
-
gcc-unwrapped.lib
];
autoPatchelfIgnoreMissingDeps = [
-
# distribution is missing libkappessframework.so
-
"libkappessframework.so"
-
# qt4 support is deprecated
-
"libQtCore.so.4"
-
"libQtNetwork.so.4"
-
"libQtXml.so.4"
-
# file manager integration. Not needed
-
"libnautilus-extension.so.1"
-
"libcaja-extension.so.1"
"libpeony.so.3"
-
# libuof.so is a exclusive library in WPS. No need to repatch it
-
"libuof.so"
];
installPhase = ''
runHook preInstall
-
prefix=$out/opt/kingsoft/wps-office
+
mkdir -p $out
+
cp -r opt $out
-
cp -r usr/* $out
-
for i in wps wpp et wpspdf; do
-
substituteInPlace $out/bin/$i \
-
--replace /opt/kingsoft/wps-office $prefix
+
cp -r usr/{bin,share} $out
+
+
for i in $out/bin/*; do
+
substituteInPlace $i \
+
--replace-fail /opt/kingsoft/wps-office $out/opt/kingsoft/wps-office
done
-
for i in $out/share/applications/*;do
+
+
for i in $out/share/applications/*; do
substituteInPlace $i \
-
--replace /usr/bin $out/bin
+
--replace-fail /usr/bin $out/bin
done
-
# need system freetype and gcc lib to run properly
-
for i in wps wpp et wpspdf wpsoffice; do
-
wrapProgram $out/opt/kingsoft/wps-office/office6/$i \
-
--set LD_PRELOAD "${freetype}/lib/libfreetype.so" \
-
--set LD_LIBRARY_PATH "${lib.makeLibraryPath [ gcc-unwrapped.lib ]}"
-
done
+
runHook postInstall
'';
preFixup = ''
-
# The following libraries need libtiff.so.5, but nixpkgs provides libtiff.so.6
-
patchelf --replace-needed libtiff.so.5 libtiff.so $out/opt/kingsoft/wps-office/office6/{libpdfmain.so,libqpdfpaint.so,qt/plugins/imageformats/libqtiff.so,addons/pdfbatchcompression/libpdfbatchcompressionapp.so}
-
patchelf --replace-needed libtiff.so.5 libtiff.so $out/opt/kingsoft/wps-office/office6/addons/ksplitmerge/libksplitmergeapp.so
-
patchelf --add-needed libtiff.so $out/opt/kingsoft/wps-office/office6/libwpsmain.so
-
# Fix: Wrong JPEG library version: library is 62, caller expects 80
-
patchelf --add-needed libjpeg.so $out/opt/kingsoft/wps-office/office6/libwpsmain.so
+
# libbz2 dangling symlink
+
ln -sf ${bzip2.out}/lib/libbz2.so $out/opt/kingsoft/wps-office/office6/libbz2.so
# dlopen dependency
patchelf --add-needed libudev.so.1 $out/opt/kingsoft/wps-office/office6/addons/cef/libcef.so
+
# libmysqlclient dependency
+
patchelf --replace-needed libmysqlclient.so.18 libmysqlclient.so $out/opt/kingsoft/wps-office/office6/libFontWatermark.so
+
patchelf --add-rpath ${libmysqlclient}/lib/mariadb $out/opt/kingsoft/wps-office/office6/libFontWatermark.so
'';
+
+
passthru.updateScript = ./update.sh;
meta = with lib; {
description = "Office suite, formerly Kingsoft Office";
···
th0rgal
wineee
pokon548
+
chillcicada
];
};
}
+10
pkgs/by-name/wp/wpsoffice-cn/sources.nix
···
+
# Generated by ./update.sh - do not update manually!
+
# Last updated: 2025-09-15
+
{
+
version = "12.1.2.22571";
+
x86_64 = {
+
url = "https://wps-linux-personal.wpscdn.cn/wps/download/ep/Linux2023/22571/wps-office_12.1.2.22571.AK.preread.sw_480057_amd64.deb";
+
uri = "/wps/download/ep/Linux2023/22571/wps-office_12.1.2.22571.AK.preread.sw_480057_amd64.deb";
+
hash = "sha256-aB1EWP0Ev5WuAuzih3ybD23qaRRTUjlES1emas+sUDA=";
+
};
+
}
+36
pkgs/by-name/wp/wpsoffice-cn/update.sh
···
+
#!/usr/bin/env nix-shell
+
#!nix-shell -i bash -p nix curl cacert
+
+
set -euo pipefail
+
+
export SSL_CERT_FILE=$NIX_SSL_CERT_FILE
+
+
readonly SECURITY_KEY="7f8faaaa468174dc1c9cd62e5f218a5b"
+
prefix="https://wps-linux-personal.wpscdn.cn"
+
+
payload=$(curl -s "https://www.wps.cn/product/wpslinux")
+
+
version=$(echo "$payload" | grep -oP '(?<=banner_txt">)[^<]+')
+
+
amd64_url=$(echo "$payload" | grep -oP "downLoad\('[^']*'" | head -1 | sed "s/downLoad('//;s/'$//")
+
amd64_uri="${amd64_url#$prefix}"
+
+
timestamp10=$(date '+%s')
+
md5hash=($(printf '%s' "$SECURITY_KEY$amd64_uri$timestamp10" | md5sum))
+
+
amd64_hash=$(nix-prefetch-url --name "wpsoffice-cn-$version.deb" "$amd64_url?t=$timestamp10&k=$md5hash")
+
+
amd64_hash=$(nix --extra-experimental-features nix-command hash convert --to sri --hash-algo sha256 "$amd64_hash")
+
+
cat > sources.nix << EOF
+
# Generated by ./update.sh - do not update manually!
+
# Last updated: $(date +%F)
+
{
+
version = "$version";
+
x86_64 = {
+
url = "$amd64_url";
+
uri = "$amd64_uri";
+
hash = "$amd64_hash";
+
};
+
}
+
EOF