Added my implementation of unixtime.

This implementation has very few reasonable code (call atol() and ctime()),
but has some nice standard program stuff (parse options, print help, ...).
This commit is contained in:
heinzel
2008-02-19 14:12:59 +00:00
commit c1aa247e85
10 changed files with 582 additions and 0 deletions

291
configure vendored Executable file
View File

@@ -0,0 +1,291 @@
#!/bin/sh
#
# configure
#
# A simple script to configure Makefiles
# (i.e. read Makefile.in, replace strings and write Makefile).
#
# heinzel <heinzel@heinzelwelt.de>
#
# $Id: configure,v 1.1 2008/02/19 14:12:59 heinzel Exp $
#
VERSION='configure Version 0.1 $Revision: 1.1 $ ($Date: 2008/02/19 14:12:59 $ $Author: heinzel $)'
### config ###
FILES=""
FILES_DEF="configure.files"
TEMPLATE_SUFFIX=".in"
MACROS_DEF="configure.macros"
MACROS="CTEMPLATE"
MACRO_CTEMPLATE="@CFILE@ (created by configure script)"
### functions ###
function print_help() {
cat <<EOH
configure create files by processing templates and replace macros.
For now macros are simple name-value pairs. Use strings like @NAME@ within
the template files and configure will replace those strings by the named
value while creating the resulting files.
Usage: ./configure [OPTIONS]
Options:
-h, --help
-V, --version
Generic Options (and default values):
EOH
for m in $MACROS ; do
case "$m" in
CFILE|CTEMPLATE)
continue
;;
esac
name="`echo $m | tr [[:upper:]] [[:lower:]]`"
text="`eval_macro $m`"
case "$text" in
0)
output=" --without-${name}"
;;
1)
output=" --with-${name}"
;;
*)
output=" --${name} $text"
;;
esac
echo "$output"
done
echo ""
cat <<EOH
Files:
This script will create following files: $FILES
or read file names to create from '$FILES_DEF'
The templates have to end with '$TEMPLATE_SUFFIX'
The macros can be defined in '$MACROS_DEF'
EOH
}
function print_version() {
echo "$VERSION"
}
function set_macro() {
case "$1" in
'')
return 1
;;
--with-*|--enable-*)
name="`echo $1 | cut -f1 -d= | cut -f4- -d- | tr [[:lower:]] [[:upper:]]`"
text="1"
;;
--without-*|--disable-*)
name="`echo $1 | cut -f1 -d= | cut -f4- -d- | tr [[:lower:]] [[:upper:]]`"
text="0"
;;
--*=*)
name="`echo $1 | cut -f1 -d= | cut -c3- | tr [[:lower:]] [[:upper:]]`"
text="`echo $1 | cut -f2- -d=`"
;;
--*)
name="`echo $1 | cut -c3- | tr [[:lower:]] [[:upper:]]`"
text="$2"
;;
*=*)
name="`echo $1 | cut -f1 -d= | tr [[:lower:]] [[:upper:]]`"
text="`echo $1 | cut -f2- -d=`"
;;
*)
name="`echo $1 | tr [[:lower:]] [[:upper:]]`"
text=""
;;
esac
eval MACRO_${name}=${text}
if ! expr " $MACROS " : ".* $name .*" >/dev/null ; then
MACROS="$MACROS ${name}"
fi
}
function eval_macro() {
local name="$1"
local text=""
local return=""
eval text="\$MACRO_${name}"
while : ; do
# Test if text contains more macros.
echo "$text" | grep -E "@[A-Z][A-Z0-9]*@" >/dev/null
r=$?
if test "1${r}" != "10" ; then
# Text is macro free.
return="$text"
break
else
# Get the last macro name from text...
sm_name="`echo $text | sed -e 's=^.*@\([A-Z][A-Z0-9]*\)@.*$=\1='`"
# Resolve it...
sm_text="`eval_macro $sm_name`"
# Substitute macro...
text="`echo $text | sed -e 's=@'${sm_name}'@='${sm_text}'=g'`"
fi
done
echo "$return"
}
function load_defaults() {
local inc="${MACROS_DEF:-configure.macros}"
local i=0
local line=""
if test "X${inc}" = "X" ; then
return 1
fi
if test ! -r "$inc" -o -d "$inc" ; then
echo "${inc}: not a readable file." >&2
return 1
fi
while read line ; do
i="`expr $i + 1`"
case "$line" in
\#*|\ *|'')
continue
;;
*=*)
set_macro "$line"
;;
*)
echo "Warning: $inc: unexpected line ($i)." >&2
;;
esac
done < "$inc"
}
function configure() {
local file="$1"
local ext="${TEMPLATE_SUFFIX:-.in}"
local template=""
local static_file=""
local expr=""
local name=""
local text=""
if test "X${file}" = "X" ; then
echo "No filename given." >&2
return 1
fi
template="${file}${ext}"
if test ! -r "$template" -o -d "$template" ; then
echo "$file: cannot read template ($template)."
return 1
fi
set_macro CFILE="$file"
ctext="`eval_macro CTEMPLATE`"
cexpr="s=@${template}@=${ctext}=g"
if test "X${CONFIGURE_STATIC_FILE}" != "X" ; then
static_file="$CONFIGURE_STATIC_FILE"
read expr < "$static_file"
else
static_file="`mktemp configure.tmp.XXXXXX`"
if test "1$?" -ne "10" -o "X${static_file}" = "X" \
-o ! -w "$static_file" ; then
echo "Cannot create temp file." >&2
return 1
fi
CONFIGURE_STATIC_FILE="$static_file"
expr=""
for name in $MACROS ; do
case "$name" in
CFILE|CTEMPLATE)
continue
;;
esac
text="`eval_macro $name`"
expr="s=@$name@=$text=g
$expr"
done
echo "$expr" > "$static_file"
fi
sed -e "$cexpr" -e "$expr" "$template" > "$file"
}
function clean_up() {
if test "X${CONFIGURE_STATIC_FILE}" != "X" -a -f "$CONFIGURE_STATIC_FILE" ; then
rm "$CONFIGURE_STATIC_FILE"
fi
}
### set options ###
load_defaults
while test "1$#" -gt "10" ; do
case "$1" in
-h|--help)
print_help
exit 0
;;
-V|--version)
print_version
exit 0
;;
--with-*|--without-*)
set_macro "$1"
shift
;;
--enable-*|--disable-*)
set_macro "$1"
shift
;;
--*=*)
set_macro "$1"
shift
;;
--*)
case "$2" in
''|-*)
set_macro "${1}=1"
shift
;;
*)
set_macro "$1" "$2"
shift
shift
;;
esac
;;
esac
done
### action ###
files="$FILES"
if test "X${FILES_DEF}" != "X" -a -f "$FILES_DEF" ; then
read buf < "$FILES_DEF"
files="$files $buf"
fi
if test "X${files}" = "X" ; then
echo "No files to configure." >&2
echo " Make sure '$FILES_DEF' is there and readable." >&2
exit 1
fi
for f in $files ; do
echo "Creating file $f..."
configure $f
done
clean_up
### end ###