ea13db21创建于 2024年5月14日历史提交
#!/bin/sh
# configure script for mysqlclient_cj.

# start off configure.log
echo -------------------- > configure.log
echo $0 $* >> configure.log
date >> configure.log

# get source directory
SRCDIR=`dirname $0`
if test $SRCDIR = "."; then
    INC="-Iinclude"
    SRCDIR=""
    LDIR='../lib/'
else
    SRCDIR="$SRCDIR/"
    INC='-I$(SRCDIR)include'
    LDIR="$SRCDIR../lib/"
fi

# set defaults before processing command line options
ARCHS=
shared_ext='.so'
shared=1
gcc=0
gxx=0
debug=0
old_cc="$CC"
old_cflags="$CFLAGS"
old_cxx="$CXX"
old_cxxflags="$CXXFLAGS"

# leave this script, optionally in a bad way
leave()
{
  if test "$*" != "0"; then
    echo "** $0 aborting." | tee -a configure.log
  fi
  rm -f $test.[co] $test $test$shared_ext $test.gcno ./--version
  echo -------------------- >> configure.log
  echo >> configure.log
  echo >> configure.log
  exit $1
}

# process command line options
while test $# -ge 1
do
case "$1" in
    -h* | --help)
      echo 'usage:' | tee -a configure.log
      echo '  configure [--debug] [--archs=ARCHS] [--cross-prefix=PREFIX]' | tee -a configure.log
      echo '    [--target=TARGET] [--cc=CC]' | tee -a configure.log
        exit 0 ;;
    -a*=* | --archs=*) ARCHS=`echo $1 | sed 's/.*=//'`; shift ;;
    -d* | --debug) debug=1; shift ;;
    --cross-prefix=*) CROSS_PREFIX=`echo $1 | sed 's/.*=//'`; shift ;;
    --cc=*) CC=`echo $1 | sed 's/.*=//'`; shift ;;
    --cxx=*) CXX=`echo $1 | sed 's/.*=//'`; shift ;;
    --target=*) TARGET=`echo $1 | sed 's/.*=//'`; shift ;;
    --cflags=*) CFLAGS="${CFLAGS} `echo $1 | sed 's/.*cflags=//'`"; shift ;;
    --cxxflags=*) CXXFLAGS="${CXXFLAGS} `echo $1 | sed 's/.*cxxflags=//'`"; shift ;;
    --ldflags=*) LDFLAGS="${LDFLAGS} `echo $1 | sed 's/.*ldflags=//'`"; shift ;;
    *)
      echo "unknown option: $1" | tee -a configure.log
      echo "$0 --help for help" | tee -a configure.log
      leave 1;;
    esac
done

# establish commands for library building
if "${CROSS_PREFIX}strip" --version >/dev/null 2>/dev/null || test $? -lt 126; then
    STRIP=${STRIP-"${CROSS_PREFIX}strip"}
    test -n "${CROSS_PREFIX}" && echo Using ${STRIP} | tee -a configure.log
else
    STRIP=${STRIP-"strip"}
    test -n "${CROSS_PREFIX}" && echo Using ${STRIP} | tee -a configure.log
fi

# temporary file name
test=ctest$$

# put arguments in log, also put test file in log if used in arguments
show()
{
  case "$*" in
    *$test.c*)
      echo === $test.c === >> configure.log
      cat $test.c >> configure.log
      echo === >> configure.log;;
  esac
  echo $* >> configure.log
}

# check for gcc vs. cc and set compile and link flags based on the system identified by uname
cat > $test.c <<EOF
extern int getchar();
int hello() {return getchar();}
EOF

if test -z "$CC"; then
  echo Checking for ${CROSS_PREFIX}gcc... | tee -a configure.log
  if ${CROSS_PREFIX}gcc -v >/dev/null 2>&1; then
    cc=${CROSS_PREFIX}gcc
  else
    cc=${CROSS_PREFIX}cc
  fi
else
  cc=${CC}
fi

case "$cc" in
  *gcc*) gcc=1 ;;
  *clang*) gcc=1 ;;
esac
case `$cc -v 2>&1` in
  *gcc*) gcc=1 ;;
  *clang*) gcc=1 ;;
esac

show $cc -c $test.c
if test "$gcc" -eq 1 && ($cc -c $test.c) >> configure.log 2>&1; then
  echo ... using gcc >> configure.log
  CC="$cc"
  CFLAGS="${CFLAGS} -fPIC -Wall -Wextra -Wfloat-equal -std=c11 -std=gnu11 -fstack-protector-strong"
  LDFLAGS="${LDFLAGS} -L${SRCDIR}../lib -lmysqlclient"

  if test "$TARGET"; then
    CFLAGS="${CFLAGS} --target=${TARGET}"
    LDFLAGS="${LDFLAGS} --target=${TARGET}"
  fi

  case "$TARGET" in
  aarch64-linux-ohos*)
    CFLAGS="${CFLAGS}" ;;
  esac

  if test $debug -eq 1; then
    CFLAGS="${CFLAGS} -g"
  else
    CFLAGS="${CFLAGS} -O2"
  fi
  if test -z "$uname"; then
    uname=`(uname -s || echo unknown) 2>/dev/null`
  fi
  case "$uname" in
  Linux* | linux* | *-linux* | GNU | GNU/* | solaris*)
        LDSHARED=${LDSHARED-"$cc -shared"}
        LDFLAGS="${LDFLAGS} -Wl,-z,relro,-z,now,-z,noexecstack" ;;
  MINGW* | mingw* | *-mingw*)
        rm -f $test.[co] $test $test$shared_ext
        echo "If this doesn't work for you, try win32/Makefile.gcc." | tee -a configure.log
        LDSHARED=${LDSHARED-"$cc -shared"}
        LDFLAGS="${LDFLAGS} -Wl,--nxcompat -Wl,--dynamicbase -Wl,--no-seh"
        shared_ext='.dll'
        EXE='.exe' ;;
  *)
        LDSHARED=${LDSHARED-"$cc -shared"} ;;
  esac
fi

# temporary file name
test=ctest$$

# check for g++ vs. cxx and set compile and link flags based on the system identified by uname
cat > $test.c <<EOF
extern int getchar();
int hello() {return getchar();}
EOF

if test -z "$CXX"; then
  echo Checking for ${CROSS_PREFIX}g++... | tee -a configure.log
  if ${CROSS_PREFIX}g++ -v >/dev/null 2>&1; then
    cxx=${CROSS_PREFIX}g++
  else
    cxx=${CROSS_PREFIX}cxx
  fi
else
  cxx=${CXX}
fi

case "$cxx" in
  *g++*) gxx=1 ;;
  *clang*) gxx=1 ;;
esac
case `$cxx -v 2>&1` in
  *g++*) gxx=1 ;;
  *clang*) gxx=1 ;;
esac

show $cxx -c $test.c
if test "$gxx" -eq 1 && ($cxx -c $test.c) >> configure.log 2>&1; then
  echo ... using g++ >> configure.log
  CXX="$cxx"
  CXXFLAGS="${CXXFLAGS} -fPIC -Wall -Wextra -Wfloat-equal -fstack-protector-strong -std=c++1z -std=gnu++1z"
  LDFLAGS="${LDFLAGS} -L${SRCDIR}../lib -lmysqlclient"

  if test "$TARGET"; then
    CXXFLAGS="${CXXFLAGS} --target=${TARGET}"
    LDFLAGS="${LDFLAGS} --target=${TARGET}"
  fi

  case "$TARGET" in
  aarch64-linux-ohos*)
    CXXFLAGS="${CXXFLAGS}" ;;
  esac

  if test $debug -eq 1; then
    CXXFLAGS="${CXXFLAGS} -g"
  else
    CXXFLAGS="${CXXFLAGS} -O2"
  fi
  if test -z "$uname"; then
    uname=`(uname -s || echo unknown) 2>/dev/null`
  fi
  case "$uname" in
  Linux* | linux* | *-linux* | GNU | GNU/* | solaris*)
        CPPLDSHARED=${CPPLDSHARED-"$cxx -shared"} ;;
        #LDFLAGS="${LDFLAGS} -Wl,-z,relro,-z,now,-z,noexecstack" ;;
  MINGW* | mingw* | *-mingw*)
        rm -f $test.[co] $test $test$shared_ext
        echo "If this doesn't work for you, try win32/Makefile.g++." | tee -a configure.log
        CPPLDSHARED=${LCPPLDSHAREDDSHARED-"$cxx -shared"}
        #LDFLAGS="${LDFLAGS} -Wl,--nxcompat -Wl,--dynamicbase -Wl,--no-seh"
        shared_ext='.dll'
        EXE='.exe' ;;
  *)
        CPPLDSHARED=${CPPLDSHARED-"$cxx -shared"} ;;
  esac
fi

# destination names for shared library if not defined above
SHAREDLIB=${LDIR}${SHAREDLIB-"libmysqlclient_cj$shared_ext"}

echo >> configure.log

ALL=$SHAREDLIB

# show the results in the log
echo >> configure.log
echo ALL = $ALL >> configure.log
echo CC = $CC >> configure.log
echo CXX = $CXX >> configure.log
echo CFLAGS = $CFLAGS >> configure.log
echo CXXFLAGS = $CFLAGS >> configure.log
echo CPP = $CPP >> configure.log
echo EXE = $EXE >> configure.log
echo LDFLAGS = $LDFLAGS >> configure.log
echo LDSHARED = $LDSHARED >> configure.log
echo CPPLDSHARED = $CPPLDSHARED >> configure.log
echo SHAREDLIB = $SHAREDLIB >> configure.log
echo STRIP = $STRIP >> configure.log
echo SRCDIR = $SRCDIR >> configure.log
echo uname = $uname >> configure.log

# udpate Makefile with the configure results
sed < ${SRCDIR}Makefile.in "
/^CC *=/s#=.*#=$CC#
/^CXX *=/s#=.*#=$CXX#
/^CFLAGS *=/s#=.*#=$CFLAGS#
/^CXXFLAGS *=/s#=.*#=$CXXFLAGS#
/^LDFLAGS *=/s#=.*#=$LDFLAGS#
/^LDSHARED *=/s#=.*#=$LDSHARED#
/^CPPLDSHARED *=/s#=.*#=$CPPLDSHARED#
/^CPP *=/s#=.*#=$CPP#
/^SHAREDLIB *=/s#=.*#=$SHAREDLIB#
/^STRIP *=/s#=.*#=$STRIP#
/^EXE *=/s#=.*#=$EXE#
/^SRCDIR *=/s#=.*#=$SRCDIR#
/^INC *=/s#=.*#=$INC#
/^all: */s#:.*#: $ALL#
" > Makefile

echo >> configure.log

echo Create Makefile success. | tee -a configure.log

# done
leave 0