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@fooishbar.org>
This commit is contained in:
Daniel Stone 2009-01-10 14:36:16 +02:00
parent 57a5eb2583
commit 23862ede59
3 changed files with 82 additions and 55 deletions

View File

@ -485,6 +485,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" ],
@ -996,9 +1016,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])
XKB_LIB='$(top_builddir)/xkb/libxkb.la'
XKB_STUB_LIB='$(top_builddir)/xkb/libxkbstubs.la'
REQUIRED_MODULES="$REQUIRED_MODULES xkbfile"
AC_CHECK_FUNC(strcasecmp, [], AC_DEFINE([NEED_STRCASECMP], 1,
[Do not have 'strcasecmp'.]))
@ -1786,28 +1844,6 @@ AM_CONDITIONAL(XEPHYR, [test "x$KDRIVE" = xyes && test "x$XEPHYR" = xyes])
AM_CONDITIONAL(BUILD_KDRIVEFBDEVLIB, [test "x$KDRIVE" = xyes && test "x$KDRIVEFBDEVLIB" = xyes])
AM_CONDITIONAL(XFAKESERVER, [test "x$KDRIVE" = xyes && test "x$XFAKE" = xyes])
dnl these only go in xkb-config.h (which is shared by the Xorg and Xnest servers)
AC_DEFINE(__XKBDEFRULES__, "xorg", [Default XKB rules])
AC_DEFINE_DIR(XKB_BASE_DIRECTORY, XKBPATH, [Path to XKB data])
AC_DEFINE_DIR(XKB_BIN_DIRECTORY, bindir, [Path to XKB bin dir])
# 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
# XKM_OUTPUT_DIR (used in code) must end in / or file names get hosed
# 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)
dnl and the rest of these are generic, so they're in config.h
dnl
dnl though, thanks to the passing of some significant amount of time, the

View File

@ -6,7 +6,19 @@
#define _XKB_CONFIG_H_
/* Default set of XKB rules. */
#undef __XKBDEFRULES__
#undef XKB_DFLT_RULES
/* Default XKB model. */
#undef XKB_DFLT_MODEL
/* Default XKB layout. */
#undef XKB_DFLT_LAYOUT
/* Default XKB variant. */
#undef XKB_DFLT_VARIANT
/* Default XKB options. */
#undef XKB_DFLT_OPTIONS
/* Path to XKB definitions. */
#undef XKB_BASE_DIRECTORY

View File

@ -85,27 +85,6 @@ typedef struct _SrvXkmInfo {
/***====================================================================***/
#ifndef XKB_BASE_DIRECTORY
#define XKB_BASE_DIRECTORY "/usr/lib/X11/xkb"
#endif
#ifndef XKB_BIN_DIRECTORY
#define XKB_BIN_DIRECTORY XKB_BASE_DIRECTORY
#endif
#ifndef XKB_DFLT_RULES_FILE
#define XKB_DFLT_RULES_FILE "base"
#endif
#ifndef XKB_DFLT_KB_LAYOUT
#define XKB_DFLT_KB_LAYOUT "us"
#endif
#ifndef XKB_DFLT_KB_MODEL
#define XKB_DFLT_KB_MODEL "dflt"
#endif
#ifndef XKB_DFLT_KB_VARIANT
#define XKB_DFLT_KB_VARIANT NULL
#endif
#ifndef XKB_DFLT_KB_OPTIONS
#define XKB_DFLT_KB_OPTIONS NULL
#endif
#ifndef XKB_DFLT_DISABLED
#define XKB_DFLT_DISABLED True
#endif
@ -140,14 +119,14 @@ static char *
XkbGetRulesDflts(XkbRF_VarDefsPtr defs)
{
if (XkbModelDflt) defs->model= XkbModelDflt;
else defs->model= XKB_DFLT_KB_MODEL;
else defs->model= XKB_DFLT_MODEL;
if (XkbLayoutDflt) defs->layout= XkbLayoutDflt;
else defs->layout= XKB_DFLT_KB_LAYOUT;
else defs->layout= XKB_DFLT_LAYOUT;
if (XkbVariantDflt) defs->variant= XkbVariantDflt;
else defs->variant= XKB_DFLT_KB_VARIANT;
else defs->variant= XKB_DFLT_VARIANT;
if (XkbOptionsDflt) defs->options= XkbOptionsDflt;
else defs->options= XKB_DFLT_KB_OPTIONS;
return (rulesDefined?XkbRulesFile:XKB_DFLT_RULES_FILE);
else defs->options= XKB_DFLT_OPTIONS;
return (rulesDefined?XkbRulesFile:XKB_DFLT_RULES);
}
static Bool
@ -159,7 +138,7 @@ char * pval;
if (rulesDefined && (!XkbRulesFile))
return False;
len= (XkbRulesFile?strlen(XkbRulesFile):strlen(XKB_DFLT_RULES_FILE));
len= (XkbRulesFile?strlen(XkbRulesFile):strlen(XKB_DFLT_RULES));
len+= (XkbModelUsed?strlen(XkbModelUsed):0);
len+= (XkbLayoutUsed?strlen(XkbLayoutUsed):0);
len+= (XkbVariantUsed?strlen(XkbVariantUsed):0);
@ -185,8 +164,8 @@ char * pval;
strcpy(&pval[out],XkbRulesFile);
out+= strlen(XkbRulesFile);
} else {
strcpy(&pval[out],XKB_DFLT_RULES_FILE);
out+= strlen(XKB_DFLT_RULES_FILE);
strcpy(&pval[out],XKB_DFLT_RULES);
out+= strlen(XKB_DFLT_RULES);
}
pval[out++]= '\0';
if (XkbModelUsed) {
@ -255,8 +234,8 @@ XkbSetRulesDflts(char *rulesFile,char *model,char *layout,
{
LogMessage(X_WARNING, "[xkb] No rule given, and no previous rule "
"defined. Defaulting to '%s'.\n",
XKB_DFLT_RULES_FILE);
rulesFile = XKB_DFLT_RULES_FILE;
XKB_DFLT_RULES);
rulesFile = XKB_DFLT_RULES;
}
if (rulesFile) {