[docs] Re: Literate programming for Makefiles

Oleg A. Paraschenko olpa на xmlhack.ru
Вт Ноя 4 23:49:03 MSK 2003


  Привет!

  Всё, последнее на сегодня письмо. Больше не буду.

...
> > > 
> > >   Во, ещё придумал:
> > > 
> ...
> > 
> >   И ещё:
> ...
> 
>   И ещё:
> 

  Теперь, после написания тестового LP-make-файла, я понял, чем _мне_ не нравится текущая версия LP: она эффективно прячет от меня комментарии и сильно усложняет кодирование, тем самым являясь DP (deliterative programming).

* В самом make-файле комментариев больше нет (<alt:doc/> удалён). Внутри .litprog надо продираться через россыпь тегов. А на каждый чих запускать обозреватель не хочется.

* С кодом такая проблема, что он не основан на XML. Из-за этого вместо

$(PROC) -o $@ $(STYLE) $<

  приходится писать 

$(PROC) -o $@ $(STYLE) $&lt;

  Язык и так птичий, а тут ещё и про сущности надо не забывать.

-------

  Далее в основном для Vyt'a.

  Для теста я создал "Makefile.litprogmain.litprog" (в cvs). В основном он повторяет "makefile.makefile", только с дополнительной хитростью:



<alt:doc>
	
<para>Автоматически перегенерирует make-файлы, если их LP-версия обновились.
Благодаря этому, изменения можно вносить непосредственно в .litprog-файлы,
не задумываясь о перегенерации вручную. Детали процесса описаны в
<quote>GNU make manual</quote> в разделе
<quote>How Makefiles Are Remade</quote>.</para>

<para>Этот файл содердит в себе <literal>litprogmain</literal> вместо
простого <literal>litprog</literal>, потому что в противном случае из
<filename>Makefile.litprog.litprog</filename> получалось бы
<filename>Makefile.litprog</filename>, но этот файл есть
LP-версия файла <filename>Makefile</filename>.</para>

</alt:doc>



  В первый раз Makefile.litprogmain надо создать вручную:



-- <Makefile.litprogmain>
# Published under terms of GNU GPL version 2 (http://www.gnu.org/licenses/gpl.h
# $Id: Makefile.litprogmain.litprog,v 1.1.2.2 2003/11/04 20:24:30 olpa Exp $

PROC            = xsltproc --nonet --xinclude
STYLE           = ../xsl/common/litprog.xsl

$(MAKEFILES_DIR)/Makefile%: $(MAKEFILES_DIR)/Makefile%.litprog
        $(PROC) -o $@ $(STYLE) $<
-- </Makefile.litprogmain>



  Для тестов можно использовать Makefile.olpa:



-- <Makefile.olpa>
MAKEFILES_DIR := .
include $(MAKEFILES_DIR)/Makefile.litprogmain
include $(MAKEFILES_DIR)/Makefile.default-variables

all:
	echo hi
-- </Makefile.olpa>



  Пример:



<screen>
$ make -f Makefile.olpa 
echo hi
hi
</screen>



  Теперь обновляем, например, "Makefile.default-variables.litprog" и смотрим, что меняется:



<screen>
$ touch Makefile.default-variables.litprog
$ make -f Makefile.olpa 
xsltproc --nonet --xinclude -o Makefile.default-variables ../xsl/common/litprog.xsl Makefile.default-variables.litprog
Writing Makefile.default-variables.xml
Writing Makefile.default-variables
echo hi
hi
</screen>



  После чего снова:



<screen>
$ make -f Makefile.olpa 
echo hi
hi
</screen>



-- 
Oleg



Подробная информация о списке рассылки docs