Если выполнить make dist, то может быть выдана ошибка:
make[5]: Entering directory '/var/tmp/tarballs/dotnet/dev-util/monodevelop/main/src/core/MonoDevelop.Ide'
make[5]: execvp: /bin/sh: Argument list too long
Makefile:312: recipe for target 'distdir' failed
make[5]: *** [distdir] Error 127
Немного быстрее можно воспроизвести собирая только часть исходного кода
cd /var/tmp/tarballs/dotnet/dev-util/monodevelop/main/src/core/MonoDevelop.Ide
make distdir
Куда зарепорчена
В багтрекере дистрибутива: пока нет
в багтрекере monodevelop: https://bugzilla.xamarin.com/show_bug.cgi?id=39191
в багтрекере automake: искал, не нашел
причина ошибки
http://stackoverflow.com/questions/11475221/why-do-i-get-bin-sh-argument-list-too-long-when-passing-quoted-arguments
$ find /usr -iname "binfmts.h" | xargs grep MAX_ARG_STRLEN
/usr/src/linux-4.3.0-sabayon/include/uapi/linux/binfmts.h:#define MAX_ARG_STRLEN (PAGE_SIZE * 32)
#define PAGE_SIZE 4096
4096 * 32 = 131072
В фрагменте
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$^'; \
dist_files=`for file in $$list; do echo $$file; done | \
...
длина DISTFILES = 1363753, превышает лимит даже после дедупликации
variable DISTFILES actually contain dupicated icon names.
it is possible to use $^ for deduplication of icon names as in
http://stackoverflow.com/a/33312941/6017919
Где исходники?
distdir: в файле Makefile.in
http://stackoverflow.com/questions/37973186/how-autotools-generate-distdir-rule
во время запуска automake копируется из файла
http://git.savannah.gnu.org/cgit/automake.git/tree/lib/am/distdir.am#n73
Строчки с 73 по 290
Как генерировать файлы
внести изменения в Makefile.am
зайти в поддиректорию main, потому что именно там лежит configure.in для Monodevelop
выполнить automake, чтобы сгенерировать Makefile.in-ы
выполнить configure, чтобы сгенерировать Makefile-ы
проверить сборку make dist
Как обойти ограничение ядра на длину команды?
why is this parsed via a 'for file in $list ; do echo $file ; done' to pipe the results to sed? is it just because xargs isn't posix?
hm, xargs is in posix as of 2004 ..
Как заменить неработающий код
Можно сделать патч только для dev-lang/monodevelop
можно (я проверял) локально в файле
https://github.com/mono/monodevelop/blob/master/main/src/core/MonoDevelop.Ide/Makefile.am
скопировать код из шаблона, затем поменять на foreach-и
Ещё можно сделать ebuild для automake с патчем для сборки любых пакетов использующих automake
это позволит протестировать патч локально при сборке многих пакетов (потому что autotools используются много где)
можно кстати поискать готовые примеры на github, вдруг кто-нибудь такое уже делал?
во всех файлах makefile.am найти строку distdir и вывести URL где смотреть
На что заменять
$(sort list of words) - сортировка в gmake:
https://www.gnu.org/software/make/manual/html_node/Text-Functions.html#Text-Functions
Что писать внутрь новой версии правила?
Патч накатить можно, и это было проверено:
патч для Makefile.am
А вот что писать внутрь - это до сих пор не продумано...
Как проверять
Допустим, что был получен некий комплект архивов. Чтобы проверить, можно составить список файлов в архиве
и сравнить со списокм файлов в оригинальном архиве, предварительно отсортировав списки (аналогично тому, как я это провёл такое сравнение для smuxi)
Как отправить патч
Нуу, тщательно всё проверив, надо отправить патч на специальный email
upstream guide for reporting bugs
https://www.gnu.org/software/automake/manual/html_node/Reporting-Bugs.html
bugtracker
http://debbugs.gnu.org/automake ( redirects to
http://debbugs.gnu.org/cgi/pkgreport.cgi?pkg=automake )
Сколько времени займёт фикс?
Для того, чтобы это определить, нужно составить список возможных активностей (PERT), найти критический путь (чтобы отбросить второстепенные задачи)
оценить время необходимое для выполнения задач
выписать необходимые для фикса скиллы
Список возможных активностей нужно зафиксировать в виде документа
(то есть какую-то версию этого списка на дату),
чтобы иметь возможность ссылаться на какую-то определённую версию.
План работ по фиксу баги в automake