Как мне написать правило Makefile для применения исправлений с помощью Quilt?

Я один из разработчиков Inkscape. Мы включаем несколько модифицированных фрагментов различных бесплатных библиотек в нашу кодовую базу, и мы действительно хотели бы, чтобы наши исправления для программного обеспечения были более удобными в обслуживании.

Я использовал Quilt patch tool, чтобы применить исправления к исходному коду в пакетах Debian, и мы рассмотрели возможность использования это в сборке для Inkscape

i.e.,

  1. Исправьте все соответствующие файлы восходящего потока с помощью Quilt
  2. Скомпилировать исходный код

Это позволило бы нам поддерживать в первозданном виде копию вышестоящей библиотеки и отдельный набор патчей, которые мы затем можем пересылать вверх по течению.

Моя проблема в том, что кроме документации Debian, я не нашел примеров того, как аккуратно включить Quilt в Makefile. Может ли кто-нибудь указать мне на проект, в котором это делается?

В настоящее время мы используем Automake, поэтому, если есть элегантный способ запустить правило «патча» перед основной сборкой, это было бы здорово.


person Alex Valavanis    schedule 14.04.2014    source источник


Ответы (1)


Я не могу указать вам на проект, который делает это, но я сделал это для себя раньше, создав новый патч (который будет последним), который создает файл с именем patched.txt в удобном месте. Makefile для простого проекта выглядит так:

CXX = clang
LDFLAGS += -lstdc++
CXXFLAGS += -Wall -pedantic --std=c++11

all: patched.txt myprog

myprog: myprog.o helper.o

patched.txt: patches/series
    quilt push -a

clean:
    rm *.o barcode 
    quilt pop -a

Вы можете захотеть, а можете и не захотеть иметь quilt pop -a как часть clean цели. В других проектах я создал отдельную revert цель, которая делает только это. Я не включил это в проект, который также использует Autotools, но это не должно быть слишком сложно.

В моем случае patched.txt создается вручную с использованием date >patched.txt, чтобы легко увидеть дату установки патча.

person Edward    schedule 14.04.2014
comment
Спасибо. Я предполагаю, что можно было бы просто добавить date > patched.txt в конец правила patched.txt:, вместо того, чтобы использовать его как фиктивный патч в серии quilt. Правильно ли этот Makefile обрабатывает зависимости? например, справляется ли он со сборками вне исходного кода? На самом деле, я думаю, нам нужно было бы реализовать что-то, что создает временную копию необходимых файлов в месте сборки, исправляет их, а затем выполняет сборку. - person Alex Valavanis; 14.04.2014
comment
@AlexValavanis: фиктивный патч нужен из-за того, как работает make. quilt запускается из-за отсутствия этого файла. - person Edward; 14.04.2014
comment
Конечно, но, создав файл в конце правила patched.txt в Makefile, вы сможете избежать добавления его в серию лоскутных одеял. Затем его можно было бы снова удалить в правиле clean. - person Alex Valavanis; 14.04.2014
comment
О, теперь я понимаю, что вы имеете в виду, и да, это жизнеспособный вариант. Кроме того, это немного задокументировано, но quilt действительно возвращает рациональные коды возврата, например, при сбое исправления. - person Edward; 14.04.2014