Почему установка gem игнорирует PKG_CONFIG_PATH

Я пытаюсь установить гем libxml-ruby, который создает собственные расширения. Я установил PKG_CONFIG_PATH в правильное место для libxml2, и get pkg-config может его увидеть:

$ pkg-config --list-all | grep -i xml
libxml-2.0                          libXML - libXML library version2.

К сожалению, процесс создания драгоценных камней не позволяет:

$ gem install libxml-ruby
...
checking for libxml/xmlversion.h in /opt/include/libxml2,/opt/local/include/libxml2,/usr/local/include/libxml2,/usr/include/libxml2... no
*** extconf.rb failed ***
...
extconf failure: need libxml2.

Однако список путей не содержит ожидаемого местоположения:

$ pkg-config --cflags libxml-2.0
-I/usr/local/Cellar/libxml2/2.9.8/include/libxml2

Почему здесь игнорируются настройки pkg-config / как сделать так, чтобы сборка драгоценных камней уважала их?


person viraptor    schedule 17.12.2018    source источник
comment
Как вы установили Руби?   -  person anothermh    schedule 17.12.2018
comment
@anothermh через rbenv   -  person viraptor    schedule 17.12.2018
comment
Вы запускали xcode-select --install?   -  person anothermh    schedule 17.12.2018
comment
@anothermh Это уже сделано. Проблема, кажется, отличается от связанной, поскольку мой pkg-config печатает правильный/существующий путь включения.   -  person viraptor    schedule 17.12.2018
comment
FWIW, pkg-config --cflags libxml-2.0 возвращает только -I/usr/include/libxml2 для меня, и, судя по связанной проблеме, это предоставлено xcode-select --install. Возможно, стоит перезапустить его, чтобы посмотреть, изменится ли что-нибудь, а также попробовать brew install libxml-2.0.pc (или uninstall, а затем install, если он у вас уже есть).   -  person anothermh    schedule 17.12.2018
comment
libxml2 установлен и специально добавлен в PKG_CONFIG_PATH. Я рассчитываю использовать пивоваренный.   -  person viraptor    schedule 17.12.2018
comment
Опять же, я рекомендую удалить и переустановить как инструменты командной строки Xcode, так и пакет brew, поскольку, судя по вашему описанию, они не работают так, как вы ожидаете.   -  person anothermh    schedule 17.12.2018
comment
Это было сделано, без какого-либо эффекта.   -  person viraptor    schedule 17.12.2018
comment
Что, если вы отмените настройку для PKG_CONFIG_PATH? У меня нет этого набора, и я могу нормально установить драгоценный камень. (macOS 10.14, libxml-2.0.pc не установлена)   -  person anothermh    schedule 17.12.2018
comment
@anothermh Если я отключу PKG_CONFIG_PATH, я получу результат pkg-config, указывающий на /usr/include/libxml2, которого не существует. Это не то, чего я хочу добиться - я хочу использовать конкретную установку, на которую я указываю pkg-config.   -  person viraptor    schedule 17.12.2018
comment
Какая версия макОС? У вас установлена ​​полная версия Xcode? Что установлено для PKG_CONFIG_PATH и как вы его устанавливаете? Вы уверены, что gem install имеет его в окружающей среде? /usr/include/libxml2 должен существовать и иметь файлы, если у вас правильно установлены инструменты Xcode (по крайней мере, в macOS 10.13 или 10.14), и тот факт, что это не указывает мне, что здесь есть другие проблемы. Я понимаю, что вы хотите использовать версию brew, но я рекомендую сначала заставить ее работать в обычном режиме, а затем посмотреть, как скомпилировать версию brew.   -  person anothermh    schedule 17.12.2018
comment
10.14.1. Полный Xcode. Просто экспортирую. Да (pkg-config его видит, так что и gem тоже). Его не существует.   -  person viraptor    schedule 17.12.2018


Ответы (1)


Если мы посмотрим, как реализован extconf.rb для libxml-ruby не удается найти заголовки в предопределенных местах в find_header(). Однако:

Install the library or try one of the following options to extconf.rb:

  --with-xml2-config=/path/to/xml2-config
  --with-xml2-dir=/path/to/libxml2
  --with-xml2-lib=/path/to/libxml2/lib
  --with-xml2-include=/path/to/libxml2/include

Пытаться:

gem install libxml-ruby -- --with-xml2-dir=/usr/local/Cellar/libxml2/2.9.8 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.8/lib --with-xml2-include=/usr/local/Cellar/libxml2/2.9.8/include/libxml2

Итак, для установки пакета makefile собирается extconf.rb от gem. Он может использовать либо pkg-config, либо dir_config, либо оба; в случае с этим гемом — это dir_config, который настраивается с помощью параметров командной строки.

person pmod    schedule 18.12.2018