[docs] Re: on makefiles
Oleg A.Paraschenko
olpa на xmlhack.ru
Пт Сен 26 23:06:16 MSD 2003
Всем привет,
при дальнейшем изучении make-файлов мне показалось, что ответы на вопросы теряются в рассылке. Глядя на код, я смутно вспоминаю, что видел его обсуждение в рассылке, но копаться в архивах нет никакого желания.
Поэтому предлагаю завести что-нибудь простое для упорядочивания "коллективного знания", хотя бы, например, какой-нибудь WiKi. И это даже не предложение, а утверждение, которое вскоре получит default owner продукта "4. Docs" багзиллы.
В частности, эта система позволит улучшить комментарии. Они достаточно хорошие, но описывают только что и как сделано, но не объясняют, зачем. Эту проблему решает ссылка на страницу с пояснениями, почему это сделано так а не иначе, какие мнения были, на какие жертвы пришлось пойти и т.д.
On Fri, 26 Sep 2003 17:15:09 +0400
Vitaly Ostanin <vyt на vzljot.ru> wrote:
> On Fri, 26 Sep 2003 16:42:01 +0400
> Oleg A.Paraschenko <olpa на xmlhack.ru> wrote:
>
> > Здравствуйте,
> >
> > я сейчас разбираюсь с системой make-файлов и хочу поговорить
> > о
> >
> > * цели "tuned";
> > * basename == dirname.
> >
> > Все конечные цели проходят через этап "tuned", который из
> > файла "xxx.xml" создаёт "xxx.xml-tuned.1". Проблема в том,
> > что этот шаг достаточно ресурсоёмок и результат не
> > кешируется. После выполнения, например,
>
> tuned не повторяется только при запуске нескольких целей сразу
> make html-dir pdf
>
> Это ограничение исторически сложившейся нешаблонной схемы
> Makefile. Я тогда не разобрался с шаблонной :(
>
> Однако делать кеширование tuned-файлов (IMHO) пока рано - сначала
> нужно сделать работающую поддержку profiling:
> http://docbook.sourceforge.net/release/xsl/current/doc/tools/profiling.html
А что, есть проблемы? В этом документе говорится: <quote>If you are using XSL stylesheets version 1.50 and later with EXSLT enabled XSLT processor (Saxon, xsltproc, Xalan) you can do profiling and transformation to HTML or FO in a single step.</quote> Так что profiling можно делать на этапе преобразования из docbook.
>
> Уже как-то был разговор о том, что нужно в печатную версию
> включать урезанный вариант документации. Поэтому tuned-документы
> могут отличаться для печатного и html-вывода.
>
> Кроме урезания документации tuning может быть разным из-за разных
> параметров прореживания одинаковых <ulink/>, удаления
> <revhistory/> и т.п.
Почему это пришлось поместить в tuning, а не в stylesheet customization, я спрошу потом.
>
> А поддержку profiling в Makefile до сих пор не сделали, потому
> что она пока никому серьёзно не понадобилась (есть мой древний
> вариант для psi, но он не гибкий).
Значит, и не надо делать.
>
> > $ make fo
> > xsltproc --nonet --xinclude --stringparam tag-level1 book
> > --stringparam tag-level2 part --stringparam tag-level3 chapter
> > -o admin.xml-tuned.1 \...,
> >
> > повторное задания этой цели:
> >
> > $ make -n fo
> > xsltproc --nonet --xinclude --stringparam tag-level1 book
> > --stringparam tag-level2 part --stringparam tag-level3 chapter
> > -o admin.xml-tuned.1 \...
> >
> > приводит к повторной генерации, а не к сообщению о том, что
> > всё уже собрано.
> >
> > По-моему, это неправильно. Я понимаю, что принудительное
> > кеширование невозможно из-за XInclude (хотя и это можно
> > побороть с помощью своего make depends),
>
> Побороть можно. Я уже пытался сделать подобное в стилях для
> website.
>
> Для этого нужно:
>
> 1.
> Указывать дату коммита в самом документе
> <pubdate>$Date$</pubdate>.
>
> 2.
> При обработке дерева, собранного из XInclude определять, какой
> <pubdate/> относится к какому физическому файлу. Для этого можно
> использовать @xml:base, но будет работать только для документов в
> разных каталогах (у нас так и есть).
> Можно ещё использоваться расширения xslt-процессора для
> определения даты изменения файла, однако cvs $Date$ мне кажется
> более авторитетным :)
Это уже технические детали, хотя и увлекательные.
>
> Кстати, обратите внимание на <abbr/> в копирайте на
> docs.altlinux.ru/beta. Вот туда я хотел ещё добавить дату
> модификации исходного документа.
Это полезная штука. На самом деле, очень правильно в выходной документ (если не финальная версия) вставлять $Id$ всех входящих данных. Снимает кучу вопросов (а вы не забыли обновиться из CVS?)
>
> > но предусмотреть что-нибудь типа
> >
> > $ make CACHETUNED=true <target>
> >
> > не помешало бы. Кому-нибудь ещё это надо?
>
> Если Вы это сделаете, можно закоммитить.
Сделал. Однако, permission denied, поэтому коммит будет через багзиллу и default owner.
>
> Однако:
>
> - Ваша схема может быть сломана при создании схемы profiling.
Я думаю, что в следующей версии make-файлов будет сломано много чего.
>
> - в make нет кеширования, он смотрит на даты изменения
> source и destination файлов.
А сейчас он ни на что не смотрит.
> Сейчас source/destination
> (шаблонная) сборка в cvs docs используется только для website.
>
> - tuned-сборка занимает много времени только на больших
> документах, которые мало кто собирает, да и то не часто.
И действительно. Просто после прочтения архива я решил, что все эксперименты надо проводить на "admin.xml".
В любом случае, меня расстраивает использование make-файлов как урезанных bash-скриптов.
>
> > Теперь про basename == dirname. В данный момент имя файла для
> > генерации должно совпадать с именем папки, в которой он
> > лежит. Это принципиальное решение или просто так получилось?
>
> И историческое, и принципиальное. Исторически это было сделано
> для включения не через XInclude, а через SGML entity, а
> принципиально из-за того, что документ может состоять из
> нескольких XML-файлов в одном каталоге (например, docs-howto) и
> нужно как-то определять, кого из них собирать.
В таком случае можно указать список входных файлов явно.
>
> > Если нужно, я могу переписать make-файлы так, что
> >
> > $ make print/xxx.fo
> >
> > будет создавать fo-файл из xxx.xml, а
>
> Наверное, нужно. Когда-то нужно переходить на шаблонную схему.
> Каюсь, Антон Бояршинов уже делал такое для печатного вывода, а я
> сломал :(
Ладно, пока работает, обратно ломать не будем.
>
> > $ make fo
> >
> > обработает все xml-файлы в текущей папке.
>
> Зачем? В cvs каждый документ должен быть в отдельном подкаталоге,
> его одного и нужно собирать.
Такое ограничение мне кажется неочевидным и достаточно искусственным.
>
> > Кстати, мне кажется, что наши make-файлы надо называть не
> > "Makefile", а "GNUmakefile".
>
> Если есть веские причины переименовать, давайте переименуем.
Веских причин нет, просто мне показалось, что make от bsd откажется работать с такими файлами.
>
> <skipped/>
>
> --
> Regards, Vyt
> mailto: vyt на vzljot.ru
> JID: vyt на vzljot.ru
--
Олег
Подробная информация о списке рассылки docs