#!/bin/sh

# assume , running from ${repos}/x11-base/xorg-server directory
if [[ $(basename $(dirname `pwd`))/$(basename `pwd`) != "x11-base/xorg-server" ]]; then
	echo "ERROR - current directory is not \${repos}/x11-base/xorg-server"
	exit 1
fi

mylist=$@
: ${mylist:=*.ebuild}

mytmp=$(mktemp -d)
for ech in $mylist; do
  ebuild $ech prepare
  grep -e ABI_VIDEODRV_VERSION -e ABI_XINPUT_VERSION -e ABI_EXTENSION_VERSION /var/tmp/portage/x11-base/${ech/.ebuild/}/work/*/hw/xfree86/common/xf86Module.h >$mytmp/$ech
  ebuild $ech clean
done
for abi in extension input video; do
  if ! [[ -d ../../virtual/x-${abi}-abi ]]; then
    mkdir -p ../../virtual/x-${abi}-abi
    cat >../../virtual/x-${abi}-abi/metadata.xml <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<herd>x11</herd>
</pkgmetadata>
EOF
  fi
  for ech in $(egrep -i "^#define ABI_[X]?${abi}" /tmp/*/*.ebuild |sed -e 's/^.*xorg-server-//' -e's/.ebuild.*SET_ABI_VERSION(\([0-9]*\),[ ]*\([0-9]*\)).*$/ \1.\2/' |awk '{print $2 ",x11-base/xorg-server-" $1}' |sort -n); do
    abiver=$(echo $ech |sed -e 's/,.*$//')
    atom=$(echo $ech |sed -e 's/^[^,]*,//')
    ebuild_keywords=$(grep KEYWORDS ${atom/x11-base\//}.ebuild |sed -e 's/KEYWORDS="//' -e 's/"$//')
    
    # find an ebuild matching this abi
    if [[ -e ../../virtual/x-${abi}-abi/x-${abi}-abi-${abiver}.ebuild ]]; then
      # check all keywords exist, add any that are missing
      abi_keywords=$(grep KEYWORDS ../../virtual/x-${abi}-abi/x-${abi}-abi-${abiver}.ebuild |sed -e 's/KEYWORDS="//' -e 's/"$//')

      new_abi_keywords=
      for ebkw in $ebuild_keywords ; do
        new_abi_kwadd=
        for abikw in $abi_keywords ; do
          if echo "${ebkw}#" |grep "${abikw}#" &>/dev/null; then
            new_abi_kwadd=$abikw
          fi
        done
        if [[ -z $new_abi_kwadd ]]; then
          new_abi_keywords+=" $ebkw"
	else
	  new_abi_keywords+=" $new_abi_kwadd"
        fi
      done
      sed -i -e "s/KEYWORDS=\"${abi_keywords}\"/KEYWORDS=\"${new_abi_keywords}\"/" \
	-e 's/KEYWORDS=" /KEYWORDS="/' \
	../../virtual/x-${abi}-abi/x-${abi}-abi-${abiver}.ebuild
    else
      # file does not exist, create it
      echo "Creating new ebuild for ${abi} ${abiver}"
      cat >../../virtual/x-${abi}-abi/x-${abi}-abi-${abiver}.ebuild <<EOF
# Copyright 1999-2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# \$Header: /var/cvsroot/gentoo-x86/virtual/x-${abi}-abi/x-${abi}-abi-0.ebuild,v 1.2 2012/03/07 04:11:36 axs Exp $

EAPI="5_pre2"

DESCRIPTION="Virtual for indicating the $abi ABI version of xorg-server"
HOMEPAGE=""
SRC_URI=""

LICENSE=""
SLOT="0/\${PV}"
KEYWORDS="${ebuild_keywords}"
IUSE=""
EOF
    fi

    # fix the abi PDEPENDS of the xorg-server ebuild itself
    if grep "~virtual/x-${abi}-abi" ${atom/x11-base\//}.ebuild &>/dev/null ; then
      # update existing atom
      sed -i -e "s#~virtual/x-${abi}-abi-[0-9\.]*#~virtual/x-${abi}-abi-${abiver}#" ${atom/x11-base\//}.ebuild
    else
      # insert atom
      sed -i -e "s#PDEPEND=\"\(.\)#PDEPEND=\"\n\t\1#" \
	-e "s#PDEPEND=\"#PDEPEND=\"\n\t~virtual/x-${abi}-abi-${abiver}#" ${atom/x11-base\//}.ebuild
    fi
  done
done
rm -Rf $mytmp
