[d-kernel] Сборка модуля drbd
Михаил Якушин
=?iso-8859-1?q?silicium_=CE=C1_altlinux=2Eru?=
Вс Сен 7 21:22:23 MSD 2008
Eugene Prokopiev wrote:
>>> А теперь новая проблема: в официальном тарболле drbd присутствует файл
>>> drbd/drbd_buildtag.c, в git его нет. По содержимому файла понятно, что
>>> он каким-то магическим образом генерируется. Как это происходит?
>>>
>>> Судя по
>> http://git.altlinux.org/people/lakostis/packages/drbd-tools.git
>>> с этой проблемой должен был столкнуться lakostis, но в спеке решения
>>> не зафиксировано - уже готовый drbd/drbd_buildtag.c лежит в бранче
>>> master и попадает в патч. Ау, lakostis, как ты генерировал этот файл?
>>>
>>>
>> Этот файл вроде бы генерился толи скриптом идущем в составе tar-ballа толи
>> деланием специального make-targetа
>
> в Makefile была цель, которую я было заподозрил, но она, насколько я
> понимаю, уже с готовым drbd_buildtag.c что-то делает:
>
> # XXX this is newly created whenever the toplevel makefile does something.
> # however it is NOT updated when you just do a make in user/ or drbd/ ...
> #
> # update of drbd_buildtag.c is forced:
> .PHONY: drbd/drbd_buildtag.c
> drbd/drbd_buildtag.c:
> $(MAKE) -C drbd drbd_buildtag.c
>
> Других подозрительных мест я, перерыв весь тарболл, не нашел :(
>
в drbd-8.2 в drbd/Makefile:
drbd_buildtag.c:
@is_tarball=`test -e ../.git/. && echo false || echo true`;\
set -e; exec > $@.new;
\
echo -e "/* automatically generated. DO NOT EDIT. */";
\
echo -e "const char * drbd_buildtag(void)\n{";
\
if $$is_tarball; then
\
if ! test -e $@ ; then
\
echo >&2 "your DRBD source tree is broken. unpack
again."; \
exit 1;
\
fi;
\
grep return $@ ;
\
else
\
GITHEAD=$$(git-rev-parse HEAD);
\
GITDIFF=$$(cd .. && git-diff --name-only HEAD | tr -s '\t\n'
' ' | \
sed -e 's/^/ /;s/ *$$//');
\
echo -e "\treturn \"GIT-hash: $$GITHEAD$$GITDIFF\"";
\
fi ;
\
echo -e "\t\t\" build by $$USER@$$HOSTNAME, `date "+%F
%T"`\";\n}"; \
mv --force $@.new $@
Подробная информация о списке рассылки devel-kernel