[docs] Re: makefile rework intro
Oleg A.Paraschenko
olpa на xmlhack.ru
Вт Окт 28 21:44:49 MSK 2003
Привет!
On Tue, 28 Oct 2003 12:34:02 +0300
Vitaly Ostanin <vyt на vzljot.ru> wrote:
...
>
> > > Сразу добавлю, что сейчас в Makefiles разброд с переменными -
> > > они могут быть "параметр значение", а могут быть просто
> > > "значение".
> > >
> > > Лучше в новых Makefiles использовать только "параметр
> > > значение", чтобы можно было использовать переменную, даже
> > > если "значение" не определено.
> >
> > Не понял. Нужны пояснения. Можно в jabber.
>
> Например, есть два варианта:
>
> 1.
> ULINK_LEAVE = 1
> xsltproc --param ulink.leave.duplicates.after $(ULINK_LEAVE)
>
> 2.
> ULINK_PARAMS = --param ulink.leave.duplicates.after 1
> xsltproc $(ULINK_PARAMS)
>
> Первый вариант неудачен, поскольку при неопределённом ULINK_LEAVE
> стили не отработают. Второй вариант самодостаточен, поскольку при
> неопределённом ULINK_PARAMS просто будут использованы параметры
> по умолчанию из стилей.
Насколько я вижу, от первого варианта быстро избавиться не получится, так как надо править все make-файлы. А я предпочитаю менять понемногу.
Чтобы не забыть вычистить такие штуки -- можно записать на меня задачу в bugzill'e.
...
>
> > > Есть сложности, например, с emacs-mode-psgml. Его
> > > предкомпилированные DTD должны лежать рядом с документом.
> >
> > Странно. Ну, тогда с некоторыми исключениями.
>
> Почему не использовать переменную, куда вместе с tmp/ занести
> поимённо остальные временные файлы?
Можно и так, по ходу дела разберусь.
>
> Кстати, я бы не хотел, чтобы при make clean удалялся
> скомпилированный DTD - это задача для distclean.
Да, естественно.
...
> > > >
> > > > Цепочка преобразований.
> > > >
> > > > Общее начало:
> > > > .xml -> xinclude -> profiling+tuning (A)
> > >
> > > XInclude незачем выделять в отдельный этап, IMHO.
> >
> > Пусть всё-таки будет. Интуиция советует, не хочу ей
> > противоречить.
>
> Лучше всё-таки аргументировать.
>
> XInclude должен выполняться перед любой обработкой.
Да.
>
> XInclude выполняется для всех документов, поскольку это проще,
> чем выполнение в зависимости от наличия включений.
Да.
>
> XInclude может выполняться в один проход с другими ключами
> обработки и не конфликтует ни с одним из них.
То есть XInclude никак не связан с обработкой. А как пишет Ален Голуб: "Сущность программирования: без сюрпризов, минимум сцепления и максимум согласованности.". Объединение независимых сущностей до добра не доводит. Другое дело, что надо показать, что Xinclude -- это отдельная сущность.
>
> Отдельное выполнение XInclude потребует дополнительного запуска
> xmllint и дополнительной обработки как всего дерева документов,
> так и всех external entities, DTD и т.п. - то есть, накладно по
> ресурсам.
>
> А вот зачем это нужно, пока не ясно... К тому же отдельный этап с
> XInclude всегда можно добавить.
Или убрать ;-)
Поясняю, зачем это нужно мне. Я хочу, чтобы при некоторых условиях "make" не пересобирал XInclude. Это желание естественным образом разделяет xinclude+profiling+tuning на xinclude и profiling+tuning, и, таким образом, xinclude становится отдельной сущностью.
Про ресурсы. Xinclude, "external entities, DTD и т.п." выполняются только на первом шаге, больше их не будет. Ресурсы, потраченные на это, скорее всего, очень велики. По сравнению с ними, ещё один запуск xsltproc незаметен. А если делается парочка profiling, то выделение xinclude в отдельный шаг явно выгодно.
Далее. Отладка. Результат Xinclude - важный промежуточный файл. Если tuning+profiling работает не так как ожидалось, что делать? Кто виноват -- неправильный XSLT или неправильный XPointer?
>
> Кстати, лучше делать все этапы с учётом того, что между каждой
> парой этапов могут добавиться дополнительные этапы.
>
Постараюсь и это учесть.
...
> --
> Regards, Vyt
> mailto: vyt на vzljot.ru
> JID: vyt на vzljot.ru
--
Oleg Paraschenko olpa@ http://xmlhack.ru/ XML news in Russian
Подробная информация о списке рассылки docs