Я поддерживаю и публикую пакет с открытым исходным кодом, который необходимо собрать для Windows и Linux. Я выбрал кросс-компиляцию с mingw и использовал пакеты Debian для сборки и поддержки двоичных файлов для моих пакетов Windows. То есть я определил архитектуры Debian mingw-i686 и mingw-amd64, массируя небольшие модификации в dpkg-cross и некоторые установочные сценарии Debian для учета схемы именования PE (* .dll, * .dll.a вместо .so. и * .so) и начали сборку.
Это прошло очень хорошо, и до недавнего времени я мог легко собрать установку Windows, используя Inno Setup, из расписания установки, то есть списка .deb, которые должны быть установлены для моего пакета. Этот список был сгенерирован с помощью chroot-ed apt-get (с --print-uris
) и выглядел так:
/projects/www/debian/dev/pool/dists/experimental/main/base/libfreetype6_2.4.4-1+mingw.1_mingw-amd64.deb
/projects/www/debian/dev/pool/dists/experimental/main/base/libwxmsw2.8_2.8.10.1-3.1_mingw-amd64.deb
[...]
В основном я использовал apt для разрешения зависимостей и Inno Setup для установки.
Конечно, реальной системы Debian для mingw-i686 не существует, поэтому я не смог запустить apt нативно. Я взломал решение, поместив необходимые файлы в каталог и используя apt-get -o RootDir=
, чтобы изменить корень apt в этот каталог. Это работало, так как apt-get никогда не находился в этом каталоге, а только искал там его базы данных.
В последнее время в тестирование Debian была добавлена новая apt-версия, и эта apt-версия действительно фактически выполняет загрузку в RootDir. Итак, мое решение RootDir стало практически неосуществимым, и для правильной настройки chroot потребовалось бы немало усилий.
У кого-нибудь есть идеи, как я могу получить список пакетов любым другим способом? То есть получить список .deb и всех их зависимостей для конкретного пакета на неродной архитектуре?