aboutsummaryrefslogtreecommitdiffstats
path: root/base/new-c-proj
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xbase/new-c-proj59
1 files changed, 56 insertions, 3 deletions
diff --git a/base/new-c-proj b/base/new-c-proj
index be109ae..0d5459c 100755
--- a/base/new-c-proj
+++ b/base/new-c-proj
@@ -43,6 +43,8 @@ cat > .gitignore <<EOF
*.su
*.so
*.so.*
+*.dll
+*.dylib
*.gch
*.gcov
*.gcno
@@ -53,6 +55,7 @@ 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. */' \
@@ -61,19 +64,38 @@ if printf '%s\n' "$1" | grep '^lib' >/dev/null 2>/dev/null; then
'' \
'#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
- all: $1.a
+ LOBJ = \$(OBJ:.o=.lo)
+
+
+ all: $1.a $1.\$(LIBEXT)
\$(OBJ): \$(HDR)
+ \$(LOBJ): \$(HDR)
.c.o:
x \$(CC) -c -o \$@ \$< \$(CFLAGS) \$(CPPFLAGS)
@@ -85,24 +107,55 @@ if printf '%s\n' "$1" | grep '^lib' >/dev/null 2>/dev/null; then
x @rm -f -- \$@
x \$(AR) rc \$@ \$(OBJ)
- install: $1.a
+ $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 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.* *.gch *.gcov *.gcno *.gcda
+ 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)
+ EOF
+
+ cat <<-EOF | sed 's/x\t/\t/g' > mk/macos.mk
+ LIBEXT = dylib
+ LIBFLAGS = -dynamiclib
+ LIBMAJOREXT = \$(LIB_MAJOR).\$(LIBEXT)
+ LIBMINOREXT = \$(LIB_VERSION).\$(LIBEXT)
+ EOF
+
+ cat <<-EOF | sed 's/x\t/\t/g' > mk/windows.mk
+ LIBEXT = dll
+ LIBFLAGS = -mdll
+ LIBMAJOREXT = \$(LIB_MAJOR).\$(LIBEXT)
+ LIBMINOREXT = \$(LIB_VERSION).\$(LIBEXT)
+ EOF
else
printf '%s\n' "/$1" >> .gitignore