Unverified Commit fff4a795 authored by Doron Behar's avatar Doron Behar Committed by GitHub
Browse files

Merge pull request #257853 from doronbehar/pkg/libreoffice

libreoffice: updates + updateScript + reformat
parents 2f1fd646 4b2b0f14
Loading
Loading
Loading
Loading
+0 −9
Original line number Diff line number Diff line
LibreOffice
===========

To generate `src-$VARIANT/download.nix`, i.e. list of additional sources that
the libreoffice build process needs to download:

    nix-shell gen-shell.nix --argstr variant VARIANT --run generate

Where VARIANT is either `still` or `fresh`.
+184 −173
Original line number Diff line number Diff line
{ stdenv
, fetchurl
, fetchpatch
, lib
, substituteAll
, pam
@@ -100,7 +99,7 @@
, langs ? [ "ar" "ca" "cs" "da" "de" "en-GB" "en-US" "eo" "es" "fr" "hu" "it" "ja" "nl" "pl" "pt" "pt-BR" "ro" "ru" "sl" "tr" "uk" "zh-CN" ]
, withHelp ? true
, kdeIntegration ? false
, mkDerivation ? null
, wrapQtAppsHook ? null
, qtbase ? null
, qtx11extras ? null
, qtwayland ? null
@@ -145,20 +144,15 @@ let
  };

  importVariant = f: import (./. + "/src-${variant}/${f}");

  primary-src = importVariant "primary.nix" { inherit fetchurl; };

  inherit (primary-src) major minor version;

  langsSpaces = concatStringsSep " " langs;

  mkDrv = if kdeIntegration then mkDerivation else stdenv.mkDerivation;

  srcs = {
    primary = primary-src;
    third_party =
      map (x: ((fetchurl { inherit (x) url sha256 name; }) // { inherit (x) md5name md5; }))
        (importVariant "download.nix" ++ [
  # Update these files with:
  # nix-shell maintainers/scripts/update.nix --argstr package libreoffice-$VARIANT.unwrapped
  version = importVariant "version.nix";
  srcsAttributes = {
    main = importVariant "main.nix";
    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}";
@@ -166,10 +160,17 @@ let
        md5 = "185d60944ea767075d27247c3162b3bc";
        md5name = "${md5}-${name}";
      })
        ]);

    translations = primary-src.translations;
    help = primary-src.help;
    ];
  };
  srcs = {
    third_party = map (x:
      (fetchurl {
        inherit (x) url sha256 name;
      }) // {
        inherit (x) md5name md5;
      }) srcsAttributes.deps;
    translations = fetchurl srcsAttributes.translations;
    help = fetchurl srcsAttributes.help;
  };

  # See `postPatch` for details
@@ -185,13 +186,12 @@ let
      kwindowsystem
    ]);
  };
  tarballPath = "external/tarballs";

in
(mkDrv rec {
in stdenv.mkDerivation (finalAttrs: {
  pname = "libreoffice";
  inherit version;

  inherit (primary-src) src;
  src = fetchurl srcsAttributes.main;

  env.NIX_CFLAGS_COMPILE = toString ([
    "-I${librdf_rasqal}/include/rasqal" # librdf_redland refers to rasqal.h instead of rasqal/rasqal.h
@@ -200,8 +200,6 @@ in
    "-O2" # https://bugs.gentoo.org/727188
  ]);

  tarballPath = "external/tarballs";

  postUnpack = ''
    mkdir -v $sourceRoot/${tarballPath}
  '' + (flip concatMapStrings srcs.third_party (f: ''
@@ -215,18 +213,11 @@ in
    tar -xf ${srcs.translations}
  '';

  patches = [
    # Remove build config to reduce the amount of `-dev` outputs in the
  # runtime closure. This was introduced in upstream commit
  # cbfac11330882c7d0a817b6c37a08b2ace2b66f4, so the patch doesn't apply
  # for 7.4.
  patches = lib.optionals (lib.versionAtLeast version "7.5") [
    # runtime closure. This behavior was introduced by upstream in commit
    # cbfac11330882c7d0a817b6c37a08b2ace2b66f4
    ./0001-Strip-away-BUILDCONFIG.patch
  ] ++ [
    (fetchpatch {
      name = "fix-curl-8.2.patch";
      url = "https://github.com/LibreOffice/core/commit/2a68dc02bd19a717d3c86873206fabed1098f228.diff";
      hash = "sha256-C+kts+oaLR3+GbnX/wrFguF7SzgerNataxP0SPxhyY8=";
    })
  ];

  # libreoffice tries to reference the BUILDCONFIG (e.g. PKG_CONFIG_PATH)
@@ -236,10 +227,21 @@ in
  disallowedRequisites = lib.optionals (!kdeIntegration)
    (lib.concatMap
      (x: lib.optional (x?dev) x.dev)
      buildInputs);
      finalAttrs.buildInputs);

  ### QT/KDE
  postPatch = ''
    # configure checks for header 'gpgme++/gpgmepp_version.h',
    # and if it is found (no matter where) uses a hardcoded path
    # in what presumably is an effort to make it possible to write
    # '#include <context.h>' instead of '#include <gpgmepp/context.h>'.
    #
    # Fix this path to point to where the headers can actually be found instead.
    substituteInPlace configure.ac --replace \
      'GPGMEPP_CFLAGS=-I/usr/include/gpgme++' \
      'GPGMEPP_CFLAGS=-I${gpgme.dev}/include/gpgme++'
  '' + optionalString kdeIntegration ''
    substituteInPlace shell/source/unix/exec/shellexec.cxx \
      --replace xdg-open kde-open5
    # configure.ac assumes that the first directory that contains headers and
    # libraries during its checks contains *all* the relevant headers/libs which
    # obviously doesn't work for us, so we have 2 options:
@@ -253,20 +255,6 @@ in
    # The 2nd option is not very Nix'y, but I'll take robust over nice any day.
    # Additionally, it's much easier to fix if LO breaks on the next upgrade (just
    # add the missing dependencies to it).
  postPatch = ''
    substituteInPlace shell/source/unix/exec/shellexec.cxx \
      --replace xdg-open ${if kdeIntegration then "kde-open5" else "xdg-open"}

    # configure checks for header 'gpgme++/gpgmepp_version.h',
    # and if it is found (no matter where) uses a hardcoded path
    # in what presumably is an effort to make it possible to write
    # '#include <context.h>' instead of '#include <gpgmepp/context.h>'.
    #
    # Fix this path to point to where the headers can actually be found instead.
    substituteInPlace configure.ac --replace \
      'GPGMEPP_CFLAGS=-I/usr/include/gpgme++' \
      'GPGMEPP_CFLAGS=-I${gpgme.dev}/include/gpgme++'
  '' + optionalString kdeIntegration ''
    substituteInPlace configure.ac \
      --replace '$QT5INC ' '$QT5INC ${kdeDeps}/include ' \
      --replace '$QT5LIB ' '$QT5LIB ${kdeDeps}/lib ' \
@@ -280,7 +268,7 @@ in
  preConfigure = ''
    configureFlagsArray=(
      "--with-parallelism=$NIX_BUILD_CORES"
      "--with-lang=${langsSpaces}"
      "--with-lang=${concatStringsSep " " langs}"
    );

    chmod a+x ./bin/unpack-sources
@@ -294,15 +282,11 @@ in
    NOCONFIGURE=1 ./autogen.sh
  '';

  postConfigure =
  postConfigure = ''
    # fetch_Download_item tries to interpret the name as a variable name, let it do so...
    ''
    sed -e '1ilibreoffice-translations-${version}.tar.xz=libreoffice-translations-${version}.tar.xz' -i Makefile
    sed -e '1ilibreoffice-help-${version}.tar.xz=libreoffice-help-${version}.tar.xz' -i Makefile
    ''
    # Test fixups
    # May need to be revisited/pruned, left alone for now.
    + ''
  '' /* Test fixups. May need to be revisited/pruned, left alone for now. */ + ''
    # unit test sd_tiledrendering seems to be fragile
    # https://nabble.documentfoundation.org/libreoffice-5-0-failure-in-CUT-libreofficekit-tiledrendering-td4150319.html
    echo > ./sd/CppunitTest_sd_tiledrendering.mk
@@ -370,25 +354,37 @@ in
    sed -e '/CPPUNIT_TEST(testEmbeddedDataSource);/d' -i './sw/qa/extras/uiwriter/uiwriter.cxx'
    sed -e '/CPPUNIT_TEST(testTdf96479);/d' -i './sw/qa/extras/uiwriter/uiwriter.cxx'
    sed -e '/CPPUNIT_TEST(testInconsistentBookmark);/d' -i './sw/qa/extras/uiwriter/uiwriter.cxx'
    sed -e '/CPPUNIT_TEST(Import_Export_Import);/d' -i './sw/qa/inc/swmodeltestbase.hxx'
    sed -e /CppunitTest_sw_layoutwriter/d -i sw/Module_sw.mk
    sed -e /CppunitTest_sw_htmlimport/d -i sw/Module_sw.mk
    sed -e /CppunitTest_sw_core_layout/d -i sw/Module_sw.mk
    sed -e /CppunitTest_sw_uiwriter6/d -i sw/Module_sw.mk
    sed -e /CppunitTest_sdext_pdfimport/d -i sdext/Module_sdext.mk
    sed -e /CppunitTest_vcl_pdfexport/d -i vcl/Module_vcl.mk
    sed -e /CppunitTest_sc_ucalc_formula/d -i sc/Module_sc.mk
    sed -e "s/DECLARE_SW_ROUNDTRIP_TEST(\([_a-zA-Z0-9.]\+\)[, ].*, *\([_a-zA-Z0-9.]\+\))/class \\1: public \\2 { public: void verify() override; }; void \\1::verify() /" -i "sw/qa/extras/ooxmlexport/ooxmlexport9.cxx"
    sed -e "s/DECLARE_SW_ROUNDTRIP_TEST(\([_a-zA-Z0-9.]\+\)[, ].*, *\([_a-zA-Z0-9.]\+\))/class \\1: public \\2 { public: void verify() override; }; void \\1::verify() /" -i "sw/qa/extras/ooxmlexport/ooxmlencryption.cxx"
    sed -e "s/DECLARE_SW_ROUNDTRIP_TEST(\([_a-zA-Z0-9.]\+\)[, ].*, *\([_a-zA-Z0-9.]\+\))/class \\1: public \\2 { public: void verify() override; }; void \\1::verify() /" -i "sw/qa/extras/odfexport/odfexport.cxx"
    sed -e "s/DECLARE_SW_ROUNDTRIP_TEST(\([_a-zA-Z0-9.]\+\)[, ].*, *\([_a-zA-Z0-9.]\+\))/class \\1: public \\2 { public: void verify() override; }; void \\1::verify() /" -i "sw/qa/extras/unowriter/unowriter.cxx"

    sed -e '/CPPUNIT_ASSERT(!bRTL);/d' -i './vcl/qa/cppunit/text.cxx'
    sed -e '/CPPUNIT_ASSERT_EQUAL(0, nMinRunPos);/d' -i './vcl/qa/cppunit/text.cxx'
    sed -e '/CPPUNIT_ASSERT_EQUAL(4, nMinRunPos);/d' -i './vcl/qa/cppunit/text.cxx'
    sed -e '/CPPUNIT_ASSERT_EQUAL(11, nMinRunPos);/d' -i './vcl/qa/cppunit/text.cxx'
    sed -e '/CPPUNIT_ASSERT_EQUAL(18, nMinRunPos);/d' -i './vcl/qa/cppunit/text.cxx'
    sed -e '/CPPUNIT_ASSERT_EQUAL(3, nEndRunPos);/d' -i './vcl/qa/cppunit/text.cxx'
    sed -e '/CPPUNIT_ASSERT_EQUAL(9, nEndRunPos);/d' -i './vcl/qa/cppunit/text.cxx'
    sed -e '/CPPUNIT_ASSERT_EQUAL(17, nEndRunPos);/d' -i './vcl/qa/cppunit/text.cxx'
    sed -e '/CPPUNIT_ASSERT_EQUAL(22, nEndRunPos);/d' -i './vcl/qa/cppunit/text.cxx'

    # testReqIfTable fails since libxml2: 2.10.3 -> 2.10.4
    sed -e 's@.*"/html/body/div/table/tr/th".*@//&@' -i sw/qa/extras/htmlexport/htmlexport.cxx
    ''
    # This to avoid using /lib:/usr/lib at linking
    + ''
  '' /* This to avoid using /lib:/usr/lib at linking */ + ''
    sed -i '/gb_LinkTarget_LDFLAGS/{ n; /rpath-link/d;}' solenv/gbuild/platform/unxgcc.mk

    find -name "*.cmd" -exec sed -i s,/lib:/usr/lib,, {} \;
  '' + optionalString stdenv.isAarch64 ''
    sed -e '/CPPUNIT_TEST(testStatisticalFormulasFODS);/d' -i './sc/qa/unit/functions_statistical.cxx'
  '';

  makeFlags = [ "SHELL=${bash}/bin/bash" ];
@@ -406,13 +402,6 @@ in

    cp -r sysui/desktop/icons  "$out/share"
    sed -re 's@Icon=libreoffice(dev)?[0-9.]*-?@Icon=@' -i "$out/share/applications/"*.desktop

    # Install dolphin templates, like debian does
    install -D extras/source/shellnew/soffice.* --target-directory="$out/share/templates/.source"
    cp ${substituteAll {src = ./soffice-template.desktop; app="Writer";  ext="odt"; type="text";        }} $out/share/templates/soffice.odt.desktop
    cp ${substituteAll {src = ./soffice-template.desktop; app="Calc";    ext="ods"; type="spreadsheet"; }} $out/share/templates/soffice.ods.desktop
    cp ${substituteAll {src = ./soffice-template.desktop; app="Impress"; ext="odp"; type="presentation";}} $out/share/templates/soffice.odp.desktop
    cp ${substituteAll {src = ./soffice-template.desktop; app="Draw";    ext="odg"; type="drawing";     }} $out/share/templates/soffice.odg.desktop
  '';

  # Wrapping is done in ./wrapper.nix
@@ -475,16 +464,26 @@ in
    "--without-system-libqxp"
    "--without-system-dragonbox"
    "--without-system-libfixmath"
  # the "still" variant doesn't support Nixpkgs' mdds 2.1, only mdds 2.0
  ] ++ optionals (variant == "still") [
    "--without-system-mdds"
  ] ++ optionals (variant == "fresh") [
    "--with-system-mdds"
  ] ++ [
    # https://github.com/NixOS/nixpkgs/commit/5c5362427a3fa9aefccfca9e531492a8735d4e6f
    "--without-system-orcus"
    "--without-system-xmlsec"
    "--without-system-cuckoo"
    "--without-system-zxing"
  ] ++ optionals kdeIntegration [
    "--enable-kf5"
    "--enable-qt5"
    "--enable-gtk3-kde5"
  ] ++ optionals (variant == "fresh") [
    "--without-system-dragonbox"
    "--without-system-libfixmath"
    # Technically needed only when kdeIntegration is enabled in the "fresh"
    # variant. Won't hurt to put it here for every "fresh" variant.
    "--without-system-frozen"
  ];

  checkTarget = concatStringsSep " " [
@@ -501,9 +500,11 @@ in
    jdk17
    libtool
    pkg-config
  ] ++ optionals kdeIntegration [
    wrapQtAppsHook
  ];

  buildInputs = with xorg; [
  buildInputs = with xorg; finalAttrs.passthru.gst_packages ++ [
    ArchiveZip
    CoinMP
    IOCompress
@@ -572,6 +573,7 @@ in
    libxshmfence
    libxslt
    libzmf
    libwebp
    mdds
    mythes
    ncurses
@@ -592,14 +594,23 @@ in
    which
    zip
    zlib
  ]
  ++ passthru.gst_packages
  ++ optionals kdeIntegration [ qtbase qtx11extras kcoreaddons kio ]
  ++ optionals (lib.versionAtLeast (lib.versions.majorMinor version) "7.4") [ libwebp ];
  ] ++ optionals kdeIntegration [
    qtbase
    qtx11extras
    kcoreaddons
    kio
  ];

  passthru = {
    inherit srcs;
    jdk = jre';
    updateScript = [
      ./update.sh
      # Pass it this file name as argument
      (builtins.unsafeGetAttrPos "pname" finalAttrs.finalPackage).file
      # And the variant
      variant
    ];
    inherit kdeIntegration;
    # For the wrapper.nix
    inherit gtk3;
@@ -656,4 +667,4 @@ in
    maintainers = with maintainers; [ raskin ];
    platforms = platforms.linux;
  };
}).overrideAttrs ((importVariant "override.nix") (args // { inherit kdeIntegration; }))
})
+0 −4
Original line number Diff line number Diff line
if [ -e .attrs.sh ]; then source .attrs.sh; fi
source $stdenv/setup

tar --extract --file=$src libreoffice-$version/download.lst -O > $out
+0 −29
Original line number Diff line number Diff line
{ 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
    }
  '';
}
+0 −10
Original line number Diff line number Diff line
The way this check mixes C and C++ started to cause issues since gpgme 1.18.0
But we can confidently skip the function check anyway.
--- a/configure.ac
+++ b/configure.ac
@@ -12302,4 +12302 @@
-        # progress_callback is the only func with plain C linkage
-        # checking for it also filters out older, KDE-dependent libgpgmepp versions
-        AC_CHECK_LIB(gpgmepp, progress_callback, [ GPGMEPP_LIBS=-lgpgmepp ],
-            [AC_MSG_ERROR(gpgmepp not found or not functional)], [])
+        GPGMEPP_LIBS=-lgpgmepp
Loading