blob: e54922b2c68c0b9b3da1c59ff87f8f90c0a31482 (
plain) (
tree)
|
|
#!/bin/bash
function check_error {
if [ "$1" != 0 ]; then
echo "Error detected"
exit "$1"
fi
}
function common_build_init {
export dir=$(pwd)
if [[ "${installname}" == "" ]]; then
export installname=${package}
fi
if [[ "${envname}" == "" ]]; then
export envname=${package}
fi
export srcdir=$(realpath "${dir}/../src/${package}")
if [ ! -d "${srcdir}" ]; then
echo "Error: Package sources directory not exists for package '${package}'."
exit 3
fi
if [ ! -d "../env" ]; then
mkdir -p "../env"
check_error $?
fi
if [ ! -d "../bin" ]; then
mkdir -p "../bin"
check_error $?
fi
if [ ! -d "../tmp" ]; then
mkdir -p "../tmp"
check_error $?
fi
export builddir=$(realpath "${dir}/../tmp/${package}")
export bindir=$(realpath "${dir}/../bin/${installname}")
rm -rf "${builddir}"
check_error $?
mkdir -p "${builddir}"
check_error $?
}
function common_package_init {
export scriptsdir=$(realpath .)
if [[ "${package}" == "" ]]; then
echo "Error: Missing package name"
echo "Example: ./build.sh virglrenderer"
exit 1
fi
export packagefile="${package}.sh"
export SRCTYPE="git"
export DEFAULT_BRANCH="master"
export AUTORECONF_FLAGS="-i"
if [ ! -f "../packages/${packagefile}" ]; then
echo "Error: Package '${package}' not exists."
exit 2
fi
}
function common_run_package {
cd ../packages
check_error $?
echo "${package}.sh"
source "./${package}.sh"
check_error $?
}
function env_path {
echo "export PATH=${bindir}/$1:\$PATH" >>"${envfile}"
check_error $?
}
function env_aclocal_path {
echo "export ACLOCAL_PATH=${bindir}/$1:\$PATH" >>"${envfile}"
check_error $?
}
function env_lib_library_path {
echo "export LD_LIBRARY_PATH=${bindir}/$1:\$LD_LIBRARY_PATH" >>"${envfile}"
check_error $?
}
function env_ldflags_path {
echo "export LDFLAGS=${bindir}/$1 \$LDFLAGS" >>"${envfile}"
check_error $?
}
function env_cppflags_path {
echo "export CPPFLAGS=${bindir}/$1 \$CPPFLAGS" >>"${envfile}"
check_error $?
}
function env_pkg_config_path {
echo "export PKG_CONFIG_PATH=${bindir}/$1:\$PKG_CONFIG_PATH" >>"${envfile}"
check_error $?
}
function env_man {
echo "export MANPATH=${bindir}/$1:\$MANPATH" >>"${envfile}"
check_error $?
}
function run_autoreconf {
flags="$*"
if [[ "${flags}" == "" ]]; then
flags="${AUTORECONF_FLAGS}"
fi
cd "${srcdir}"
check_error $?
echo "make distclean"
make distclean
echo "autoreconf ${flags}"
autoreconf ${flags}
unset flags
return 0
}
function run_src_script {
cd "${srcdir}"
check_error $?
echo $*
$*
check_error $?
}
function run_enable_same_dir_build {
echo "copy sources from $srcdir to ${builddir}"
cp -r "$srcdir" "${builddir}/.."
export srcdir="$builddir"
echo "change src dir to $srcdir"
}
function run_configure {
flags="$*"
if [[ "${flags}" == "" ]]; then
flags="${CONFIGURE_FLAGS}"
fi
cd "${builddir}"
check_error $?
echo "configure --prefix=\"${bindir}\" ${flags}"
"$srcdir"/configure --prefix="${bindir}" ${flags}
check_error $?
unset flags
}
function run_cmake {
flags="$*"
if [[ "${flags}" == "" ]]; then
flags="${CONFIGURE_FLAGS}"
fi
cd "${builddir}"
check_error $?
echo "cmake -DCMAKE_INSTALL_PREFIX:PATH=\"${bindir}\" \"$srcdir\" ${flags}"
cmake -DCMAKE_INSTALL_PREFIX:PATH="${bindir}" "$srcdir" ${flags}
check_error $?
unset flags
}
function run_make {
echo "make"
make
check_error $?
}
function run_make_install {
echo "make install"
make install
check_error $?
}
function run_git_clone {
echo "clone git repository $1"
git clone "$1" "../src/${package}"
check_error $?
}
function run_hg_clone {
echo "clone hg repository $1"
hg clone "$1" "../src/${package}"
check_error $?
}
function run_clone {
if [[ "${SRCTYPE}" == "git" ]]; then
run_git_clone $1
elif [[ "${SRCTYPE}" == "hg" ]]; then
run_hg_clone $1
else
echo "Error: unknown SRCTYPE: ${SRCTYPE}"
exit 1
fi
}
function run_git_switch_branch {
cd "${srcdir}"
check_error $?
if [[ "${srcbranch}" == "" ]]; then
export srcbranch="$1"
fi
echo "git checkout ${srcbranch}"
git checkout "${srcbranch}"
check_error $?
}
function run_hg_switch_branch {
cd "${srcdir}"
if [[ "${srcbranch}" == "" ]]; then
export srcbranch="$1"
fi
echo "hg update ${srcbranch}"
hg update "${srcbranch}"
check_error $?
}
function run_switch_branch {
branch="$1"
if [[ "${DEFAULT_BRANCH}" == "" ]]; then
echo "Error: source branch not set."
exit 1
fi
if [[ "${branch}" == "" ]]; then
branch="${DEFAULT_BRANCH}"
fi
if [[ "${SRCTYPE}" == "git" ]]; then
run_git_switch_branch ${branch}
elif [[ "${SRCTYPE}" == "hg" ]]; then
run_hg_switch_branch ${branch}
else
echo "Error: unknown SRCTYPE: ${SRCTYPE}"
exit 1
fi
unset branch
}
function repack_paths {
envvar="$1"
if [[ "$2" != "" ]]; then
envvar="$2"
fi
if [[ "$envvar" == "" ]]; then
return
fi
IFS=":"
packedpaths=""
for var in $envvar
do
packedpaths="${packedpaths}${bindir}/$var:"
done
unset IFS
echo "export $3=\"${packedpaths}\$$3\"" >>"${envfile}"
check_error $?
}
function repack_flags {
envvar="$1"
if [[ "$2" != "" ]]; then
envvar="$2"
fi
if [[ "$envvar" == "" ]]; then
return
fi
IFS=":"
packedpaths=""
for var in $envvar
do
packedpaths="${packedpaths}${4}${bindir}/$var "
done
unset IFS
echo "export $3=\"${packedpaths}\$$3\"" >>"${envfile}"
check_error $?
}
function package_use {
echo "package_use"
repack_paths "$ENV_PATH" "$OVERRIDE_ENV_PATH" "PATH"
repack_paths "$ENV_LD_LIBRARY_PATH" "$OVERRIDE_ENV_LD_LIBRARY_PATH" "LD_LIBRARY_PATH"
repack_paths "$ENV_PKG_CONFIG_PATH" "$OVERRIDE_ENV_PKG_CONFIG_PATH" "PKG_CONFIG_PATH"
repack_paths "$ENV_MANPATH" "$OVERRIDE_ENV_MANPATH" "MANPATH"
repack_paths "$ENV_ACLOCAL_PATH" "$OVERRIDE_ENV_ACLOCAL_PATH" "ACLOCAL_PATH"
repack_flags "$ENV_LDFLAGS_PATH" "$OVERRIDE_ENV_LDFLAGS_PATH" "LDFLAGS" "-L"
repack_flags "$ENV_CPPFLAGS_PATH" "$OVERRIDE_ENV_CPPFLAGS_PATH" "CPPFLAGS" "-I"
}
function common_use_package {
cd "${scriptsdir}"
check_error $?
export envfile="../env/run${envname}.sh"
echo "#!/bin/bash" >"${envfile}"
check_error $?
echo "" >>"${envfile}"
package_use
check_error $?
echo "\$*" >>"${envfile}"
check_error $?
chmod 0755 "${envfile}"
check_error $?
}
function package_get_source {
echo "package_get_source"
run_clone "${SRCURL}"
}
function package_update_source {
echo "package_update_source"
cd "../src/${package}"
if [ -d .git ]; then
echo "git fetch origin"
git fetch --all
check_error $?
run_switch_branch
echo "git pull --rebase"
git pull --rebase --all
return 0
fi
if [ -d .hg ]; then
echo "hg pull"
hg pull
check_error $?
return
fi
}
function common_clean_destination {
echo "clean ${bindir}"
rm -rf "${bindir}"
}
function package_build {
echo "package_build"
run_switch_branch
if [[ "$ENABLE_SAME_DIR_BUILD" != "" ]]; then
run_enable_same_dir_build
fi
if [[ "$SRC_INIT_COMMAND" != "" ]]; then
run_src_script "$SRC_INIT_COMMAND"
fi
case "$BUILD_TYPE" in
automake)
run_autoreconf
run_configure
;;
configure)
run_configure
;;
cmake)
run_cmake
;;
*)
echo "Error: unknown BUILD_TYPE. Valid values: automake, configure, cmake"
exit 1
;;
esac
run_make
run_make_install
}
function include {
source "./$1.sh"
}
|