You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
2.8 KiB
107 lines
2.8 KiB
#!/bin/bash
|
|
|
|
# This script checks compatibility of user supplied CXXFLAGS with
|
|
# the GMP library.
|
|
# Exit code is 0 iff CXXFLAGS and GMP are compatible, o/w non-zero.
|
|
|
|
# This script expects 1 arg: the CXXFLAGS used to compile GMP
|
|
# Also expects that CXX and CXXFLAGS have been exported from caller.
|
|
# Also expects that the ExternalLibs/ subtree has been created.
|
|
|
|
if [ $# != 1 ]
|
|
then
|
|
echo "$0: ERROR: requires 1 arg (CXXFLAGS_FOR_GMP)"
|
|
exit 1
|
|
fi
|
|
|
|
# Check environment variables CXX and COCOA_EXTLIB_DIR
|
|
if [ -z "$CXX" ]
|
|
then
|
|
echo "ERROR: $0: environment variable CXX not set."
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$COCOA_EXTLIB_DIR" ]
|
|
then
|
|
echo "ERROR: $0: environment variable COCOA_EXTLIB_DIR not set."
|
|
exit 1
|
|
fi
|
|
|
|
if [ \! "$COCOA_EXTLIB_DIR" -ef "/$COCOA_EXTLIB_DIR" ]
|
|
then
|
|
echo "ERROR: $0: environment variable COCOA_EXTLIB_DIR is not absolute: $COCOA_EXTLIB_DIR."
|
|
exit 1
|
|
fi
|
|
|
|
if [ \! -d "$COCOA_EXTLIB_DIR" -o \! -d "$COCOA_EXTLIB_DIR/include" -o \! -d "$COCOA_EXTLIB_DIR/lib" ]
|
|
then
|
|
echo "ERROR: $0: environment variable COCOA_EXTLIB_DIR is implausible: $COCOA_EXTLIB_DIR."
|
|
exit 1
|
|
fi
|
|
|
|
|
|
|
|
CXXFLAGS_FOR_GMP="$1"
|
|
GMP_LDLIB=-lgmp
|
|
if [ -f ExternalLibs/lib/libgmp-symlink.a ]
|
|
then
|
|
GMP_LDLIB=-lgmp-symlink
|
|
fi
|
|
|
|
umask 22
|
|
|
|
# Create tmp directory, put C prog in it, compile and run.
|
|
# TMP_DIR depends on hostname, userid, and process number to avoid unfortunate
|
|
# name clashes if several people try to install CoCoALib simultaneously.
|
|
TODAY=`date "+%Y-%m-%d"`
|
|
TIME=`date "+%H:%M:%S"`
|
|
TMP_DIR=/tmp/CoCoALib-config-$USER-$TODAY/gmp-check-cxxflags-$TIME-$$
|
|
/bin/rm -rf $TMP_DIR && mkdir -p $TMP_DIR
|
|
if [ $? -ne 0 ]; then
|
|
echo "ERROR: $0 failed to create temporary directory \"$TMP_DIR\""
|
|
exit 1
|
|
fi
|
|
|
|
cd $TMP_DIR
|
|
cat > TestProg.c <<EOF
|
|
#include "gmp.h"
|
|
|
|
int main()
|
|
{
|
|
mpz_t A; mpz_init_set_ui(A,1);
|
|
mpz_t B; mpz_init_set_ui(B,1);
|
|
mpz_add(A, A, B);
|
|
if (mpz_cmp_ui(A, 2) != 0)
|
|
return 1;
|
|
return 0;
|
|
}
|
|
EOF
|
|
|
|
|
|
# Compile test prog using given CXX and CXXFLAGS, and GMP header and library
|
|
$CXX $CXXFLAGS $CXXFLAGS_FOR_GMP TestProg.c -o TestProg -I "$COCOA_EXTLIB_DIR/include" -L"$COCOA_EXTLIB_DIR/lib" $GMP_LDLIB 2> /dev/null
|
|
|
|
# Check whether compilation failed; if so, complain.
|
|
if [ $? -ne 0 ]
|
|
then
|
|
# Deliberately leave $TMP_DIR to assist debugging.
|
|
echo "ERROR: $0 failed to compile/link TestProg; command used was"
|
|
echo "ERROR: $CXX $CXXFLAGS $CXXFLAGS_FOR_GMP TestProg.c -o TestProg -I \"$COCOA_EXTLIB_DIR/include\" -L\"$COCOA_EXTLIB_DIR/lib\" $GMP_LDLIB"
|
|
exit 2
|
|
fi
|
|
|
|
# Compilation succeeded, so try running $PROG.
|
|
./TestProg 2>/dev/null
|
|
|
|
# Check whether execution failed; if so, complain (probably linker problems).
|
|
if [ $? -ne 0 ]
|
|
then
|
|
# Deliberately leave $TMP_DIR to assist debugging.
|
|
echo "ERROR: $0: TestProg crashed (probably linker problem for libgmp)"
|
|
exit 3
|
|
fi
|
|
|
|
# Clean up TMP_DIR
|
|
cd # Leave TMP_DIR
|
|
/bin/rm -rf $TMP_DIR
|
|
exit 0
|