aboutsummaryrefslogtreecommitdiffstats
path: root/base/new-c-proj
diff options
context:
space:
mode:
Diffstat (limited to 'base/new-c-proj')
-rwxr-xr-xbase/new-c-proj161
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