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:
parent
57a5eb2583
commit
23862ede59
82
configure.ac
82
configure.ac
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user