-### -*-Makefile-*-
+### -*-makefile-*-
###
-### Building the distribution
+### Top-level build for mLib
###
-### (c) 1998 Straylight/Edgeware
+### (c) 2009 Straylight/Edgeware
###
###----- Licensing notice ---------------------------------------------------
### Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
### MA 02111-1307, USA.
-pkglibexecdir = $(libexecdir)/$(PACKAGE)
+include $(top_srcdir)/vars.am
SUBDIRS =
-BUILT_SOURCES =
-bin_PROGRAMS =
-check_PROGRAMS =
-lib_LTLIBRARIES =
-noinst_LTLIBRARIES =
-pkglibexec_PROGRAMS =
-pkginclude_HEADERS =
-EXTRA_DIST =
-CLEANFILES =
-DISTCLEANFILES =
-PROGMANS =
-LIBMANS =
-
-confsubst = $(top_srcdir)/config/confsubst
-
-SUBSTITUTIONS = \
- prefix=$(prefix) exec_prefix=$(exec_prefix) \
- libdir=$(libdir) includedir=$(includedir) \
- bindir=$(bindir) sbindir=$(sbindir) \
- PACKAGE=$(PACKAGE) VERSION=$(VERSION)
###--------------------------------------------------------------------------
-### Library.
+### Top-level library.
-lib_LTLIBRARIES += libmLib.la
-libmLib_la_LDFLAGS = -version-info $(LIBTOOL_VERSION_INFO)
+lib_LTLIBRARIES = libmLib.la
+libmLib_la_LDFLAGS = -version-info $(LIBTOOL_VERSION_INFO) \
+ -no-undefined
libmLib_la_SOURCES =
libmLib_la_LIBADD =
+###--------------------------------------------------------------------------
+### Package-configuration file.
+
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = mLib.pc
EXTRA_DIST += mLib.pc.in
CLEANFILES += mLib.pc
mLib.pc: mLib.pc.in Makefile
- $(confsubst) $(srcdir)/mLib.pc.in >$@.new $(SUBSTITUTIONS) && \
+ $(SUBST) $(srcdir)/mLib.pc.in >$@.new \
+ $(SUBSTITUTIONS) && \
mv $@.new $@
###--------------------------------------------------------------------------
-### Testing.
-
-check: tests
-.PHONY: check tests
-
-TEST_CPPFLAGS = -DTEST_RIG -DSRCDIR="\"(srcdir)\"" $(AM_CPPFLAGS)
-
-LDADD = libmLib.la
-
-###--------------------------------------------------------------------------
-### Utilities.
-
-noinst_LTLIBRARIES += libutils.la
-libutils_la_SOURCES =
-libutils_la_LIBADD =
-libmLib_la_LIBADD += libutils.la
-
-## Utility macros.
-pkginclude_HEADERS += macros.h
-LIBMANS += macros.3
-
-## Alignment.
-pkginclude_HEADERS += align.h
-LIBMANS += align.3
-
-## Bit manipulation.
-pkginclude_HEADERS += bits.h
-LIBMANS += bits.3
-
-EXTRA_DIST += bits.in bits-testgen.c
-tests:: bits.t bits.in
- ./bits.t -f $(srcdir)/bits.in
-
-check_PROGRAMS += bits.t
-bits_t_SOURCES = bits.c
-bits_t_CPPFLAGS = $(TEST_CPPFLAGS)
-bits_t_LDFLAGS = -static
-
-## Exceptions.
-pkginclude_HEADERS += exc.h
-libmLib_la_SOURCES += exc.c
-LIBMANS += exc.3
-
-## String handling.
-pkginclude_HEADERS += str.h
-libutils_la_SOURCES += str.c
-LIBMANS += str.3
-
-## Version comparison.
-pkginclude_HEADERS += versioncmp.h
-libmLib_la_SOURCES += versioncmp.c
-LIBMANS += versioncmp.3
-
-EXTRA_DIST += versioncmp.in
-tests:: versioncmp.t versioncmp.in
- ./versioncmp.t -f $(srcdir)/versioncmp.in
-
-check_PROGRAMS += versioncmp.t
-versioncmp_t_SOURCES = versioncmp-test.c
-versioncmp_t_CPPFLAGS = $(TEST_CPPFLAGS)
-versioncmp_t_LDFLAGS = -static
+### Subdirectories.
+###
+### Note: There are implicit dependencies between the subdirectories. Be
+### careful about reordering them.
-###--------------------------------------------------------------------------
-### Memory allocation.
+## Utilities.
+SUBDIRS += utils
+libmLib_la_LIBADD += utils/libutils.la
## Memory allocation.
-pkginclude_HEADERS += alloc.h arena.h sub.h
-libmLib_la_SOURCES += alloc.c arena.c sub.c
-LIBMANS += alloc.3 arena.3 sub.3
-
-## Pool allocator.
-pkginclude_HEADERS += pool.h
-libmLib_la_SOURCES += pool.c pool-file.c pool-sub.c
-LIBMANS += pool.3
-
-###--------------------------------------------------------------------------
-### Hashing.
-
-## CRC32.
-pkginclude_HEADERS += crc32.h
-libmLib_la_SOURCES += crc32.c crc32-tab.c
-LIBMANS += crc32.3
-
-bin_PROGRAMS += crc-mktab
-crc_mktab_SOURCES = crc-mktab.c $(UTIL_SOURCES)
-crc_mktab_LDADD = libutils.la
-PROGMANS += crc-mktab.1
-
-BUILT_SOURCES += crc32-tab.c
-CLEANFILES += crc32-tab.c
-crc32-tab.c: crc-mktab$(EXEEXT)
- ./crc-mktab -o $@.new \
- -p0x04c11db7 -b32 -B8 -r -c \
- -scrc32_table -icrc32.h -tuint32 && \
- mv $@.new $@
-
-## Universal hashing.
-pkginclude_HEADERS += unihash.h
-libutils_la_SOURCES += unihash.c
-libmLib_la_SOURCES += unihash-global.c
-BUILT_SOURCES += unihash-global.c
-LIBMANS += unihash.3
-
-bin_PROGRAMS += unihash-mkstatic
-unihash_mkstatic_SOURCES = unihash-mkstatic.c
-unihash_mkstatic_LDADD = libutils.la
-PROGMANS += unihash-mkstatic.1
-
-BUILT_SOURCES += unihash-global.c
-CLEANFILES += unihash-global.c
-unihash-global.c: unihash-mkstatic$(EXEEXT)
- ./unihash-mkstatic -c -sunihash_global -iunihash.h -o$@.new && \
- mv $@.new $@
-
-check_PROGRAMS += unihash.t
-unihash_t_SOURCES = unihash.c
-unihash_t_CPPFLAGS = $(TEST_CPPFLAGS)
-unihash_t_LDFLAGS = -static
-
-tests:: unihash.t unihash.in
- ./unihash.t -f unihash.in
-
-EXTRA_DIST += unihash-check.pl
-CLEANFILES += unihash.in
-unihash.in: unihash-check.pl
- perl $(srcdir)/unihash-check.pl >$@.new && mv $@.new $@
-
-###--------------------------------------------------------------------------
-### Data structures.
-
-## Dynamic strings.
-pkginclude_HEADERS += dstr.h dspool.h
-libmLib_la_SOURCES += dstr.c dputf.c dspool.c
-LIBMANS += dstr.3 dspool.3
-
-## Buffers.
-pkginclude_HEADERS += buf.h
-libmLib_la_SOURCES += buf.c buf-dstr.c
-LIBMANS += buf.3
-
-## Dynamic arrays.
-pkginclude_HEADERS += darray.h
-libmLib_la_SOURCES += darray.c
-LIBMANS += darray.3
-
-CLEANFILES += da.out
-tests:: darray.t da.in da.ref
- ./darray.t <da.in >da.out
- cmp da.out da.ref
- @echo "darray OK"
-
-check_PROGRAMS += darray.t
-darray_t_SOURCES = da-test.c
-darray_t_CPPFLAGS = $(TEST_CPPFLAGS)
-darray_t_LDFLAGS = -static
-
-EXTRA_DIST += da-gtest
-CLEANFILES += da.in
-da.in: da-gtest
- perl $(srcdir)/da-gtest 10000 >$@.new && mv $@.new $@
-
-EXTRA_DIST += da-ref
-CLEANFILES += da.ref
-da.ref: da-ref da.in
- perl $(srcdir)/da-ref <da.in >$@.new && mv $@.new $@
-
-## Hash tables.
-pkginclude_HEADERS += hash.h
-libmLib_la_SOURCES += hash.c
-LIBMANS += hash.3
-
-## Symbol tables.
-pkginclude_HEADERS += sym.h
-libmLib_la_SOURCES += sym.c
-LIBMANS += sym.3
-
-CLEANFILES += sym.out
-tests:: sym.t sym.in sym.ref
- ./sym.t <sym.in >sym.out
- cmp sym.out sym.ref
- @echo "sym OK"
-
-check_PROGRAMS += sym.t
-sym_t_SOURCES = sym-test.c
-sym_t_CPPFLAGS = $(TEST_CPPFLAGS)
-sym_t_LDFLAGS = -static
-
-EXTRA_DIST += sym-gtest
-CLEANFILES += sym.in
-sym.in: sym-gtest
- perl $(srcdir)/sym-gtest 10000 >$@.new && mv $@.new $@
-
-EXTRA_DIST += sym-ref
-CLEANFILES += sym.ref
-sym.ref: sym-ref sym.in
- perl $(srcdir)/sym-ref <sym.in >$@.new && mv $@.new $@
-
-## Atoms.
-pkginclude_HEADERS += atom.h
-libmLib_la_SOURCES += atom.c
-LIBMANS += atom.3
-
-## Association tables.
-pkginclude_HEADERS += assoc.h
-libmLib_la_SOURCES += assoc.c
-LIBMANS += assoc.3
-
-CLEANFILES += assoc.out
-tests:: assoc.t sym.in sym.ref
- ./assoc.t <sym.in >assoc.out
- cmp assoc.out sym.ref
- @echo "sym OK"
-
-check_PROGRAMS += assoc.t
-assoc_t_SOURCES = assoc-test.c
-assoc_t_CPPFLAGS = $(TEST_CPPFLAGS)
-assoc_t_LDFLAGS = -static
+SUBDIRS += mem
+libmLib_la_LIBADD += mem/libmem.la
-###--------------------------------------------------------------------------
-### User interface.
-
-## Option parsing.
-noinst_LTLIBRARIES += libmdwopt.la
-pkginclude_HEADERS += mdwopt.h
-libmdwopt_la_SOURCES = mdwopt.c
-libmdwopt_la_CPPFLAGS = $(AM_CPPFLAGS) -DBUILDING_MLIB
-libutils_la_LIBADD += libmdwopt.la
-LIBMANS += mdwopt.3
-
-## Program naming.
-pkginclude_HEADERS += quis.h
-libutils_la_SOURCES += quis.c pquis.c
-LIBMANS += quis.3
-
-## Error reporting.
-pkginclude_HEADERS += report.h
-libutils_la_SOURCES += report.c
-LIBMANS += report.3
+## User interface.
+SUBDIRS += ui
+libmLib_la_LIBADD += ui/libui.la
-###--------------------------------------------------------------------------
-### Encoding and decoding.
-
-## form-urlencoded
-pkginclude_HEADERS += url.h
-libmLib_la_SOURCES += url.c
-LIBMANS += url.3
-
-## base64
-pkginclude_HEADERS += base64.h
-libmLib_la_SOURCES += base64.c
-LIBMANS += base64.3
-
-EXTRA_DIST += base64.in base64.ref
-CLEANFILES += base64.out
-tests:: base64.t base64.in base64.ref
- ./base64.t <$(srcdir)/base64.in >base64.out
- cmp base64.out $(srcdir)/base64.ref
- ./base64.t -d <$(srcdir)/base64.ref >base64.out
- cmp base64.out $(srcdir)/base64.in
- @echo "base64 OK"
-
-check_PROGRAMS += base64.t
-base64_t_SOURCES = base64.c
-base64_t_CPPFLAGS = $(TEST_CPPFLAGS)
-base64_t_LDFLAGS = -static
-
-## base32
-pkginclude_HEADERS += base32.h
-libmLib_la_SOURCES += base32.c
-LIBMANS += base32.3
-
-EXTRA_DIST += base32.in base32.ref
-CLEANFILES += base32.out
-tests:: base32.t base32.in base32.ref
- ./base32.t <$(srcdir)/base32.in >base32.out
- cmp base32.out $(srcdir)/base32.ref
- ./base32.t -d <$(srcdir)/base32.ref >base32.out
- cmp base32.out $(srcdir)/base32.in
- @echo "base32 OK"
-
-check_PROGRAMS += base32.t
-base32_t_SOURCES = base32.c
-base32_t_CPPFLAGS = $(TEST_CPPFLAGS)
-base32_t_LDFLAGS = -static
-
-## hex
-pkginclude_HEADERS += hex.h
-libmLib_la_SOURCES += hex.c
-LIBMANS += hex.3
-
-EXTRA_DIST += hex.in hex.ref
-CLEANFILES += hex.out
-tests:: hex.t hex.in hex.ref
- ./hex.t <$(srcdir)/hex.in >hex.out
- cmp hex.out $(srcdir)/hex.ref
- ./hex.t -d <$(srcdir)/hex.ref >hex.out
- cmp hex.out $(srcdir)/hex.in
- @echo "hex OK"
-
-check_PROGRAMS += hex.t
-hex_t_SOURCES = hex.c
-hex_t_CPPFLAGS = $(TEST_CPPFLAGS)
-hex_t_LDFLAGS = -static
+## Hashing.
+SUBDIRS += hash
+libmLib_la_LIBADD += hash/libhash.la
-###--------------------------------------------------------------------------
-### System utilities.
-
-## Daemons.
-pkginclude_HEADERS += daemonize.h
-libmLib_la_SOURCES += daemonize.c
-LIBMANS += daemonize.3
-
-## Environment variables.
-pkginclude_HEADERS += env.h
-libmLib_la_SOURCES += env.c
-LIBMANS += env.3
-
-## File and descriptor flags.
-pkginclude_HEADERS += fdflags.h
-libmLib_la_SOURCES += fdflags.c
-LIBMANS += fdflags.3
-
-## File descriptor passing.
-pkginclude_HEADERS += fdpass.h
-libmLib_la_SOURCES += fdpass.c
-LIBMANS += fdpass.3
-
-## Watching files for modification.
-pkginclude_HEADERS += fwatch.h
-libmLib_la_SOURCES += fwatch.c
-LIBMANS += fwatch.3
-
-## File locking.
-pkginclude_HEADERS += lock.h
-libmLib_la_SOURCES += lock.c
-LIBMANS += lock.3
-
-## Time arithmetic.
-pkginclude_HEADERS += tv.h
-libmLib_la_SOURCES += tv.c
-LIBMANS += tv.3
+## Data structures.
+SUBDIRS += struct
+libmLib_la_LIBADD += struct/libstruct.la
-###--------------------------------------------------------------------------
-### Buffering.
+## Encoding and decoding.
+SUBDIRS += codec
+libmLib_la_LIBADD += codec/libcodec.la
-## Line buffering.
-pkginclude_HEADERS += lbuf.h
-libmLib_la_SOURCES += lbuf.c
-LIBMANS += lbuf.3
+## System utilities.
+SUBDIRS += sys
+libmLib_la_LIBADD += sys/libsys.la
-## Packet buffering.
-pkginclude_HEADERS += pkbuf.h
-libmLib_la_SOURCES += pkbuf.c
-LIBMANS += pkbuf.3
+## Buffering.
+SUBDIRS += buf
+libmLib_la_LIBADD += buf/libbuf.la
-###--------------------------------------------------------------------------
-### Network utilities.
-
-## Core event selection.
-pkginclude_HEADERS += sel.h
-libmLib_la_SOURCES += sel.c
-LIBMANS += sel.3
-
-## Waiting for buffers to fill.
-pkginclude_HEADERS += selbuf.h selpk.h
-libmLib_la_SOURCES += selbuf.c selpk.c
-LIBMANS += selbuf.3 selpk.3
-
-## RFC931 identification.
-pkginclude_HEADERS += ident.h
-libmLib_la_SOURCES += ident.c
-LIBMANS += ident.3
-
-## Nonblocking connections.
-pkginclude_HEADERS += conn.h
-libmLib_la_SOURCES += conn.c
-LIBMANS += conn.3
-
-## Signal handling
-pkginclude_HEADERS += sig.h
-libmLib_la_SOURCES += sig.c
-LIBMANS += sig.3
-
-## Name resolution.
-pkginclude_HEADERS += bres.h
-LIBMANS += bres.3
-
-if WITH_ADNS
-libmLib_la_SOURCES += bres-adns.c
-else
-libmLib_la_SOURCES += bres.c
-pkglibexec_PROGRAMS += bres
-bres_SOURCES = bres.c
-bres_CPPFLAGS = -DBRES_STANDALONE $(AM_CPPFLAGS)
-bres_LDADD =
-endif
+## Event-driven networking.
+SUBDIRS += sel
+libmLib_la_LIBADD += sel/libsel.la
-###--------------------------------------------------------------------------
-### Testing and debugging.
+## Testing.
+SUBDIRS += test
+libmLib_la_LIBADD += test/libtest.la
## Tracing.
-pkginclude_HEADERS += trace.h
-libmLib_la_SOURCES += trace.c traceopt.c
-LIBMANS += trace.3
-
-## Memory tracking.
-pkginclude_HEADERS += track.h
-libmLib_la_SOURCES += track.c
-
-## Testing.
-pkginclude_HEADERS += testrig.h
-libmLib_la_SOURCES += testrig.c
-LIBMANS += testrig.3
+SUBDIRS += trace
+libmLib_la_LIBADD += trace/libtrace.la
###--------------------------------------------------------------------------
-### Manual.
-
-EXTRA_DIST += $(LIBMANS) $(PROGMANS)
-
-install-data-local: install-man
-install-man: $(LIBMANS) $(PROGMANS)
- @$(NORMAL_INSTALL)
- $(mkinstalldirs) $(DESTDIR)$(mandir)
- $(top_srcdir)/config/maninst \
- -d $(DESTDIR)$(mandir) -s $(srcdir) \
- -i "$(INSTALL)" \
- install $(PROGMANS)
- $(top_srcdir)/config/maninst \
- -d $(DESTDIR)$(mandir) -s $(srcdir) \
- -i "$(INSTALL)" -e $(manext) \
- install $(LIBMANS)
-.PHONY: install-man
-
-uninstall-local: uninstall-man
-uninstall-man:
- @$(NORMAL_UNINSTALL)
- $(top_srcdir)/config/maninst \
- -d $(DESTDIR)$(mandir) -s $(srcdir) \
- uninstall $(PROGMANS)
- $(top_srcdir)/config/maninst \
- -d $(DESTDIR)$(mandir) -s $(srcdir) -e $(manext) \
- uninstall $(LIBMANS)
-.PHONY: uninstall-man
+### Testing.
+
+SUBDIRS += t
###--------------------------------------------------------------------------
### Distribution.
+## Make sure the precomputed tables are available. Hang this off of any
+## distributed file.
+mLib.pc.in: ensure-precomp-libs
+ensure-precomp-libs:
+ for d in ui utils; do (cd $$d && $(MAKE) all) || exit 1; done
+
## Release number.
dist-hook::
echo $(VERSION) >$(distdir)/RELEASE
## General stuff.
EXTRA_DIST += debian/rules debian/copyright
EXTRA_DIST += debian/control debian/changelog
+EXTRA_DIST += debian/compat debian/source/format
+
+## mlib2
EXTRA_DIST += debian/mlib2.install
-EXTRA_DIST += debian/mlib2-adns.install
-EXTRA_DIST += debian/mlib-dev.install
+
+## mlib2-adns
+EXTRA_DIST += debian/mlib2-adns.install.in
+
+## mlib-bin
EXTRA_DIST += debian/mlib-bin.install
-##----- That's all, folks ---------------------------------------------------
+## mlib-dev
+EXTRA_DIST += debian/mlib-dev.install
+
+###----- That's all, folks --------------------------------------------------