Libsass: facepalm: установка не удалась, потому что $ (PREFIX) / lib уже существует

Созданный на 12 нояб. 2018  ·  13Комментарии  ·  Источник: sass/libsass

установка не удалась, потому что $ (PREFIX) / lib уже существует

[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

Исправление тривиально: используйте mkdir -p вместо mkdir .

Это то же самое, что и # 1992, но билет закрыт по необъяснимым причинам.

PS: при попытке использовать сгенерированную автоинструментами сборку, запустив autoconf для преобразования configure.ac в configure , результирующий ./configure завершится неудачно, потому что:

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

Таким образом, я использую make-файл, который зарегистрирован в дереве, а не тот, который сгенерирован автоинструментами (он же GNU "Auto, my ass!" Tools).

Все 13 Комментарий

Использование mkdir появлялось несколько раз и было отклонено, потому что это не так.
портативный. Мы открыты для портативных решений.

В понедельник, 12 ноября 2018 г., 18:55 Стефан Бил < [email protected] написал:

установка не удалась, потому что $ (PREFIX) / lib уже существует

[ stephan @ host : ~ / cvs / libsass] $ m install PREFIX = $ HOME
mkdir / главная / Стефан / библиотека
mkdir: невозможно создать каталог '/ home / stephan / lib': файл существует
Makefile: 263 : рецепт для цели '/ home / stephan / lib' не выполнен
make: * [/ home / stephan / lib] Ошибка 1

Исправление тривиально: используйте mkdir -p вместо mkdir.

Это то же самое, что # 1992 https://github.com/sass/libsass/issues/1992 ,
но этот билет необъяснимым образом закрыт.

PS: при попытке использовать сгенерированную autotools сборку, запустив autoconf
чтобы преобразовать configure.ac в configure, полученный ./configure завершится ошибкой
потому что:

[ stephan @ host : ~ / cvs / libsass] $ ./configure --prefix = $ HOME
configure: error: невозможно найти install-sh, install.sh или shtool в скрипте "." / script

Таким образом, я использую make-файл, который зарегистрирован в дереве, а не
генерируемый autotools (также известный как GNU "Auto, my ass!" Tools).

-
Вы получаете это, потому что подписаны на эту беседу.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/sass/libsass/issues/2727 или отключите поток
https://github.com/notifications/unsubscribe-auth/AAjZWC46FJREYZk3iPIdWpGiuKuKlkJ4ks5uuSlkgaJpZM4YZIEz
.

Конечно, mkdir -p более портативен, чем просто невозможность установки на какой-либо платформе?

Вот портативное решение, взятое из руководства autotools:

Из оформления заказа 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

Этот сценарий установки настолько портативен, насколько это возможно. (Просто выбросьте весь вывод autoreconf кроме этого файла, затем верните этот файл.)

Как ни странно, он использует mkdir -p (который явно указан в POSIX mkdir), но он также помогает решить различные проблемы переносимости.

По поводу переносимости: исходный код использует C ++ 0x, что означает, что он компилируется на относительно недавней платформе (возрастом менее 10 лет). Готов поспорить на свое левое яичко, что все такие платформы поддерживают mkdir -p .

Все было подробно объяснено несколько раз во всех предыдущих
закрытые вопросы. Мы рассмотрим PR, который решит проблемы, которые
ранее был поднят.

В понедельник, 12 ноября 2018 г., 20:13 Стефан Бил < [email protected] написал:

По поводу переносимости: исходный код использует C ++ 0x, что означает
компиляция на относительно недавней платформе (возрастом менее 10 лет). я готов поспорить
мое левое яичко, что все такие платформы поддерживают mkdir -p.

-
Вы получили это, потому что прокомментировали.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/sass/libsass/issues/2727#issuecomment-437808279 или отключить звук
нить
https://github.com/notifications/unsubscribe-auth/AAjZWDztL9XVhyClKwxTr7QVoEu2Oie3ks5uuTvQgaJpZM4YZIEz
.

@xzyfer Не могли бы вы дать ссылку на закрытый вопрос? # 1992 не обсуждает это.

Я хотел бы прочитать обсуждение, чтобы понять утверждения о непереносимости, потому что поддержка mkdir -p является требованием POSIX: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/mkdir.html

Какое предполагаемое ограничение _не_ устраняется с помощью сценария установки, сгенерированного autoconf (продемонстрировано 4 комментария отсюда)? В этом проекте используется autotools , поэтому его переносимость ограничена платформами, которые поддерживает набор инструментов. Таким образом, использование autotool's install скрипта является наиболее естественным и переносимым решением для всех платформ, на которых может быть построен проект с использованием предоставленных make-файлов.

@sgbeal Хотя я все еще не могу найти проблему, глядя дальше в Makefile, похоже, что он поддерживает Windows. В Windows mkdir - это псевдоним для md , который не поддерживает -p .

Возможно, отправить PR, который устанавливает MKDIR разному в Windows и не в Windows?

Подробности ниже. Я плохо разбираюсь в проблеме, но видел, как она возникает снова и снова.

https://github.com/sass/libsass/pull/795#discussion_r22396485
https://github.com/sass/libsass/pull/2486
https://github.com/sass/libsass/pull/2109
https://github.com/sass/libsass/issues/1433
https://github.com/sass/libsass/pull/1365#issuecomment -123325642

@glebm что такое "винда"?

Сборка использует автоинструменты, и "действительно должна" использовать install-sh, который распространяется с автоинструментами. Если _that_ установщик недостаточно портативен, тогда использование автоинструментов будет безнадежным делом.

@sgbeal Отмеченный в Makefile не генерируется автоинструментами. Это альтернативный способ сборки, когда автоинструменты могут быть недоступны (например, при компиляции для расширения C для Ruby или Python).

«Windows» в этом случае - это когда у вас есть, например, gcc и gmake, но вы запускаете их из CMD (в отличие, например, от Cygwin Bash или аналогичной среды POSIX).

Тем не менее, я думаю, что мой PR # 2728 решает эту проблему, так как с этим PR make больше не должен пытаться создавать каталоги, которые уже существуют.

@xzyfer Спасибо! Похоже, я правильно понял, что речь идет именно о совместимости с Windows. Отправлено # 2728, которое должно просто помешать make попытаться создать каталоги, которые уже существуют.

@glebm, приношу искренние извинения: «что такое« Windows »» было задано шутливо (Windows не было в моей семье с прошлого тысячелетия), а не как честный вопрос, и ему нет места на этом форуме.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги