aboutsummaryrefslogtreecommitdiffstats
path: root/git/new-c-proj
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2023-11-18 23:23:40 +0100
committerMattias Andrée <maandree@kth.se>2023-11-18 23:23:40 +0100
commit0f1df0db903ba576fd17b08197d3066af7a61e5f (patch)
treea59c04307b1382257afa3c3512ec3abadf7e0e47 /git/new-c-proj
parentUse losetup -d instead of --detach and add clean up (diff)
downloaddotfiles-0f1df0db903ba576fd17b08197d3066af7a61e5f.tar.gz
dotfiles-0f1df0db903ba576fd17b08197d3066af7a61e5f.tar.bz2
dotfiles-0f1df0db903ba576fd17b08197d3066af7a61e5f.tar.xz
A lot of changes
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'git/new-c-proj')
-rwxr-xr-xgit/new-c-proj222
1 files changed, 222 insertions, 0 deletions
diff --git a/git/new-c-proj b/git/new-c-proj
new file mode 100755
index 0000000..ce04f39
--- /dev/null
+++ b/git/new-c-proj
@@ -0,0 +1,222 @@
+#!/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.*
+*.dll
+*.dylib
+*.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_]')"
+ LIBNAME="$(printf '%s\n' "$1" | sed 's/^lib//')"
+
+ printf '%s\n' >> "$1".h \
+ '/* See LICENSE file for copyright and license details. */' \
+ "#ifndef ${UPPERCASE}_H" \
+ "#define ${UPPERCASE}_H" \
+ '' \
+ '#endif'
+
+ mkdir -p -- mk
+
+ cat <<-EOF | sed 's/x\t/\t/g' > Makefile
+ .POSIX:
+
+ CONFIGFILE = config.mk
+ include \$(CONFIGFILE)
+
+ OS = linux
+ # Linux: linux
+ # Mac OS: macos
+ # Windows: windows
+ include mk/\$(OS).mk
+
+
+ LIB_MAJOR = 1
+ LIB_MINOR = 0
+ LIB_VERSION = \$(LIB_MAJOR).\$(LIB_MINOR)
+ LIB_NAME = ${LIBNAME}
+
+
+ OBJ =
+
+ HDR =\\
+ x $1.h
+
+ LOBJ = \$(OBJ:.o=.lo)
+
+
+ all: $1.a $1.\$(LIBEXT)
+ \$(OBJ): \$(HDR)
+ \$(LOBJ): \$(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)
+ x \$(AR) ts \$@ > /dev/null
+
+ $1.\$(LIBEXT): \$(LOBJ)
+ x \$(CC) \$(LIBFLAGS) -o \$@ \$(LOBJ) \$(LDFLAGS)
+
+ install: $1.a $1.\$(LIBEXT)
+ x mkdir -p -- "\$(DESTDIR)\$(PREFIX)/lib"
+ x mkdir -p -- "\$(DESTDIR)\$(PREFIX)/include"
+ x cp -- $1.a "\$(DESTDIR)\$(PREFIX)/lib/"
+ x cp -- $1.\$(LIBEXT) "\$(DESTDIR)\$(PREFIX)/lib/$1.\$(LIBMINOREXT)"
+ x \$(FIX_INSTALL_NAME) "\$(DESTDIR)\$(PREFIX)/lib/$1.\$(LIBMINOREXT)"
+ x ln -sf -- $1.\$(LIBMINOREXT) "\$(DESTDIR)\$(PREFIX)/lib/$1.\$(LIBMAJOREXT)"
+ x ln -sf -- $1.\$(LIBMAJOREXT) "\$(DESTDIR)\$(PREFIX)/lib/$1.\$(LIBEXT)"
+ x cp -- $1.h "\$(DESTDIR)\$(PREFIX)/include/"
+
+ uninstall:
+ x -rm -f -- "\$(DESTDIR)\$(PREFIX)/lib/$1.a"
+ x -rm -f -- "\$(DESTDIR)\$(PREFIX)/lib/$1.\$(LIBMAJOREXT)"
+ x -rm -f -- "\$(DESTDIR)\$(PREFIX)/lib/$1.\$(LIBMINOREXT)"
+ x -rm -f -- "\$(DESTDIR)\$(PREFIX)/lib/$1.\$(LIBEXT)"
+ x -rm -f -- "\$(DESTDIR)\$(PREFIX)/include/$1.h"
+
+ clean:
+ x -rm -f -- *.o *.a *.lo *.su *.so *.so.* *.dll *.dylib
+ x -rm -f -- *.gch *.gcov *.gcno *.gcda *.\$(LIBEXT)
+
+ .SUFFIXES:
+ .SUFFIXES: .lo .o .c
+
+ .PHONY: all install uninstall clean
+ EOF
+
+ cat <<-EOF | sed 's/x\t/\t/g' > mk/linux.mk
+ LIBEXT = so
+ LIBFLAGS = -shared -Wl,-soname,lib\$(LIB_NAME).\$(LIBEXT).\$(LIB_MAJOR)
+ LIBMAJOREXT = \$(LIBEXT).\$(LIB_MAJOR)
+ LIBMINOREXT = \$(LIBEXT).\$(LIB_VERSION)
+
+ FIX_INSTALL_NAME = :
+ EOF
+
+ cat <<-EOF | sed 's/x\t/\t/g' > mk/macos.mk
+ LIBEXT = dylib
+ LIBFLAGS = -dynamiclib -Wl,-compatibility_version,\$(LIB_MAJOR) -Wl,-current_version,\$(LIB_VERSION)
+ LIBMAJOREXT = \$(LIB_MAJOR).\$(LIBEXT)
+ LIBMINOREXT = \$(LIB_VERSION).\$(LIBEXT)
+
+ FIX_INSTALL_NAME = install_name_tool -id "\$(PREFIX)/lib/$1.\$(LIBMAJOREXT)"
+ EOF
+
+ cat <<-EOF | sed 's/x\t/\t/g' > mk/windows.mk
+ LIBEXT = dll
+ LIBFLAGS = -shared
+ LIBMAJOREXT = \$(LIB_MAJOR).\$(LIBEXT)
+ LIBMINOREXT = \$(LIB_VERSION).\$(LIBEXT)
+
+ FIX_INSTALL_NAME = :
+ 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): \$(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/"
+ 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 = c99
+
+ CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -D_GNU_SOURCE
+ CFLAGS =
+ LDFLAGS =
+EOF