[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