#!/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