summaryrefslogtreecommitdiff
path: root/configure
diff options
context:
space:
mode:
authorAndreas Fankhauser (@tux-six)2022-07-05 03:20:13 +0200
committerAndreas Fankhauser (@tux-six)2022-07-05 03:20:13 +0200
commit2eb3a5adf2fd55f21dd9dfa20b423883a6afce12 (patch)
treed171a9c97d644cafef67fdde361ff93da65d6dd3 /configure
parentd2c0bed52d0a293d5541940dedbfe2b5c9afd2c8 (diff)
downloadbulk-ln-2eb3a5adf2fd55f21dd9dfa20b423883a6afce12.zip
bulk-ln-2eb3a5adf2fd55f21dd9dfa20b423883a6afce12.tar.gz
Enhance configure script and other cleanup
- Get rid of Makefile by using configure script to create it fully - Enhance automation of PROJECT_VERSION - Fold README and doc/INSTALL into one file - Try to be more POSIX-like in scripts - Rename 'package' target to 'dist' - Drop usage of 'bool' - Count dirs also while dry-run - Use dbl quotes in some log msgs
Diffstat (limited to 'configure')
-rwxr-xr-xconfigure133
1 files changed, 119 insertions, 14 deletions
diff --git a/configure b/configure
index fea5aeb..419e9a8 100755
--- a/configure
+++ b/configure
@@ -1,16 +1,18 @@
-#!/usr/bin/env sh
+
set -e
+set -o posix
# See https://www.gnu.org/prep/standards/html_node/Directory-Variables.html
prefix=/usr/local
exec_prefix='$(PREFIX)'
exec_suffix=
bindir='$(EXEC_PREFIX)/bin'
+verbose=0
main() {
parseArgs "$@"
- mangleMakefile
+ printMakefile > Makefile
}
@@ -19,10 +21,11 @@ printHelp() {
echo "Example usage: $0 --prefix /usr/local"
echo ''
echo 'Options:'
- echo ' --prefix <path> Default "/usr/local"'
- echo ' --exec-prefix <path> Default "$(PREFIX)"'
- echo ' --exec-suffix <path> Default <empty>'
- echo ' --bindir <path> Default "$(EXEC_PREFIX)/bin"'
+ echo ' --prefix "/usr/local"'
+ echo ' --exec-prefix "$(PREFIX)"'
+ echo ' --exec-suffix ""'
+ echo ' --bindir "$(EXEC_PREFIX)/bin"'
+ echo ' --verbose 0'
echo ''
}
@@ -31,25 +34,127 @@ parseArgs() {
# See: https://stackoverflow.com/a/14203146/4415884
while test $# -gt 0 ; do
case $1 in
- --help) printHelp; exit 1; ;;
+ --help) printHelp; exit 1; ;;
--prefix) prefix="$2" shift; shift; ;;
--exec-prefix) exec_prefix="$2" shift; shift; ;;
--exec-suffix) exec_suffix="$2" shift; shift; ;;
--bindir) bindir="$2" shift; shift; ;;
+ --verbose) verbose="$2" shift; shift; ;;
*) echo "[ERROR] Unexpected argument: $1"; exit 1 ;;
esac
done
+ if test "$verbose" != "0" -a "$verbose" != "1"; then
+ echo "[ERROR] verbose expected to be 0 or 1. But is: $verbose";
+ false;
+ fi
}
-mangleMakefile() {
- sed -i 's;^PREFIX=.*$;PREFIX='"$prefix"';' Makefile
- sed -i 's;^EXEC_PREFIX=.*$;EXEC_PREFIX='"$exec_prefix"';' Makefile
- sed -i 's;^EXEC_SUFFIX=.*$;EXEC_SUFFIX='"$exec_suffix"';' Makefile
- sed -i 's;^BINDIR=.*$;BINDIR='"$bindir"';' Makefile
-}
+printMakefile () {
+ printf '\n'
+ printf '%s\n' '# This file is generated by configure script. Manual changes may be lost'
+ printf '%s\n' '# when calling configure again.'
+ printf '\n'
+ printf '%s\n' 'CC=gcc'
+ printf '%s\n' 'TAR=tar'
+ printf '%s\n' 'MKDIRS=mkdir -p'
+ printf '%s\n' 'RIMRAF=rm -rf'
+ printf '%s\n' 'COPYTO=cp -t'
+ printf '%s\n' "PREFIX=$prefix"
+ printf '%s\n' "EXEC_PREFIX=$exec_prefix"
+ printf '%s\n' "EXEC_SUFFIX=$exec_suffix"
+ printf '%s\n' "BINDIR=$bindir"
+ # If PROJECT_VERSION set, use it.
+ # If not, try generate via git describe.
+ # If fails (eg git not avail), create pseudo version using date.
+ printf '%s' 'PROJECT_VERSION=$(shell'
+ printf '%s' ' ret=$$(git describe --tags 2>/dev/null |sed -E "s;^v;;");'
+ printf '%s' ' if test -z "$$ret"; then ret=$$(date -u +0.0.0-%Y%m%d.%H%M%S); fi;'
+ printf '%s\n' ' echo "$$ret")'
-main "$@"
+ printf '\n'
+ printf '%s' 'CFLAGS= --std=c99'
+ printf '%s' ' -Wall -Wextra -Werror -fmax-errors=3'
+ printf '%s' ' -Wno-error=unused-function -Wno-error=unused-label'
+ printf '%s' ' -Wno-error=unused-variable -Wno-error=unused-parameter'
+ printf '%s' ' -Wno-error=unused-const-variable'
+ printf '%s' ' -Werror=implicit-fallthrough=1'
+ printf '%s' ' -Wno-error=unused-but-set-variable'
+ printf '%s' ' -Wno-unused-function -Wno-unused-parameter'
+ printf '%s\n' ' -DPROJECT_VERSION=$(PROJECT_VERSION)'
+ printf '%s\n' ''
+ printf '%s\n' 'LDFLAGS= -Wl,--no-demangle,--fatal-warnings'
+ printf '%s\n' ''
+ printf '%s\n' 'INCDIRS= -Isrc/bulk_ln -Isrc/common'
+ printf '%s\n' ''
+ printf '%s\n' 'ifndef NDEBUG'
+ printf '%s\n' ' CFLAGS := $(CFLAGS) -ggdb -O0 -g3'
+ printf '%s\n' 'else'
+ printf '%s\n' ' CFLAGS := $(CFLAGS) -ffunction-sections -fdata-sections -Os "-DNDEBUG=1"'
+ printf '%s\n' ' LDFLAGS := $(LDFLAGS) -Wl,--gc-sections,--as-needed'
+ printf '%s\n' 'endif'
+
+ if test "$verbose" = "0"; then
+ printf '\n'
+ printf '%s\n' '.SILENT:';
+ fi
+
+ printf '\n'
+ printf '%s\n' 'default: link dist'
+
+ printf '\n'
+ printf '%s\n' '.PHONY: clean'
+ printf '%s\n' 'clean:'
+ printf '%s\n' ' echo $(RIMRAF) build dist'
+ printf '%s\n' ' $(RIMRAF) build dist'
+
+ printf '\n'
+ printf '%s\n' '.PHONY: link'
+ printf '%s\n' 'link: build/bin/bulk-ln$(EXEC_SUFFIX)'
+
+ printf '\n'
+ printf '%s\n' 'build/obj/%.o: src/%.c'
+ printf '%s\n' ' echo " CC $@"'
+ printf '%s\n' ' $(MKDIRS) "$(shell T=$@; echo $${T%/*})"'
+ printf '%s\n' ' $(CC) -c -o $@ $^ $(CFLAGS) $(INCDIRS)'
+ printf '\n'
+ printf '%s' 'build/bin/bulk-ln$(EXEC_SUFFIX):'
+ # dependencies
+ printf '%s' ' build/obj/bulk_ln/bulk_ln.o'
+ printf '%s' ' build/obj/bulk_ln/bulk_ln_main.o'
+ printf '\n' # commands
+ printf '%s\n' ' echo " LN $@"'
+ printf '%s\n' ' $(MKDIRS) "$(shell T=$@; echo $${T%/*})"'
+ printf '%s\n' ' $(CC) -o $@ $(LDFLAGS) $^ $(LIBSDIR)'
+ printf '\n'
+ printf '%s\n' '.PHONY: dist'
+ printf '%s\n' 'dist: link'
+ printf '%s\n' ' echo " Package"'
+ printf '%s\n' ' $(RIMRAF) build/dist-* dist'
+ printf '%s\n' ' $(MKDIRS) dist'
+ # Create Executable bundle.
+ printf '%s\n' ' $(MKDIRS) build/dist-bin && $(COPYTO) build/dist-bin \'
+ printf '%s\n' ' README.txt'
+ printf '%s\n' ' $(MKDIRS) build/dist-bin/bin && $(COPYTO) build/dist-bin/bin \'
+ printf '%s\n' ' build/bin/*'
+
+ printf '%s\n' ' (cd build/dist-bin && find . -type f -not -name MD5SUM -exec md5sum -b {} +) > build/dist-bin/MD5SUM'
+
+ printf '%s\n' ' (cd build/dist-bin && $(TAR) --owner=0 --group=0 -czf "../../dist/BulkLn-$(PROJECT_VERSION).tgz" *)'
+ printf '%s\n' ' echo "" && echo "See '\''./dist/'\'' for result." && echo ""'
+ printf '%s' ' if test -n "$$(git status --porcelain 2>/dev/null)"; then'
+ printf '%s' ' echo "[WARN ] Worktree dirty!"; sleep 2;'
+ printf '%s\n' ' fi'
+
+ printf '\n'
+ printf '%s\n' '.PHONY: install'
+ printf '%s\n' 'install:'
+ printf '%s\n' ' $(MKDIRS) "$(BINDIR)"'
+ printf '%s\n' ' $(TAR) --strip-components=1 -C "$(BINDIR)" -xzf "$(shell ls dist/BulkLn-*.tgz)" -- bin'
+}
+
+
+main "$@"