File bundle.sh of Package bundle-lang-kde

#!/bin/bash
#
# Copyright (c) 2007, 2008, SUSE Linux Products GmbH

# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.

. ./list_langs.sh

function _dirname {
  DIR="${1%/*}"
  if [ -z "${DIR}" ]; then
    echo "/"
  else
    echo "${DIR}"
  fi
}

function lang_to_skip {
  if [[ " $langs " =~ (^|[[:space:]])"$1"($|[[:space:]]) ]]; then
    # language was found in the list - do not skip it
    return 1;
  else
    return 0;
  fi
}

mkdir -p $RPM_BUILD_ROOT/usr/share/doc/packages/translations
for lang in $langs; do 
  : > filelist.$lang
  : > filelist.dirs.$lang
done

for package in "$@"; do 
 IFS=^
 rpm -q --qf "[%{RPMTAG_FILEFLAGS:fflags}^%{FILEMODES:perms}^%{FILELANGS}^%{FILENAMES}\n]" $package | sed -e '/share\/man/d' -e '/share\/appdata/d' | \
  while read flag perm lang file; do

    if test -z "$file"; then
       echo "WARNING: package ${package} does not exist - skipping"
       break
    fi

    if test -z "$lang"; then
       lang="en"
    fi

    if lang_to_skip "$lang"; then
        continue
    fi

    echo -n "%lang($lang) " >> filelist.$lang
    if test "$flag" = "d"; then
      echo -n "%doc " >> filelist.$lang
    fi
    nfile=$file
    case $file in
       */locale/*)
          nfile=${file/locale/locale-bundle}
          ;;
       */doc/*)
          nfile=${file/doc/doc-bundle}
          ;;
       */help/*)
          nfile=${file/help/help-bundle}
          ;;
       */libgweather/*)
          nfile=${file/libgweather/libgweather/bundle}
          ;;
       */omf/*)
	  echo "FILE $file will conflict"
	  exit 1
	  ;;
    esac
    if test -d "$file"; then
      if [ ! -d $RPM_BUILD_ROOT$nfile ]; then mkdir -p $RPM_BUILD_ROOT$nfile; fi
      echo -n "%dir " >> filelist.$lang
    else
      dir=$(_dirname "$nfile")
      if [ ! -d $RPM_BUILD_ROOT$dir ]; then mkdir -p $RPM_BUILD_ROOT$dir; fi
      while true; do
	 case "$dir" in 
	    /usr/share)
	       break;
	       ;;
            /)
	       break;
	       ;;
         esac
         echo "%dir $dir" >> filelist.dirs.$lang
	 case "$dir" in 
            *-bundle)
	       break;
               ;;
            /)
	       break;
	       ;;
         esac
         dir=$(_dirname "$dir")
      done
      cp -d --preserve=all -P "$file" $RPM_BUILD_ROOT$nfile
    fi
    echo "$nfile" >> filelist.$lang
 done
 unset IFS
done

for lang in $langs; do 
  sort -u filelist.dirs.$lang >> filelist.$lang
  rm filelist.dirs.$lang
done