#!/bin/sh # Only LP64, LLP64 and ILP32 memory models are supported echo echo "removing old objects and setting correct permissions ..." make clean > /dev/null cp makefile_original_install makefile_install echo "discovering platform and default memory model ..." echo case `uname` in Darwin) true ${os_type:=MAC_OSX} ;; Linux) true ${os_type:=LINUX} ;; FreeBSD) true ${os_type:=_BSD} ;; NetBSD) true ${os_type:=_BSD} ;; OpenBSD) true ${os_type:=_BSD} ;; SunOS) true ${os_type:=SUNOS} ;; AIX) true ${os_type:=AIX} ;; OSF1) true ${os_type:=TRU64} ;; MINGW32_*) true ${os_type:=WINDOWS} ;; MINGW64_*) true ${os_type:=WINDOWS} ;; CYGWIN*) true ${os_type:=CYGWIN} ;; OS/2) true ${os_type:=OS2} ;; *) echo Could not discover your OS platform use one of the following commands: make help ;; esac cat > test-memorymodel.c < * * return a string with the type of memory model the current compiler is using. */ #include int main(int argc, char** argv) { short sc = sizeof(char) * 8; short ss = sizeof(short) * 8; short si = sizeof(int) * 8; short sl = sizeof(long) * 8; short sp = sizeof(void*) * 8; if (si == 32 && sl == 64 && sp == 64) { printf("LP64\n"); return 0; } if (si == 64 && sl == 64 && sp == 64) { printf("ILP64\n"); return 0; } if (si == 32 && sl == 32 && sp == 64) { printf("LLP64\n"); return 0; } if (si == 32 && sl == 32 && sp == 32) { printf("ILP32\n"); return 0; } if (si == 16 && sl == 32 && sp == 32) { printf("LP32\n"); return 0; } printf("UNKNOWN\n"); return 1; } EOF if [ `which gcc` ] ; then gcc test-memorymodel.c -o test-memorymodel >/dev/null else cc test-memorymodel.c -o test-memorymodel >/dev/null fi true ${memory_model:=`./test-memorymodel`} # clean up rm -f test-memorymodel* echo "detected memory model ${memory_model}" echo "detected Operating System ${os_type}" echo "creating makefile_build ..." echo if [ ${os_type} = MAC_OSX ] ; then cp makefile_darwinLP64_utf8_ffi makefile_build elif [ ${os_type} = LINUX ] ; then if [ -f /etc/redhat-release ] ; then libffi_version=$(ls -d /usr/lib*/libffi*/include) if [ -z "${libffi_version}" ] ; then libffi_version="/usr/include" fi if [ ${memory_model} = LP64 ] ; then sed "s,LIBFFI_VERSION,${libffi_version},g" makefile_linuxLP64_redhat_utf8_ffi > makefile_build else sed "s,LIBFFI_VERSION,${libffi_version},g" makefile_linux_redhat_utf8_ffi > makefile_build fi else if [ ${memory_model} = LP64 ] ; then cp makefile_linuxLP64_utf8_ffi makefile_build else cp makefile_linux_utf8_ffi makefile_build fi fi elif [ ${os_type} = _BSD ] ; then if [ ${memory_model} = LP64 ] ; then if [ -f /usr/local/include/ffi.h ] ; then cp makefile_bsdLP64_utf8_ffi makefile_build else cp makefile_bsdLP64_utf8 makefile_build fi else cp makefile_bsd_utf8 makefile_build fi elif [ ${os_type} = SUNOS ] ; then if [ ${memory_model} = LP64 ] ; then cp makefile_sunosLP64_uf8 makefile_build else cp makefile_sunos_utf8 makefile_build fi elif [ ${os_type} = AIX ] ; then if [ ${memory_model} = LP64 ] ; then cp makefile_aixLP64_utf8_gcc makefile_build else cp makefile_aix_utf8_gcc makefile_build fi elif [ ${os_type} = TRU64 ] ; then cp makefile_tru64 makefile_build elif [ ${os_type} = WINDOWS ] ; then if [ ${memory_model} = LLP64 ] ; then cp makefile_mingw64_ffi makefile_build else cp makefile_mingw_ffi makefile_build fi elif [ ${os_type} = CYGWIN ] ; then cp makefile_cygwin makefile_build if [ ${memory_model} = LP64 ]; then cp makefile_cygwinLP64 makefile_build else cp makefile_cygwin makefile_build fi elif [ ${os_type} = OS2 ] ; then cp makefile_os2 makefile_build fi if [ ${os_type} = MAC_OSX ] ; then echo "to make for 64-bit on MAC_OSX type:" else echo "to make for ${memory_model} on ${os_type} type:" fi echo " make" echo "to make for any other system do:" echo " make -f makefile_xxx" echo "where makefile_xxx is one of the preconfigured makefiles" echo