Конфигурирование

Большой технический интерес представляет тот факт, что авторы, создавая исходные коды, делают их портируемыми. Свободное программное обеспечение, разработанное для систем UNIX, может быть использовано во всех существующих системах UNIX (свободных или коммерческих) с минимальными изменениями. Для этого необходим процесс конфигурирования перед компиляцией.

Существует несколько систем конфигурирования. Вы должны использовать ту, которую хочет автор программного обеспечения ( иногда необходимо несколько). Обычно вы можете:

AutoConf

Принципы

Программа AutoConf используется для правильной настройки программного обеспечения. Она создает файлы, необходимые для компиляции (такие как Makefile) и кое что изменяет прямо в исходных кодах (например config.h.in).

Принципы работы AutoConf просты:

  • Программист, разрабатывающий данную программу, знает какие проверки необходимо сделать для настройки этой программы (например: “какая версия библиотеки у вас установлена?”). Программист записывает эти проверки (в специальном формате) в файл с именем configure.in.

  • После этого программист запускает программу AutoConf, которая из файла configure.in создает конфигурационный скрипт с названием configure. Этот скрипт делает все необходимые проверки, какие запланировал программист.

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

Пример

Пример использования AutoConf:

$ ./configure
loading cache ./config.cache
checking for gcc... gcc
checking whether the C compiler (gcc  ) works... yes
checking whether the C compiler (gcc  ) is a cross-compiler... no
checking whether we are using GNU C... yes
checking whether gcc accepts -g... yes
checking for main in -lX11... yes
checking for main in -lXpm... yes
checking for main in -lguile... yes
checking for main in -lm... yes
checking for main in -lncurses... yes
checking how to run the C preprocessor... gcc -E
checking for X... libraries /usr/X11R6/lib, headers /usr/X11R6/include
checking for ANSI C header files... yes
checking for unistd.h... yes
checking for working const... yes
updating cache ./config.cache
creating ./config.status
creating lib/Makefile
creating src/Makefile
creating Makefile

Есть возможность внести кое-какие изменения в работу скрипта configure путем внесения некоторых опций в командную строку скрипта или в переменные окружения. Пример:

$ ./configure --with-gcc --prefix=/opt/GNU

или (при помощи bash):

$ export CC=`which gcc`
$ export CFLAGS=-O2
$ ./configure --with-gcc

или так:

$ CC=gcc CFLAGS=-O2 ./configure

А что если... это не работает?

Обычно это ошибка такого типа: configure: error: Cannot find library guile (большинство ошибок конфигурации, выдаваемые configure напоминают эту).

Это обозначает, что скрипт configure не смог найти библиотеку (в данном примере это библиотека guile). Принцип проверки заключается в том, что скрипт configure для проверки компилирует маленькую программу, которая использует искомую библиотеку. Если компиляция этой тестовой программы не завершилась успешно, то ошибка произойдет и при компиляции нашего программного обеспечения.

  • Причину ошибки можно найти в конце файла config.log, в котором содержится журнал всех действий, предпринятых при настройке. Компилятор C обычно выдает довольно понятные сообщения об ошибках. Этот факт должен помочь вам в решении проблемы.

  • Производится проверка того, что нужная библиотека установлена надлежащим образом. Если она не установлена, то ее необходимо установить (из исходников или бинарников) и запустить configure повторно. Эффективным способом проверки является поиск файлов, содержащихся в библиотеке; это практически всегда lib<name>.so. Например так:

    $ find / -name 'libguile*'
    

    или вот так (в этом случае поиск проходит быстрее):

    $ locate libguile
    

  • Проверить, доступна ли библиотека для вашего компилятора. То есть библиотека должна находиться в каталогах: /usr/lib , /lib , /usr/X11R6/lib (или в других каталогах, список которых содержится в переменной окружения LD_LIBRARY_PATH, которые описываются в “А что если... все это не работает?” номер b. Проверьте, является ли этот файл библиотекой. Для этого выполните команду file libguile.so.

  • Проверьте, что заголовочные файлы библиотеки (хедеры, headers) установлены в правильном месте (обычно /usr/include или /usr/local/include или /usr/X11R6/include). Если вы не знаете, какой из хедеров вам нужен, проверьте что установлена версия для разработки (development) данной библиотеки (например для libgtk+2.0 должен быть установлен пакет libgtk+2.0-devel). Версия пакета библиотек для разработки содержит в себе файлы “include”, которые необходимы для компиляции программ, использующих эту библиотеку.

  • Проверьте наличие свободного места на диске (скрипт configure требует некоторого количества свободного места на диске для размещения временных файлов). Используйте команду df -h для отображения разделов вашего диска и степени их заполнения.

Если для вас непонятны сообщения, находящиеся в файле config.log , не стесняйтесь спрашивать помощи у сообщества свободного программного обеспечения (см. раздел “Техническая поддержка”).

Кроме того, проверьте не отвечает ли configure в 100% No и разберитесь, не отвечает ли этот скрипт No, когда вы точно знаете, что библиотека установлена. Например, было бы очень странно, если в вашей системе отсутствовала бы библиотека curses. В этом случае, у вас вероятно неправильно установлена переменная окружения LD_LIBRARY_PATH!

imake

imake позволяет вам производить настройку свободного програмного обеспечения путем создания файла Makefile по простым правилам. Эти правила определяют, какие файлы необходимы компилятору для создания бинарного файла и, пользуясь этими данными, программа imake генерирует соответствующий Makefile. Эти правила находятся в файле с названием Imakefile.

Интересно то, что программа imake использует архитектурно-зависимую информацию ( site ) Это весьма удобно для приложений, которые используют X Window System. Тем не менее, программа imake используется для многих других приложений.

Использовать imake очень просто. Для этого нужно просто зайти в каталог, в котором находится развернутый архив и выполнить скрипт xmkmf, который вызовет программу imake:

$ xmkmf -a
imake -DUseInstalled -I/usr/X11R6/lib/X11/config
make Makefiles

Если site неправильно установлен, перекомпилируйте и установите X11R6!

Вариант со скриптом shell

Для получения более подробной информации читайте файлы INSTALL или README. Обычно нужно выполнить файл с названием install.sh или configure.sh. Инсталляционный скрипт может сам определять все что ему нужно или быть интерактивным и спрашивать у вас разные данные (например, путь).

Если вы не можете определить какой файл вам нужно запустить, вы можете набрать ./ (находясь в bash) и нажать дважды кнопочку TAB (клавиша горизонтальной табуляции). bash автоматически найдет в текущем каталоге все файлы, которые можно выполнить (в том числе и выполняемые скрипты). Если существует несколько файлов, которые можно выполнить, вы получите список таких файлов и вам останется только выбрать нужный.

В особых случаях нужно установить модули perl. Установка таких модулей выполняется путем выполнения скрипта, написанного на perl. Стандартная команда для выполнения такого скрипта выглядит так:

$ perl Makefile.PL

Другие варианты

Некоторые дистрибутивы свободного программного обеспечения на первых стадиях развития имеют ужасную организацию (мы вас предупреждаем!). Они требуют внесения изменений “ручками” в некоторые конфигурационные файлы. Обычно это файлы Makefile (см. раздел “make”) и config.h (эти названия чаще встречаются. но могут быть и другие).

Мы не советуем делать таких манипуляций, если (конечно) вы не понимаете, что вы делаете. Эти действия требуют некоторых знаний, опыта и желания, но не забывайте пословицу : “practice makes perfect” (практика делает совершенным).