From cebf145ef16bcce245cf6ea6e69b4be14d2af5f7 Mon Sep 17 00:00:00 2001 From: Achim Gsell Date: Tue, 8 Aug 2017 14:08:13 +0200 Subject: [PATCH] Pmodules/libpbuild.bash - source/build directory changed to "${PMODULES_TMPDIR}/{src,build}/$P-$V" - function to find/download sources rewritten, specifing SOURCE_URL in build block is now required. - we now have pre_ and post_ function for all build stages --- Pmodules/libpbuild.bash | 280 ++++++++++++++++++++-------------------- 1 file changed, 142 insertions(+), 138 deletions(-) diff --git a/Pmodules/libpbuild.bash b/Pmodules/libpbuild.bash index 5267ce6..18a5afb 100644 --- a/Pmodules/libpbuild.bash +++ b/Pmodules/libpbuild.bash @@ -60,13 +60,10 @@ declare CompileInSource='no' # i.e:: ${PMODULES_ROOT}/${ModuleGroup)/${ModuleName} declare -x PREFIX='' -# Source directory for module. -# This is "${PMODULES_TMPDIR}/src/$P-$V" +# Source directory for module. Will be set to "${PMODULES_TMPDIR}/src/$P-$V" declare -x MODULE_SRCDIR='' -# Build directory for module -# This is either "${PMODULES_TMPDIR}/build/$P-$V" -# or "${PMODULES_TMPDIR}/build/$P-$V" +# Build directory for module. Will be set to "${PMODULES_TMPDIR}/build/$P-$V" declare -x MODULE_BUILDDIR='' ############################################################################## @@ -176,71 +173,56 @@ pbuild::module_exists() { # the URL. Otherwise we test for several possible names/extensions. # # Arguments: -# $1: name -# $2: version +# $1: store file name with upvar here +# $2: download URL # $3...: download directories # # Returns: -# File name via echo +# 0 on success otherwise a value > 0 # -# Used global variables (readonly): -# BUILD_BLOCK_DIR -# SOURCE_URL -# PMODULES_DISTFILESDIR -# -# :FIXME: -# The search with several extensions should be removed, as soon as -# the source URL is specified in all build-blocks -# -find_tarball() { - local -r name="$1" - local version="$2" +pbuild::get_source() { + local "$1" + local var="$1" + local -r url="$2" shift 2 - local -a dirs=( "${BUILD_BLOCK_DIR}" ) dirs+=( "$@" ) local -a fnames=() - if [[ -n "${SOURCE_URL}" ]]; then - basename="${SOURCE_URL##*/}" - for dir in "${dirs[@]}"; do - fnames+=( "${dir}/${basename}" ) - done - else - local release="${version##*-}" - version=${version%-*} - local ext - for dir in "${dirs[@]}"; do - for ext in tar tar.gz tgz tar.bz2 tar.xz; do - local fname - local -a fnames - fnames+=( "${dir}/${name}-${OS}-${version}-${release}.${ext}" ) - fnames+=( "${dir}/${name}-${OS}-${version}.${ext}" ) - fnames+=( "${dir}/${name}-${version}-${release}.${ext}" ) - fnames+=( "${dir}/${name}-${version}.${ext}" ) - done - done + local extension='' + if [[ "${url}" =~ ".tar." ]]; then + extension+='tar.' fi - fnames+=( "not found" ) - for fname in "${fnames[@]}"; do - [[ -r "${fname}" ]] && break + extension+="${url##*.}" + fname="$P-$V_PKG.${extension}" + dirs+=( 'not found' ) + for dir in "${dirs[@]}"; do + [[ -r "${dir}/${fname}" ]] && break done - if [[ "${fname}" == 'not found' ]] && [[ -n "${SOURCE_URL}" ]]; then - fname="${PMODULES_DISTFILESDIR}/${basename}" - curl \ - -L \ - --output "${fname}" \ - "${SOURCE_URL}" - if (( $? != 0 )); then - curl \ - --insecure \ - --output "${fname}" \ - "${SOURCE_URL}" - fi - fi - if [[ -r "${fname}" ]]; then - echo "${fname}" + local output_fname + if [[ "${dir}" == 'not found' ]]; then + local -r output_fname="${dirs[0]}/${fname}" + local -r method="${url%:*}" + case "${method}" in + file ) + cp "${url/file:}" "output_fname" + ;; + http | https | ftp ) + curl \ + -L \ + --output "${output_fname}" \ + "${url}" + if (( $? != 0 )); then + curl \ + --insecure \ + --output "${output_fname}" \ + "${url}" + fi + ;; + esac else - std::die 4 "${fname}: sources for '${name}/${version}' not found." + output_fname="${dir}/${fname}" fi + std::upvar "${var}" "${output_fname}" + [[ -r "${output_fname}" ]] } # @@ -273,24 +255,41 @@ search_variants_file() { return 1 } + +pbuild::pre_prep() { + : +} + +pbuild::post_prep() { + : +} + +pbuild::unpack() { + local -r file="$1" + local -r dir="$2" + ( + if [[ -n "${dir}" ]]; then + mkdir -p "${dir}" + cd "${dir}" + fi + tar -xv --strip-components 1 -f "${file}" + ) +} + ############################################################################### # # extract sources. For the time being only tar-files are supported. # pbuild::prep() { - - TARBALL=$( find_tarball "${P/_serial}" "${V}" "${PMODULES_DISTFILESDIR}" ) - - # untar sources - if [[ ! -d ${MODULE_SRCDIR} ]]; then - mkdir -p "${PMODULES_TMPDIR}/src/$P-$V" - ( - cd "${PMODULES_TMPDIR}/src/$P-$V" - tar -xv --strip-components 1 -f "${TARBALL}" - ) - (cd "${MODULE_SRCDIR}" && pbuild::patch_sources) - fi - + local source_file='' + pbuild::get_source \ + source_file \ + "${SOURCE_URL}" \ + "${PMODULES_DISTFILESDIR}" \ + "${BUILD_BLOCK_DIR}" || + std::die 4 "$P/$V: sources for not found." + pbuild::unpack "${source_file}" "${MODULE_SRCDIR}" + pbuild::patch_sources # create build directory mkdir -p "${MODULE_BUILDDIR}" } @@ -315,10 +314,26 @@ pbuild::configure() { --prefix="${PREFIX}" } +pbuild::post_configure() { + : +} + +pbuild::pre_build() { + : +} + pbuild::build() { make -j${JOBS} } +pbuild::post_build() { + : +} + +pbuild::pre_install() { + : +} + pbuild::install() { make install } @@ -327,6 +342,8 @@ pbuild::post_install() { : } +eval "pbuild::post_install_${OS}() { :; }" + pbuild::install_doc() { local -r docdir="${PREFIX}/${_DOCDIR}/$P" @@ -377,28 +394,6 @@ pbuild::make_all() { # helper functions # - #...................................................................... - # - # load default versions - # - set_default_versions() { - local -r fname="$1" - [[ -r ${fname} ]] || return 0 - - local varname='' - while read _name _version; do - [[ -z ${_name} ]] && continue - [[ -z ${_version} ]] && continue - [[ "${_name:0:1}" == '#' ]] && continue - var_name=$(echo ${_name} | tr [:lower:] [:upper:])_VERSION - # don't set version, if already set - if [[ -z ${!var_name} ]]; then - eval ${var_name}="${_version}" - fi - done < "${fname}" - - } - #...................................................................... # # test whether a module is loaded or not @@ -555,11 +550,11 @@ pbuild::make_all() { if [[ -z ${ModuleGroup} ]]; then std::die 1 "${P}/${V}: group not set." fi - MODULE_SRCDIR="${PMODULES_TMPDIR}/src/$P-$V" + MODULE_SRCDIR="${PMODULES_TMPDIR}/$P-$V/src" if [[ "${CompileInSource}" == "yes" ]]; then MODULE_BUILDDIR="${MODULE_SRCDIR}" else - MODULE_BUILDDIR="${PMODULES_TMPDIR}/build/$P-$V" + MODULE_BUILDDIR="${PMODULES_TMPDIR}/$P-$V/build" fi # build module name @@ -707,9 +702,6 @@ pbuild::make_all() { ModuleRelease='unstable' std::info "${P}/${V}: will be released as \"${ModuleRelease}\"" - # set tar-ball and flags for tar - TARBALL=$( find_tarball "${P/_serial}" "${V}" "${PMODULES_DISTFILESDIR}" ) - C_INCLUDE_PATH="${PREFIX}/include" CPLUS_INCLUDE_PATH="${PREFIX}/include" CPP_INCLUDE_PATH="${PREFIX}/include" @@ -798,69 +790,61 @@ pbuild::make_all() { std::info "${P}/${V}: setting release to '${ModuleRelease}' ..." echo "${ModuleRelease}" > "${dstdir}/.release-$V" } - - ############################################################################## - # - # here we really start with make_all() - # - local building='no' - echo "${P}:" - # setup module specific environment - if [[ ${bootstrap} == no ]]; then - load_build_dependencies - check_and_setup_env - else - check_and_setup_env_bootstrap - fi - - if [[ ! -d "${PREFIX}" ]] || \ - [[ ${force_rebuild} == 'yes' ]] || \ - [[ ${bootstrap} == 'yes' ]]; then - building='yes' + #...................................................................... + # build module $P/$V + build_module() { echo "Building $P/$V ..." [[ ${dry_run} == yes ]] && std::die 0 "" check_compiler if [[ ! -e "${MODULE_BUILDDIR}/.prep" ]] || \ [[ ${force_rebuild} == 'yes' ]] || \ - [[ -z ${target} ]]; then - pbuild::prep + [[ -z ${target} ]] || \ + [[ "${target}" == "prep" ]]; then + mkdir -p "${MODULE_SRCDIR}" + cd "${MODULE_SRCDIR}" + ( pbuild::pre_prep ) + ( pbuild::prep ) + ( pbuild::post_prep ) touch "${MODULE_BUILDDIR}/.prep" fi [[ "${target}" == "prep" ]] && return 0 if [[ ! -e "${MODULE_BUILDDIR}/.configure" ]] || \ [[ ${force_rebuild} == 'yes' ]] || \ - [[ -z ${target} ]]; then - cd "${MODULE_SRCDIR}" - pbuild::pre_configure - cd "${MODULE_BUILDDIR}" - pbuild::configure + [[ -z ${target} ]] || \ + [[ "${target}" == "configure" ]]; then + cd "${MODULE_BUILDDIR}" + ( pbuild::pre_configure ) + ( pbuild::configure ) + ( pbuild::post_configure ) touch "${MODULE_BUILDDIR}/.configure" fi [[ "${target}" == "configure" ]] && return 0 if [[ ! -e "${MODULE_BUILDDIR}/.compile" ]] || \ [[ ${force_rebuild} == 'yes' ]] || \ - [[ -z ${target} ]]; then + [[ -z ${target} ]] || \ + [[ "${target}" == "compile" ]]; then cd "${MODULE_BUILDDIR}" - pbuild::build + ( pbuild::pre_build ) + ( pbuild::build ) + ( pbuild::post_build ) touch "${MODULE_BUILDDIR}/.compile" fi [[ "${target}" == "compile" ]] && return 0 if [[ ! -e "${MODULE_BUILDDIR}/.install" ]] || \ [[ ${force_rebuild} == 'yes' ]] || \ - [[ -z ${target} ]]; then + [[ -z ${target} ]] || \ + [[ "${target}" == "install" ]]; then cd "${MODULE_BUILDDIR}" - pbuild::install - pbuild::post_install - if typeset -F pbuild::post_install_${OS} 1>/dev/null 2>&1; then - pbuild::post_install_${OS} "$@" - fi - pbuild::install_doc - post_install + ( pbuild::pre_install ) + ( pbuild::install ) + ( pbuild::post_install_${OS} "$@" ) + ( pbuild::post_install ) + ( pbuild::install_doc ) if [[ ${bootstrap} == 'no' ]]; then write_runtime_dependencies write_build_dependencies @@ -868,14 +852,34 @@ pbuild::make_all() { touch "${MODULE_BUILDDIR}/.install" fi [[ "${target}" == "install" ]] && return 0 + + install_modulefile [[ ${enable_cleanup_build} == yes ]] && pbuild::cleanup_build [[ ${enable_cleanup_src} == yes ]] && pbuild::cleanup_src - + } + + ############################################################################## + # + # here we really start with make_all() + # + + # setup module specific environment + if [[ "${bootstrap}" == 'no' ]]; then + load_build_dependencies + check_and_setup_env + if [[ ! -d "${PREFIX}" ]] || \ + [[ "${force_rebuild}" == 'yes' ]] || \ + [[ -n "${target}" ]]; then + build_module + else + std::info "${P}/${V}: already exists, not rebuilding ..." + fi else - std::info "${P}/${V}: already exists, not rebuilding ..." + check_and_setup_env_bootstrap + build_module fi - [[ ${bootstrap} == 'no' ]] && install_modulefile + return 0 }