Ловушки для капризных программ Крис Касперски Хакер, номер #089, стр. 089-106-4 $ diff -pruN оригинальный_файл.c модифицированный_файл.c > my.patch Наложить diff-патч можно, в принципе, и вручную. Более элегантный способ — использовать утилиту patch (см. man patch), полностью автоматизирующий этот процесс. В общем случае, ее вызов выглядит так: $ cd progname $ patch -p1 < ~/my.patch Здесь "my.patch" – имя diff-файла, а "p1" – уровень вложенности. Номер <1> означает, что мы вызываем patch из основного каталога программы. Установка патча — обратимая операция, и при желании его можно удалить, воспользовавшись ключом "-R", возвращающим все измененные строки на место. Также обрати внимание на ключ "-b", создающий резервные копии измененяемых файлов. [приступаем к сборке] Начнем с того, что в отличие от мира Windows, где программа устанавливается/собирается путем запуска setup.exe или nmake.exe, в *nix процесс сборки начинается... с чтения документации! Читать документацию обязательно! Даже если сборка с настройками по умолчанию пройдет без сучка и задоринки, то полученная конфигурация может быть неоптимальной. Обычно к исходным текстам прилагается файл install или readme. Если же ничего подобного в архиве нет (как в случае в BOCHS), ищем инструкцию по сборке на официальном сайте. В клинических случаях инструкция находится внутри файлов configure и makefile. Напомню, что типовой порядок сборки большинства программ выглядит следующим образом: $ ./configure $ make # make install Файл configure представляет собой достаточно сложный скрипт, анализирующий текущую конфигурацию, распознающий нынешнюю платформу, определяющий наличие всех необходимых библиотек и управляющий опциями сборки (какие фичи включать, а какие - нет). Результатом его работы становится сгенерированный makefile, который и собирает (компилирует, линкует) программу воедино. Некоторые конфигураторы имеют продвинутый интерфейс и работают в интерактивном режиме, но это не правило, а скорее приятное исключение. Гораздо чаще опции сборки задаются через ключи командой строки или даже путем правки самого конфигурационного файла. Сборка с настройками по умолчанию гарантирует, что программа соберется правильно и, может быть, даже заработает, однако поддержки нужных нам режимов там может и не быть. В частности, уже не раз упомянутый Bochs в дефолтном режиме собирается без эмуляции SoundBlaster'а, без сетевой карты, без sse/mmx, без x86-64, без интегрированного отладчика и без оптимизации скорости выполнения виртуального кода. Вот такой ущербный эмулятор получается! Можно, конечно, бездумно активировать все опции, но это не лучшая идея. Во-первых, многие опции конфликтуют друг с другом, а во-вторых, дополнительные компоненты не только увеличивают размер откомпилированного файла, но и замедляют скорость работы программы. Поэтому, составляя "меню", необходимо быть очень внимательным и предусмотрительным. |