On Fri, Sep 28, 2007 at 01:12:20AM +0400, Dmitry V. Levin wrote: > Когда я в апреле 2003-го реализовал тот алгоритм, который вы сейчас > критикуете, я счёл возможным пренебречь теми побочными эффектами, о > которых идёт речь, ради того чтобы зависимости пакетов стали лучше в > целом. > > А к тем, Алексей, кто демонстрирует понимание предмета, предъявляется > повышенный спрос: если вас не устраивает действующий алгоритм, предлагайте > улучшенные алгоритмы. У меня есть вариант минимального изменения к 'sh --rpm-requires' (при сохранении совместимости), котрое в результате позволяет реализовать self-requires elimination. --- make_cmd.c- 2007-09-27 21:04:30 +0000 +++ make_cmd.c 2007-09-27 21:06:32 +0000 @@ -778,6 +778,8 @@ make_function_def (name, command, lineno bind_function_def (name->word, temp); temp->source_file = 0; + if (rpm_requires) /* each function is possibly required */ + output_requirement ("function", name); return (make_command (cm_function_def, (SIMPLE_COM *)temp)); } Это пока я не знаю, работает или нет. Потом в shell.req все function(...) являются потенциальными Provides. Если executable(...) в скобках совпадает с какой-либо функцией, то его не нужно искать. Если же нарушить совместимость, то можно реализовать более хитрые алгоритмы. Например, в exec и source не может быть имени функции. А вот когда есть просто WORD, тогда это может быть и функция.