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