Почему скрипт 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 .

  • Обновление Ruby не работает с использованием двух методов
  • Как правильно автоматически / вручную вращать файлы журналов для производства Rails App
  • «Ruby: Command not found» на FreeBSD, несмотря на то, что он установлен
  • Как перебирать файлы с помощью awk, bash или ruby?
  • Почему «какой рубин» ничего не выводит?
  • `kill -s TERM` работает,` kill -s ABRT` получает «Операция не разрешена»
  • Каков наилучший способ определить рабочий каталог для процесса UNIX с помощью «ps»?
  • Рубиновая альтернатива ткани
  • 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 в пустую строку.

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

    Interesting Posts

    Как pkg выбирает свои репозитории (FreeBSD 10)

    Сравнение шаблонов внутри awk

    Полноэкранный терминал со сценарием в качестве экранной заставки под archLinux

    Есть ли простой способ переключить звуковые карты воспроизведения?

    Как получить выполняемые в настоящее время семафоры с помощью / proc?

    ip link и значение ip addr output

    cp не правильно оценивает имя dirname в операции поиска

    Загрузите документы, на которые ссылается веб-страница с wget

    while-loop, похоже, не помнит обновление переменной – не задействован трубопровод

    В чем разница между выходом из процесса с помощью Ctrl + C и выдачей команды kill -9?

    Найти не хочет найти * .sh на определенном уровне

    Есть ли разница между «привилегиями root root» и «выполнить любую команду»?

    Как одновременно воспроизводить звуки в системе объемного звучания 4.0 с использованием aplay

    Человеко-читаемые файлы с помощью printf

    Прочитайте вывод команды в переменной

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