#-*-mode:  sh -*-

# Copyright (c) 2008-2011 Aleksey Cheusov <vle@gmx.net>
# All rights reserved.
#
# See LICENSE file

######################################################################

PAeNA2NA ()  { sed 's/[^ ]*;//g' "$@"; }
PAeNA2PAe () { sed 's/;[^ ]*//g' "$@"; }
PAeNA2PA ()  { sed 's/[;:][^ ]*//g' "$@"; }

verbose_print (){
    printf "$1" 1>&2
}

sort_uniq (){
    env LC_ALL=C sort -u "$@"
}

sort_uniq_inplace (){
    sort_uniq "$1" > "$1".tmp
    mv "$1".tmp "$1"
}

get_log_dir (){
    # $1 - pkgpath
    # $2 - pkgname
    short_pkgpath="$(echo $1 | sed -e 's,:.*,,' -e 's,/,_,')"
    echo "${short_pkgpath}_$2"
}

print_binrep_spec_files (){
    echo All/pkg_summary.bz2
    echo All/pkg_summary.gz
    echo All/pkg_summary.txt
    echo SHA512.bz2
    echo SHA512.gz
    echo SHA512.txt
}

filter_out (){
    # $1 - filename containing lines to filter out
    # $@ - input
    runawk -f xgetline.awk -e '
	BEGIN {
	    while (xgetline0(ARGV [1])) filter_out [$0]=0;
	    ARGV [1] = ""
	}
	!($0 in filter_out)' "$@"
}

list_built_pkgs (){
    awk 'NF == 3 { print $2 ".tgz" }' $REPORT1_DIR/META/packages_built_total.txt |
    grep -v ^BH--
}

list_all_built_pkgs (){
    awk '/^PKGNAME=/ {print substr($0, 9) ".tgz"}' "$PKG_SUMMARY"
}

switch_to_target (){
    if is_true "$CROSS_COMPILE"; then
	PACKAGES="$TARGET_PACKAGES"
	PKG_SUMMARY="$TARGET_PKG_SUMMARY"
    fi
}

rsync_upload (){
    # upload files from stdin and remove the rest
    awk 'BEGIN {print "+ All"} {print "+", $0} END {print "- *"}' |
    $RSYNC_CMD -a --exclude-from=- --delete-excluded --delete-delay -e ssh . "$@"
}

shquote (){
    __cmd=`printf '%s\n' "$1" | sed "s|'|'\\\\\''|g"`
    printf "%s\n" "'$__cmd'"
}

shquote_all (){
    for i in "$@"; do
	shquote "$i"
	printf ' '
    done
}

export LC_ALL=C # for sort and uniq

######################################################################
if test -z "$BUILD_ID"; then
    echo "BUILD_ID MUST be set" 1>&2
    exit 2
fi
if test -z "$REPORTS_DIR"; then
    echo "REPORTS_DIR MUST be set" 1>&2
    exit 2
fi

if echo "$BUILD_ID" | grep ^/ > /dev/null; then
    REPORT1_DIR="$BUILD_ID"
    BUILD_ID=$(basename "$BUILD_ID")
else
    REPORT1_DIR="$REPORTS_DIR/$BUILD_ID"
fi

meta_dir="$REPORT1_DIR/META"
tmpdir="$meta_dir/tmp"

packages_failed_notavail_fn="$meta_dir/packages_failed_notavail.txt"
packages_failed_scan_fn="$meta_dir/packages_failed_scan.txt"
packages_failed_deps_fn="$meta_dir/packages_failed_deps.txt"
packages_failed_fn="$meta_dir/packages_failed.txt"
packages_failed_total_fn="$meta_dir/packages_failed_total.txt"
packages_built_fn="$meta_dir/packages_built.txt"
packages_built_prev_fn="$meta_dir/packages_built_prev.txt"
packages_built_total_fn="$meta_dir/packages_built_total.txt"
progress_fn="$meta_dir/progress.txt"

build_src_summary_log_fn="$meta_dir/build_src_summary_log.txt"
errors_fn="$meta_dir/errors.txt"

pkg_src_summary_fn="$meta_dir/pkg_src_summary.txt"
summary_cmp_fn="$meta_dir/summary_cmp.txt"
bin_summary_fn="$meta_dir/pkg_summary.txt"
enriched_summary_fn="$meta_dir/pkg_enriched_summary.tmp"

check_unregistered_conflicts_fn="$meta_dir/check_unregistered_CONFLICTS.txt"
check_missing_progs_fn="$meta_dir/check_missing_programs.txt"
check_required_vs_provides_fn="$meta_dir/check_REQUIRES_vs._PROVIDES.txt"
check_broken_REQUIRES_fn="$meta_dir/check_broken_REQUIRES.txt"
check_configure_errors_fn="$meta_dir/check_configure_errors.txt"
check_PLIST_errors_fn="$meta_dir/check_PLIST_errors.txt"
check_missing_headers_fn="$meta_dir/check_missing_headers.txt"
check_missing_libraries_fn="$meta_dir/check_missing_libraries.txt"
check_permission_denied_fn="$meta_dir/check_permission_denied.txt"
check_libtool_bugs_fn="$meta_dir/check_libtool_bugs.txt"
check_pkgsrc_warnings_fn="$meta_dir/check_pkgsrc_warnings.txt"
check_segfault_fn="$meta_dir/check_segmentation_faults.txt"
check_memalloc_fn="$meta_dir/check_memory_allocation_failures.txt"

# check_extra_conflicts_fn=$meta_dir/check_extra_conflicts.txt
# check_uninstallable_fn=$meta_dir/check_uninstallable.txt
# check_not_found_tool_fn=$meta_dir/check_not_found_tool.txt
# check_version_fn=$meta_dir/check_version.txt
# check_bad_build_deps_fn=$meta_dir/check_bad_build_deps.txt

build_start_fn="$meta_dir/build_start.tmp"
build_end_fn="$meta_dir/build_end.tmp"

queue_fn="$tmpdir/queue_PAe.tmp"
rebuild_PAe_fn="$tmpdir/rebuild_PAe.tmp"

aux_reqd_deps_fn="$MSCOMMONDIR/reqd_deps.txt"

reqd_deps_NA_fn="$tmpdir/reqd_deps_NA.tmp"

bb_history_fn="$REPORTS_DIR/bulk_builds_history.txt"

version='0.48.0'

######################################################################
enrich_pkgpath (){
    fields="$1"
    shift

    awk -v pkg_src_summary="$pkg_src_summary_fn" -v fields="$fields" '
BEGIN {
   fields = ("PKGPATH " fields)
   cnt=split(fields, n2f, / /)
   for (i=1; i <= cnt; ++i){
      f2n [n2f [i]] = i
   }
}
FILENAME != pkg_src_summary {
   for (i=1; i <= cnt; ++i){
      if (i > 1)
         printf " "

      printf "%-25s", value[$1, n2f[i]]
   }
   printf "\n"
   next
}
NF == 0 {
   for (f in v){
      value [v["PKGPATH"], f] = v[f]
   }
   delete v
   next
}
{
   $1 = $1
   fname = $0
   sub(/=.*$/, "", fname)
}
fname in f2n {
   if (fname == "MAINTAINER"){
      fvalue = $1
      sub(/,.*$/, "", fvalue)
   }else{
      fvalue = $0
   }
   sub(/^[^=]*=/, "", fvalue)
   v [fname] = fvalue
   next
}
' "$pkg_src_summary_fn" "$@"
}

######################################################################
unset PKG_PATH || true

export PATH="/usr/pkg/bin:$PATH"
export PSS_POST_PATH="/usr/pkg/bin"
