#-*-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.47.2

######################################################################
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
