diff options
Diffstat (limited to 'base/new-c-proj')
-rwxr-xr-x | base/new-c-proj | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/base/new-c-proj b/base/new-c-proj new file mode 100755 index 0000000..f10a26f --- /dev/null +++ b/base/new-c-proj @@ -0,0 +1,161 @@ +#!/bin/sh + +set -e + +if ! test $# = 1; then + printf 'usage %s: proj-name\n' "$0" >&2 + exit 1 +fi + +if printf '%s\n' "$1" | grep / >/dev/null 2>/dev/null; then + printf 'project name cannot contain a slash\n' "$0" >&2 + exit 1 +fi + +mkdir -- "$1" +cd -- "$1" +git init . + +cat > LICENSE <<EOF +ISC License + +© $(date +%Y) Mattias Andrée <maandree@kth.se> + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +EOF + +cat > .gitignore <<EOF +*\#* +*~ +*.o +*.a +*.lo +*.su +*.so +*.so.* +*.gch +*.gcov +*.gcno +*.gcda +EOF + +printf '_*\n' >> .git/info/exclude + +if printf '%s\n' "$1" | grep '^lib' >/dev/null 2>/dev/null; then + UPPERCASE="$(printf '%s\n' "$1" | tr '[a-z-]' '[A-Z_]')" + + printf '%s\n' >> "$1".h \ + '/* See LICENSE file for copyright and license details. */' \ + "#ifndef ${UPPERCASE}_H" \ + "#define ${UPPERCASE}_H" \ + '' \ + '#endif' + + cat <<-EOF | sed 's/x\t/\t/g' > Makefile + .POSIX: + + CONFIGFILE = config.mk + include \$(CONFIGFILE) + + OBJ = + + HDR =\\ + x $1.h + + all: $1.a + \$(OBJ): \$(@:.o=.c) \$(HDR) + + .c.o: + x \$(CC) -c -o \$@ \$< \$(CFLAGS) \$(CPPFLAGS) + + .c.lo: + x \$(CC) -fPIC -c -o \$@ \$< \$(CFLAGS) \$(CPPFLAGS) + + $1.a: \$(OBJ) + x @rm -f -- \$@ + x \$(AR) rc \$@ \$(OBJ) + + install: $1.a + x mkdir -p -- "\$(DESTDIR)\$(PREFIX)/lib" + x mkdir -p -- "\$(DESTDIR)\$(PREFIX)/include" + x cp -- $1.a "\$(DESTDIR)\$(PREFIX)/lib/" + x cp -- $1.h "\$(DESTDIR)\$(PREFIX)/include/" + + uninstall: + x -rm -f -- "\$(DESTDIR)\$(PREFIX)/lib/$1.a" + x -rm -f -- "\$(DESTDIR)\$(PREFIX)/include/$1.h" + + clean: + x -rm -f -- *.o *.a *.lo *.su *.so *.so.* *.gch *.gcov *.gcno *.gcda + + .SUFFIXES: + .SUFFIXES: .lo .o .c + + .PHONY: all install uninstall clean + EOF +else + printf '%s\n' "/$1" >> .gitignore + + printf '%s\n' '/* See LICENSE file for copyright and license details. */' >> "$1".c + + cat <<-EOF | sed 's/x\t/\t/g' > Makefile + .POSIX: + + CONFIGFILE = config.mk + include \$(CONFIGFILE) + + OBJ =\\ + x $1.o + + HDR = + + all: $1 + \$(OBJ): \$(@:.o=.c) \$(HDR) + + .c.o: + x \$(CC) -c -o \$@ \$< \$(CFLAGS) \$(CPPFLAGS) + + $1: \$(OBJ) + x \$(CC) -o \$@ \$(OBJ) \$(LDFLAGS) + + install: $1 + x mkdir -p -- "\$(DESTDIR)\$(PREFIX)/bin" + x mkdir -p -- "\$(DESTDIR)\$(MANPREFIX)/man1/$1.1" + x cp -- $1 "\$(DESTDIR)\$(PREFIX)/bin/" + x cp -- $1.1 "\$(DESTDIR)\$(MANPREFIX)/man1/" + + uninstall: + x -rm -f -- "\$(DESTDIR)\$(PREFIX)/bin/$1" + x -rm -f -- "\$(DESTDIR)\$(MANPREFIX)/man1/$1.1" + + clean: + x -rm -f -- *.o *.a *.lo *.su *.so *.so.* *.gch *.gcov *.gcno *.gcda + x -rm -f -- $1 + + .SUFFIXES: + .SUFFIXES: .o .c + + .PHONY: all install uninstall clean + EOF +fi + +cat > config.mk <<-EOF + PREFIX = /usr + MANPREFIX = \$(PREFIX)/share/man + + CC = cc + + CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -D_GNU_SOURCE + CFLAGS = -std=c99 -Wall -g + LDFLAGS = +EOF |