#!/bin/bash

TEMP=$(getopt -o acf:e:d:il:n:p:r:s:u:x \
  --long automatic,check-pack,copy,copypac,copypack,debug,def:,extdir:,init,initpac,initpack,lang:,prep-local,name:,obsuser:,product:,pdf:,skip-changes-update,spec:,user: \
  -n "$0" -- "$@")
# Note the quotes around `$TEMP': they are essential!
eval set -- "$TEMP"

check_file () {
  [ -f $1 ] || { echo "*** $1 does not exist" ; exit 1 ; }
}

check_dir () {
  [ -d $1 ] || { echo "*** $1 does not exist" ; exit 1 ; }
}

check_bin () {
  which $1 >/dev/null || {
    echo "*** $1 is not executable"
    case $1 in
      xml)
        echo "missing package: xmlstarlet";;
      *) true ;;
    esac
    exit 1
  }
}

# default
obsuser=keichwa
my_echo=echo
while true ; do
  case "$1" in
    -a|--automatic) my_echo=""; shift 1;;
    -c|--check-pack) check_pack=yes; shift 1;;
    --copy|--copypac|--copypack) make_type=copy; shift 1;;
    -d|--def)    product_file=$2 ; check_file $product_file; shift 2 ;;
    -e|--extdir) packdir=$2 ; extdir=true ; check_dir $packdir; shift 2 ;;
    -f) from_api_server=$2; shift 2 ;;
    -i|--init|--initpac|--initpack) make_type=init; shift 1;;
    -l|--lang)   ll=$2 ; shift 2 ;;
    -p|--pdf)    pdf=$2 ; check_file $pdf; shift 2 ;;
    --prep-local)     prep_local=yes ; shift 1 ;;
    -r) from_repo=$2; shift 2 ;;
    -s|--spec)   spec_in=$2; shift 2 ;;
    -n|--name|--product) product=$2 ; shift 2 ;;
    -u|--user|--obsuser) obsuser=$2 ; shift 2;;
    --skip-changes-update) skip_changes=yes; shift 1 ;;
    -x|--debug)  set -x; shift 1 ;;
    --) shift ; break ;;
  esac
done
#echo $extdir
# you never know...
unset DRAFT

# xmlstarlet
check_bin xml

[ -z "$product" -o -z "$product_file" ] && {
  cat << EOFusage
Usage: $0 [options] -d DEF-file -n package_name
Valid options are:

  -u user
  	specify the OBS username, default: '$obsuser'
  -n package-name (without _LL)
     Ususally 'PRODUCTNAME-guide', check the
     Product devel projects for example names.
  -e extdir
  	for providing ready-build PDF files.
  -l language
  	two letter language tag.
  -p PDF-file
  	reuse an existing PDF-file.
  --prep-local
  	prepare local, do not submit to a build service instance
  -s spec-file
  	use this spec-file as the template spec file
  -a
        automatic update (= send submitreq without human interaction)
  --copy -f SOURCE-API-SERVER -r SOURCE-REPO
        copy package (untested)
  -i
        initialize package
  -x
  	enable debugging.
EOFusage

  exit 1
}

#echo=echo
[ -z "$my_echo" ] && \
  [ "$make_type" = copy -o "$make_type" = init ] && {
  echo "automactic submission does not work with --copypac or --initpac"
  exit 1
}
[ -z "$make_type" ] && make_type=update
if [ "$make_type" = copy ]; then
  [ -z "$from_api_server" ] && {
    echo "from where to copy is missing: -f SOURCE-API-SERVER"; exit 1
    }
  [ -z "$from_repo" ] && {
    echo "from which repo to copy is missing: -r SOURCE-REPO"; exit 1
  }
fi

if [ -z "$ll" ]; then
  # find first first ENV and source it
  . ENV-$(awk '/^#/ {next}; {print $2; exit}' $product_file)
  ll=$(make VARIABLE=LL showvariable)
  [ -z "$ll" ] && { echo "source ENV-* first"; exit 1; }
  # this is not reliable enough...
  # ll=$(basename $(pwd))
fi

lang=${ll%_*}
[ $lang = $ll ] && LL=$ll || {
  declare -u CC=${ll#*_}
  LL=${lang}_$CC
  # echo $LL
}

# product=opensuse-manual
#product=$2
package=${product}_$LL
flavor=${product%%-*}
case $flavor in
  sled) slash_flavor=/sled ;;
  sles) slash_flavor=/sles ;;
  # opensuse) slash_flavor=/opensuse ;;
  *) slash_flavor= ;;
esac
# use version from $DISTVER??
version=11.3
notice="Automatically generated out of the docs SVN"
# by default, use the spec.in from this directory
if [ -z "$spec_in" ]; then
  if [ -f ${0%/*}/book.spec.in ]; then
    spec_in=${0%/*}/book.spec.in
  else
    spec_in=/usr/share/susedoc-buildbook/book.spec.in
  fi
fi
# echo $spec_in; exit
spec=autobuild/${product}_${LL}.spec
### jsp_in
if [ -f ${0%/*}/sm-index.jsp.in ]; then
  jsp_in=${0%/*}/sm-index.jsp.in
else
  jsp_in=/usr/share/susedoc-buildbook/sm-index.jsp.in
fi

make_validate () {
  $echo make validate || exit 1
  # now build the environment
}

make_package () {
  # $echo make validate || exit 1
  make_validate
  $echo make package || exit 1
}

write_pdf_spec () {
  [ $1 = 0 ] && n="" || n=$1
  l=$2
  pdf_no=$2
  readme_no=$2
  if [ "$status" = dummy ]; then
    echo "This is a placeholder document." >autobuild/README-$n.txt
    sed -i "/^#SOURCES/i\\
Source$n$((l++)): README-$n.txt" $spec

  else
  sed -i "/^#SOURCES/i\\
Source$n$((l++)): ${BOOK}_$LL.pdf\\
#Source$n$((l++)): ${BOOK}_$LL-graphics.tar.bz2\\
#Source$n$((l++)): ${BOOK}_$LL.tar.bz2\\
Source$n$l: ${BOOK}_$LL-pdf-yelp.tar.bz2" $spec
  sed -i "/^#PDFPREP/i\\
tar xvf %{S:$n$((l++))}" $spec
  case ${BOOK} in
    susemanager-jsp) : ;;
    susemanager-*) sed -i "/^#SOURCES/i\\
Source$n$l: ${BOOK}.index.jsp" $spec
      ;;
  esac


#  if [ -f autobuild/${BOOK}_$LL-graphics.tar.bz2 ]; then \
#    sed -i 's/^#\(Source.*graphics.tar.bz2\)/\1/' $spec
#  fi
#   sed -i "/^#PDFPREP/i\\
# cp %{S:${n}$pdf_no} ." $spec
  fi
  #On 11.1 renaming apparmor-admin -> opensuse-apparmor-admin
  case ${BOOK} in
    opensuse-apparmor-admin) pdf_prov="Provides: apparmor-admin_$LL-pdf"
      pdf_obs="Obsoletes: apparmor-admin_$LL-pdf <= 11.0"
      ;;
    *) pdf_prov=""; pdf_obs="" ;;
  esac

  book=$(echo $BOOK | tr [[:upper:]] [[:lower:]])
  sed -i "/^#PDFSUB/i\\
\%package -n ${book}_$LL-pdf\\
Group:        Documentation/SUSE\\
License:      -\\
Summary:      -\\
#Provides:    locale(desktop-data-openSUSE:$LL)\\
###PDFOBS" $spec
  case ${BOOK} in
    susemanager-jsp) : ;;
    susemanager-*) sed -i "/^#PDFSUB/i\\
PreReq:       susemanager-jsp_en" $spec
      ;;
  esac

### hack slepos 11 sp1 FIXME
  if [ $product = slepos-guide ]; then
    sed -i "s/^###PDFOBS/#PDFOBS/" $spec
  fi
  if [ -n "$pdfobs" ]; then
    sed -i "\
/^#PDFOBS/i\\
Obsoletes:      $pdfobs\\
Provides:       $pdfobs
" $spec
  fi
  if [ "$pdf_obs" != "" ]; then
    sed -i "/^#PDFSUB/i\\
$pdf_prov\\
$pdf_obs" $spec
  fi
  sed -i "/^#PDFSUB/i\\
\\
\%description -n ${book}_$LL-pdf\\
-\\
" $spec

  if [ "$status" = dummy ]; then
    sed -i "/^#PDFINST/i\\
cp \%{S:$n$readme_no} . \\
" $spec
    sed -i "/^#PDFFILES/i\\
\%files -n ${book}_$LL-pdf\\
\%defattr(-, root, root)\\
\%doc README-$n.txt\\
\\
" $spec
    
  else
    sed -i "/^#PDFINST/i\\
cp \%{S:$n$pdf_no} . \\
mkdir $3 \\
" $spec
    case ${BOOK} in
      susemanager-jsp) : ;;
      susemanager-*) sed -i "/^#PDFINST/i\\
sub_dir=\${RPM_BUILD_ROOT}/var/lib/tomcat6/webapps/rhn/help/${book#susemanager-}\\
subpdf_dir=\$sub_dir/en-US/pdf\\
mkdir -p \$subpdf_dir\\
cp %{S:$n$l} \$sub_dir/index.jsp\\
pushd \$subpdf_dir\\
pkgpdf_dir=usr/share/doc/manual/${book}_${LL}-pdf\\
mkdir -p \${RPM_BUILD_ROOT}/\$pkgpdf_dir\\
echo 'to be replaced' > \${RPM_BUILD_ROOT}/\$pkgpdf_dir/${book}_${LL}.pdf\\
ln -sf ../../../../../../../../../\$pkgpdf_dir/${book}_${LL}.pdf\\
# rm \$pkgpdf_dir/${book}_${LL}.pdf\\
popd" $spec
        ;;
    esac

    sed -i "/^#PDFFILES/i\\
\%files -n ${book}_$LL-pdf\\
\%defattr(-, root, root)\\
\%doc ${BOOK}_$LL.pdf\\
\%{_datadir}/help/${book}_$LL-pdf.document\\
\%dir %{_datadir}/kde4/apps/khelpcenter/plugins\\
\%dir %{_datadir}/kde4/apps/khelpcenter\\
\%dir %{_datadir}/kde4/apps\\
\%dir %{_datadir}/kde4\\
\%{_datadir}/kde4/apps/khelpcenter/plugins/${book}_$LL-pdf.desktop" $spec
  case ${BOOK} in
    susemanager-jsp) : ;;
    susemanager-*) sed -i "/^#PDFFILES/i\\
# dir with link to the PDF\\
\%dir /var/lib/tomcat6\\
\%dir /var/lib/tomcat6/webapps\\
\%dir /var/lib/tomcat6/webapps/rhn\\
\%dir /var/lib/tomcat6/webapps/rhn/help\\
\%dir /var/lib/tomcat6/webapps/rhn/help/${book#susemanager-}\\
\%dir /var/lib/tomcat6/webapps/rhn/help/${book#susemanager-}/en-US\\
/var/lib/tomcat6/webapps/rhn/help/${book#susemanager-}/index.jsp\\
/var/lib/tomcat6/webapps/rhn/help/${book#susemanager-}/en-US/pdf" $spec
      ;;
  esac

  fi

  if [ $format = pdfhtml ]; then
    sed -i '/^%package pdf/,/^-$/d;/^%files pdf/,/^#PDFXXX$/d' \
      $spec
  fi
}

make_pdfhtml () {
  n=$2
  [ $n = 0 ] && n=""
  l=0
  . ENV-$1
  rm -f profiled/dist/*.xml
  if [ "$status" = dummy ]; then
    if [ "$2" = 0 ]; then
      s=$l
    else
      s=$2$l
    fi
    sed -i "/^#PREP/i\\
mkdir html\\
cp %{S:$s} html/index.html" $spec

    echo "<p>This is a placeholder document.</p>" >autobuild/index.html
    sed -i "s|^\%dir \%{_datadir}/help||
s|^\%{_datadir}/help/\*||
/^#SOURCES/i\\
Source$s: index.html" $spec
    echo $((l++))
  else

  # do not "make package" if files are externally (Dublin) provided
  if [ -z "$extdir" ]; then
    make_package
    ### if internally generated, set default packdir
    packdir=package-$1
  fi

  cp -p $packdir/${1}_$ll-html.tar.bz2 \
    autobuild/${1}_$LL-html.tar.bz2
  cp -p $packdir/${1}_$ll-graphics.tar.bz2 \
    autobuild/${1}_$LL-graphics.tar.bz2
  cp -p $packdir/${1}_$ll-desktop.tar.bz2 \
    autobuild/${1}_$LL-desktop.tar.bz2
  sed -i "s:@BOOK@:$BOOK:" $spec
  #HTML
  sed -i "/^#SOURCES/i\\
Source$n$((l++)): ${BOOK}_$LL-html.tar.bz2\\
Source$2$((l++)): ${BOOK}_$LL-desktop.tar.bz2\\
#Source$2$((l++)): ${BOOK}_$LL-graphics.tar.bz2\\
Source$2$((l++)): ${BOOK}_$LL.tar.bz2" $spec
  if [ -f autobuild/${BOOK}_$LL-graphics.tar.bz2 ]; then \
    sed -i 's/^#\(Source.*graphics.tar.bz2\)/\1/' $spec
  fi
  # ${n}0 == html files
  # ${n}1 == desktop files
  if [ -z $n ]; then
  sed -i "/^#PREP/i\\
%setup -c -q -a ${n}1" $spec
  else
    # Do not remove already installed sources
    sed -i "/^#PREP/i\\
%setup -D -T -q -a ${n}0 -a ${n}1" $spec
  fi #HTML
  #PDF starts
  {
    cp -p $packdir/${1}_${ll}.tar.bz2 autobuild/${1}_${LL}.tar.bz2
    cp -p $packdir/${1}_$ll.pdf autobuild/${1}_$LL.pdf 
    cp -p $packdir/${1}_$ll-pdf-yelp.tar.bz2 autobuild/${1}_$LL-pdf-yelp.tar.bz2
  } || {
    echo make package failed; exit 1
  }
  # in case we must build more than one book (desktop-qs)
  [ -z "$extdir" ] && unset packdir
  # Re-use existing PDF
  [ -n "$pdf" ] && cp -vp $pdf autobuild/${1}_$LL.pdf
  fi #dummy
write_pdf_spec $2 $l $1
}

### Create a PDF subpackage in addition to an HTML package
make_pdfsub () {
  # echo $1
  . ENV-$1
  rm -f profiled/dist/*.xml
  if [ "$status" = dummy ]; then
    :
  else
    if [ -z "$extdir" ]; then
      # $echo make validate || exit 1
      make_validate
      $echo make package-pdf || exit 1
  # $echo make pdf-color
  # sources and graphics come with the HTML package
      {
        cp -p package-pdf-$1/${1}_$ll.pdf autobuild/${1}_$LL.pdf
        cp -p package-pdf-$1/${1}_$ll-pdf-yelp.tar.bz2 autobuild/${1}_$LL-pdf-yelp.tar.bz2
      } || {
        echo make package failed; exit 1
      }
  # Re-use existing PDF
      [ -n "$pdf" ] && cp -vp $pdf autobuild/${1}_$LL.pdf
    else
      cp -p $packdir/${1}_$LL.pdf \
        $packdir/${1}_$LL-pdf-yelp.tar.bz2 autobuild
    fi
  fi
  write_pdf_spec $2 0 $1
}

make_pdfonly () {
  # echo $1
  . ENV-$1
  rm -f profiled/dist/*.xml
  make_package
  # $echo make pdf-color
  # $echo make dist-book dist-graphics
  # # copy the PDF and the source files.
  cp -p package-$1/${1}_$LL-graphics.tar.bz2 \
    autobuild
  cp -p package-$1/${1}_${LL}.tar.bz2 \
    package-$1/${1}_$LL.pdf autobuild || {
    echo make package failed; exit 1
  }
# {
#   cp -p ${1}-online.pdf autobuild/${1}_$LL.pdf && \
#   cp -p ${1}_${LL}{,-graphics}.tar.bz2 autobuild
# } || {
#   echo make package failed; exit 1
# }
  # Re-use existing PDF
  [ -n "$pdf" ] && cp -vp $pdf autobuild/${1}_$LL.pdf
  write_pdf_spec $2 0
}

make_pdf () {
  # echo $1
  . ENV-$1
  rm -f profiled/dist/*.xml
  if [ -z "$extdir" ]; then
    make_package
    packdir=package-$1
  fi
  # copy the PDF and the source files.
  cp -p $packdir/${1}_${LL}{,-graphics}.tar.bz2 \
    $packdir/${1}_$LL.pdf autobuild || {
    echo make package failed; exit 1
  # cp -p package-$1/${1}_${LL}{,-graphics}.tar.bz2 \
  #   package-$1/${1}_$LL.pdf autobuild || {
  #   echo make package failed; exit 1
  }
  # Re-use existing PDF
  [ -n "$pdf" ] && cp -vp $pdf autobuild/${1}_$LL.pdf

  write_pdf_spec $2 0
}

make_html () {
  . ENV-$1
  rm -f profiled/dist/*.xml
  # number for source files
  l=0
  if [ "$status" = dummy ]; then
    if [ "$2" = 0 ]; then
      s=$l
    else
      s=$2$l
    fi
    sed -i "/^#PREP/i\\
mkdir html\\
cp %{S:$s} html/index.html" $spec

    echo "<p>This is a placeholder document.</p>" >autobuild/index.html
    sed -i "s|^\%dir \%{_datadir}/help||
s|^\%{_datadir}/help/\*||
/^#SOURCES/i\\
Source$s: index.html" $spec
    echo $((l++))
  else
    # build the real package
    if [ -z "$extdir" ]; then
      # $echo make validate || exit 1
      make_validate
      $echo make package-html || {
        # try again; sometimes, index.html does not get written...
        $echo make package-html || exit 1
      }
      cp -p package-html-$1/${1}_$ll-graphics.tar.bz2 \
        autobuild/${1}_$LL-graphics.tar.bz2
      cp -p package-html-$1/${1}_$ll-html.tar.bz2 \
         autobuild/${1}_$LL-html.tar.bz2
      cp -p package-html-$1/${1}_$ll-desktop.tar.bz2 \
        autobuild/${1}_$LL-desktop.tar.bz2
      cp -p package-html-$1/${1}_$ll.tar.bz2 autobuild/${1}_$LL.tar.bz2
    else
      cp -p $packdir/${1}_$LL-{html,graphics,desktop}.tar.bz2 \
        $packdir/${1}_$LL.tar.bz2 autobuild
    fi
  sed -i "s:@BOOK@:$BOOK:" $spec
  sed -i "/^#SOURCES/i\\
Source$2$((l++)): ${BOOK}_$LL-html.tar.bz2\\
Source$2$((l++)): ${BOOK}_$LL-desktop.tar.bz2\\
#Source$2$((l++)): ${BOOK}_$LL-graphics.tar.bz2\\
Source$2$((l++)): ${BOOK}_$LL.tar.bz2" $spec
    if [ -f autobuild/${BOOK}_$LL-graphics.tar.bz2 ]; then
      sed -i 's/^#\(Source.*graphics.tar.bz2\)/\1/' $spec
    fi
  # ${no}0 == html files
  # ${no}1 == desktop files
    ### FIXME
    ### Improve this as follows (in make_pdfsub):
# The opensuse-manual_en-pdf and opensuse-manual_de-pdf packages are
# intentionally empty; we use these packages for obsoleting old PDF packages. The
# PDF flavors of the books are packaged separately as
# 
# opensuse-apparmor-quick_en-pdf
# opensuse-apps_en-pdf
# opensuse-gnomequick_en-pdf
# opensuse-gnomeuser_en-pdf
# opensuse-kdequick_en-pdf
# opensuse-kdeuser_en-pdf
# opensuse-reference_en-pdf
# opensuse-startup_en-pdf 
    sed -i "/^#PREP/i\\
%setup -c -q -a ${no}1\\
#echo \"This PDF package is empty.  Find the PDFs in sub-packages.\" >README-pdf" $spec
#    sed -i "/^#PDFXXX/i\\
#%doc README-pdf" $spec
  fi
}

set_obs_in_spec () {
  # $obs members: foo=12.3
  for m in $obs; do
    olist="$olist ${m/=/ < }"
    plist="$plist ${m/=*/ = %\{version\}-%\{release\}}"
  done
  sed -i "\
/^#OBS/i\\
Obsoletes:      $olist\\
Provides:       $plist
" $spec
  ### does not work here; see hack above FIXME
  if [ $product = slepos-guide ]; then
    sed -i "s/^###PDFOBS/#PDFOBS/" $spec
  fi

  if [ -n "$pdfobs" ]; then
    # $pdfobs members: foo=12.3-pdf
    for m in $pdfobs; do
      ver=${m#*=};ver=${ver%-pdf};n=${m%=*}
      polist="$polist $n-pdf < $ver"
      pplist="$pplist $n-pdf = %\{version\}-%\{release\}"
    done

    if [ $product = opensuse-manuals ]; then
    # 11.3: opensuse-manuals_$LL-pdf is gone; use the base package

      sed -i "\
/^#OBS/i\\
Obsoletes:      $polist\\
Provides:       $pplist
" $spec
    fi
  fi
}

edit_spec_obsoletes_provides () {
  if [ $product = opensuse-manuals ]; then
  # rename opensuse-manual to opensuse-manuals on 11.2
    obs="$obs opensuse-manual_$LL=11.2"
  # kde and gnome quickstarts are part of opensuse-manual (since 11.1)
    obs="$obs opensuse-kdequick_$LL=11.1 opensuse-gnomequick_$LL=11.1"
    obs="$obs opensuse-gnomeuser_$LL=11.1 opensuse-kdeuser_$LL=11. opensuse-kde3user_$LL=11.1"
  # apparmor-admin (HTML) is gone with 11.1
    obs="$obs apparmor-admin_$LL=11.1"

    for l in $obs; do
      # skip books shipped as stand-alone PDFs since 11.1
      case $l in
        opensuse-kdequick_$LL*|opensuse-gnomequick_$LL*|apparmor-admin_$LL*|opensuse-gnomeuser_$LL*|opensuse-kdeuser_$LL*) true
        ;;
        *) pdfobs="$pdfobs ${l}-pdf"
        ;;
      esac
    done
    ### append "-pdf" after(!) the version number!!!
    pdfobs="$pdfobs opensuse-manuals_$LL=11.3-pdf"
    pdfobs="$pdfobs opensuse-apparmor-admin_$LL=11.3-pdf"
    case $LL in
      de) pdfobs="$pdfobs opensuse-apps_$LL=11.3-pdf"
        pdfobs="$pdfobs opensuse-gnomeuser_$LL=11.3-pdf"
        pdfobs="$pdfobs opensuse-kdeuser_$LL=11.3-pdf"
        pdfobs="$pdfobs opensuse-security_$LL=11.3-pdf"
        ;;
      *) true
        ;;
    esac
    set_obs_in_spec
  elif [ $product = sled-manuals ]; then
    # obsolete since sle11
    obs="$obs sled-deployment_$LL=11 sled-gnome-user_$LL=11 sled-kde-user_$LL=11"
    obs="$obs sled-desktop-qs_$LL=11 sled-install-qs_$LL=11"
    set_obs_in_spec
  elif [ $product = slepos-guide ]; then
    # obsolete since sle11 sp1; see bnc#602450
    obs="slepos-admin_$LL=11-1 slepos-install_$LL=11-1 SLEPOS_$LL=11-1"
    pdfobs="slepos-united_$LL=11-1-pdf"
    set_obs_in_spec
  fi


case $flavor in
  # On SLED and SLES 11 we have desktop-data-SLED
  SLED|SLES|SLEHA)
    sed -i 's/^\(Provides:.*locale(\)\(desktop-data\)\(-openSUSE\)/\1\2-SLED/' $spec
    ;;
esac

#case $product in
#  # kde3user is separate on os 11.1
#  opensuse-kde3user)
#    sed -i 's/^\(Provides:.*locale(\)desktop-data\(-openSUSE\)/\1kde3base-session/' $spec
#    ;;
#  # package the opensuse-apparmor-admin separately, but do not add it to the desktop
#  # comment it on openSUSE; check again on SLES
#  opensuse-apparmor-admin)
#    sed -i 's/^\(Provides:.*locale(\)desktop-data-openSUSE:/#\1apparmor-docs:/' \
#      $spec
#    ;;
#esac
}

#####
##### programm starts here
#####
rm -fr autobuild LICENSE.txt
mkdir autobuild

flavor=$(echo $flavor | tr [[:lower:]] [[:upper:]])
flavor=${flavor/OPEN/open}
# spec file header
sed "\
s:@package@:$package:
s:@product@:$product:
s:@notice@:$notice:
s:@LL@:$LL:
s:@slash_flavor@:$slash_flavor:
s:@flavor@:$flavor:
" $spec_in > $spec
# # make the en docs replace the other langs not available on os 10.2
# [ $LL = en ] && \
#   sed -i "\
# /^Provides:[ 	]*locale.*/d
# " $spec


edit_spec_obsoletes_provides

check_pack_xbs () {
  check_server=${1:-https\://api.opensuse.org}
  check_repo=${2:-openSUSE\:Factory}
  if osc -A $check_server meta pkg $check_repo $package; then
    echo $?
  else
    echo "$package does not exist in $check_repo: $?"
    echo "copy it from somewhere else or initialize it manually"
    exit 0
  fi
}

fix_spec_and_copy_autobuild () {
  [ -n "$DISTVER" ] && PACK_VER=${DISTVER/ *SP/.}
  sed -i "\
s:@version@:${PACK_VER:-$version}:
" $spec
  ## FIXME:
  if [ $LL != en ]; then
    sed -i "\
s:^%dir %{_datadir}/help:%dir %{_datadir}/help\n%dir %{_datadir}/help/LOCALE\n%dir %{_datadir}/help/LOCALE/$LL:
s:^%{_datadir}/help/:%{_datadir}/help/LOCALE/$LL/:
/^\(%dir \)*%{_datadir}\/kde4/d
" $spec
  fi
  # cp -vp autobuild/* home:$obsuser:branches:$repo/$package
  cp -vp autobuild/* $wdir
  ### 
  cd $wdir # home:$obsuser:branches:$repo/$package
  sed -i s:update_spec.pl:/usr/bin/update_spec: doc_pre_checkin.sh
  bash ./doc_pre_checkin.sh
  case ${BOOK} in
    susemanager-jsp) : ;;
    susemanager-*)
      for index in $(grep \\.index.jsp susemanager-*spec | awk '{print $2}'); do
        p=${index%.index.jsp}
        pdf_filename=${p}_en.pdf
        pdf_title=$(grep summary.${p}_en-pdf attributes \
          | sed 's/[^ ]*//;s/ \(.*\) (.*)/\1/')
        sed "\
s/@BOOKTITLE@/$pdf_title/g
s/@bookfile_pdf@/$pdf_filename/g" $jsp_in > ${index}
      done
      ;;
  esac

  default_msg="Update text and image files"
  if [ -n "$skip_changes" ]; then
    osc vc -m"$default_msg."
  fi
  osc addremove
  osc ci -m"$package: $default_msg"
}

tmp_project_values="<project name=\"home:$obsuser:tmp\">\
  <title>tmp</title>\
  <description>  </description>\
  <person role=\"maintainer\" userid=\"$obsuser\"/>\
  <person role=\"bugowner\" userid=\"$obsuser\"/>\
  <debuginfo>    <disable/>  </debuginfo>\
  <build>    <enable/>  </build>\
  <publish>    <disable/>  </publish>\
</project>"

tmp_package_values="<package name=\"$package\">\
  <title>$package</title>\
  <description>  </description>\
  <person role=\"maintainer\" userid=\"$obsuser\"/>\
  <person role=\"bugowner\" userid=\"$obsuser\"/>\
</package>"

copypac () {
  osc -A $sr_server rdelete home:$obsuser:tmp $package
  osc -A $sr_server meta prj home:$obsuser:tmp \
    || echo $tmp_project_values \
    | osc -A $sr_server meta prj home:$obsuser:tmp -F -
  osc -A $from_api_server copypac \
    -t $sr_server $from_repo $package home:$obsuser:tmp
  wdir=home:$obsuser:tmp/$package
  osc -A $sr_server co $wdir
  fix_spec_and_copy_autobuild

  echo "osc -A $sr_server sr -m\"$default_msg\" home:$obsuser $package $sr_repo"
}

initpac () {
  osc -A $sr_server rdelete home:$obsuser:tmp $package
  osc -A $sr_server meta prj home:$obsuser:tmp \
    || echo $tmp_project_values \
    | osc -A $sr_server meta prj home:$obsuser:tmp -F -
  osc -A $sr_server meta pkg home:$obsuser:tmp $package \
    || echo $tmp_package_values \
    | osc -A $sr_server meta pkg home:$obsuser:tmp $package -F -
  wdir=home:$obsuser:tmp/$package
  osc -A $sr_server co $wdir
  cp /usr/share/susedoc-buildbook/doc_pre_checkin.sh \
    $wdir/doc_pre_checkin.sh
  {
    echo "group.$package Documentation/SUSE"
    echo "license.$package GFDL 1.2"
    echo "summary.$package guide (English)"
    echo "+description.$package"
    echo ""
    echo "-description.$package"
    echo "group.$package-pdf Documentation/SUSE"
    echo "license.$package-pdf GFDL 1.2"
    echo "summary.$package-pdf guide (English)"
    echo "+description.$package-pdf"
    echo ""
    echo "-description.$package-pdf"
  } > $wdir/attributes

  fix_spec_and_copy_autobuild

  echo "osc -A $sr_server sr -m \"$default_msg\" home:$obsuser:tmp $package $sr_repo"
}

updatepac () {
# finally prep package dir for the build system
  [ -d $package ] && old $package
  {
    # osc -A $sr_server branch $sr_repo $package
    # check whether a devel project exists
    devel=$(osc -A $sr_server meta pkg $sr_repo $package \
      | xml sel -t -v //devel/@project)

    if [ -n "$devel" ]; then
      repo=$devel
    else
      repo=$sr_repo
    fi

    userp=$(osc -A $sr_server meta prj $repo \
      | xml sel -t -v //person[@role=\'maintainer\']/@userid=\'$obsuser\')
    if  "$userp" ; then
      # $devel exists and user is maintainer, thus use $devel
      old $repo/$package
      osc -A $sr_server co $repo/$package
      wdir=$repo/$package
    else
      # first delete to avoid conflicts
      osc -A $sr_server rdelete home:$obsuser:branches:$repo $package
      osc -A $sr_server branch -m"branch from $repo" $repo $package
      wdir=home:$obsuser:branches:$repo/$package
      osc -A $sr_server co $wdir
    fi
  } || {
    echo $package not accessible by osc
    install -d $package
  }

  fix_spec_and_copy_autobuild

  if [ -n "$devel" -a "$userp" = true ]; then
    # submitreq to product
    if [ -z "$my_echo" ]; then
      osc -A $sr_server sr -m"$default_msg" $repo $package $sr_repo
    else
      $my_echo "osc -A $sr_server sr -m\"$default_msg\" $repo $package $sr_repo"
    fi
  elif [ -n "$devel" -a "$userp" = false ]; then
    if [ -z "$my_echo" ]; then
      osc -A $sr_server sr -m\"$default_msg\" \
        home:$obsuser:branches:$repo $package $devel
    else
      $my_echo "osc -A $sr_server sr -m\"$default_msg\" home:$obsuser:branches:$repo $package $devel"
    fi
  elif [ -z "$devel" -a "$userp" = false ]; then
    if [ -z "$my_echo" ]; then
      osc -A $sr_server sr -m\"$default_msg\" \
        home:$obsuser:branches:$repo $package $repo
    else
      $my_echo "osc -A $sr_server sr -m\"$default_msg\" home:$obsuser:branches:$repo $package $repo"
    fi
  else
    # $userp, but no $devel -- everything is fine
    :
  fi
}

prep_xbs () {
  sr_server=$1
  sr_repo=$2
  case $3 in
    update) updatepac ;;
    copy)   copypac ;;
    init)   initpac ;;
    *)      echo "unsupported make_type"; exit 1 ;;
  esac
}

###
### main
###
# read the product file
no=0
:>pack.log
while read format book copyright status server prj; do
  # Make sure to preserve a value once set
  [ -n "$server" ] && xbs_server=$server
  [ -n "$prj"    ] && xbs_prj=$prj
  if [ "$check_pack" = yes ]; then
    check_pack_xbs $xbs_server $xbs_prj
  fi
  echo $format $book | tee -a pack.log
  case $format in
    pdfhtml) make_pdfhtml $book $no $copyright $status
      ;;
    # Do not try to build html and the desktop files (fails for articles)
    pdfonly) make_pdfonly $book $no $copyright;;
    pdfsub) make_pdfsub $book $no $copyright;;
    pdf) make_pdf $book $no $copyright;;
    html) make_html $book $no $copyright;;
    *) echo "Unsupported output format: $format"; exit 1;;
  esac
  status=''
  echo $no | tee -a pack.log
  echo $((no++)) >/dev/null
done < <(grep -v ^# $product_file)

xbs_server=${xbs_server:-https\://api.opensuse.org}
xbs_prj=${xbs_prj:-openSUSE\:Factory}
[ -n "$prep_local" ] || prep_xbs $xbs_server $xbs_prj $make_type

exit 0
