#!/bin/sh

# This is a quick'n'dirty hack to make the program behave correctly
# under different systems.
# Example:
# when using libc5, (f)trucate's offset argument type is size_t with
# libc5, but it's off_t with libc6 (glibc2).
#
# Uhm... time to learn GNU autoconf :-)

OUTFILE='localdecls.h'

echo '/* This file is automatically generated     *' > $OUTFILE
echo ' * Modify create-localdecls instead of this */' >> $OUTFILE
echo >> $OUTFILE
echo '#ifndef __LOCALDECLS_H_' > $OUTFILE
echo '#define __LOCALDECLS_H_' >> $OUTFILE
echo >> $OUTFILE

###
###
###

echo -n 'Checking truncate argument type... '
if grep -q 'truncate.*size_t' /usr/include/unistd.h ; then
	echo 'size_t'
	echo '#define TRUNCATE_T size_t' >> $OUTFILE
else
	echo 'off_t' # At least, I HOPE it's off_t :-)
	echo '#define TRUNCATE_T off_t' >> $OUTFILE
fi

echo -n 'Checking readlinkat result type... '
if grep -q 'ssize_t.*readlinkat' /usr/include/unistd.h ; then
	echo 'ssize_t'
	echo '#define READLINKAT_T ssize_t' >> $OUTFILE
else
	echo 'int' # according to man page
	echo '#define READLINKAT_T int' >> $OUTFILE
fi

###
###
###

echo -n 'Checking which libc we are using... '
gcc -Wall -o libcfiletest libcfiletest.c
LIBC_FILE=`ldd libcfiletest | grep libc\\.so | awk '{print $1}'`
echo $LIBC_FILE
echo "#define LIBC_FILE \"$LIBC_FILE\"" >> $OUTFILE
if test "$LIBC_FILE" = 'libc.so.5' ; then
	echo '#define BROKEN_RTLD_NEXT' >> $OUTFILE
	echo '#define LIBC 5' >> $OUTFILE
else
	if test "$LIBC_FILE" = 'libc.so.6' ; then
		echo -n 'Checking libc version... '
		gcc -Wall -o libctest libctest.c
		LIBC_VERSION=`./libctest`
		echo $LIBC_VERSION
		echo "#define LIBC_VERSION \"$LIBC_VERSION\"" >> $OUTFILE
		echo -en 'glibc >= 2 found\nChecking glibc subversion... '
		OsLibcMajor=`echo $LIBC_VERSION | cut -f1 -d.`
		OsLibcMinor=`echo $LIBC_VERSION | cut -f2 -d.`
		echo "#define GLIBC_MAJOR $OsLibcMajor" >> $OUTFILE
		echo "#define GLIBC_MINOR $OsLibcMinor" >> $OUTFILE
		echo $OsLibcMinor
	else
		echo "Unknown libc found ($LIBC_FILE). Please update the create-localdecls script."
		exit 1
	fi

fi

echo >> $OUTFILE
echo '#endif' >> $OUTFILE

