[file-roller] ported to meson
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [file-roller] ported to meson
- Date: Sun, 19 Nov 2017 15:55:08 +0000 (UTC)
commit 80ce23d399e3911cc44447ca2e13e60b4356c14a
Author: Paolo Bacchilega <paobac src gnome org>
Date: Wed Oct 18 12:44:15 2017 +0200
ported to meson
.gitignore | 6 +
INSTALL | 237 --------------
Makefile.am | 96 ------
README | 16 +-
autogen.sh | 15 -
configure.ac | 328 --------------------
data/Makefile.am | 70 -----
data/file-roller.convert | 45 ---
data/icons/16x16/Makefile.am | 3 -
data/icons/16x16/apps/Makefile.am | 26 --
data/icons/22x22/Makefile.am | 3 -
data/icons/22x22/apps/Makefile.am | 26 --
data/icons/24x24/Makefile.am | 3 -
data/icons/24x24/apps/Makefile.am | 27 --
data/icons/256x256/Makefile.am | 3 -
data/icons/256x256/apps/Makefile.am | 26 --
data/icons/32x32/Makefile.am | 3 -
data/icons/32x32/apps/Makefile.am | 26 --
data/icons/48x48/Makefile.am | 3 -
data/icons/48x48/apps/Makefile.am | 26 --
data/icons/Makefile.am | 5 -
.../icons/{ => hicolor}/16x16/apps/file-roller.png | Bin 1066 -> 1066 bytes
.../icons/{ => hicolor}/22x22/apps/file-roller.png | Bin 1371 -> 1371 bytes
.../icons/{ => hicolor}/24x24/apps/file-roller.png | Bin 1444 -> 1444 bytes
.../{ => hicolor}/256x256/apps/file-roller.png | Bin 27895 -> 27895 bytes
.../icons/{ => hicolor}/32x32/apps/file-roller.png | Bin 2081 -> 2081 bytes
.../icons/{ => hicolor}/48x48/apps/file-roller.png | Bin 3246 -> 3246 bytes
.../scalable/apps/file-roller-symbolic.svg | 0
data/icons/meson.build | 1 +
data/icons/scalable/Makefile.am | 3 -
data/icons/scalable/apps/Makefile.am | 26 --
data/meson.build | 64 ++++
data/org.gnome.FileRoller.appdata.xml.in | 20 +-
data/org.gnome.FileRoller.desktop.in.in | 6 +-
file-roller.spec.in | 98 ------
git.mk | 200 ------------
help/LINGUAS | 22 ++
help/Makefile.am | 31 --
help/meson.build | 23 ++
meson.build | 167 ++++++++++
meson_options.txt | 41 +++
nautilus/Makefile.am | 23 --
nautilus/meson.build | 20 ++
po/meson.build | 1 +
src/Makefile.am | 236 --------------
src/commands/Makefile.am | 9 -
src/commands/meson.build | 10 +
src/fr-application-menu.c | 2 +-
src/fr-init.c | 2 +-
src/gtk-utils.c | 2 +-
src/meson.build | 120 +++++++
src/sh/Makefile.am | 5 -
src/sh/meson.build | 1 +
src/ui/Makefile.am | 20 --
54 files changed, 500 insertions(+), 1646 deletions(-)
---
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..281a5c8
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,6 @@
+*~
+.cproject
+.project
+.settings/
+build/
+po/file-roller.pot
diff --git a/README b/README
index 5d6ba47..73827fd 100644
--- a/README
+++ b/README
@@ -67,15 +67,15 @@
properly.
Also you need the following libraries:
- * glib >= 2.16.0
- * gtk+ >= 2.12.0
- * libgnome >= 2.6.0
- * libgnomeui >= 2.6.0
- * libglade >= 2.4.0
+ * glib >= 2.36
+ * gtk+ >= 3.13.2
* libnautilus-extension >= 2.22.2 (optional)
+ * libarchive >= 3.0.0 (optional)
* Install
- ./configure
- make
- make install
+ mkdir build
+ cd build
+ meson ..
+ ninja
+ ninja install
diff --git a/data/icons/scalable/apps/file-roller-symbolic.svg
b/data/icons/hicolor/scalable/apps/file-roller-symbolic.svg
similarity index 100%
rename from data/icons/scalable/apps/file-roller-symbolic.svg
rename to data/icons/hicolor/scalable/apps/file-roller-symbolic.svg
diff --git a/data/icons/meson.build b/data/icons/meson.build
new file mode 100644
index 0000000..6ce8986
--- /dev/null
+++ b/data/icons/meson.build
@@ -0,0 +1 @@
+install_subdir('hicolor', install_dir : join_paths(datadir, 'icons'))
diff --git a/data/meson.build b/data/meson.build
new file mode 100644
index 0000000..8a409a3
--- /dev/null
+++ b/data/meson.build
@@ -0,0 +1,64 @@
+po_dir = join_paths(meson.source_root(), 'po')
+
+install_data('org.gnome.FileRoller.gschema.xml',
+ install_dir : join_paths(datadir, 'glib-2.0', 'schemas')
+)
+
+install_data('packages.match',
+ install_dir : join_paths(datadir, meson.project_name())
+)
+
+# .desktop file
+
+desktop_data = configuration_data()
+desktop_data.set('VERSION', meson.project_version())
+desktop_in_file = configure_file(
+ input : 'org.gnome.FileRoller.desktop.in.in',
+ output : 'org.gnome.FileRoller.desktop.in',
+ configuration : desktop_data
+)
+
+i18n.merge_file(
+ input : desktop_in_file,
+ output : 'org.gnome.FileRoller.desktop',
+ type : 'desktop',
+ po_dir : po_dir,
+ install : true,
+ install_dir : join_paths(datadir, 'applications')
+)
+
+# .service files
+
+service_data = configuration_data()
+service_data.set('bindir', join_paths(prefix, get_option('bindir')))
+
+configure_file(
+ input : 'org.gnome.FileRoller.service.in',
+ output : 'org.gnome.FileRoller.service',
+ configuration : service_data,
+ install : true,
+ install_dir : join_paths(datadir, 'applications')
+)
+
+configure_file(
+ input : 'org.gnome.FileRoller.ArchiveManager1.service.in',
+ output : 'org.gnome.FileRoller.ArchiveManager1.service',
+ configuration : service_data,
+ install : true,
+ install_dir : join_paths(datadir, 'applications')
+)
+
+# .appdata file
+
+i18n.merge_file(
+ input : 'org.gnome.FileRoller.appdata.xml.in',
+ output : 'org.gnome.FileRoller.appdata.xml',
+ type : 'xml',
+ po_dir : po_dir,
+ install : true,
+ install_dir : join_paths(datadir, 'metainfo')
+)
+
+# Subdirectories
+
+subdir('icons')
diff --git a/data/org.gnome.FileRoller.appdata.xml.in b/data/org.gnome.FileRoller.appdata.xml.in
index b8826a4..1521469 100644
--- a/data/org.gnome.FileRoller.appdata.xml.in
+++ b/data/org.gnome.FileRoller.appdata.xml.in
@@ -6,21 +6,21 @@
<metadata_license>CC0-1.0</metadata_license>
<project_license>GPL-2.0+</project_license>
- <_name>File Roller</_name>
- <_summary>Open, modify and create compressed archive files</_summary>
+ <name>File Roller</name>
+ <summary>Open, modify and create compressed archive files</summary>
<description>
- <_p>
+ <p>
Archive Manager (also known as File Roller) is the default GNOME application for opening, creating, and
modifying archive and compressed archive files.
- </_p>
- <_p>
+ </p>
+ <p>
Archive Manager supports a wide range of different archive files, including:
- </_p>
+ </p>
<ul>
- <_li>gzip archives (.tar.gz, .tgz)</_li>
- <_li>bzip archives (.tar.bz, .tbz)</_li>
- <_li>zip archives (.zip)</_li>
- <_li>xz archives (.tar.xz)</_li>
+ <li>gzip archives (.tar.gz, .tgz)</li>
+ <li>bzip archives (.tar.bz, .tbz)</li>
+ <li>zip archives (.zip)</li>
+ <li>xz archives (.tar.xz)</li>
</ul>
</description>
diff --git a/data/org.gnome.FileRoller.desktop.in.in b/data/org.gnome.FileRoller.desktop.in.in
index ee4dcd7..91671b2 100644
--- a/data/org.gnome.FileRoller.desktop.in.in
+++ b/data/org.gnome.FileRoller.desktop.in.in
@@ -1,7 +1,7 @@
[Desktop Entry]
-_Name=Archive Manager
-_Comment=Create and modify an archive
-_Keywords=zip;tar;extract;unpack;
+Name=Archive Manager
+Comment=Create and modify an archive
+Keywords=zip;tar;extract;unpack;
TryExec=file-roller
Exec=file-roller %U
StartupNotify=true
diff --git a/help/LINGUAS b/help/LINGUAS
new file mode 100644
index 0000000..ad17e73
--- /dev/null
+++ b/help/LINGUAS
@@ -0,0 +1,22 @@
+# please keep this list sorted alphabetically
+#
+ca
+cs
+da
+de
+el
+es
+fi
+fr
+gl
+hu
+id
+ja
+ko
+pl
+pt_BR
+ru
+sl
+sv
+te
+zh_CN
diff --git a/help/meson.build b/help/meson.build
new file mode 100644
index 0000000..f2f8469
--- /dev/null
+++ b/help/meson.build
@@ -0,0 +1,23 @@
+gnome.yelp('file-roller',
+ sources : [
+ 'archive-create.page',
+ 'archive-edit.page',
+ 'archive-extract.page',
+ 'archive-extract-advanced-options.page',
+ 'archive-open.page',
+ 'archive-view.page',
+ 'index.page',
+ 'introduction.page',
+ 'legal.xml',
+ 'keyboard-shortcuts.page',
+ 'password-protection.page',
+ 'supported-formats.page',
+ 'test-integrity.page',
+ 'troubleshooting-archive-open.page',
+ 'troubleshooting-password.page'
+ ],
+ media : [
+ 'figures/file-roller-3-12.png',
+ 'figures/file-roller-icon.png'
+ ]
+)
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..526f020
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,167 @@
+project('file-roller', 'c',
+ license : 'GPL2+',
+ version : '3.27.0',
+ meson_version : '>=0.43'
+)
+
+glib_version = '>=2.36'
+gtk_version = '>=3.13.2'
+nautilus_version = '>=2.22.2'
+json_glib_version = '>=0.14.0'
+libnotify_version = '>=0.4.3'
+libarchive_version = '>=3.0.0'
+
+gnome = import('gnome')
+i18n = import('i18n')
+gettext_package = meson.project_name()
+prefix = get_option('prefix')
+datadir = join_paths(prefix, get_option('datadir'))
+privexecdir = join_paths(prefix, get_option('libexecdir'), meson.project_name())
+c_comp = meson.get_compiler('c')
+
+# Dependencies
+
+libm_dep = c_comp.find_library('m')
+thread_dep = dependency('threads')
+glib_dep = dependency('glib-2.0', version : glib_version)
+gthread_dep = dependency('gthread-2.0')
+gtk_dep = dependency('gtk+-3.0', version : gtk_version)
+
+# Optional dependencies
+
+if get_option('nautilus-actions')
+ libnautilus_extension_dep = dependency('libnautilus-extension', version : nautilus_version, required :
false)
+ build_nautilus_actions = libnautilus_extension_dep.found()
+else
+ build_nautilus_actions = false
+endif
+
+libjson_glib_dep = dependency('json-glib-1.0', version : json_glib_version, required : false)
+use_json_glib = libjson_glib_dep.found()
+
+if get_option('notification')
+ libnotify_dep = dependency('libnotify', version : libnotify_version, required : false)
+ use_libnotify = libnotify_dep.found()
+else
+ use_libnotify = false
+endif
+
+if get_option('libarchive')
+ libarchive_dep = dependency('libarchive', version : libarchive_version, required : false)
+ use_libarchive = libarchive_dep.found()
+else
+ use_libarchive = false
+endif
+
+if get_option('magic')
+ libmagic_dep = c_comp.find_library('magic')
+ if c_comp.compiles('''#include <magic.h>
+ int main () { magic_t m = magic_open(MAGIC_NONE); }''',
+ dependencies : libmagic_dep)
+ use_magic = true
+ endif
+endif
+
+have_mkdtemp = c_comp.has_function('mkdtemp')
+
+cpio_path = 'cpio'
+if get_option('cpio') == 'auto'
+ cpio = find_program('gcpio', 'cpio', required : false)
+ if cpio.found()
+ cpio_path = cpio.path()
+ endif
+endif
+
+# config.h
+
+config_data = configuration_data()
+config_data.set_quoted('GETTEXT_PACKAGE', gettext_package)
+config_data.set_quoted('LOCALEDIR', join_paths(prefix, get_option('localedir')))
+config_data.set_quoted('PACKAGE_NAME', meson.project_name())
+config_data.set_quoted('PACKAGE_VERSION', meson.project_version())
+if get_option('run-in-place')
+ config_data.set_quoted('PRIVDATADIR', join_paths(meson.source_root(), 'data'))
+ config_data.set_quoted('PRIVEXECDIR', join_paths(meson.source_root(), 'src', 'commands'))
+ config_data.set_quoted('UIDIR', join_paths(meson.source_root(), 'data', 'ui'))
+ config_data.set_quoted('SHDIR', join_paths(meson.source_root(), 'src', 'sh'))
+else
+ config_data.set_quoted('PRIVDATADIR', join_paths(datadir, meson.project_name()))
+ config_data.set_quoted('PRIVEXECDIR', privexecdir)
+ config_data.set_quoted('UIDIR', join_paths(datadir, meson.project_name(), 'ui'))
+ config_data.set_quoted('SHDIR', join_paths(prefix, get_option('libexecdir'), meson.project_name()))
+endif
+if use_json_glib
+ config_data.set('HAVE_JSON_GLIB', 1)
+endif
+if use_libnotify
+ config_data.set('ENABLE_NOTIFICATION', 1)
+endif
+if use_libarchive
+ config_data.set('ENABLE_LIBARCHIVE', 1)
+endif
+if get_option('packagekit')
+ config_data.set('ENABLE_PACKAGEKIT', 1)
+endif
+if get_option('buildtype').contains('debug')
+ config_data.set('DEBUG', 1)
+endif
+if have_mkdtemp
+ config_data.set('HAVE_MKDTEMP', 1)
+endif
+if use_magic
+ config_data.set('ENABLE_MAGIC', 1)
+endif
+config_data.set_quoted('CPIO_PATH', cpio_path)
+config_file = configure_file(output : 'config.h', configuration : config_data)
+config_inc = include_directories('.')
+
+# C args
+
+c_args = []
+if get_option('buildtype').contains('debug')
+ test_args = [
+ '-Wall',
+ '-Wcast-align',
+ '-Wtype-limits',
+ '-Wclobbered',
+ '-Wempty-body',
+ '-Wignored-qualifiers',
+ '-Wmissing-prototypes',
+ '-Wnested-externs',
+ '-Wpointer-arith',
+ '-Wno-sign-compare',
+ '-Wformat-security'
+ ]
+else
+ c_args += [ '-Wno-deprecated-declarations' ]
+ test_args = [ '-Wall' ]
+endif
+c_args += c_comp.get_supported_arguments(test_args)
+
+# Subdirectories
+
+subdir('data')
+subdir('help')
+if build_nautilus_actions
+ subdir('nautilus')
+endif
+subdir('po')
+subdir('src')
+
+# Summary
+
+summary = [
+ 'configuration summary:',
+ '',
+ ' project: @0@ @1@'.format(meson.project_name(), meson.project_version()),
+ ' prefix: @0@'.format(prefix),
+ ' nautilus actions: @0@'.format(build_nautilus_actions),
+ ' notifications: @0@'.format(use_libnotify),
+ ' packagekit: @0@'.format(get_option('packagekit')),
+ ' libarchive: @0@'.format(use_libarchive),
+ ' magic: @0@'.format(use_magic),
+ ' have mkdtemp: @0@'.format(have_mkdtemp),
+ ' cpio: @0@'.format(cpio_path),
+ ''
+]
+message('\n'.join(summary))
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 0000000..52c6e36
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,41 @@
+option('run-in-place',
+ type : 'boolean',
+ value : false,
+ description : 'Load ui data from the source tree'
+)
+
+option('nautilus-actions',
+ type : 'boolean',
+ value : true,
+ description : 'Build the nautilus context menu actions'
+)
+
+option('notification',
+ type : 'boolean',
+ value : true,
+ description : 'Enable operation completion notification'
+)
+
+option('packagekit',
+ type : 'boolean',
+ value : true,
+ description : 'Build PackageKit installer for missing utilities'
+)
+
+option('libarchive',
+ type : 'boolean',
+ value : true,
+ description : 'Enable code that requires libarchive'
+)
+
+option('magic',
+ type : 'boolean',
+ value : true,
+ description : 'Use libmagic to detect file type'
+)
+
+option('cpio',
+ type : 'string',
+ value : 'auto',
+ description : 'Path to the cpio program'
+)
diff --git a/nautilus/meson.build b/nautilus/meson.build
new file mode 100644
index 0000000..c0f6ef3
--- /dev/null
+++ b/nautilus/meson.build
@@ -0,0 +1,20 @@
+shared_module('nautilus-fileroller',
+ sources : [
+ 'nautilus-fileroller.c',
+ 'fileroller-module.c'
+ ],
+ dependencies : [
+ libm_dep,
+ thread_dep,
+ glib_dep,
+ gthread_dep,
+ gtk_dep,
+ libnautilus_extension_dep,
+ libjson_glib_dep,
+ libnotify_dep
+ ],
+ include_directories : config_inc,
+ c_args : c_args,
+ install : true,
+ install_dir : libnautilus_extension_dep.get_pkgconfig_variable('extensiondir')
+)
diff --git a/po/meson.build b/po/meson.build
new file mode 100644
index 0000000..5159141
--- /dev/null
+++ b/po/meson.build
@@ -0,0 +1 @@
+i18n.gettext(gettext_package, preset : 'glib')
diff --git a/src/commands/meson.build b/src/commands/meson.build
new file mode 100644
index 0000000..6b6d3ea
--- /dev/null
+++ b/src/commands/meson.build
@@ -0,0 +1,10 @@
+executable('rpm2cpio', 'rpm2cpio.c',
+ dependencies : [
+ libm_dep,
+ glib_dep
+ ],
+ include_directories : config_inc,
+ c_args : c_args,
+ install : true,
+ install_dir : privexecdir
+)
diff --git a/src/fr-application-menu.c b/src/fr-application-menu.c
index 2b773cc..fba1950 100644
--- a/src/fr-application-menu.c
+++ b/src/fr-application-menu.c
@@ -126,7 +126,7 @@ fr_application_activate_about (GSimpleAction *action,
const char *documenters [] = { "Alexander Kirillov", "Breda McColgan", NULL };
gtk_show_about_dialog (GTK_WINDOW (_gtk_application_get_current_window (G_APPLICATION (user_data))),
- "version", VERSION,
+ "version", PACKAGE_VERSION,
"copyright", _("Copyright \xc2\xa9 2001–2014 Free Software Foundation, Inc."),
"comments", _("An archive manager for GNOME."),
"authors", authors,
diff --git a/src/fr-init.c b/src/fr-init.c
index 4e25467..efb2148 100644
--- a/src/fr-init.c
+++ b/src/fr-init.c
@@ -638,7 +638,7 @@ initialize_data (void)
NULL);
gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (),
- PKG_DATA_DIR G_DIR_SEPARATOR_S "icons");
+ PRIVDATADIR G_DIR_SEPARATOR_S "icons");
migrate_options_directory ();
register_archives ();
diff --git a/src/gtk-utils.c b/src/gtk-utils.c
index 3bce41c..d4d78c0 100644
--- a/src/gtk-utils.c
+++ b/src/gtk-utils.c
@@ -534,7 +534,7 @@ _gtk_builder_new_from_file (const char *ui_file)
GtkBuilder *builder;
GError *error = NULL;
- filename = g_build_filename (UI_DIR, ui_file, NULL);
+ filename = g_build_filename (UIDIR, ui_file, NULL);
builder = gtk_builder_new ();
if (! gtk_builder_add_from_file (builder, filename, &error)) {
g_warning ("%s\n", error->message);
diff --git a/src/meson.build b/src/meson.build
new file mode 100644
index 0000000..8e12e1d
--- /dev/null
+++ b/src/meson.build
@@ -0,0 +1,120 @@
+# Sources
+
+source_files = files(
+ 'dlg-add.c',
+ 'dlg-ask-password.c',
+ 'dlg-batch-add.c',
+ 'dlg-delete.c',
+ 'dlg-extract.c',
+ 'dlg-open-with.c',
+ 'dlg-package-installer.c',
+ 'dlg-password.c',
+ 'dlg-prop.c',
+ 'dlg-update.c',
+ 'eggtreemultidnd.c',
+ 'file-data.c',
+ 'file-utils.c',
+ 'fr-application.c',
+ 'fr-application-menu.c',
+ 'fr-archive.c',
+ 'fr-command-7z.c',
+ 'fr-command-ace.c',
+ 'fr-command-alz.c',
+ 'fr-command-ar.c',
+ 'fr-command-arj.c',
+ 'fr-command.c',
+ 'fr-command-cfile.c',
+ 'fr-command-cpio.c',
+ 'fr-command-dpkg.c',
+ 'fr-command-iso.c',
+ 'fr-command-jar.c',
+ 'fr-command-lha.c',
+ 'fr-command-lrzip.c',
+ 'fr-command-rar.c',
+ 'fr-command-rpm.c',
+ 'fr-command-tar.c',
+ 'fr-command-unsquashfs.c',
+ 'fr-command-unstuff.c',
+ 'fr-command-zip.c',
+ 'fr-command-zoo.c',
+ 'fr-error.c',
+ 'fr-file-selector-dialog.c',
+ 'fr-init.c',
+ 'fr-list-model.c',
+ 'fr-location-bar.c',
+ 'fr-new-archive-dialog.c',
+ 'fr-process.c',
+ 'fr-window-actions-callbacks.c',
+ 'fr-window.c',
+ 'gio-utils.c',
+ 'glib-utils.c',
+ 'gth-icon-cache.c',
+ 'gtk-utils.c',
+ 'java-utils.c',
+ 'main.c',
+ 'open-file.c',
+ 'preferences.c',
+ 'rar-utils.c'
+)
+if libjson_glib_dep.found()
+ source_files += [ 'fr-command-unarchiver.c' ]
+endif
+if use_libarchive
+ source_files += [ 'fr-archive-libarchive.c' ]
+endif
+if not have_mkdtemp
+ source_files += [ 'mkdtemp.c' ]
+endif
+
+gresource_files = gnome.compile_resources('fr-resources', 'file-roller.gresource.xml', c_name : 'fr')
+
+marshal_files = gnome.genmarshal('fr-marshal', prefix : 'fr_marshal', sources : 'fr-marshal.list' )
+
+enum_files = gnome.mkenums_simple('fr-enum-types',
+ sources: [ 'typedefs.h' ]
+)
+
+# Build targets
+
+executable('file-roller',
+ sources : [
+ config_file,
+ source_files,
+ gresource_files,
+ marshal_files,
+ enum_files
+ ],
+ dependencies : [
+ libm_dep,
+ thread_dep,
+ glib_dep,
+ gthread_dep,
+ gtk_dep,
+ libjson_glib_dep,
+ libnotify_dep,
+ libarchive_dep,
+ libmagic_dep
+ ],
+ include_directories : config_inc,
+ c_args : c_args,
+ install : true
+)
+
+executable('test-server', 'test-server.c',
+ dependencies : [
+ libm_dep,
+ thread_dep,
+ glib_dep,
+ gthread_dep,
+ gtk_dep,
+ libjson_glib_dep
+ ],
+ include_directories : config_inc,
+ c_args : c_args,
+ install : false
+)
+
+# Subdirectories
+
+subdir('commands')
+subdir('sh')
diff --git a/src/sh/meson.build b/src/sh/meson.build
new file mode 100644
index 0000000..5c7c45d
--- /dev/null
+++ b/src/sh/meson.build
@@ -0,0 +1 @@
+install_data('isoinfo.sh', install_dir : privexecdir)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]