# Contributor: Natanael Copa <ncopa@alpinelinux.org>
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
setvar pkgname = 'kbd'
setvar pkgver = '2.0.4'
setvar pkgrel = '2'
setvar pkgdesc = ""Tools for configuring the console (keyboard, virtual terminals, etc.)""
setvar url = ""http://ftp.altlinux.org/pub/people/legion/kbd""
setvar arch = ""all""
setvar license = ""GPL2+""
setvar depends = ""kbd-misc""
setvar makedepends = ""linux-headers linux-pam-dev check-dev ckbcomp xkeyboard-config""
setvar install = """"
setvar subpackages = ""$pkgname-bkeymaps::noarch $pkgname-legacy::noarch $pkgname-misc::noarch $pkgname-doc $pkgname-vlock""
setvar source = ""http://kbd-project.org/download/kbd-$pkgver.tar.gz
	error.h
	fix-tests.patch
	""
setvar builddir = ""$srcdir"/kbd-$pkgver"
setvar _datadir = "/usr/share"
setvar _xmapdir = ""$_datadir"/keymaps/xkb"
setvar _bmapdir = ""$_datadir"/bkeymaps"
setvar _badmaps = ""pk-ara""

proc prepare {
	default_prepare

	cd $builddir
	cp "$srcdir"/error.h .
}

proc build {
	cd $builddir
	./configure \
		--build=$CBUILD \
		--host=$CHOST \
		--disable-nls \
		--prefix=/usr \
		--datadir="$_datadir" \
		--htmldir=/usr/share/html/$pkgname
	make
}

proc check {
	cd $builddir
	make check
}

proc _listxmaps {
	local invariant line; setvar invariant = 'false'
	grep -v '^$' /usr/share/X11/xkb/rules/base.lst | while read line {
	case (line) {
		'! variant' { setvar invariant = 'true' }
		'!'* { setvar invariant = 'false' }
		* { if $invariant {
			echo $line | cut -d: -f1
		} }
		}
	}
}

proc package {
	cd $builddir
	make DESTDIR="$pkgdir" install

	# Move and fixup legacy keymaps
	mkdir legacy
	mv "$pkgdir"/usr/share/keymaps/* legacy
	mv legacy "$pkgdir"/usr/share/keymaps

	cd "$pkgdir"/usr/share/keymaps/legacy/i386
	# Make ISO-8815-9 maps the default, instead of 7-bit ones
	ln -s pt-latin9.map.gz qwerty/pt.map.gz
	mv azerty/fr.map.gz azerty/fr-old.map.gz
	ln -s fr-latin9.map.gz azerty/fr.map.gz

	# Add some legacy aliases
	ln -s fr-latin9.map.gz azerty/fr-latin0.map.gz
	ln -s sv-latin1.map.gz qwerty/se-latin1.map.gz
	ln -s sr-cy.map.gz qwerty/sr-latin.map.gz

	# Rename conflicting keymaps
	mv dvorak/no.map.gz dvorak/no-dvorak.map.gz
	mv fgGIod/trf.map.gz fgGIod/trf-fgGIod.map.gz
	mv olpc/es.map.gz olpc/es-olpc.map.gz
	mv olpc/pt.map.gz olpc/pt-olpc.map.gz
	mv qwerty/cz.map.gz qwerty/cz-qwerty.map.gz

	# Remove useless layouts
	rm -f i386/qwerty/ro_win.map.gz

	cd $builddir

	# Compile keymaps from X.org layouts
	mkdir -p "$pkgdir$_xmapdir"
	local layout variant
	_listxmaps | while read -r variant layout {
		if ! test -f "$pkgdir$_xmapdir"/"$layout".map.gz {
			echo "Generating keymap $layout..."
			ckbcomp $layout | gzip > "$pkgdir$_xmapdir"/"$layout".map.gz || exit 1
		}
		echo "Generating keymap $layout-$variant..."
		ckbcomp $layout $variant | gzip > "$pkgdir$_xmapdir"/"$layout"-"$variant".map.gz || exit 1
	}

	# Do some fix-ups on X.org keymaps
	mv "$pkgdir$_xmapdir"/fi.map.gz "$pkgdir$_xmapdir"/fi-kotoistus.map.gz

	# Install html documentation
	mkdir -p "$pkgdir$_datadir"/html/$pkgname
	mv docs/doc/*.html "$pkgdir$_datadir"/html/$pkgname

	# Replace busybox setfont utility.
	mkdir -p "$pkgdir"/usr/sbin
	mv "$pkgdir"/usr/bin/setfont "$pkgdir"/usr/sbin

	# Link open to openvt
	ln -s openvt "$pkgdir"/usr/bin/open
}

proc vlock {
	setvar pkgdesc = ""$pkgname vlock implemantation""
	setvar depends = ''

	# This is the only binary needing linux-pam so moving this to a
	# subpackage reduces the amount of depencies of the kbd package.

	mkdir -p "$subpkgdir"/usr/bin
	mv "$pkgdir"/usr/bin/vlock "$subpkgdir"/usr/bin
}

proc bkeymaps {
	setvar pkgdesc = ""X.org-derived binary keymaps""
	setvar depends = ''
	setvar replaces = ""bkeymaps""
	setvar provides = ""bkeymaps""

	mkdir -p "$subpkgdir$_bmapdir"
	local map variant layout; for map in "$pkgdir$_xmapdir"/*.map.gz {
		setvar variant = "$(basename "$map" | cut -d. -f1)"
		case (variant) { $_badmaps { continue } }

		setvar layout = "${variant%%-*}"
		mkdir -p "$subpkgdir$_bmapdir"/$layout
		echo "Generating binary keymap $variant..."
		"$pkgdir"/usr/bin/loadkeys -ub $map | gzip > "$subpkgdir$_bmapdir"/$layout/$variant.bmap.gz
	}
}

proc legacy {
	setvar pkgdesc = ""kbd legacy keymaps""
	setvar depends = ''

	mkdir -p "$subpkgdir$_datadir"/keymaps
	mv "$pkgdir$_datadir"/keymaps/legacy "$subpkgdir$_datadir"/keymaps
}

proc misc {
	setvar pkgdesc = ""kbd keymaps and console data""
	setvar depends = ''

	mkdir -p "$subpkgdir$_datadir"
	local dir; for dir in consolefonts consoletrans keymaps unimaps {
		mv "$pkgdir$_datadir"/$dir "$subpkgdir$_datadir"
	}
}

setvar sha512sums = ""e37bc661c75a8363e9a5ba903310fa7f7ded4f381c2c77aa7edc0b1aca5a63224933fd113cddcf180e7fb85f55407e0d1f47be1cdf69dcf2787e83ac996bbf03  kbd-2.0.4.tar.gz
c66f6b0d8c8b8d285c740bdbe7130dee272ac01cd5e73b35a58cedf1a77fe8d9e062631b804fb58014d8eb9861c8f28aed07bc022ef31662bcc61b5c85a21752  error.h
bb67e5bb933a48f4a04402e07d7d67169a97485e6b469f8ccd4436466eb17ec2ddcf0ef74d22b3aae9e813feaee5bef0822ec50c384e0276a8c91f9325502a5f  fix-tests.patch""