163 lines
4.2 KiB
Bash
163 lines
4.2 KiB
Bash
#!/bin/sh
|
|
|
|
# make_zipconf.sh: create platform specific include file zipconf.h
|
|
# Copyright (C) 1999-2011 Dieter Baron and Thomas Klausner
|
|
#
|
|
# This file is part of libzip, a library to manipulate ZIP archives.
|
|
# The authors can be contacted at <libzip@nih.at>
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions
|
|
# are met:
|
|
# 1. Redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
# 2. Redistributions in binary form must reproduce the above copyright
|
|
# notice, this list of conditions and the following disclaimer in
|
|
# the documentation and/or other materials provided with the
|
|
# distribution.
|
|
# 3. The names of the authors may not be used to endorse or promote
|
|
# products derived from this software without specific prior
|
|
# written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
|
|
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
|
|
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
|
# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
|
|
set -e
|
|
|
|
define_type()
|
|
{
|
|
short=$1
|
|
long=$2
|
|
bytes=$3
|
|
infile="$4"
|
|
outfile="$5"
|
|
|
|
bits=`expr $bytes '*' 8`
|
|
type="${short}int${bits}"
|
|
TYPE=`echo $type | tr '[a-z]' '[A-Z]'`
|
|
if grep "define HAVE_${TYPE}_T" "$infile" > /dev/null
|
|
then
|
|
echo "typedef ${type}_t zip_${type}_t;" >> "$outfile"
|
|
LTYPE="$TYPE"
|
|
else
|
|
SHORT=`echo $short | tr '[a-z]' '[A-Z]'`
|
|
if [ -z "$SHORT" ]
|
|
then
|
|
SHORT='S'
|
|
fi
|
|
if [ "$bytes" -eq 1 ]
|
|
then
|
|
if [ -z "$long" ]
|
|
then
|
|
long='signed'
|
|
fi
|
|
echo "typedef $long char ${type}_t;" >> $outfile
|
|
LTYPE="${SHORT}CHAR"
|
|
else
|
|
ctype=`sed -n "s/.define SIZEOF_\([A-Z_]*\) $bytes/\1/p" "$infile" \
|
|
| head -1 | tr '[A-Z_]' '[a-z ]'`
|
|
if [ -z "$ctype" ]
|
|
then
|
|
echo "$0: no $bits bit type found" >&2
|
|
exit 1
|
|
fi
|
|
echo "typedef $long $ctype ${type}_t;" >> "$outfile"
|
|
case "$ctype" in
|
|
short) LTYPE=${SHORT}SHRT;;
|
|
int) LTYPE=${SHORT}INT;;
|
|
long) LTYPE=${SHORT}LONG;;
|
|
"long long") LTYPE=${SHORT}LLONG;;
|
|
esac
|
|
fi
|
|
fi
|
|
|
|
if [ -z "$long" ]
|
|
then
|
|
echo "#define ZIP_${TYPE}_MIN ${LTYPE}_MIN" >> "$outfile"
|
|
fi
|
|
echo "#define ZIP_${TYPE}_MAX ${LTYPE}_MAX" >> "$outfile"
|
|
echo >> "$outfile"
|
|
}
|
|
|
|
|
|
if [ "$#" -ne 2 ]
|
|
then
|
|
echo "Usage: $0 config_h_file out_file" >&2
|
|
echo " e.g. $0 ../config.h zip_err_str.c" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$1" = "$2" ]
|
|
then
|
|
echo "$0: error: output file = input file" >&2
|
|
exit 1
|
|
fi
|
|
|
|
cat <<EOF > "$2.$$"
|
|
#ifndef _HAD_ZIPCONF_H
|
|
#define _HAD_ZIPCONF_H
|
|
|
|
/*
|
|
zipconf.h -- platform specific include file
|
|
|
|
This file was generated automatically by $0
|
|
based on $1.
|
|
*/
|
|
|
|
EOF
|
|
|
|
version=`sed -n 's/^#define VERSION "\(.*\)"/\1/p' "$1"`
|
|
|
|
version_major=`expr "$version" : '^\([0-9]*\)' || true`
|
|
version_minor=`expr "$version" : '^[0-9]*\.\([0-9]*\)' || true`
|
|
version_micro=`expr "$version" : '^[0-9]*\.[0-9]\.\([0-9]*\)' || true`
|
|
|
|
if [ -z "$version_major" ]
|
|
then
|
|
version_major=0
|
|
fi
|
|
if [ -z "$version_minor" ]
|
|
then
|
|
version_minor=0
|
|
fi
|
|
if [ -z "$version_micro" ]
|
|
then
|
|
version_micro=0
|
|
fi
|
|
|
|
cat <<EOF >> "$2.$$"
|
|
#define LIBZIP_VERSION "$version"
|
|
#define LIBZIP_VERSION_MAJOR $version_major
|
|
#define LIBZIP_VERSION_MINOR $version_minor
|
|
#define LIBZIP_VERSION_MICRO $version_micro
|
|
|
|
EOF
|
|
|
|
if grep 'define HAVE_INTTYPES_H' "$1" > /dev/null
|
|
then
|
|
echo '#include <inttypes.h>' >> "$2.$$"
|
|
else
|
|
echo '#include <limits.h>' >> "$2.$$"
|
|
fi
|
|
echo >> "$2.$$"
|
|
|
|
for size in 1 2 4 8
|
|
do
|
|
define_type '' '' $size "$1" "$2.$$"
|
|
define_type u unsigned $size "$1" "$2.$$"
|
|
done
|
|
|
|
echo >> "$2.$$"
|
|
echo '#endif /* zipconf.h */' >> "$2.$$"
|
|
|
|
mv "$2.$$" "$2"
|