Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tectonic, biber-for-tectonic: wrap tectonic with biber-2.17, fix #88067 #273740

Merged
merged 4 commits into from
Dec 21, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions maintainers/maintainer-list.nix
Original file line number Diff line number Diff line change
Expand Up @@ -2722,6 +2722,12 @@
githubId = 53131727;
name = "Bryan Albuquerque";
};
bryango = {
name = "Bryan Lai";
email = "[email protected]";
github = "bryango";
githubId = 26322692;
};
bryanhonof = {
name = "Bryan Honof";
email = "[email protected]";
Expand Down
54 changes: 54 additions & 0 deletions pkgs/tools/typesetting/tectonic/biber.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/*
This package, `biber-for-tectonic`, provides a compatible version of `biber`
as an optional runtime dependency of `tectonic`.

The development of tectonic is slowing down recently, such that its `biber`
dependency has been lagging behind the one in the nixpkgs `texlive` bundle.
See:

https://github.com/tectonic-typesetting/tectonic/discussions/1122

It is now feasible to track the biber dependency in nixpkgs, as the
version bump is not very frequent, and it would provide a more complete
user experience of tectonic in nixpkgs.
*/

{ lib
, fetchFromGitHub
, fetchpatch
, biber
}:

let version = "2.17"; in (
biber.override {
/*
It is necessary to first override the `version` data here, which is
passed to `buildPerlModule`, and then to `mkDerivation`.

If we simply do `biber.overrideAttrs` the resulting package `name`
would be incorrect, since it has already been preprocessed by
`buildPerlModule`.
*/
texlive.pkgs.biber.texsource = {
inherit version;
inherit (biber) pname meta;
};
}
).overrideAttrs (prevAttrs: {
src = fetchFromGitHub {
owner = "plk";
repo = "biber";
rev = "v${version}";
hash = "sha256-Tt2sN2b2NGxcWyZDj5uXNGC8phJwFRiyH72n3yhFCi0=";
};
patches = [
# Perl>=5.36.0 compatibility
(fetchpatch {
url = "https://patch-diff.githubusercontent.com/raw/plk/biber/pull/411.patch";
hash = "sha256-osgldRVfe3jnMSOMnAMQSB0Ymc1s7J6KtM2ig3c93SE=";
})
];
meta = prevAttrs.meta // {
maintainers = with lib.maintainers; [ doronbehar bryango ];
};
})
19 changes: 14 additions & 5 deletions pkgs/tools/typesetting/tectonic/default.nix
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
/*
This file provides the `tectonic-unwrapped` package. On the other hand,
the `tectonic` package is defined in `./wrapper.nix`, by wrapping
- [`tectonic-unwrapped`](./default.nix) i.e. this package, and
- [`biber-for-tectonic`](./biber.nix),
which provides a compatible version of `biber`.
*/

{ lib
, stdenv
, fetchFromGitHub
Expand Down Expand Up @@ -25,21 +33,22 @@ rustPlatform.buildRustPackage rec {

cargoHash = "sha256-1WjZbmZFPB1+QYpjqq5Y+fDkMZNmWJYIxmMFWg7Tiac=";

nativeBuildInputs = [ pkg-config makeBinaryWrapper ];
nativeBuildInputs = [ pkg-config ];

buildInputs = [ icu fontconfig harfbuzz openssl ]
++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ ApplicationServices Cocoa Foundation ]);

# workaround for https://github.com/NixOS/nixpkgs/issues/166205
NIX_LDFLAGS = lib.optionalString (stdenv.cc.isClang && stdenv.cc.libcxx != null) " -l${stdenv.cc.libcxx.cxxabi.libName}";

postInstall = lib.optionalString stdenv.isLinux ''
postInstall = ''
# Makes it possible to automatically use the V2 CLI API
ln -s $out/bin/tectonic $out/bin/nextonic
'' + lib.optionalString stdenv.isLinux ''
substituteInPlace dist/appimage/tectonic.desktop \
--replace Exec=tectonic Exec=$out/bin/tectonic
install -D dist/appimage/tectonic.desktop -t $out/share/applications/
install -D dist/appimage/tectonic.svg -t $out/share/icons/hicolor/scalable/apps/

ln -s $out/bin/tectonic $out/bin/nextonic
'';

doCheck = true;
Expand All @@ -50,6 +59,6 @@ rustPlatform.buildRustPackage rec {
changelog = "https://github.com/tectonic-typesetting/tectonic/blob/tectonic@${version}/CHANGELOG.md";
license = with licenses; [ mit ];
mainProgram = "tectonic";
maintainers = with maintainers; [ lluchs doronbehar ];
maintainers = with maintainers; [ lluchs doronbehar bryango ];
};
}
56 changes: 56 additions & 0 deletions pkgs/tools/typesetting/tectonic/wrapper.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
{ lib
, symlinkJoin
, tectonic-unwrapped
, biber-for-tectonic
, makeWrapper
}:

symlinkJoin {
name = "${tectonic-unwrapped.pname}-wrapped-${tectonic-unwrapped.version}";
paths = [ tectonic-unwrapped ];

nativeBuildInputs = [ makeWrapper ];

passthru = {
unwrapped = tectonic-unwrapped;
biber = biber-for-tectonic;
};

# Replace the unwrapped tectonic with the one wrapping it with biber
postBuild = ''
rm $out/bin/{tectonic,nextonic}
''
# Ideally, we would have liked to also pin the version of the online TeX
# bundle that Tectonic's developer distribute, so that the `biber` version
# and the `biblatex` version distributed from there are compatible.
# However, that is not currently possible, due to lack of upstream support
# for specifying this in runtime, there were 2 suggestions sent upstream
# that suggested a way of improving the situation:
#
# - https://github.com/tectonic-typesetting/tectonic/pull/1132
# - https://github.com/tectonic-typesetting/tectonic/pull/1131
#
# The 1st suggestion seems more promising as it'd allow us to simply use
# makeWrapper's --add-flags option. However, the PR linked above is not
# complete, and as of currently, upstream hasn't even reviewed it, or
# commented on the idea.
#
# Note also that upstream has announced that they will put less time and
# energy for the project:
#
# https://github.com/tectonic-typesetting/tectonic/discussions/1122
#
# Hence, we can be rather confident that for the near future, the online
# TeX bundle won't be updated and hence the biblatex distributed there
# won't require a higher version of biber.
+ ''
makeWrapper ${lib.getBin tectonic-unwrapped}/bin/tectonic $out/bin/tectonic \
--prefix PATH : "${lib.getBin biber-for-tectonic}/bin"
ln -s $out/bin/tectonic $out/bin/nextonic
'';

meta = tectonic-unwrapped.meta // {
description = "Tectonic TeX/LaTeX engine, wrapped with a compatible biber";
maintainers = with lib.maintainers; [ doronbehar bryango ];
};
}
6 changes: 5 additions & 1 deletion pkgs/top-level/all-packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -6689,6 +6689,8 @@ with pkgs;

biber = callPackage ../tools/typesetting/biber { };

biber-for-tectonic = callPackage ../tools/typesetting/tectonic/biber.nix { };

biber-ms = callPackage ../tools/typesetting/biber-ms { };

biblatex-check = callPackage ../tools/typesetting/biblatex-check { };
Expand Down Expand Up @@ -25315,7 +25317,9 @@ with pkgs;

tecla = callPackage ../development/libraries/tecla { };

tectonic = callPackage ../tools/typesetting/tectonic {
tectonic = callPackage ../tools/typesetting/tectonic/wrapper.nix { };

tectonic-unwrapped = callPackage ../tools/typesetting/tectonic {
harfbuzz = harfbuzzFull;
};

Expand Down