scripts/update-keysyms: fix path to the include files after de1b6943d
[platform/upstream/libxkbcommon.git] / meson.build
index 1d0a161..62045fb 100644 (file)
@@ -1,9 +1,9 @@
 project(
     'libxkbcommon',
     'c',
-    version: '1.0.0',
+    version: '1.3.0',
     default_options: [
-        'c_std=c99',
+        'c_std=c11',
         'warning_level=2',
         'b_lundef=true',
     ],
@@ -49,7 +49,7 @@ endif
 
 XKBCONFIGEXTRAPATH = get_option('xkb-config-extra-path')
 if XKBCONFIGEXTRAPATH == ''
-    XKBCONFIGEXTRAPATH = join_paths(get_option('prefix'), get_option('sysconfdir'), 'xkb')
+    XKBCONFIGEXTRAPATH = get_option('prefix')/get_option('sysconfdir')/'xkb'
 endif
 
 # The X locale directory for compose.
@@ -152,6 +152,7 @@ have_version_script = cc.links(
     name: '-Wl,--version-script',
 )
 
+map_to_def = find_program('scripts/map-to-def')
 
 # libxkbcommon.
 # Note: we use some yacc extensions, which work with either GNU bison
@@ -231,30 +232,42 @@ libxkbcommon_sources = [
     'src/utils.h',
 ]
 libxkbcommon_link_args = []
+libxkbcommon_link_deps = []
 if have_version_script
     libxkbcommon_link_args += '-Wl,--version-script=' + meson.source_root()/'xkbcommon.map'
+    libxkbcommon_link_deps += 'xkbcommon.map'
+elif cc.get_argument_syntax() == 'msvc'
+    libxkbcommon_def = custom_target('xkbcommon.def',
+        command: [map_to_def, '@INPUT@', '@OUTPUT@'],
+        input: 'xkbcommon.map',
+        output: 'kxbcommon.def',
+    )
+    libxkbcommon_link_deps += libxkbcommon_def
+    libxkbcommon_link_args += '/DEF:' + libxkbcommon_def.full_path()
 endif
 libxkbcommon = library(
     'xkbcommon',
-    'xkbcommon/xkbcommon.h',
+    'include/xkbcommon/xkbcommon.h',
     libxkbcommon_sources,
     link_args: libxkbcommon_link_args,
-    link_depends: 'xkbcommon.map',
+    link_depends: libxkbcommon_link_deps,
     gnu_symbol_visibility: 'hidden',
     version: '0.0.0',
     install: true,
-    include_directories: include_directories('src'),
+    include_directories: include_directories('src', 'include'),
 )
 install_headers(
-    'xkbcommon/xkbcommon.h',
-    'xkbcommon/xkbcommon-compat.h',
-    'xkbcommon/xkbcommon-compose.h',
-    'xkbcommon/xkbcommon-keysyms.h',
-    'xkbcommon/xkbcommon-names.h',
+    'include/xkbcommon/xkbcommon.h',
+    'include/xkbcommon/xkbcommon-compat.h',
+    'include/xkbcommon/xkbcommon-compose.h',
+    'include/xkbcommon/xkbcommon-keysyms.h',
+    'include/xkbcommon/xkbcommon-names.h',
     subdir: 'xkbcommon',
 )
-libxkbcommon_dep = declare_dependency(
+
+dep_libxkbcommon = declare_dependency(
     link_with: libxkbcommon,
+    include_directories: include_directories('include'),
 )
 pkgconfig.generate(
     libxkbcommon,
@@ -287,19 +300,29 @@ You can disable X11 support with -Denable-x11=false.''')
         'src/atom.c',
     ]
     libxkbcommon_x11_link_args = []
+    libxkbcommon_x11_link_deps = []
     if have_version_script
         libxkbcommon_x11_link_args += '-Wl,--version-script=' + meson.source_root()/'xkbcommon-x11.map'
+        libxkbcommon_x11_link_deps += 'xkbcommon-x11.map'
+    elif cc.get_argument_syntax() == 'msvc'
+        libxkbcommon_x11_def = custom_target('xkbcommon-x11.def',
+            command: [map_to_def, '@INPUT@', '@OUTPUT@'],
+            input: 'xkbcommon-x11.map',
+            output: 'xkbcommon-x11.def',
+        )
+        libxkbcommon_x11_link_deps += libxkbcommon_x11_def
+        libxkbcommon_x11_link_args += '/DEF:' + libxkbcommon_x11_def.full_path()
     endif
     libxkbcommon_x11 = library(
         'xkbcommon-x11',
-        'xkbcommon/xkbcommon-x11.h',
+        'include/xkbcommon/xkbcommon-x11.h',
         libxkbcommon_x11_sources,
         link_args: libxkbcommon_x11_link_args,
-        link_depends: 'xkbcommon-x11.map',
+        link_depends: libxkbcommon_x11_link_deps,
         gnu_symbol_visibility: 'hidden',
         version: '0.0.0',
         install: true,
-        include_directories: include_directories('src'),
+        include_directories: include_directories('src', 'include'),
         link_with: libxkbcommon,
         dependencies: [
             xcb_dep,
@@ -307,11 +330,12 @@ You can disable X11 support with -Denable-x11=false.''')
         ],
     )
     install_headers(
-        'xkbcommon/xkbcommon-x11.h',
+        'include/xkbcommon/xkbcommon-x11.h',
         subdir: 'xkbcommon',
     )
-    libxkbcommon_x11_dep = declare_dependency(
+    dep_libxkbcommon_x11 = declare_dependency(
         link_with: libxkbcommon_x11,
+        include_directories: include_directories('include'),
     )
     pkgconfig.generate(
         libxkbcommon_x11,
@@ -336,23 +360,33 @@ if get_option('enable-xkbregistry')
         'src/util-list.c',
     ]
     libxkbregistry_link_args = []
+    libxkbregistry_link_deps = []
     if have_version_script
         libxkbregistry_link_args += '-Wl,--version-script=' + meson.source_root()/'xkbregistry.map'
+        libxkbregistry_link_deps += 'xkbregistry.map'
+    elif cc.get_argument_syntax() == 'msvc'
+        libxkbregistry_def = custom_target('xkbregistry.def',
+            command: [map_to_def, '@INPUT@', '@OUTPUT@'],
+            input: 'xkbregistry.map',
+            output: 'xkbregistry.def',
+        )
+        libxkbregistry_link_deps += libxkbregistry_def
+        libxkbregistry_link_args += '/DEF:' + libxkbregistry_def.full_path()
     endif
     libxkbregistry = library(
         'xkbregistry',
-        'xkbcommon/xkbregistry.h',
+        'include/xkbcommon/xkbregistry.h',
         libxkbregistry_sources,
         link_args: libxkbregistry_link_args,
-        link_depends: 'xkbregistry.map',
+        link_depends: libxkbregistry_link_deps,
         gnu_symbol_visibility: 'hidden',
         dependencies: deps_libxkbregistry,
         version: '0.0.0',
         install: true,
-        include_directories: include_directories('src'),
+        include_directories: include_directories('src', 'include'),
     )
     install_headers(
-        'xkbcommon/xkbregistry.h',
+        'include/xkbcommon/xkbregistry.h',
         subdir: 'xkbcommon',
     )
     pkgconfig.generate(
@@ -364,9 +398,9 @@ if get_option('enable-xkbregistry')
     )
 
     dep_libxkbregistry = declare_dependency(
-                                include_directories: include_directories('xkbcommon'),
-                                link_with: libxkbregistry
-                                )
+        link_with: libxkbregistry,
+        include_directories: include_directories('include'),
+    )
 endif
 
 man_pages = []
@@ -378,10 +412,10 @@ if build_tools
         'tools-internal',
         'tools/tools-common.h',
         'tools/tools-common.c',
-        dependencies: libxkbcommon_dep,
+        dependencies: dep_libxkbcommon,
     )
     tools_dep = declare_dependency(
-        include_directories: [include_directories('tools')],
+        include_directories: [include_directories('tools', 'include')],
         link_with: libxkbcommon_tools_internal,
     )
 
@@ -389,11 +423,11 @@ if build_tools
                dependencies: tools_dep, install: true)
     install_man('tools/xkbcli.1')
 
-    executable('xkbcli-compile-keymap',
-               'tools/compile-keymap.c',
-               dependencies: tools_dep,
-               install: true,
-               install_dir: dir_libexec)
+    xkbcli_compile_keymap = executable('xkbcli-compile-keymap',
+                                       'tools/compile-keymap.c',
+                                       dependencies: tools_dep,
+                                       install: true,
+                                       install_dir: dir_libexec)
     install_man('tools/xkbcli-compile-keymap.1')
     # The same tool again, but with access to some private APIs.
     executable('compile-keymap',
@@ -401,7 +435,12 @@ if build_tools
                libxkbcommon_sources,
                dependencies: [tools_dep],
                c_args: ['-DENABLE_PRIVATE_APIS'],
-               include_directories: [include_directories('src')],
+               include_directories: [include_directories('src', 'include')],
+               install: false)
+    executable('compose',
+               'tools/compose.c',
+               dependencies: tools_dep,
+               include_directories: [include_directories('src', 'include')],
                install: false)
     configh_data.set10('HAVE_XKBCLI_COMPILE_KEYMAP', true)
     executable('xkbcli-how-to-type',
@@ -499,6 +538,10 @@ test_env.set('XKB_LOG_LEVEL', 'debug')
 test_env.set('XKB_LOG_VERBOSITY', '10')
 test_env.set('top_srcdir', meson.source_root())
 test_env.set('top_builddir', meson.build_root())
+test_env.set('HAVE_XKBCLI_INTERACTIVE_EVDEV', configh_data.get('HAVE_XKBCLI_INTERACTIVE_EVDEV', 0).to_string())
+test_env.set('HAVE_XKBCLI_INTERACTIVE_WAYLAND', configh_data.get('HAVE_XKBCLI_INTERACTIVE_WAYLAND', 0).to_string())
+test_env.set('HAVE_XKBCLI_INTERACTIVE_X11', configh_data.get('HAVE_XKBCLI_INTERACTIVE_X11', 0).to_string())
+test_env.set('HAVE_XKBCLI_LIST', configh_data.get('HAVE_XKBCLI_LIST', 0).to_string())
 
 test_configh_data = configuration_data()
 test_configh_data.set_quoted('TEST_XKB_CONFIG_ROOT', meson.source_root()/'test'/'data')
@@ -511,18 +554,20 @@ libxkbcommon_test_internal = static_library(
     'test/common.c',
     'test/test.h',
     'test/evdev-scancodes.h',
+    'bench/bench.c',
+    'bench/bench.h',
     libxkbcommon_sources,
-    include_directories: include_directories('src'),
+    include_directories: include_directories('src', 'include'),
 )
 test_dep = declare_dependency(
-    include_directories: include_directories('src'),
+    include_directories: include_directories('src', 'include'),
     link_with: libxkbcommon_test_internal,
 )
 if get_option('enable-x11')
     libxkbcommon_x11_internal = static_library(
         'xkbcommon-x11-internal',
         libxkbcommon_x11_sources,
-        include_directories: include_directories('src'),
+        include_directories: include_directories('src', 'include'),
         link_with: libxkbcommon_test_internal,
         dependencies: [
             xcb_dep,
@@ -651,6 +696,22 @@ if build_tools
          find_program('test/tool-option-parsing.py'),
          env: test_env,
          suite: ['python-tests'])
+
+    # A set of keysyms to test for. Add one or two symbols to this array
+    # whenever the xorgproto gets updated to make sure we resolve them.
+    keysyms_to_test = [
+        'XF86Macro23',
+    ]
+
+    env = environment()
+    env.set('XKB_CONFIG_ROOT', meson.source_root()/'test'/'data')
+    foreach keysym: keysyms_to_test
+        test('keysym-test-@0@'.format(keysym),
+             find_program('test/test-keysym.py'),
+             env: env,
+             args: [keysym, '--tool', xkbcli_compile_keymap],
+             suite: ['python-tests'])
+    endforeach
 endif
 
 valgrind = find_program('valgrind', required: false)
@@ -673,38 +734,40 @@ executable('fuzz-compose', 'fuzz/compose/target.c', dependencies: test_dep)
 
 
 # Benchmarks.
-libxkbcommon_bench_internal = static_library(
-    'xkbcommon-bench-internal',
-    'bench/bench.c',
-    'bench/bench.h',
-    link_with: libxkbcommon_test_internal,
-)
-bench_dep = declare_dependency(
-    include_directories: include_directories('src'),
-    link_with: libxkbcommon_bench_internal,
-)
 bench_env = environment()
 bench_env.set('top_srcdir', meson.source_root())
 benchmark(
     'key-proc',
-    executable('bench-key-proc', 'bench/key-proc.c', dependencies: bench_dep),
+    executable('bench-key-proc', 'bench/key-proc.c', dependencies: test_dep),
     env: bench_env,
 )
 benchmark(
     'rules',
-    executable('bench-rules', 'bench/rules.c', dependencies: bench_dep),
+    executable('bench-rules', 'bench/rules.c', dependencies: test_dep),
     env: bench_env,
 )
 benchmark(
     'rulescomp',
-    executable('bench-rulescomp', 'bench/rulescomp.c', dependencies: bench_dep),
+    executable('bench-rulescomp', 'bench/rulescomp.c', dependencies: test_dep),
     env: bench_env,
 )
 benchmark(
     'compose',
-    executable('bench-compose', 'bench/compose.c', dependencies: bench_dep),
+    executable('bench-compose', 'bench/compose.c', dependencies: test_dep),
     env: bench_env,
 )
+benchmark(
+    'atom',
+    executable('bench-atom', 'bench/atom.c', dependencies: test_dep),
+    env: bench_env,
+)
+if get_option('enable-x11')
+  benchmark(
+      'x11',
+      executable('bench-x11', 'bench/x11.c', dependencies: x11_test_dep),
+      env: bench_env,
+  )
+endif
 
 
 # Documentation.
@@ -723,11 +786,12 @@ You can disable the documentation with -Denable-docs=false.''')
         'doc/compat.md',
         'doc/user-configuration.md',
         'doc/rules-format.md',
-        'xkbcommon/xkbcommon.h',
-        'xkbcommon/xkbcommon-names.h',
-        'xkbcommon/xkbcommon-x11.h',
-        'xkbcommon/xkbcommon-compose.h',
-        'xkbcommon/xkbregistry.h',
+        'doc/keymap-format-text-v1.md',
+        'include/xkbcommon/xkbcommon.h',
+        'include/xkbcommon/xkbcommon-names.h',
+        'include/xkbcommon/xkbcommon-x11.h',
+        'include/xkbcommon/xkbcommon-compose.h',
+        'include/xkbcommon/xkbregistry.h',
     ]
     doxygen_data = configuration_data()
     doxygen_data.set('PACKAGE_NAME', meson.project_name())
@@ -753,3 +817,14 @@ You can disable the documentation with -Denable-docs=false.''')
 endif
 
 configure_file(output: 'config.h', configuration: configh_data)
+
+
+# Stable variables for projects using xkbcommon as a subproject.
+# These variables should not be renamed.
+libxkbcommon_dep = dep_libxkbcommon
+if get_option('enable-x11')
+  libxkbcommon_x11_dep = dep_libxkbcommon_x11
+endif
+if get_option('enable-xkbregistry')
+  libxkbregistry_dep = dep_libxkbregistry
+endif