289 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
		
			
		
	
	
			289 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
| 
								 | 
							
								#!/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."
							 |