help-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: conditional file parameters in make command?


From: Erik
Subject: Re: conditional file parameters in make command?
Date: Thu, 26 Mar 2009 20:42:46 +0100
User-agent: Thunderbird 2.0.0.19 (X11/20090102)

Mike Shal skrev:
> On 3/26/09, Erik <address@hidden> wrote:
>> I need to generate a PDF-file from subdocuments. I have this Makefile:
>>  whole.pdf: 1.pdf 2.pdf 3.pdf 4.pdf 5.pdf 6.pdf 7.pdf 8.pdf 9.pdf
>>    gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=$@ -dBATCH $^
>>
>>  The problem is that a subdocument may begin on the backside of the last
>>  page of the previous subdocument. This is bad if the printed document
>>  should be divided into subdocuments. Therefore I need to make sure that
>>  every subdocument begins on a new paper. A way to do this would be to
>>  insert an empty 1-page document (empty.pdf) after each document that has
>>  an odd number of pages:
>>  whole.pdf: 1.pdf 2.pdf 3.pdf empty.pdf 4.pdf 5.pdf 6.pdf 7.pdf empty.pdf
>>  8.pdf empty.pdf 9.pdf
>>    gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=$@ -dBATCH $^
>>
>>  That is certainly not the right way to do it. It will fail if I change
>>  any subdocument so that its page count modulo 2 is changed.
>>
>>  By using pdfinfo (in the poppler package) I can find out whether a
>>  particular PDF-file has an odd number of pages:
>>    echo $(pdfinfo file.pdf|egrep "^Pages: *[[:digit:]]+$"|sed 
>> "address@hidden:
>>  *\([[:digit:]]\+\)address@hidden@")%2|bc
>>
>>  But which is the right way to build that into the Makefile?
>
> Maybe you would be better off doing this in the shell rather than in
> make?

I think make can do it just fine (I do not want to have another script
file in the directory). I RTFM and wrote this, which seems to work:
pagecount = $(shell pdfinfo $(1)|egrep "^Pages: *[[:digit:]]+"|sed
"address@hidden: *\([[:digit:]]\+\)@\1@")
odd       = $(shell echo $(pagecount)%2|bc|grep 1)
filled    = $(1) $(if $(call odd,$(1)),emptypage.pdf)
whole.pdf: 1.pdf 2.pdf 3.pdf 4.pdf 5.pdf 6.pdf 7.pdf 8.pdf 9.pdf
    gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=$@ -dBATCH $(foreach
x,$^,$(call filled,$x)) || rm -f $@





reply via email to

[Prev in Thread] Current Thread [Next in Thread]