#!/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 # # 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 < "$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 <> "$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 ' >> "$2.$$" else echo '#include ' >> "$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"