summaryrefslogtreecommitdiff
path: root/system/kbd
diff options
context:
space:
mode:
authorA. Wilcox <AWilcox@Wilcox-Tech.com>2018-06-14 02:22:19 -0500
committerA. Wilcox <AWilcox@Wilcox-Tech.com>2018-06-14 02:22:56 -0500
commitb1eb50599e4db7eb4501af75cbbfa22007081ea5 (patch)
treec94a34c882cc17adedd781e8c5f34349b2a62416 /system/kbd
parentb9e85bbdcf38547ef2ca4e5c2a6e6293bbcd2752 (diff)
downloadpackages-b1eb50599e4db7eb4501af75cbbfa22007081ea5.tar.gz
packages-b1eb50599e4db7eb4501af75cbbfa22007081ea5.tar.bz2
packages-b1eb50599e4db7eb4501af75cbbfa22007081ea5.tar.xz
packages-b1eb50599e4db7eb4501af75cbbfa22007081ea5.zip
The New Plan
all pkgs needed to bootstrap -> system others -> user
Diffstat (limited to 'system/kbd')
-rw-r--r--system/kbd/APKBUILD181
-rw-r--r--system/kbd/bkeymaps.patch14
-rw-r--r--system/kbd/error.h20
-rw-r--r--system/kbd/fix-tests.patch41
-rw-r--r--system/kbd/loadkeys.confd23
-rw-r--r--system/kbd/loadkeys.initd72
6 files changed, 351 insertions, 0 deletions
diff --git a/system/kbd/APKBUILD b/system/kbd/APKBUILD
new file mode 100644
index 000000000..45a122e25
--- /dev/null
+++ b/system/kbd/APKBUILD
@@ -0,0 +1,181 @@
+# Contributor: Natanael Copa <ncopa@alpinelinux.org>
+# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
+pkgname=kbd
+pkgver=2.0.4
+pkgrel=3
+pkgdesc="Tools for configuring the console (keyboard, virtual terminals, etc.)"
+url="http://ftp.altlinux.org/pub/people/legion/kbd"
+arch="all"
+license="GPL-2.0-or-later"
+depends="kbd-misc"
+makedepends="linux-headers linux-pam-dev check-dev ckbcomp xkeyboard-config"
+install=""
+subpackages="$pkgname-bkeymaps::noarch $pkgname-legacy::noarch
+ $pkgname-misc::noarch $pkgname-doc $pkgname-openrc $pkgname-vlock"
+source="https://www.kernel.org/pub/linux/utils/kbd/kbd-$pkgver.tar.gz
+ loadkeys.initd
+ loadkeys.confd
+
+ error.h
+ fix-tests.patch
+ "
+builddir="$srcdir"/kbd-$pkgver
+
+_datadir=/usr/share
+_xmapdir="$_datadir"/keymaps/xkb
+_bmapdir="$_datadir"/bkeymaps
+_badmaps="pk-ara"
+
+prepare() {
+ default_prepare
+
+ cd "$builddir"
+ cp "$srcdir"/error.h .
+}
+
+build() {
+ cd "$builddir"
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --disable-nls \
+ --prefix=/usr \
+ --datadir="$_datadir" \
+ --htmldir=/usr/share/html/$pkgname
+ make
+}
+
+check() {
+ cd "$builddir"
+ make check
+}
+
+_listxmaps() {
+ local invariant line; invariant=false
+ grep -v '^$' /usr/share/X11/xkb/rules/base.lst | while read line; do
+ case "$line" in
+ '! variant') invariant=true ;;
+ '!'*) invariant=false ;;
+ *) if $invariant; then
+ echo "$line" | cut -d: -f1
+ fi ;;
+ esac
+ done
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+
+ install -Dm755 "$srcdir"/loadkeys.initd \
+ "$pkgdir"/etc/init.d/loadkeys
+ install -Dm644 "$srcdir"/loadkeys.confd \
+ "$pkgdir"/etc/conf.d/loadkeys
+
+ # 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; do
+ if ! test -f "$pkgdir$_xmapdir"/"$layout".map.gz; then
+ echo "Generating keymap $layout..."
+ ckbcomp "$layout" | gzip > "$pkgdir$_xmapdir"/"$layout".map.gz || exit 1
+ fi
+ echo "Generating keymap $layout-$variant..."
+ ckbcomp "$layout" "$variant" | gzip > "$pkgdir$_xmapdir"/"$layout"-"$variant".map.gz || exit 1
+ done
+
+ # 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
+}
+
+vlock() {
+ pkgdesc="$pkgname vlock implemantation"
+ 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
+}
+
+bkeymaps() {
+ pkgdesc="X.org-derived binary keymaps"
+ depends=
+ replaces="bkeymaps"
+ provides="bkeymaps"
+
+ mkdir -p "$subpkgdir$_bmapdir"
+ local map variant layout; for map in "$pkgdir$_xmapdir"/*.map.gz; do
+ variant="$(basename "$map" | cut -d. -f1)"
+ case "$variant" in $_badmaps) continue ;; esac
+
+ 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
+ done
+}
+
+legacy() {
+ pkgdesc="kbd legacy keymaps"
+ depends=
+
+ mkdir -p "$subpkgdir$_datadir"/keymaps
+ mv "$pkgdir$_datadir"/keymaps/legacy "$subpkgdir$_datadir"/keymaps
+}
+
+misc() {
+ pkgdesc="kbd keymaps and console data"
+ depends=
+
+ mkdir -p "$subpkgdir$_datadir"
+ local dir; for dir in consolefonts consoletrans keymaps unimaps; do
+ mv "$pkgdir$_datadir"/$dir "$subpkgdir$_datadir"
+ done
+}
+
+sha512sums="e37bc661c75a8363e9a5ba903310fa7f7ded4f381c2c77aa7edc0b1aca5a63224933fd113cddcf180e7fb85f55407e0d1f47be1cdf69dcf2787e83ac996bbf03 kbd-2.0.4.tar.gz
+64b5ab4c362350521da8f507d22c0b77784da99bbe1b32f0c001cd826f63c607e3f9cd6af01f06a61af8bd709760bbf2bb3cfe2010c33925f2987a1af6ef4998 loadkeys.initd
+12028796552a5ffed1d5cb19d37fc6a73fb4f2e2bf34d837a81171c7ebee98d6c3f557715bf79706d79ce053b9b2450cd8cf1c4ea045428fb7d8a5915ae3ed78 loadkeys.confd
+c66f6b0d8c8b8d285c740bdbe7130dee272ac01cd5e73b35a58cedf1a77fe8d9e062631b804fb58014d8eb9861c8f28aed07bc022ef31662bcc61b5c85a21752 error.h
+bb67e5bb933a48f4a04402e07d7d67169a97485e6b469f8ccd4436466eb17ec2ddcf0ef74d22b3aae9e813feaee5bef0822ec50c384e0276a8c91f9325502a5f fix-tests.patch"
diff --git a/system/kbd/bkeymaps.patch b/system/kbd/bkeymaps.patch
new file mode 100644
index 000000000..cea626167
--- /dev/null
+++ b/system/kbd/bkeymaps.patch
@@ -0,0 +1,14 @@
+diff --git a/src/loadkeys.c b/src/loadkeys.c
+index 8b8e7a1..b3f7fea 100644
+--- a/src/loadkeys.c
++++ b/src/loadkeys.c
+@@ -174,7 +174,8 @@ main(int argc, char *argv[])
+ }
+
+ /* get console */
+- fd = getfd(console);
++ if (!(options & OPT_B))
++ fd = getfd(console);
+
+ if (!(options & OPT_M) && !(options & OPT_B)) {
+ /* check whether the keyboard is in Unicode mode */
diff --git a/system/kbd/error.h b/system/kbd/error.h
new file mode 100644
index 000000000..5eb8ed511
--- /dev/null
+++ b/system/kbd/error.h
@@ -0,0 +1,20 @@
+#ifndef ERROR_H
+#define ERROR_H
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <err.h>
+
+static inline void error(int status, int errnum, const char *fmt, ...)
+{
+ va_list ap;
+ void (*errfunc[2])(int, const char *, va_list) = { &verr, &verrx };
+ void (*warnfunc[2])(const char *, va_list) = { &vwarn, &vwarnx };
+ fflush(stdout);
+ va_start(ap, fmt);
+ if (status != 0)
+ errfunc[errnum==0](status, fmt, ap); /* does not return */
+ warnfunc[errnum==0](fmt, ap);
+ va_end(ap);
+}
+#endif
diff --git a/system/kbd/fix-tests.patch b/system/kbd/fix-tests.patch
new file mode 100644
index 000000000..0ca82420c
--- /dev/null
+++ b/system/kbd/fix-tests.patch
@@ -0,0 +1,41 @@
+busybox readlink doesn't accept -e, and in these cases -f has the same effect.
+--- a/tests/alt-is-meta.in
++++ b/tests/alt-is-meta.in
+@@ -1,6 +1,6 @@
+ #!/bin/sh -efu
+
+-cwd="$(readlink -ev "${0%/*}")"
++cwd="$(readlink -fv "${0%/*}")"
+
+ cd "$cwd"
+
+--- a/tests/dumpkeys-bkeymap.in
++++ b/tests/dumpkeys-bkeymap.in
+@@ -1,6 +1,6 @@
+ #!/bin/sh -efu
+
+-cwd="$(readlink -ev "${0%/*}")"
++cwd="$(readlink -fv "${0%/*}")"
+
+ cd "$cwd"
+
+--- a/tests/dumpkeys-fulltable.in
++++ b/tests/dumpkeys-fulltable.in
+@@ -1,6 +1,6 @@
+ #!/bin/sh -efu
+
+-cwd="$(readlink -ev "${0%/*}")"
++cwd="$(readlink -fv "${0%/*}")"
+
+ cd "$cwd"
+
+--- a/tests/dumpkeys-mktable.in
++++ b/tests/dumpkeys-mktable.in
+@@ -1,6 +1,6 @@
+ #!/bin/sh -efu
+
+-cwd="$(readlink -ev "${0%/*}")"
++cwd="$(readlink -fv "${0%/*}")"
+
+ cd "$cwd"
+
diff --git a/system/kbd/loadkeys.confd b/system/kbd/loadkeys.confd
new file mode 100644
index 000000000..1ba568af9
--- /dev/null
+++ b/system/kbd/loadkeys.confd
@@ -0,0 +1,23 @@
+# Use keymap to specify the default console keymap. There is a complete tree
+# of keymaps in /usr/share/keymaps to choose from.
+keymap="us"
+
+# Should we first load the 'windowkeys' console keymap? Most x86 users will
+# say "yes" here. Note that non-x86 users should leave it as "no".
+# Loading this keymap will enable VT switching (like ALT+Left/Right)
+# using the special windows keys on the linux console.
+windowkeys="NO"
+
+# The maps to load for extended keyboards. Most users will leave this as is.
+extended_keymaps=""
+#extended_keymaps="backspace keypad euro2"
+
+# Tell dumpkeys(1) to interpret character action codes to be
+# from the specified character set.
+# This only matters if you set unicode="yes" in /etc/rc.conf.
+# For a list of valid sets, run `dumpkeys --help`
+dumpkeys_charset=""
+
+# Some fonts map AltGr-E to the currency symbol instead of the Euro.
+# To fix this, set to "yes"
+fix_euro="NO"
diff --git a/system/kbd/loadkeys.initd b/system/kbd/loadkeys.initd
new file mode 100644
index 000000000..6686bf0e5
--- /dev/null
+++ b/system/kbd/loadkeys.initd
@@ -0,0 +1,72 @@
+#!/sbin/openrc-run
+# Copyright (c) 2007-2015 The OpenRC Authors.
+# See the Authors file at the top-level directory of this distribution and
+# https://github.com/OpenRC/openrc/blob/master/AUTHORS
+#
+# This file is part of OpenRC. It is subject to the license terms in
+# the LICENSE file found in the top-level directory of this
+# distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
+# This file may not be copied, modified, propagated, or distributed
+# except according to the terms contained in the LICENSE file.
+
+description="Applies a keymap for the consoles."
+
+depend()
+{
+ provide keymaps
+ need localmount termencoding
+ after bootmisc
+ keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
+}
+
+start()
+{
+ ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}}
+ : ${unicode:=$UNICODE}
+ : ${keymap:=$KEYMAP}
+ : ${extended_keymaps:=$EXTENDED_KEYMAPS}
+ : ${windowkeys:=$SET_WINDOWSKEYS}
+ : ${fix_euro:=$FIX_EURO}
+ : ${dumpkeys_charset:=${DUMPKEYS_CHARSET}}
+
+ if [ -z "$keymap" ]; then
+ eerror "You need to setup keymap in /etc/conf.d/${0##*/} first"
+ return 1
+ fi
+
+ local ttydev=/dev/tty n=
+ [ -d /dev/vc ] && ttydev=/dev/vc/
+
+ # Force linux keycodes for PPC.
+ if [ -f /proc/sys/dev/mac_hid/keyboard_sends_linux_keycodes ]; then
+ echo 1 > /proc/sys/dev/mac_hid/keyboard_sends_linux_keycodes
+ fi
+
+ local wkeys= kmode="-a" msg="ASCII"
+ if yesno $unicode; then
+ kmode="-u"
+ msg="UTF-8"
+ fi
+ yesno $windowkeys && wkeys="windowkeys"
+
+ # Set terminal encoding to either ASCII or UNICODE.
+ # See utf-8(7) for more information.
+ ebegin "Setting keyboard mode [$msg]"
+ n=1
+ while [ $n -le $ttyn ]; do
+ kbd_mode $kmode -C $ttydev$n
+ : $(( n += 1 ))
+ done
+ eend 0
+
+ ebegin "Loading key mappings [$keymap]"
+ loadkeys -q $wkeys $keymap $extended_keymaps
+ eend $? "Error loading key mappings" || return $?
+
+ if yesno $fix_euro; then
+ ebegin "Fixing font for euro symbol"
+ # Fix some fonts displaying the Euro, #173528.
+ echo "altgr keycode 18 = U+20AC" | loadkeys -q -
+ eend $?
+ fi
+}