Hello, 

I've revised my Makefile to build all translated doc in the ddp, and to
build not only html, but also several formats.

** Features
- has a conf part and an 'active' part. The first could become the makefile
  of each dir, and the second be the base of a Makefile.standard
  
- can build the following format (configurable): ps pdf txt tov info

- build the version.ent if possible (ie, if dir 'debian' exists)

- publish anything properlly (I think), symlinking what should be symlinked

- have a conf variable ORIG_LANG to say what is the cannonical language, and
  handle it properlly
  
- contains a bad trick to fix what debiandoc2* does.
  It does pt_BR -> pt-br, and I revert it (not only of pt_BR, but for .._..).
  This trick is bad because debiandoc2* should be fixed.

** The tests I've done

it works with no change in the following dirs with no change:
- maint-guide
- developers-reference
- project-history

It fails in the following dirs :
- faq: there is more than on manual in there. I will need to rework the
  Makefile a bit

- tutorial: the manual is named 'debian-tutorial'. So, we can't find it from
  the pwd (but could be done in conf part).
          
I did not try the others dir.


** What is needed now ?

- a way to build an index.html containing links to all available materials
  (for now, it is the index.en.html, and users won't see the result other
  materials)


So, I think it should be ok this time. Can someone review (should be quick),
and commit it ?


Bye, Mt.
#
# Makefile for the Debian New Maintainers' Guide
#
# Should work both for a manual in the Debian Documentation Project
# manuals.sgml tree, and for maint-guide package build.

##### CONF PART 
# this can and will be overriden by a higher level makefile
PUBLISHDIR := ../../../public_html/manuals.html
MANUAL = $(notdir $(shell pwd))

# The cannonical language, in which the original document is
ORIG_LANG=en
# list of langs (above the canonical one)
LANGS=fr #to test
#LANGS=$(shell ls $(MANUAL).*.sgml|sed 's/.*$(MANUAL)\.\([^.]*\)\.sgml/\1/')

EXTS=ps pdf txt tov info
##### END OF CONF PART CHANGE THE END AT YOU OWN RISK

# what will be built
HTMLDIRS=$(MANUAL).html $(foreach lang,$(LANGS),$(MANUAL).$(lang).html)
ALLFILES=$(foreach ext,$(EXTS),\
            $(MANUAL).$(ORIG_LANG).$(ext)\
            $(foreach lang,$(LANGS),$(MANUAL).$(lang).$(ext))\
          )


#====[ build rules ]===========================================================
# generate anything some dirs want version.ent to be builded, some not

DEBIAN=$(wildcard debian)
ifeq ($(DEBIAN),"debian")
all: version.ent $(HTMLDIRS) $(ALLFILES)
else
all: $(HTMLDIRS) $(ALLFILES)
endif

version.ent: debian/changelog
        ./debian/rules $@

#----[ generating HTML ]-------------------------------------------------------
# for orig_lang
$(MANUAL).html: $(MANUAL).sgml
        debiandoc2html -l $(ORIG_LANG) -c $<

# for translated languages
# FIXME: there is a trick because debiandoc2html does a sed 'y/.../...' 
#        which should be reverted to have the content negociation working.
#   This trick is bad. debiandoc2html should be corrected.
$(MANUAL).%.html: $(MANUAL).%.sgml
        debiandoc2html -l $* -c $<
        @echo "cleaning up file extensions";\
        for file in `ls $(MANUAL).$*.html/*` ; do\
         newfile=`echo $$file|\
                  sed 's/$(shell echo $*|\
              sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ_/abcdefghijklmnopqrstuvwxyz-/'\
                          )\.html/$*\.html/'`;\
         if [ $$file != $$newfile ] ; then\
           mv $$file $$newfile;\
         fi\
        done;   


#----[ generating plain text ]-------------------------------------------------
# for orig_lang
$(MANUAL).$(ORIG_LANG).txt: $(MANUAL).sgml
        debiandoc2text -l $(ORIG_LANG) -c $<

# for translated languages
$(MANUAL).%.txt: $(MANUAL).%.sgml
        debiandoc2text -l $* $<

#----[ generating tov ]--------------------------------------------------------
# for orig_lang
$(MANUAL).$(ORIG_LANG).tov: $(MANUAL).sgml
        debiandoc2textov -l $(ORIG_LANG) -c $<

# for translated languages
$(MANUAL).%.tov: $(MANUAL).%.sgml
        debiandoc2textov -l $* $<

#----[ generating info ]-------------------------------------------------------
# for orig_lang
$(MANUAL).$(ORIG_LANG).info: $(MANUAL).sgml
        debiandoc2info -l $(ORIG_LANG) -c $<

# for translated languages
$(MANUAL).%.info: $(MANUAL).%.sgml
        debiandoc2info -l $* $<

#----[ generating PostScript ]-------------------------------------------------
# for orig_lang
$(MANUAL).$(ORIG_LANG).ps: $(MANUAL).sgml
        debiandoc2latexps -l $(ORIG_LANG) -c $<

# for translated languages
$(MANUAL).%.ps: $(MANUAL).%.sgml
        debiandoc2latexps -l $* $<

#----[ generating PDF ]--------------------------------------------------------
# for orig_lang
$(MANUAL).$(ORIG_LANG).pdf: $(MANUAL).sgml
        debiandoc2latexpdf -l $(ORIG_LANG) -c $<

# for translated languages
$(MANUAL).%.pdf: $(MANUAL).%.sgml
        debiandoc2latexpdf -l $* $<

#====[ publishing to the DDP web pages ]=======================================
publish: publish-html publish-files

#----[ publish html ]----------------------------------------------------------
publish-html: $(HTMLDIRS)
        test -d $(PUBLISHDIR)/$(MANUAL) \
           || install -d -m 755 $(PUBLISHDIR)/$(MANUAL)
        rm -f $(PUBLISHDIR)/$(MANUAL)/*.html
         # install any translated html
        $(foreach lang,$(LANGS),\
          install -p -m 644 $(MANUAL).$(lang).html/*.html 
$(PUBLISHDIR)/$(MANUAL)/;)
         # install original html
         install -p -m 644 $(MANUAL).html/*.html \
                           $(PUBLISHDIR)/$(MANUAL)/
         # make the simlinks for html files
         @$(foreach file,$(wildcard  $(MANUAL).html/*.html),\
          name=`echo $(file) | sed 's/$(MANUAL).html\///'`; \
          link=`echo $$name|sed 's/.$(ORIG_LANG).html$$/.html/'`;\
          rm -f $$link; \
          echo "$$link -> $$name";\
          ln -s $(PUBLISHDIR)/$(MANUAL)/$$name\
                $(PUBLISHDIR)/$(MANUAL)/$$link;\
         )

#----[ publish the files ]-----------------------------------------------------
publish-files: $(ALLFILES)
        test -d $(PUBLISHDIR)/$(MANUAL) \
           || install -d -m 755 $(PUBLISHDIR)/$(MANUAL)
        $(foreach ext,$(EXTS),\
         rm -f $(PUBLISHDIR)/$(MANUAL)/*.$(ext);\
         \
         $(foreach lang,$(LANGS),\
          install -p -m 644 $(MANUAL).$(lang).$(ext)\
                            $(PUBLISHDIR)/$(MANUAL)/;)\
         \
         install -p -m 644 $(MANUAL).$(ORIG_LANG).$(ext)\
                           $(PUBLISHDIR)/$(MANUAL)/;\
         \
         rm -f $(PUBLISHDIR)/$(MANUAL)/$(MANUAL).$(ext);\
         ln -s $(PUBLISHDIR)/$(MANUAL)/$(MANUAL).$(ORIG_LANG).$(ext)\
               $(PUBLISHDIR)/$(MANUAL)/$(MANUAL).$(ext);\
        )


#----[ publish the ps ]--------------------------------------------------------
publish-ps: ps
        test -d $(PUBLISHDIR)/$(MANUAL) \
           || install -d -m 755 $(PUBLISHDIR)/$(MANUAL)
        rm -f $(PUBLISHDIR)/$(MANUAL)/*.ps
         # install any translated ps
        $(foreach lang,$(LANGS),\
          install -p -m 644 $(MANUAL).$(lang).ps \
                            $(PUBLISHDIR)/$(MANUAL)/ ;)
         # install original ps
         install -p -m 644 $(MANUAL).$(ORIG_LANG).ps\
                           $(PUBLISHDIR)/$(MANUAL)/
         # make the simlinks for ps
         rm -f $(PUBLISHDIR)/$(MANUAL)/$(MANUAL).ps;
         ln -s $(PUBLISHDIR)/$(MANUAL)/$(MANUAL).$(ORIG_LANG).ps\
               $(PUBLISHDIR)/$(MANUAL)/$(MANUAL).ps


#====[ validating SGML ]=======================================================
validate:
        set -x; for i in $(wildcard *.sgml); do nsgmls -ges -wall $$i; done

#====[ cleaning up ]===========================================================
clean distclean:
        rm -f maint-guide*.{txt,ps,dvi,pdf,info*,log,tex,aux,toc,sasp*} *~
        rm -rf maint-guide*.html

.PHONY: all html txt ps\
        publish publish-html publish-txt publish-ps\
        clean distclean validate

Reply via email to