#!/bin/bash

# Created by jiaqiang.ye@lnxall.com
# Opensource packages definitiion
# 2022-06-26

open_dummy_config() {
    # nothing TODO for dummy config
    return 0
}

lua51_config() {
	return 0
}

lua51_build() {
	LNX_LUA_CFLAGS="${LNX_CFLAGS} -DLUA_LNXALL_ROOT=\\\"${LNX_PREFIX}/\\\"" \
		make CC=${LNX_CC} V=1 INSTALL_TOP=${LNXDESTPFX} -j1 linux install
	return $?
}

zlib_build() {
	local retv=0
	make CC="${LNX_CC}" LNX_CFLAGS="${LNX_CFLAGS}" TCPREFIX="${LNX_TCP}-" -j${OJOBN:-8}
	retv=$?
	if [ ${retv} -eq 0 ] ; then
		make CC="${LNX_CC}" LNX_CFLAGS="${LNX_CFLAGS}" TCPREFIX="${LNX_TCP}-" \
			DESTDIR="${LNXDESTDIR}" install
		retv=$?
	fi
	return $retv
}

openssl_config() {
	local platname
	if [[ "${LNX_TCP}" =~ ^arm-.+ ]] ; then
		platname=linux-armv4
	elif [[ "${LNX_TCP}" =~ ^x86_64-.+ ]] ; then
		platname=linux-x86_64
	elif [[ "${LNX_TCP}" =~ ^aarch64-.+ ]] ; then
		platname=linux-aarch64
	else
		echo "Error, unknown platform: '${LNX_TCP}'"
		return 1
	fi
	perl ./Configure --prefix=${LNX_PREFIX} --openssldir=${LNX_PREFIX}/ssldir \
		--cross-compile-prefix=${LNX_TCP}- --release no-static-engine threads \
		LDFLAGS="${LNX_LDFLAGS}" CFLAGS="${LNX_CFLAGS}" ${platname}
	return $?
}

libffi_config() {
	mkdir -p ./build_dir && cd ./build_dir || return 1

	../configure --prefix=${LNX_PREFIX} --host="${LNX_TCP}" CC=${LNX_CC} \
		CFLAGS="${LNX_CFLAGS}" --enable-shared=yes --enable-static=no \
		--enable-portable-binary --disable-docs LDFLAGS="${LNX_LDFLAGS}"
	return $?
}

libffi_build() {
	cd ./build_dir || return 1

	local retv=0
	make V=1 -j${OJOBN:-8} && make V=1 DESTDIR=${LNXDESTDIR} install ; retv=$?
	if [ $retv -eq 0 ] ; then
		cd "${LNXDESTPFX}/lib64" 2>/dev/null && \
			mv -f -v libffi.so* ../lib/
	fi
	return $retv
}

expat_config() {
	mkdir -p ./build_dir && cd ./build_dir || return 1

	../configure --prefix=${LNX_PREFIX} CC=${LNX_CC} CFLAGS="${LNX_CFLAGS}" \
		--host=${LNX_TCP} LDFLAGS="${LNX_LDFLAGS}" --without-xmlwf --without-examples \
		--without-tests --enable-static=no --without-docbook
	return $?
}

expat_build() {
	cd ./build_dir || return 1

	make V=1 -j${OJOBN:-8} && make V=1 DESTDIR=${LNXDESTDIR} install
	return $?
}

openssl_build() {
	local retv=0
	make -j${OJOBN:-8} V=1 DESTDIR=${LNXDESTDIR} ; retv=$?
	[ ${retv} -ne 0 ] && return 1

	make V=1 DESTDIR=${LNXDESTDIR} \
		install_sw install_ssldirs install_ssldirs ; retv=$?

	if [ $retv -eq 0 ] ; then
		cd "${LNXDESTPFX}/lib64" 2>/dev/null && \
			mv -f -v  libcrypto.so* libssl.so* ../lib/
	fi
	return ${retv}
}

lua_openssl_build() {
	local retv=0
	make V=1 CROSS= CC=${LNX_CC} AR=${LNX_TCP}-ar LUA_CFLAGS="${LNX_CFLAGS} -I${LNXDESTPFX}/include" \
		PREFIX=${LNXDESTPFX} LD=${LNX_CC} DESTDIR=${LNXDESTDIR} OPENSSL_LIBS="-L${LNXDESTPFX}/lib" T=openssl openssl.so install ; retv=$?
	[ ${retv} -ne 0 ] && return 1

	mkdir -p ${LNXDESTPFX}/lib/lua
	cp -v openssl.so ${LNXDESTPFX}/lib/lua/
	return $?
}

python3_config() {
	local retv=0
	local OLDP="${PWD}"

	local HOST_PY3DIR='/opt/Python3.9.13/bin'
	if [ ! -d "${HOST_PY3DIR}" ] ; then
		echo "Error, directory not found: '${HOST_PY3DIR}'" 1>&2
		[ -f 'Python3.9.13.tar.xz' ] && \
			echo "To fix this problem: sudo tar -Jxf ${OLDP}/Python3.9.13.tar.xz -C /opt" 1>&2
		return 1
	fi

	local SSLARG=""
	srcpkg_enabled openssl && SSLARG="--with-openssl=${LNXDESTPFX}"
	mkdir -p ./build_dir && cd ./build_dir || return 2

	PATH="${HOST_PY3DIR}:${PATH}" ../configure --prefix="${LNX_PREFIX}" \
		CC="${LNX_CC}" CFLAGS="${LNX_CFLAGS} -Os -I${LNXDESTPFX}/include" \
		LDFLAGS="${LNX_LDFLAGS}" CXX="${LNX_CXX}" CXXFLAGS="${LNX_CFLAGS}" \
		--host=${LNX_TCP} --build=x86_64-linux-gnu \
		--enable-shared --enable-optimizations --enable-ipv6 ${SSLARG} \
		--enable-big-digits=30 --with-system-ffi=no --with-system-expat=no \
		--with-ensurepip=no ac_cv_file__dev_ptmx=yes ac_cv_file__dev_ptc=no \
		ac_cv_buggy_getaddrinfo=no ac_cv_header_uuid_h=no
	return $?
}

python3_build() {
	local retv=0
	local HOST_PY3DIR='/opt/Python3.9.13/bin'

	cd ./build_dir || return 1
	PATH="${HOST_PY3DIR}:${PATH}" make V=1 -j${OJOBN:-8} ; retv=$?
	if [ ${retv} -eq 0 ] ; then
		PATH="${HOST_PY3DIR}:${PATH}" make V=1 DESTDIR=${LNXDESTDIR} install
		retv=$?
	fi

	# remove lib/python3.9/test directory to shrink disk space
	if [ $retv -eq 0 ] ; then
		local testdir="${LNXDESTPFX}/lib/python3.9/test"
		if [ -d "${testdir}" ] ; then
			echo "Deleting directory: \"${testdir}\"..."
			rm -rf "${testdir}"
		fi
	fi
	return $retv
}

cjson_build() {
    make CC=${LNX_CC} PREFIX=${LNX_PREFIX} CFLAGS="${LNX_CFLAGS}" -j1 || return 1
    make CC=${LNX_CC} PREFIX=${LNX_PREFIX} DESTDIR="${LNXDESTDIR}" install
    return $?
}

open_common_clean() {
    [ -d 'build_dir' ] && rm -rf build_dir
    [ -f Makefile -o -f GNUmakefile -o -f makefile ] && make clean
    return 0
}

uthash_build() {
    local INCLUDE="${LNXDESTDIR}/${LNX_PREFIX}/include"
    mkdir -p "${INCLUDE}/uthash" || return 1
    cp -r -f src/* "${INCLUDE}/uthash/"
    return $?
}

mosquitto_config() {
    local retv=1
    local SSLDIR="${STAGING_DIR}/usr"
    if [ ! -e "${SSLDIR}/include/openssl" ] ; then
        SSLDIR="${LNXDESTPFX}"
    fi
    if [ ! -e "${SSLDIR}/include/openssl" ] ; then
        echo "Error, no openssl library found" 1>&2
        return $retv
    fi
    echo "SSLDIR: ${SSLDIR}"

    mkdir -p build_dir && cd ./build_dir && {
        cmake -DCMAKE_BUILD_TYPE=release -DCMAKE_INSTALL_PREFIX="${LNX_PREFIX}" \
            -DCMAKE_C_COMPILER=${LNX_CC} -DCMAKE_CXX_COMPILER=${LNX_CXX} \
            -DCMAKE_C_FLAGS="${LNX_CFLAGS} -I${LNXDESTPFX}/include" \
            "-DCMAKE_C_COMPILER_RANLIB=$(which ${LNX_TCP}-ranlib)" "-DCMAKE_AR=$(which ${LNX_TCP}-ar)" \
            -DWITH_STATIC_LIBRARIES=OFF -DWITH_SOCKS=OFF -DWITH_TLS=ON \
            -DWITH_BROKER=ON -DWITH_CLIENTS=ON -DWITH_APPS=ON -DWITH_TLS_PSK=ON \
            -DWITH_EC=ON -DDOCUMENTATION=OFF -DCJSON_DIR="${LNXDESTPFX}" \
            -DOPENSSL_INCLUDE_DIR="${SSLDIR}/include" \
            -DOPENSSL_CRYPTO_LIBRARY="${SSLDIR}/lib/libcrypto.so" \
            -DOPENSSL_SSL_LIBRARY="${SSLDIR}/lib/libssl.so" \
            -DCMAKE_EXE_LINKER_FLAGS="${LNX_LDFLAGS} -Wl,-rpath-link=${LNXDESTPFX}/lib -lpthread" \
            -DCMAKE_SHARED_LINKER_FLAGS="${LNX_LDFLAGS} -Wl,-rpath-link=${LNXDESTPFX}/lib -lpthread" \
            -DCMAKE_MODULE_LINKER_FLAGS="${LNX_LDFLAGS} -Wl,-rpath-link=${LNXDESTPFX}/lib -lpthread" ..
        retv=$?
		# -DCJSON_INCLUDE_DIR="${LNXDESTPFX}/include" \
		# -DCJSON_LIBRARY="${LNXDESTPFX}/lib/libcjson.so"
        cd ..
    }
    return $retv
}

mosquitto_build() {
    local retv=1
    cd ./build_dir && {
        make VERBOSE=1 -j${OJOBN:-8} ; retv=$?
        if [ $retv -eq 0 ] ; then
            make DESTDIR=${LNXDESTDIR} VERBOSE=1 install ; retv=$?
        fi
        cd ..
    }

	if [ $retv -eq 0 ] ; then
		cd "${LNXDESTPFX}/lib64" 2>/dev/null
		[ $? -eq 0 ] && mv -v -f libmosquitto*.so* ../lib/ 2>/dev/null
	fi
    return $retv
}

bson_config() {
    local retv=1
    local extra_cflags=""
    [[ "${LNX_CC}" =~ musl ]] && extra_cflags="-U_GNU_SOURCE"
    mkdir -p build_dir && cd ./build_dir && {
        cmake -DCMAKE_BUILD_TYPE=release -DCMAKE_INSTALL_PREFIX="${LNX_PREFIX}" \
            -DCMAKE_C_COMPILER=${LNX_CC} -DCMAKE_CXX_COMPILER=${LNX_CXX} \
            "-DCMAKE_C_COMPILER_RANLIB=$(which ${LNX_TCP}-ranlib)" "-DCMAKE_AR=$(which ${LNX_TCP}-ar)" \
            -DCMAKE_C_FLAGS="${LNX_CFLAGS} -I${LNXDESTPFX}/include ${extra_cflags}" \
            -DENABLE_BSON=ON -DENABLE_STATIC=OFF -DENABLE_ZSTD=OFF \
            -DENABLE_TESTS=OFF -DENABLE_SSL=OFF \
            -DCMAKE_EXE_LINKER_FLAGS="${LNX_LDFLAGS}" \
            -DCMAKE_SHARED_LINKER_FLAGS="${LNX_LDFLAGS}" \
            -DCMAKE_MODULE_LINKER_FLAGS="${LNX_LDFLAGS}" ..
        retv=$?
        cd ..
    }
    return $retv
}

bson_build() {
    local retv=1
	if cd ./build_dir ; then
        make VERBOSE=1 -j${OJOBN:-8} ; retv=$?
        if [ $retv -eq 0 ] ; then
            make DESTDIR=${PWD}/install_dir VERBOSE=1 install ; retv=$?
        fi
        if [ $retv -eq 0 ] ; then
            mkdir -p "${LNXDESTPFX}"/{include,lib}
            rm -rf "${LNXDESTPFX}/include/libbson-1.0"
            cp -r -p -P "./install_dir/${LNX_PREFIX}/include/libbson-1.0" "${LNXDESTPFX}/include/"
            cp -r -p -P "./install_dir/${LNX_PREFIX}/lib"/libbson-1.0.so* "${LNXDESTPFX}/lib/"
        fi
	fi
    return $retv
}

luaposix_build() {
    local retv=0
    lua build-aux/luke CC=${LNX_CC} CFLAGS="${LNX_CFLAGS}" \
        LDFLAGS="${LNX_LDFLAGS}" ; retv=$?
    [ ${retv} -ne 0 ] && return 1

    lua build-aux/luke CC=${LNX_CC} CFLAGS="${LNX_CFLAGS}" \
        LDFLAGS="${LNX_LDFLAGS}" install ; retv=$?
    return $retv
}

luaposix_clean() {
    find ./ -name '*.o' -print -delete
    find ./ -name '*.so'  -print -delete
    return 0
}

luamosquitto_build() {
    make CC=${LNX_CC} LUA_VERSION=5.1 LUA_LIBDIR="${LNXDESTPFX}/lib" \
        LUA_CFLAGS="${LNX_CFLAGS} -I${LNXDESTPFX}/include" \
        LUA_LDFLAGS="${LNX_LDFLAGS}" mosquitto.so -j1 install
    return $?
}

luabit32_build() {
    ${LNX_CC} -shared ${LNX_CFLAGS} -fPIC \
        "-I${LNXDESTPFX}/include" -I ./c-api -o bit32.so lbitlib.c || return 1
    mkdir -p "${LNXDESTPFX}/lib/lua"
    cp -v bit32.so "${LNXDESTPFX}/lib/lua/"
    return $?
}

luabitop_build() {
    ${LNX_CC} -shared ${LNX_CFLAGS} -DLUA_USE_LINUX -DLUA_NUMBER_DOUBLE -fPIC \
        "-I${LNXDESTPFX}/include" -o bit.so bit.c || return 1
    mkdir -p "${LNXDESTPFX}/lib/lua"
    cp -v bit.so "${LNXDESTPFX}/lib/lua/"
    return $?
}

lua_lbase64_build() {
    ${LNX_CC} -shared ${LNX_CFLAGS} -fPIC \
        "-I${LNXDESTPFX}/include" -o base64.so lbase64.c || return 1
    mkdir -p "${LNXDESTPFX}/lib/lua"
    cp -v bcd.lua base64.so "${LNXDESTPFX}/lib/lua/"
    return $?
}

lua_lsyslog_build() {
    ${LNX_CC} -shared ${LNX_CFLAGS} -fPIC \
        "-I${LNXDESTPFX}/include" -o syslog.so lsyslog.c || return 1
    mkdir -p "${LNXDESTPFX}/lib/lua"
    cp -v syslog.so "${LNXDESTPFX}/lib/lua/"
    return $?
}

lua_lsqlite3_build() {
    ${LNX_CC} -shared ${LNX_CFLAGS} -fPIC \
        "-I${LNXDESTPFX}/include" -o lsqlite3.so lsqlite3.c \
		"-L${LNXDESTPFX}/lib" -lsqlite3 || return 1
    mkdir -p "${LNXDESTPFX}/lib/lua"
    cp -v lsqlite3.so "${LNXDESTPFX}/lib/lua/"
    return $?
}

luabit32_clean() {
    rm -rf *.so *.o
    return 0
}

librs232_config() {
    local retv=0
    if [ ! -e configure ] ; then
        ./autogen.sh ; retv=$?
        [ $retv -ne 0 ] && return 1
    fi

    ./configure --prefix=${LNX_PREFIX} --host=${LNX_TCP} CC=${LNX_CC} \
        CFLAGS="${LNX_CFLAGS}" --enable-static=no --disable-lua \
        LDFLAGS="${LNX_LDFLAGS}"
    return $?
}

autogen_config() {
    local retv=0
    if [ ! -e configure ] ; then
        ./autogen.sh ; retv=$?
        [ $retv -ne 0 ] && return 1
    fi

    ./configure --prefix=${LNX_PREFIX} --host=${LNX_TCP} CC=${LNX_CC} \
        CFLAGS="${LNX_CFLAGS}" --enable-static=no LDFLAGS="${LNX_LDFLAGS}"
    return $?
}

autogen_build() {
    make V=1 -j${OJOBN:-8} || return 1
    make DESTDIR=${LNXDESTDIR} install
    return $?
}

luastruct_build() {
    make CC=${LNX_CC} \
        CWARNS="${LNX_CFLAGS} -I${LNXDESTPFX}/include" || return 1
    mkdir -p "${LNXDESTPFX}/lib/lua"
    cp -v struct.so "${LNXDESTPFX}/lib/lua/"
    return $?
}

luabson_build() {
    make CC=${LNX_CC} -j${OJOBN:-8} \
        LUAINCLUDE="${LNX_CFLAGS} -I${LNXDESTPFX}/include" \
        LUALIB="${LNX_LDFLAGS} -llua" bson.so || return 1

    mkdir -p "${LNXDESTPFX}/lib/lua"
    cp -v bson.so "${LNXDESTPFX}/lib/lua/"
    return $?
}

luaev_config() {
    local retv=1
    mkdir -p build_dir && cd ./build_dir && {
        cmake -DCMAKE_BUILD_TYPE=release -DCMAKE_INSTALL_PREFIX="${LNX_PREFIX}" \
            -DCMAKE_C_COMPILER=${LNX_CC} -DCMAKE_CXX_COMPILER=${LNX_CXX} \
            "-DCMAKE_C_COMPILER_RANLIB=$(which ${LNX_TCP}-ranlib)" "-DCMAKE_AR=$(which ${LNX_TCP}-ar)" \
            -DCMAKE_C_FLAGS="${LNX_CFLAGS} -I${LNXDESTPFX}/include" \
            -DLIBEV_LIBRARY=${LNXDESTPFX}/lib/libev.so \
            -DLIBEV_INCLUDE_DIR=${LNXDESTPFX}/include \
            -DCMAKE_EXE_LINKER_FLAGS="${LNX_LDFLAGS}" \
            -DCMAKE_SHARED_LINKER_FLAGS="${LNX_LDFLAGS}" \
            -DCMAKE_MODULE_LINKER_FLAGS="${LNX_LDFLAGS} -lev" ..
        retv=$?
        cd ..
    }
    return $retv
}

luaev_build() {
    local retv=1
    cd ./build_dir && {
        make VERBOSE=1 -j${OJOBN:-8} ; retv=$?
        if [ $retv -eq 0 ] ; then
            make DESTDIR=${LNXDESTDIR} VERBOSE=1 install ; retv=$?
        fi
        cd ..
    }
    return $retv
}

luaev_clean() {
	rm -rf ./build_dir
	return 0
}

luacjson_build() {
    make CC=${LNX_CC} PREFIX=${LNX_PREFIX} DESTDIR=${LNXDESTDIR} \
        CFLAGS="${LNX_CFLAGS} -fPIC" LUA_INCLUDE_DIR="${LNXDESTPFX}/include" \
        -j${OJOBN:-8} install
    return $?
}

lua_libmodbus_build() {
    make CC=${LNX_CC} LUA_LIBDIR="${LNXDESTPFX}/lib" -j1 \
        LUA_CFLAGS="${LNX_CFLAGS} -I${LNXDESTPFX}/include -I${LNXDESTPFX}/include" \
        LUA_LDFLAGS="${LNX_LDFLAGS}" libmodbus.so install
    return $?
}

libev_config() {
    local retv=0
    if [ ! -e configure ] ; then
        ./autogen.sh ; retv=$?
        [ $retv -ne 0 ] && return 1
    fi

    local LNXCFLAGS="${LNX_CFLAGS}"
    if [[ "${LNXCFLAGS}" =~ mips16 ]] ; then
        LNXCFLAGS=$(echo -n "${LNXCFLAGS}" | sed -e 's/-minterlink-mips16//g' -e 's/-mips16//g')
    fi
    ./configure --prefix=${LNX_PREFIX} --host=${LNX_TCP} CC=${LNX_CC} \
        CFLAGS="${LNXCFLAGS}" --enable-static=no LDFLAGS="${LNX_LDFLAGS}"
    return $?
}

redis_server_build() {
	make CC=${LNX_CC} BUILD_TLS=no USE_SYSTEMD=no -j${OJOBN:-8} \
		CFLAGS="${LNX_CFLAGS}" REDIS_LDFLAGS="${LNX_LDFLAGS}" \
		DESTDIR=${LNXDESTDIR} MALLOC=libc PREFIX=${LNX_PREFIX} V=1 all # install
	# Note that with multiple GNU make jobs, cannot place `install after `all
	local retv=$?
	[ ${retv} -ne 0 ] && return 1

	make CC=${LNX_CC} BUILD_TLS=no USE_SYSTEMD=no -j${OJOBN:-8} \
		CFLAGS="${LNX_CFLAGS}" REDIS_LDFLAGS="${LNX_LDFLAGS}" \
		DESTDIR=${LNXDESTDIR} MALLOC=libc PREFIX=${LNX_PREFIX} V=1 install
	retv=$?
	cp -v -f redis.conf "${LNXDESTPFX}/app/config/"
	[ $retv -eq 0 ] && cd "${LNXDESTPFX}" && rm -v -rf ./build
	return $retv
}

hiredis_config() {
	mkdir -p ./build_dir && cd ./build_dir || return 1

	cmake -DCMAKE_BUILD_TYPE=release -DCMAKE_INSTALL_PREFIX="${LNX_PREFIX}" \
		-DCMAKE_C_COMPILER=${LNX_CC} -DCMAKE_CXX_COMPILER=${LNX_CXX} \
		-DCMAKE_C_FLAGS="${LNX_CFLAGS} -I${LNXDESTPFX}/include" \
		-DCMAKE_C_STANDARD=99 -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
		-DENABLE_SSL=OFF -DDISABLE_TESTS=OFF -DENABLE_EXAMPLES=OFF \
		-DCMAKE_EXE_LINKER_FLAGS="${LNX_LDFLAGS}" \
		-DCMAKE_SHARED_LINKER_FLAGS="${LNX_LDFLAGS}" \
		-DCMAKE_MODULE_LINKER_FLAGS="${LNX_LDFLAGS}" ..
	return $?
}

hiredis_build() {
	local retv=0
	cd ./build_dir || return 1
	make VERBOSE=1 DESTDIR=${LNXDESTDIR} -j${OJOBN:-8} install ; retv=$?
	[ $retv -eq 0 ] && cd "${LNXDESTPFX}/lib" && \
		rm -v -rf libhiredis.a ../build
	return $retv
}

libsqlite3_config() {
	./configure --prefix=${LNX_PREFIX} --host=${LNX_TCP} CC=${LNX_CC} \
		CFLAGS="${LNX_CFLAGS}" LDFLAGS="${LNX_LDFLAGS}" \
		--enable-static=no --enable-shared=yes \
		--disable-readline --disable-static-shell
	return $?
}

libsqlite3_build() {
	local retv=$?
	make V=1 -j${OJOBN:-8} ; retv=$?
	[ ${retv} -ne 0 ] && return 1
	make V=1 DESTDIR=${LNXDESTDIR} install ; retv=$?
	return ${retv}
}

cyrus_sasl_config() {
    local OPENSSL="${STAGING_DIR}/usr"
    srcpkg_enabled openssl && OPENSSL="${LNX_PREFIX}"
    ./configure --prefix=${LNX_PREFIX} --host=${LNX_TCP} CC=${LNX_CC} \
        CFLAGS="${LNX_CFLAGS}" LDFLAGS="${LNX_LDFLAGS}" \
        --enable-shared --enable-static=no --disable-sample \
        --enable-staticdlopen --disable-java --disable-alwaystrue \
        --disable-checkapop --enable-cram --enable-digest \
        --without-auth-sasldb --disable-otp --disable-srp \
        --disable-srp-setpass --disable-krb4 --disable-gssapi \
        --disable-gss_mutexes --enable-plain --enable-anon \
        --disable-login --disable-ntlm --disable-sql --disable-ldapdb \
        --without-dblib --without-gdbm --with-devrandom="/dev/urandom" \
        --without-pam --without-saslauthd --without-authdaemond \
        --without-pwcheck --with-ipctype=unix \
        --with-openssl="${OPENSSL}" --without-des --without-opie \
        --without-ldap --without-mysql --without-pgsql --without-sqlite \
        --without-rc4 --without-dmalloc --without-sfio --disable-sample
    return $?
}

cyrus_sasl_build() {
    local retv=0
    make -C ./include CC="gcc" LINK="gcc -o makemd5 -lc" \
        CFLAGS="" CPPFLAGS="" makemd5 -j${OJOBN:-8} ; retv=$?
    [ ${retv} -ne 0 ] && return 1
    make DESTDIR="${LNXDESTDIR}" -j1 all install ; retv=$?
    return $retv
}

cyrus_sasl_clean() {
	open_common_clean
	make distclean
	return 0
}

curl_config() {
    ./configure --prefix=${LNX_PREFIX} --host=${LNX_TCP} CC=${LNX_CC} \
        CFLAGS="${LNX_CFLAGS} -I${LNXDESTPFX}/include" \
		LDFLAGS="${LNX_LDFLAGS} -L${LNXDESTPFX} -Wl,-rpath=${LNX_PREFIX}/lib" \
		--with-openssl=${LNXDESTPFX} --enable-pthreads --enable-sspi \
		--enable-basic-auth --enable-bearer-auth --enable-digest-auth \
		--enable-kerberos-auth --enable-negotiate-auth --disable-docs \
		--disable-manual
	return $?
}

curl_build() {
	make -j8
	[ $? -ne 0 ] && return 1

	make -j1 DESTDIR=${LNXDESTDIR} install
	return $?
}

librdkafka_config() {
    local SSLDIR="${STAGING_DIR}/usr"
    if [ ! -e "${SSLDIR}/include/openssl" ] ; then
        SSLDIR="${LNXDESTPFX}"
    fi
    cmake -DCMAKE_BUILD_TYPE=release -DCMAKE_INSTALL_PREFIX="${LNX_PREFIX}" \
        -DCMAKE_C_COMPILER=${LNX_CC} -DCMAKE_CXX_COMPILER=${LNX_CXX} \
        -DCMAKE_C_FLAGS="${LNX_CFLAGS} -I${LNXDESTPFX}/include" \
        -DWITH_SASL=1 -DWITH_SASL_SCRAM=1 -DWITH_SASL_OAUTHBEARER=1 \
        -DWITH_SASL_CYRU=1 \
        -DOPENSSL_INCLUDE_DIR="${SSLDIR}/include" \
        -DOPENSSL_CRYPTO_LIBRARY="${SSLDIR}/lib/libcrypto.so" \
        -DOPENSSL_SSL_LIBRARY="${SSLDIR}/lib/libssl.so" \
        -DCMAKE_EXE_LINKER_FLAGS="${LNX_LDFLAGS} -lpthread" \
        -DCMAKE_SHARED_LINKER_FLAGS="${LNX_LDFLAGS} -lpthread" \
        -DCMAKE_MODULE_LINKER_FLAGS="${LNX_LDFLAGS} -lpthread" .
    return $?
}

librdkafka_build() {
    local retv=0
    make VERBOSE=1 -j${OJOBN:-8} ; retv=$?
    [ ${retv} -ne 0 ] && return 1

    make VERBOSE=1 DESTDIR=${LNXDESTDIR} install ; retv=$?

	if [ $retv -eq 0 ] ; then
		cd "${LNXDESTPFX}/lib64" 2>/dev/null
		[ $? -eq 0 ] && mv -v -f librdkafka*.so* ../lib/ 2>/dev/null
	fi
    return $retv
}

libmodbus_dy_config() {
    # apply patches from `package_repos/open62541/patches
    apply_patches "${FTOPDIR}/package_repos/libmodbus_dy/patches"

    mkdir -p ./build_dir && cd ./build_dir
    [ $? -ne 0 ] && return 1

    ../configure --prefix=${LNX_PREFIX} --host=${LNX_TCP} CC=${LNX_CC} CFLAGS="${LNX_CFLAGS}" LDFLAGS="${LNX_LDFLAGS}" \
        --enable-shared --disable-nls  --without-documentation --disable-tests ac_cv_func_malloc_0_nonnull=yes
    return $?
}

libmodbus_dy_build() {
    local retv=1
    cd ./build_dir || return 1

    make VERBOSE=1 -j${OJOBN:-8} -C ./ AR=${LNX_AR} CC=${LNX_CC} LD=${LNX_LD} STRIP=${LNX_STRIP} RANLIB=${LNX_RANLIB} && \
        make CC=${LNX_CC} PREFIX=${LNX_PREFIX} DESTDIR="${LNXDESTDIR}" install ; retv=$?
    if [ $retv -eq 0 ] ; then
        mkdir -p "${LNXDESTPFX}"/{include/modbus,lib}
        cp -r -p -P ../src/*.h "${LNXDESTPFX}/include/modbus/"
        cp -r -p -P ./src/.libs/libmodbus.so* "${LNXDESTPFX}/lib/"
    fi
    return $retv
}

libmodbus_dy_clean() {
    rm -rf ./build_dir
    return 0
}

comgt_build() {
	make CC="${LNX_CC}" CFLAGS="${LNX_CFLAGS}" LDFLAGS="${LNX_LDFLAGS}" comgt
	[ $? -ne 0 ] && return 1

	mkdir -p "${LNXDESTPFX}/bin" "${LNXDESTPFX}/etc/gcom"
	cp -v -f comgt "${LNXDESTPFX}/bin/" && cp -v -f \
		./files/* "${LNXDESTPFX}/etc/gcom/"
	return $?
}

open62541_config() {
	mkdir -p ./deps/ua-nodeset/ 
	mkdir -p ./build_dir && cd ./build_dir
	[ $? -ne 0 ] && return 1

	local PCFLAGS='-Wno-error=sign-conversion -Wno-error=redundant-decls '
	PCFLAGS="${PCFLAGS} -Wno-error=misleading-indentation -Wno-error=deprecated-declarations"
	PCFLAGS="${PCFLAGS} -Wno-error=incompatible-pointer-types -Wno-error=format="
	PCFLAGS="${PCFLAGS} -Wno-error=missing-prototypes"

	if srcpkg_enabled tdengine ; then
		PCFLAGS="${PCFLAGS} -Wno-error=missing-prototypes -Wno-error=strict-prototypes"
		PCFLAGS="${PCFLAGS} -Wno-error=format-nonliteral -Wno-error=strict-overflow -finstrument-functions"

		cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX="${LNX_PREFIX}" \
			-DCMAKE_C_COMPILER=${LNX_CC} -DCMAKE_CXX_COMPILER=${LNX_CXX} \
			-DCMAKE_C_FLAGS="${LNX_CFLAGS} -I${LNXDESTPFX}/include ${PCFLAGS}" \
			-DCMAKE_EXE_LINKER_FLAGS="${LNX_LDFLAGS}" \
			-DCMAKE_SHARED_LINKER_FLAGS="${LNX_LDFLAGS} -ltaos" \
			-DCMAKE_MODULE_LINKER_FLAGS="${LNX_LDFLAGS}" \
			-DBUILD_SHARED_LIBS=ON -DUA_NAMESPACE_ZERO=REDUCED \
			-DUA_LOGLEVEL=500 -DUA_ARCHITECTURE=posix \
			-DUA_MULTITHREADING=199 -DUA_BUILD_EXAMPLES=OFF -DUA_BUILD_TOOLS=OFF \
			-DUA_ENABLE_NODEMANAGEMENT=ON -DUA_ENABLE_IMMUTABLE_NODES=OFF \
			-DUA_ENABLE_TYPEDESCRIPTION=ON -DUA_ENABLE_STATUSCODE_DESCRIPTIONS=ON \
			-DUA_ENABLE_ENCRYPTION=ON -DUA_ENABLE_SUBSCRIPTIONS_EVENTS=ON \
			-DUA_ENABLE_DISCOVERY=ON -DUA_ENABLE_DISCOVERY_MULTICAST=ON \
			-DUA_ENABLE_HISTORIZING=ON -DUA_ENABLE_AMALGAMATION=ON -DUA_ENABLE_HISTORIZING_TDENGINE=ON \
			-DUA_ENABLE_SUBSCRIPTIONS=ON -DUA_ENABLE_SUBSCRIPTIONS_ALARMS_CONDITIONS=OFF \
			-DUA_ENABLE_METHODCALLS=ON -DUA_ENABLE_PUBSUB=ON -DUA_ENABLE_PUBSUB_DELTAFRAMES=ON \
			-DUA_ENABLE_PUBSUB_INFORMATIONMODEL=ON -DUA_ENABLE_PUBSUB_MONITORING=ON \
			-DUA_ENCRYPTION_PLUGINS=OFF -DSQLITE3_LIBRARIES="${LNXDESTPFX}/lib/libsqlite3.so" \
			-DMBEDTLS_INCLUDE_DIRS="${LNXDESTPFX}/include" \
			-DMBEDTLS_LIBRARY="${LNXDESTPFX}/lib/libmbedtls.so" \
			-DMBEDX509_LIBRARY="${LNXDESTPFX}/lib/libmbedx509.so" \
			-DMBEDCRYPTO_LIBRARY="${LNXDESTPFX}/lib/libmbedcrypto.so" ..
	else 
		cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX="${LNX_PREFIX}" \
			-DCMAKE_C_COMPILER=${LNX_CC} -DCMAKE_CXX_COMPILER=${LNX_CXX} \
			-DCMAKE_C_FLAGS="${LNX_CFLAGS} -I${LNXDESTPFX}/include ${PCFLAGS}" \
			-DCMAKE_EXE_LINKER_FLAGS="${LNX_LDFLAGS}" \
			-DCMAKE_SHARED_LINKER_FLAGS="${LNX_LDFLAGS}" \
			-DCMAKE_MODULE_LINKER_FLAGS="${LNX_LDFLAGS}" \
			-DBUILD_SHARED_LIBS=ON -DUA_NAMESPACE_ZERO=REDUCED \
			-DUA_LOGLEVEL=500 -DUA_ARCHITECTURE=posix \
			-DUA_MULTITHREADING=199 -DUA_BUILD_EXAMPLES=OFF -DUA_BUILD_TOOLS=OFF \
			-DUA_ENABLE_NODEMANAGEMENT=ON -DUA_ENABLE_IMMUTABLE_NODES=OFF \
			-DUA_ENABLE_TYPEDESCRIPTION=ON -DUA_ENABLE_STATUSCODE_DESCRIPTIONS=ON \
			-DUA_ENABLE_ENCRYPTION=ON -DUA_ENABLE_SUBSCRIPTIONS_EVENTS=ON \
			-DUA_ENABLE_DISCOVERY=ON -DUA_ENABLE_DISCOVERY_MULTICAST=ON \
			-DUA_ENABLE_HISTORIZING=ON -DUA_ENABLE_AMALGAMATION=ON \
			-DUA_ENABLE_SUBSCRIPTIONS=ON -DUA_ENABLE_SUBSCRIPTIONS_ALARMS_CONDITIONS=OFF \
			-DUA_ENABLE_METHODCALLS=ON -DUA_ENABLE_PUBSUB=ON -DUA_ENABLE_PUBSUB_DELTAFRAMES=ON \
			-DUA_ENABLE_PUBSUB_INFORMATIONMODEL=ON -DUA_ENABLE_PUBSUB_MONITORING=ON \
			-DUA_ENCRYPTION_PLUGINS=OFF -DSQLITE3_LIBRARIES="${LNXDESTPFX}/lib/libsqlite3.so" \
			-DMBEDTLS_INCLUDE_DIRS="${LNXDESTPFX}/include" \
			-DMBEDTLS_LIBRARY="${LNXDESTPFX}/lib/libmbedtls.so" \
			-DMBEDX509_LIBRARY="${LNXDESTPFX}/lib/libmbedx509.so" \
			-DMBEDCRYPTO_LIBRARY="${LNXDESTPFX}/lib/libmbedcrypto.so" ..
	fi
	return $?
}

open62541_build() {
	cd ./build_dir || return 1
	make VERBOSE=1 -j${OJOBN:-8} && make VERBOSE=1 DESTDIR="${LNXDESTDIR}" install
	local retv=$?

	if [ $retv -eq 0 ] ; then
		cd "${LNXDESTPFX}/lib64" 2>/dev/null
		[ $? -eq 0 ] && mv -v -f libopen62541*.so* ../lib/ 2>/dev/null
	fi
	return $retv
}

mbedtls_config() {
	mkdir -p ./build_dir && cd ./build_dir
	[ $? -ne 0 ] && return 1

	cmake -DCMAKE_BUILD_TYPE=release -DCMAKE_INSTALL_PREFIX="${LNX_PREFIX}" \
		-DCMAKE_C_COMPILER=${LNX_CC} -DCMAKE_CXX_COMPILER=${LNX_CXX} \
		-DCMAKE_C_FLAGS="${LNX_CFLAGS} -I${LNXDESTPFX}/include" \
		"-DCMAKE_C_COMPILER_RANLIB=$(which ${LNX_TCP}-ranlib)" \
		"-DCMAKE_AR=$(which ${LNX_TCP}-ar)" \
		-DWITH_STATIC_LIBRARIES=OFF -DENABLE_TESTING=OFF -DENABLE_PROGRAMS=OFF ..
	return $?
}

mbedtls_build() {
	cd ./build_dir || return 1

	make VERBOSE=1 -j${OJOBN:-8} || return 2
	make VERBOSE=1 DESTDIR=${LNXDESTDIR} install
	local retv=$?

	if [ $retv -eq 0 ] ; then
		cd "${LNXDESTPFX}/lib64" 2>/dev/null
		[ $? -eq 0 ] && mv -v -f libmbed*.so* ../lib/ 2>/dev/null
	fi
	return $retv
}

open62541_clean() {
	rm -rf ./build_dir ${TAG_PATCHED}
	return 0
}

uuid_build() {
	make CC=${LNX_CC} CFLAGS="${LNX_CFLAGS}" LDFLAGS="${LNX_LDFLAGS}" -j${OJOBN:-8}
	[ $? -ne 0 ] && return 1

	mkdir -p "${LNXDESTPFX}/include/uuid" "${LNXDESTPFX}/lib" || return 2
	cp -v -f uuid.h "${LNXDESTPFX}/include/uuid/" && \
		cp -v -f libuuid.so "${LNXDESTPFX}/lib/"
	return $?
}

argp_build() {
	make "CC=${LNX_CC}" "CFLAGS=${LNX_CFLAGS}" -j${OJOBN:-8}
	[ $? -ne 0 ] && return 1

	mkdir -p "${LNXDESTPFX}/include" "${LNXDESTPFX}/lib" || return 2
	cp -v -f argp.h "${LNXDESTPFX}/include/" && \
		cp -v -f libargp.so "${LNXDESTPFX}/lib/"
	return $?
}

avro_config() {
	local retv=1
	mkdir -p ./build_dir && cd ./build_dir && {
		CMAKE_PREFIX_PATH="${LNXDESTPFX}/lib" cmake -DCMAKE_BUILD_TYPE=release \
			-DCMAKE_INSTALL_PREFIX="${LNX_PREFIX}" "-DCMAKE_AR=$(which ${LNX_TCP}-ar)" \
			"-DCMAKE_C_COMPILER_RANLIB=$(which ${LNX_TCP}-ranlib)" \
			-DCMAKE_C_COMPILER=${LNX_CC} -DCMAKE_CXX_COMPILER=${LNX_CXX} \
			-DCMAKE_C_FLAGS="${LNX_CFLAGS} -I${LNXDESTPFX}/include" \
			-DCMAKE_EXE_LINKER_FLAGS="${LNX_LDFLAGS} -lpthread" \
			-DCMAKE_SHARED_LINKER_FLAGS="${LNX_LDFLAGS} -lpthread" \
			-DCMAKE_MODULE_LINKER_FLAGS="${LNX_LDFLAGS} -lpthread" ..
		retv=$?
		cd ..
	}
	return ${retv}
}

avro_build() {
	cd ./build_dir || return 1

	make VERBOSE=1 -j${OJOBN:-8} && make VERBOSE=1 DESTDIR=${LNXDESTDIR} install
	local retv=$?
	[ ${retv} -eq 0 ] && cd "${LNXDESTPFX}/lib" && rm -rf libavro.a
	return ${retv}
}

tdengin_config() {
	mkdir -p ./build_dir && cd ./build_dir
	[ $? -ne 0 ] && return 1

	local cputype=x64
	if [[ "${LNX_CC}" =~ ^aarch64.+ ]] ; then
		cputype=aarch64
	elif [[ "${LNX_CC}" =~ ^arm.+ ]] ; then
		cputype=aarch32
	fi

	local no_warn="-Wno-error=unused-variable -Wno-error=unused-function"
	no_warn="${no_warn} -Wno-error=unknown-pragmas -Wno-error=strict-aliasing"
	no_warn="${no_warn} -Wno-error=unused-but-set-variable -Wno-error=missing-braces"
	no_warn="${no_warn} -Wno-error=pointer-sign -Wno-error=parentheses -Wno-error=address"

	local gccver=$(${LNX_CC} --version |& head -n 1 | sed -r -n -e 's#^.+([0-9]+)\.[0-9]+\.[0-9]+.*$#\1#p')
	[ -z "${gccver}" ] && gccver=0
	if [ ${gccver} -ge 8 ] ; then
		# for gcc version greater or equal to 8, append following compilation flags:
		no_warn="${no_warn} -Wno-error=maybe-uninitialized -Wno-error=sizeof-pointer-memaccess"
		no_warn="${no_warn} -Wno-error=stringop-truncation"
	fi

	CMAKE_PREFIX_PATH="${LNXDESTPFX}/lib" cmake -DCMAKE_BUILD_TYPE=release \
		"-DCMAKE_C_COMPILER_RANLIB=$(which ${LNX_TCP}-ranlib)" "-DCMAKE_AR=$(which ${LNX_TCP}-ar)" \
		-DCMAKE_INSTALL_PREFIX="${LNX_PREFIX}" -DDISABLE_ASSERT=false \
		-DCMAKE_C_COMPILER=${LNX_CC} -DCMAKE_CXX_COMPILER=${LNX_CXX} \
		-DCMAKE_C_FLAGS="${LNX_CFLAGS} ${no_warn} -I${LNXDESTPFX}/include" \
		-DCMAKE_CXX_FLAGS="${LNX_CFLAGS} ${no_warn} -I${LNXDESTPFX}/include" \
		-DCMAKE_EXE_LINKER_FLAGS="${LNX_LDFLAGS} -Wl,-rpath-link=${LNXDESTPFX}/lib -lpthread" \
		-DCMAKE_SHARED_LINKER_FLAGS="${LNX_LDFLAGS} -Wl,-rpath-link=${LNXDESTPFX}/lib -lpthread" \
		-DCMAKE_MODULE_LINKER_FLAGS="${LNX_LDFLAGS} -Wl,-rpath-link=${LNXDESTPFX}/lib -lpthread" \
		-DCPUTYPE=${cputype} -DBUILD_WITH_SQLITE=OFF -DBUILD_TOOLS=true \
		-DZLIB_LIBRARY=${LNXDESTPFX}/lib/libz.so ..
	return $?
}

tdengin_build() {
	cd ./build_dir || return 1
	make VERBOSE=1 -j${OJOBN:-8} && make DESTDIR=${LNXDESTDIR} install
	[ $? -ne 0 ] && return 2

	cd .. ; mkdir -p "${LNXDESTPFX}"/{platspec,app/config,bin}
	cp -f -v packaging/cfg/init_taosd "${LNXDESTPFX}/bin/"
	cp -f -v packaging/cfg/taos.cfg "${LNXDESTPFX}/app/config/"
	cp -f -v packaging/cfg/taosd.service "${LNXDESTPFX}/platspec/"
	return $?
}

jansson_config() {
	if [ ! -x 'configure' ] ; then
		autoreconf -i
		[ $? -ne 0 ] && return 1
	fi

	mkdir -p ./build_dir && cd ./build_dir
	[ $? -ne 0 ] && return 2

	../configure --prefix=${LNX_PREFIX} CC=${LNX_CC} CFLAGS="${LNX_CFLAGS}" \
		--host=${LNX_TCP} LDFLAGS="${LNX_LDFLAGS}" --enable-static=no
	return $?
}

jansson_build() {
	cd ./build_dir || return 1
	make V=1 -j${OJOBN:-8} && make DESTDIR=${LNXDESTDIR} install
	return $?
}

snappy_config() {
	mkdir -p ./build_dir && cd ./build_dir && {
        cmake -DCMAKE_BUILD_TYPE=release -DCMAKE_INSTALL_PREFIX="${LNX_PREFIX}" \
            -DCMAKE_C_COMPILER=${LNX_CC} -DCMAKE_CXX_COMPILER=${LNX_CXX} \
            -DCMAKE_C_FLAGS="${LNX_CFLAGS} -I${LNXDESTPFX}/include" \
			-DSNAPPY_BUILD_TESTS=OFF -DSNAPPY_BUILD_BENCHMARKS=OFF \
            -DCMAKE_EXE_LINKER_FLAGS="${LNX_LDFLAGS} -lpthread" \
            -DCMAKE_SHARED_LINKER_FLAGS="${LNX_LDFLAGS} -lpthread" \
            -DCMAKE_MODULE_LINKER_FLAGS="${LNX_LDFLAGS} -lpthread" \
			-DBUILD_SHARED_LIBS=ON ..
		return $?
	}
	return 1
}

snappy_build() {
	local retv=1

	cd ./build_dir && {
		make VERBOSE=1 -j${OJOBN:-8} && make VERBOSE=1 DESTDIR=${LNXDESTDIR} install
		retv=$?
		cd ..
	}
	return ${retv}
}

lzma_config() {
	git checkout HEAD -- Makefile.in autom4te.cache/requests # restore modified files

	./configure --prefix=${LNX_PREFIX} --host=${LNX_TCP} CC="${LNX_CC}" \
		CFLAGS="${LNX_CFLAGS}" --enable-shared=yes --enable-static=no \
		--disable-nls --disable-rpath
	return $?
}

lzma_build() {
	make V=1 -j${OJOBN:-8} && make V=1 DESTDIR=${LNXDESTDIR} install
	return $?
}

lz4_config() {
	return 0
}

lz4_build() {
	cd lib || return 1

	make V=V CC=${LNX_CC} CFLAGS="${LNX_CFLAGS}" -j${OJOBN:-8} && \
		make V=V CC=${LNX_CC} CFLAGS="${LNX_CFLAGS}" \
		PREFIX="${LNX_PREFIX}" DESTDIR=${LNXDESTDIR} install
	local retv=$?

	cd ..
	return ${retv}
}

libiec61850_config() {
	return 0
}

libiec61850_build() {
	make V=V CC=${LNX_CC} CFLAGS="${LNX_CFLAGS}" -j${OJOBN:-8} && \
		make V=V CC=${LNX_CC} CFLAGS="${LNX_CFLAGS}" \
		PREFIX="${LNX_PREFIX}" DESTDIR=${LNXDESTDIR} install
	cp -r -p -P .install/lib/*.a "${LNXDESTPFX}/lib/"
    cp -r -p -P .install/include/* "${LNXDESTPFX}/include/"
	cp -r -p -P hal/inc/* "${LNXDESTPFX}/include/"
	local retv=$?

	cd ..
	return ${retv}
}

libxlsxwriter_config() {
    mkdir -p build_dir && cd ./build_dir && \
        cmake -DCMAKE_BUILD_TYPE=release -DCMAKE_INSTALL_PREFIX="${LNX_PREFIX}" \
            -DCMAKE_C_COMPILER=${LNX_CC} -DCMAKE_CXX_COMPILER=${LNX_CXX} \
            -DCMAKE_C_FLAGS="${LNX_CFLAGS} -I${LNXDESTPFX}/include" \
            -DCMAKE_EXE_LINKER_FLAGS="${LNX_LDFLAGS} -lpthread" \
            -DCMAKE_SHARED_LINKER_FLAGS="${LNX_LDFLAGS} -lpthread" \
            -DCMAKE_MODULE_LINKER_FLAGS="${LNX_LDFLAGS} -lpthread" ..
	return $?
}

libxlsxwriter_build() {
    local retv=1
    cd ./build_dir && {
        make VERBOSE=1 -j${OJOBN:-8} ; retv=$?
        if [ $retv -eq 0 ] ; then
            make DESTDIR=${LNXDESTDIR} VERBOSE=1 install ; retv=$?
        fi
        cd ..
    }

    return $retv
}

register_source 'opensource/lua-5.1.5' \
	lua51_config lua51_build open_common_clean

register_source 'opensource/zlib-1.2.13' \
	open_dummy_config zlib_build open_common_clean

register_source 'sqlite-autoconf-3310100.tar.gz' \
	libsqlite3_config libsqlite3_build open_common_clean

register_source 'opensource/libffi-3.4.4' \
	libffi_config libffi_build open_common_clean

register_source 'opensource/expat-2.5.0' \
	expat_config expat_build open_common_clean

srcpkg_enabled openssl && \
	register_source 'opensource/openssl-1.1.1q' \
		openssl_config openssl_build open_common_clean

srcpkg_enabled openssl && \
	register_source 'opensource/lua-openssl' \
		open_dummy_config lua_openssl_build open_common_clean

srcpkg_enabled libcurl && \
	register_source 'opensource/curl-8.7.1' \
		curl_config curl_build open_common_clean

srcpkg_enabled python3 && \
	register_source 'opensource/Python-3.9.13' \
		python3_config python3_build open_common_clean

register_source 'opensource/cjson' \
    open_dummy_config cjson_build open_common_clean

register_source 'opensource/uthash' \
    open_dummy_config uthash_build open_common_clean

register_source 'opensource/mosquitto' \
    mosquitto_config mosquitto_build open_common_clean

srcpkg_enabled mongo_bson && \
	register_source 'opensource/mongo-c-driver' \
		bson_config bson_build open_common_clean

register_source 'opensource/luaposix' \
    open_dummy_config luaposix_build luaposix_clean

register_source 'opensource/lua-mosquitto' \
    open_dummy_config luamosquitto_build open_common_clean

register_source 'opensource/lua-bit32' \
    open_dummy_config luabit32_build luabit32_clean

register_source 'opensource/lua-bitop-1.0.2' \
    open_dummy_config luabitop_build luabit32_clean

register_source 'opensource/lua-lbase64-1.0.5' \
	open_dummy_config lua_lbase64_build luabit32_clean

register_source 'opensource/lua-lsyslog-1.0.5' \
	open_dummy_config lua_lsyslog_build luabit32_clean

register_source 'opensource/lsqlite3_fsl09y' \
	open_dummy_config lua_lsqlite3_build luabit32_clean

srcpkg_enabled librs232 && \
	register_source 'opensource/librs232' \
		librs232_config autogen_build open_common_clean

srcpkg_enabled libmodbus && \
	register_source 'opensource/libmodbus' \
		autogen_config autogen_build open_common_clean

srcpkg_enabled libmodbus_dy && \
	register_source 'libmodbus_dy-3.1.4.tar.gz' \
		libmodbus_dy_config libmodbus_dy_build open_common_clean

register_source 'opensource/libuv' \
    autogen_config autogen_build open_common_clean

register_source 'opensource/luastruct' \
    open_dummy_config luastruct_build open_common_clean

register_source 'opensource/lua-bson' \
    open_dummy_config luabson_build open_common_clean

register_source 'libev-4.33.tar.gz' \
    libev_config autogen_build open_common_clean

register_source 'opensource/lua-ev' \
    luaev_config luaev_build luaev_clean

register_source 'opensource/lua-cjson' \
    open_dummy_config luacjson_build open_common_clean

register_source 'opensource/lua-libmodbus' \
    open_dummy_config lua_libmodbus_build open_common_clean

if srcpkg_enabled redis ; then
register_source 'opensource/redis-7.0.3' \
	open_dummy_config redis_server_build open_common_clean

register_source 'opensource/hiredis' \
	hiredis_config hiredis_build open_common_clean
fi

register_source 'cyrus-sasl-2.1.27.tar.gz' \
	cyrus_sasl_config cyrus_sasl_build cyrus_sasl_clean

srcpkg_enabled socat && \
register_source 'socat-1.8.0.0.tar.gz' \
	autogen_config autogen_build open_common_clean

srcpkg_enabled librdkafka && \
	register_source 'librdkafka-1.5.2.tar.gz' \
		librdkafka_config librdkafka_build open_common_clean
		
register_source 'opensource/comgt.0.32' \
	open_dummy_config comgt_build open_common_clean

register_source 'opensource/mbedtls-3.5.0' \
	mbedtls_config mbedtls_build open_common_clean

register_source 'opensource/lz4' \
		lz4_config lz4_build open_common_clean

if srcpkg_enabled tdengine ; then
	register_source 'opensource/argp-standalone' \
		open_dummy_config argp_build open_common_clean

	register_source 'opensource/jansson' \
		jansson_config jansson_build open_common_clean

	register_source 'opensource/snappy' \
		snappy_config snappy_build open_common_clean

	register_source 'opensource/xz-5.4.4' \
		lzma_config lzma_build open_common_clean

	register_source 'opensource/uuid' \
		open_dummy_config uuid_build open_common_clean

	register_source 'opensource/taos-tools/deps/avro/lang/c' \
		avro_config avro_build open_common_clean

	register_source 'opensource/TDengine' \
		tdengin_config tdengin_build open_common_clean
fi
register_source 'opensource/libiec61850-1.5' \
		libiec61850_config libiec61850_build open_common_clean
		
register_source 'opensource/open62541' \
	open62541_config open62541_build open62541_clean

register_source 'opensource/libxlsxwriter' \
	libxlsxwriter_config libxlsxwriter_build open_common_clean
