Automatically determine which modules have source
authorDavid Gibson <david@gibson.dropbear.id.au>
Thu, 5 May 2016 15:40:48 +0000 (16:40 +0100)
committerDavid Gibson <david@gibson.dropbear.id.au>
Mon, 9 May 2016 19:34:33 +0000 (20:34 +0100)
Currently, build of ccan is controlled by two Make variables: MODS_WITH_SRC
and MODS_NO_SRC which list modules containing .c files, and modules with
only .h files respectively.

When adding new modules this is fiddly to get right, and there are a number
of modules already listed in the wrong variable.  There's also some
redundant logic in the DIRS variable to again filter out modules without
source.

This simplifies things by having a single manually updated MODS variable
listing every module, and determining MODS_WITH_SOURCE programmatically.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Makefile-ccan

index 31ad2e425237b405678127b9ff09a27cb7f530f1..e71f3a178fa78af8dcb2c34c971c4a0214a84fa6 100644 (file)
@@ -6,62 +6,49 @@
 CCAN_CFLAGS=-g3 -ggdb -Wall -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wwrite-strings -Wundef -DCCAN_STR_DEBUG=1
 CFLAGS = $(CCAN_CFLAGS) -I. $(DEPGEN)
 
-# Modules which are just a header:
-MODS_NO_SRC := alignof \
-       argcheck \
-       array_size \
-       asearch \
-       bitmap \
-       build_assert \
-       cast \
-       check_type \
-       compiler \
-       container_of \
-       cppmagic \
-       darray \
-       endian \
-       lqueue \
-       lstack \
-       minmax \
-       objset \
-       short_types \
-       structeq \
-       tcon \
-       tlist \
-       typesafe_cb \
-       version
-
-# No external dependencies, with C code:
-MODS_WITH_SRC := a_star \
+MODS := a_star \
        aga \
        agar \
+       alignof \
        altstack \
        antithread \
        antithread/alloc \
+       argcheck \
+       array_size \
+       asearch \
        asort \
        asprintf \
        autodata \
        avl \
        base64 \
        bdelta \
+       bitmap \
        block_pool \
        breakpoint \
        btree \
+       build_assert \
        bytestring \
+       cast \
        ccan_tokenizer \
        cdump \
        charset \
+       check_type \
        ciniparser \
+       compiler \
+       container_of \
+       cppmagic \
+       cpuid \
        crc \
        crcsync \
-       cpuid \
        crypto/ripemd160 \
        crypto/sha256 \
        crypto/shachain \
        daemonize \
        daemon_with_notify \
+       darray \
        deque \
        dgraph \
+       endian \
        eratosthenes \
        err \
        failtest \
@@ -79,18 +66,22 @@ MODS_WITH_SRC := a_star \
        iscsi \
        jacobson_karels \
        jmap \
-       json \
        jset \
+       json \
        lbalance \
        likely \
        list \
        lpq \
+       lqueue \
+       lstack \
        md4 \
        mem \
+       minmax \
        net \
        nfs \
        noerr \
        ntdb \
+       objset \
        ogg_to_pcm \
        opt \
        order \
@@ -105,15 +96,17 @@ MODS_WITH_SRC := a_star \
        read_write_all \
        rfc822 \
        rszshm \
+       short_types \
        siphash \
        sparse_bsearch \
        str \
        str/hex \
+       strgrp \
        stringbuilder \
        stringmap \
-       strgrp \
        strmap \
        strset \
+       structeq \
        take \
        tal \
        tal/grab_file \
@@ -125,13 +118,18 @@ MODS_WITH_SRC := a_star \
        talloc \
        tally \
        tap \
+       tcon \
        time \
        timer \
+       tlist \
        ttxml \
+       typesafe_cb \
+       version \
        wwviaudio \
        xstring
 
-MODS:=$(MODS_WITH_SRC) $(MODS_NO_SRC)
+# Anything with C files needs building; dir leaves / on, sort uniquifies
+MODS_WITH_SRC = $(patsubst ccan/%/, %, $(sort $(foreach m, $(MODS), $(dir $(wildcard ccan/$m/*.c)))))
 
 default: libccan.a
 
@@ -139,8 +137,7 @@ default: libccan.a
 DEPGEN=-MMD
 -include $(foreach m, $(MODS), ccan/$(m)/*.d)
 
-# Anything with C files needs building; dir leaves / on, sort uniquifies
-DIRS=$(patsubst %/, %, $(sort $(foreach m, $(filter-out $(MODS_EXCLUDE), $(MODS_WITH_SRC)), $(dir $(wildcard ccan/$m/*.c)))))
+DIRS=$(patsubst %, ccan/%, $(filter-out $(MODS_EXCLUDE), $(MODS_WITH_SRC)))
 
 # Generate everyone's separate Makefiles.
 -include $(foreach dir, $(DIRS), $(dir)-Makefile)