Tup

From NixOS Wiki
Revision as of 20:46, 26 November 2022 by Ehmry (talk | contribs) (add hint to create symlinks to packages)
Jump to: navigation, search

From the tup manual: "Tup is a file-based build system".

Known Issues

tup rebuilds too often

When using updater.full_dep, tup rebuilds the full project every time you reboot due to mtime changes in /run/current-system.

The solution is to always use tup via nix-shell --pure so that /run/current-system is not in PATH

Github issue: tup/#397

Another method that minimizes changes to PATH is to create symlinks to tools with Tup:

# Tuprules.tup - export a bang-rule that calls the Dhall interpreter
DHALL_LINK = $(TUP_CWD)/dhall
!dhall = | $(DHALL_LINK) |> $(DHALL_LINK)/bin/dhall |>
# Tupfile - build a symlink to the nixpkgs#dhall package 
include_rules
: |> nix build nixpkgs#dhall --out-link %o |> $(DHALL_LINK)

mount does not unmount

Tup can either not find fusermount OR the fusermount that tup finds is not setuid when using --pure.

Github issue: nixpkgs/#107516

There is no real solution to this other than 1. patching tup to use setuid fusermount 2. (maybe) setting tup as setuid.

pkg-config can not find my packages

When using nix-shell, pkg-config, and tup; pkg-config calls via tup do not find any packages.

You must add export lines to your tupfile that correspond to the variables set by NixOS pkg-config:

  export PKG_CONFIG_PATH
  export PKG_CONFIG_PATH_FOR_TARGET
  export PKG_CONFIG_FOR_TARGET

You also have to export NIX_PKG_CONFIG* variables, which can change based on platform:

 export NIX_PKG_CONFIG_WRAPPER_TARGET_TARGET_x86_64_unknown_linux_gnu

You can verify this by adding : |> pkg-config --list-all > %o |> pkg-list.txt into your Tupfile and seeing which libraries are available via pkg-config.