Nix: написать пакет, который использует waf вместо make - PullRequest
1 голос
/ 19 января 2020

Вопрос

Я пытаюсь написать пакет для установки libmonome , инструментария для использования аппаратного обеспечения monome (контроллеры OS C со светодиодами). , в основном для музыки c).

Мои усилия основаны на этих инструкциях по сборке libmonome из источника . Обратите внимание, что в этих инструкциях используются waf, а не make.

Мой hello world пакеты, использующие make, успешно собираются. Но мой libmonome пакет , который пытается использовать python waf аналогично, не создает:

[jeff@jbb-dell:~/nix/jbb-config/custom-packages/libmonome]$ nix-build 
these derivations will be built:
  /nix/store/kkf4c8l0njqdapnm2qgk6ffmybmafrpv-libmonome.drv
building '/nix/store/kkf4c8l0njqdapnm2qgk6ffmybmafrpv-libmonome.drv'...
Error: Cannot unpack waf lib into /nix/store/dk3pnwg7z9q14f4yj35y2kaqdmahnhhh-libmonome/.waf-2.0.17-6b308e91b5eb321c61bd5469cd6d43aa
Move waf in a writable directory
builder for '/nix/store/kkf4c8l0njqdapnm2qgk6ffmybmafrpv-libmonome.drv' failed with exit code 1
error: build of '/nix/store/kkf4c8l0njqdapnm2qgk6ffmybmafrpv-libmonome.drv' failed

[jeff@jbb-dell:~/nix/jbb-config/custom-packages/libmonome]$ 

Некоторая, возможно, полезная, возможно, избыточная информация

Если вы клонируете репозиторий, обратите внимание, что вам нужно получить субмодули, чтобы получить весь код libmonome. Вот один из способов сделать это:

git clone --recurse-submodules https://github.com/JeffreyBenjaminBrown/nixos-experiments
git checkout c20581f839f8e0fb39b2762baeea7d0a7ab10783

Я уже поместил абсолютные ссылки на мой код выше, но на тот случай, если вы захотите увидеть этот код на этой странице, вот мой файл default.nix:

{...}:

with (import <nixpkgs> {});
derivation {
  name = "libmonome";
  builder = "${bash}/bin/bash";
  args = [ ./builder.sh ];
  buildInputs = [ git
                  coreutils
                  liblo
                  python2
                ];
  # I would like to use fetchGit but haven't gotten it to work.
  # src = fetchGit {
  #   url = "https://github.com/monome/libmonome.git";
  # };
  repo = ./libmonome;
  system = builtins.currentSystem;
}

и вот скрипт builder.sh, который он вызывает:

set -e # Exit the build on any error
unset PATH # because it's initially a non-existant path
for p in $buildInputs; do
  export PATH=$p/bin${PATH:+:}$PATH
done

cd $repo

# I've tried with python2 and python3
python2 ./waf configure
python2 ./waf
sudo python2 ./waf install
...