[PATCH] xkb: Set sane build time XKB defaults

Dan Nicholson dbn.lists at gmail.com
Mon Jan 12 10:39:18 PST 2009


On Sat, Jan 10, 2009 at 02:43:54PM +0200, Daniel Stone wrote:
> On Sat, Jan 10, 2009 at 02:40:04PM +0200, Daniel Stone wrote:
> > On Wed, Jan 07, 2009 at 08:27:39AM -0800, Dan Nicholson wrote:
> > > On Wed, Jan 7, 2009 at 7:44 AM, Daniel Stone <daniel at fooishbar.org> wrote:
> > > > NAK of sorts: I'd like to fix this properly.  In particular, hardcoded
> > > > paths are not the way.
> > > 
> > > Sure. However, as it stands on both master and 1.6-branch, all the DDX
> > > except Xorg start with these defaults. So, they have an invalid
> > > default model of "dflt" as far as I can tell. Also, the
> > > XKB_BASE_DIRECTORY setting could be dropped from this patch. It's
> > > always defined in configure, so the hardcoded /usr/share/X11/xkb
> > > should never actually get used.
> > > 
> > > What did you have in mind to fix this properly?
> > 
> > Something like this?
> 
> Or maybe even something like this, rather ...
> 
> Cheers,
> Daniel

> From 9de211e5c81f7d41492bf5b212d0cd291c896d63 Mon Sep 17 00:00:00 2001
> From: Daniel Stone <daniel at fooishbar.org>
> Date: Sat, 10 Jan 2009 14:36:16 +0200
> Subject: [PATCH] XKB: Allow build-time configuration of XKB defaults
> 
> Instead of hardcoding base/pc105/us, allow users to change the defaults at
> ./configure time.  Change the default model to be evdev on Linux.
> 
> Signed-off-by: Daniel Stone <daniel at fooishbar.org>
> ---
>  configure.ac            |   82 +++++++++++++++++++++++++++++++++-------------
>  include/xkb-config.h.in |   14 +++++++-
>  xkb/xkbInit.c           |   41 ++++++------------------
>  3 files changed, 82 insertions(+), 55 deletions(-)
> 
> diff --git a/configure.ac b/configure.ac
> index c7ae5e0..147b70d 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -483,6 +483,26 @@ AC_ARG_WITH(xkb-path,         AS_HELP_STRING([--with-xkb-path=PATH], [Path to XK
>  AC_ARG_WITH(xkb-output,       AS_HELP_STRING([--with-xkb-output=PATH], [Path to XKB output dir (default: ${datadir}/X11/xkb/compiled)]),
>  				[ XKBOUTPUT="$withval" ],
>  				[ XKBOUTPUT="compiled" ])
> +AC_ARG_WITH(default-xkb-rules, AS_HELP_STRING([--with-default-xkb-rules=RULES],
> +                                   [Keyboard ruleset (default: base/evdev)]),
> +                                [ XKB_RULES="$withval" ],
> +                                [ XKB_RULES="" ])
> +AC_ARG_WITH(default-xkb-model, AS_HELP_STRING([--with-default-xkb-model=MODEL],
> +                                   [Keyboard model (default: pc104)]),
> +                                [ XKB_MODEL="$withval" ],
> +                                [ XKB_MODEL="pc104" ])
> +AC_ARG_WITH(default-xkb-layout, AS_HELP_STRING([--with-default-xkb-layout=LAYOUT],
> +                                   [Keyboard layout (default: us)]),
> +                                [ XKB_LAYOUT="$withval" ],
> +                                [ XKB_LAYOUT="us" ])
> +AC_ARG_WITH(default-xkb-variant, AS_HELP_STRING([--with-default-xkb-variant=VARIANT],
> +                                   [Keyboard variant (default: (none))]),
> +                                [ XKB_VARIANT="$withval" ],
> +                                [ XKB_VARIANT="" ])
> +AC_ARG_WITH(default-xkb-options, AS_HELP_STRING([--with-default-xkb-options=OPTIONS],
> +                                   [Keyboard layout options (default: (none))]),
> +                                [ XKB_OPTIONS="$withval" ],
> +                                [ XKB_OPTIONS="" ])
>  AC_ARG_WITH(serverconfig-path, AS_HELP_STRING([--with-serverconfig-path=PATH],
>  				   [Directory where ancillary server config files are installed (default: ${libdir}/xorg)]),
>  				[ SERVERCONFIG="$withval" ],
> @@ -1005,9 +1025,47 @@ AC_DEFINE(SHAPE, 1, [Support SHAPE extension])
>  AC_DEFINE(XKB, 1, [Build XKB])
>  AC_DEFINE(XKB_IN_SERVER, 1, [Build XKB server])
>  AC_DEFINE(XKB_DFLT_DISABLED, 0, [Disable XKB per default])
> -REQUIRED_MODULES="$REQUIRED_MODULES xkbfile"
> +AC_DEFINE_DIR(XKB_BASE_DIRECTORY, XKBPATH, [Path to XKB data])
> +AC_DEFINE_DIR(XKB_BIN_DIRECTORY, bindir, [Path to XKB bin dir])
> +
> +dnl Make sure XKM_OUTPUT_DIR is an absolute path
> +XKBOUTPUT_FIRSTCHAR=`echo $XKBOUTPUT | cut -b 1`
> +if [[ x$XKBOUTPUT_FIRSTCHAR != x/ ]] ; then
> +   XKBOUTPUT="$XKB_BASE_DIRECTORY/$XKBOUTPUT"
> +fi
> +
> +dnl XKM_OUTPUT_DIR (used in code) must end in / or file names get hosed
> +dnl XKB_COMPILED_DIR (used in Makefiles) must not or install-sh gets confused
> +
> +XKBOUTPUT=`echo $XKBOUTPUT/ | sed 's|/*$|/|'`
> +XKB_COMPILED_DIR=`echo $XKBOUTPUT | sed 's|/*$||'`
> +AC_DEFINE_DIR(XKM_OUTPUT_DIR, XKBOUTPUT, [Path to XKB output dir])
> +AC_SUBST(XKB_COMPILED_DIR)
> +
> +if test "x$XKB_DFLT_RULES" = x; then
> +    case $host_os in
> +    linux*)
> +        dnl doesn't take AutoAddDevices into account, but whatever.
> +        if test "x$CONFIG_HAL" = xyes; then
> +            XKB_DFLT_RULES="evdev"
> +        else
> +            XKB_DFLT_RULES="base"
> +        fi
> +        ;;
> +    *)
> +        XKB_DFLT_RULES="base"
> +        ;;
> +    esac
> +fi
> +AC_DEFINE_UNQUOTED(XKB_DFLT_RULES, ["$XKB_DFLT_RULES"], [Default XKB ruleset])
> +AC_DEFINE_UNQUOTED(XKB_DFLT_MODEL, ["$XKB_DFLT_MODEL"], [Default XKB model])
> +AC_DEFINE_UNQUOTED(XKB_DFLT_LAYOUT, ["$XKB_DFLT_LAYOUT"], [Default XKB layout])
> +AC_DEFINE_UNQUOTED(XKB_DFLT_VARIANT, ["$XKB_DFLT_VARIANT"], [Default XKB variant])
> +AC_DEFINE_UNQUOTED(XKB_DFLT_OPTIONS, ["$XKB_DFLT_OPTIONS"], [Default XKB options])

Does the XKB code know how to deal with empty settings rather than NULL?
I couldn't quite tell, but it seems there are spots that expect NULL to
specify unset.

--
Dan



More information about the xorg mailing list