Руководство начинающего разработчика Debian - Изменение исходных текстов

         

Проблемы с библиотеками


Существует общая проблема: библиотеки обычно различаются на разных платформах. Например, файл Makefile может содержать ссылки на библиотеки, которые недоступны в Debian (или даже в Linux!). В этом случае вы должны попытаться попробовать заменить библиотеку, служащую тем же самым целям, но уже присутствующую в Debian. Наилучший способ — это попробовать закоментировать строки, содержащие такие библиотеки (возможно, сообщения об ошибках помогут вам разобраться с тем, как можно разрешить эту проблему).

То есть, если в вашем файле Makefile (или Makefile.in) присутствует строка, похожая на эту (а программа не компилируется): LIBS = -lcurses -lчто-то -lчто-то-еще

Попробуйте заменить ее на такую строчку (и, возможно, все заработает): LIBS = -lncurses -lчто-то -lчто-то-еще #LIBS = -lcurses -lчто-то -lчто-то-еще

[ назад ] [ Содержание ] [ 1 ] [ ] [ 3 ] [ 4 ] [

] [ 6 ] [ вперед ]

Руководство начинающего разработчика Debian версия 1.0.2, 10 June 2001 (?)
Josip Rodin jrodin@jagor.srce.hr
Перевод: Михаил Соболев, mss@transas.com
Перевод: Алексей Выскубов, alexey@pepper.spb.ru

postamble();



Руководство начинающего разработчика Debian - Изменение исходных текстов


Обычно программы устанавливаются в каталог /usr/local. Пакеты, входящие в состав Debian, не должны использовать этот каталог, поскольку он зарезервирован для системного администратора (или пользователей). Это означает, что вы обязательно должны изучить систему построения вашей програмы, обычно вся необходимая информация содержится в файле Makefile. В этом файле (для подробной информации см. make(1)) находятся команды, позволяющие автоматизировать процесс построения данной программы. Подробно об этом файле мы говорим в разделе Файл rules, раздел 4.4.

Заметьте, что если выбранная вами программа использует GNU automake(1) и/или autoconf(1) (что означает у вас присутствуют файлы Makefile.am или/и Makefile.in соответственно), вы должны будете изменять именно эти файлы, так как программа automake использует информацию в файле Makefile.am для создания нового файла Makefile.in, а сценарий configure использует информацию в файле Makefile.in для создания нового файла Makefile. Изменение файла Makefile.am требует определенных знаний о программе automake, изменение же файла Makefile.in практически то же самое, что и изменение файла Makefile, однако вы должны правильно использовать переменные (имена, окруженные символом ‘@’), например @CFLAGS@, @LN_S@; они будут заменены на значения, указанные при запуске сценария ./configure.

Мы не можем охватить все проблемы, с которыми вы можете столкнуться, но все-таки мы попытались перечислить те из них, с которыми вы, скорее всего, столкнетесь.



Установка в необходимый каталог


В большинстве случаев, программы устанавливаются в существующую иерархию каталогов вашей системы таким образом, чтобы исполняемый файл попал в один из каталогов, указанных в переменной среды $PATH, а файлы документации и страницы Руководства оказались в стандартных местах. Вы должны убедиться, что операция установки выполняется правильно, но при этом вы должны сделать так, чтобы все необходимые файлы могли быть установлены во временный каталог, который будет создан в каталоге debian/ (обычно этот временный каталог называется debian/tmp), это позволит стандартным программам разработчика построить результирующий пакет. Все, что находится в этом временном каталоге, появится в системе пользователя при установке вашего пакета. Единственное отличие состоит в том, что программа dpkg будет устанавливать эти файлы по отношению к корневому каталогу.

Вообще говоря, вам нужно установить программу в каталог debian/tmp, но при этом она должна себя правильно вести, если ее поместить в корневой каталог, то есть, если установить пакет. Если процесс построения использует программы GNU autoconf, то программа dh_make добавит необходимые команды с тем, чтобы необходимое действие выполнялось автоматически, а вы можете пропустить данный раздел. В других случаях вам, скорее всего, понадобится просмотреть и поправить make-файлы.

Вот, например, соответствующая часть файла Makefile программы gentoo[4]: # Куда поместить исполняемые файлы по команде 'make install'? BIN = /usr/local/bin # Куда поместить значки по команде 'make install'? Внимание: если вы # поменяете это значение, при старте программа gentoo может не найти # этих значков. Вам придется поменять значение параметра 'путь к значкам' # (в окне настроек страничка "Пути"). ICONS = /usr/local/lib/gentoo/

Прежде всего вы должны добавить две строчки, которые говорят: # Добавлено для Debian GNU/Linux. DESTDIR =

так как процесс построения требует что-то подобное (об этом вы можете прочитать в раздел Файл rules, раздел 4.4).

В файле Makefile был указан каталог, куда будет установлена программа. Вам необходимо заменить ту строчку на: # Куда поместить исполняемые файлы по команде 'make install'? BIN = $(DESTDIR)/usr/X11R6/bin


Вы можете спросить «почему в этот каталог, а не в какой-нибудь другой?» Потому что существуют определенные правила, говорящие куда должны быть установлены программы. Об этом можно почитать в стандарте «Иерархии файловой системы» (см. /usr/share/doc/debian-policy/fhs/). Поэтому мы должны устанавливать программу в каталог /usr/X11R6/bin вместо каталога /usr/local/bin, а страницу Руководства (в нашем случае она отсутствует, но так как для большинства программ они существуют, мы создадим ее позже) в каталог /usr/share/man/man1, а не в каталог /usr/local/man/man1.

Следующий шаг несколько сложнее. Если вы произведете следующее изменение: ICONS = $(DESTDIR)/usr/share/gentoo/

что соответствует стандарту, вам придется изменить исходные тексты программы. Но где и что искать? Вы можете попробовать выполнить команду: grep -n usr/local/lib *.[ch]

(ее нужно выполнить в каждом каталоге, в котором присутствуют файлы с расширением .c или .h). Программа grep выведет названия файлов и номера строк, в которых присутствует ‘usr/local/lib’. Теперь измените в этих строчках ‘usr/local/lib’ на ‘usr/share’ — и готово. Только будьте внимательны и не измените что-нибудь другое, особенно, если вы не слишком много знаете о программировании на языке C. :-)

Теперь вам нужно найти цель ‘install’ (поищите в файле Makefile строчку, содержащую ‘install:’) и переименуйте все ссылки на каталоги, не использующие переменные, описанные в начале файла. В нашем случае, мы несколько улучшим то, что было. Если раньше было: # ----------------------------------------- Установка

# Для того, чтобы выполнить это, вы должны иметь права пользователя root! install: gentoo install ./gentoo $(BIN) install icons $(ICONS) install gentoorc-example $(HOME)/.gentoorc

После необходимого изменения, он будет выглядеть так: # ----------------------------------------- Установка

# Для того, чтобы выполнить это, вы должны иметь права пользователя root! install: gentoo-target install -d $(BIN) $(ICONS) $(DESTDIR)/etc install ./gentoo $(BIN) install -m644 icons/* $(ICONS) install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc install -d $(DESTDIR)/usr/share/doc/gentoo/html cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html

Внимательный читатель заметит, что мы поменяли ‘gentoo’ на ‘gentoo-target’ в строчке, где указано ‘install:’. Это называется исправлением ошибки. :-)

Каждый раз, когда вы вносите изменения, не связанные непосредственно с созданием пакета Debian, обязательно отправьте их авторам программы с тем, чтобы они могли быть включены в следующий выпуск программы. Заметьте, что вы не должны посылать содержимое каталоге debian, однако вы должны посылать любые другие изменения. И попытайтесь не создавать авторам лишних проблем, внося изменения, имеющие отношения только к Linux (или даже Unix!).