From 1de5bf782aa8b4e6087091a9c3c35bb5e485ff64 Mon Sep 17 00:00:00 2001 From: Wolfgang Bumiller Date: Sun, 15 Dec 2013 22:08:37 +0100 Subject: [PATCH] shellification... --- configure | 137 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 78 insertions(+), 59 deletions(-) diff --git a/configure b/configure index 56f1233..1ea0073 100755 --- a/configure +++ b/configure @@ -1,4 +1,4 @@ -#!/usr/bin/bash +#!/bin/sh # vim: ts=2 sts=2 sw=2 et: progname="$0" @@ -98,9 +98,19 @@ case "${host}" in esac # for the default-supported compilers: -cf_cflags_gcc=(-Wall -Wextra -Werror -Wstrict-aliasing -Wno-attributes) -cf_ldflags_gcc=() -cf_libs_gcc=(-lm) +cf_cflags_gcc="-Wall -Wextra -Werror -Wstrict-aliasing -Wno-attributes" +cf_ldflags_gcc="" +cf_libs_gcc="-lm" + +cflags_gcc() { + cf_cflags_gcc="${cf_cflags_gcc} $@" +} +ldflags_gcc() { + cf_ldflags_gcc="${cf_ldflags_gcc} $@" +} +libs_gcc() { + cf_libs_gcc="${cf_libs_gcc} $@" +} # Let's figure out where we are... cf_wd="${PWD}" @@ -108,7 +118,7 @@ cf_dir="$(readlink -f "${progname}")" # or should we use the hopefully more reliable basename command? cf_dir="${cf_dir%/*}" -if [[ $cf_dir == $cf_wd ]]; then +if [ "x${cf_dir}" = "x${cf_wd}" ]; then echo "Please run this script in a different directory \ to not overwrite the git working tree." exit 1 @@ -133,9 +143,9 @@ has_cmd "${CC}" || die "No compiler found" # We might add support for different compilers with a different CLI cf_cctype="gcc" -if [[ $CC != clang && $CC != gcc && $CC != g++ ]]; then +if [ "x${CC}" != "xclang" -a "x${CC}" != "gcc" -a "x${CC}" != "g++" ]; then cf_ccver="$(${CC} -v 2>&1)" - (( $? )) && die "Failed to retrieve compiler version info" + [ $? -eq 0 ] || die "Failed to retrieve compiler version info" if (echo "${cf_ccver}" | grep -q '\'); then msg "found compatible compiler" else @@ -147,7 +157,7 @@ fi cf_gitinfo=0 if has_cmd git; then # And provided we're in a git repo: - if [[ -d "${cf_dir}/.git" ]]; then + if [ -d "${cf_dir}/.git" ]; then cf_gitinfo=1 msg "reading git info" cf_gitinfo_text="$(indir git describe --always)" @@ -159,32 +169,34 @@ cf_valgrind=0 has_cmd valgrind && cf_valgrind=1 # compiler specific flags: -[[ $CC != g++ ]] && cf_cflags_gcc+=(-Wmissing-prototypes -Wstrict-prototypes) -[[ $CC = clang ]] && \ - cf_cflags_gcc+=( - -Weverything - -Wno-padded - -Wno-format-nonliteral - -Wno-disabled-macro-expansion - -Wno-conversion - -Wno-float-equal - -Wno-unknown-warning-option - -Wno-cast-align) - -if [[ $CC != tcc ]]; then - cf_cflags_gcc+=(-pedantic-errors) +[ "x${CC}" != "xg++" ] && \ + cflags_gcc -Wmissing-prototypes -Wstrict-prototypes + +if [ "x${CC}" = "xclang" ]; then + cflags_gcc -Weverything + cflags_gcc -Wno-padded + cflags_gcc -Wno-format-nonliteral + cflags_gcc -Wno-disabled-macro-expansion + cflags_gcc -Wno-conversion + cflags_gcc -Wno-float-equal + cflags_gcc -Wno-unknown-warning-option + cflags_gcc -Wno-cast-align +fi + +if [ "x${CC}" != "xtcc" ]; then + cflags_gcc -pedantic-errors else - cf_cflags_gcc+=(-Wno-pointer-sign -fno-common) + cflags_gcc -Wno-pointer-sign -fno-common fi parse_cmdline -if (( cf_gitinfo )); then - cf_cflags_gcc+=(-DGMQCC_GITINFO="\"${cf_gitinfo_text}\"") +if [ ${cf_gitinfo} -ne 0 ]; then + cflags_gcc '-DGMQCC_GITINFO="${cf_gitinfo_text}"' fi -if (( ! cf_valgrind )); then - cf_cflags_gcc+=(-DNVALGRIND) +if [ ${cf_valgrind} -eq 0 ]; then + cflags_gcc -DNVALGRIND fi # @@ -192,9 +204,9 @@ fi # case "${cf_cctype}" in gcc|clang) - cf_cflags=("${cf_cflags_gcc[@]}") - cf_ldflags=("${cf_ldflags_gcc[@]}") - cf_libs=("${cf_libs_gcc[@]}") + cf_cflags="${cf_cflags_gcc}" + cf_ldflags="${cf_ldflags_gcc}" + cf_libs="${cf_libs_gcc}" ;; *) die "compiler type '%s' not handled here!" "${cf_cctype}" @@ -207,46 +219,53 @@ esac # executables is an array of variable names used in the makefile to # name an executable; the list of objects is assumed to be # in ${var}_OBJ -executables=(GMQCC QCVM TESTSUITE PAK) -all_c_obj=() # filled by print_objects +executables="GMQCC QCVM TESTSUITE PAK" +all_c_obj="" +add_c_obj() { + all_c_obj="${all_c_obj} $@" +} + print_all_rule() { printf 'all:' - for i in "${executables[@]}"; do - printf ' $(%s)' "$i" + for i in ${executables}; do + printf ' $(%s)' "${i}" done echo } # create all the object variables: print_objects() { - local common=(ansi.o util.o hash.o stat.o fs.o opts.o conout.o) - all_c_obj+=("${common[@]}") - local gmqcc=(main.o utf8.o - lexer.o parser.o ftepp.o - fold.o intrin.o correct.o - ast.o ir.o code.o) - all_c_obj+=("${gmqcc[@]}") - local qcvm=(exec.o) - all_c_obj+=("${qcvm[@]}") - local testsuite=(test.o) - all_c_obj+=("${testsuite[@]}") - local pak=(pak.o) - all_c_obj+=("${pak[@]}") + common="ansi.o util.o hash.o stat.o fs.o opts.o conout.o" + add_c_obj ${common} + + gmqcc="main.o utf8.o lexer.o parser.o ftepp.o fold.o" + gmqcc="${gmqcc} intrin.o correct.o ast.o ir.o code.o" + add_c_obj ${gmqcc} + + qcvm=exec.o + add_c_obj ${qcvm} + + testsuite=test.o + add_c_obj ${testsuite} + + pak=pak.o + add_c_obj ${pak} + cat <