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 <dan...@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 <dan...@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 <dan...@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]) + 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'.])) @@ -1810,28 +1868,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 diff --git a/include/xkb-config.h.in b/include/xkb-config.h.in index 29261de..d3cdd19 100644 --- a/include/xkb-config.h.in +++ b/include/xkb-config.h.in @@ -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 diff --git a/xkb/xkbInit.c b/xkb/xkbInit.c index 5f51c45..5361d64 100644 --- a/xkb/xkbInit.c +++ b/xkb/xkbInit.c @@ -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) { -- 1.5.6.5
signature.asc
Description: Digital signature
_______________________________________________ xorg mailing list xorg@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/xorg