289 lines
6.4 KiB
Bash
289 lines
6.4 KiB
Bash
#!/bin/bash
|
|
|
|
. "$(dirname "$0")/scripts/shini.sh"
|
|
|
|
print_help() {
|
|
shini_parse "config.ini"
|
|
cat << END
|
|
Usage: ./configure [--option] ...
|
|
|
|
options:
|
|
--prefix=PREFIX (DEFAULT: $PREFIX)
|
|
--incdir=INSTALL_INCDIR (DEFAULT: $PREFIX/include/hv)
|
|
--libdir=INSTALL_LIBDIR (DEFAULT: $PREFIX/lib)
|
|
|
|
--with-MODULE
|
|
--without-MODULE
|
|
--enable-FEATURE
|
|
--disable-FEATURE
|
|
|
|
modules:
|
|
--with-protocol compile protocol module? (DEFAULT: $WITH_PROTOCOL)
|
|
--with-evpp compile evpp module? (DEFAULT: $WITH_EVPP)
|
|
--with-http compile http module? (DEFAULT: $WITH_HTTP)
|
|
--with-http-client compile http client module? (DEFAULT: $WITH_HTTP_CLIENT)
|
|
--with-http-server compile http server module? (DEFAULT: $WITH_HTTP_SERVER)
|
|
--with-mqtt compile mqtt module? (DEFAULT: $WITH_MQTT)
|
|
|
|
features:
|
|
--enable-uds enable Unix Domain Socket? (DEFAULT: $ENABLE_UDS)
|
|
--enable-windump enable Windows coredump? (DEFAULT: $ENABLE_WINDUMP)
|
|
|
|
dependencies:
|
|
--with-curl compile with curl? (DEFAULT: $WITH_CURL)
|
|
--with-nghttp2 compile with nghttp2? (DEFAULT: $WITH_NGHTTP2)
|
|
--with-openssl compile with openssl? (DEFAULT: $WITH_OPENSSL)
|
|
--with-gnutls compile with gnutls? (DEFAULT: $WITH_GNUTLS)
|
|
--with-mbedtls compile with mbedtls? (DEFAULT: $WITH_MBEDTLS)
|
|
|
|
rudp:
|
|
--with-kcp compile with kcp? (DEFAULT: $WITH_KCP)
|
|
|
|
END
|
|
}
|
|
|
|
mkdir tmp 2>/dev/null
|
|
while [ -n "$1" ]
|
|
do
|
|
opt="$1"
|
|
KEY=""
|
|
VAL=yes
|
|
case $opt in
|
|
--help)
|
|
print_help
|
|
exit 0
|
|
;;
|
|
--prefix=*)
|
|
KEY="PREFIX"
|
|
VAL=${opt:9}
|
|
;;
|
|
--incdir=*)
|
|
KEY="INSTALL_INCDIR"
|
|
VAL=${opt:9}
|
|
;;
|
|
--libdir=*)
|
|
KEY="INSTALL_LIBDIR"
|
|
VAL=${opt:9}
|
|
;;
|
|
--with-*)
|
|
KEY="WITH_${opt:7}"
|
|
;;
|
|
--without-*)
|
|
KEY="WITH_${opt:10}"
|
|
VAL=no
|
|
;;
|
|
--enable-*)
|
|
KEY="ENABLE_${opt:9}"
|
|
;;
|
|
--disable-*)
|
|
KEY="ENABLE_${opt:10}"
|
|
VAL=no
|
|
;;
|
|
*)
|
|
print_help
|
|
exit 255
|
|
;;
|
|
esac
|
|
|
|
if [ -n $KEY ]; then
|
|
FEATURE=$(echo "$KEY" | tr "a-z-" "A-Z_")
|
|
if [ ! -f tmp/config.mk ]; then
|
|
cp config.ini tmp/config.mk
|
|
fi
|
|
shini_write "tmp/config.mk" "" "$FEATURE" "$VAL"
|
|
fi
|
|
|
|
shift 1
|
|
done
|
|
|
|
# config.mk
|
|
echo "[config.mk]"
|
|
if [ -f tmp/config.mk ]; then
|
|
mv tmp/config.mk config.mk
|
|
shini_write "config.mk" "" "CONFIG_DATE" "$(date +%Y%m%d)"
|
|
fi
|
|
cat config.mk
|
|
echo ""
|
|
|
|
# Checks for compiler
|
|
echo -e "\nchecking for compiler..."
|
|
if [ $CROSS_COMPILE ]; then
|
|
CC=${CROSS_COMPILE}gcc
|
|
CXX=${CROSS_COMPILE}g++
|
|
fi
|
|
|
|
if [ ! $CC ]; then
|
|
CC=gcc
|
|
CXX=g++
|
|
fi
|
|
CC_VERSION=`$CC --version 2>&1 | head -n 1`
|
|
|
|
echo "CC = $CC"
|
|
echo "CXX = $CXX"
|
|
echo "$CC_VERSION"
|
|
|
|
# Checks for os
|
|
echo -e "\nchecking for os..."
|
|
HOST_OS=`uname -s`
|
|
HOST_ARCH=`uname -m`
|
|
TARGET_PLATFORM=`$CC -v 2>&1 | grep Target | sed 's/Target: //'`
|
|
TARGET_ARCH=`echo $TARGET_PLATFORM | awk -F'-' '{print $1}'`
|
|
|
|
case $TARGET_PLATFORM in
|
|
*mingw*) TARGET_OS=Windows ;;
|
|
*android*) TARGET_OS=Android ;;
|
|
*darwin*) TARGET_OS=Darwin ;;
|
|
*) TARGET_OS=Linux ;;
|
|
esac
|
|
|
|
echo "HOST_OS = $HOST_OS"
|
|
echo "HOST_ARCH = $HOST_ARCH"
|
|
echo "TARGET_PLATFORM = $TARGET_PLATFORM"
|
|
echo "TARGET_OS = $TARGET_OS"
|
|
echo "TARGET_ARCH = $TARGET_ARCH"
|
|
|
|
# hconfig.h
|
|
echo -e "\n>> hconfig.h"
|
|
confile=hconfig.h
|
|
cat << END > $confile
|
|
#ifndef HV_CONFIG_H_
|
|
#define HV_CONFIG_H_
|
|
|
|
END
|
|
|
|
write_define() {
|
|
cat << END >> hconfig.h
|
|
#ifndef $macro
|
|
#define $macro $value
|
|
#endif
|
|
|
|
END
|
|
}
|
|
|
|
CheckHeaderExists() {
|
|
rm tmp/check 2>/dev/null
|
|
cat << END > tmp/check.c
|
|
#include <$header>
|
|
|
|
int main() {
|
|
return 0;
|
|
}
|
|
|
|
END
|
|
$CC -o tmp/check tmp/check.c 2>/dev/null
|
|
if [ -x tmp/check ]; then
|
|
value=1
|
|
else
|
|
value=0
|
|
fi
|
|
}
|
|
|
|
CheckSymbolExists() {
|
|
CheckHeaderExists
|
|
if [ $value -eq 0 ]; then
|
|
return;
|
|
fi
|
|
rm tmp/check 2>/dev/null
|
|
cat << END > tmp/check.c
|
|
#include <$header>
|
|
|
|
int $function(void** pp) {return 0;}
|
|
int main() {
|
|
void* p;
|
|
return $function(&p);
|
|
}
|
|
|
|
END
|
|
$CC -o tmp/check tmp/check.c 2>/dev/null
|
|
if [ -x tmp/check ]; then
|
|
value=0
|
|
else
|
|
value=1
|
|
fi
|
|
}
|
|
|
|
check_header() {
|
|
echo -n "checking for $header... "
|
|
CheckHeaderExists
|
|
if [ $value -eq 0 ]; then
|
|
echo "no"
|
|
else
|
|
echo "yes"
|
|
fi
|
|
macro=HAVE_$(echo $header | tr a-z./ A-Z__)
|
|
write_define
|
|
}
|
|
|
|
check_function() {
|
|
echo -n "checking for $function... "
|
|
CheckSymbolExists
|
|
if [ $value -eq 0 ]; then
|
|
echo "no"
|
|
else
|
|
echo "yes"
|
|
fi
|
|
macro=HAVE_$(echo $function | tr a-z A-Z)
|
|
write_define
|
|
}
|
|
|
|
check_option() {
|
|
value=$(eval echo \$$option)
|
|
echo "checking for $option=$value"
|
|
if [ "$value" == "yes" ]; then
|
|
cat << END >> $confile
|
|
#define $option 1
|
|
END
|
|
else
|
|
cat << END >> $confile
|
|
/* #undef $option */
|
|
END
|
|
fi
|
|
}
|
|
|
|
# Checks for programs
|
|
|
|
# Checks for libraries
|
|
|
|
# Checks for header files
|
|
header=stdbool.h && check_header
|
|
header=stdint.h && check_header
|
|
header=stdatomic.h && check_header
|
|
header=sys/types.h && check_header
|
|
header=sys/stat.h && check_header
|
|
header=sys/time.h && check_header
|
|
header=fcntl.h && check_header
|
|
header=pthread.h && check_header
|
|
header=endian.h && check_header
|
|
header=sys/endian.h && check_header
|
|
|
|
# Checks for functions
|
|
function=gettid && header=unistd.h && check_function
|
|
function=strlcpy && header=string.h && check_function
|
|
function=strlcat && header=string.h && check_function
|
|
function=clock_gettime && header=time.h && check_function
|
|
function=gettimeofday && header=sys/time.h && check_function
|
|
function=pthread_spin_lock && header=pthread.h && check_function
|
|
function=pthread_mutex_timedlock && header=pthread.h && check_function
|
|
function=sem_timedwait && header=semaphore.h && check_function
|
|
function=pipe && header=unistd.h && check_function
|
|
function=socketpair && header=sys/socket.h && check_function
|
|
function=eventfd && header=sys/eventfd.h && check_function
|
|
function=setproctitle && header=unistd.h && check_function
|
|
|
|
# Checks for options
|
|
source config.mk 2>/dev/null
|
|
option=WITH_OPENSSL && check_option
|
|
option=WITH_GNUTLS && check_option
|
|
option=WITH_MBEDTLS && check_option
|
|
option=ENABLE_UDS && check_option
|
|
option=USE_MULTIMAP && check_option
|
|
option=WITH_KCP && check_option
|
|
|
|
# end confile
|
|
cat << END >> $confile
|
|
|
|
#endif // HV_CONFIG_H_
|
|
END
|
|
|
|
echo "configure done."
|