From 0f1df0db903ba576fd17b08197d3066af7a61e5f Mon Sep 17 00:00:00 2001
From: Mattias Andrée <maandree@kth.se>
Date: Sat, 18 Nov 2023 23:23:40 +0100
Subject: A lot of changes
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Mattias Andrée <maandree@kth.se>
---
 git/new-c-proj | 222 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 222 insertions(+)
 create mode 100755 git/new-c-proj

(limited to 'git/new-c-proj')

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
-- 
cgit v1.2.3-70-g09d2