[rygel/wip/meson: 71/85] meson: Misc data installs
- From: Jens Georg <jensgeorg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rygel/wip/meson: 71/85] meson: Misc data installs
- Date: Wed, 12 Sep 2018 11:55:58 +0000 (UTC)
commit 4e5cb2513584a933ba67d7a69a58d834f8a4db14
Author: Jens Georg <mail jensge org>
Date: Mon May 22 07:55:28 2017 +0200
meson: Misc data installs
data/meson.build | 37 +++++++++
data/presets/meson.build | 12 +++
data/xml/meson.build | 133 ++++++++++++++++++++++++++++++++
doc/man/meson.build | 46 +++++++++++
doc/meson.build | 1 +
meson.build | 15 +++-
src/librygel-core/meson.build | 5 +-
src/librygel-db/meson.build | 1 +
src/librygel-renderer-gst/meson.build | 1 +
src/librygel-renderer/meson.build | 1 +
src/librygel-ruih/meson.build | 3 +-
src/librygel-server/meson.build | 1 +
src/media-engines/gstreamer/meson.build | 5 ++
src/media-engines/simple/meson.build | 5 ++
src/plugins/external/meson.build | 5 ++
src/plugins/gst-launch/meson.build | 5 ++
src/plugins/lms/meson.build | 5 ++
src/plugins/media-export/meson.build | 5 ++
src/plugins/mpris/meson.build | 5 ++
src/plugins/playbin/meson.build | 4 +
src/plugins/ruih/meson.build | 5 ++
src/plugins/tracker/meson.build | 5 ++
src/rygel/meson.build | 3 +-
23 files changed, 301 insertions(+), 7 deletions(-)
---
diff --git a/data/meson.build b/data/meson.build
new file mode 100644
index 00000000..d7d07198
--- /dev/null
+++ b/data/meson.build
@@ -0,0 +1,37 @@
+install_data('rygel.conf', install_dir : rygel_sysconfdir)
+install_data(join_paths('icons', '128x128', 'rygel.png'), install_dir : join_paths(rygel_icondir, '128x128',
'apps'))
+install_data(join_paths('icons', '120x120', 'rygel.png'), install_dir : rygel_bigicondir)
+install_data(join_paths('icons', '120x120', 'rygel.jpg'), install_dir : rygel_bigicondir)
+install_data(join_paths('icons', '48x48', 'rygel.png'), install_dir : rygel_smallicondir)
+install_data(join_paths('icons', '48x48', 'rygel.jpg'), install_dir : rygel_smallicondir)
+install_data(join_paths('icons', '32x32', 'rygel.png'), install_dir : join_paths(rygel_icondir, '32x32',
'apps'))
+install_data(join_paths('icons', '48x48', 'rygel.png'), install_dir : join_paths(rygel_icondir, '48x48',
'apps'))
+install_data(join_paths('icons', 'scalable', 'rygel.svg'), install_dir : join_paths(rygel_icondir,
'scalable', 'apps'))
+install_data(join_paths('icons', 'scalable', 'rygel-full.svg'), install_dir : join_paths(rygel_icondir,
'scalable', 'apps'))
+
+install_data('rygel-preferences.ui', install_dir : join_paths(rygel_datadir, 'rygel'))
+
+data_conf = configuration_data()
+data_conf.set('bindir', join_paths(get_option('prefix'), get_option('bindir')))
+data_conf.set('VERSION', meson.project_version())
+
+configure_file(input: 'org.gnome.Rygel1.service.in',
+ output: 'org.gnome.Rygel1.service',
+ configuration: data_conf,
+ install_dir : join_paths(rygel_datadir, 'dbus-1', 'services'))
+
+configure_file(input: 'rygel.service.in',
+ output: 'rygel.service',
+ configuration: data_conf,
+ install_dir : rygel_systemduserdir)
+
+configure_file(input: 'rygel-preferences.desktop.in.in',
+ output : 'rygel-preferences.desktop.in',
+ configuration : data_conf)
+
+configure_file(input: 'rygel.desktop.in.in',
+ output : 'rygel.desktop.in',
+ configuration : data_conf)
+
+subdir('presets')
+subdir('xml')
diff --git a/data/presets/meson.build b/data/presets/meson.build
new file mode 100644
index 00000000..d2088d9d
--- /dev/null
+++ b/data/presets/meson.build
@@ -0,0 +1,12 @@
+install_data(
+ ['avenc_aac.prs',
+ 'avenc_mp2.prs',
+ 'avenc_mpeg2video.prs',
+ 'avenc_wmav1.prs',
+ 'avenc_wmv1.prs',
+ 'GstFaac.prs',
+ 'GstLameMP3Enc.prs',
+ 'GstMP4Mux.prs',
+ 'GstTwoLame.prs',
+ 'GstX264Enc.prs'],
+ install_dir : rygel_presetdir)
diff --git a/data/xml/meson.build b/data/xml/meson.build
new file mode 100644
index 00000000..c20b7b8b
--- /dev/null
+++ b/data/xml/meson.build
@@ -0,0 +1,133 @@
+xml_processor = find_program('process-xml.py')
+xml_dir = join_paths(rygel_datadir, 'rygel', 'xml')
+
+server_xml = configure_file(input: 'MediaServer3.xml.in.in',
+ output: 'MediaServer3.xml.in',
+ configuration: conf)
+
+renderer_xml = configure_file(input: 'MediaRenderer2.xml.in.in',
+ output: 'MediaRenderer2.xml.in',
+ configuration: conf)
+
+ruih_xml = configure_file(input: 'MediaRenderer2.xml.in.in',
+ output: 'MediaRenderer2.xml.in',
+ configuration: conf)
+
+
+# Fixme: How to install this...
+#xml_files = xml_processor.process(['EnergyManagement.xml.in',
+# 'ContentDirectory.xml.in',
+# 'ContentDirectory-NoTrack.xml.in',
+# 'ConnectionManager.xml.in',
+# 'RemoteUIServerService.xml.in',
+# 'AVTransport2.xml.in',
+# 'RenderingControl2.xml.in',
+# 'UIList.xml.in',
+# 'BasicManagement2.xml.in',
+# 'X_MS_MediaReceiverRegistrar1.xml.in'],
+# install: true,
+# install_dir : xml_dir)
+
+custom_target('EnergyManagement.xml',
+ input: 'EnergyManagement.xml.in',
+ output: 'EnergyManagement.xml',
+ capture: true,
+ command : [xml_processor, '@INPUT@'],
+ install: true,
+ install_dir : xml_dir)
+
+custom_target('MediaServer3.xml',
+ input: server_xml,
+ output: 'MediaServer3.xml',
+ capture: true,
+ command : [xml_processor, '@INPUT@'],
+ install: true,
+ install_dir : xml_dir)
+
+custom_target('MediaRenderer2.xml',
+ input: renderer_xml,
+ output: 'MediaRenderer2.xml',
+ capture: true,
+ command : [xml_processor, '@INPUT@'],
+ install: true,
+ install_dir : xml_dir)
+
+custom_target('ContentDirectory.xml',
+ input: 'ContentDirectory.xml.in',
+ output: 'ContentDirectory.xml',
+ capture: true,
+ command : [xml_processor, '@INPUT@'],
+ install: true,
+ install_dir : xml_dir)
+
+custom_target('RuihServer2.xml',
+ input: ruih_xml,
+ output: 'RuihServer2.xml',
+ capture: true,
+ command : [xml_processor, '@INPUT@'],
+ install: true,
+ install_dir : xml_dir)
+
+custom_target('ContentDirectory-NoTrack.xml',
+ input: 'ContentDirectory-NoTrack.xml.in',
+ output: 'ContentDirectory-NoTrack.xml',
+ capture: true,
+ command : [xml_processor, '@INPUT@'],
+ install: true,
+ install_dir : xml_dir)
+
+custom_target('ConnectionManager.xml',
+ input: 'ConnectionManager.xml.in',
+ output: 'ConnectionManager.xml',
+ capture: true,
+ command : [xml_processor, '@INPUT@'],
+ install: true,
+ install_dir : xml_dir)
+
+custom_target('RemoteUIServerService.xml',
+ input: 'RemoteUIServerService.xml.in',
+ output: 'RemoteUIServerService.xml',
+ capture: true,
+ command : [xml_processor, '@INPUT@'],
+ install: true,
+ install_dir : xml_dir)
+custom_target('AVTransport2.xml',
+ input: 'AVTransport2.xml.in',
+ output: 'AVTransport2.xml',
+ capture: true,
+ command : [xml_processor, '@INPUT@'],
+ install: true,
+ install_dir : xml_dir)
+
+custom_target('RenderingControl2.xml',
+ input: 'RenderingControl2.xml.in',
+ output: 'RenderingControl2.xml',
+ capture: true,
+ command : [xml_processor, '@INPUT@'],
+ install: true,
+ install_dir : xml_dir)
+
+custom_target('UIList.xml',
+ input: 'UIList.xml.in',
+ output: 'UIList.xml',
+ capture: true,
+ command : [xml_processor, '@INPUT@'],
+ install: true,
+ install_dir : xml_dir)
+
+custom_target('BasicManagement2.xml',
+ input: 'BasicManagement2.xml.in',
+ output: 'BasicManagement2.xml',
+ capture: true,
+ command : [xml_processor, '@INPUT@'],
+ install: true,
+ install_dir : xml_dir)
+
+custom_target('X_MS_MediaReceiverRegistrar1.xml',
+ input: 'X_MS_MediaReceiverRegistrar1.xml.in',
+ output: 'X_MS_MediaReceiverRegistrar1.xml',
+ capture: true,
+ command : [xml_processor, '@INPUT@'],
+ install: true,
+ install_dir : xml_dir)
+
diff --git a/doc/man/meson.build b/doc/man/meson.build
new file mode 100644
index 00000000..8ca0003d
--- /dev/null
+++ b/doc/man/meson.build
@@ -0,0 +1,46 @@
+xsltproc = find_program('xsltproc', required: false)
+
+if xsltproc.found()
+ xlstproc_flags = [
+ '--nonet',
+ '--stringparam', 'man.output.quietly', '1',
+ '--stringparam', 'funcsynopsis.style', 'ansi',
+ '--stringparam', 'man.th.extra1.suppress', '1',
+ '--stringparam', 'man.authors.section.enabled', '1',
+ '--stringparam', 'man.copyright.section.enabled', '1',
+ ]
+
+ xsltproc_args = [
+ xsltproc,
+ xlstproc_flags,
+ '-o', '@OUTPUT@',
+ 'http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl',
+ '@INPUT@',
+ ]
+
+ man_input_files = [
+ 'rygel.xml',
+ 'rygel.conf.xml'
+ ]
+
+ man_output_files = [
+ 'rygel.1',
+ 'rygel.conf.5'
+ ]
+
+ custom_target('man 1 pages',
+ input: 'rygel.xml',
+ output: 'rygel.1',
+ command: xsltproc_args,
+ install: true,
+ install_dir: join_paths(get_option('mandir'), 'man1'))
+
+ custom_target('man 5 pages',
+ input: 'rygel.conf.xml',
+ output: 'rygel.conf.5',
+ command: xsltproc_args,
+ install: true,
+ install_dir: join_paths(get_option('mandir'), 'man5'))
+endif
+
+
diff --git a/doc/meson.build b/doc/meson.build
new file mode 100644
index 00000000..f8f089c3
--- /dev/null
+++ b/doc/meson.build
@@ -0,0 +1 @@
+subdir('man')
diff --git a/meson.build b/meson.build
index ec807b21..cf3919b2 100644
--- a/meson.build
+++ b/meson.build
@@ -3,21 +3,28 @@ project('rygel', ['vala', 'c'],
rygel_sysconfdir = join_paths(get_option('prefix'), get_option('sysconfdir'))
rygel_datadir = join_paths(get_option('prefix'), get_option('datadir'))
-rygel_plugindir = join_paths(get_option('prefix'), get_option('libdir'), 'rygel-2.6', 'plugins')
-rygel_enginedir = join_paths(get_option('prefix'), get_option('libdir'),
- 'rygel-2.6', 'engines')
+rygel_libdir = join_paths(get_option('prefix'), get_option('libdir'))
+rygel_plugindir = join_paths(rygel_libdir, 'rygel-2.6', 'plugins')
+rygel_enginedir = join_paths(rygel_libdir, 'rygel-2.6', 'engines')
rygel_libexecdir = join_paths(get_option('prefix'), get_option('libexecdir'),
'rygel')
rygel_presetdir = join_paths(rygel_datadir, 'rygel', 'presets')
+rygel_icondir = join_paths(rygel_datadir, 'icons', 'hicolor')
rygel_bigicondir = join_paths(rygel_datadir, 'rygel', 'icons', '120x120')
rygel_smallicondir = join_paths(rygel_datadir, 'rygel', 'icons', '48x48')
rygel_includedir = join_paths(get_option('includedir'), 'rygel-2.6')
+rygel_vapidir = join_paths(rygel_datadir, 'vala', 'vapi')
+
+rygel_systemduserdir = join_paths(get_option('prefix'), 'lib', 'systemd', 'user')
+plugin_config = configuration_data()
+plugin_config.set('VERSION', meson.project_version())
conf = configuration_data()
conf.set('GETTEXT_PACKAGE', '"rygel"')
conf.set('PACKAGE_NAME', '"Rygel"')
conf.set('PACKAGE_STRING', '"Rygel @0@"'.format(meson.project_version()))
conf.set('PACKAGE_VERSION', '"@0@"'.format(meson.project_version()))
+conf.set('PACKAGE_URL', '"http://www.rygel-project.org"')
conf.set('ENGINE_DIR', '"@0@"'.format(rygel_enginedir))
conf.set('PRESET_DIR', '"@0@"'.format(rygel_presetdir))
conf.set('DATA_DIR', '"@0@"'.format(rygel_datadir))
@@ -100,3 +107,5 @@ ui_deps = common_deps + [gtk]
configure_file(output: 'config.h', configuration: conf)
subdir('src')
+subdir('data')
+subdir('doc')
diff --git a/src/librygel-core/meson.build b/src/librygel-core/meson.build
index 76241a02..4b61c2e7 100644
--- a/src/librygel-core/meson.build
+++ b/src/librygel-core/meson.build
@@ -44,6 +44,7 @@ core_lib = library('rygel-core-2.6', core_sources,
vala_header : 'rygel-core.h',
install: true,
install_dir : [true, rygel_includedir, true, false])
+install_data('rygel-core-2.6.deps', install_dir : rygel_vapidir)
custom_target('RygelCore-2.6.typelib',
command: [g_ir_compiler, '--output', '@OUTPUT@', '@INPUT@'],
@@ -51,7 +52,7 @@ custom_target('RygelCore-2.6.typelib',
input: 'RygelCore-2.6.gir',
depends: core_lib,
install: true,
- install_dir: gir_dir)
+ install_dir: typelib_dir)
custom_target('RygelCore-2.6.gir',
command: [sed, '-e', 's,Rygel[.],RygelCore.,g',
@@ -61,7 +62,7 @@ custom_target('RygelCore-2.6.gir',
output: 'RygelCore-2.6.gir',
capture: true,
install: true,
- install_dir: typelib_dir)
+ install_dir: gir_dir)
# need to add to get the current build dir as include dir
rygel_core = declare_dependency(include_directories: include_directories('.'),
diff --git a/src/librygel-db/meson.build b/src/librygel-db/meson.build
index 509ffb0f..e9126479 100644
--- a/src/librygel-db/meson.build
+++ b/src/librygel-db/meson.build
@@ -14,6 +14,7 @@ db_lib = library('rygel-db-2.6', db_sources,
vala_header : 'rygel-db.h',
install: true,
install_dir : [true, rygel_includedir, true])
+install_data('rygel-db-2.6.deps', install_dir : rygel_vapidir)
# need to add to get the current build dir as include dir
rygel_db = declare_dependency(include_directories: include_directories('.'),
diff --git a/src/librygel-renderer-gst/meson.build b/src/librygel-renderer-gst/meson.build
index 0f21a38b..88e5b708 100644
--- a/src/librygel-renderer-gst/meson.build
+++ b/src/librygel-renderer-gst/meson.build
@@ -11,6 +11,7 @@ renderer_gst_lib = library('rygel-renderer-gst-2.6', renderer_gst_sources,
vala_header : 'rygel-renderer-gst.h',
install: true,
install_dir : [true, rygel_includedir, true, false])
+install_data('rygel-renderer-gst-2.6.deps', install_dir : rygel_vapidir)
custom_target('RygelRendererGst-2.6.typelib',
command: [g_ir_compiler,
diff --git a/src/librygel-renderer/meson.build b/src/librygel-renderer/meson.build
index 7cd2a016..1d8997c6 100644
--- a/src/librygel-renderer/meson.build
+++ b/src/librygel-renderer/meson.build
@@ -19,6 +19,7 @@ renderer_lib = library('rygel-renderer-2.6', renderer_sources,
vala_header : 'rygel-renderer.h',
install: true,
install_dir : [true, rygel_includedir, true, false])
+install_data('rygel-renderer-2.6.deps', install_dir : rygel_vapidir)
custom_target('RygelRenderer-2.6.typelib',
command: [g_ir_compiler,
diff --git a/src/librygel-ruih/meson.build b/src/librygel-ruih/meson.build
index 96fbcca5..aabda41d 100644
--- a/src/librygel-ruih/meson.build
+++ b/src/librygel-ruih/meson.build
@@ -12,13 +12,14 @@ ruih_sources = [
'rygel-ruih-wildcard-filter-entry.vala'
]
-ruih_lib = library('rygel-ruih-2.6', ruih_sources,
+ruih_lib = library('rygel-ruih-2.0', ruih_sources,
dependencies : ruih_deps + [build_config, rygel_core],
version: '1.0.0',
c_args : ['-DG_LOG_DOMAIN="RygelRuih"'],
vala_header : 'rygel-ruih.h',
install: true,
install_dir : [true, rygel_includedir, true])
+install_data('rygel-ruih-2.0.deps', install_dir : rygel_vapidir)
# need to add to get the current build dir as include dir
rygel_ruih = declare_dependency(include_directories: include_directories('.'),
diff --git a/src/librygel-server/meson.build b/src/librygel-server/meson.build
index 525d91c4..aa0b948a 100644
--- a/src/librygel-server/meson.build
+++ b/src/librygel-server/meson.build
@@ -97,6 +97,7 @@ server_lib = library('rygel-server-2.6', server_sources,
vala_header : 'rygel-server.h',
install: true,
install_dir : [true, rygel_includedir, true, false])
+install_data('rygel-server-2.6.deps', install_dir : rygel_vapidir)
custom_target('RygelServer-2.6.typelib',
command: [g_ir_compiler,
diff --git a/src/media-engines/gstreamer/meson.build b/src/media-engines/gstreamer/meson.build
index df260479..7c62235e 100644
--- a/src/media-engines/gstreamer/meson.build
+++ b/src/media-engines/gstreamer/meson.build
@@ -1,3 +1,8 @@
+configure_file(input : 'media-engine-gst.plugin.in',
+ output : 'media-engine-gst.plugin',
+ configuration : plugin_config,
+ install_dir : rygel_enginedir)
+
media_engine_gst_sources = [
'rygel-aac-transcoder.vala',
'rygel-audio-transcoder.vala',
diff --git a/src/media-engines/simple/meson.build b/src/media-engines/simple/meson.build
index 58f0133b..b89fd87f 100644
--- a/src/media-engines/simple/meson.build
+++ b/src/media-engines/simple/meson.build
@@ -1,3 +1,8 @@
+configure_file(input : 'media-engine-simple.plugin.in',
+ output : 'media-engine-simple.plugin',
+ configuration : plugin_config,
+ install_dir : rygel_enginedir)
+
media_engine_simple_sources = ['rygel-simple-media-engine.vala',
'rygel-simple-data-source.vala']
diff --git a/src/plugins/external/meson.build b/src/plugins/external/meson.build
index b163a2c7..7a0e5583 100644
--- a/src/plugins/external/meson.build
+++ b/src/plugins/external/meson.build
@@ -1,3 +1,8 @@
+configure_file(input : 'external.plugin.in',
+ output : 'external.plugin',
+ configuration : plugin_config,
+ install_dir : rygel_plugindir)
+
rygel_external_sources = [
'rygel-external-container.vala',
'rygel-external-dummy-container.vala',
diff --git a/src/plugins/gst-launch/meson.build b/src/plugins/gst-launch/meson.build
index 72262ce8..41d42a20 100644
--- a/src/plugins/gst-launch/meson.build
+++ b/src/plugins/gst-launch/meson.build
@@ -1,3 +1,8 @@
+configure_file(input : 'gst-launch.plugin.in',
+ output : 'gst-launch.plugin',
+ configuration : plugin_config,
+ install_dir : rygel_plugindir)
+
gst_launch_sources = [
'rygel-gst-launch-plugin.vala',
'rygel-gst-launch-root-container.vala',
diff --git a/src/plugins/lms/meson.build b/src/plugins/lms/meson.build
index 0e3f5650..b2cce615 100644
--- a/src/plugins/lms/meson.build
+++ b/src/plugins/lms/meson.build
@@ -1,3 +1,8 @@
+configure_file(input : 'lms.plugin.in',
+ output : 'lms.plugin',
+ configuration : plugin_config,
+ install_dir : rygel_plugindir)
+
lms_sources = [
'rygel-lms-plugin.vala',
'rygel-lms-plugin-factory.vala',
diff --git a/src/plugins/media-export/meson.build b/src/plugins/media-export/meson.build
index c5a7ae47..f036e490 100644
--- a/src/plugins/media-export/meson.build
+++ b/src/plugins/media-export/meson.build
@@ -1,3 +1,8 @@
+configure_file(input : 'media-export.plugin.in',
+ output : 'media-export.plugin',
+ configuration : plugin_config,
+ install_dir : rygel_plugindir)
+
constants = static_library('mx-constants',
'constants.vala',
dependencies : glib,
diff --git a/src/plugins/mpris/meson.build b/src/plugins/mpris/meson.build
index 2c86578c..1bdc6e6b 100644
--- a/src/plugins/mpris/meson.build
+++ b/src/plugins/mpris/meson.build
@@ -1,3 +1,8 @@
+configure_file(input : 'mpris.plugin.in',
+ output : 'mpris.plugin',
+ configuration : plugin_config,
+ install_dir : rygel_plugindir)
+
rygel_mpris_sources = [
'rygel-mpris-player.vala',
'rygel-mpris-plugin.vala',
diff --git a/src/plugins/playbin/meson.build b/src/plugins/playbin/meson.build
index b5ad0b64..4ac96071 100644
--- a/src/plugins/playbin/meson.build
+++ b/src/plugins/playbin/meson.build
@@ -1,3 +1,7 @@
+configure_file(input : 'playbin.plugin.in',
+ output : 'playbin.plugin',
+ configuration : plugin_config,
+ install_dir : rygel_plugindir)
shared_module('rygel-playbin',
['rygel-playbin-module.vala', 'rygel-playbin-plugin.vala'],
diff --git a/src/plugins/ruih/meson.build b/src/plugins/ruih/meson.build
index 17fac7c7..e81be3c0 100644
--- a/src/plugins/ruih/meson.build
+++ b/src/plugins/ruih/meson.build
@@ -1,3 +1,8 @@
+configure_file(input : 'ruih.plugin.in',
+ output : 'ruih.plugin',
+ configuration : plugin_config,
+ install_dir : rygel_plugindir)
+
shared_module('rygel-ruih',
['rygel-ruih-module.vala', 'rygel-ruih-plugin.vala'],
dependencies: [build_config, rygel_core, rygel_ruih],
diff --git a/src/plugins/tracker/meson.build b/src/plugins/tracker/meson.build
index adada31a..502f0b22 100644
--- a/src/plugins/tracker/meson.build
+++ b/src/plugins/tracker/meson.build
@@ -1,3 +1,8 @@
+configure_file(input : 'tracker.plugin.in',
+ output : 'tracker.plugin',
+ configuration : plugin_config,
+ install_dir : rygel_plugindir)
+
rygel_tracker_sources = [
'rygel-tracker-root-container.vala',
'rygel-tracker-category-container.vala',
diff --git a/src/rygel/meson.build b/src/rygel/meson.build
index 8559aab5..a4b55079 100644
--- a/src/rygel/meson.build
+++ b/src/rygel/meson.build
@@ -6,5 +6,6 @@ rygel_sources = [
executable('rygel',
rygel_sources,
c_args : ['-DG_LOG_DOMAIN="Rygel"'],
- dependencies : rygel_deps + [build_config, rygel_core, rygel_server]
+ dependencies : rygel_deps + [build_config, rygel_core, rygel_server],
+ install: true
)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]