2016-08-19 3 views
0

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

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 [email protected]' 
    ...snip.... 
    }; 

in 

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

Все указатели будут весьма благодарны.

ответ

1

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

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

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

+0

Спасибо. Я предполагаю, что это нужно исправить либо на нано-стороне, либо так же, как они решаются в варе, с патчем. – Gregory

0

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

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

Актуальные вопросы: