
findport () {
  find "/$1" -noleaf -maxdepth 3 -type d -name "$2" | head -1
}

ask () {
  echo "----------------------------------------------------------------------"
  color PURPLE
  echo -e "? $2"
  if [ "$1" = "" ]; then
    echo -n ": "
  else
    echo -n -e "  ($1): "
  fi
  color WHITE
}

require() {
  if [ "$2" = "" ]; then
    echoc RED "! nothing was specified for '$1', giving up."
    exit 1
  fi
}

fn_read_settings() {
  echo "> reading global settings"
  if [ ! -f "$DIST_VERSION" ]; then
    echoc RED "! global file $DIST_VERSION not found"
    exit 1
  fi
  set -a
  . $DIST_VERSION
  DISTRELEASE="$NAME $VERSION"
  set +a
  echo "- distribution $DISTRELEASE"
  # Clean up version because it conflicts with the package version in INFO
  VERSION=""
  # read main BPP option file
  if [ ! -f "$PACKAGE_CONF" ]; then
    echoc RED "! global file $PACKAGE_CONF not found"
    exit 1
  fi
  echo "> reading package conf"
  set -a
  . "$PACKAGE_CONF"
  set +a
}

fn_read_info() { 
  if [ ! -f "$PKGINFO" ]; then
    echoc RED "- $PKGINFO does not exists"
    exit
  fi
  echo "> reading package INFO file"
  # Set Default Values
  COPYRIGHT="GPL"
  DISKNAME="1"
  DISKUSAGE=0
  STATUS="UNSTABLE"
  OSNAME="`uname -s`"
  OSVERSION="`uname -r`"
  ARCH="i386"
  OPTIM="`uname -m`"
  DISTRIBUTION="$DISTRELEASE"
  BUILDHOST="`hostname`.`domainname`"
  BUILDTIME="`date`"
  BUILDNUMBER=0
  BPPVERSION="$PKG_VERSION"
  # Read
  set -a
  . "$PKGINFO"
  FULLVERSION="${SONAME}_${VERSION}"
  set +a
}

fn_write_info() {
  echoc GREEN "> updating package INFO file"
  > "$PKGINFO"
  echo "# Global"			>>"$PKGINFO"
  echo "SONAME=$SONAME"			>>"$PKGINFO"
  echo "VERSION=\"$VERSION\""		>>"$PKGINFO"
  echo "CATEGORY=\"$CATEGORY\""		>>"$PKGINFO"
  echo "ARCH=\"$ARCH\""			>>"$PKGINFO"
  echo "OPTIM=\"$OPTIM\""		>>"$PKGINFO"
  echo "# Credits"			>>"$PKGINFO"
  echo "SUMMARY=\"$SUMMARY\""		>>"$PKGINFO"
  echo "AUTHOR=\"$AUTHOR\""		>>"$PKGINFO"
  echo "COPYRIGHT=\"$COPYRIGHT\""	>>"$PKGINFO"
  echo "MANTAINER=\"$MANTAINER\""	>>"$PKGINFO"
  echo "HOMEPAGE=\"$HOMEPAGE\""		>>"$PKGINFO"
  echo "# Distrib"			>>"$PKGINFO"
  echo "DISKNAME=$DISKNAME"		>>"$PKGINFO"
  echo "DISKUSAGE=$DISKUSAGE"		>>"$PKGINFO"
  echo "STATUS=\"$STATUS\""		>>"$PKGINFO"
  echo "# Build Info"			>>"$PKGINFO"
  echo "OSNAME=\"$OSNAME\""		>>"$PKGINFO"
  echo "OSVERSION=\"$OSVERSION\""	>>"$PKGINFO"  
  echo "DISTRIBUTION=\"$DISTRIBUTION\""	>>"$PKGINFO"
  echo "BUILDHOST=\"$BUILDHOST\""	>>"$PKGINFO"
  echo "BUILDTIME=\"$BUILDTIME\""	>>"$PKGINFO"
  echo "BUILDNUMBER=$BUILDNUMBER"	>>"$PKGINFO"
  echo "BPPVERSION=\"$BPPVERSION\""	>>"$PKGINFO"
  echo "# Checks"			>>"$PKGINFO"
  echo "CONFLICTS=\"$CONFLICTS\""	>>"$PKGINFO"
  echo "DISKUSAGES=\"$DISKUSAGES\""	>>"$PKGINFO"
  echo "REQUEST=\"$REQUEST\""		>>"$PKGINFO"
}


# ====================================================================


TarballDownload() {
  SITEA="$1"
  SITEB=""
  SOURCES="$2"
  
  # Look up for depots  
  for i in $SITEA ; do
    case $i in
      depot*)
        DEPOT=`echo $i | cut -b 8-`
        if [ -f "$SOURCE_DEPOTS/$DEPOT" ]; then
	  SITEB="$SITEB `cat $SOURCE_DEPOTS/$DEPOT`"
        else
          echoc YELLOW "! depot $DEPOT non trovato"
        fi
	break
        ;;
      *)
        SITEB="$SITEB $i"
	;;
    esac
  done  

  # Download
  for i in $SOURCES ; do

    # still there ?
    if [ -f "$PKG_SRCDEPOT/$i" ]; then
      echoc GREEN "- tarball $i is already there"
      continue
    fi

    # Look up on internet
    for j in $SITEB ; do
      echo "- looking up for $i in $j"
      ( cd $PKG_SRCDEPOT ; ncftp $i )
      REPLY=$?
      if [ $REPLY -eq 0 ]; then
        echoc GREEN "- tarball $i has been downloaded."
        break
      else
        echoc YELLOW "- tarball $i has not been downloaded ($REPLY)."
      fi
    done

    # Check if the tarball is really there
    if [ ! -f "$PKG_SRCDEPOT/$i" ]; then
      echoc RED "! tarball $i was not found on the internet"
      exit 1
    fi
  done      
}

TarballChecksum() {
  TEMPFILE="$PKG_SRCDEPOT/$2"
  if [ ! -f $TEMPFILE ]; then
    echoc RED "! source file $TEMPFILE not found"
    exit 1
  fi
  echo "> checksumming $2"
  CSUM=`( cd $PKG_SRCDEPOT ; md5sum "$TEMPFILE" )`
  CSUM=`echo $CSUM | cut -f 1 -d ' '`
  if [ "$CSUM" != "$1" ]; then
    echoc YELLOW "! invalid checksum for $2"
    echoc YELLOW "  $CSUM instead of $1"
    exit 1
  fi
  #echoc GREEN "- checksum of $2 is OK"
}

TarballExtract() {
  [ ! -d $PKG_WORKDIR ] && mkdir -p $PKG_WORKDIR
  cd $PKG_WORKDIR
  for i in $1 ; do
    echo -n "> untarring $i ..."
    untar $PKG_SRCDEPOT/$i | wc -l
    if [ $? -ne 0 ]; then
      echoc RED "! tarball $i has not been successfully untarred"
      exit 1
    fi
  done
}

RunScript() {
  echo "> running $1 ..."
  ( cd / ; $PKGSCRIPT/$1 )
  if [ $? -ne 0 ]; then
    echoc RED "! $1 has returned the error nr. $REPLY"
    exit 1
  fi
  return 0
}


TarballPatch() {
  echo "> applying patchfile $1"
  PFILE="$PKG_SRCDEPOT/$1"
  # File exist
  if [ ! -f "$PFILE" ]; then
    echoc RED "! patchfile $1 is missing"
    exit 1
  fi
  # choose a format
  case $1 in
    *gz)  CMD="gunzip -dc" ;;
    *bz)  CMD="bunzip -dc" ;;
    *bz2) CMD="bunzip2 -dc" ;;
    *zip) CMD="unzip -d" ;;
    *Z)   CMD="uncompress -c" ;;
    *)    CMD="cat" ;;
  esac
  # apply
  $CMD "$PFILE" | patch -p1
  REPLY=$?
  if [ $REPLY -ne 0 ]; then
    echoc RED "! patch error $REPLY when applying $1"
    exit 1
  fi
}
