echo "running mknumeric_limits"
-: ${CXX:=g++}
-
-case `uname` in
- CYGWIN*)
- LDFLAGS='-nodefaultlibs -lcygwin -lc -lkernel32 -lgcc' ;;
- AIX*)
- case $CXX in
- *pthread*)
- LDFLAGS='-nodefaultlibs -lgcc -L/usr/lib/threads -lpthreads -lc_r /usr/lib/libc.a' ;;
- *)
- LDFLAGS='-nodefaultlibs -lgcc -lc' ;;
- esac
- ;;
- *)
- LDFLAGS='-nodefaultlibs -lgcc -lc' ;;
-esac
-
BUILD_DIR=$1
if [ ! -d "$BUILD_DIR" ]; then
echo "build directory $BUILD_DIR not found, exiting."
OUT_C="$BUILD_DIR/src/limitsMEMBERS.cc"
if [ -f $OUT_C ]; then
- rm -f $OUT_H OUT_C
+ rm -f $OUT_H $OUT_C $OUT_H-t $OUT_C-t
fi
SRC_DIR=$2
exit 0;
fi
-cat <<EOF > $OUT_H
+CC=${CC="$BUILD_DIR/../../gcc/xgcc -B$BUILD_DIR/../../gcc/"}
+
+# We output to a temporary file, so that we don't appear to have
+# succeeded unless we actually do.
+cat <<EOF > $OUT_H-t
// The template and inlines for the -*- C++ -*- numeric_limits classes.
// Copyright (C) 1999, 2000 Free Software Foundation, Inc.
EOF
-echo "$CXX $CPPFLAGS -I$BUILD_DIR/include \
- -o "$BUILD_DIR/src/gen-num-limits" "$SRC_DIR/src/gen-num-limits.cc" \
- $LDFLAGS"
-
-$CXX $CPPFLAGS -I$BUILD_DIR/include \
- -o "$BUILD_DIR/src/gen-num-limits" "$SRC_DIR/src/gen-num-limits.cc" \
- $LDFLAGS
+# Must turn off exceptions, because the C++ exception handling support
+# routines have not been built yet.
+echo "$CC -I. $CPPFLAGS -I$BUILD_DIR/include -DHAVE_CONFIG_H -fno-exceptions \
+ -o $BUILD_DIR/src/gen-num-limits $SRC_DIR/src/gen-num-limits.cc"
-if [ ! -f "$BUILD_DIR/src/gen-num-limits" ]; then
+{ $CC -I. $CPPFLAGS -I$BUILD_DIR/include -DHAVE_CONFIG_H -fno-exceptions \
+ -o "$BUILD_DIR/src/gen-num-limits" "$SRC_DIR/src/gen-num-limits.cc"
+} || {
echo "gen-num-limits failed to build, exiting."
exit 1
-fi
+}
-"$BUILD_DIR/src/gen-num-limits" >> $OUT_H
+"$BUILD_DIR/src/gen-num-limits" >> $OUT_H-t || {
+ echo "gen-num-limits failed to execute, exiting."
+ exit 1
+}
-cat <<EOF >> $OUT_H
+cat <<EOF >> $OUT_H-t
} // namespace std
#endif // _CPP_NUMERIC_LIMITS
trait_name=numeric_limits
-cat <<EOF > $OUT_C
+cat <<EOF > $OUT_C-t
// Static data members of -*- C++ -*- numeric_limits classes
// Copyright (C) 1999, 2000 Free Software Foundation, Inc.
long 'unsigned long' 'long long' 'unsigned long long' \
float double 'long double'
do
- grep "<$type_name>" $OUT_H >/dev/null 2>&1 || continue
- cat <<EOF >> $OUT_C
+ grep "<$type_name>" $OUT_H-t >/dev/null 2>&1 || continue
+ cat <<EOF >> $OUT_C-t
const bool $trait_name<$type_name>::is_specialized;
const int $trait_name<$type_name>::digits;
done
-cat <<EOF >> $OUT_C
+cat <<EOF >> $OUT_C-t
} // namespace std
EOF
+
+mv $OUT_C-t $OUT_C
+mv $OUT_H-t $OUT_H