fidoip/scripts/husky_build.sh

405 lines
11 KiB
Bash

#!/usr/bin/env bash
# shellcheck disable=SC1091
source "${ROOTDIR}/scripts/husky_vars.sh"
source "${ROOTDIR}/scripts/helpers/git.sh"
function husky_build() {
local component=$1
echo "* Building husky..."
# User might (re)build only one component.
if [ "${component}" != "" ]; then
echo "!!! Building only '${component}'!"
local funcname="husky_build_${component}"
${funcname}
exit 0
fi
# Build sequence was taken from husky-git package from Arch Linux AUR.
husky_build_huskylib
husky_build_smapi
husky_build_fidoconf
husky_build_areafix
husky_build_hptzip
husky_build_hpt
husky_build_areastat
husky_build_hptsqfix
husky_build_htick
husky_build_hptkill
husky_build_nltools
husky_build_sqpack
husky_build_bsopack
}
function husky_build_areafix() {
echo "* Building husky's areafix..."
_husky_build_common_start "areafix" "${_HUSKY_AREAFIX_GIT}"
rm fidoconf huskylib smapi &>/dev/null
ln -s ../fidoconf/fidoconf fidoconf
ln -s ../huskylib/huskylib huskylib
ln -s ../smapi/smapi smapi
rm -rf build &>/dev/null
if ! cmake -Bbuild \
-DBUILD_SHARED_LIBS=OFF \
-Dhusky_LIB="${ROOTDIR}/dist/husky/lib/libhusky.a" \
-Dsmapi_LIB="${ROOTDIR}/dist/husky/lib/libsmapi.a" \
-Dfidoconfig_LIB="${ROOTDIR}/dist/husky/lib/libfidoconfig.a" \
-DCMAKE_INSTALL_PREFIX:PATH="${_HUSKY_BIN_DIR}"; then
echo "! Failed to configure areafix!"
exit 1
fi
_husky_build_common_end "areafix"
}
function husky_build_areastat() {
echo "* Building husky's areastat..."
_husky_build_common_start "areastat" "${_HUSKY_AREASTAT_GIT}"
rm huskylib smapi &>/dev/null
ln -s ../huskylib/huskylib huskylib
ln -s ../smapi/smapi smapi
rm -rf build &>/dev/null
# areastat's cvsdate.h placed in different place.
mv cvsdate.h h/cvsdate.h
if ! cmake -Bbuild \
-DBUILD_SHARED_LIBS=OFF \
-Dhusky_LIB="${ROOTDIR}/dist/husky/lib/libhusky.a" \
-Dsmapi_LIB="${ROOTDIR}/dist/husky/lib/libsmapi.a" \
-DCMAKE_INSTALL_PREFIX:PATH="${_HUSKY_BIN_DIR}"; then
echo "! Failed to configure areastat!"
exit 1
fi
_husky_build_common_end "areastat"
}
function husky_build_bsopack() {
echo "* Building husky's bsopack..."
_husky_build_common_start "bsopack" "${_HUSKY_BSOPACK_GIT}"
rm fidoconf huskylib smapi &>/dev/null
ln -s ../fidoconf/fidoconf fidoconf
ln -s ../huskylib/huskylib huskylib
ln -s ../smapi/smapi smapi
rm -rf build &>/dev/null
# bsopack requires patch to work with cmake.
git apply <"${ROOTDIR}/patches/bsopack.patch"
# bsopack's cvsdate.h placed in different place.
#mv cvsdate.h h/cvsdate.h
if ! cmake -Bbuild \
-DBUILD_SHARED_LIBS=OFF \
-Dfidoconfig_LIB="${ROOTDIR}/dist/husky/lib/libfidoconfig.a" \
-Dhusky_LIB="${ROOTDIR}/dist/husky/lib/libhusky.a" \
-Dsmapi_LIB="${ROOTDIR}/dist/husky/lib/libsmapi.a" \
-DCMAKE_INSTALL_PREFIX:PATH="${_HUSKY_BIN_DIR}"; then
echo "! Failed to configure bsopack!"
exit 1
fi
_husky_build_common_end "bsopack"
}
function husky_build_fidoconf() {
echo "* Building husky's fidoconf..."
_husky_build_common_start "fidoconf" "${_HUSKY_FIDOCONF_GIT}"
rm huskylib smapi &>/dev/null
ln -s ../huskylib/huskylib huskylib
ln -s ../smapi/smapi smapi
rm -rf build &>/dev/null
if ! cmake -Bbuild \
-DBUILD_SHARED_LIBS=OFF \
-Dhusky_LIB="${ROOTDIR}/dist/husky/lib/libhusky.a" \
-Dsmapi_LIB="${ROOTDIR}/dist/husky/lib/libsmapi.a" \
-DCMAKE_INSTALL_PREFIX:PATH="${_HUSKY_BIN_DIR}"; then
echo "! Failed to configure fidoconf!"
exit 1
fi
_husky_build_common_end "fidoconf"
}
function husky_build_hpt() {
echo "* Building husky's hpt..."
_husky_build_common_start "hpt" "${_HUSKY_HPT_GIT}"
rm areafix fidoconf hptzip huskylib smapi &>/dev/null
ln -s ../areafix/areafix areafix
ln -s ../fidoconf/fidoconf fidoconf
ln -s ../hptzip/hptzip hptzip
ln -s ../huskylib/huskylib huskylib
ln -s ../smapi/smapi smapi
rm -rf build &>/dev/null
if ! cmake -Bbuild \
-DBUILD_SHARED_LIBS=OFF \
-Dareafix_LIB="${ROOTDIR}/dist/husky/lib/libareafix.a" \
-Dfidoconfig_LIB="${ROOTDIR}/dist/husky/lib/libfidoconfig.a" \
-Dhptzip_LIB="${ROOTDIR}/dist/husky/lib/libhptzip.a" \
-Dhusky_LIB="${ROOTDIR}/dist/husky/lib/libhusky.a" \
-Dsmapi_LIB="${ROOTDIR}/dist/husky/lib/libsmapi.a" \
-DCMAKE_INSTALL_PREFIX:PATH="${_HUSKY_BIN_DIR}"; then
echo "! Failed to configure hpt!"
exit 1
fi
_husky_build_common_end "hpt"
}
function husky_build_hptkill() {
echo "* Building husky's hptkill..."
_husky_build_common_start "hptkill" "${_HUSKY_HPTKILL_GIT}"
rm fidoconf huskylib smapi &>/dev/null
ln -s ../fidoconf/fidoconf fidoconf
ln -s ../huskylib/huskylib huskylib
ln -s ../smapi/smapi smapi
rm -rf build &>/dev/null
if ! cmake -Bbuild \
-DBUILD_SHARED_LIBS=OFF \
-Dfidoconfig_LIB="${ROOTDIR}/dist/husky/lib/libfidoconfig.a" \
-Dhusky_LIB="${ROOTDIR}/dist/husky/lib/libhusky.a" \
-Dsmapi_LIB="${ROOTDIR}/dist/husky/lib/libsmapi.a" \
-DCMAKE_INSTALL_PREFIX:PATH="${_HUSKY_BIN_DIR}"; then
echo "! Failed to configure hptkill!"
exit 1
fi
_husky_build_common_end "hptkill"
}
function husky_build_hptsqfix() {
echo "* Building husky's hptsqfix..."
_husky_build_common_start "hptsqfix" "${_HUSKY_HPTSQFIX_GIT}"
rm fidoconf huskylib smapi &>/dev/null
ln -s ../fidoconf/fidoconf fidoconf
ln -s ../huskylib/huskylib huskylib
ln -s ../smapi/smapi smapi
rm -rf build &>/dev/null
# hptsqfix's cvsdate.h placed in different place.
mv cvsdate.h h/cvsdate.h
if ! cmake -Bbuild \
-DBUILD_SHARED_LIBS=OFF \
-Dfidoconfig_LIB="${ROOTDIR}/dist/husky/lib/libfidoconfig.a" \
-Dhusky_LIB="${ROOTDIR}/dist/husky/lib/libhusky.a" \
-Dsmapi_LIB="${ROOTDIR}/dist/husky/lib/libsmapi.a" \
-DCMAKE_INSTALL_PREFIX:PATH="${_HUSKY_BIN_DIR}"; then
echo "! Failed to configure hptsqfix!"
exit 1
fi
_husky_build_common_end "hptsqfix"
}
function husky_build_hptzip() {
echo "* Building husky's hptzip..."
_husky_build_common_start "hptzip" "${_HUSKY_HPTZIP_GIT}"
rm huskylib &>/dev/null
ln -s ../huskylib/huskylib huskylib
rm -rf build &>/dev/null
if ! cmake -Bbuild \
-DBUILD_SHARED_LIBS=OFF \
-Dhusky_LIB="${ROOTDIR}/dist/husky/lib/libhusky.a" \
-DCMAKE_INSTALL_PREFIX:PATH="${_HUSKY_BIN_DIR}"; then
echo "! Failed to configure hptzip!"
exit 1
fi
_husky_build_common_end "hptzip"
}
function husky_build_htick() {
echo "* Building husky's htick..."
_husky_build_common_start "htick" "${_HUSKY_HTICK_GIT}"
rm areafix fidoconf hptzip huskylib smapi &>/dev/null
ln -s ../areafix/areafix areafix
ln -s ../fidoconf/fidoconf fidoconf
ln -s ../hptzip/hptzip hptzip
ln -s ../huskylib/huskylib huskylib
ln -s ../smapi/smapi smapi
rm -rf build &>/dev/null
if ! cmake -Bbuild \
-DBUILD_SHARED_LIBS=OFF \
-Dareafix_LIB="${ROOTDIR}/dist/husky/lib/libareafix.a" \
-Dfidoconfig_LIB="${ROOTDIR}/dist/husky/lib/libfidoconfig.a" \
-Dhptzip_LIB="${ROOTDIR}/dist/husky/lib/libhptzip.a" \
-Dhusky_LIB="${ROOTDIR}/dist/husky/lib/libhusky.a" \
-Dsmapi_LIB="${ROOTDIR}/dist/husky/lib/libsmapi.a" \
-DCMAKE_INSTALL_PREFIX:PATH="${_HUSKY_BIN_DIR}"; then
echo "! Failed to configure htick!"
exit 1
fi
_husky_build_common_end "htick"
}
function husky_build_huskylib() {
echo "* Building husky's huskylib..."
_husky_build_common_start "huskylib" "${_HUSKY_HUSKYLIB_GIT}"
if ! cmake \
-Bbuild \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_INSTALL_PREFIX:PATH="${_HUSKY_BIN_DIR}"; then
echo "! Failed to configure huskylib!"
exit 1
fi
_husky_build_common_end "huskylib"
}
function husky_build_nltools() {
echo "* Building husky's nltools..."
_husky_build_common_start "nltools" "${_HUSKY_NLTOOLS_GIT}"
rm fidoconf hptzip huskylib smapi &>/dev/null
ln -s ../fidoconf/fidoconf fidoconf
ln -s ../hptzip/hptzip hptzip
ln -s ../huskylib/huskylib huskylib
ln -s ../smapi/smapi smapi
rm -rf build &>/dev/null
# nltools's cvsdate.h placed in different place.
mv cvsdate.h h/cvsdate.h
if ! cmake -Bbuild \
-DBUILD_SHARED_LIBS=OFF \
-Dfidoconfig_LIB="${ROOTDIR}/dist/husky/lib/libfidoconfig.a" \
-Dhptzip_LIB="${ROOTDIR}/dist/husky/lib/libhptzip.a" \
-Dhusky_LIB="${ROOTDIR}/dist/husky/lib/libhusky.a" \
-Dsmapi_LIB="${ROOTDIR}/dist/husky/lib/libsmapi.a" \
-DCMAKE_INSTALL_PREFIX:PATH="${_HUSKY_BIN_DIR}"; then
echo "! Failed to configure nltools!"
exit 1
fi
_husky_build_common_end "nltools"
}
function husky_build_smapi() {
echo "* Building husky's smapi..."
_husky_build_common_start "smapi" "${_HUSKY_SMAPI_GIT}"
rm huskylib &>/dev/null
ln -s ../huskylib/huskylib huskylib
rm -rf build &>/dev/null
if ! cmake \
-Bbuild \
-DBUILD_SHARED_LIBS=OFF \
-Dhusky_LIB="${ROOTDIR}/dist/husky/lib/libhusky.a" \
-DCMAKE_INSTALL_PREFIX:PATH="${_HUSKY_BIN_DIR}"; then
echo "! Failed to configure smapi!"
exit 1
fi
_husky_build_common_end "smapi"
}
function husky_build_sqpack() {
echo "* Building husky's sqpack..."
_husky_build_common_start "sqpack" "${_HUSKY_SQPACK_GIT}"
rm fidoconf huskylib smapi &>/dev/null
ln -s ../fidoconf/fidoconf fidoconf
ln -s ../huskylib/huskylib huskylib
ln -s ../smapi/smapi smapi
rm -rf build &>/dev/null
if ! cmake -Bbuild \
-DBUILD_SHARED_LIBS=OFF \
-Dfidoconfig_LIB="${ROOTDIR}/dist/husky/lib/libfidoconfig.a" \
-Dhusky_LIB="${ROOTDIR}/dist/husky/lib/libhusky.a" \
-Dsmapi_LIB="${ROOTDIR}/dist/husky/lib/libsmapi.a" \
-DCMAKE_INSTALL_PREFIX:PATH="${_HUSKY_BIN_DIR}"; then
echo "! Failed to configure sqpack!"
exit 1
fi
_husky_build_common_end "sqpack"
}
function _husky_build_common_end() {
local name=$1
if ! cmake --build build; then
echo "! Failed to build husky's ${name}!"
exit 1
fi
if ! cd build; then
echo "! Failed to change directory to build when trying to install ${name}!"
exit 1
fi
if ! make install; then
echo "! Failed to install husky's ${name}!"
exit 1
fi
}
function _husky_build_common_start() {
local name=$1
local git_repo=$2
git_source "husky/${name}" "${git_repo}"
if ! cd "${ROOTDIR}/src/husky/${name}"; then
echo "! Failed to change directory to husky's ${name} sources!"
exit 1
fi
_husky_generate_version
}
function _husky_generate_version() {
echo "* Generating version file..."
echo "char cvs_date[]=\"$(date +'%Y%m%d')-git\";" >"cvsdate.h"
echo "* Version file: '$(cat cvsdate.h)'"
}