build/libmach: Handle better subdirectories dependencies - scc - simple c99 compiler
 (HTM) git clone git://git.simple-cc.org/scc
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit a32be0f8efe59e3de6413b2bf2dc16c3db4ea2b5
 (DIR) parent 6b7bd71741d013c4b2a0abd66852070b89584fe3
 (HTM) Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
       Date:   Mon, 27 Jan 2025 15:34:17 +0100
       
       build/libmach: Handle better subdirectories dependencies
       
       Using a wildcard is always a bad idea, and as we already have the list of
       objects in the local Makefiles is better to just use them to genarate the
       list of objects for every directory.
       
       Diffstat:
         M .gitignore                          |       3 ++-
         M scripts/mkdep                       |       2 +-
         M src/libmach/Makefile                |      31 +++++++++++++++++++++++++------
         M src/libmach/coff32/Makefile         |       9 +++++++++
         M src/libmach/elf64/Makefile          |       9 +++++++++
         A src/libmach/mkdep                   |      19 +++++++++++++++++++
       
       6 files changed, 65 insertions(+), 8 deletions(-)
       ---
 (DIR) diff --git a/.gitignore b/.gitignore
       @@ -3,7 +3,8 @@
        bin/
        lib/
        libexec/
       -dirs
       +/dirs
       +deps.mk
        *.gcno
        *.gcda
        /deps
 (DIR) diff --git a/scripts/mkdep b/scripts/mkdep
       @@ -7,7 +7,7 @@ trap "rm -f $tmp" EXIT INT TERM HUP
        
        (cat Makefile
        printf "\n#deps\n"
       -for i in `find . -name '*.c'`
       +for i in *.c
        do
                file=`basename $i | sed 's/\.c$/.o/'`
                dir=`dirname $i`
 (DIR) diff --git a/src/libmach/Makefile b/src/libmach/Makefile
       @@ -10,6 +10,30 @@ include $(PROJECTDIR)/scripts/rules.mk
        TARGET = libmach.a
        
        OBJS =\
       +        archive.o\
       +        armember.o\
       +        delobj.o\
       +        findsec.o\
       +        getindex.o\
       +        getsec.o\
       +        getsym.o\
       +        loadmap.o\
       +        newmap.o\
       +        newobj.o\
       +        objpos.o\
       +        objprobe.o\
       +        objtype.o\
       +        pack.o\
       +        pc2line.o\
       +        readobj.o\
       +        rebase.o\
       +        setindex.o\
       +        setmap.o\
       +        setsec.o\
       +        setsym.o\
       +        strip.o\
       +        unpack.o\
       +        writeobj.o\
        
        all:
                +@$(MAKE) $(DIRS)
       @@ -21,9 +45,4 @@ $(TARGET): $(OBJS)
                cp $@ $(LIBDIR)/scc
        
        dep:
       -        (echo H;\
       -         echo /OBJS/a;\
       -         ls *.c */*.c | sed -E 's/(.*)\.c$$/        \1.o\\/';\
       -         echo .; \
       -         echo w) |\
       -        ed -s makefile
       +        ./mkdep elf64 coff32
 (DIR) diff --git a/src/libmach/coff32/Makefile b/src/libmach/coff32/Makefile
       @@ -36,3 +36,12 @@ COFFHDRS =\
        all: $(OBJS)
        
        $(OBJS): $(COFFHDRS)
       +
       +dep:
       +        @(printf 'COFF32OBJS=\\';\
       +        echo;\
       +        echo $(OBJS) |\
       +        sed -E 's@ *([^ ]*)@\tcoff32/\1\\\n@g') > deps.mk
       +
       +distclean:
       +        rm -f deps.mk
 (DIR) diff --git a/src/libmach/elf64/Makefile b/src/libmach/elf64/Makefile
       @@ -24,3 +24,12 @@ ELFHDRS =\
        all: $(OBJS)
        
        $(OBJS): $(ELFHDRS)
       +
       +dep:
       +        @(printf 'ELF64OBJS=\\';\
       +        echo;\
       +        echo $(OBJS) |\
       +        sed -E 's@ *([^ ]*)@\telf64/\1\\\n@g') > deps.mk
       +
       +distclean:
       +        rm -f deps.mk
 (DIR) diff --git a/src/libmach/mkdep b/src/libmach/mkdep
       @@ -0,0 +1,19 @@
       +#!/bin/sh
       +
       +ed -s makefile <<EOF
       +H
       +/include/a
       +`for i
       + do
       +        echo include $i/deps.mk
       +done`
       +.
       +/OBJS/a
       +`for i
       + do
       +        printf '\t$('$(echo $i | tr a-z A-Z)'OBJS)\\'
       +        echo
       +done`
       +.
       +w
       +EOF