#!/bin/sh # kinda brittle, this, but mostly works # just don't use names with whitespaces target='confconf' srcdir='src' sources=`find $srcdir -type f -name '*.c' | sed -e "s/$srcdir\/\(.*\).c/\1.c/"` objdir='build' objects=`find $srcdir -type f -name '*.c' | sed -e "s/$srcdir\/\(.*\).c/\1.o/"` cc='cc' cflags='-Wall -O2' cflagsdebug='-Wall -ggdb3 -O0 -DDEBUG' prefix='/usr/local' rls_objects=`printf %s "$objects" | sed -e "s/^/$objdir\/release\//" | tr '\n' ' '` dbg_objects=`printf %s "$objects" | sed -e "s/^/$objdir\/debug\//" | tr '\n' ' '` dgen='gcc' if [ ! `2>/dev/null which gcc` ]; then if [ ! `2>/dev/null which clang` ]; then echo 'err: could not find a suitable ' \ 'compiler for calculating dependencies' return 1 fi dgen='clang' fi { printf %s\\n '.POSIX:' printf %s\\n '.SUFFIXES:' printf %s\\n '' printf %s\\n "CC = $cc" printf %s\\n "CFLAGS = $cflags" printf %s\\n "CFLAGSDEBUG = $cflagsdebug" printf %s\\n "PREFIX = $prefix" printf %s\\n '' printf %s\\n "all: $target" printf %s\\n '' printf %s\\n "debug: dbg_$target" printf %s\\n '' printf %s\\n "install: all" printf %s\\n ' mkdir -p $(DESTDIR)$(PREFIX)/bin' printf %s\\n ' mkdir -p $(DESTDIR)$(PREFIX)/share/man/man1' printf %s\\n " cp -f $target \$(DESTDIR)\$(PREFIX)/bin" printf %s\\n " gzip < ${target}.1 > \$(DESTDIR)\$(PREFIX)/share/man/man1/${target}.1.gz" printf %s\\n '' printf %s\\n "$target: ${objdir}/release $rls_objects" printf %s\\n " \$(CC) \$(LDFLAGS) -o $target $rls_objects \$(LDLIBS)" printf %s\\n '' printf %s\\n "dbg_$target: ${objdir}/debug $dbg_objects" printf %s\\n " \$(CC) \$(LDFLAGS) -o dbg_$target $dbg_objects \$(LDLIBS)" printf %s\\n '' printf %s\\n "${objdir}/release:" printf %s\\n " mkdir -p ${objdir}/release" printf %s\\n '' printf %s\\n "${objdir}/debug:" printf %s\\n " mkdir -p ${objdir}/debug" printf %s\\n '' printf %s\\n 'src/version.h:' printf %s\\n ' printf "%s\n%s\n\n%s%s%s\n\n%s\n" \' printf %s\\n ' "#ifndef CONFCONF_VERSION_H" \' printf %s\\n ' "#define CONFCONF_VERSION_H" \' printf %s\\n ' "#define VERSION \"confconf " "`git rev-parse --short=8 HEAD`" "\"" \' printf %s\\n ' "#endif" > src/version.h' printf %s\\n '' printf %s\\n "$sources" | (while IFS= read -r s; do $dgen $CFLAGS -MM -MG -MT ${objdir}/release/`printf %s $s | sed -e 's/\.c$/\.o/'` "$srcdir/$s" | sed -e "s/version.h/$srcdir\/version.h/g" printf %s\\n " \$(CC) -c \$(CFLAGS) -o ${objdir}/release/`printf %s $s | sed -e 's/\.c$/\.o/'` ${srcdir}/$s" done ) printf %s\\n '' printf %s\\n "$sources" | (while IFS= read -r s; do $dgen $CFLAGS -MM -MG -MT ${objdir}/debug/`printf %s $s | sed -e 's/\.c$/\.o/'` "$srcdir/$s" | sed -e "s/version.h/$srcdir\/version.h/g" printf %s\\n " \$(CC) -c \$(CFLAGSDEBUG) -o ${objdir}/debug/`printf %s $s | sed -e 's/\.c$/\.o/'` ${srcdir}/$s" done ) printf %s\\n '' printf %s\\n 'clean:' printf %s\\n ' rm -f src/version.h' printf %s\\n " rm -f $target" printf %s\\n " rm -f dbg_$target" printf %s\\n " rm -rf $objdir" } > Makefile