| #!/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 :-) |
| # |
| # $Id: /var/cvsroot/gentoo-src/portage/src/sandbox-1.1/Attic/create-localdecls,v 1.11.2.1 2004/10/22 16:53:30 carpaski Exp $ |
| |
| OUTFILE='localdecls.h' |
| |
| # if your arch needs to dlopen() glibc, add it here separated by space :] |
| BROKEN_RTLD_ARCHLIST="mips" |
| |
| 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 libc version... ' |
| gcc -Wall -o libctest libctest.c |
| VERSION=`ldd libctest | grep libc\\.so | grep -v 'ld-uClibc' | awk '{print $1}'` |
| |
| echo $VERSION |
| echo "#define LIBC_VERSION \"$VERSION\"" >> $OUTFILE |
| if test "$VERSION" = 'libc.so.5' ; then |
| echo '#define BROKEN_RTLD_NEXT' >> $OUTFILE |
| echo '#define LIBC 5' >> $OUTFILE |
| else |
| # for the arch's that need to dlopen() libc to fetch real funcs! |
| # 16.12.02 -Torgeir Hansen <torgeir@trenger.ro> |
| MYARCH=`/bin/uname -m` |
| for x in $BROKEN_RTLD_ARCHLIST; do |
| if [ $x = $MYARCH ]; then |
| echo '#define BROKEN_RTLD_NEXT' >> $OUTFILE |
| fi |
| done |
| |
| fi |
| |
| if test "$VERSION" = 'libc.so.6' ; then |
| echo -n 'Checking glibc subversion...' |
| tmp="$(ldd libctest 2>/dev/null | grep libc.so 2>/dev/null | head -n 1)" |
| LibcPath=`expr "$tmp" : '[^/]*\(/[^ ]*\)'` |
| tmp="`strings $LibcPath | grep -i 'c library'`" |
| OsLibcMajor=`expr "$tmp" : '.* \([0-9][0-9]*\)'` |
| OsLibcMinor=`expr "$tmp" : '.* [0-9][0-9]*\.\([0-9][0-9]*\)'` |
| echo " ${OsLibcMajor}.${OsLibcMinor}" |
| case "$OsLibcMajor" in |
| 2) |
| # 2 is the glibc version |
| case "$OsLibcMinor" in |
| 0) |
| echo '#define GLIBC_MINOR 0' >> $OUTFILE |
| SUBVERSION='glibc-2.0' ;; |
| 1) |
| echo '#define GLIBC_MINOR 1' >> $OUTFILE |
| SUBVERSION='glibc-2.1' ;; |
| 2) |
| echo '#define GLIBC_MINOR 2' >> $OUTFILE |
| SUBVERSION='glibc-2.2' ;; |
| 3) |
| echo '#define GLIBC_MINOR 3' >> $OUTFILE |
| SUBVERSION='glibc-2.3' ;; |
| *) |
| echo 'Treated as glibc >= 2.1 (finger crossed)' |
| echo '#define GLIBC_MINOR 1' >> $OUTFILE |
| SUBVERSION='glibc-2.1' ;; |
| esac |
| ;; |
| esac |
| fi |
| |
| rm libctest |
| |
| echo ' |
| #ifdef PATH_MAX |
| # define SB_PATH_MAX PATH_MAX * 2 |
| # if (SB_PATH_MAX >= INT_MAX) || (SB_PATH_MAX < PATH_MAX) |
| # undef SB_PATH_MAX |
| # define SB_PATH_MAX PATH_MAX + 25 |
| # if (SB_PATH_MAX >= INT_MAX) || (SB_PATH_MAX < PATH_MAX) |
| # error SB_PATH_MAX too big! |
| # endif |
| # endif |
| #else |
| # error PATH_MAX not defined! |
| #endif' >> $OUTFILE |
| |
| echo >> $OUTFILE |
| echo '#endif' >> $OUTFILE |
| echo |
| |