diff --git a/.gitignore b/.gitignore index 04c1e2b..2564793 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,4 @@ esv result -Makefile +config.mk \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..d4f9679 --- /dev/null +++ b/Makefile @@ -0,0 +1,29 @@ +IMPORT = import +PREFIX = /usr/local +MANPREFIX = ${PREFIX}/man + +DC = ${_DC} +CFLAGS = ${_CFLAGS} +OBJS = ${_OBJS} + +all: esv + +include config.mk + +esv: ${OBJS} + ${DC} ${_LDFLAGS} -of=$@ ${OBJS} + +.SUFFIXES: .d .o + +.d.o: + ${DC} ${CFLAGS} -c $< + +clean: + rm -f esv ${OBJS} ${INIOBJS} + +install: esv + install -Dm755 esv ${DESTDIR}${PREFIX}/bin/esv + install -Dm644 esv.1 ${DESTDIR}${MANPREFIX}/man1 + install -Dm644 esv.conf.5 ${DESTDIR}${MANPREFIX}/man5 + +.PHONY: all clean install diff --git a/configure b/configure index e3a908a..3f9e07c 100755 --- a/configure +++ b/configure @@ -4,40 +4,9 @@ set -e -import=import - -mkf=Makefile +mkf=config.mk objs='esv.o esvapi.o initial.o' srcs='esv.d esvapi.d initial.d' -makefile=' -IMPORT = '"$import"' -PREFIX = /usr/local -MANPREFIX = ${PREFIX}/man - -DC = ${_DC} -CFLAGS = ${_CFLAGS} -OBJS = ${_OBJS} - -all: esv - -esv: ${OBJS} - ${DC} ${_LDFLAGS} -of=$@ ${OBJS} - -.SUFFIXES: .d .o - -.d.o: - ${DC} ${CFLAGS} -c $< - -clean: - rm -f esv ${OBJS} ${INIOBJS} - -install: - install -Dm755 esv ${DESTDIR}${PREFIX}/bin/esv - install -Dm644 esv.1 ${DESTDIR}${MANPREFIX}/man1/esv.1 - install -Dm644 esv.conf.5 ${DESTDIR}${MANPREFIX}/man5/esv.conf.5 - -.PHONY: all clean install -' # utility functions @@ -45,10 +14,10 @@ present () { command -v "$1" 1>/dev/null 2>/dev/null } using () { - >&2 printf "using $1\n" + >&2 printf "using %s\n" "$1" } -error () { - >&2 printf "$(basename $0): $1\n" +throw () { + >&2 printf "%s: %s\n" "$(basename "$0")" "$1" exit 1 } @@ -56,7 +25,7 @@ error () { ## D compiler gen_DC () { - if ! [ -z "$dc" ]; then + if [ -n "$dc" ]; then using "$dc" return 0 fi @@ -65,7 +34,7 @@ gen_DC () { elif present dmd; then dc=dmd else - error "D compiler not found; install ldc or dmd" + throw "D compiler not found; install ldc or dmd" fi using "$dc" @@ -101,7 +70,7 @@ gen_LDFLAGS () { fi fi if [ -z "$debug" ]; then - if ! [ -z "$ldflags" ]; then ldflags="$ldflags "; fi + if [ -n "$ldflags" ]; then ldflags="$ldflags "; fi ldflags="$ldflags-L--gc-sections" fi @@ -118,7 +87,7 @@ while getopts c:dhr ch; do case "$OPTARG" in ldc2) dc="ldc2" ;; dmd) dc="dmd" ;; - *) error "unknown D compiler '$OPTARG' specified (valid options: ldc2, dmd)" ;; + *) throw "unknown D compiler '$OPTARG' specified (valid options: ldc2, dmd)" ;; esac ;; d) debug=1 ;; @@ -135,7 +104,7 @@ options: EOF exit 0 ;; - ?) exit 1 ;; + '?') exit 1 ;; :) exit 1 ;; esac done @@ -147,33 +116,29 @@ gen_CFLAGS gen_LDFLAGS rm -f "$mkf" -printf '# begin generated definitions' >>"$mkf" -printf ' + +{ + printf '# begin generated definitions _DC = %s _CFLAGS = %s _LDFLAGS = %s -' \ - "$dc" \ - "$cflags" \ - "$ldflags" \ - >>"$mkf" -## generate obj list -printf '_OBJS =' >>"$mkf" -for obj in $objs; do - printf " $obj" >>"$mkf" -done -printf '\n' >>"$mkf" -printf '# end generated definitions\n' >>"$mkf" +' "$dc" "$cflags" "$ldflags" -printf "$makefile" >>"$mkf" + ## generate obj list + printf '_OBJS =' + for obj in $objs; do + printf ' %s' "$obj" + done + printf '\n# end generated definitions\n' -## generate dependency list ->&2 printf "generating dependency list\n" -printf '\n# begin generated dependencies\n' >>"$mkf" -i=1 -for obj in $objs; do - "$dc" -O0 -o- -makedeps \ - "$(printf "$srcs" | awk '{print $'"$i"'}')" >>"$mkf" - i="$(($i + 1))" -done -printf '# end generated dependencies\n' >>"$mkf" + ## generate dependency list + printf '\n# begin generated dependencies\n' + i=1 + for obj in $objs; do + "$dc" -o- -makedeps \ + "$(printf '%s' "$srcs" | awk '{print $'"$i"'}')" + i="$((i + 1))" + done + unset i + printf '# end generated dependencies\n' +} >>"$mkf"