[PD-dev] Makefile with recursive directories

Alexandre Quessy listes at sourcelibre.com
Tue Mar 27 06:00:55 CEST 2007


Hi again,

2007/3/26, Hans-Christoph Steiner <hans at eds.org>:
> It's the $.  Since $ denotes a variable in Makefiles, you have to use
> $$ in order for it to make it to the shell, like \$$dir.

It seems like we should use $$ within normal bash lines, and \$$
within sed scripts... For instance :

all:tata
tata:toto
        for i in to*; do cp $$i tata; done;

> In general, this kind of directory recursion is a hack tho.  For
> example, errors in the resursive parts of the script aren't handled
> as well as errors in regular parts of the Makefile.

Is it acceptable in the pd-extended makefile ?

Alex





>
> .hc
>
> On Mar 26, 2007, at 3:17 AM, Alexandre Quessy wrote:
>
> > Hi again,
> > I made it a bit better. I still get 2 errors. (see below) I think that
> > something gets expanded badly in the sed expression that makes it not
> > match what I want, hence it doesn't remove the unwanted path for every
> > file that is found. (see the part saying "src/pdmtl/src: No such file
> > or directory") This is quite funky even though it doesn't even build
> > anything ! ;-)
> >
> > alex
> >
> > ======================== makefile ==================
> > all: pdmtl_install
> >
> > # remove these 3 variables
> > abstractions_src = src
> > objectsdir = objects
> > helpdir = help
> >
> > # pdmtl
> > PDMTL_NAME = pdmtl
> > pdmtl_install:
> >       install -d $(objectsdir)/$(PDMTL_NAME)
> >       for dir in `find $(abstractions_src)/$(PDMTL_NAME) -type d | grep -v
> > 'examples' | sed 's,$(abstractions_src)/$(PDMTL_NAME)/,,'`; do \
> >               install -d $(objectsdir)/$(PDMTL_NAME)/$$dir; \
> >               for fil in `find $(abstractions_src)/$(PDMTL_NAME)/$$dir -name
> > '*.pd' | grep -v '-help' | sed
> > "s,$(abstractions_src)/$(PDMTL_NAME)/\$$dir/,,"`; do \
> >                       install -p $(abstractions_src)/$(PDMTL_NAME)/$$dir/$$fil
> > $(objectsdir)/$(PDMTL_NAME)/$$dir; \
> >               done; \
> >       done
> >       install -d $(helpdir)/$(PDMTL_NAME)
> >       for dir in `find $(abstractions_src)/$(PDMTL_NAME) -type d | sed
> > 's,$(abstractions_src)/$(PDMTL_NAME)/,,'`; do \
> >               install -d $(helpdir)/$(PDMTL_NAME)/$$dir; \
> >               for fil in `find $(abstractions_src)/$(PDMTL_NAME)/$$dir -type f |
> > grep '\.mov\|\.jpg\|\.ttf\|\.keys\|\.wav\|\-help\.pd' | sed
> > "s,$(abstractions_src)/$(PDMTL_NAME)/\$$dir/,,"`; do \
> >                       install -p $(abstractions_src)/$(PDMTL_NAME)/$$dir/$$fil
> > $(helpdir)/$(PDMTL_NAME)/$$dir; \
> >               done; \
> >       done
> >       done
> >       @echo Done installing the Pure Data Montreal Abstractions library
> >
> > ======================== output ===============
> >
> > install       -d objects/pdmtl
> > for dir in `find src/pdmtl -type d | grep -v 'examples' | sed
> > 's,src/pdmtl/,,'`; do \
> >               install -d objects/pdmtl/$dir; \
> >               for fil in `find src/pdmtl/$dir -name '*.pd' | grep -v '-help' | sed
> > "s,src/pdmtl/\$dir/,,"`; do \
> >                       install -p src/pdmtl/$dir/$fil objects/pdmtl/$dir; \
> >               done; \
> >       done
> > find: src/pdmtl/src: No such file or directory
> > install       -d help/pdmtl
> > for dir in `find src/pdmtl -type d | sed 's,src/pdmtl/,,'`; do \
> >               install -d help/pdmtl/$dir; \
> >               for fil in `find src/pdmtl/$dir -type f | grep
> > '\.mov\|\.jpg\|\.ttf\|\.keys\|\.wav\|\-help\.pd' | sed
> > "s,src/pdmtl/\$dir/,,"`; do \
> > /bin/sh: Syntax error: end of file unexpected (expecting "done")
> > make: *** [pdmtl_install] Error 2
> >
> >
> > ======================================
> >
> >
> >
> > 2007/3/26, Alexandre Quessy <listes at sourcelibre.com>:
> >> Something like this ?
> >> ----------------
> >>
> >> all: pdmtl
> >> PDMTL_NAME = pdmtl
> >> abstractions_src = .
> >> pdmtl_install:
> >>         install -d $(objectsdir)/$(PDMTL_NAME)
> >>         install -d $(helpdir)/$(PDMTL_NAME)
> >>         for dir in `find $(abstractions_src)$(PDMTL_NAME) -type d
> >> | grep -v
> >> 'examples'`; do \
> >>                 install -d $(objectsdir)/$(PDMTL_NAME)/$$dir; \
> >>                 for f in `find $(abstractions_src)$(PDMTL_NAME)/$
> >> $dir -name '*.pd' |
> >> grep -v '-help'`; do \
> >>                         install -p $$f $(objectsdir)/$(PDMTL_NAME)/
> >> $$dir; \
> >>                         done; \
> >>                 done; \
> >>         for dir in `find $(abstractions_src)$(PDMTL_NAME) -type
> >> d`; do \
> >>                 install -d $(helpdir)/$(PDMTL_NAME)/$$dir; \
> >>                 for typ in '.mov' '.jpg' '.ttf' '.keys' '.wav' '-
> >> help.pd'; do \
> >>                         for f in `find $(abstractions_src)$
> >> (PDMTL_NAME)/$$dir -name $$typ`; do \
> >>                                 install -p $$f $(helpdir)/$
> >> (PDMTL_NAME)/$$dir; \
> >>                                 done; \
> >>                         done; \
> >>                 done;
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >> 2007/3/23, Hans-Christoph Steiner <hans at eds.org>:
> >> >
> >> > Makefiles are largely tied to bourne shell scripts, so that
> >> would be
> >> > the preferred scripting language with Makefiles.  You can write
> >> > bourne shell code right into the Makefile.  For directory recursion
> >> > or pattern matching, check out these files:
> >> >
> >> > externals/Makefile - $(wildcard ...) and $(shell sed ...)
> >> > pd/src/makefile.in - for dir in $(shell ...)
> >> >
> >> > And others too
> >> >
> >> > .hc
> >> >
> >> > On Mar 22, 2007, at 2:57 AM, Alexandre Quessy wrote:
> >> >
> >> > > Hi all,
> >> > > I want to add the pdmtl abstractions in the CVS. (I have a
> >> developper
> >> > > account.) Our library uses  many directories so that our
> >> abstractions
> >> > > names look like [generate/adsr~] and [seq/liner], for
> >> instance. Now,
> >> > > having several directories that might (will) change over time
> >> makes it
> >> > > a bit longer to write a Makefile entry to make it part of the
> >> > > pd-extended build system. Is there somewhere a Makefile syntax
> >> to make
> >> > > it automagic ? Otherwise, this could be a ($shell ) thing with
> >> a find
> >> > > and a bunch of grep. Other solution : generate the makefile
> >> with a
> >> > > Python script, for instance. Anyone has a quick solution for
> >> this ?
> >> > >
> >> > > Other point: I need to put this in the abstractions part of
> >> the CVS,
> >> > > right ? I would rather put it in externals, but if you
> >> insist... ;)
> >> > >
> >> > > Thanks for helping. By the way, this structure is a kind of a
> >> proposal
> >> > > for a system to classify externals and abstractions by what
> >> they do,
> >> > > not by they author's name. See http://pdmtl.goto10.org for
> >> more infos.
> >> > >
> >> > > --
> >> > > Alexandre Quessy
> >> > > http://alexandre.quessy.net
> >> > >
> >> > > _______________________________________________
> >> > > PD-dev mailing list
> >> > > PD-dev at iem.at
> >> > > http://lists.puredata.info/listinfo/pd-dev
> >> >
> >> >
> >> >
> >> >
> >> ---------------------------------------------------------------------
> >> ---
> >> > ----
> >> >
> >> >                    ¡El pueblo unido jamás será vencido!
> >> >
> >> >
> >> >
> >>
> >>
> >> --
> >> Alexandre Quessy
> >> http://alexandre.quessy.net
> >>
> >
> >
> > --
> > Alexandre Quessy
> > http://alexandre.quessy.net
>
>
>
> ------------------------------------------------------------------------
> ----
>
> I have the audacity to believe that peoples everywhere can have three
> meals a day for their bodies, education and culture for their minds,
> and dignity, equality and freedom for their spirits.      - Martin
> Luther King, Jr.
>
>
>


-- 
Alexandre Quessy
http://alexandre.quessy.net




More information about the Pd-dev mailing list