Почему скрипт configure Ruby не обнаруживает мои исполняемые файлы и файлы заголовков?

Я пытаюсь собрать Ruby и действительно понять, что происходит при этом. Раньше я использовал и писал Makefiles , но не файлы configure.in autoconf , поэтому, возможно, результат, который я получаю, – это по дизайну:

 $ git clone https://github.com/ruby/ruby.git ... $ cd ruby $ git clean -fdx $ autoconf $ ./configure ... checking for dot... no checking for doxygen... no checking for pkg-config... no ... checking direct.h usability... no checking direct.h presence... no checking for direct.h... no ... checking for daemon... (cached) no 

Тем не менее, все они, по крайней мере, установлены:

 $ dot -V dot - graphviz version 2.26.3 (20100126.1600) $ doxygen --version 1.7.4 $ pkg-config --version 0.26 $ sudo updatedb $ locate /direct.h /usr/src/linux-headers-3.0.0-16-generic/include/config/pci/direct.h /usr/src/linux-headers-3.0.0-17-generic/include/config/pci/direct.h $ daemon --version daemon-0.6.4 

Я понимаю, что могут быть разные причины для каждого из них, но почему они не обнаруживаются скриптом configure ?

Я запускаю Ubuntu 11.10 с последними исправлениями.

 $ uname -a Linux username 3.0.0-17-generic #30-Ubuntu SMP Thu Mar 8 20:45:39 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux 

Пробовал на другом хозяине. Из config.log :

 configure:6408: checking for dot configure:6424: found /usr/bin/dot configure:6438: result: no configure:6445: checking for doxygen configure:6461: found /usr/bin/doxygen configure:6475: result: no configure:6483: checking for pkg-config configure:6504: found /usr/bin/pkg-config configure:6530: result: no 

Какие? Они были найдены, но все равно не ушли?

 configure:11880: checking direct.h usability configure:11880: gcc -c -O3 -ggdb conftest.c >&5 conftest.c:135:20: fatal error: direct.h: No such file or directory compilation terminated. configure:11880: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" ... | #endif | #include <direct.h> configure:11880: result: no configure:11880: checking direct.h presence configure:11880: gcc -E conftest.c conftest.c:102:20: fatal error: direct.h: No such file or directory compilation terminated. configure:11880: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | /* end confdefs.h. */ | #include <direct.h> configure:11880: result: no configure:11880: checking for direct.h configure:11880: result: no 

Funky test script – Может быть, он должен быть каким-то образом по умолчанию?

 configure:15175: checking for daemon configure:15175: result: no 

Оказывается, это не проверка исполняемого файла, а функция C с использованием AC_CHECK_FUNCS .

One Solution collect form web for “Почему скрипт configure Ruby не обнаруживает мои исполняемые файлы и файлы заголовков?”

Я почти ничего не знаю о Руби. Тем не менее, я знаю, что можно многое сделать для систем сборки. Я собираюсь выйти на конечность здесь и предположить, что вы нашли ошибку bona-fide в системе сборки Ruby .

Вот мои рассуждения:

  1. Я получаю тот же результат, который вы делаете, на совершенно разных системах (даже Cygwin / Windows 7), как с указанным git repo, так и с исходными данными Ruby 1.9

  2. Причина, по которой вы видите found: /usr/bin/dot в вашем configure.log состоит в том, что он действительно нашел его на пути. Это легко увидеть в сгенерированном скрипте configure , особенно если вы измените его первую строку на #!/bin/sh -x чтобы получить вывод отладки оболочки:

     + test -z /bin + for ac_exec_ext in ''\'''\''' '$ac_executable_extensions' + test -f /bin/dot + test -x /bin/dot + ac_cv_prog_DOT= + printf '%s\n' 'configure:6424: found /bin/dot' + break 2 + IFS=' 
  3. Причина, по которой вы видите result: no , потому что, поскольку вы можете увидеть фрагмент выше, ac_cv_prog_DOT был установлен в пустую строку, а следующие строки в конфигурации просто отражают это пропущенное значение:

     + DOT= + test -n '' + printf '%s\n' 'configure:6438: result: no' + printf '%s\n' no no 
  4. Причина, по которой была установлена ​​пустая строка, – это (и это основная проблема), которая configure.in указала пустую строку в строке 371:

     AC_CHECK_PROG(DOT, dot) AC_CHECK_PROG(DOXYGEN, doxygen) 

    Я верю, что это глючный вызов макроса AC_CHECK_PROG, который указывается в GNU Autoconf docs , содержит три обязательных аргумента, а не два:

     ― Macro: AC_CHECK_PROG (variable, prog-to-check-for, value-if-found, [value-if-not-found], [path = '$PATH'], [reject]) Check whether program prog-to-check-for exists in path. If it is found, set variable to value-if-found, otherwise to value-if-not-found, if given. Always pass over reject (an absolute file name) even if it is the first found in the search path; in that case, set variable using the absolute file name of the prog-to-check-for found that is not reject. If variable was already set, do nothing. Calls AC_SUBST for variable. The result of this test can be overridden by setting the variable variable or the cache variable ac_cv_prog_variable. 

    Значение по умолчанию отсутствует. Оставляя это эффективно, означает «если вы найдете точку, установите DOT в пустую строку»

  5. Я считаю, что причина, по которой эта ошибка была сделана, заключалась в том, что в исходном определении для этой строки использовался другой макрос AC_CHECK_TOOL , который принимает только два аргумента.

    От проверки до svn.ruby-lang.org от 11 ноября 2010 г.

    AC_CHECK_TOOL становится AC_CHECK_PROG

  6. Возможно, это может быть несколько дней назад, и некоторые комментарии ChangeLog, похоже, указывают на то, что у них были проблемы с DOXYGEN , например:

     Fri Mar 26 19:55:41 2010 Akinori MUSHA <knu@iDaemons.org> * Makefile.in (DOXYGEN): Define a missing variable DOXYGEN. Build has been failing when doxygen(1) is found by configure but the variable is not defined by the system and make(1) does not allow an empty command. ("@$(DOXYGEN)" was the cause) 

Наконец, возможно, у меня все в порядке. Но я уверен, что configure находит эти инструменты, и ему было предложено установить соответствующие переменные Makefile в пустую строку.

Любопытно услышать, что другие думают об этом анализе.

  • Каков наилучший способ обновления Ruby 2.x на Debian 7?
  • Почему передача HEREDOC в виде строки для `ruby -e` не работает?
  • пакеты имеют неудовлетворенные зависимости - не удается установить пакеты
  • Как правильно автоматически / вручную вращать файлы журналов для производства Rails App
  • Ruby и Git отказываются обновлять. (Mac)
  • Запуск сценария оболочки с бродячим обеспечением
  • Лучший способ обновить vim / gvim до 7.3 в Ubuntu 10.04?
  • sed, как это сделать "или"
  • Можете ли вы указать, был ли файл переименован?
  • Обновление Ruby не работает с использованием двух методов
  • Как вы указываете альтернативные интерпретаторы сценариев (shebangs)?
  • Установка rvm и конкретной версии ruby ​​с использованием rvm для Linux-систем
  • Interesting Posts

    Что позволяет вводить команду, пока предыдущая команда все еще работает на переднем плане?

    Как выполнить итерацию через список, разделенный запятыми, и выполнить команду для каждой записи

    Добавление к пути против привязки из / bin

    Что значит быть совместимым с «ш»?

    Ошибки при компиляции кода C

    Почему я не могу выполнить установку iso в загрузочный раздел на USB-накопителе?

    Как прокручивать страницы 1, .., N-1 и показывать страницу N в программе просмотра PDF?

    Как удалить GNOME для запуска только Compiz

    Можно ли зашифровать жесткий диск с помощью ключевого файла вместо пароля?

    Могу ли я предотвратить «статус обслуживания foo» от подкачки его вывода через «меньше»?

    Приложение чата для мониторинга со сценариями

    Является ли реализация Linux конфигурации «переменной» ARG_MAX отличной от других системных переменных и совместима ли она с POSIX?

    Что вызывает `diff` для запуска` git diff`?

    Ubuntu не загружается нормально после ручной установки X.org

    Проверка поврежденного аудиофайла

    Linux и Unix - лучшая ОС в мире.