Nix на OSX не может построить nano?

Я пытаюсь использовать nix и столкнулся с проблемой, которая, я думаю, связана с тем, что nix не может собрать nano, но я не уверен. Я использую OSX 10.11.4 (я также новичок в Mac) и получаю следующую ошибку:

clang -DHAVE_CONFIG_H -I. -I..  -DLOCALEDIR=\"/nix/store/h1afxzyfxh7xc8b0scvq831s1yapczgm-nano-2.6.3/share/locale\" -DSYSCONFDIR=\"/etc\" -I/nix/store/gmb9mxkm5mqfnhlav16rx5x7wf070qqf-ncurses-5.9-dev/include/ncursesw -I/nix/store/gmb9mxkm5mqfnhlav16rx5x7wf070qqf-ncurses-5.9-dev/include   -g -O2 -Wall -c -o winio.o winio.c
winio.c:513:15: error: use of undeclared identifier 'TIOCLINUX'
        if (ioctl(0, TIOCLINUX, &modifiers) >= 0 && (modifiers & 0x04)) {
                     ^
1 error generated.

Есть ли что-то, что я настроил неправильно здесь? Все, что я сделал, это настроил nix через curl ... | sh, а затем source ~/.nix-profile/etc/profile.d/nix.sh.

Пытаюсь собрать из этого shell.nix:

{ nixpkgs ? import <nixpkgs> {}, compiler ? "default" }:

let

  inherit (nixpkgs) pkgs;

  # Build a default.nix file from our .cabal file:
  here = ./.;
  project = pkgs.stdenv.mkDerivation ({
    name = "default.nix";

    buildCommand = ''
    ${pkgs.cabal2nix}/bin/cabal2nix file://${here} > $out
    '';
  });

  # Use the package set for our compiler:
  haskellPackages = if compiler == "default"
                       then pkgs.haskellPackages
                       else pkgs.haskell.packages.${compiler};

  # Helper function that gets Nix-packaged dependencies off GitHub.
  # GitHub project needs a default.nix file for this to work.
  fetchHaskell = { url, rev, sha256 }:
    haskellPackages.callPackage (pkgs.fetchgit { inherit url rev sha256; }) {};

  drv = haskellPackages.callPackage project {
    # Specify GitHub dependencies here.
    # You can get url, rev and sha256 by running 'nix-prefetch-git git@...'
    ...snip....
  };

in

  if pkgs.lib.inNixShell then drv.env else drv

Любые указатели будут очень признательны.


person Gregory    schedule 19.08.2016    source источник


Ответы (2)


Я ничего не знаю о nix, но я получаю ту же ошибку при сборке nano из исходного кода. Проблема в том, что раздел проверки кода для клавиш со стрелками Ctrl на консоли Linux включен безоговорочно, что приводит к сбою сборки в любой системе, кроме Linux.

Найдите весь раздел winio.c, где он это делает (строка 507-523 в моей загруженной вручную версии nano 2.6.3), и удалите его (я поставил #ifdef TIOCLINUX перед ним и #endif после, но просто удалив его, используя #if 0, или закомментировать его будет так же хорошо) Если вы не можете контролировать исходный код, собираемый nix, вам может потребоваться установить nano каким-либо другим способом (ручная компиляция исходного кода, или macports, или fink, или homebrew)

Версия nano для MacPorts содержит исправление, устраняющее эту проблему: https://trac.macports.org/browser/trunk/dports/editors/nano/files/patch-src-winio.c.diff

person Random832    schedule 19.08.2016
comment
Спасибо. Я предполагаю, что это нужно исправить либо на стороне нано, либо так же, как они решают это в вареве, с помощью патча. - person Gregory; 19.08.2016

Похоже, это была проблема, и она была исправлена. Багтрекер в репозитории nixpkgs — отличное место для сообщения о подобных проблемах. Люди обычно довольно отзывчиво относятся к сломанным пакетам.

Подавляющее большинство пользователей Nix используют Linux, поэтому пакеты иногда ломаются в OSX, потому что она недостаточно протестирована.

Соответствующие вопросы:

person Chris Martin    schedule 26.09.2016