Commit e05e900c authored by Martin Robinson's avatar Martin Robinson Committed by Commit Bot

Allow compilation against older atspi-2 versions

Since atspi-2 does not support getting version information at compile
time, we must do this manually with pkg-config. Add defines for the
versions of atspi-2 that we care about and guard newer enum values with
those defines.

Bug: 887908
Change-Id: I8eecb2eeada48cc2176117b764adbf77b26ce351
Reviewed-on: https://chromium-review.googlesource.com/c/1238437
Commit-Queue: Martin Robinson <mrobinson@igalia.com>
Reviewed-by: default avatarThomas Anderson <thomasanderson@chromium.org>
Reviewed-by: default avatarDominic Mazzoni <dmazzoni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#598863}
parent 93a95245
......@@ -103,6 +103,20 @@ if (use_glib) {
if (use_atk) {
pkg_config("atspi2") {
packages = [ "atspi-2" ]
atspi_version = exec_script(pkg_config_script,
pkg_config_args + [
"atspi-2",
"--version-as-components",
],
"value")
atspi_major_version = atspi_version[0]
atspi_minor_version = atspi_version[1]
atspi_micro_version = atspi_version[2]
defines = [
"ATSPI_MAJOR_VERSION=$atspi_major_version",
"ATSPI_MINOR_VERSION=$atspi_minor_version",
"ATSPI_MICRO_VERSION=$atspi_micro_version",
]
}
}
......
......@@ -124,6 +124,8 @@ def main():
dest='atleast_version', type='string')
parser.add_option('--libdir', action='store_true', dest='libdir')
parser.add_option('--dridriverdir', action='store_true', dest='dridriverdir')
parser.add_option('--version-as-components', action='store_true',
dest='version_as_components')
(options, args) = parser.parse_args()
# Make a list of regular expressions to strip out.
......@@ -151,6 +153,17 @@ def main():
print "false"
return 0
if options.version_as_components:
cmd = [options.pkg_config, "--modversion"] + args
try:
version_string = subprocess.check_output(cmd)
except:
sys.stderr.write('Error from pkg-config.\n')
return 1
print json.dumps(list(map(int, version_string.strip().split("."))))
return 0
if options.libdir:
cmd = [options.pkg_config, "--variable=libdir"] + args
if options.debug:
......
......@@ -29,7 +29,16 @@ const char* GetNameForPlatformConstant(
#define QUOTE(X) \
{ X, #X }
#define ATSPI_CHECK_VERSION(major, minor, micro) \
(major) < ATSPI_MAJOR_VERSION || \
((major) == ATSPI_MAJOR_VERSION && (minor) < ATSPI_MINOR_VERSION) || \
((major) == ATSPI_MAJOR_VERSION && (minor) == ATSPI_MINOR_VERSION && \
(micro) <= ATSPI_MICRO_VERSION)
CONTENT_EXPORT const char* ATSPIStateToString(AtspiStateType state) {
// These roles are listed in the order they are defined in the enum so that
// we can more easily discard ones that are too new for the version of
// atspi2 that we are compiling against.
static const PlatformConstantToNameEntry state_table[] = {
QUOTE(ATSPI_STATE_INVALID),
QUOTE(ATSPI_STATE_ACTIVE),
......@@ -72,10 +81,13 @@ CONTENT_EXPORT const char* ATSPIStateToString(AtspiStateType state) {
QUOTE(ATSPI_STATE_SELECTABLE_TEXT),
QUOTE(ATSPI_STATE_IS_DEFAULT),
QUOTE(ATSPI_STATE_VISITED),
#if ATSPI_CHECK_VERSION(2, 12, 0)
QUOTE(ATSPI_STATE_CHECKABLE),
QUOTE(ATSPI_STATE_HAS_POPUP),
#endif
#if ATSPI_CHECK_VERSION(2, 16, 0)
QUOTE(ATSPI_STATE_READ_ONLY),
QUOTE(ATSPI_STATE_LAST_DEFINED),
#endif
};
return GetNameForPlatformConstant(state_table, base::size(state_table),
......@@ -83,132 +95,141 @@ CONTENT_EXPORT const char* ATSPIStateToString(AtspiStateType state) {
}
CONTENT_EXPORT const char* ATSPIRoleToString(AtspiRole role) {
// These roles are listed in the order they are defined in the enum so that
// we can more easily discard ones that are too new for the version of
// atspi2 that we are compiling against.
static const PlatformConstantToNameEntry role_table[] = {
QUOTE(ATSPI_ROLE_INVALID),
QUOTE(ATSPI_ROLE_ACCELERATOR_LABEL),
QUOTE(ATSPI_ROLE_ALERT),
QUOTE(ATSPI_ROLE_ANIMATION),
QUOTE(ATSPI_ROLE_APPLICATION),
QUOTE(ATSPI_ROLE_ARROW),
QUOTE(ATSPI_ROLE_ARTICLE),
QUOTE(ATSPI_ROLE_AUDIO),
QUOTE(ATSPI_ROLE_AUTOCOMPLETE),
QUOTE(ATSPI_ROLE_BLOCK_QUOTE),
QUOTE(ATSPI_ROLE_CALENDAR),
QUOTE(ATSPI_ROLE_CANVAS),
QUOTE(ATSPI_ROLE_CAPTION),
QUOTE(ATSPI_ROLE_CHART),
QUOTE(ATSPI_ROLE_CHECK_BOX),
QUOTE(ATSPI_ROLE_CHECK_MENU_ITEM),
QUOTE(ATSPI_ROLE_COLOR_CHOOSER),
QUOTE(ATSPI_ROLE_COLUMN_HEADER),
QUOTE(ATSPI_ROLE_COMBO_BOX),
QUOTE(ATSPI_ROLE_COMMENT),
QUOTE(ATSPI_ROLE_DATE_EDITOR),
QUOTE(ATSPI_ROLE_DEFINITION),
QUOTE(ATSPI_ROLE_DESCRIPTION_LIST),
QUOTE(ATSPI_ROLE_DESCRIPTION_TERM),
QUOTE(ATSPI_ROLE_DESCRIPTION_VALUE),
QUOTE(ATSPI_ROLE_DESKTOP_FRAME),
QUOTE(ATSPI_ROLE_DESKTOP_ICON),
QUOTE(ATSPI_ROLE_DESKTOP_FRAME),
QUOTE(ATSPI_ROLE_DIAL),
QUOTE(ATSPI_ROLE_DIALOG),
QUOTE(ATSPI_ROLE_DIRECTORY_PANE),
QUOTE(ATSPI_ROLE_DOCUMENT_EMAIL),
QUOTE(ATSPI_ROLE_DOCUMENT_FRAME),
QUOTE(ATSPI_ROLE_DOCUMENT_PRESENTATION),
QUOTE(ATSPI_ROLE_DOCUMENT_SPREADSHEET),
QUOTE(ATSPI_ROLE_DOCUMENT_TEXT),
QUOTE(ATSPI_ROLE_DOCUMENT_WEB),
QUOTE(ATSPI_ROLE_DRAWING_AREA),
QUOTE(ATSPI_ROLE_EDITBAR),
QUOTE(ATSPI_ROLE_EMBEDDED),
QUOTE(ATSPI_ROLE_ENTRY),
QUOTE(ATSPI_ROLE_EXTENDED),
QUOTE(ATSPI_ROLE_FILE_CHOOSER),
QUOTE(ATSPI_ROLE_FILLER),
QUOTE(ATSPI_ROLE_FOCUS_TRAVERSABLE),
QUOTE(ATSPI_ROLE_FONT_CHOOSER),
QUOTE(ATSPI_ROLE_FOOTER),
QUOTE(ATSPI_ROLE_FOOTNOTE),
QUOTE(ATSPI_ROLE_FORM),
QUOTE(ATSPI_ROLE_FRAME),
QUOTE(ATSPI_ROLE_GLASS_PANE),
QUOTE(ATSPI_ROLE_GROUPING),
QUOTE(ATSPI_ROLE_HEADER),
QUOTE(ATSPI_ROLE_HEADING),
QUOTE(ATSPI_ROLE_HTML_CONTAINER),
QUOTE(ATSPI_ROLE_ICON),
QUOTE(ATSPI_ROLE_IMAGE),
QUOTE(ATSPI_ROLE_IMAGE_MAP),
QUOTE(ATSPI_ROLE_INFO_BAR),
QUOTE(ATSPI_ROLE_INPUT_METHOD_WINDOW),
QUOTE(ATSPI_ROLE_INTERNAL_FRAME),
QUOTE(ATSPI_ROLE_INVALID),
QUOTE(ATSPI_ROLE_LABEL),
QUOTE(ATSPI_ROLE_LANDMARK),
QUOTE(ATSPI_ROLE_LAYERED_PANE),
QUOTE(ATSPI_ROLE_LEVEL_BAR),
QUOTE(ATSPI_ROLE_LINK),
QUOTE(ATSPI_ROLE_LIST),
QUOTE(ATSPI_ROLE_LIST_BOX),
QUOTE(ATSPI_ROLE_LIST_ITEM),
QUOTE(ATSPI_ROLE_LOG),
QUOTE(ATSPI_ROLE_MARQUEE),
QUOTE(ATSPI_ROLE_MATH),
QUOTE(ATSPI_ROLE_MATH_FRACTION),
QUOTE(ATSPI_ROLE_MATH_ROOT),
QUOTE(ATSPI_ROLE_MENU),
QUOTE(ATSPI_ROLE_MENU_BAR),
QUOTE(ATSPI_ROLE_MENU_ITEM),
QUOTE(ATSPI_ROLE_NOTIFICATION),
QUOTE(ATSPI_ROLE_OPTION_PANE),
QUOTE(ATSPI_ROLE_PAGE),
QUOTE(ATSPI_ROLE_PAGE_TAB),
QUOTE(ATSPI_ROLE_PAGE_TAB_LIST),
QUOTE(ATSPI_ROLE_PANEL),
QUOTE(ATSPI_ROLE_PARAGRAPH),
QUOTE(ATSPI_ROLE_PASSWORD_TEXT),
QUOTE(ATSPI_ROLE_POPUP_MENU),
QUOTE(ATSPI_ROLE_PROGRESS_BAR),
QUOTE(ATSPI_ROLE_PUSH_BUTTON),
QUOTE(ATSPI_ROLE_RADIO_BUTTON),
QUOTE(ATSPI_ROLE_RADIO_MENU_ITEM),
QUOTE(ATSPI_ROLE_RATING),
QUOTE(ATSPI_ROLE_REDUNDANT_OBJECT),
QUOTE(ATSPI_ROLE_ROOT_PANE),
QUOTE(ATSPI_ROLE_ROW_HEADER),
QUOTE(ATSPI_ROLE_RULER),
QUOTE(ATSPI_ROLE_SCROLL_BAR),
QUOTE(ATSPI_ROLE_SCROLL_PANE),
QUOTE(ATSPI_ROLE_SECTION),
QUOTE(ATSPI_ROLE_SEPARATOR),
QUOTE(ATSPI_ROLE_SLIDER),
QUOTE(ATSPI_ROLE_SPIN_BUTTON),
QUOTE(ATSPI_ROLE_SPLIT_PANE),
QUOTE(ATSPI_ROLE_STATIC),
QUOTE(ATSPI_ROLE_STATUS_BAR),
QUOTE(ATSPI_ROLE_SUBSCRIPT),
QUOTE(ATSPI_ROLE_SUPERSCRIPT),
QUOTE(ATSPI_ROLE_TABLE),
QUOTE(ATSPI_ROLE_TABLE_CELL),
QUOTE(ATSPI_ROLE_TABLE_COLUMN_HEADER),
QUOTE(ATSPI_ROLE_TABLE_ROW),
QUOTE(ATSPI_ROLE_TABLE_ROW_HEADER),
QUOTE(ATSPI_ROLE_TEAROFF_MENU_ITEM),
QUOTE(ATSPI_ROLE_TERMINAL),
QUOTE(ATSPI_ROLE_TEXT),
QUOTE(ATSPI_ROLE_TIMER),
QUOTE(ATSPI_ROLE_TITLE_BAR),
QUOTE(ATSPI_ROLE_TOGGLE_BUTTON),
QUOTE(ATSPI_ROLE_TOOL_BAR),
QUOTE(ATSPI_ROLE_TOOL_TIP),
QUOTE(ATSPI_ROLE_TREE),
QUOTE(ATSPI_ROLE_TREE_ITEM),
QUOTE(ATSPI_ROLE_TREE_TABLE),
QUOTE(ATSPI_ROLE_UNKNOWN),
QUOTE(ATSPI_ROLE_VIDEO),
QUOTE(ATSPI_ROLE_VIEWPORT),
QUOTE(ATSPI_ROLE_WINDOW),
QUOTE(ATSPI_ROLE_EXTENDED),
QUOTE(ATSPI_ROLE_HEADER),
QUOTE(ATSPI_ROLE_FOOTER),
QUOTE(ATSPI_ROLE_PARAGRAPH),
QUOTE(ATSPI_ROLE_RULER),
QUOTE(ATSPI_ROLE_APPLICATION),
QUOTE(ATSPI_ROLE_AUTOCOMPLETE),
QUOTE(ATSPI_ROLE_EDITBAR),
QUOTE(ATSPI_ROLE_EMBEDDED),
QUOTE(ATSPI_ROLE_ENTRY),
QUOTE(ATSPI_ROLE_CHART),
QUOTE(ATSPI_ROLE_CAPTION),
QUOTE(ATSPI_ROLE_DOCUMENT_FRAME),
QUOTE(ATSPI_ROLE_HEADING),
QUOTE(ATSPI_ROLE_PAGE),
QUOTE(ATSPI_ROLE_SECTION),
QUOTE(ATSPI_ROLE_REDUNDANT_OBJECT),
QUOTE(ATSPI_ROLE_FORM),
QUOTE(ATSPI_ROLE_LINK),
QUOTE(ATSPI_ROLE_INPUT_METHOD_WINDOW),
QUOTE(ATSPI_ROLE_TABLE_ROW),
QUOTE(ATSPI_ROLE_TREE_ITEM),
QUOTE(ATSPI_ROLE_DOCUMENT_SPREADSHEET),
QUOTE(ATSPI_ROLE_DOCUMENT_PRESENTATION),
QUOTE(ATSPI_ROLE_DOCUMENT_TEXT),
QUOTE(ATSPI_ROLE_DOCUMENT_WEB),
QUOTE(ATSPI_ROLE_DOCUMENT_EMAIL),
QUOTE(ATSPI_ROLE_COMMENT),
QUOTE(ATSPI_ROLE_LIST_BOX),
QUOTE(ATSPI_ROLE_GROUPING),
QUOTE(ATSPI_ROLE_IMAGE_MAP),
QUOTE(ATSPI_ROLE_NOTIFICATION),
QUOTE(ATSPI_ROLE_INFO_BAR),
QUOTE(ATSPI_ROLE_LEVEL_BAR),
#if ATSPI_CHECK_VERSION(2, 12, 0)
QUOTE(ATSPI_ROLE_TITLE_BAR),
QUOTE(ATSPI_ROLE_BLOCK_QUOTE),
QUOTE(ATSPI_ROLE_AUDIO),
QUOTE(ATSPI_ROLE_VIDEO),
QUOTE(ATSPI_ROLE_DEFINITION),
QUOTE(ATSPI_ROLE_ARTICLE),
QUOTE(ATSPI_ROLE_LANDMARK),
QUOTE(ATSPI_ROLE_LOG),
QUOTE(ATSPI_ROLE_MARQUEE),
QUOTE(ATSPI_ROLE_MATH),
QUOTE(ATSPI_ROLE_RATING),
QUOTE(ATSPI_ROLE_TIMER),
#endif
#if ATSPI_CHECK_VERSION(2, 16, 0)
QUOTE(ATSPI_ROLE_STATIC),
QUOTE(ATSPI_ROLE_MATH_FRACTION),
QUOTE(ATSPI_ROLE_MATH_ROOT),
QUOTE(ATSPI_ROLE_SUBSCRIPT),
QUOTE(ATSPI_ROLE_SUPERSCRIPT),
#endif
#if ATSPI_CHECK_VERSION(2, 26, 0)
QUOTE(ATSPI_ROLE_DESCRIPTION_LIST),
QUOTE(ATSPI_ROLE_DESCRIPTION_TERM),
QUOTE(ATSPI_ROLE_DESCRIPTION_VALUE),
QUOTE(ATSPI_ROLE_FOOTNOTE),
#endif
};
return GetNameForPlatformConstant(role_table, base::size(role_table), role);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment