Comment utiliser la coquille de poisson dans cygwin?

15

Est-il possible d'utiliser la coquille de poisson avec cygwin? Je n'ai pas pu compiler la source dans cygwin et je n'ai trouvé aucun paquet précompilé. Y a-t-il une bonne raison de ne pas avoir de poisson à cygwin?

muriloq
la source

Réponses:

23

fish shell 2.1.0 est maintenant officiellement supporté dans Cygwin, il est possible de l'installer en utilisant l'installateur par défaut.

muriloq
la source
15

Voici comment j'ai réussi à compiler du poisson dans Cygwin.

Étape 1: vérifiez que toutes les dépendances sont installées

Tout d'abord, assurez-vous que nous avons les packages cygwin suivants:

  • libncurses-devel
  • libiconv
  • autoconf (pas vraiment une dépendance du poisson, mais nous en avons besoin pour une étape ultérieure)

Étape 2: Téléchargez et extrayez la dernière source

Ensuite, téléchargez la dernière source sur http://fishshell.com (j'ai utilisé fish-1.23.1.tar.gz ). Extrayez la source dans votre répertoire de choix et cd-y:

$ tar zxvf fish-1.23.1.tar.gz -C /usr/local/src/
$ cd /usr/local/src/fish-1.23.1/

Étape 3: modifier configure.acpour supprimer les chèquesiconv

Maintenant, pour une raison quelconque, ./configurene peut pas détecter libiconvcorrectement. Pour contourner le problème, nous supprimons la vérification (nous spécifierons la bibliothèque manuellement plus tard). Pour ce faire, nous éditons configure.acet supprimons les chèques iconv_open. La recherche de iconv_openrévèle 3 occurrences; nous les commentons tous. Donc, à partir de:

AC_SEARCH_LIBS( iconv_open, iconv, ....)

Nous changeons pour:

#AC_SEARCH_LIBS( iconv_open, iconv, ....)

Étape 4: reconstruire et exécuter ./configure

Ensuite, nous reconstruisons le ./configurescript en exécutant autoconfpuis exécutons le script de configuration:

$ autoconf && ./configure

Étape 5: Modifier Makefilepour inclure le chemin correct verscurses.h

Un autre problème que j'ai rencontré était curses.h- gcc n'a pas pu le trouver. Une recherche rapide a révélé que c'était le cas /usr/include/ncurses.

Le Makefilepossède un chemin d'inclusion codé en dur CFLAGS, mais il pointe à la /usr/local/include/ncursesplace.

Donc, nous éditons Makefileet changeons:

CFLAGS = -I/usr/local/include/ncurses -std=c99 ....

à

CFLAGS = -I/usr/include/ncurses -std=c99 ...

Étape 6: Exportez LDFLAGSpour créer un lien libiconvet nous sommes prêts à compiler / installer.

Enfin, nous exportons le nécessaire LDFLAGSpour créer un lien iconv, puis compilons et installons!

$ export LDFLAGS="-liconv"
$ make && make install

Prendre plaisir fish

$ fish
Welcome to fish, the friendly interactive shell
Type help for instructions on how to use fish
me@home /u/l/s/fish-1.23.1> 
Shawn Chin
la source
+1 Je peux confirmer que les étapes ci-dessus devraient fonctionner. J'ai également ajouté #define HAVE_NCURSES_H 1dans le fichier d'en-tête généré config.h(pour les mêmes raisons que celles mentionnées ci-dessus)
Amro
J'ai installé libiconv et défini LDFLAGS, mais j'obtiens toujours une erreur: set_color.c: 16: 20: curses.h: Aucun fichier ou répertoire de ce type set_color.c: Dans la fonction translate_color': set_color.c:116: warning: implicit declaration of function strcasecmp 'set_color.c: Dans la fonction main': set_color.c:333: error: ERR' non déclaré (première utilisation dans cette fonction)
muriloq
J'ai vu cette erreur au début aussi. Avez-vous installé libncurses-develet modifié le -Ichemin modifié dans le `Makefile (étape 5)?
Shawn Chin
Oui, j'ai même réinstallé libncurses-devel, juste pour être sûr. Peut-être y a-t-il une autre dépendance qui était déjà présente dans votre système? À la recherche du message d'erreur, j'ai trouvé le rapport de bogue suivant: sourceforge.net/tracker/…
muriloq
@muriloq On dirait que ce curses.hn'est pas inclus ( ERRest défini ici). Pouvez-vous jeter un coup d'œil /usr/include/ncurses/et voir s'il est là?
Shawn Chin
0

Vérifiez les problèmes de poisson # 680 et # 319 sur GitHub, il y a tout ce dont vous avez besoin pour compiler du poisson sur cygwin.

Maciej Matys
la source
2
Les liens vers des ressources externes sont encouragés, mais veuillez ajouter du contexte autour du lien afin que vos collègues utilisateurs aient une idée de ce que c'est et pourquoi il est là. Citez toujours la partie la plus pertinente d'un lien important, au cas où le site cible serait inaccessible ou se déconnecterait définitivement.
Ashildr