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)]), 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="$withval" ],
[ XKBOUTPUT="compiled" ]) [ 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], AC_ARG_WITH(serverconfig-path, AS_HELP_STRING([--with-serverconfig-path=PATH],
[Directory where ancillary server config files are installed (default: ${libdir}/xorg)]), [Directory where ancillary server config files are installed (default: ${libdir}/xorg)]),
[ SERVERCONFIG="$withval" ], [ SERVERCONFIG="$withval" ],
@ -996,9 +1016,47 @@ AC_DEFINE(SHAPE, 1, [Support SHAPE extension])
AC_DEFINE(XKB, 1, [Build XKB]) AC_DEFINE(XKB, 1, [Build XKB])
AC_DEFINE(XKB_IN_SERVER, 1, [Build XKB server]) AC_DEFINE(XKB_IN_SERVER, 1, [Build XKB server])
AC_DEFINE(XKB_DFLT_DISABLED, 0, [Disable XKB per default]) 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_LIB='$(top_builddir)/xkb/libxkb.la'
XKB_STUB_LIB='$(top_builddir)/xkb/libxkbstubs.la' XKB_STUB_LIB='$(top_builddir)/xkb/libxkbstubs.la'
REQUIRED_MODULES="$REQUIRED_MODULES xkbfile"
AC_CHECK_FUNC(strcasecmp, [], AC_DEFINE([NEED_STRCASECMP], 1, AC_CHECK_FUNC(strcasecmp, [], AC_DEFINE([NEED_STRCASECMP], 1,
[Do not have 'strcasecmp'.])) [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(BUILD_KDRIVEFBDEVLIB, [test "x$KDRIVE" = xyes && test "x$KDRIVEFBDEVLIB" = xyes])
AM_CONDITIONAL(XFAKESERVER, [test "x$KDRIVE" = xyes && test "x$XFAKE" = 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 and the rest of these are generic, so they're in config.h
dnl dnl
dnl though, thanks to the passing of some significant amount of time, the dnl though, thanks to the passing of some significant amount of time, the

View File

@ -6,7 +6,19 @@
#define _XKB_CONFIG_H_ #define _XKB_CONFIG_H_
/* Default set of XKB rules. */ /* 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. */ /* Path to XKB definitions. */
#undef XKB_BASE_DIRECTORY #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 #ifndef XKB_DFLT_DISABLED
#define XKB_DFLT_DISABLED True #define XKB_DFLT_DISABLED True
#endif #endif
@ -140,14 +119,14 @@ static char *
XkbGetRulesDflts(XkbRF_VarDefsPtr defs) XkbGetRulesDflts(XkbRF_VarDefsPtr defs)
{ {
if (XkbModelDflt) defs->model= XkbModelDflt; if (XkbModelDflt) defs->model= XkbModelDflt;
else defs->model= XKB_DFLT_KB_MODEL; else defs->model= XKB_DFLT_MODEL;
if (XkbLayoutDflt) defs->layout= XkbLayoutDflt; if (XkbLayoutDflt) defs->layout= XkbLayoutDflt;
else defs->layout= XKB_DFLT_KB_LAYOUT; else defs->layout= XKB_DFLT_LAYOUT;
if (XkbVariantDflt) defs->variant= XkbVariantDflt; if (XkbVariantDflt) defs->variant= XkbVariantDflt;
else defs->variant= XKB_DFLT_KB_VARIANT; else defs->variant= XKB_DFLT_VARIANT;
if (XkbOptionsDflt) defs->options= XkbOptionsDflt; if (XkbOptionsDflt) defs->options= XkbOptionsDflt;
else defs->options= XKB_DFLT_KB_OPTIONS; else defs->options= XKB_DFLT_OPTIONS;
return (rulesDefined?XkbRulesFile:XKB_DFLT_RULES_FILE); return (rulesDefined?XkbRulesFile:XKB_DFLT_RULES);
} }
static Bool static Bool
@ -159,7 +138,7 @@ char * pval;
if (rulesDefined && (!XkbRulesFile)) if (rulesDefined && (!XkbRulesFile))
return False; 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+= (XkbModelUsed?strlen(XkbModelUsed):0);
len+= (XkbLayoutUsed?strlen(XkbLayoutUsed):0); len+= (XkbLayoutUsed?strlen(XkbLayoutUsed):0);
len+= (XkbVariantUsed?strlen(XkbVariantUsed):0); len+= (XkbVariantUsed?strlen(XkbVariantUsed):0);
@ -185,8 +164,8 @@ char * pval;
strcpy(&pval[out],XkbRulesFile); strcpy(&pval[out],XkbRulesFile);
out+= strlen(XkbRulesFile); out+= strlen(XkbRulesFile);
} else { } else {
strcpy(&pval[out],XKB_DFLT_RULES_FILE); strcpy(&pval[out],XKB_DFLT_RULES);
out+= strlen(XKB_DFLT_RULES_FILE); out+= strlen(XKB_DFLT_RULES);
} }
pval[out++]= '\0'; pval[out++]= '\0';
if (XkbModelUsed) { if (XkbModelUsed) {
@ -255,8 +234,8 @@ XkbSetRulesDflts(char *rulesFile,char *model,char *layout,
{ {
LogMessage(X_WARNING, "[xkb] No rule given, and no previous rule " LogMessage(X_WARNING, "[xkb] No rule given, and no previous rule "
"defined. Defaulting to '%s'.\n", "defined. Defaulting to '%s'.\n",
XKB_DFLT_RULES_FILE); XKB_DFLT_RULES);
rulesFile = XKB_DFLT_RULES_FILE; rulesFile = XKB_DFLT_RULES;
} }
if (rulesFile) { if (rulesFile) {