From 941c322e4378e0ef09f21bfd7b2a337b8f812629 Mon Sep 17 00:00:00 2001
From: Romain Naour <romain.naour@openwide.fr>
Date: Mon, 27 Jan 2014 22:42:53 +0100
Subject: [PATCH 1/1] configure: fix cross-compilation issues

- Use CFLAGS from command line

- Remove "Check C compiler type (optimization options)"
  This test force optimization to -O3
  while it is already set in CFLAGS

- Don't use host CPP

- Remove "Check for Large File Support"
  LFS support is already set in CFLAGS

Note: configure script still use host nm

Signed-off-by: Romain Naour <romain.naour@openwide.fr>
---
 unix/Makefile  |   4 +-
 unix/configure | 161 +--------------------------------------------------------
 2 files changed, 3 insertions(+), 162 deletions(-)

diff --git a/unix/Makefile b/unix/Makefile
index abd0c44..8388c74 100644
--- a/unix/Makefile
+++ b/unix/Makefile
@@ -58,7 +58,7 @@ IZ_OUR_BZIP2_DIR = bzip2
 #   LFLAGS1   flags after output file spec, before obj file list
 #   LFLAGS2   flags after obj file list (libraries, etc)
 CFLAGS_NOOPT = -I. -DUNIX $(LOCAL_ZIP)
-CFLAGS = -O2 $(CFLAGS_NOOPT)
+CFLAGS ?= -O2 $(CFLAGS_NOOPT)
 LFLAGS1 =
 LFLAGS2 = -s
 
@@ -177,7 +177,7 @@ uninstall:
 
 
 flags:  unix/configure
-	sh unix/configure "${CC}" "${CFLAGS_NOOPT}" "${IZ_BZIP2}"
+	sh unix/configure "${CC}" "${CFLAGS}" "${IZ_BZIP2}"
 
 # These symbols, when #defined using -D have these effects on compilation:
 # ZMEM                  - includes C language versions of memset(), memcpy(),
diff --git a/unix/configure b/unix/configure
index 73ba803..57272db 100644
--- a/unix/configure
+++ b/unix/configure
@@ -22,109 +22,9 @@ LFLAGS1=''
 LFLAGS2=''
 LN="ln -s"
 
-CFLAGS_OPT=''
-
 # bzip2
 IZ_BZIP2=${3-}
-CFLAGS_BZ=''
-
-
-echo 'Check C compiler type (optimization options)'
-# Sun C?
-cat > conftest.c << _EOF_
-int main()
-{
-#ifndef __SUNPRO_C
-   bad code
-#endif
-   return 0;
-}
-_EOF_
-$CC $CFLAGS -c conftest.c > /dev/null 2>/dev/null
-if test $? -eq 0; then
-  CFLAGS_OPT='-xO3'
-  echo "  Sun C ($CFLAGS_OPT)"
-else
-  # Tru64 DEC/Compaq/HP C?
-  cat > conftest.c << _EOF_
-int main()
-{
-#ifndef __DECC
-   bad code
-#endif
-   return 0;
-}
-_EOF_
-  $CC $CFLAGS -c conftest.c > /dev/null 2>/dev/null
-  if test $? -eq 0; then
-    CFLAGS_OPT='-O3'
-    echo "  DEC C ($CFLAGS_OPT)"
-  else
-    # HP-UX HP C?
-    cat > conftest.c << _EOF_
-int main()
-{
-#ifdef __GNUC__
-   bad code
-#endif
-#ifndef __hpux
-   bad code
-#endif
-   return 0;
-}
-_EOF_
-    $CC $CFLAGS -c conftest.c > /dev/null 2>/dev/null
-    if test $? -eq 0; then
-      # HP-UX, not GCC.  Lame bundled or real ANSI compiler?
-      CFLAGS_OPT_TRY="+O3 +Onolimit"
-      $CC $CFLAGS $CFLAGS_OPT_TRY -c conftest.c 2>&1 | \
-       grep '(Bundled)' > /dev/null
-      if test $? -ne 0; then
-        CFLAGS_OPT="$CFLAGS_OPT_TRY"
-        echo "  HP-UX ANSI C ($CFLAGS_OPT)"
-      else
-        echo '  HP-UX Bundled C (no opt)'
-      fi
-    else
-      # GNU C?
-      cat > conftest.c << _EOF_
-int main()
-{
-#ifndef __GNUC__
-   bad code
-#endif
-   return 0;
-}
-_EOF_
-      $CC $CFLAGS -c conftest.c > /dev/null 2>/dev/null
-      if test $? -eq 0; then
-        CFLAGS_OPT='-O3'
-        echo "  GNU C ($CFLAGS_OPT)"
-        # Special Mac OS X shared library "ld" option?
-        if test ` uname -s 2> /dev/null ` = 'Darwin'; then
-          lf='-Wl,-search_paths_first'
-          $CC $CFLAGS $lf conftest.c > /dev/null 2>/dev/null
-          if test $? -eq 0; then
-            LFLAGS2="${LFLAGS2} ${lf}"
-          fi
-          rm -f conftest
-        fi
-      else
-        CFLAGS_OPT='-O'
-        echo "  Other-unknown C ($CFLAGS_OPT)"
-      fi
-    fi
-  fi
-fi
-
-# optimization flags
-if test -n "${CFLAGS_OPT}"; then
-  CFLAGS="${CFLAGS} ${CFLAGS_OPT}"
-  CFLAGS_BZ="${CFLAGS_BZ} ${CFLAGS_OPT}"
-fi
-
-
-# bzip2
+CFLAGS_BZ="${CFLAGS}"
 
 echo "Check bzip2 support"
 CC_BZ="${CC}"
@@ -220,13 +120,6 @@ fi
 echo Check for the C preprocessor
 # on SVR4, cc -E does not produce correct assembler files. Need /lib/cpp.
 CPP="${CC} -E"
-# solaris as(1) needs -P, maybe others as well ?
-[ -f /usr/ccs/lib/cpp ] && CPP="/usr/ccs/lib/cpp -P"
-[ -f /usr/lib/cpp ] && CPP=/usr/lib/cpp
-[ -f /lib/cpp ] && CPP=/lib/cpp
-[ -f /usr/bin/cpp ] && CPP=/usr/bin/cpp
-[ -f /xenix ] && CPP="${CC} -E"
-[ -f /lynx.os ] && CPP="${CC} -E"
 
 echo "#include <stdio.h>" > conftest.c
 $CPP conftest.c >/dev/null 2>/dev/null || CPP="${CC} -E"
@@ -398,58 +291,6 @@ else
   fi
 fi
 
-
-# Now we set the 64-bit file environment and check the size of off_t
-# Added 11/4/2003 EG
-# Revised 8/12/2004 EG
-
-echo Check for Large File Support
-cat > conftest.c << _EOF_
-# define _LARGEFILE_SOURCE       /* some OSes need this for fseeko */
-# define _LARGEFILE64_SOURCE
-# define _FILE_OFFSET_BITS 64       /* select default interface as 64 bit */
-# define _LARGE_FILES        /* some OSes need this for 64-bit off_t */
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <stdio.h>
-int main()
-{
-  off_t offset;
-  struct stat s;
-  /* see if have 64-bit off_t */
-  if (sizeof(offset) < 8)
-    return 1;
-  printf("  off_t is %d bytes\n", sizeof(off_t));
-  /* see if have 64-bit stat */
-  if (sizeof(s.st_size) < 8) {
-    printf("  s.st_size is %d bytes\n", sizeof(s.st_size));
-    return 2;
-  }
-  return 3;
-}
-_EOF_
-# compile it
-$CC -o conftest conftest.c >/dev/null 2>/dev/null
-if [ $? -ne 0 ]; then
-  echo -- no Large File Support
-else
-# run it
-  ./conftest
-  r=$?
-  if [ $r -eq 1 ]; then
-    echo -- no Large File Support - no 64-bit off_t
-  elif [ $r -eq 2 ]; then
-    echo -- no Large File Support - no 64-bit stat
-  elif [ $r -eq 3 ]; then
-    echo -- yes we have Large File Support!
-    CFLAGS="${CFLAGS} -DLARGE_FILE_SUPPORT"
-  else
-    echo -- no Large File Support - conftest returned $r
-  fi
-fi
-
-
 # Check for wide char for Unicode support
 # Added 11/24/2005 EG
 
-- 
1.8.5.3

