Libsass: facepalm: instal gagal karena $(PREFIX)/lib sudah ada

Dibuat pada 12 Nov 2018  ·  13Komentar  ·  Sumber: sass/libsass

instal gagal karena $(PREFIX)/lib sudah ada

[stephan<strong i="6">@host</strong>:~/cvs/libsass]$ m install PREFIX=$HOME
mkdir /home/stephan/lib
mkdir: cannot create directory ‘/home/stephan/lib’: File exists
Makefile:263: recipe for target '/home/stephan/lib' failed
make: *** [/home/stephan/lib] Error 1

Perbaikannya sepele: gunakan mkdir -p alih-alih mkdir .

Ini sama dengan #1992, tapi tiket itu entah kenapa ditutup.

PS: ketika mencoba menggunakan build yang dihasilkan autotools, dengan menjalankan autoconf untuk mengonversi configure.ac menjadi configure , ./configure dihasilkan gagal karena:

[stephan<strong i="18">@host</strong>:~/cvs/libsass]$ ./configure --prefix=$HOME
configure: error: cannot find install-sh, install.sh, or shtool in script "."/script

Jadi saya menggunakan makefile yang diperiksa di pohon, daripada yang dihasilkan oleh autotools (alias GNU "Auto, my ass!" Tools).

Semua 13 komentar

Menggunakan mkdir telah muncul beberapa kali dan ditolak karena tidak
portabel. Kami terbuka untuk solusi yang portabel.

Pada Senin, 12 November 2018, 18:55 Stephan Beal < [email protected] menulis:

instal gagal karena $(PREFIX)/lib sudah ada

[ stephan@host :~/cvs/libsass]$ m install PREFIX=$HOME
mkdir /home/stephan/lib
mkdir: tidak dapat membuat direktori '/ home/stephan/lib': File ada
Makefile:263 : resep untuk target '/home/stephan/lib' gagal
buat: * [/home/stephan/lib] Kesalahan 1

Perbaikannya sepele: gunakan mkdir -p alih-alih mkdir.

Ini sama dengan #1992 https://github.com/sass/libsass/issues/1992 ,
tapi tiket itu entah kenapa ditutup.

PS: ketika mencoba menggunakan build yang dihasilkan autotools, dengan menjalankan autoconf
untuk mengonversi configure.ac untuk mengonfigurasi, hasil ./configure gagal
karena:

[ stephan@host :~/cvs/libsass]$ ./configure --prefix=$HOME
konfigurasikan: kesalahan: tidak dapat menemukan install-sh, install.sh, atau shtool dalam skrip "."/script

Jadi saya menggunakan makefile yang diperiksa ke pohon, daripada
yang dihasilkan oleh autotools (alias GNU "Auto, my ass!" Tools).


Anda menerima ini karena Anda berlangganan utas ini.
Balas email ini secara langsung, lihat di GitHub
https://github.com/sass/libsass/issues/2727 , atau bisukan utasnya
https://github.com/notifications/unsubscribe-auth/AAjZWC46FJREYZk3iPIdWpGiuKuKlkJ4ks5uuSlkgaJpZM4YZIEz
.

Tentu saja mkdir -p lebih portabel daripada sekadar gagal menginstal pada platform apa pun?

Inilah solusi portabel, diambil dari manual autotools:

Dari checkout libsass:

autoreconf --install
...
configure.ac:15: installing 'script/install-sh'
...
[stephan<strong i="7">@host</strong>:~/cvs/libsass]$ l ./script/install-sh
-rwxr-xr-x 1 stephan stephan 15155 Nov 12 10:07 ./script/install-sh

Skrip penginstalan itu sangat portabel. (Cukup buang semua autoreconf output selain dari file itu, lalu periksa file itu.)

Lucunya, ia menggunakan mkdir -p (yang tampaknya ditentukan oleh POSIX mkdir), tetapi ia juga mengatasi berbagai masalah portabilitas.

Portabilitas yang sesuai: kode sumber menggunakan C++0x, yang berarti dikompilasi pada platform yang relatif baru (berusia kurang dari 10 tahun). saya berani bertaruh testis kiri saya bahwa semua platform tersebut mendukung mkdir -p .

Semuanya telah dijelaskan secara rinci beberapa kali sebelumnya
masalah tertutup. Kami akan mempertimbangkan pr yang mengatasi masalah yang ada
sebelumnya telah dibangkitkan.

Pada Senin, 12 November 2018, 20:13 Stephan Beal < [email protected] menulis:

Portabilitas yang sesuai: kode sumbernya menggunakan C++0x, yang berarti:
kompilasi pada platform yang relatif baru (berusia kurang dari 10 tahun). saya berani bertaruh
testis kiri saya bahwa semua platform tersebut mendukung mkdir -p.


Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/sass/libsass/issues/2727#issuecomment-437808279 , atau bisu
benang
https://github.com/notifications/unsubscribe-auth/AAjZWDztL9XVhyClKwxTr7QVoEu2Oie3ks5uuTvQgaJpZM4YZIEz
.

@xzyfer Bisakah Anda menautkan ke masalah yang ditutup? #1992 tidak membahasnya.

Saya ingin membaca diskusi untuk memahami klaim non-portabilitas, karena dukungan mkdir -p adalah persyaratan POSIX: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/mkdir.html

Batasan apa yang dirasakan _not_ diatasi dengan menggunakan skrip instalasi yang dihasilkan oleh autoconf (menunjukkan 4 komentar dari sini)? Proyek ini menggunakan autotools , dan dengan demikian portabilitas terbatas pada platform yang didukung oleh perangkat. Oleh karena itu, menggunakan skrip instalasi autotool's adalah solusi paling alami dan portabel untuk semua platform yang dapat dibangun proyek menggunakan makefile yang disediakan.

@sgbeal Sementara saya masih tidak dapat menemukan masalah, melihat lebih jauh di Makefile, tampaknya mendukung Windows. Di Windows, mkdir adalah alias untuk md , yang tidak mendukung -p .

Mungkin mengirim PR yang menetapkan MKDIR berbeda pada Windows vs non-Windows?

@glebm apa itu "Windows"?

Build menggunakan autotools dan "benar-benar harus" menggunakan install-sh yang didistribusikan dengan autotools. Jika _that_ installer tidak cukup portabel maka menggunakan autotools adalah penyebab yang hilang.

@sgbeal Yang diperiksa di Makefile tidak dihasilkan oleh autotools. Ini adalah cara alternatif untuk membangun ketika autotools mungkin tidak tersedia (misalnya ketika mengkompilasi ini untuk ekstensi C untuk Ruby atau Python).

"Windows" dalam hal ini adalah ketika Anda memiliki mis. gcc dan gmake tetapi menjalankannya dari CMD (sebagai lawan dari misalnya Cygwin Bash atau lingkungan POSIX serupa).

Terlepas dari itu, saya pikir PR #2728 saya menyelesaikan masalah ini, karena PR make seharusnya tidak lagi mencoba membuat direktori yang sudah ada.

@xzyfer Terima kasih! Sepertinya tebakan saya benar bahwa ini khusus tentang kompatibilitas Windows. Mengirim #2728 yang seharusnya mencegah make mencoba membuat direktori yang sudah ada.

@glebm permintaan maaf saya yang tulus: 'apa itu "Windows"' dimaksudkan dengan bercanda (Windows belum menjadi barang di rumah saya sejak milenium terakhir), bukan sebagai pertanyaan jujur, dan itu tidak memiliki tempat di forum ini.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat