Re: patterns
Johan Holmberg <[email protected]> Sat, 19 Oct 2002 15:03:22 +0200 (MEST)
| Newsgroups | gmane.comp.gnu.cons.general |
|---|---|
| Message-ID | <[email protected]> |
On Tue, 15 Oct 2002 [email protected] wrote: > > After reading the cons manual, I still can't figure out how to write a > simple pattern rule in Cons. For instance, if I want to create a "ps" > file from a "dvi" file using dvips, in GNU Make I can write the > following rule: > > %.ps: %.dvi > dvips $< -o $@ > Cons has no "implicit rules" ala make (pattern matching rules/suffix rules). I think this is very *good*. Even if the implicit choosing of rules in make is tempting in the simple case, I've seen too many cases where *the wrong* rule is choosen by "accident" and the poor ordinary make user has no clue what is happening. A Construct instead explicitly tells Cons what there is to build. But since you have a real programming language at your disposal the difference isn't so big. Just create a "dvips" method ... > Is there a way to do this easily in cons? > You could do something like: #-------------------------------------------------- sub cons::dvi2ps { my ($e, $dvi) = @_; # replace suffix: .dvi ---> .ps my $ps = $dvi; $ps =~ s/\.dvi$//; $ps .= ".ps"; $e->Command( $ps, $dvi, "dvips %< -o %>"); } $e = cons->new(); # use the new method ... $e->dvi2ps( "foo.dvi" ); #-------------------------------------------------- And if you intent do use this more than once, you can move the "cons::dvi2ps" method into a Perl-module and just add a "use" line like below to your Construct file: use YourConsStuff; $e = cons->new(); $e->dvi2ps( "foo.dvi" ); Or maybe even make a sub-class of "cons" and add the method there. In either case you get a rather short Construct file. /Johan Holmberg _______________________________________________ [email protected] http://mail.gnu.org/mailman/listinfo/cons-discuss Cons URL: http://www.dsmit.com/cons/