#!/bin/bash
#
# Prepare sources (XML and images) and a suitable spec file.
# Then submit it to the BS (Build Service)
#
### We need daps 1.1.4 or better
install_daps_1_1="install daps 1.1.4 or better from D:T"
type -p daps 1>/dev/null 2>&1 || {
  echo $install_daps_1_1
  exit 1
}
read -a v < <(daps --version)
OFS="$IFS"
IFS=.
for d in ${v[1]} 0; do
  dd=$dd$(printf "%03d" $d)
  # echo $dd
  [ $dd -gt 999999 ] && break
  # echo $dd
done
IFS="$OFS"
if [ $dd -lt 1001004 ]; then
  echo For packaging with $0,
  echo $install_daps_1_1
  exit 1
fi

TEMP=$(getopt -o acd:f:e:il:n:p:r:s:u:x \
  --long automatic,check-pack,copy,copypac,copypack,debug,def:,dtdroot:,extdir:,init,initpac,initpack,lang:,prep-local,name:,obsuser:,product:,pdf:,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 () {
  type -p $1 >/dev/null || {
    echo "*** $1 is not executable"
    case $1 in
      xml)
        echo "missing package: xmlstarlet";;
      *) true ;;
    esac
    exit 1
  }
}

check_pkg_name () {
  echo $1
  [ $1 = ${1%%_*} ] || {
    echo "*** Specify pkg name (-n name) without language code."
    echo "*** Instead of \"-n $1\" simply use \"-n ${1%%_*}\"."
    exit 1
  }
}

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 ;;
    --dtdroot)   dtdroot=$2; 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) check_pkg_name $2; product=$2 ; shift 2 ;;
    -u|--user|--obsuser) obsuser=$2 ; shift 2;;
    -x|--debug)  set -x; shift 1 ;;
    --) shift ; break ;;
  esac
done
#echo $extdir

if [ -z "$obsuser" ]; then
  obsuser=$(osc who | awk -F: '{print $1}')
  if echo $obsuser | grep -q "not found"; then
    echo $obsuser
    echo 'Build Service down?'
    exit 1
  fi
fi

# 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 DC and detect language
  dc=DC-$(awk '/^#/ {next}; {print $2; exit}' $product_file)
  ll=$(daps -d $dc showvariable VARIABLE=LL)
  unset -v dc
fi

# capitalize country code
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
version=12.3
notice="Automatically generated from $(svn info | sed -n 's/^URL: *\(.*\)/\1/p') with $0"
# by default, use the spec.in from this directory
if [ -z "$spec_in" ]; then
  my_spec_in=daps11.spec.in
  if [ -f ${0%/*}/$my_spec_in ]; then
    spec_in=${0%/*}/$my_spec_in
  else
    spec_in=/usr/share/susedoc-buildbook/$my_spec_in
  fi
fi
# echo $spec_in; exit
spec=autobuild/${product}_${LL}.spec

write_pdf_spec () {
  [ $1 = 0 ] && n="" || n=$1
  BOOK=$3
  l=$2
  pdf_no=$2
  readme_no=$2
  local -l book=$BOOK
  if [ "$xbs_server" = https://api.suse.de ]; then
#   sed -i "/^#BREQ/i\\
# # agfa-fonts is only needed when building with xep\\
# BuildRequires: agfa-fonts\\
# BuildRequires: xep xep-license
  sed -i "s/^#BREQ/# Commented--we now use in IBS prjconf (outdated!):\\
# Substitute: xmlgraphics-fop agfa-fonts xep xep-license xmlgraphics-fop\\
# agfa-fonts is only needed when building with xep\\
# BuildRequires: agfa-fonts\\
# BuildRequires: xep xep-license/

s/^\(export FOP=.*\)/# \1/" $spec
  fi

  sed -i "/^#PDFSUB/i\\
\%package -n ${book}_$LL-pdf\\
Group:        Documentation/SUSE\\
License:      -\\
Summary:      -\\
#Provides:    locale(desktop-data-openSUSE:$LL)\\
###PDFOBS" $spec
  sed -i "s/^\(all_pdf_docs=\".*\)\(\"\)/\1 ${BOOK}\2/" $spec
  sed -i "/^#PDFSUB/i\\
\\
\%description -n ${book}_$LL-pdf\\
-\\
" $spec

    sed -i "/^#PDFFILES/i\\
\%files -n ${book}_$LL-pdf -f %{my_book}/${book}_$LL-pdf.filelist\\
\%defattr(-, root, root)\\
" $spec

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

make_pdfhtml () {
  # $BOOK $no $copyright $status
  BOOK=$1
  local -l book=$BOOK
  no=$2
  n=$2
  l=0
  ### prep spec
  sed -i "s:@BOOK@:$BOOK:
/^#SOURCES/i\\
Source: ${pkgsrc##*/}" $spec
  sed -i "/^#PREP/i\\
%setup -c -q -n %{name}-%{version}/$BOOK" $spec
  sed -i "/^Source999:.*docbook.xsl/d" $spec
  sed -i "/^#MAKE_DOC/i\\
%define my_all_dir  %{_builddir}/%{name}-%{version}/$BOOK\\
cd %{my_all_dir}\\
# e.g., /usr/share/help/C/gnome-help/opensuse-manuals.page\\
# Produce .document files for HTML\\
package_dir=\$(daps -d DC-$BOOK package-html --documentfiles --pagefiles)\\
tar xvf \$package_dir/${BOOK}_%{my_lang}-html.tar.bz2\\
echo $BOOK > %{name}.filelist\\
# ls -l build/%my_book/package\\
document_files_dir=\$package_dir\\
# copy .page file\\
cp \$document_files_dir/*.page %name.page\\
[ -f \$document_files_dir/index.html.document ]\\\\\\
  || mv \$document_files_dir/*.document \$document_files_dir/index.html.document\\
sed -i \"\\
s|@PATH@|file://%{_docdir}/%{name}|\\
s|^\\\\(Name.*=.*\\\\)|\\\\1 (%{my_lang})|\\
\" \$document_files_dir/index.html.document\\
mkdir yelp desktop\\
sed \"\\
# remove useless comments and search settings\\
/^Comment/d\\
/^X-DOC-Search/d\\
/^Categories=/d\\
/^DocPath=/d\\
/^Name *=/i\\\\\\
DocPath=file://%{_defaultdocdir}/%{name}/index.html\\\\n\\\\\\
# for KDE:\\\\n\\\\\\
X-DocPath=file://%{_docdir}/%{name}/index.html\\\\n\\\\\\
DocType=text/html\\\\n\\\\\\
DocLang=%{my_lang}\\\\n\\\\\\
Icon=document2\\\\n\\\\\\
Categories=System;Core;Translation;Documentation\\
s/^X-DOC-Identifier=/DocIdentifier=com.suse./\\
s/^X-DOC-Weight/DocWeight/\\
\" \$document_files_dir/index.html.document > desktop/%{name}.desktop \\
# FIXME: check whether it is still needed (move to daps?)\\
sed \"s/^\[Desktop Entry\]/[Document]/\" desktop/%{name}.desktop \\\\\\
  > yelp/%{name}.document\\
{ echo desktop/%{name}.desktop; echo yelp/%{name}.document; } >> %{name}.filelist\\

/^%install/a\\
cd %{my_all_dir}" $spec

  #PDF starts

  sed -i "s/^\(all_pdf_docs=\".*\)\(\"\)/\1 ${BOOK}\2/" $spec
}

### Create a PDF subpackage in addition to an HTML package
make_pdfsub () {
  write_pdf_spec $2 0 $1
}

make_pdf () {
  l=0
  BOOK=$1
  local -l book=$BOOK
  ### prep spec
  sed -i "s:@BOOK@:$BOOK:
/^#SOURCES/i\\
Source: ${pkgsrc##*/}" $spec
  sed -i "/^#PREP/i\\
%setup -c -q -n %{name}-%{version}/$BOOK" $spec
  sed -i "/^Source999:.*docbook.xsl/d" $spec
  sed -i "/^#MAKE_DOC/i\\
%define my_all_dir  %{_builddir}/%{name}-%{version}/$BOOK\\
cd %{my_all_dir}\\
daps --debug -d DC-$1 pdf-color" $spec

# echo \"\$(daps -d DC-$1 html-dir-name)\" > %{name}.filelist\\
# # e.g., /usr/share/help/C/gnome-help/opensuse-manuals.page\\
# # Produce .document files for HTML\\
# daps -d DC-$1 package-html --documentfiles --pagefiles\\
# ls -l build/%my_book/package\\
# document_files_dir=build/%my_book/package\\
# # copy .page file\\
# cp \$document_files_dir/*.page %name.page\\
# sed -i \"\\
# s|@PATH@|file://%{_docdir}/%{name}|\\
# s|^\\\\(Name.*=.*\\\\)|\\\\1 (%{my_lang})|\\
# \" \$document_files_dir/index.html.document \\
# mkdir yelp desktop\\
# sed \"\\
# # remove useless comments and search settings\\
# /^Comment/d\\
# /^X-DOC-Search/d\\
# /^Categories=/d\\
# /^DocPath=/d\\
# /^Name *=/i\\\\\\
# DocPath=file://%{_defaultdocdir}/%{name}/index.html\\\\n\\\\\\
# # for KDE:\\\\n\\\\\\
# X-DocPath=file://%{_docdir}/%{name}/index.html\\\\n\\\\\\
# DocType=text/html\\\\n\\\\\\
# DocLang=%{my_lang}\\\\n\\\\\\
# Icon=document2\\\\n\\\\\\
# Categories=System;Core;Translation;Documentation\\
# s/^X-DOC-Identifier=/DocIdentifier=com.suse./\\
# s/^X-DOC-Weight/DocWeight/\\
# \" \$document_files_dir/index.html.document > desktop/%{name}.desktop \\
# sed \"s/^\[Desktop Entry\]/[Document]/\" desktop/%{name}.desktop \\\\\\
#   > yelp/%{name}.document\\
# { echo desktop/%{name}.desktop; echo yelp/%{name}.document; } >> %{name}.filelist\\
# 
# /^%install/a\\
# cd %{my_all_dir}" $spec
}


make_html () {
  l=0
  BOOK=$1
  local -l book=$BOOK
  ### prep spec
  sed -i "s:@BOOK@:$BOOK:
/^#SOURCES/i\\
Source: ${pkgsrc##*/}" $spec
  sed -i "/^#PREP/i\\
%setup -c -q -n %{name}-%{version}/$BOOK" $spec
  sed -i "/^Source999:.*docbook.xsl/d" $spec
  sed -i "/^#MAKE_DOC/i\\
%define my_all_dir  %{_builddir}/%{name}-%{version}/$BOOK\\
cd %{my_all_dir}\\
# e.g., /usr/share/help/C/gnome-help/opensuse-manuals.page\\
# Produce .document files for HTML\\
package_dir=\$(daps -d DC-$BOOK package-html --documentfiles --pagefiles)\\
tar xvf \$package_dir/${BOOK}_%{my_lang}-html.tar.bz2\\
echo $BOOK > %{name}.filelist\\
# ls -l build/%my_book/package\\
document_files_dir=\$package_dir\\
# copy .page file\\
cp \$document_files_dir/*.page %name.page\\
[ -f \$document_files_dir/index.html.document ]\\\\\\
  || mv \$document_files_dir/*.document \$document_files_dir/index.html.document\\
sed -i \"\\
s|@PATH@|file://%{_docdir}/%{name}|\\
s|^\\\\(Name.*=.*\\\\)|\\\\1 (%{my_lang})|\\
\" \$document_files_dir/index.html.document\\
mkdir yelp desktop\\
sed \"\\
# remove useless comments and search settings\\
/^Comment/d\\
/^X-DOC-Search/d\\
/^Categories=/d\\
/^DocPath=/d\\
/^Name *=/i\\\\\\
DocPath=file://%{_defaultdocdir}/%{name}/index.html\\\\n\\\\\\
# for KDE:\\\\n\\\\\\
X-DocPath=file://%{_docdir}/%{name}/index.html\\\\n\\\\\\
DocType=text/html\\\\n\\\\\\
DocLang=%{my_lang}\\\\n\\\\\\
Icon=document2\\\\n\\\\\\
Categories=System;Core;Translation;Documentation\\
s/^X-DOC-Identifier=/DocIdentifier=com.suse./\\
s/^X-DOC-Weight/DocWeight/\\
\" \$document_files_dir/index.html.document > desktop/%{name}.desktop \\
# FIXME: check whether it is still needed (move to daps?)\\
sed \"s/^\[Desktop Entry\]/[Document]/\" desktop/%{name}.desktop \\\\\\
  > yelp/%{name}.document\\
{ echo desktop/%{name}.desktop; echo yelp/%{name}.document; } >> %{name}.filelist\\

/^%install/a\\
cd %{my_all_dir}" $spec
}

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
}

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 () {
  fix_spec_1
  fix_spec_2_and_copy_autobuild
}

fix_spec_1 () {
  [ -n "$DISTVER" ] && PACK_VER=${DISTVER/ *SP/.}
  sed -i "s|@version@|${PACK_VER:-$version}|" $spec
  case $product in
    sle-ha*) url=https://www.suse.com/documentation/sle_ha/ ;;
    sles*) url=https://www.suse.com/documentation/sles11/ ;;
    sled*) url=https://www.suse.com/documentation/sled11/ ;;
    sle-smt*) url=https://www.suse.com/documentation/smt11/ ;;
    *) url=http://doc.opensuse.org ;;
  esac
  sed -i "s|^\(URL: *\).*|\1$url|" $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
}

fix_spec_2_and_copy_autobuild () {
  # cp -vp autobuild/* home:$obsuser:branches:$repo/$package
  cp -vp autobuild/* $wdir
  # svn_rev=$(svn info | grep "^Last Changed Rev: ")
  svn_rev=$(svnversion -c)
  ### 
  # FIXME: find a way to move this to fix_spec_1
  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
  default_msg="Update text and image files (Last Changed Rev.: $svn_rev)"
  osc vc -m"$default_msg."
  osc addremove
  osc ci -m"$package: $default_msg"
}

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


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

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:tmp $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" = true ]; 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 \
        -m"deleting to avoid conflicts: home:$obsuser:branches:$repo $package" \
        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
}

make_pkg_src () {
  daps -d $dc_main clean-all
  # daps -d $dc_main missinggraphics > images.tmp
  # grep -q "graphics are missing:" images.tmp && {
  #   cat images.tmp; echo *** missing images; exit 1
  # }
  # rm -f images.tmp
  pkgsrc=$(daps -d $dc_main package-src --def-file="$product_file") \
    || {
    echo "daps package-src failed"
    exit 1
  }
  cp "$pkgsrc" autobuild
}

###
### main
###
no=0
:>pack.log
atm_not () {
  echo ATM not supported; exit 1
}
# read the product file
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)
      echo "*** warning: unfinish implementation; for debugging only!" \
        && sleep 3
      dc_main=DC-$book
      make_pkg_src
      make_pdfhtml $book $no $copyright $status
      ;;
    # Do not try to build html and the desktop files (fails for articles)
      ### FIXME temporarily defunct
    pdfonly) atm_not
      make_pdfonly $book $no $copyright;;
    pdfsub)
      # $atm_not
      make_pdfsub $book $no $copyright
      ### used to work with --extra-files :
      ### envs="DC-$book $envs"
      ;;
      ### FIXME temporarily partially implemented
    pdf)
      echo "*** warning: unfinish implementation; for debugging only!" \
        && sleep 3
      dc_main=DC-$book
      make_pkg_src
      make_pdf $book $no $copyright
      echo "*** warning: unfinish implementation; for debugging only!"
      ;;
    html)
      dc_main=DC-$book
      make_pkg_src
      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 -e '\(^ *$\|^#\)' $product_file)

xbs_server=${xbs_server:-https\://api.opensuse.org}
xbs_prj=${xbs_prj:-openSUSE\:Factory}

eval $(daps -d $dc_main productinfo)
DISTVER=$PRODUCTNUMBER
# prodnumber_xpath=/set/setinfo/productnumber
# prodnumber_xpath="$prodnumber_xpath|//book/bookinfo/productnumber"
# prodnumber_xpath="$prodnumber_xpath|//article/articleinfo/productnumber"
# prodnumber_xpath="($prodnumber_xpath)[1]"
# . $dc_main
# DISTVER=$(xml sel -t -v "$prodnumber_xpath" xml/$MAIN)
[ -n "$prep_local" ] && {
  fix_spec_1
  echo "*** Files copied to the local \"autobuild\" directory:"
  find autobuild -type f | sort
} || prep_xbs $xbs_server $xbs_prj $make_type

exit 0
