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.
		
		
		
		
		
			
		
			
				
					
					
						
							113 lines
						
					
					
						
							2.8 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							113 lines
						
					
					
						
							2.8 KiB
						
					
					
				| #! /bin/sh | |
|  | |
| # Script assumes that CXX and CXXFLAGS are set. | |
| # This script tests whether CXX can compile with gmp (and gmpxx) | |
| # by just adding -lgmp (and -lgmpxx) as flags. | |
| # The check entails compiling very simple source files. | |
| 
 | |
| # Exit code is non-zero if "-lgmp" does not work (or an error occurs). | |
| # Exit code is 0 if "-lgmp" works; output is "GMPXX" if -lgmpxx works, | |
| # otherwise "GMP" if just -lgmp works. | |
| 
 | |
| if [ -z "$CXX" ] | |
| then | |
|   echo "$0: ERROR: environment variable CXX not set." | |
|   exit 1 | |
| fi | |
| 
 | |
| 
 | |
| # Now create a temp dir in which to work: | |
| # I use a temp dir so all junk created by the compiler can be removed | |
| # simply by removing the directory -- also I do not need to worry about | |
| # stomping on existing files. | |
| 
 | |
| umask 22 | |
| TODAY=`date "+%Y-%m-%d"` | |
| TIME=`date "+%H:%M:%S"` | |
| TMP_DIR=/tmp/CoCoALib-config-$USER-$TODAY/gmp-try-default-$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 | |
| 
 | |
| # Here is the simple source code we shall use to test for gmp: | |
| cat > TestGMP.C <<EOF | |
| #include "gmp.h" | |
| #include <iostream> | |
|  | |
| int main() | |
| { | |
|   mpz_t i; | |
|   mpz_init(i); | |
|   mpz_set_si(i, 12345); | |
|   std::cout << __GNU_MP_VERSION << "." << __GNU_MP_VERSION_MINOR << "." << __GNU_MP_VERSION_PATCHLEVEL << std::endl; | |
|   mpz_clear(i); | |
| } | |
| EOF | |
| 
 | |
| # Here is the simple source code we shall use to test for gmpxx: | |
| cat > TestGMPXX.C <<EOF | |
| #include "gmpxx.h" | |
| #include <iostream> | |
|  | |
| int main() | |
| { | |
|   mpz_class i(12345); | |
|   std::cout << __GNU_MP_VERSION << "." << __GNU_MP_VERSION_MINOR << "." << __GNU_MP_VERSION_PATCHLEVEL << std::endl; | |
| } | |
| EOF | |
| 
 | |
| # Try different architectures (in case we're on a 32/64 bit platform) | |
| DYN_LINK=ok | |
| for ARCHFLAG in "" "-m64" "-m32" | |
| do | |
|   # Try plain GMP | |
|   $CXX $ARCHFLAG $CXXFLAGS TestGMP.C -o TestGMP -lgmp > /dev/null 2>&1 | |
|   if [ $? -ne 0 -o \! -f TestGMP -o \! -x TestGMP ] | |
|   then | |
|     # compilation failed so try next ARCHFLAG | |
|     continue; | |
|   fi | |
|   ./TestGMP > /dev/null 2>&1 | |
|   if [ $? -ne 0 ] | |
|   then | |
|     DYN_LINK="arch=$ARCHFLAG" | |
|     continue; | |
|   fi   | |
| 
 | |
|   # Default GMP worked, now try GMPXX | |
|   $CXX $ARCHFLAG $CXXFLAGS TestGMPXX.C -o TestGMPXX -lgmpxx -lgmp > /dev/null 2>&1 | |
|   if [ $? -ne 0 ] | |
|   then | |
|     # GMPXX compilation failed, so we have only GMP | |
|     echo GMP | |
|   fi | |
|    | |
|   # GMPXX compilation passed, so check it runs. | |
|   ./TestGMPXX > /dev/null 2>&1 | |
|   if [ $? -ne 0 ] | |
|   then | |
|     # Test prog did not run: accept just GMP (or should it give error???) | |
|     echo GMP | |
|   else | |
|     # We have both GMP and GMPXX | |
|     echo GMPXX | |
|   fi | |
|   # Clean-up TMP_DIR | |
|   cd # leave TMP_DIR | |
|   /bin/rm -rf $TMP_DIR | |
|   exit 0 | |
| done | |
| 
 | |
| if [ DYN_LINK -ne "ok" ] | |
| then | |
|   echo "Problem with GMP dynamic library ($DYN_LINK); perhaps run ldconfig?" | |
|   exit 2 | |
| fi | |
| 
 | |
| # No default GMP installation found | |
| echo "No default GMP installation (with CXXFLAGS=\"$CXXFLAGS\")" | |
| exit 1
 |