diff --git a/lib/make_zipconf.sh b/lib/make_zipconf.sh
deleted file mode 100644
index cdf83f4..0000000
--- a/lib/make_zipconf.sh
+++ /dev/null
@@ -1,163 +0,0 @@
-#!/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"
