Bagaimana cara menggunakan kulit ikan di cygwin?

15

Apakah mungkin menggunakan kulit ikan dengan cygwin? Saya tidak dapat mengkompilasi sumber di cygwin, dan saya tidak menemukan paket yang dikompilasi. Apakah ada alasan bagus untuk tidak memiliki ikan di cygwin?

muriloq
sumber

Jawaban:

23

shell ikan 2.1.0 sekarang secara resmi didukung di Cygwin, dimungkinkan untuk menginstalnya menggunakan installer default.

muriloq
sumber
15

Begini cara saya berhasil mengumpulkan ikan di Cygwin.

Langkah 1: Periksa apakah semua dependensi diinstal

Pertama, pastikan kita memiliki paket cygwin berikut:

  • libncurses-devel
  • libiconv
  • autoconf (bukan benar-benar ketergantungan ikan, tetapi kita membutuhkannya untuk langkah selanjutnya)

Langkah 2: Unduh dan ekstrak sumber terbaru

Selanjutnya, unduh sumber terbaru dari http://fishshell.com (saya menggunakan fish-1.23.1.tar.gz ). Ekstrak sumber ke direktori pilihan Anda dan cd ke sana:

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

Langkah 3: Edit configure.acuntuk menghapus cekiconv

Sekarang karena alasan tertentu, ./configuretidak dapat mendeteksi libiconvdengan benar. Untuk mengatasi masalah ini, kami menghapus centang untuknya (kami akan menentukan lib secara manual nanti). Untuk melakukannya, kami mengedit configure.acdan menghapus cek untuk iconv_open. Mencari iconv_openmengungkapkan 3 kejadian; kami berkomentar semuanya. Jadi, dari:

AC_SEARCH_LIBS( iconv_open, iconv, ....)

Kami mengubah ke:

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

Langkah 4: Bangun kembali dan jalankan ./configure

Selanjutnya, kami membangun kembali ./configureskrip dengan menjalankan autoconfkemudian menjalankan skrip configure:

$ autoconf && ./configure

Langkah 5: Edit Makefileuntuk memasukkan jalur yang benar kecurses.h

Masalah lain yang saya hadapi adalah curses.h- gcc tidak dapat menemukannya. Pencarian cepat mengungkapkan bahwa itu ada /usr/include/ncurses.

The Makefilememiliki hardcoded termasuk jalan untuk itu dalam CFLAGS, tapi menunjuk ke /usr/local/include/ncursesgantinya.

Jadi, kami edit Makefiledan ubah:

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

untuk

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

Langkah 6: Ekspor LDFLAGSke tautan libiconv, dan kami siap untuk mengompilasi / menginstal.

Akhirnya, kami mengekspor yang diperlukan LDFLAGSuntuk tautan iconv, lalu kompilasi dan instal!

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

Nikmati 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
sumber
+1 Saya dapat mengonfirmasi bahwa langkah-langkah di atas seharusnya berhasil. Saya juga menambahkan #define HAVE_NCURSES_H 1dalam file header yang dihasilkan config.h(untuk alasan yang sama disebutkan di atas)
Amro
Saya telah menginstal libiconv dan mengatur LDFLAGS, tetapi saya masih mendapatkan kesalahan: set_color.c: 16: 20: curses.h: Tidak ada file atau direktori set_color.c: Dalam fungsi translate_color': set_color.c:116: warning: implicit declaration of function strcasecmp 'set_color.c: Dalam fungsi main': set_color.c:333: error: ERR' tidak dideklarasikan (penggunaan pertama dalam fungsi ini)
muriloq
Saya melihat kesalahan itu awalnya juga. Sudahkah Anda menginstal libncurses-develdan mengubah -Ipath yang diubah di `Makefile (langkah 5)?
Shawn Chin
Ya, saya bahkan menginstal ulang libncurses-devel lagi, hanya untuk memastikan. Mungkin ada ketergantungan lain yang sudah ada di sistem Anda? Mencari pesan kesalahan saya menemukan laporan bug berikut: sourceforge.net/tracker/…
muriloq
@muriloq Kedengarannya seperti curses.htidak termasuk ( ERRdidefinisikan di sana). Bisakah Anda mengintip/usr/include/ncurses/ dan melihat apakah itu ada di sana?
Shawn Chin
0

Periksa masalah ikan # 680 dan # 319 di GitHub, ada semua yang Anda butuhkan untuk mengkompilasi ikan di cygwin.

Maciej Matys
sumber
2
Tautan ke sumber daya eksternal dianjurkan, tetapi tolong tambahkan konteks di sekitar tautan sehingga sesama pengguna Anda akan mengetahui apa itu dan mengapa ada di sana. Selalu kutip bagian yang paling relevan dari tautan penting, jika situs target tidak dapat dijangkau atau offline secara permanen.
Ashildr