X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/70b904c575877c683e6c79cac4fbf7c6d89d0bde..f0c52873e4c1e3a16bb2d5a086df2526f698e4ac:/Makefile.m4 diff --git a/Makefile.m4 b/Makefile.m4 index 8cf9edc..6312e98 100644 --- a/Makefile.m4 +++ b/Makefile.m4 @@ -1,6 +1,6 @@ -## -*-makefile-*- +## -*-m4-*- ## -## $Id: Makefile.m4,v 1.17 1999/11/25 11:38:31 mdw Exp $ +## $Id$ ## ## Makefile for Catacomb ## @@ -15,74 +15,21 @@ ## it under the terms of the GNU Library General Public License as ## published by the Free Software Foundation; either version 2 of the ## License, or (at your option) any later version. -## +## ## Catacomb is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU Library General Public License for more details. -## +## ## You should have received a copy of the GNU Library General Public ## License along with Catacomb; if not, write to the Free ## Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, ## MA 02111-1307, USA. -##----- Revision history ---------------------------------------------------- -## -## $Log: Makefile.m4,v $ -## Revision 1.17 1999/11/25 11:38:31 mdw -## Support for conversions between MPs and C integers. -## -## Revision 1.16 1999/11/22 20:51:33 mdw -## Add yet more source files. -## -## Revision 1.15 1999/11/22 14:08:30 mdw -## Improve dependencies for test programs. -## -## Revision 1.14 1999/11/22 00:17:09 mdw -## Create object files for test programs so that rebuilding doesn't take so -## long. -## -## Revision 1.12 1999/11/20 22:36:26 mdw -## Improve dependencies. Move mpx testing into mpx.c. -## -## Revision 1.11 1999/11/20 22:24:53 mdw -## Add Diffie-Hellman support. -## -## Revision 1.10 1999/11/19 19:28:24 mdw -## Add DSA files and tests. -## -## Revision 1.9 1999/11/17 18:05:35 mdw -## Many new files and test cases for multiprecision arithmetic. -## -## Revision 1.8 1999/11/13 01:56:07 mdw -## Include multiprecision maths stuff. -## -## Revision 1.7 1999/11/11 19:01:02 mdw -## Use `libtool' to generate a shared library. -## -## Revision 1.6 1999/11/11 17:47:34 mdw -## Updates for new configuration system, and `mptypes' generator. -## -## Revision 1.5 1999/11/11 00:59:17 mdw -## Minor reformatting. -## -## Revision 1.4 1999/10/24 10:20:36 mdw -## Modify for standalone distribution. The library's getting far too large -## to be sensibly embedded in other programs. -## -## Revision 1.3 1999/10/24 10:04:26 mdw -## Install headers in the right directory. -## -## Revision 1.2 1999/10/23 12:55:35 mdw -## The `CVS' directory can't be hardlinked. Don't worry about this -## overmuch. -## -## Revision 1.1 1999/09/03 08:41:11 mdw -## Initial import. -## - AUTOMAKE_OPTIONS = foreign +SUBDIRS = tests + archincludedir = $(libdir)/catacomb/include ## --- List handling macros --- @@ -105,11 +52,24 @@ addsuffix(join(`$1', `-', `$2'), `$3')') ## --- Autogenerated source files --- -define(`ciphers', `_(des) _(des3) _(blowfish) _(idea) _(rc5)') -define(`cipher_modes', `_(ecb) _(cbc) _(cfb) _(ofb)') - -define(`hashes', `_(md5) _(md4) _(rmd160) _(sha)') -define(`hash_modes', `_(hmac)') +define(`ciphers', `dnl +_(des) _(desx) _(des3) _(mars) dnl +_(idea) _(safer) _(safersk) dnl +_(blowfish) _(twofish) dnl +_(tea) _(xtea) dnl +_(rc2) _(rc5) dnl +_(skipjack) dnl +_(cast128) _(cast256) dnl +_(square) _(rijndael) _(rijndael192) _(rijndael256) dnl +_(serpent) _(noekeon)') +define(`cipher_modes', `_(ecb) _(cbc) _(cfb) _(ofb) _(counter)') + +define(`hashes', `dnl +_(md5) _(md4) _(md2) _(tiger) _(has160) dnl +_(sha) _(sha224) _(sha256) _(sha384) _(sha512) dnl +_(whirlpool) _(whirlpool256) dnl +_(rmd128) _(rmd160) _(rmd256) _(rmd320)') +define(`hash_modes', `_(mgf) _(hmac)') MODES = \ adorn(`$(srcdir)/', join(`ciphers', `-', `cipher_modes'), `.c') \ @@ -117,23 +77,83 @@ MODES = \ adorn(`$(srcdir)/', join(`hashes', `-', `hash_modes'), `.c') \ adorn(`$(srcdir)/', join(`hashes', `-', `hash_modes'), `.h') -$(MODES): $(srcdir)/genmodes +$(MODES): modes-stamp +modes-stamp: genmodes cd $(srcdir); ./genmodes "lit(`ciphers')" "lit(`cipher_modes')" cd $(srcdir); ./genmodes "lit(`hashes')" "lit(`hash_modes')" - -des_sp.h: des-mktab - ./des-mktab >des_sp.h - -ptab.c ptab.h: genprimes - ./genprimes -h ptab.h -c ptab.c -m 256 -t "unsigned char" -i ptab - -archinclude_HEADERS = mptypes.h - -mptypes.h: mptypes - ./mptypes >mptypes.h + echo datestamp >modes-stamp + +define(`gen_tables', `dnl +_(des) _(blowfish) _(twofish) dnl +_(square) _(rijndael) _(whirlpool) dnl +_(safer) _(mars) _(tiger) dnl +_(gfshare) _(gfx-sqr)') + +autoheaders: \ + addsuffix(`gen_tables', `-tab.h') \ + primetab.h wheel.h mptypes.h mplimits.h +define(`emit', ` +_item`'-tab.h: _item`'-mktab$(EXEEXT) + ./_item`'-mktab >_item`'-tab.h.new + mv _item`'-tab.h.new _item`'-tab.h')dnl +gen_tables + +primetab.h: primetab.c +primetab.c: genprimes$(EXEEXT) + ./genprimes -h primetab.h -c primetab.c \ + -s CATACOMB_PRIMETAB_H -n 256 \ + -t "unsigned short" -i primetab + +wheel.h: wheel.c +wheel.c: genwheel$(EXEEXT) + ./genwheel -h wheel.h -c wheel.c \ + -s CATACOMB_WHEEL_H -n 5 \ + -t "unsigned char" -i wheel + +archinclude_HEADERS = mptypes.h mplimits.h +mptypes.h: mptypes$(EXEEXT) + ./mptypes >mptypes.h.new + mv mptypes.h.new mptypes.h + +mplimits.h: genlimits$(EXEEXT) + ./genlimits h >mplimits.h.new + mv mplimits.h.new mplimits.h +mplimits.c: genlimits$(EXEEXT) + ./genlimits c >mplimits.c.new + mv mplimits.c.new mplimits.c + +ectab.c: ectab.in ec-gentab.awk mpdump$(EXEEXT) + $(srcdir)/ec-gentab.awk <$(srcdir)/ectab.in >ectab.c.new + mv ectab.c.new ectab.c + +ptab.c: ptab.in p-gentab.awk mpdump$(EXEEXT) + $(srcdir)/p-gentab.awk <$(srcdir)/ptab.in >ptab.c.new + mv ptab.c.new ptab.c + +bintab.c: bintab.in bin-gentab.awk mpdump$(EXEEXT) + $(srcdir)/bin-gentab.awk <$(srcdir)/bintab.in >bintab.c.new + mv bintab.c.new bintab.c + +gciphertab.c: gengctab + $(srcdir)/gengctab gccipher gcipher >gciphertab.c.new \ + "lit(join(`ciphers', `-', `cipher_modes')) \ + lit(join(`hashes', `-', `_(mgf)')) \ + rc4 seal" + mv gciphertab.c.new gciphertab.c + +gmactab.c: gengctab + $(srcdir)/gengctab gcmac gmac >gmactab.c.new \ + "lit(join(`hashes', `-', `_(hmac)'))" + mv gmactab.c.new gmactab.c + +ghashtab.c: gengctab + $(srcdir)/gengctab gchash ghash >ghashtab.c.new \ + "lit(`hashes') \ + crc32=gcrc32" + mv ghashtab.c.new ghashtab.c BUILT_SOURCES = \ - getdate.c \ + getdate.c modes-stamp gciphertab.c gmactab.c ghashtab.c \ addsuffix(join(`ciphers', `-', `cipher_modes'), `.c') \ addsuffix(join(`ciphers', `-', `cipher_modes'), `.h') \ addsuffix(join(`hashes', `-', `hash_modes'), `.c') \ @@ -143,78 +163,241 @@ BUILT_SOURCES = \ lib_LTLIBRARIES = libcatacomb.la -libcatacomb_la_LDFLAGS = -version-info 0:4:0 +libcatacomb_la_LIBADD = $(CATACOMB_LIBS) +libcatacomb_la_LDFLAGS = -version-info 3:1:1 ## Middle number is the patchlevel. Final number is the minor version. The ## difference between the first and last numbers is major version. -define(`emit', `$1.h ') pkginclude_HEADERS = \ - paranoia.h \ - blkc.h hash.h \ - rc4.h \ - rand.h noise.h \ - key.h \ - mpx.h mpw.h mpscan.h mparena.h mp.h mptext.h mpint.h \ - mpmont.h mpcrt.h \ - ptab.h pgen.h rabin.h \ - dsa.h dh.h \ + arena.h paranoia.h buf.h qdparse.h keysz.h \ + blkc.h hash.h gcipher.h ghash.h gmac.h grand.h ghash-def.h \ + lcrand.h fibrand.h rc4.h seal.h rand.h noise.h fipstest.h maurer.h \ + key.h key-error.h key-data.h passphrase.h pixie.h lmem.h \ + mpx.h bitops.h mpw.h mpscan.h mparena.h mp.h mptext.h mpint.h \ + exp.h mpbarrett.h mpmont.h mpreduce.h mp-exp.h \ + mpcrt.h mprand.h mpmul.h \ + gfx.h gf.h gfreduce.h gfn.h gf-exp.h \ + primetab.h wheel.h pfilt.h rabin.h \ + pgen.h primeiter.h prim.h strongprime.h limlee.h keycheck.h \ + bbs.h rsa.h dh.h dsarand.h dsa.h gdsa.h gkcdsa.h \ + tlsprf.h sslprf.h \ + gfshare.h share.h \ + rho.h \ + field.h field-guts.h field-exp.h \ + ec.h ec-guts.h ec-exp.h ec-test.h ectab.h ec-keys.h ec-raw.h \ + ptab.h bintab.h group.h group-guts.h \ allwithsuffix(`ciphers', `cipher_modes', `.h') \ - allwithsuffix(`hashes', `hash_modes', `.h') + allwithsuffix(`hashes', `hash_modes', `.h') \ + addsuffix(`cipher_modes', `-def.h') \ + addsuffix(`hash_modes', `-def.h') crc32.h + +define(`MP_BASE', + `mpx.c mpx-kmul.c mpx-ksqr.c mpscan.c mparena.c \ + mp-misc.c mp-mem.c mp-const.c mp-arith.c mp-io.c \ + mptext.c mptext-string.c') + +define(`MP_SOURCES', + `qdparse.c \ + mp-test.c mplimits.c \ + mp-sqrt.c mp-gcd.c mp-jacobi.c mp-modsqrt.c mp-exp.c mp-modexp.c \ + mpint.c mptext-file.c mptext-dstr.c \ + mptext-len.c \ + exp.c mpcrt.c mpmul.c mprand.c \ + mpbarrett.c mpbarrett-exp.c mpbarrett-mexp.c mpbarrett-exp.h \ + mpmont.c mpmont-exp.c mpmont-mexp.c mpmont-exp.h \ + mpreduce.c mpreduce-exp.h \ + group-stdops.c group-exp.c group-exp.h g-prime.c g-bin.c \ + group-parse.c \ + group-string.c group-file.c group-dstr.c \ + rho.c buf.c ptab.c bintab.c \ + GF_SOURCES PGEN_SOURCES EC_SOURCES') + +define(`GF_SOURCES', + `gfx.c gfx-kmul.c gfx-sqr.c gf-arith.c gf-exp.c gf-gcd.c \ + gfreduce.c gfreduce-exp.h gfn.c') + +define(`EC_SOURCES', + `field.c field-parse.c field-exp.c \ + f-prime.c f-niceprime.c f-binpoly.c \ + ec.c ec-exp.c ec-prime.c ec-bin.c ec-test.c ec-info.c ectab.c \ + ec-fetch.c ec-raw.c g-ec.c') + +define(`PGEN_SOURCES', + `pfilt.c primeiter.c rabin.c \ + pgen.c pgen-stdev.c pgen-gcd.c pgen-simul.c \ + prim.c strongprime.c limlee.c \ + keycheck.c keycheck-mp.c keycheck-report.c \ + bbs-rand.c bbs-gen.c bbs-jump.c bbs-fetch.c \ + rsa-priv.c rsa-pub.c rsa-gen.c rsa-recover.c rsa-fetch.c \ + oaep.c pkcs1.c pss.c \ + dh-gen.c dh-limlee.c dh-kcdsa.c dh-check.c dh-fetch.c dh-param.c \ + dsarand.c dsa-misc.c dsa-sign.c dsa-verify.c dsa-gen.c dsa-check.c \ + gdsa.c gkcdsa.c \ + key-data.c key-flags.c key-text.c key-binary.c key-pass.c \ + key-pack.c key-misc.c key-file.c key-attr.c key-io.c key-moan.c \ + key-error.c key-fetch.c \ + primetab.c wheel.c share.c') -define(`emit', `$1.c ') libcatacomb_la_SOURCES = \ - des-base.c des-base.h des_sp.h bf_ikey.h daftstory.h \ - rc4.c \ - rand.c noise.c \ - key.c \ - mpx.c mpscan.c mparena.c \ - mp-misc.c mp-mem.c mp-const.c mp-io.c mp-arith.c mp-test.c \ - mp-gcd.c mp-jacobi.c \ - mpint.c \ - mptext.c mptext-file.c mptext-string.c mptext-dstr.c \ - mpmont.c mpmont-mexp.c \ - mpcrt.c \ - ptab.c pgen.c rabin.c \ - dsa-sign.c dsa-verify.c dsa-gen.c \ - dh-prime.c \ + grand.c keysz.c keysz-conv.c \ + lcrand.c fibrand.c rc4.c seal.c rand.c noise.c fipstest.c maurer.c \ + arena.c \ + passphrase.c pixie-common.c lmem.c \ + tlsprf.c sslprf.c \ + gfshare.c \ + MP_BASE MP_SOURCES karatsuba.h \ + gciphertab.c ghashtab.c gmactab.c \ + des-base.c des-base.h \ + desx-tab.h \ + rc2-tab.h \ + skipjack-tab.h \ + cast-s.c cast-sk.c cast-base.h cast-tab.h \ + rijndael-base.c rijndael-base.h \ + md2-tab.h \ + serpent-sbox.h skipjack-tab.h tiger-base.h \ + daftstory.h \ addsuffix(join(`ciphers', `-', `cipher_modes'), `.c') \ addsuffix(join(`hashes', `-', `hash_modes'), `.c') \ - addsuffix(`ciphers', `.c') addsuffix(`hashes', `.c') - -des-base.lo: des_sp.h -mpx.lo: mptypes.h + addsuffix(`ciphers', `.c') addsuffix(`hashes', `.c') crc32.c + +des-base.lo: des-tab.h +blowfish.lo: blowfish-tab.h +twofish.lo: twofish-tab.h +square.lo: square-tab.h +rijndael-base.lo: rijndael-tab.h +whirlpool.lo: whirlpool-tab.h +safer.lo: safer-tab.h +mars.lo: mars-tab.h +tiger.lo: tiger-tab.h +gfshare.lo: gfshare-tab.h +gfx-sqr.lo: gfx-sqr-tab.h ## --- Utility programs --- -bin_PROGRAMS = key -bin_SCRIPTS = catacomb-config -noinst_PROGRAMS = des-mktab genprimes mptypes -LDADD = libcatacomb.la - -key_SOURCES = keyutil.c getdate.y getdate.h - -des_mktab_SOURCES = des-mktab.c -des_mktab_LDADD = +bin_PROGRAMS = \ + dsig key pixie cookie rspit factorial hashsum mkphrase \ + catcrypt catsign +noinst_LIBRARIES = libcatcrypt.a +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = catacomb.pc +noinst_PROGRAMS = \ + genprimes genwheel mptypes genlimits serpent-check bittest mpdump \ + perftest \ + addsuffix(`gen_tables', `-mktab') +LDADD = libcatcrypt.a libcatacomb.la + +define(`LIBCAT_SRC', `cc.h getdate.h dnl + cc-sig.c cc-subcmd.c cc-enc.c cc-kem.c cc-list.c') +libcatcrypt_a_SOURCES = LIBCAT_SRC getdate.y + +patsubst(MP_BASE MP_SOURCES, `\.c\>', `.lo') dsig.o keyutil.o rspit.o \ + patsubst(LIBCAT_SRC, `\.c\>', `.o'): \ + mptypes.h primetab.h wheel.h +patsubst(MP_SOURCES, `\.c\>', `.lo'): mplimits.h + +dsig_SOURCES = dsig.c +cookie_SOURCES = cookie.c +catcrypt_SOURCES = catcrypt.c +catsign_SOURCES = catsign.c +key_SOURCES = keyutil.c +hashsum_SOURCES = hashsum.c +rspit_SOURCES = rspit.c +factorial_SOURCES = factorial.c +perftest_SOURCES = perftest.c +perftest_LDADD = $(CATACOMB_LIBS) $(LDADD) +pixie_SOURCES = pixie.c pixie-common.c lmem.c arena.c passphrase.c +pixie_LDADD = $(PIXIE_LIBS) +pixie_CFLAGS = $(AM_CFLAGS) +mkphrase_SOURCES = mkphrase.c +mkphrase_LDADD = $(CATACOMB_LIBS) $(LDADD) +bittest_SOURCES = bittest.c +bittest_LDADD = + +define(`emit', ` +patsubst(_item, `[^a-zA-Z0-9]', `_')_mktab_SOURCES = _item`'-mktab.c +patsubst(_item, `[^a-zA-Z0-9]', `_')_mktab_LDADD =')dnl +gen_tables + +serpent_check_SOURCES = serpent-check.c +serpent_check_LDADD = genprimes_SOURCES = genprimes.c genprimes_LDADD = +genwheel_SOURCES = genwheel.c +genwheel_LDADD = + mptypes_SOURCES = mptypes.c mptypes_LDADD = +genlimits_SOURCES = genlimits.c MP_BASE mptypes.h +genlimits_LDADD = +genlimits_CFLAGS = $(AM_CFLAGS) + +mpdump_SOURCES = mpdump.c MP_BASE +mpdump_LDADD = +mpdump_CFLAGS = $(AM_CFLAGS) + +## --- Install the pixie setuid-root if we can --- +## +## Bodge around a bug in Automake: it doesn't call `install-exec-hook' from +## `install' if there are subdirectories. + +changequote(<, >) +# install: install-exec-hook +install-exec-hook: + @pixie="$(DESTDIR)$(bindir)/`echo pixie|sed $(transform)`"; \ + if chown root $$pixie && chmod 4755 $$pixie; then \ + echo "chown root $$pixie"; \ + echo "chmod 4755 $$pixie"; \ + else \ + echo "***"; \ + echo "*** You should probably install $$pixie setuid-root."; \ + echo "***"; \ + fi +changequote(`, ') + ## --- Documentation --- -man_MANS = key.1 keyring.5 +man_MANS = \ + key.1 dsig.1 cookie.1 catcrypt.1 catsign.1 hashsum.1 mkphrase.1 \ + keyring.5 pixie.1 + +## --- Prime group keyring --- + +pkgdata_DATA = pgroups.kr + +$(srcdir)/pgroups.kr: ptab.in mkpgroups + cd $(srcdir) && rm -f pgroups.kr && ./mkpgroups $(distdir)/modes-stamp || true + @for i in calc tests; do \ + mkdir $(distdir)/$$i; \ + ln $(srcdir)/$$i/*[!~] $(distdir)/$$i; \ + done || true +# kr=$$HOME/.catacomb/dsig-keyring; \ +# if [ -r $$kr ]; then \ +# cd $(distdir); \ +# ../key -k $$kr extract -f -secret KEYRING; \ +# find . -type f -print0 | ../dsig -k $$kr sign -0 -oMANIFEST; \ +# fi ## --- Testing --- @@ -222,43 +405,88 @@ define(`testprogs', `') define(`CTESTRIG', `define(`testprogs', testprogs \ - $1.t)dnl + $1.t$(EXEEXT))dnl $1.to: $1.c $(COMPILE) -c -DTEST_RIG -DSRCDIR=\"$(srcdir)\" $(srcdir)/$1.c -o $1.to -$1.t: $1.to libcatacomb.la - $(CC) $(LDFLAGS) $1.to .libs/libcatacomb.a $(LIBS) -o $1.t') +$1.t$(EXEEXT): $1.to libcatacomb.la + $(CC) $(CFLAGS) $(LDFLAGS) $1.to .libs/libcatacomb.a $(CATACOMB_LIBS) $(LIBS) -o $1.t$(EXEEXT)') CTESTRIG(rc4) +CTESTRIG(seal) adorn(`nl`'CTESTRIG(', `ciphers', `)') adorn(`nl`'CTESTRIG(', `hashes', `)') adorn(`nl`'CTESTRIG(', join(`ciphers', `-', `cipher_modes'), `)') adorn(`nl`'CTESTRIG(', join(`hashes', `-', `hash_modes'), `)') +CTESTRIG(lcrand) +CTESTRIG(tlsprf) +CTESTRIG(sslprf) CTESTRIG(mpx) -CTESTRIG(mptext) +CTESTRIG(mpx-kmul) +CTESTRIG(mpx-ksqr) CTESTRIG(mp-arith) +CTESTRIG(mp-modsqrt) CTESTRIG(mp-gcd) CTESTRIG(mp-jacobi) +CTESTRIG(mp-sqrt) +CTESTRIG(mp-modexp) +CTESTRIG(mptext) CTESTRIG(mpint) +CTESTRIG(mpbarrett) +CTESTRIG(mpbarrett-exp) +CTESTRIG(mpbarrett-mexp) CTESTRIG(mpmont) +CTESTRIG(mpmont-exp) CTESTRIG(mpmont-mexp) +CTESTRIG(mpreduce) CTESTRIG(mpcrt) +CTESTRIG(mpmul) +CTESTRIG(rsa-test) +CTESTRIG(gfx) +CTESTRIG(gfx-sqr) +CTESTRIG(gfx-kmul) +CTESTRIG(gf-arith) +CTESTRIG(gf-gcd) +CTESTRIG(gfreduce) +CTESTRIG(gfn) +CTESTRIG(ec-prime) +CTESTRIG(ec-bin) +CTESTRIG(ec-test) +CTESTRIG(ec-info) +CTESTRIG(dh-param) +CTESTRIG(group-test) +CTESTRIG(gdsa) +CTESTRIG(gkcdsa) CTESTRIG(pgen) +CTESTRIG(primeiter) CTESTRIG(dsa-gen) CTESTRIG(dsa-sign) CTESTRIG(dsa-verify) +CTESTRIG(bbs-rand) +CTESTRIG(bbs-jump) +CTESTRIG(gfshare) +CTESTRIG(share) +CTESTRIG(rho) -TESTS = testprogs +TESTS = serpent-check bittest testprogs -CLEANFILES = *.t *.to mptypes.h des_sp.h ptab.c ptab.h +CLEANFILES = \ + *.t$(EXEEXT) *.to *.kr.old \ + mptypes.h primetab.c primetab.h wheel.c wheel.h \ + ectab.c ptab.c bintab.c \ + addsuffix(`gen_tables', `-tab.h') ## --- Makefile building (haha!) --- $(srcdir)/Makefile.am: $(srcdir)/Makefile.m4 - m4 $(srcdir)/Makefile.m4 >$(srcdir)/Makefile.am + m4 $(srcdir)/Makefile.m4 >$(srcdir)/Makefile.am.new + mv $(srcdir)/Makefile.am.new $(srcdir)/Makefile.am + +DISTCLEANFILES = libtool MAINTAINERCLEANFILES = \ $(srcdir)/Makefile.am \ $(srcdir)/getdate.c getdate.c \ - $(MODES) + $(srcdir)/pgroups.kr \ + $(MODES) modes-stamp $(srcdir)/modes-stamp ##----- That's all, folks ---------------------------------------------------