aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHorea Christian <chr@chymera.eu>2020-10-09 06:40:53 -0400
committerHorea Christian <chr@chymera.eu>2020-10-09 06:40:53 -0400
commitb414dcb4aeff8ee5d9e81560b4090dc185e72000 (patch)
treecd1fe4834d23ea229230398f0ff28d87816afb60 /patches
parentsci-libs/itk: eclass and RESTRICT updates (diff)
downloadsci-b414dcb4aeff8ee5d9e81560b4090dc185e72000.tar.gz
sci-b414dcb4aeff8ee5d9e81560b4090dc185e72000.tar.bz2
sci-b414dcb4aeff8ee5d9e81560b4090dc185e72000.zip
patchers: removed patches directory for packages distributed by ::gentoo
Signed-off-by: Horea Christian <chr@chymera.eu>
Diffstat (limited to 'patches')
-rw-r--r--patches/0002-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch2082
-rw-r--r--patches/07_doxygen.patch1804
2 files changed, 0 insertions, 3886 deletions
diff --git a/patches/0002-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch b/patches/0002-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
deleted file mode 100644
index 813446c38..000000000
--- a/patches/0002-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
+++ /dev/null
@@ -1,2082 +0,0 @@
-From 9071634fd9db37a6121fdfbd817162f782661202 Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Mon, 5 May 2014 10:02:21 -0400
-Subject: [PATCH 2/3] LU-3319 procfs: move mdd/ofd proc handling to seq_files
-
-With 3.10 linux kernel and above proc handling now only
-uses struct seq_files. This patch migrates the mdd/ofd
-layer proc entries over to using seq_files.
-
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: I61b7df6bfd5efd0f12e3ca1a1813b7b62d493168
----
- lustre/include/lustre_lfsck.h | 6 +-
- lustre/lfsck/lfsck_internal.h | 9 +-
- lustre/lfsck/lfsck_layout.c | 132 ++++-------
- lustre/lfsck/lfsck_lib.c | 88 +++-----
- lustre/lfsck/lfsck_namespace.c | 75 ++-----
- lustre/mdd/mdd_device.c | 25 +--
- lustre/mdd/mdd_internal.h | 1 -
- lustre/mdd/mdd_lproc.c | 302 ++++++++++++-------------
- lustre/ofd/lproc_ofd.c | 490 +++++++++++++++++++++--------------------
- lustre/ofd/ofd_dev.c | 90 ++++----
- lustre/ofd/ofd_internal.h | 6 +-
- 11 files changed, 543 insertions(+), 681 deletions(-)
-
-diff --git a/lustre/include/lustre_lfsck.h b/lustre/include/lustre_lfsck.h
-index 0d6f666..5adbffe 100644
---- a/lustre/include/lustre_lfsck.h
-+++ b/lustre/include/lustre_lfsck.h
-@@ -148,12 +148,12 @@ int lfsck_in_notify(const struct lu_env *env, struct dt_device *key,
- int lfsck_query(const struct lu_env *env, struct dt_device *key,
- struct lfsck_request *lr);
-
--int lfsck_get_speed(struct dt_device *key, void *buf, int len);
-+int lfsck_get_speed(struct seq_file *m, struct dt_device *key);
- int lfsck_set_speed(struct dt_device *key, int val);
--int lfsck_get_windows(struct dt_device *key, void *buf, int len);
-+int lfsck_get_windows(struct seq_file *m, struct dt_device *key);
- int lfsck_set_windows(struct dt_device *key, int val);
-
--int lfsck_dump(struct dt_device *key, void *buf, int len, enum lfsck_type type);
-+int lfsck_dump(struct seq_file *m, struct dt_device *key, enum lfsck_type type);
-
- static inline void lfsck_pack_rfa(struct lfsck_request *lr,
- const struct lu_fid *fid)
-diff --git a/lustre/lfsck/lfsck_internal.h b/lustre/lfsck/lfsck_internal.h
-index 24b84ae..203ad74 100644
---- a/lustre/lfsck/lfsck_internal.h
-+++ b/lustre/lfsck/lfsck_internal.h
-@@ -303,8 +303,7 @@ struct lfsck_operations {
-
- int (*lfsck_dump)(const struct lu_env *env,
- struct lfsck_component *com,
-- char *buf,
-- int len);
-+ struct seq_file *m);
-
- int (*lfsck_double_scan)(const struct lu_env *env,
- struct lfsck_component *com);
-@@ -590,10 +589,10 @@ void lfsck_component_cleanup(const struct lu_env *env,
- struct lfsck_component *com);
- void lfsck_instance_cleanup(const struct lu_env *env,
- struct lfsck_instance *lfsck);
--int lfsck_bits_dump(char **buf, int *len, int bits, const char *names[],
-+int lfsck_bits_dump(struct seq_file *m, int bits, const char *names[],
- const char *prefix);
--int lfsck_time_dump(char **buf, int *len, __u64 time, const char *prefix);
--int lfsck_pos_dump(char **buf, int *len, struct lfsck_position *pos,
-+int lfsck_time_dump(struct seq_file *m, __u64 time, const char *prefix);
-+int lfsck_pos_dump(struct seq_file *m, struct lfsck_position *pos,
- const char *prefix);
- void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
- struct lfsck_position *pos, bool init);
-diff --git a/lustre/lfsck/lfsck_layout.c b/lustre/lfsck/lfsck_layout.c
-index ced2e4d..e2df62d 100644
---- a/lustre/lfsck/lfsck_layout.c
-+++ b/lustre/lfsck/lfsck_layout.c
-@@ -492,7 +492,7 @@ static struct lfsck_rbtree_node *lfsck_rbtree_new(const struct lu_env *env,
- return ERR_PTR(-ENOMEM);
- }
-
-- rb_init_node(&lrn->lrn_node);
-+ RB_CLEAR_NODE(&lrn->lrn_node);
- lrn->lrn_seq = fid_seq(fid);
- lrn->lrn_first_oid = fid_oid(fid) & ~LFSCK_RBTREE_BITMAP_MASK;
- atomic_set(&lrn->lrn_known_count, 0);
-@@ -4873,69 +4873,53 @@ static int lfsck_layout_slave_post(const struct lu_env *env,
- }
-
- static int lfsck_layout_dump(const struct lu_env *env,
-- struct lfsck_component *com, char *buf, int len)
-+ struct lfsck_component *com, struct seq_file *m)
- {
- struct lfsck_instance *lfsck = com->lc_lfsck;
- struct lfsck_bookmark *bk = &lfsck->li_bookmark_ram;
- struct lfsck_layout *lo = com->lc_file_ram;
-- int save = len;
-- int ret = -ENOSPC;
- int rc;
-
- down_read(&com->lc_sem);
-- rc = snprintf(buf, len,
-- "name: lfsck_layout\n"
-+ seq_printf(m, "name: lfsck_layout\n"
- "magic: %#x\n"
- "version: %d\n"
- "status: %s\n",
- lo->ll_magic,
- bk->lb_version,
- lfsck_status2names(lo->ll_status));
-- if (rc <= 0)
-- goto out;
-
-- buf += rc;
-- len -= rc;
-- rc = lfsck_bits_dump(&buf, &len, lo->ll_flags, lfsck_flags_names,
-- "flags");
-+ rc = lfsck_bits_dump(m, lo->ll_flags, lfsck_flags_names, "flags");
- if (rc < 0)
- goto out;
-
-- rc = lfsck_bits_dump(&buf, &len, bk->lb_param, lfsck_param_names,
-- "param");
-+ rc = lfsck_bits_dump(m, bk->lb_param, lfsck_param_names, "param");
- if (rc < 0)
- goto out;
-
-- rc = lfsck_time_dump(&buf, &len, lo->ll_time_last_complete,
-+ rc = lfsck_time_dump(m, lo->ll_time_last_complete,
- "time_since_last_completed");
- if (rc < 0)
- goto out;
-
-- rc = lfsck_time_dump(&buf, &len, lo->ll_time_latest_start,
-+ rc = lfsck_time_dump(m, lo->ll_time_latest_start,
- "time_since_latest_start");
- if (rc < 0)
- goto out;
-
-- rc = lfsck_time_dump(&buf, &len, lo->ll_time_last_checkpoint,
-+ rc = lfsck_time_dump(m, lo->ll_time_last_checkpoint,
- "time_since_last_checkpoint");
- if (rc < 0)
- goto out;
-
-- rc = snprintf(buf, len,
-- "latest_start_position: "LPU64"\n"
-+ seq_printf(m, "latest_start_position: "LPU64"\n"
- "last_checkpoint_position: "LPU64"\n"
- "first_failure_position: "LPU64"\n",
- lo->ll_pos_latest_start,
- lo->ll_pos_last_checkpoint,
- lo->ll_pos_first_inconsistent);
-- if (rc <= 0)
-- goto out;
-
-- buf += rc;
-- len -= rc;
--
-- rc = snprintf(buf, len,
-- "success_count: %u\n"
-+ seq_printf(m, "success_count: %u\n"
- "repaired_dangling: "LPU64"\n"
- "repaired_unmatched_pair: "LPU64"\n"
- "repaired_multiple_referenced: "LPU64"\n"
-@@ -4955,11 +4939,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
- lo->ll_objs_skipped,
- lo->ll_objs_failed_phase1,
- lo->ll_objs_failed_phase2);
-- if (rc <= 0)
-- goto out;
--
-- buf += rc;
-- len -= rc;
-
- if (lo->ll_status == LS_SCANNING_PHASE1) {
- __u64 pos;
-@@ -4977,8 +4956,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
- do_div(new_checked, duration);
- if (rtime != 0)
- do_div(speed, rtime);
-- rc = snprintf(buf, len,
-- "checked_phase1: "LPU64"\n"
-+ seq_printf(m, "checked_phase1: "LPU64"\n"
- "checked_phase2: "LPU64"\n"
- "run_time_phase1: %u seconds\n"
- "run_time_phase2: %u seconds\n"
-@@ -4992,11 +4970,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
- lo->ll_run_time_phase2,
- speed,
- new_checked);
-- if (rc <= 0)
-- goto out;
--
-- buf += rc;
-- len -= rc;
-
- LASSERT(lfsck->li_di_oit != NULL);
-
-@@ -5009,12 +4982,8 @@ static int lfsck_layout_dump(const struct lu_env *env,
- pos = iops->store(env, lfsck->li_di_oit);
- if (!lfsck->li_current_oit_processed)
- pos--;
-- rc = snprintf(buf, len, "current_position: "LPU64"\n", pos);
-- if (rc <= 0)
-- goto out;
-+ seq_printf(m, "current_position: "LPU64"\n", pos);
-
-- buf += rc;
-- len -= rc;
- } else if (lo->ll_status == LS_SCANNING_PHASE2) {
- cfs_duration_t duration = cfs_time_current() -
- lfsck->li_time_last_checkpoint;
-@@ -5032,29 +5001,26 @@ static int lfsck_layout_dump(const struct lu_env *env,
- do_div(speed1, lo->ll_run_time_phase1);
- if (rtime != 0)
- do_div(speed2, rtime);
-- rc = snprintf(buf, len,
-- "checked_phase1: "LPU64"\n"
-- "checked_phase2: "LPU64"\n"
-- "run_time_phase1: %u seconds\n"
-- "run_time_phase2: %u seconds\n"
-- "average_speed_phase1: "LPU64" items/sec\n"
-- "average_speed_phase2: "LPU64" items/sec\n"
-- "real-time_speed_phase1: N/A\n"
-- "real-time_speed_phase2: "LPU64" items/sec\n"
-- "current_position: "DFID"\n",
-- lo->ll_objs_checked_phase1,
-- checked,
-- lo->ll_run_time_phase1,
-- rtime,
-- speed1,
-- speed2,
-- new_checked,
-- PFID(&com->lc_fid_latest_scanned_phase2));
-+ rc = seq_printf(m, "checked_phase1: "LPU64"\n"
-+ "checked_phase2: "LPU64"\n"
-+ "run_time_phase1: %u seconds\n"
-+ "run_time_phase2: %u seconds\n"
-+ "average_speed_phase1: "LPU64" items/sec\n"
-+ "average_speed_phase2: "LPU64" items/sec\n"
-+ "real-time_speed_phase1: N/A\n"
-+ "real-time_speed_phase2: "LPU64" items/sec\n"
-+ "current_position: "DFID"\n",
-+ lo->ll_objs_checked_phase1,
-+ checked,
-+ lo->ll_run_time_phase1,
-+ rtime,
-+ speed1,
-+ speed2,
-+ new_checked,
-+ PFID(&com->lc_fid_latest_scanned_phase2));
- if (rc <= 0)
- goto out;
-
-- buf += rc;
-- len -= rc;
- } else {
- __u64 speed1 = lo->ll_objs_checked_phase1;
- __u64 speed2 = lo->ll_objs_checked_phase2;
-@@ -5063,34 +5029,26 @@ static int lfsck_layout_dump(const struct lu_env *env,
- do_div(speed1, lo->ll_run_time_phase1);
- if (lo->ll_run_time_phase2 != 0)
- do_div(speed2, lo->ll_run_time_phase2);
-- rc = snprintf(buf, len,
-- "checked_phase1: "LPU64"\n"
-- "checked_phase2: "LPU64"\n"
-- "run_time_phase1: %u seconds\n"
-- "run_time_phase2: %u seconds\n"
-- "average_speed_phase1: "LPU64" items/sec\n"
-- "average_speed_phase2: "LPU64" objs/sec\n"
-- "real-time_speed_phase1: N/A\n"
-- "real-time_speed_phase2: N/A\n"
-- "current_position: N/A\n",
-- lo->ll_objs_checked_phase1,
-- lo->ll_objs_checked_phase2,
-- lo->ll_run_time_phase1,
-- lo->ll_run_time_phase2,
-- speed1,
-- speed2);
-- if (rc <= 0)
-- goto out;
--
-- buf += rc;
-- len -= rc;
-+ seq_printf(m, "checked_phase1: "LPU64"\n"
-+ "checked_phase2: "LPU64"\n"
-+ "run_time_phase1: %u seconds\n"
-+ "run_time_phase2: %u seconds\n"
-+ "average_speed_phase1: "LPU64" items/sec\n"
-+ "average_speed_phase2: "LPU64" objs/sec\n"
-+ "real-time_speed_phase1: N/A\n"
-+ "real-time_speed_phase2: N/A\n"
-+ "current_position: N/A\n",
-+ lo->ll_objs_checked_phase1,
-+ lo->ll_objs_checked_phase2,
-+ lo->ll_run_time_phase1,
-+ lo->ll_run_time_phase2,
-+ speed1,
-+ speed2);
- }
-- ret = save - len;
--
- out:
- up_read(&com->lc_sem);
-
-- return ret;
-+ return rc;
- }
-
- static int lfsck_layout_master_double_scan(const struct lu_env *env,
-diff --git a/lustre/lfsck/lfsck_lib.c b/lustre/lfsck/lfsck_lib.c
-index db73616..f6f1cce 100644
---- a/lustre/lfsck/lfsck_lib.c
-+++ b/lustre/lfsck/lfsck_lib.c
-@@ -900,21 +900,15 @@ static inline int lfsck_instance_add(struct lfsck_instance *lfsck)
- return 0;
- }
-
--int lfsck_bits_dump(char **buf, int *len, int bits, const char *names[],
-+int lfsck_bits_dump(struct seq_file *m, int bits, const char *names[],
- const char *prefix)
- {
-- int save = *len;
- int flag;
-- int rc;
- int i;
- bool newline = (bits != 0 ? false : true);
-
-- rc = snprintf(*buf, *len, "%s:%c", prefix, newline ? '\n' : ' ');
-- if (rc <= 0)
-- return -ENOSPC;
-+ seq_printf(m, "%s:%c", prefix, bits != 0 ? ' ' : '\n');
-
-- *buf += rc;
-- *len -= rc;
- for (i = 0, flag = 1; bits != 0; i++, flag = 1 << i) {
- if (flag & bits) {
- bits &= ~flag;
-@@ -922,69 +916,43 @@ int lfsck_bits_dump(char **buf, int *len, int bits, const char *names[],
- if (bits == 0)
- newline = true;
-
-- rc = snprintf(*buf, *len, "%s%c", names[i],
-- newline ? '\n' : ',');
-- if (rc <= 0)
-- return -ENOSPC;
--
-- *buf += rc;
-- *len -= rc;
-+ seq_printf(m, "%s%c", names[i],
-+ newline ? '\n' : ',');
- }
- }
- }
-
-- if (!newline) {
-- rc = snprintf(*buf, *len, "\n");
-- if (rc <= 0)
-- return -ENOSPC;
--
-- *buf += rc;
-- *len -= rc;
-- }
--
-- return save - *len;
-+ if (!newline)
-+ seq_printf(m, "\n");
-+ return 0;
- }
-
--int lfsck_time_dump(char **buf, int *len, __u64 time, const char *prefix)
-+int lfsck_time_dump(struct seq_file *m, __u64 time, const char *prefix)
- {
-- int rc;
--
- if (time != 0)
-- rc = snprintf(*buf, *len, "%s: "LPU64" seconds\n", prefix,
-- cfs_time_current_sec() - time);
-+ seq_printf(m, "%s: "LPU64" seconds\n", prefix,
-+ cfs_time_current_sec() - time);
- else
-- rc = snprintf(*buf, *len, "%s: N/A\n", prefix);
-- if (rc <= 0)
-- return -ENOSPC;
--
-- *buf += rc;
-- *len -= rc;
-- return rc;
-+ seq_printf(m, "%s: N/A\n", prefix);
-+ return 0;
- }
-
--int lfsck_pos_dump(char **buf, int *len, struct lfsck_position *pos,
-+int lfsck_pos_dump(struct seq_file *m, struct lfsck_position *pos,
- const char *prefix)
- {
-- int rc;
--
- if (fid_is_zero(&pos->lp_dir_parent)) {
- if (pos->lp_oit_cookie == 0)
-- rc = snprintf(*buf, *len, "%s: N/A, N/A, N/A\n",
-- prefix);
-+ seq_printf(m, "%s: N/A, N/A, N/A\n",
-+ prefix);
- else
-- rc = snprintf(*buf, *len, "%s: "LPU64", N/A, N/A\n",
-- prefix, pos->lp_oit_cookie);
-+ seq_printf(m, "%s: "LPU64", N/A, N/A\n",
-+ prefix, pos->lp_oit_cookie);
- } else {
-- rc = snprintf(*buf, *len, "%s: "LPU64", "DFID", "LPU64"\n",
-- prefix, pos->lp_oit_cookie,
-- PFID(&pos->lp_dir_parent), pos->lp_dir_cookie);
-+ seq_printf(m, "%s: "LPU64", "DFID", "LPU64"\n",
-+ prefix, pos->lp_oit_cookie,
-+ PFID(&pos->lp_dir_parent), pos->lp_dir_cookie);
- }
-- if (rc <= 0)
-- return -ENOSPC;
--
-- *buf += rc;
-- *len -= rc;
-- return rc;
-+ return 0;
- }
-
- void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
-@@ -1670,7 +1638,7 @@ int lfsck_async_request(const struct lu_env *env, struct obd_export *exp,
-
- /* external interfaces */
-
--int lfsck_get_speed(struct dt_device *key, void *buf, int len)
-+int lfsck_get_speed(struct seq_file *m, struct dt_device *key)
- {
- struct lu_env env;
- struct lfsck_instance *lfsck;
-@@ -1683,8 +1651,7 @@ int lfsck_get_speed(struct dt_device *key, void *buf, int len)
-
- lfsck = lfsck_instance_find(key, true, false);
- if (likely(lfsck != NULL)) {
-- rc = snprintf(buf, len, "%u\n",
-- lfsck->li_bookmark_ram.lb_speed_limit);
-+ seq_printf(m, "%u\n", lfsck->li_bookmark_ram.lb_speed_limit);
- lfsck_instance_put(&env, lfsck);
- } else {
- rc = -ENXIO;
-@@ -1724,7 +1691,7 @@ int lfsck_set_speed(struct dt_device *key, int val)
- }
- EXPORT_SYMBOL(lfsck_set_speed);
-
--int lfsck_get_windows(struct dt_device *key, void *buf, int len)
-+int lfsck_get_windows(struct seq_file *m, struct dt_device *key)
- {
- struct lu_env env;
- struct lfsck_instance *lfsck;
-@@ -1737,8 +1704,7 @@ int lfsck_get_windows(struct dt_device *key, void *buf, int len)
-
- lfsck = lfsck_instance_find(key, true, false);
- if (likely(lfsck != NULL)) {
-- rc = snprintf(buf, len, "%u\n",
-- lfsck->li_bookmark_ram.lb_async_windows);
-+ seq_printf(m, "%u\n", lfsck->li_bookmark_ram.lb_async_windows);
- lfsck_instance_put(&env, lfsck);
- } else {
- rc = -ENXIO;
-@@ -1788,7 +1754,7 @@ int lfsck_set_windows(struct dt_device *key, int val)
- }
- EXPORT_SYMBOL(lfsck_set_windows);
-
--int lfsck_dump(struct dt_device *key, void *buf, int len, enum lfsck_type type)
-+int lfsck_dump(struct seq_file *m, struct dt_device *key, enum lfsck_type type)
- {
- struct lu_env env;
- struct lfsck_instance *lfsck;
-@@ -1804,7 +1770,7 @@ int lfsck_dump(struct dt_device *key, void *buf, int len, enum lfsck_type type)
- if (likely(lfsck != NULL)) {
- com = lfsck_component_find(lfsck, type);
- if (likely(com != NULL)) {
-- rc = com->lc_ops->lfsck_dump(&env, com, buf, len);
-+ rc = com->lc_ops->lfsck_dump(&env, com, m);
- lfsck_component_put(&env, com);
- } else {
- rc = -ENOTSUPP;
-diff --git a/lustre/lfsck/lfsck_namespace.c b/lustre/lfsck/lfsck_namespace.c
-index 4dccb70..fc9a0dc 100644
---- a/lustre/lfsck/lfsck_namespace.c
-+++ b/lustre/lfsck/lfsck_namespace.c
-@@ -1099,65 +1099,56 @@ static int lfsck_namespace_post(const struct lu_env *env,
-
- static int
- lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
-- char *buf, int len)
-+ struct seq_file *m)
- {
- struct lfsck_instance *lfsck = com->lc_lfsck;
- struct lfsck_bookmark *bk = &lfsck->li_bookmark_ram;
- struct lfsck_namespace *ns = com->lc_file_ram;
-- int save = len;
-- int ret = -ENOSPC;
- int rc;
-
- down_read(&com->lc_sem);
-- rc = snprintf(buf, len,
-- "name: lfsck_namespace\n"
-- "magic: %#x\n"
-- "version: %d\n"
-- "status: %s\n",
-- ns->ln_magic,
-- bk->lb_version,
-- lfsck_status2names(ns->ln_status));
-- if (rc <= 0)
-- goto out;
--
-- buf += rc;
-- len -= rc;
-- rc = lfsck_bits_dump(&buf, &len, ns->ln_flags, lfsck_flags_names,
-- "flags");
-+ seq_printf(m, "name: lfsck_namespace\n"
-+ "magic: %#x\n"
-+ "version: %d\n"
-+ "status: %s\n",
-+ ns->ln_magic,
-+ bk->lb_version,
-+ lfsck_status2names(ns->ln_status));
-+
-+ rc = lfsck_bits_dump(m, ns->ln_flags, lfsck_flags_names, "flags");
- if (rc < 0)
- goto out;
-
-- rc = lfsck_bits_dump(&buf, &len, bk->lb_param, lfsck_param_names,
-- "param");
-+ rc = lfsck_bits_dump(m, bk->lb_param, lfsck_param_names, "param");
- if (rc < 0)
- goto out;
-
-- rc = lfsck_time_dump(&buf, &len, ns->ln_time_last_complete,
-+ rc = lfsck_time_dump(m, ns->ln_time_last_complete,
- "time_since_last_completed");
- if (rc < 0)
- goto out;
-
-- rc = lfsck_time_dump(&buf, &len, ns->ln_time_latest_start,
-+ rc = lfsck_time_dump(m, ns->ln_time_latest_start,
- "time_since_latest_start");
- if (rc < 0)
- goto out;
-
-- rc = lfsck_time_dump(&buf, &len, ns->ln_time_last_checkpoint,
-+ rc = lfsck_time_dump(m, ns->ln_time_last_checkpoint,
- "time_since_last_checkpoint");
- if (rc < 0)
- goto out;
-
-- rc = lfsck_pos_dump(&buf, &len, &ns->ln_pos_latest_start,
-+ rc = lfsck_pos_dump(m, &ns->ln_pos_latest_start,
- "latest_start_position");
- if (rc < 0)
- goto out;
-
-- rc = lfsck_pos_dump(&buf, &len, &ns->ln_pos_last_checkpoint,
-+ rc = lfsck_pos_dump(m, &ns->ln_pos_last_checkpoint,
- "last_checkpoint_position");
- if (rc < 0)
- goto out;
-
-- rc = lfsck_pos_dump(&buf, &len, &ns->ln_pos_first_inconsistent,
-+ rc = lfsck_pos_dump(m, &ns->ln_pos_first_inconsistent,
- "first_failure_position");
- if (rc < 0)
- goto out;
-@@ -1177,8 +1168,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
- do_div(new_checked, duration);
- if (rtime != 0)
- do_div(speed, rtime);
-- rc = snprintf(buf, len,
-- "checked_phase1: "LPU64"\n"
-+ seq_printf(m, "checked_phase1: "LPU64"\n"
- "checked_phase2: "LPU64"\n"
- "updated_phase1: "LPU64"\n"
- "updated_phase2: "LPU64"\n"
-@@ -1214,11 +1204,6 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
- ns->ln_run_time_phase2,
- speed,
- new_checked);
-- if (rc <= 0)
-- goto out;
--
-- buf += rc;
-- len -= rc;
-
- LASSERT(lfsck->li_di_oit != NULL);
-
-@@ -1247,9 +1232,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
- pos.lp_dir_cookie = 0;
- }
- spin_unlock(&lfsck->li_lock);
-- rc = lfsck_pos_dump(&buf, &len, &pos, "current_position");
-- if (rc <= 0)
-- goto out;
-+ lfsck_pos_dump(m, &pos, "current_position");
- } else if (ns->ln_status == LS_SCANNING_PHASE2) {
- cfs_duration_t duration = cfs_time_current() -
- lfsck->li_time_last_checkpoint;
-@@ -1267,8 +1250,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
- do_div(speed1, ns->ln_run_time_phase1);
- if (rtime != 0)
- do_div(speed2, rtime);
-- rc = snprintf(buf, len,
-- "checked_phase1: "LPU64"\n"
-+ seq_printf(m, "checked_phase1: "LPU64"\n"
- "checked_phase2: "LPU64"\n"
- "updated_phase1: "LPU64"\n"
- "updated_phase2: "LPU64"\n"
-@@ -1307,11 +1289,6 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
- speed2,
- new_checked,
- PFID(&ns->ln_fid_latest_scanned_phase2));
-- if (rc <= 0)
-- goto out;
--
-- buf += rc;
-- len -= rc;
- } else {
- __u64 speed1 = ns->ln_items_checked;
- __u64 speed2 = ns->ln_objs_checked_phase2;
-@@ -1320,8 +1297,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
- do_div(speed1, ns->ln_run_time_phase1);
- if (ns->ln_run_time_phase2 != 0)
- do_div(speed2, ns->ln_run_time_phase2);
-- rc = snprintf(buf, len,
-- "checked_phase1: "LPU64"\n"
-+ seq_printf(m, "checked_phase1: "LPU64"\n"
- "checked_phase2: "LPU64"\n"
- "updated_phase1: "LPU64"\n"
- "updated_phase2: "LPU64"\n"
-@@ -1358,17 +1334,10 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
- ns->ln_run_time_phase2,
- speed1,
- speed2);
-- if (rc <= 0)
-- goto out;
--
-- buf += rc;
-- len -= rc;
- }
-- ret = save - len;
--
- out:
- up_read(&com->lc_sem);
-- return ret;
-+ return 0;
- }
-
- static int lfsck_namespace_double_scan_main(void *args)
-diff --git a/lustre/mdd/mdd_device.c b/lustre/mdd/mdd_device.c
-index 4f0baa4..f6deaca 100644
---- a/lustre/mdd/mdd_device.c
-+++ b/lustre/mdd/mdd_device.c
-@@ -889,16 +889,16 @@ static int mdd_process_config(const struct lu_env *env,
- ENTRY;
-
- switch (cfg->lcfg_command) {
-- case LCFG_PARAM: {
-- struct lprocfs_static_vars lvars;
--
-- lprocfs_mdd_init_vars(&lvars);
-- rc = class_process_proc_param(PARAM_MDD, lvars.obd_vars, cfg,m);
-- if (rc > 0 || rc == -ENOSYS)
-- /* we don't understand; pass it on */
-- rc = next->ld_ops->ldo_process_config(env, next, cfg);
-- break;
-- }
-+ case LCFG_PARAM: {
-+ struct obd_device *obd = mdd2obd_dev(m);
-+
-+ rc = class_process_proc_seq_param(PARAM_MDD, obd->obd_vars,
-+ cfg, m);
-+ if (rc > 0 || rc == -ENOSYS)
-+ /* we don't understand; pass it on */
-+ rc = next->ld_ops->ldo_process_config(env, next, cfg);
-+ break;
-+ }
- case LCFG_SETUP:
- rc = next->ld_ops->ldo_process_config(env, next, cfg);
- if (rc)
-@@ -1566,11 +1566,8 @@ LU_CONTEXT_KEY_DEFINE(mdd, LCT_MD_THREAD);
-
- static int __init mdd_mod_init(void)
- {
-- struct lprocfs_static_vars lvars;
- int rc;
-
-- lprocfs_mdd_init_vars(&lvars);
--
- rc = lu_kmem_init(mdd_caches);
- if (rc)
- return rc;
-@@ -1586,7 +1583,7 @@ static int __init mdd_mod_init(void)
-
- rc = class_register_type(&mdd_obd_device_ops, NULL, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
-- lvars.module_vars,
-+ NULL,
- #endif
- LUSTRE_MDD_NAME, &mdd_device_type);
- if (rc)
-diff --git a/lustre/mdd/mdd_internal.h b/lustre/mdd/mdd_internal.h
-index 4411892..37698f8 100644
---- a/lustre/mdd/mdd_internal.h
-+++ b/lustre/mdd/mdd_internal.h
-@@ -248,7 +248,6 @@ int orph_declare_index_delete(const struct lu_env *, struct mdd_object *,
- struct thandle *);
-
- /* mdd_lproc.c */
--void lprocfs_mdd_init_vars(struct lprocfs_static_vars *lvars);
- int mdd_procfs_init(struct mdd_device *mdd, const char *name);
- int mdd_procfs_fini(struct mdd_device *mdd);
-
-diff --git a/lustre/mdd/mdd_lproc.c b/lustre/mdd/mdd_lproc.c
-index de379b3..7ac4afa 100644
---- a/lustre/mdd/mdd_lproc.c
-+++ b/lustre/mdd/mdd_lproc.c
-@@ -49,56 +49,14 @@
- #include <libcfs/libcfs_string.h>
- #include "mdd_internal.h"
-
--int mdd_procfs_init(struct mdd_device *mdd, const char *name)
--{
-- struct lprocfs_static_vars lvars;
-- struct obd_type *type;
-- int rc;
-- ENTRY;
--
-- /* at the moment there is no linkage between lu_type
-- * and obd_type, so we lookup obd_type this way */
-- type = class_search_type(LUSTRE_MDD_NAME);
--
-- LASSERT(name != NULL);
-- LASSERT(type != NULL);
--
-- /* Find the type procroot and add the proc entry for this device */
-- lprocfs_mdd_init_vars(&lvars);
-- mdd->mdd_proc_entry = lprocfs_register(name, type->typ_procroot,
-- lvars.obd_vars, mdd);
-- if (IS_ERR(mdd->mdd_proc_entry)) {
-- rc = PTR_ERR(mdd->mdd_proc_entry);
-- CERROR("Error %d setting up lprocfs for %s\n",
-- rc, name);
-- mdd->mdd_proc_entry = NULL;
-- GOTO(out, rc);
-- }
--
-- rc = 0;
--
-- EXIT;
--out:
-- if (rc)
-- mdd_procfs_fini(mdd);
-- return rc;
--}
--
--int mdd_procfs_fini(struct mdd_device *mdd)
--{
-- if (mdd->mdd_proc_entry) {
-- lprocfs_remove(&mdd->mdd_proc_entry);
-- mdd->mdd_proc_entry = NULL;
-- }
-- RETURN(0);
--}
--
--static int lprocfs_wr_atime_diff(struct file *file, const char *buffer,
-- unsigned long count, void *data)
-+static ssize_t
-+mdd_atime_diff_seq_write(struct file *file, const char *buffer,
-+ size_t count, loff_t *off)
- {
-- struct mdd_device *mdd = data;
-- char kernbuf[20], *end;
-- unsigned long diff = 0;
-+ struct seq_file *m = file->private_data;
-+ struct mdd_device *mdd = m->private;
-+ char kernbuf[20], *end;
-+ unsigned long diff = 0;
-
- if (count > (sizeof(kernbuf) - 1))
- return -EINVAL;
-@@ -116,37 +74,35 @@ static int lprocfs_wr_atime_diff(struct file *file, const char *buffer,
- return count;
- }
-
--static int lprocfs_rd_atime_diff(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int mdd_atime_diff_seq_show(struct seq_file *m, void *data)
- {
-- struct mdd_device *mdd = data;
-+ struct mdd_device *mdd = m->private;
-
-- *eof = 1;
-- return snprintf(page, count, "%lu\n", mdd->mdd_atime_diff);
-+ return seq_printf(m, "%lu\n", mdd->mdd_atime_diff);
- }
--
-+LPROC_SEQ_FOPS(mdd_atime_diff);
-
- /**** changelogs ****/
--static int lprocfs_rd_changelog_mask(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int mdd_changelog_mask_seq_show(struct seq_file *m, void *data)
- {
-- struct mdd_device *mdd = data;
-- int i = 0, rc = 0;
--
-- *eof = 1;
-- while (i < CL_LAST) {
-- if (mdd->mdd_cl.mc_mask & (1 << i))
-- rc += snprintf(page + rc, count - rc, "%s ",
-- changelog_type2str(i));
-- i++;
-- }
-- return rc;
-+ struct mdd_device *mdd = m->private;
-+ int i = 0;
-+
-+ while (i < CL_LAST) {
-+ if (mdd->mdd_cl.mc_mask & (1 << i))
-+ seq_printf(m, "%s ", changelog_type2str(i));
-+ i++;
-+ }
-+ seq_printf(m, "\n");
-+ return 0;
- }
-
--static int lprocfs_wr_changelog_mask(struct file *file, const char *buffer,
-- unsigned long count, void *data)
-+static ssize_t
-+mdd_changelog_mask_seq_write(struct file *file, const char *buffer,
-+ size_t count, loff_t *off)
- {
-- struct mdd_device *mdd = data;
-+ struct seq_file *m = file->private_data;
-+ struct mdd_device *mdd = m->private;
- char *kernbuf;
- int rc;
- ENTRY;
-@@ -168,45 +124,32 @@ out:
- OBD_FREE(kernbuf, PAGE_CACHE_SIZE);
- return rc;
- }
--
--struct cucb_data {
-- char *page;
-- int count;
-- int idx;
--};
-+LPROC_SEQ_FOPS(mdd_changelog_mask);
-
- static int lprocfs_changelog_users_cb(const struct lu_env *env,
- struct llog_handle *llh,
- struct llog_rec_hdr *hdr, void *data)
- {
-- struct llog_changelog_user_rec *rec;
-- struct cucb_data *cucb = (struct cucb_data *)data;
-+ struct llog_changelog_user_rec *rec;
-+ struct seq_file *m = data;
-
-- LASSERT(llh->lgh_hdr->llh_flags & LLOG_F_IS_PLAIN);
-+ LASSERT(llh->lgh_hdr->llh_flags & LLOG_F_IS_PLAIN);
-
-- rec = (struct llog_changelog_user_rec *)hdr;
-+ rec = (struct llog_changelog_user_rec *)hdr;
-
-- cucb->idx += snprintf(cucb->page + cucb->idx, cucb->count - cucb->idx,
-- CHANGELOG_USER_PREFIX"%-3d "LPU64"\n",
-- rec->cur_id, rec->cur_endrec);
-- if (cucb->idx >= cucb->count)
-- return -ENOSPC;
--
-- return 0;
-+ seq_printf(m, CHANGELOG_USER_PREFIX"%-3d "LPU64"\n",
-+ rec->cur_id, rec->cur_endrec);
-+ return 0;
- }
-
--static int lprocfs_rd_changelog_users(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int mdd_changelog_users_seq_show(struct seq_file *m, void *data)
- {
- struct lu_env env;
-- struct mdd_device *mdd = data;
-+ struct mdd_device *mdd = m->private;
- struct llog_ctxt *ctxt;
-- struct cucb_data cucb;
- __u64 cur;
- int rc;
-
-- *eof = 1;
--
- ctxt = llog_get_context(mdd2obd_dev(mdd),
- LLOG_CHANGELOG_USER_ORIG_CTXT);
- if (ctxt == NULL)
-@@ -223,37 +166,32 @@ static int lprocfs_rd_changelog_users(char *page, char **start, off_t off,
- cur = mdd->mdd_cl.mc_index;
- spin_unlock(&mdd->mdd_cl.mc_lock);
-
-- cucb.count = count;
-- cucb.page = page;
-- cucb.idx = 0;
--
-- cucb.idx += snprintf(cucb.page + cucb.idx, cucb.count - cucb.idx,
-- "current index: "LPU64"\n", cur);
--
-- cucb.idx += snprintf(cucb.page + cucb.idx, cucb.count - cucb.idx,
-- "%-5s %s\n", "ID", "index");
-+ seq_printf(m, "current index: "LPU64"\n", cur);
-+ seq_printf(m, "%-5s %s\n", "ID", "index");
-
- llog_cat_process(&env, ctxt->loc_handle, lprocfs_changelog_users_cb,
-- &cucb, 0, 0);
-+ m, 0, 0);
-
- lu_env_fini(&env);
- llog_ctxt_put(ctxt);
-- return cucb.idx;
-+ return 0;
- }
-+LPROC_SEQ_FOPS_RO(mdd_changelog_users);
-
--static int lprocfs_rd_sync_perm(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int mdd_sync_perm_seq_show(struct seq_file *m, void *data)
- {
-- struct mdd_device *mdd = data;
-+ struct mdd_device *mdd = m->private;
-
-- LASSERT(mdd != NULL);
-- return snprintf(page, count, "%d\n", mdd->mdd_sync_permission);
-+ LASSERT(mdd != NULL);
-+ return seq_printf(m, "%d\n", mdd->mdd_sync_permission);
- }
-
--static int lprocfs_wr_sync_perm(struct file *file, const char *buffer,
-- unsigned long count, void *data)
-+static ssize_t
-+mdd_sync_perm_seq_write(struct file *file, const char *buffer,
-+ size_t count, loff_t *off)
- {
-- struct mdd_device *mdd = data;
-+ struct seq_file *m = file->private_data;
-+ struct mdd_device *mdd = m->private;
- int val, rc;
-
- LASSERT(mdd != NULL);
-@@ -264,22 +202,22 @@ static int lprocfs_wr_sync_perm(struct file *file, const char *buffer,
- mdd->mdd_sync_permission = !!val;
- return count;
- }
-+LPROC_SEQ_FOPS(mdd_sync_perm);
-
--static int lprocfs_rd_lfsck_speed_limit(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int mdd_lfsck_speed_limit_seq_show(struct seq_file *m, void *data)
- {
-- struct mdd_device *mdd = data;
-+ struct mdd_device *mdd = m->private;
-
- LASSERT(mdd != NULL);
-- *eof = 1;
--
-- return lfsck_get_speed(mdd->mdd_bottom, page, count);
-+ return lfsck_get_speed(m, mdd->mdd_bottom);
- }
-
--static int lprocfs_wr_lfsck_speed_limit(struct file *file, const char *buffer,
-- unsigned long count, void *data)
-+static ssize_t
-+mdd_lfsck_speed_limit_seq_write(struct file *file, const char *buffer,
-+ size_t count, loff_t *off)
- {
-- struct mdd_device *mdd = data;
-+ struct seq_file *m = file->private_data;
-+ struct mdd_device *mdd = m->private;
- __u32 val;
- int rc;
-
-@@ -291,25 +229,22 @@ static int lprocfs_wr_lfsck_speed_limit(struct file *file, const char *buffer,
- rc = lfsck_set_speed(mdd->mdd_bottom, val);
- return rc != 0 ? rc : count;
- }
-+LPROC_SEQ_FOPS(mdd_lfsck_speed_limit);
-
--static int lprocfs_rd_lfsck_async_windows(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int mdd_lfsck_async_windows_seq_show(struct seq_file *m, void *data)
- {
-- struct mdd_device *mdd = data;
-- int rc;
-+ struct mdd_device *mdd = m->private;
-
- LASSERT(mdd != NULL);
-- *eof = 1;
--
-- rc = lfsck_get_windows(mdd->mdd_bottom, page, count);
--
-- return rc != 0 ? rc : count;
-+ return lfsck_get_windows(m, mdd->mdd_bottom);
- }
-
--static int lprocfs_wr_lfsck_async_windows(struct file *file, const char *buffer,
-- unsigned long count, void *data)
-+static ssize_t
-+mdd_lfsck_async_windows_seq_write(struct file *file, const char *buffer,
-+ size_t count, loff_t *off)
- {
-- struct mdd_device *mdd = data;
-+ struct seq_file *m = file->private_data;
-+ struct mdd_device *mdd = m->private;
- __u32 val;
- int rc;
-
-@@ -320,54 +255,87 @@ static int lprocfs_wr_lfsck_async_windows(struct file *file, const char *buffer,
-
- return rc != 0 ? rc : count;
- }
-+LPROC_SEQ_FOPS(mdd_lfsck_async_windows);
-
--static int lprocfs_rd_lfsck_namespace(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int mdd_lfsck_namespace_seq_show(struct seq_file *m, void *data)
- {
-- struct mdd_device *mdd = data;
-- int rc;
-+ struct mdd_device *mdd = m->private;
-
- LASSERT(mdd != NULL);
-- *eof = 1;
-
-- rc = lfsck_dump(mdd->mdd_bottom, page, count, LT_NAMESPACE);
-- return rc;
-+ return lfsck_dump(m, mdd->mdd_bottom, LT_NAMESPACE);
- }
-+LPROC_SEQ_FOPS_RO(mdd_lfsck_namespace);
-
--static int lprocfs_rd_lfsck_layout(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int mdd_lfsck_layout_seq_show(struct seq_file *m, void *data)
- {
-- struct mdd_device *mdd = data;
-+ struct mdd_device *mdd = m->private;
-
- LASSERT(mdd != NULL);
-- *eof = 1;
-
-- return lfsck_dump(mdd->mdd_bottom, page, count, LT_LAYOUT);
-+ return lfsck_dump(m, mdd->mdd_bottom, LT_LAYOUT);
- }
--
--static struct lprocfs_vars lprocfs_mdd_obd_vars[] = {
-- { "atime_diff", lprocfs_rd_atime_diff, lprocfs_wr_atime_diff, 0 },
-- { "changelog_mask", lprocfs_rd_changelog_mask,
-- lprocfs_wr_changelog_mask, 0 },
-- { "changelog_users", lprocfs_rd_changelog_users, 0, 0},
-- { "sync_permission", lprocfs_rd_sync_perm, lprocfs_wr_sync_perm, 0 },
-- { "lfsck_speed_limit", lprocfs_rd_lfsck_speed_limit,
-- lprocfs_wr_lfsck_speed_limit, 0 },
-- { "lfsck_async_windows", lprocfs_rd_lfsck_async_windows,
-- lprocfs_wr_lfsck_async_windows, 0 },
-- { "lfsck_namespace", lprocfs_rd_lfsck_namespace, 0, 0 },
-- { "lfsck_layout", lprocfs_rd_lfsck_layout, 0, 0 },
-+LPROC_SEQ_FOPS_RO(mdd_lfsck_layout);
-+
-+static struct lprocfs_seq_vars lprocfs_mdd_obd_vars[] = {
-+ { .name = "atime_diff",
-+ .fops = &mdd_atime_diff_fops },
-+ { .name = "changelog_mask",
-+ .fops = &mdd_changelog_mask_fops },
-+ { .name = "changelog_users",
-+ .fops = &mdd_changelog_users_fops },
-+ { .name = "sync_permission",
-+ .fops = &mdd_sync_perm_fops },
-+ { .name = "lfsck_speed_limit",
-+ .fops = &mdd_lfsck_speed_limit_fops },
-+ { .name = "lfsck_async_windows",
-+ .fops = &mdd_lfsck_async_windows_fops },
-+ { .name = "lfsck_namespace",
-+ .fops = &mdd_lfsck_namespace_fops },
-+ { .name = "lfsck_layout",
-+ .fops = &mdd_lfsck_layout_fops },
- { 0 }
- };
-
--static struct lprocfs_vars lprocfs_mdd_module_vars[] = {
-- { "num_refs", lprocfs_rd_numrefs, 0, 0 },
-- { 0 }
--};
--
--void lprocfs_mdd_init_vars(struct lprocfs_static_vars *lvars)
-+int mdd_procfs_init(struct mdd_device *mdd, const char *name)
- {
-- lvars->module_vars = lprocfs_mdd_module_vars;
-- lvars->obd_vars = lprocfs_mdd_obd_vars;
-+ struct obd_device *obd = class_name2obd(name);
-+ struct obd_type *type;
-+ int rc;
-+ ENTRY;
-+
-+ /* at the moment there is no linkage between lu_type
-+ * and obd_type, so we lookup obd_type this way */
-+ type = class_search_type(LUSTRE_MDD_NAME);
-+
-+ LASSERT(name != NULL);
-+ LASSERT(type != NULL);
-+ LASSERT(obd != NULL);
-+
-+ /* Find the type procroot and add the proc entry for this device */
-+ obd->obd_vars = lprocfs_mdd_obd_vars;
-+ mdd->mdd_proc_entry = lprocfs_seq_register(name, type->typ_procroot,
-+ obd->obd_vars, mdd);
-+ if (IS_ERR(mdd->mdd_proc_entry)) {
-+ rc = PTR_ERR(mdd->mdd_proc_entry);
-+ CERROR("Error %d setting up lprocfs for %s\n",
-+ rc, name);
-+ mdd->mdd_proc_entry = NULL;
-+ GOTO(out, rc);
-+ }
-+ rc = 0;
-+ EXIT;
-+out:
-+ if (rc)
-+ mdd_procfs_fini(mdd);
-+ return rc;
- }
-
-+int mdd_procfs_fini(struct mdd_device *mdd)
-+{
-+ if (mdd->mdd_proc_entry) {
-+ lprocfs_remove(&mdd->mdd_proc_entry);
-+ mdd->mdd_proc_entry = NULL;
-+ }
-+ RETURN(0);
-+}
-diff --git a/lustre/ofd/lproc_ofd.c b/lustre/ofd/lproc_ofd.c
-index 359b373..fcde82a 100644
---- a/lustre/ofd/lproc_ofd.c
-+++ b/lustre/ofd/lproc_ofd.c
-@@ -47,81 +47,75 @@
-
- #ifdef LPROCFS
-
--static int lprocfs_ofd_rd_seqs(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int ofd_seqs_seq_show(struct seq_file *m, void *data)
- {
-- struct obd_device *obd = (struct obd_device *)data;
-+ struct obd_device *obd = m->private;
- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
-
-- *eof = 1;
-- return snprintf(page, count, "%u\n", ofd->ofd_seq_count);
-+ return seq_printf(m, "%u\n", ofd->ofd_seq_count);
- }
-+LPROC_SEQ_FOPS_RO(ofd_seqs);
-
--static int lprocfs_ofd_rd_tot_dirty(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int ofd_tot_dirty_seq_show(struct seq_file *m, void *data)
- {
-- struct obd_device *obd = (struct obd_device *)data;
-+ struct obd_device *obd = m->private;
- struct ofd_device *ofd;
-
- LASSERT(obd != NULL);
- ofd = ofd_dev(obd->obd_lu_dev);
-- *eof = 1;
-- return snprintf(page, count, LPU64"\n", ofd->ofd_tot_dirty);
-+ return seq_printf(m, LPU64"\n", ofd->ofd_tot_dirty);
- }
-+LPROC_SEQ_FOPS_RO(ofd_tot_dirty);
-
--static int lprocfs_ofd_rd_tot_granted(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int ofd_tot_granted_seq_show(struct seq_file *m, void *data)
- {
-- struct obd_device *obd = (struct obd_device *)data;
-+ struct obd_device *obd = m->private;
- struct ofd_device *ofd;
-
- LASSERT(obd != NULL);
- ofd = ofd_dev(obd->obd_lu_dev);
-- *eof = 1;
-- return snprintf(page, count, LPU64"\n", ofd->ofd_tot_granted);
-+ return seq_printf(m, LPU64"\n", ofd->ofd_tot_granted);
- }
-+LPROC_SEQ_FOPS_RO(ofd_tot_granted);
-
--static int lprocfs_ofd_rd_tot_pending(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int ofd_tot_pending_seq_show(struct seq_file *m, void *data)
- {
-- struct obd_device *obd = (struct obd_device *)data;
-+ struct obd_device *obd = m->private;
- struct ofd_device *ofd;
-
- LASSERT(obd != NULL);
- ofd = ofd_dev(obd->obd_lu_dev);
-- *eof = 1;
-- return snprintf(page, count, LPU64"\n", ofd->ofd_tot_pending);
-+ return seq_printf(m, LPU64"\n", ofd->ofd_tot_pending);
- }
-+LPROC_SEQ_FOPS_RO(ofd_tot_pending);
-
--static int lprocfs_ofd_rd_grant_precreate(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int ofd_grant_precreate_seq_show(struct seq_file *m, void *data)
- {
-- struct obd_device *obd = (struct obd_device *)data;
-+ struct obd_device *obd = m->private;
-
- LASSERT(obd != NULL);
-- *eof = 1;
-- return snprintf(page, count, "%ld\n",
-- obd->obd_self_export->exp_filter_data.fed_grant);
-+ return seq_printf(m, "%ld\n",
-+ obd->obd_self_export->exp_filter_data.fed_grant);
- }
-+LPROC_SEQ_FOPS_RO(ofd_grant_precreate);
-
--static int lprocfs_ofd_rd_grant_ratio(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int ofd_grant_ratio_seq_show(struct seq_file *m, void *data)
- {
-- struct obd_device *obd = (struct obd_device *)data;
-+ struct obd_device *obd = m->private;
- struct ofd_device *ofd;
-
- LASSERT(obd != NULL);
- ofd = ofd_dev(obd->obd_lu_dev);
-- *eof = 1;
-- return snprintf(page, count, "%d%%\n",
-- (int) ofd_grant_reserved(ofd, 100));
-+ return seq_printf(m, "%d%%\n",
-+ (int) ofd_grant_reserved(ofd, 100));
- }
-
--static int lprocfs_ofd_wr_grant_ratio(struct file *file,
-- const char __user *buffer,
-- unsigned long count, void *data)
-+static ssize_t
-+ofd_grant_ratio_seq_write(struct file *file, const char __user *buffer,
-+ size_t count, loff_t *off)
- {
-- struct obd_device *obd = (struct obd_device *)data;
-+ struct seq_file *m = file->private_data;
-+ struct obd_device *obd = m->private;
- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
- int val;
- int rc;
-@@ -145,24 +139,24 @@ static int lprocfs_ofd_wr_grant_ratio(struct file *file,
- spin_unlock(&ofd->ofd_grant_lock);
- return count;
- }
-+LPROC_SEQ_FOPS(ofd_grant_ratio);
-
--static int lprocfs_ofd_rd_precreate_batch(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int ofd_precreate_batch_seq_show(struct seq_file *m, void *data)
- {
-- struct obd_device *obd = (struct obd_device *)data;
-+ struct obd_device *obd = m->private;
- struct ofd_device *ofd;
-
- LASSERT(obd != NULL);
- ofd = ofd_dev(obd->obd_lu_dev);
-- *eof = 1;
-- return snprintf(page, count, "%d\n", ofd->ofd_precreate_batch);
-+ return seq_printf(m, "%d\n", ofd->ofd_precreate_batch);
- }
-
--static int lprocfs_ofd_wr_precreate_batch(struct file *file,
-- const char __user *buffer,
-- unsigned long count, void *data)
-+static ssize_t
-+ofd_precreate_batch_seq_write(struct file *file, const char __user *buffer,
-+ size_t count, loff_t *off)
- {
-- struct obd_device *obd = (struct obd_device *)data;
-+ struct seq_file *m = file->private_data;
-+ struct obd_device *obd = m->private;
- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
- int val;
- int rc;
-@@ -179,11 +173,11 @@ static int lprocfs_ofd_wr_precreate_batch(struct file *file,
- spin_unlock(&ofd->ofd_batch_lock);
- return count;
- }
-+LPROC_SEQ_FOPS(ofd_precreate_batch);
-
--static int lprocfs_ofd_rd_last_id(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int ofd_last_id_seq_show(struct seq_file *m, void *data)
- {
-- struct obd_device *obd = data;
-+ struct obd_device *obd = m->private;
- struct ofd_device *ofd;
- struct ofd_seq *oseq = NULL;
- int retval = 0, rc;
-@@ -201,35 +195,32 @@ static int lprocfs_ofd_rd_last_id(char *page, char **start, off_t off,
- fid_idif_seq(ostid_id(&oseq->os_oi),
- ofd->ofd_lut.lut_lsd.lsd_osd_index) :
- ostid_seq(&oseq->os_oi);
-- rc = snprintf(page, count, DOSTID"\n", seq,
-- ostid_id(&oseq->os_oi));
-+ rc = seq_printf(m, DOSTID"\n", seq, ostid_id(&oseq->os_oi));
- if (rc < 0) {
- retval = rc;
- break;
- }
-- page += rc;
-- count -= rc;
- retval += rc;
- }
- read_unlock(&ofd->ofd_seq_list_lock);
- return retval;
- }
-+LPROC_SEQ_FOPS_RO(ofd_last_id);
-
--int lprocfs_ofd_rd_fmd_max_num(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int ofd_fmd_max_num_seq_show(struct seq_file *m, void *data)
- {
-- struct obd_device *obd = data;
-- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
-- int rc;
-+ struct obd_device *obd = m->private;
-+ struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
-
-- rc = snprintf(page, count, "%u\n", ofd->ofd_fmd_max_num);
-- return rc;
-+ return seq_printf(m, "%u\n", ofd->ofd_fmd_max_num);
- }
-
--int lprocfs_ofd_wr_fmd_max_num(struct file *file, const char __user *buffer,
-- unsigned long count, void *data)
-+static ssize_t
-+ofd_fmd_max_num_seq_write(struct file *file, const char __user *buffer,
-+ size_t count, loff_t *off)
- {
-- struct obd_device *obd = data;
-+ struct seq_file *m = file->private_data;
-+ struct obd_device *obd = m->private;
- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
- int val;
- int rc;
-@@ -244,22 +235,22 @@ int lprocfs_ofd_wr_fmd_max_num(struct file *file, const char __user *buffer,
- ofd->ofd_fmd_max_num = val;
- return count;
- }
-+LPROC_SEQ_FOPS(ofd_fmd_max_num);
-
--int lprocfs_ofd_rd_fmd_max_age(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int ofd_fmd_max_age_seq_show(struct seq_file *m, void *data)
- {
-- struct obd_device *obd = data;
-- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
-- int rc;
-+ struct obd_device *obd = m->private;
-+ struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
-
-- rc = snprintf(page, count, "%ld\n", ofd->ofd_fmd_max_age / HZ);
-- return rc;
-+ return seq_printf(m, "%ld\n", ofd->ofd_fmd_max_age / HZ);
- }
-
--int lprocfs_ofd_wr_fmd_max_age(struct file *file, const char __user *buffer,
-- unsigned long count, void *data)
-+static ssize_t
-+ofd_fmd_max_age_seq_write(struct file *file, const char __user *buffer,
-+ size_t count, loff_t *off)
- {
-- struct obd_device *obd = data;
-+ struct seq_file *m = file->private_data;
-+ struct obd_device *obd = m->private;
- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
- int val;
- int rc;
-@@ -274,22 +265,22 @@ int lprocfs_ofd_wr_fmd_max_age(struct file *file, const char __user *buffer,
- ofd->ofd_fmd_max_age = val * HZ;
- return count;
- }
-+LPROC_SEQ_FOPS(ofd_fmd_max_age);
-
--static int lprocfs_ofd_rd_capa(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int ofd_capa_seq_show(struct seq_file *m, void *data)
- {
-- struct obd_device *obd = data;
-- int rc;
-+ struct obd_device *obd = m->private;
-
-- rc = snprintf(page, count, "capability on: %s\n",
-- obd->u.filter.fo_fl_oss_capa ? "oss" : "");
-- return rc;
-+ return seq_printf(m, "capability on: %s\n",
-+ obd->u.filter.fo_fl_oss_capa ? "oss" : "");
- }
-
--static int lprocfs_ofd_wr_capa(struct file *file, const char __user *buffer,
-- unsigned long count, void *data)
-+static ssize_t
-+ofd_capa_seq_write(struct file *file, const char *__user buffer, size_t count,
-+ loff_t *off)
- {
-- struct obd_device *obd = data;
-+ struct seq_file *m = file->private_data;
-+ struct obd_device *obd = m->private;
- int val, rc;
-
- rc = lprocfs_write_helper(buffer, count, &val);
-@@ -308,28 +299,29 @@ static int lprocfs_ofd_wr_capa(struct file *file, const char __user *buffer,
- val ? "enabled" : "disabled");
- return count;
- }
-+LPROC_SEQ_FOPS(ofd_capa);
-
--static int lprocfs_ofd_rd_capa_count(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int ofd_capa_count_seq_show(struct seq_file *m, void *data)
- {
-- return snprintf(page, count, "%d %d\n",
-- capa_count[CAPA_SITE_CLIENT],
-- capa_count[CAPA_SITE_SERVER]);
-+ return seq_printf(m, "%d %d\n", capa_count[CAPA_SITE_CLIENT],
-+ capa_count[CAPA_SITE_SERVER]);
- }
-+LPROC_SEQ_FOPS_RO(ofd_capa_count);
-
--int lprocfs_ofd_rd_degraded(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int ofd_degraded_seq_show(struct seq_file *m, void *data)
- {
-- struct obd_device *obd = data;
-+ struct obd_device *obd = m->private;
- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
-
-- return snprintf(page, count, "%u\n", ofd->ofd_raid_degraded);
-+ return seq_printf(m, "%u\n", ofd->ofd_raid_degraded);
- }
-
--int lprocfs_ofd_wr_degraded(struct file *file, const char __user *buffer,
-- unsigned long count, void *data)
-+static ssize_t
-+ofd_degraded_seq_write(struct file *file, const char __user *buffer,
-+ size_t count, loff_t *off)
- {
-- struct obd_device *obd = data;
-+ struct seq_file *m = file->private_data;
-+ struct obd_device *obd = m->private;
- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
- int val, rc;
-
-@@ -340,38 +332,37 @@ int lprocfs_ofd_wr_degraded(struct file *file, const char __user *buffer,
- spin_lock(&ofd->ofd_flags_lock);
- ofd->ofd_raid_degraded = !!val;
- spin_unlock(&ofd->ofd_flags_lock);
--
- return count;
- }
-+LPROC_SEQ_FOPS(ofd_degraded);
-
--int lprocfs_ofd_rd_fstype(char *page, char **start, off_t off, int count,
-- int *eof, void *data)
-+static int ofd_fstype_seq_show(struct seq_file *m, void *data)
- {
-- struct obd_device *obd = data;
-+ struct obd_device *obd = m->private;
- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
- struct lu_device *d;
-
- LASSERT(ofd->ofd_osd);
- d = &ofd->ofd_osd->dd_lu_dev;
- LASSERT(d->ld_type);
-- return snprintf(page, count, "%s\n", d->ld_type->ldt_name);
-+ return seq_printf(m, "%s\n", d->ld_type->ldt_name);
- }
-+LPROC_SEQ_FOPS_RO(ofd_fstype);
-
--int lprocfs_ofd_rd_syncjournal(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int ofd_syncjournal_seq_show(struct seq_file *m, void *data)
- {
-- struct obd_device *obd = data;
-+ struct obd_device *obd = m->private;
- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
-- int rc;
-
-- rc = snprintf(page, count, "%u\n", ofd->ofd_syncjournal);
-- return rc;
-+ return seq_printf(m, "%u\n", ofd->ofd_syncjournal);
- }
-
--int lprocfs_ofd_wr_syncjournal(struct file *file, const char __user *buffer,
-- unsigned long count, void *data)
-+static ssize_t
-+ofd_syncjournal_seq_write(struct file *file, const char __user *buffer,
-+ size_t count, loff_t *off)
- {
-- struct obd_device *obd = data;
-+ struct seq_file *m = file->private_data;
-+ struct obd_device *obd = m->private;
- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
- int val;
- int rc;
-@@ -390,6 +381,7 @@ int lprocfs_ofd_wr_syncjournal(struct file *file, const char __user *buffer,
-
- return count;
- }
-+LPROC_SEQ_FOPS(ofd_syncjournal);
-
- /* This must be longer than the longest string below */
- #define SYNC_STATES_MAXLEN 16
-@@ -397,23 +389,21 @@ static char *sync_on_cancel_states[] = {"never",
- "blocking",
- "always" };
-
--int lprocfs_ofd_rd_sync_lock_cancel(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int ofd_sync_lock_cancel_seq_show(struct seq_file *m, void *data)
- {
-- struct obd_device *obd = data;
-+ struct obd_device *obd = m->private;
- struct lu_target *tgt = obd->u.obt.obt_lut;
-- int rc;
-
-- rc = snprintf(page, count, "%s\n",
-- sync_on_cancel_states[tgt->lut_sync_lock_cancel]);
-- return rc;
-+ return seq_printf(m, "%s\n",
-+ sync_on_cancel_states[tgt->lut_sync_lock_cancel]);
- }
-
--int lprocfs_ofd_wr_sync_lock_cancel(struct file *file,
-- const char __user *buffer,
-- unsigned long count, void *data)
-+static ssize_t
-+ofd_sync_lock_cancel_seq_write(struct file *file, const char __user *buffer,
-+ size_t count, loff_t *off)
- {
-- struct obd_device *obd = data;
-+ struct seq_file *m = file->private_data;
-+ struct obd_device *obd = m->private;
- struct lu_target *tgt = obd->u.obt.obt_lut;
- char kernbuf[SYNC_STATES_MAXLEN];
- int val = -1;
-@@ -455,23 +445,23 @@ int lprocfs_ofd_wr_sync_lock_cancel(struct file *file,
- spin_unlock(&tgt->lut_flags_lock);
- return count;
- }
-+LPROC_SEQ_FOPS(ofd_sync_lock_cancel);
-
--int lprocfs_ofd_rd_grant_compat_disable(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int ofd_grant_compat_disable_seq_show(struct seq_file *m, void *data)
- {
-- struct obd_device *obd = data;
-- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
-- int rc;
-+ struct obd_device *obd = m->private;
-+ struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
-
-- rc = snprintf(page, count, "%u\n", ofd->ofd_grant_compat_disable);
-- return rc;
-+ return seq_printf(m, "%u\n", ofd->ofd_grant_compat_disable);
- }
-
--int lprocfs_ofd_wr_grant_compat_disable(struct file *file,
-- const char __user *buffer,
-- unsigned long count, void *data)
-+static ssize_t
-+ofd_grant_compat_disable_seq_write(struct file *file,
-+ const char __user *buffer,
-+ size_t count, loff_t *off)
- {
-- struct obd_device *obd = data;
-+ struct seq_file *m = file->private_data;
-+ struct obd_device *obd = m->private;
- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
- int val;
- int rc;
-@@ -489,42 +479,43 @@ int lprocfs_ofd_wr_grant_compat_disable(struct file *file,
-
- return count;
- }
-+LPROC_SEQ_FOPS(ofd_grant_compat_disable);
-
--int lprocfs_ofd_rd_soft_sync_limit(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int ofd_soft_sync_limit_seq_show(struct seq_file *m, void *data)
- {
-- struct obd_device *obd = data;
-+ struct obd_device *obd = m->private;
- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
-
-- return lprocfs_rd_uint(page, start, off, count, eof,
-- &ofd->ofd_soft_sync_limit);
-+ return lprocfs_uint_seq_show(m, &ofd->ofd_soft_sync_limit);
- }
-
--int lprocfs_ofd_wr_soft_sync_limit(struct file *file, const char __user *buffer,
-- unsigned long count, void *data)
-+static ssize_t
-+ofd_soft_sync_limit_seq_write(struct file *file, const char __user *buffer,
-+ size_t count, loff_t *off)
- {
-- struct obd_device *obd = data;
-- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
-+ struct seq_file *m = file->private_data;
-+ struct obd_device *obd = m->private;
-+ struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
-
-- return lprocfs_wr_uint(file, buffer, count, &ofd->ofd_soft_sync_limit);
-+ return lprocfs_uint_seq_write(file, buffer, count,
-+ (loff_t *) &ofd->ofd_soft_sync_limit);
- }
-+LPROC_SEQ_FOPS(ofd_soft_sync_limit);
-
--static int lprocfs_rd_lfsck_speed_limit(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int ofd_lfsck_speed_limit_seq_show(struct seq_file *m, void *data)
- {
-- struct obd_device *obd = data;
-+ struct obd_device *obd = m->private;
- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
-
-- *eof = 1;
--
-- return lfsck_get_speed(ofd->ofd_osd, page, count);
-+ return lfsck_get_speed(m, ofd->ofd_osd);
- }
-
--static int lprocfs_wr_lfsck_speed_limit(struct file *file,
-- const char __user *buffer,
-- unsigned long count, void *data)
-+static ssize_t
-+ofd_lfsck_speed_limit_seq_write(struct file *file, const char __user *buffer,
-+ size_t count, loff_t *off)
- {
-- struct obd_device *obd = data;
-+ struct seq_file *m = file->private_data;
-+ struct obd_device *obd = m->private;
- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
- __u32 val;
- int rc;
-@@ -537,38 +528,35 @@ static int lprocfs_wr_lfsck_speed_limit(struct file *file,
-
- return rc != 0 ? rc : count;
- }
-+LPROC_SEQ_FOPS(ofd_lfsck_speed_limit);
-
--static int lprocfs_rd_lfsck_layout(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int ofd_lfsck_layout_seq_show(struct seq_file *m, void *data)
- {
-- struct obd_device *obd = data;
-- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
--
-- *eof = 1;
-+ struct obd_device *obd = m->private;
-+ struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
-
-- return lfsck_dump(ofd->ofd_osd, page, count, LT_LAYOUT);
-+ return lfsck_dump(m, ofd->ofd_osd, LT_LAYOUT);
- }
-+LPROC_SEQ_FOPS_RO(ofd_lfsck_layout);
-
--static int lprocfs_rd_lfsck_verify_pfid(char *page, char **start, off_t off,
-- int count, int *eof, void *data)
-+static int ofd_lfsck_verify_pfid_seq_show(struct seq_file *m, void *data)
- {
-- struct obd_device *obd = data;
-- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
--
-- *eof = 1;
-+ struct obd_device *obd = m->private;
-+ struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
-
-- return snprintf(page, count,
-- "switch: %s\ndetected: "LPU64"\nrepaired: "LPU64"\n",
-- ofd->ofd_lfsck_verify_pfid ? "on" : "off",
-- ofd->ofd_inconsistency_self_detected,
-- ofd->ofd_inconsistency_self_repaired);
-+ return seq_printf(m,
-+ "switch: %s\ndetected: "LPU64"\nrepaired: "LPU64"\n",
-+ ofd->ofd_lfsck_verify_pfid ? "on" : "off",
-+ ofd->ofd_inconsistency_self_detected,
-+ ofd->ofd_inconsistency_self_repaired);
- }
-
--static int lprocfs_wr_lfsck_verify_pfid(struct file *file,
-- const char __user *buffer,
-- unsigned long count, void *data)
-+static ssize_t
-+ofd_lfsck_verify_pfid_seq_write(struct file *file, const char __user *buffer,
-+ size_t count, loff_t *off)
- {
-- struct obd_device *obd = data;
-+ struct seq_file *m = file->private_data;
-+ struct obd_device *obd = m->private;
- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
- __u32 val;
- int rc;
-@@ -581,75 +569,101 @@ static int lprocfs_wr_lfsck_verify_pfid(struct file *file,
-
- return count;
- }
--
--static struct lprocfs_vars lprocfs_ofd_obd_vars[] = {
-- { "uuid", lprocfs_rd_uuid, 0, 0 },
-- { "blocksize", lprocfs_rd_blksize, 0, 0 },
-- { "kbytestotal", lprocfs_rd_kbytestotal, 0, 0 },
-- { "kbytesfree", lprocfs_rd_kbytesfree, 0, 0 },
-- { "kbytesavail", lprocfs_rd_kbytesavail, 0, 0 },
-- { "filestotal", lprocfs_rd_filestotal, 0, 0 },
-- { "filesfree", lprocfs_rd_filesfree, 0, 0 },
-- { "seqs_allocated", lprocfs_ofd_rd_seqs, 0, 0 },
-- { "fstype", lprocfs_ofd_rd_fstype, 0, 0 },
-- { "last_id", lprocfs_ofd_rd_last_id, 0, 0 },
-- { "tot_dirty", lprocfs_ofd_rd_tot_dirty, 0, 0 },
-- { "tot_pending", lprocfs_ofd_rd_tot_pending, 0, 0 },
-- { "tot_granted", lprocfs_ofd_rd_tot_granted, 0, 0 },
-- { "grant_precreate", lprocfs_ofd_rd_grant_precreate, 0, 0 },
-- { "grant_ratio", lprocfs_ofd_rd_grant_ratio,
-- lprocfs_ofd_wr_grant_ratio, 0, 0 },
-- { "precreate_batch", lprocfs_ofd_rd_precreate_batch,
-- lprocfs_ofd_wr_precreate_batch, 0 },
-- { "recovery_status", lprocfs_obd_rd_recovery_status, 0, 0 },
-- { "recovery_time_soft", lprocfs_obd_rd_recovery_time_soft,
-- lprocfs_obd_wr_recovery_time_soft, 0},
-- { "recovery_time_hard", lprocfs_obd_rd_recovery_time_hard,
-- lprocfs_obd_wr_recovery_time_hard, 0},
-- { "evict_client", 0, lprocfs_wr_evict_client, 0,
-- &lprocfs_evict_client_fops},
-- { "num_exports", lprocfs_rd_num_exports, 0, 0 },
-- { "degraded", lprocfs_ofd_rd_degraded,
-- lprocfs_ofd_wr_degraded, 0},
-- { "sync_journal", lprocfs_ofd_rd_syncjournal,
-- lprocfs_ofd_wr_syncjournal, 0 },
-- { "sync_on_lock_cancel", lprocfs_ofd_rd_sync_lock_cancel,
-- lprocfs_ofd_wr_sync_lock_cancel, 0 },
-- { "instance", lprocfs_target_rd_instance, 0 },
-- { "ir_factor", lprocfs_obd_rd_ir_factor,
-- lprocfs_obd_wr_ir_factor, 0},
-- { "grant_compat_disable", lprocfs_ofd_rd_grant_compat_disable,
-- lprocfs_ofd_wr_grant_compat_disable, 0 },
-- { "client_cache_count", lprocfs_ofd_rd_fmd_max_num,
-- lprocfs_ofd_wr_fmd_max_num, 0 },
-- { "client_cache_seconds", lprocfs_ofd_rd_fmd_max_age,
-- lprocfs_ofd_wr_fmd_max_age, 0 },
-- { "capa", lprocfs_ofd_rd_capa,
-- lprocfs_ofd_wr_capa, 0 },
-- { "capa_count", lprocfs_ofd_rd_capa_count, 0, 0 },
-- { "job_cleanup_interval", lprocfs_rd_job_interval,
-- lprocfs_wr_job_interval, 0},
-- { "soft_sync_limit", lprocfs_ofd_rd_soft_sync_limit,
-- lprocfs_ofd_wr_soft_sync_limit, 0},
-- { "lfsck_speed_limit", lprocfs_rd_lfsck_speed_limit,
-- lprocfs_wr_lfsck_speed_limit, 0 },
-- { "lfsck_layout", lprocfs_rd_lfsck_layout, 0, 0 },
-- { "lfsck_verify_pfid", lprocfs_rd_lfsck_verify_pfid,
-- lprocfs_wr_lfsck_verify_pfid, 0 },
-- { 0 }
--};
--
--static struct lprocfs_vars lprocfs_ofd_module_vars[] = {
-- { "num_refs", lprocfs_rd_numrefs, 0, 0 },
-+LPROC_SEQ_FOPS(ofd_lfsck_verify_pfid);
-+
-+LPROC_SEQ_FOPS_RO_TYPE(ofd, uuid);
-+LPROC_SEQ_FOPS_RO_TYPE(ofd, blksize);
-+LPROC_SEQ_FOPS_RO_TYPE(ofd, kbytestotal);
-+LPROC_SEQ_FOPS_RO_TYPE(ofd, kbytesfree);
-+LPROC_SEQ_FOPS_RO_TYPE(ofd, kbytesavail);
-+LPROC_SEQ_FOPS_RO_TYPE(ofd, filestotal);
-+LPROC_SEQ_FOPS_RO_TYPE(ofd, filesfree);
-+
-+LPROC_SEQ_FOPS_RO_TYPE(ofd, recovery_status);
-+LPROC_SEQ_FOPS_RW_TYPE(ofd, recovery_time_soft);
-+LPROC_SEQ_FOPS_RW_TYPE(ofd, recovery_time_hard);
-+LPROC_SEQ_FOPS_WO_TYPE(ofd, evict_client);
-+LPROC_SEQ_FOPS_RO_TYPE(ofd, num_exports);
-+LPROC_SEQ_FOPS_RO_TYPE(ofd, target_instance);
-+LPROC_SEQ_FOPS_RW_TYPE(ofd, ir_factor);
-+LPROC_SEQ_FOPS_RW_TYPE(ofd, job_interval);
-+
-+struct lprocfs_seq_vars lprocfs_ofd_obd_vars[] = {
-+ { .name = "uuid",
-+ .fops = &ofd_uuid_fops },
-+ { .name = "blocksize",
-+ .fops = &ofd_blksize_fops },
-+ { .name = "kbytestotal",
-+ .fops = &ofd_kbytestotal_fops },
-+ { .name = "kbytesfree",
-+ .fops = &ofd_kbytesfree_fops },
-+ { .name = "kbytesavail",
-+ .fops = &ofd_kbytesavail_fops },
-+ { .name = "filestotal",
-+ .fops = &ofd_filestotal_fops },
-+ { .name = "filesfree",
-+ .fops = &ofd_filesfree_fops },
-+ { .name = "seqs_allocated",
-+ .fops = &ofd_seqs_fops },
-+ { .name = "fstype",
-+ .fops = &ofd_fstype_fops },
-+ { .name = "last_id",
-+ .fops = &ofd_last_id_fops },
-+ { .name = "tot_dirty",
-+ .fops = &ofd_tot_dirty_fops },
-+ { .name = "tot_pending",
-+ .fops = &ofd_tot_pending_fops },
-+ { .name = "tot_granted",
-+ .fops = &ofd_tot_granted_fops },
-+ { .name = "grant_precreate",
-+ .fops = &ofd_grant_precreate_fops },
-+ { .name = "grant_ratio",
-+ .fops = &ofd_grant_ratio_fops },
-+ { .name = "precreate_batch",
-+ .fops = &ofd_precreate_batch_fops },
-+ { .name = "recovery_status",
-+ .fops = &ofd_recovery_status_fops },
-+ { .name = "recovery_time_soft",
-+ .fops = &ofd_recovery_time_soft_fops },
-+ { .name = "recovery_time_hard",
-+ .fops = &ofd_recovery_time_hard_fops },
-+ { .name = "evict_client",
-+ .fops = &ofd_evict_client_fops },
-+ { .name = "num_exports",
-+ .fops = &ofd_num_exports_fops },
-+ { .name = "degraded",
-+ .fops = &ofd_degraded_fops },
-+ { .name = "sync_journal",
-+ .fops = &ofd_syncjournal_fops },
-+ { .name = "sync_on_lock_cancel",
-+ .fops = &ofd_sync_lock_cancel_fops },
-+ { .name = "instance",
-+ .fops = &ofd_target_instance_fops },
-+ { .name = "ir_factor",
-+ .fops = &ofd_ir_factor_fops },
-+ { .name = "grant_compat_disable",
-+ .fops = &ofd_grant_compat_disable_fops },
-+ { .name = "client_cache_count",
-+ .fops = &ofd_fmd_max_num_fops },
-+ { .name = "client_cache_seconds",
-+ .fops = &ofd_fmd_max_age_fops },
-+ { .name = "capa",
-+ .fops = &ofd_capa_fops },
-+ { .name = "capa_count",
-+ .fops = &ofd_capa_count_fops },
-+ { .name = "job_cleanup_interval",
-+ .fops = &ofd_job_interval_fops },
-+ { .name = "soft_sync_limit",
-+ .fops = &ofd_soft_sync_limit_fops },
-+ { .name = "lfsck_speed_limit",
-+ .fops = &ofd_lfsck_speed_limit_fops },
-+ { .name = "lfsck_layout",
-+ .fops = &ofd_lfsck_layout_fops },
-+ { .name = "lfsck_verify_pfid",
-+ .fops = &ofd_lfsck_verify_pfid_fops },
- { 0 }
- };
-
--void lprocfs_ofd_init_vars(struct lprocfs_static_vars *lvars)
--{
-- lvars->module_vars = lprocfs_ofd_module_vars;
-- lvars->obd_vars = lprocfs_ofd_obd_vars;
--}
--
- void ofd_stats_counter_init(struct lprocfs_stats *stats)
- {
- LASSERT(stats && stats->ls_num >= LPROC_OFD_STATS_LAST);
-diff --git a/lustre/ofd/ofd_dev.c b/lustre/ofd/ofd_dev.c
-index 0f0d51a..6172913 100644
---- a/lustre/ofd/ofd_dev.c
-+++ b/lustre/ofd/ofd_dev.c
-@@ -239,8 +239,7 @@ static int ofd_process_config(const struct lu_env *env, struct lu_device *d,
-
- switch (cfg->lcfg_command) {
- case LCFG_PARAM: {
-- struct lprocfs_static_vars lvars;
--
-+ struct obd_device *obd = ofd_obd(m);
- /* For interoperability */
- struct cfg_interop_param *ptr = NULL;
- struct lustre_cfg *old_cfg = NULL;
-@@ -278,8 +277,7 @@ static int ofd_process_config(const struct lu_env *env, struct lu_device *d,
- break;
- }
-
-- lprocfs_ofd_init_vars(&lvars);
-- rc = class_process_proc_param(PARAM_OST, lvars.obd_vars, cfg,
-+ rc = class_process_proc_seq_param(PARAM_OST, obd->obd_vars, cfg,
- d->ld_obd);
- if (rc > 0 || rc == -ENOSYS) {
- CDEBUG(D_CONFIG, "pass param %s down the stack.\n",
-@@ -485,9 +483,10 @@ static struct lu_device_operations ofd_lu_ops = {
- .ldo_prepare = ofd_prepare,
- };
-
-+LPROC_SEQ_FOPS(lprocfs_nid_stats_clear);
-+
- static int ofd_procfs_init(struct ofd_device *ofd)
- {
-- struct lprocfs_static_vars lvars;
- struct obd_device *obd = ofd_obd(ofd);
- cfs_proc_dir_entry_t *entry;
- int rc = 0;
-@@ -496,8 +495,8 @@ static int ofd_procfs_init(struct ofd_device *ofd)
-
- /* lprocfs must be setup before the ofd so state can be safely added
- * to /proc incrementally as the ofd is setup */
-- lprocfs_ofd_init_vars(&lvars);
-- rc = lprocfs_obd_setup(obd, lvars.obd_vars);
-+ obd->obd_vars = lprocfs_ofd_obd_vars;
-+ rc = lprocfs_seq_obd_setup(obd);
- if (rc) {
- CERROR("%s: lprocfs_obd_setup failed: %d.\n",
- obd->obd_name, rc);
-@@ -513,7 +512,8 @@ static int ofd_procfs_init(struct ofd_device *ofd)
-
- obd->obd_uses_nid_stats = 1;
-
-- entry = lprocfs_register("exports", obd->obd_proc_entry, NULL, NULL);
-+ entry = lprocfs_seq_register("exports", obd->obd_proc_entry, NULL,
-+ NULL);
- if (IS_ERR(entry)) {
- rc = PTR_ERR(entry);
- CERROR("%s: error %d setting up lprocfs for %s\n",
-@@ -523,8 +523,10 @@ static int ofd_procfs_init(struct ofd_device *ofd)
- obd->obd_proc_exports_entry = entry;
-
- entry = lprocfs_add_simple(obd->obd_proc_exports_entry, "clear",
-- lprocfs_nid_stats_clear_read,
-- lprocfs_nid_stats_clear_write, obd, NULL);
-+#ifndef HAVE_ONLY_PROCFS_SEQ
-+ NULL, NULL,
-+#endif
-+ obd, &lprocfs_nid_stats_clear_fops);
- if (IS_ERR(entry)) {
- rc = PTR_ERR(entry);
- CERROR("%s: add proc entry 'clear' failed: %d.\n",
-@@ -540,7 +542,7 @@ static int ofd_procfs_init(struct ofd_device *ofd)
- GOTO(remove_entry_clear, rc);
- RETURN(0);
- remove_entry_clear:
-- lprocfs_remove_proc_entry("clear", obd->obd_proc_exports_entry);
-+ lprocfs_remove(&obd->obd_proc_exports_entry);
- obd_cleanup:
- lprocfs_obd_cleanup(obd);
- lprocfs_free_obd_stats(obd);
-@@ -548,51 +550,48 @@ obd_cleanup:
- return rc;
- }
-
-+/**
-+ * ofd_procfs_add_brw_stats_symlink - expose osd stats to ofd layer
-+ *
-+ * The osd interfaces to the backend file system exposes useful data
-+ * such as brw_stats and read or write cache states. This same data
-+ * needs to be exposed into the obdfilter (ofd) layer to maintain
-+ * backwards compatibility. This function creates the symlinks in the
-+ * proc layer to enable this.
-+ */
- static void ofd_procfs_add_brw_stats_symlink(struct ofd_device *ofd)
- {
- struct obd_device *obd = ofd_obd(ofd);
- struct obd_device *osd_obd = ofd->ofd_osd_exp->exp_obd;
-- cfs_proc_dir_entry_t *osd_root = osd_obd->obd_type->typ_procroot;
-- cfs_proc_dir_entry_t *osd_dir;
-
-- osd_dir = lprocfs_srch(osd_root, obd->obd_name);
-- if (osd_dir == NULL)
-+ if (obd->obd_proc_entry == NULL)
- return;
-
-- if (lprocfs_srch(osd_dir, "brw_stats") != NULL)
-- lprocfs_add_symlink("brw_stats", obd->obd_proc_entry,
-- "../../%s/%s/brw_stats",
-- osd_root->name, osd_dir->name);
--
-- if (lprocfs_srch(osd_dir, "read_cache_enable") != NULL)
-- lprocfs_add_symlink("read_cache_enable", obd->obd_proc_entry,
-- "../../%s/%s/read_cache_enable",
-- osd_root->name, osd_dir->name);
--
-- if (lprocfs_srch(osd_dir, "readcache_max_filesize") != NULL)
-- lprocfs_add_symlink("readcache_max_filesize",
-- obd->obd_proc_entry,
-- "../../%s/%s/readcache_max_filesize",
-- osd_root->name, osd_dir->name);
--
-- if (lprocfs_srch(osd_dir, "writethrough_cache_enable") != NULL)
-- lprocfs_add_symlink("writethrough_cache_enable",
-- obd->obd_proc_entry,
-- "../../%s/%s/writethrough_cache_enable",
-- osd_root->name, osd_dir->name);
-+ lprocfs_add_symlink("brw_stats", obd->obd_proc_entry,
-+ "../../%s/%s/brw_stats",
-+ osd_obd->obd_type->typ_name, obd->obd_name);
-+
-+ lprocfs_add_symlink("read_cache_enable", obd->obd_proc_entry,
-+ "../../%s/%s/read_cache_enable",
-+ osd_obd->obd_type->typ_name, obd->obd_name);
-+
-+ lprocfs_add_symlink("readcache_max_filesize",
-+ obd->obd_proc_entry,
-+ "../../%s/%s/readcache_max_filesize",
-+ osd_obd->obd_type->typ_name, obd->obd_name);
-+
-+ lprocfs_add_symlink("writethrough_cache_enable",
-+ obd->obd_proc_entry,
-+ "../../%s/%s/writethrough_cache_enable",
-+ osd_obd->obd_type->typ_name, obd->obd_name);
- }
-
- static void ofd_procfs_fini(struct ofd_device *ofd)
- {
- struct obd_device *obd = ofd_obd(ofd);
-
-- lprocfs_remove_proc_entry("writethrough_cache_enable",
-- obd->obd_proc_entry);
-- lprocfs_remove_proc_entry("readcache_max_filesize",
-- obd->obd_proc_entry);
-- lprocfs_remove_proc_entry("read_cache_enable", obd->obd_proc_entry);
-- lprocfs_remove_proc_entry("brw_stats", obd->obd_proc_entry);
-- lprocfs_remove_proc_entry("clear", obd->obd_proc_exports_entry);
-+ lprocfs_remove(&obd->obd_proc_exports_entry);
-+ lprocfs_remove(&obd->obd_proc_entry);
- lprocfs_free_per_client_stats(obd);
- lprocfs_obd_cleanup(obd);
- lprocfs_free_obd_stats(obd);
-@@ -2377,7 +2376,6 @@ static struct lu_device_type ofd_device_type = {
-
- int __init ofd_init(void)
- {
-- struct lprocfs_static_vars lvars;
- int rc;
-
- rc = lu_kmem_init(ofd_caches);
-@@ -2390,11 +2388,9 @@ int __init ofd_init(void)
- return(rc);
- }
-
-- lprocfs_ofd_init_vars(&lvars);
--
- rc = class_register_type(&ofd_obd_ops, NULL, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
-- lvars.module_vars,
-+ NULL,
- #endif
- LUSTRE_OST_NAME, &ofd_device_type);
- return rc;
-diff --git a/lustre/ofd/ofd_internal.h b/lustre/ofd/ofd_internal.h
-index 4f12506..2e75de5 100644
---- a/lustre/ofd/ofd_internal.h
-+++ b/lustre/ofd/ofd_internal.h
-@@ -403,13 +403,9 @@ int ofd_txn_stop_cb(const struct lu_env *env, struct thandle *txn,
-
- /* lproc_ofd.c */
- #ifdef LPROCFS
--void lprocfs_ofd_init_vars(struct lprocfs_static_vars *lvars);
-+extern struct lprocfs_seq_vars lprocfs_ofd_obd_vars[];
- void ofd_stats_counter_init(struct lprocfs_stats *stats);
- #else
--static void lprocfs_ofd_init_vars(struct lprocfs_static_vars *lvars)
--{
-- memset(lvars, 0, sizeof(*lvars));
--}
- static inline void ofd_stats_counter_init(struct lprocfs_stats *stats) {}
- #endif
-
---
-1.9.3
-
diff --git a/patches/07_doxygen.patch b/patches/07_doxygen.patch
deleted file mode 100644
index 6df24ea2e..000000000
--- a/patches/07_doxygen.patch
+++ /dev/null
@@ -1,1804 +0,0 @@
-Index: dcmtk-3.6.0/doxygen/htmldocs.cfg
-===================================================================
---- dcmtk-3.6.0.orig/doxygen/htmldocs.cfg 2011-11-23 15:49:41.000000000 +0100
-+++ dcmtk-3.6.0/doxygen/htmldocs.cfg 2011-11-23 15:50:00.000000000 +0100
-@@ -1,4 +1,4 @@
--# Doxyfile 1.5.1
-+# Doxyfile 1.7.1
-
- # This file describes the settings to be used by the documentation system
- # doxygen (www.doxygen.org) for a project
-@@ -14,438 +14,560 @@
- # Project related configuration options
- #---------------------------------------------------------------------------
-
--# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
-+# This tag specifies the encoding used for all characters in the config file
-+# that follow. The default is UTF-8 which is also the encoding used for all
-+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
-+# iconv built into libc) for the transcoding. See
-+# http://www.gnu.org/software/libiconv for the list of possible encodings.
-+
-+DOXYFILE_ENCODING = UTF-8
-+
-+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
- # by quotes) that should identify the project.
-
- PROJECT_NAME = "OFFIS DCMTK"
-
--# The PROJECT_NUMBER tag can be used to enter a project or revision number.
--# This could be handy for archiving the generated documentation or
-+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
-+# This could be handy for archiving the generated documentation or
- # if some version control system is used.
-
- PROJECT_NUMBER = "Version @DCMTK_VERSION@"
-
--# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
--# base path where the generated documentation will be put.
--# If a relative path is entered, it will be relative to the location
-+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
-+# base path where the generated documentation will be put.
-+# If a relative path is entered, it will be relative to the location
- # where doxygen was started. If left blank the current directory will be used.
-
--OUTPUT_DIRECTORY =
-+OUTPUT_DIRECTORY =
-
--# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
--# 4096 sub-directories (in 2 levels) under the output directory of each output
--# format and will distribute the generated files over these directories.
--# Enabling this option can be useful when feeding doxygen a huge amount of
--# source files, where putting all generated files in the same directory would
-+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
-+# 4096 sub-directories (in 2 levels) under the output directory of each output
-+# format and will distribute the generated files over these directories.
-+# Enabling this option can be useful when feeding doxygen a huge amount of
-+# source files, where putting all generated files in the same directory would
- # otherwise cause performance problems for the file system.
-
- CREATE_SUBDIRS = NO
-
--# The OUTPUT_LANGUAGE tag is used to specify the language in which all
--# documentation generated by doxygen is written. Doxygen will use this
--# information to generate all constant output in the proper language.
--# The default language is English, other supported languages are:
--# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
--# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian,
--# Italian, Japanese, Japanese-en (Japanese with English messages), Korean,
--# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
--# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
-+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-+# documentation generated by doxygen is written. Doxygen will use this
-+# information to generate all constant output in the proper language.
-+# The default language is English, other supported languages are:
-+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
-+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
-+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
-+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
-+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak,
-+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
-
- OUTPUT_LANGUAGE = English
-
--# This tag can be used to specify the encoding used in the generated output.
--# The encoding is not always determined by the language that is chosen,
--# but also whether or not the output is meant for Windows or non-Windows users.
--# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES
--# forces the Windows encoding (this is the default for the Windows binary),
--# whereas setting the tag to NO uses a Unix-style encoding (the default for
--# all platforms other than Windows).
--
--USE_WINDOWS_ENCODING = NO
--
--# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
--# include brief member descriptions after the members that are listed in
--# the file and class documentation (similar to JavaDoc).
-+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
-+# include brief member descriptions after the members that are listed in
-+# the file and class documentation (similar to JavaDoc).
- # Set to NO to disable this.
-
- BRIEF_MEMBER_DESC = YES
-
--# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
--# the brief description of a member or function before the detailed description.
--# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
-+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
-+# the brief description of a member or function before the detailed description.
-+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
- # brief descriptions will be completely suppressed.
-
- REPEAT_BRIEF = YES
-
--# This tag implements a quasi-intelligent brief description abbreviator
--# that is used to form the text in various listings. Each string
--# in this list, if found as the leading text of the brief description, will be
--# stripped from the text and the result after processing the whole list, is
--# used as the annotated text. Otherwise, the brief description is used as-is.
--# If left blank, the following values are used ("$name" is automatically
--# replaced with the name of the entity): "The $name class" "The $name widget"
--# "The $name file" "is" "provides" "specifies" "contains"
-+# This tag implements a quasi-intelligent brief description abbreviator
-+# that is used to form the text in various listings. Each string
-+# in this list, if found as the leading text of the brief description, will be
-+# stripped from the text and the result after processing the whole list, is
-+# used as the annotated text. Otherwise, the brief description is used as-is.
-+# If left blank, the following values are used ("$name" is automatically
-+# replaced with the name of the entity): "The $name class" "The $name widget"
-+# "The $name file" "is" "provides" "specifies" "contains"
- # "represents" "a" "an" "the"
-
--ABBREVIATE_BRIEF =
-+ABBREVIATE_BRIEF =
-
--# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
--# Doxygen will generate a detailed section even if there is only a brief
-+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-+# Doxygen will generate a detailed section even if there is only a brief
- # description.
-
- ALWAYS_DETAILED_SEC = NO
-
--# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
--# inherited members of a class in the documentation of that class as if those
--# members were ordinary class members. Constructors, destructors and assignment
-+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
-+# inherited members of a class in the documentation of that class as if those
-+# members were ordinary class members. Constructors, destructors and assignment
- # operators of the base classes will not be shown.
-
- INLINE_INHERITED_MEMB = NO
-
--# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
--# path before files name in the file list and in the header files. If set
-+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
-+# path before files name in the file list and in the header files. If set
- # to NO the shortest path that makes the file name unique will be used.
-
- FULL_PATH_NAMES = YES
-
--# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
--# can be used to strip a user-defined part of the path. Stripping is
--# only done if one of the specified strings matches the left-hand part of
--# the path. The tag can be used to show relative paths in the file list.
--# If left blank the directory from which doxygen is run is used as the
-+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
-+# can be used to strip a user-defined part of the path. Stripping is
-+# only done if one of the specified strings matches the left-hand part of
-+# the path. The tag can be used to show relative paths in the file list.
-+# If left blank the directory from which doxygen is run is used as the
- # path to strip.
-
- STRIP_FROM_PATH = ..
-
--# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
--# the path mentioned in the documentation of a class, which tells
--# the reader which header file to include in order to use a class.
--# If left blank only the name of the header file containing the class
--# definition is used. Otherwise one should specify the include paths that
-+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
-+# the path mentioned in the documentation of a class, which tells
-+# the reader which header file to include in order to use a class.
-+# If left blank only the name of the header file containing the class
-+# definition is used. Otherwise one should specify the include paths that
- # are normally passed to the compiler using the -I flag.
-
--STRIP_FROM_INC_PATH =
-+STRIP_FROM_INC_PATH =
-
--# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
--# (but less readable) file names. This can be useful is your file systems
-+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
-+# (but less readable) file names. This can be useful is your file systems
- # doesn't support long names like on DOS, Mac, or CD-ROM.
-
- SHORT_NAMES = NO
-
--# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
--# will interpret the first line (until the first dot) of a JavaDoc-style
--# comment as the brief description. If set to NO, the JavaDoc
--# comments will behave just like the Qt-style comments (thus requiring an
--# explicit @brief command for a brief description.
-+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
-+# will interpret the first line (until the first dot) of a JavaDoc-style
-+# comment as the brief description. If set to NO, the JavaDoc
-+# comments will behave just like regular Qt-style comments
-+# (thus requiring an explicit @brief command for a brief description.)
-
- JAVADOC_AUTOBRIEF = YES
-
--# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
--# treat a multi-line C++ special comment block (i.e. a block of //! or ///
--# comments) as a brief description. This used to be the default behaviour.
--# The new default is to treat a multi-line C++ comment block as a detailed
-+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
-+# interpret the first line (until the first dot) of a Qt-style
-+# comment as the brief description. If set to NO, the comments
-+# will behave just like regular Qt-style comments (thus requiring
-+# an explicit \brief command for a brief description.)
-+
-+QT_AUTOBRIEF = NO
-+
-+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
-+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
-+# comments) as a brief description. This used to be the default behaviour.
-+# The new default is to treat a multi-line C++ comment block as a detailed
- # description. Set this tag to YES if you prefer the old behaviour instead.
-
- MULTILINE_CPP_IS_BRIEF = NO
-
--# If the DETAILS_AT_TOP tag is set to YES then Doxygen
--# will output the detailed description near the top, like JavaDoc.
--# If set to NO, the detailed description appears after the member
--# documentation.
--
--DETAILS_AT_TOP = NO
--
--# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
--# member inherits the documentation from any documented member that it
-+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
-+# member inherits the documentation from any documented member that it
- # re-implements.
-
- INHERIT_DOCS = NO
-
--# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
--# a new page for each member. If set to NO, the documentation of a member will
-+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
-+# a new page for each member. If set to NO, the documentation of a member will
- # be part of the file/class/namespace that contains it.
-
- SEPARATE_MEMBER_PAGES = NO
-
--# The TAB_SIZE tag can be used to set the number of spaces in a tab.
-+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
- # Doxygen uses this value to replace tabs by spaces in code fragments.
-
- TAB_SIZE = 4
-
--# This tag can be used to specify a number of aliases that acts
--# as commands in the documentation. An alias has the form "name=value".
--# For example adding "sideeffect=\par Side Effects:\n" will allow you to
--# put the command \sideeffect (or @sideeffect) in the documentation, which
--# will result in a user-defined paragraph with heading "Side Effects:".
-+# This tag can be used to specify a number of aliases that acts
-+# as commands in the documentation. An alias has the form "name=value".
-+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
-+# put the command \sideeffect (or @sideeffect) in the documentation, which
-+# will result in a user-defined paragraph with heading "Side Effects:".
- # You can put \n's in the value part of an alias to insert newlines.
-
--ALIASES =
-+ALIASES =
-
--# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
--# sources only. Doxygen will then generate output that is more tailored for C.
--# For instance, some of the names that are used will be different. The list
-+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
-+# sources only. Doxygen will then generate output that is more tailored for C.
-+# For instance, some of the names that are used will be different. The list
- # of all members will be omitted, etc.
-
- OPTIMIZE_OUTPUT_FOR_C = NO
-
--# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
--# sources only. Doxygen will then generate output that is more tailored for Java.
--# For instance, namespaces will be presented as packages, qualified scopes
--# will look different, etc.
-+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
-+# sources only. Doxygen will then generate output that is more tailored for
-+# Java. For instance, namespaces will be presented as packages, qualified
-+# scopes will look different, etc.
-
- OPTIMIZE_OUTPUT_JAVA = NO
-
--# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to
--# include (a tag file for) the STL sources as input, then you should
--# set this tag to YES in order to let doxygen match functions declarations and
--# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
--# func(std::string) {}). This also make the inheritance and collaboration
-+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
-+# sources only. Doxygen will then generate output that is more tailored for
-+# Fortran.
-+
-+OPTIMIZE_FOR_FORTRAN = NO
-+
-+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
-+# sources. Doxygen will then generate output that is tailored for
-+# VHDL.
-+
-+OPTIMIZE_OUTPUT_VHDL = NO
-+
-+# Doxygen selects the parser to use depending on the extension of the files it
-+# parses. With this tag you can assign which parser to use for a given extension.
-+# Doxygen has a built-in mapping, but you can override or extend it using this
-+# tag. The format is ext=language, where ext is a file extension, and language
-+# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C,
-+# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make
-+# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
-+# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions
-+# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
-+
-+EXTENSION_MAPPING =
-+
-+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
-+# to include (a tag file for) the STL sources as input, then you should
-+# set this tag to YES in order to let doxygen match functions declarations and
-+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
-+# func(std::string) {}). This also make the inheritance and collaboration
- # diagrams that involve STL classes more complete and accurate.
-
- BUILTIN_STL_SUPPORT = NO
-
--# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
--# tag is set to YES, then doxygen will reuse the documentation of the first
--# member in the group (if any) for the other members of the group. By default
-+# If you use Microsoft's C++/CLI language, you should set this option to YES to
-+# enable parsing support.
-+
-+CPP_CLI_SUPPORT = NO
-+
-+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
-+# Doxygen will parse them like normal C++ but will assume all classes use public
-+# instead of private inheritance when no explicit protection keyword is present.
-+
-+SIP_SUPPORT = NO
-+
-+# For Microsoft's IDL there are propget and propput attributes to indicate getter
-+# and setter methods for a property. Setting this option to YES (the default)
-+# will make doxygen to replace the get and set methods by a property in the
-+# documentation. This will only work if the methods are indeed getting or
-+# setting a simple type. If this is not the case, or you want to show the
-+# methods anyway, you should set this option to NO.
-+
-+IDL_PROPERTY_SUPPORT = YES
-+
-+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-+# tag is set to YES, then doxygen will reuse the documentation of the first
-+# member in the group (if any) for the other members of the group. By default
- # all members of a group must be documented explicitly.
-
- DISTRIBUTE_GROUP_DOC = NO
-
--# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
--# the same type (for instance a group of public functions) to be put as a
--# subgroup of that type (e.g. under the Public Functions section). Set it to
--# NO to prevent subgrouping. Alternatively, this can be done per class using
-+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
-+# the same type (for instance a group of public functions) to be put as a
-+# subgroup of that type (e.g. under the Public Functions section). Set it to
-+# NO to prevent subgrouping. Alternatively, this can be done per class using
- # the \nosubgrouping command.
-
- SUBGROUPING = YES
-
-+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
-+# is documented as struct, union, or enum with the name of the typedef. So
-+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
-+# with name TypeT. When disabled the typedef will appear as a member of a file,
-+# namespace, or class. And the struct will be named TypeS. This can typically
-+# be useful for C code in case the coding convention dictates that all compound
-+# types are typedef'ed and only the typedef is referenced, never the tag name.
-+
-+TYPEDEF_HIDES_STRUCT = NO
-+
-+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
-+# determine which symbols to keep in memory and which to flush to disk.
-+# When the cache is full, less often used symbols will be written to disk.
-+# For small to medium size projects (<1000 input files) the default value is
-+# probably good enough. For larger projects a too small cache size can cause
-+# doxygen to be busy swapping symbols to and from disk most of the time
-+# causing a significant performance penality.
-+# If the system has enough physical memory increasing the cache will improve the
-+# performance by keeping more symbols in memory. Note that the value works on
-+# a logarithmic scale so increasing the size by one will rougly double the
-+# memory usage. The cache size is given by this formula:
-+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
-+# corresponding to a cache size of 2^16 = 65536 symbols
-+
-+SYMBOL_CACHE_SIZE = 0
-+
- #---------------------------------------------------------------------------
- # Build related configuration options
- #---------------------------------------------------------------------------
-
--# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
--# documentation are documented, even if no documentation was available.
--# Private class members and static file members will be hidden unless
-+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
-+# documentation are documented, even if no documentation was available.
-+# Private class members and static file members will be hidden unless
- # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
-
- EXTRACT_ALL = NO
-
--# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
-+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
- # will be included in the documentation.
-
- EXTRACT_PRIVATE = YES
-
--# If the EXTRACT_STATIC tag is set to YES all static members of a file
-+# If the EXTRACT_STATIC tag is set to YES all static members of a file
- # will be included in the documentation.
-
- EXTRACT_STATIC = YES
-
--# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
--# defined locally in source files will be included in the documentation.
-+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
-+# defined locally in source files will be included in the documentation.
- # If set to NO only classes defined in header files are included.
-
- EXTRACT_LOCAL_CLASSES = YES
-
--# This flag is only useful for Objective-C code. When set to YES local
--# methods, which are defined in the implementation section but not in
--# the interface are included in the documentation.
-+# This flag is only useful for Objective-C code. When set to YES local
-+# methods, which are defined in the implementation section but not in
-+# the interface are included in the documentation.
- # If set to NO (the default) only methods in the interface are included.
-
- EXTRACT_LOCAL_METHODS = NO
-
--# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
--# undocumented members of documented classes, files or namespaces.
--# If set to NO (the default) these members will be included in the
--# various overviews, but no documentation section is generated.
-+# If this flag is set to YES, the members of anonymous namespaces will be
-+# extracted and appear in the documentation as a namespace called
-+# 'anonymous_namespace{file}', where file will be replaced with the base
-+# name of the file that contains the anonymous namespace. By default
-+# anonymous namespace are hidden.
-+
-+EXTRACT_ANON_NSPACES = NO
-+
-+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
-+# undocumented members of documented classes, files or namespaces.
-+# If set to NO (the default) these members will be included in the
-+# various overviews, but no documentation section is generated.
- # This option has no effect if EXTRACT_ALL is enabled.
-
- HIDE_UNDOC_MEMBERS = NO
-
--# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
--# undocumented classes that are normally visible in the class hierarchy.
--# If set to NO (the default) these classes will be included in the various
-+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
-+# undocumented classes that are normally visible in the class hierarchy.
-+# If set to NO (the default) these classes will be included in the various
- # overviews. This option has no effect if EXTRACT_ALL is enabled.
-
- HIDE_UNDOC_CLASSES = NO
-
--# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
--# friend (class|struct|union) declarations.
--# If set to NO (the default) these declarations will be included in the
-+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
-+# friend (class|struct|union) declarations.
-+# If set to NO (the default) these declarations will be included in the
- # documentation.
-
- HIDE_FRIEND_COMPOUNDS = NO
-
--# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
--# documentation blocks found inside the body of a function.
--# If set to NO (the default) these blocks will be appended to the
-+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
-+# documentation blocks found inside the body of a function.
-+# If set to NO (the default) these blocks will be appended to the
- # function's detailed documentation block.
-
- HIDE_IN_BODY_DOCS = NO
-
--# The INTERNAL_DOCS tag determines if documentation
--# that is typed after a \internal command is included. If the tag is set
--# to NO (the default) then the documentation will be excluded.
-+# The INTERNAL_DOCS tag determines if documentation
-+# that is typed after a \internal command is included. If the tag is set
-+# to NO (the default) then the documentation will be excluded.
- # Set it to YES to include the internal documentation.
-
- INTERNAL_DOCS = NO
-
--# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
--# file names in lower-case letters. If set to YES upper-case letters are also
--# allowed. This is useful if you have classes or files whose names only differ
--# in case and if your file system supports case sensitive file names. Windows
-+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
-+# file names in lower-case letters. If set to YES upper-case letters are also
-+# allowed. This is useful if you have classes or files whose names only differ
-+# in case and if your file system supports case sensitive file names. Windows
- # and Mac users are advised to set this option to NO.
-
- CASE_SENSE_NAMES = YES
-
--# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
--# will show members with their full class and namespace scopes in the
-+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
-+# will show members with their full class and namespace scopes in the
- # documentation. If set to YES the scope will be hidden.
-
- HIDE_SCOPE_NAMES = NO
-
--# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
--# will put a list of the files that are included by a file in the documentation
-+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
-+# will put a list of the files that are included by a file in the documentation
- # of that file.
-
- SHOW_INCLUDE_FILES = NO
-
--# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
-+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
-+# will list include files with double quotes in the documentation
-+# rather than with sharp brackets.
-+
-+FORCE_LOCAL_INCLUDES = NO
-+
-+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
- # is inserted in the documentation for inline members.
-
- INLINE_INFO = YES
-
--# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
--# will sort the (detailed) documentation of file and class members
--# alphabetically by member name. If set to NO the members will appear in
-+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
-+# will sort the (detailed) documentation of file and class members
-+# alphabetically by member name. If set to NO the members will appear in
- # declaration order.
-
- SORT_MEMBER_DOCS = YES
-
--# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
--# brief documentation of file, namespace and class members alphabetically
--# by member name. If set to NO (the default) the members will appear in
-+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
-+# brief documentation of file, namespace and class members alphabetically
-+# by member name. If set to NO (the default) the members will appear in
- # declaration order.
-
- SORT_BRIEF_DOCS = NO
-
--# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
--# sorted by fully-qualified names, including namespaces. If set to
--# NO (the default), the class list will be sorted only by class name,
--# not including the namespace part.
-+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
-+# will sort the (brief and detailed) documentation of class members so that
-+# constructors and destructors are listed first. If set to NO (the default)
-+# the constructors will appear in the respective orders defined by
-+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
-+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
-+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
-+
-+SORT_MEMBERS_CTORS_1ST = NO
-+
-+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
-+# hierarchy of group names into alphabetical order. If set to NO (the default)
-+# the group names will appear in their defined order.
-+
-+SORT_GROUP_NAMES = NO
-+
-+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
-+# sorted by fully-qualified names, including namespaces. If set to
-+# NO (the default), the class list will be sorted only by class name,
-+# not including the namespace part.
- # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
--# Note: This option applies only to the class list, not to the
-+# Note: This option applies only to the class list, not to the
- # alphabetical list.
-
- SORT_BY_SCOPE_NAME = NO
-
--# The GENERATE_TODOLIST tag can be used to enable (YES) or
--# disable (NO) the todo list. This list is created by putting \todo
-+# The GENERATE_TODOLIST tag can be used to enable (YES) or
-+# disable (NO) the todo list. This list is created by putting \todo
- # commands in the documentation.
-
- GENERATE_TODOLIST = NO
-
--# The GENERATE_TESTLIST tag can be used to enable (YES) or
--# disable (NO) the test list. This list is created by putting \test
-+# The GENERATE_TESTLIST tag can be used to enable (YES) or
-+# disable (NO) the test list. This list is created by putting \test
- # commands in the documentation.
-
- GENERATE_TESTLIST = NO
-
--# The GENERATE_BUGLIST tag can be used to enable (YES) or
--# disable (NO) the bug list. This list is created by putting \bug
-+# The GENERATE_BUGLIST tag can be used to enable (YES) or
-+# disable (NO) the bug list. This list is created by putting \bug
- # commands in the documentation.
-
- GENERATE_BUGLIST = NO
-
--# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
--# disable (NO) the deprecated list. This list is created by putting
-+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
-+# disable (NO) the deprecated list. This list is created by putting
- # \deprecated commands in the documentation.
-
- GENERATE_DEPRECATEDLIST= YES
-
--# The ENABLED_SECTIONS tag can be used to enable conditional
-+# The ENABLED_SECTIONS tag can be used to enable conditional
- # documentation sections, marked by \if sectionname ... \endif.
-
--ENABLED_SECTIONS = # MODULE_DCMJP2K MODULE_DCMPPS MODULE_DCMSTCOM MODULE_DCMRT
-+ENABLED_SECTIONS =
-
--# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
--# the initial value of a variable or define consists of for it to appear in
--# the documentation. If the initializer consists of more lines than specified
--# here it will be hidden. Use a value of 0 to hide initializers completely.
--# The appearance of the initializer of individual variables and defines in the
--# documentation can be controlled using \showinitializer or \hideinitializer
-+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-+# the initial value of a variable or define consists of for it to appear in
-+# the documentation. If the initializer consists of more lines than specified
-+# here it will be hidden. Use a value of 0 to hide initializers completely.
-+# The appearance of the initializer of individual variables and defines in the
-+# documentation can be controlled using \showinitializer or \hideinitializer
- # command in the documentation regardless of this setting.
-
- MAX_INITIALIZER_LINES = 30
-
--# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
--# at the bottom of the documentation of classes and structs. If set to YES the
-+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
-+# at the bottom of the documentation of classes and structs. If set to YES the
- # list will mention the files that were used to generate the documentation.
-
- SHOW_USED_FILES = YES
-
--# If the sources in your project are distributed over multiple directories
--# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
-+# If the sources in your project are distributed over multiple directories
-+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
- # in the documentation. The default is NO.
-
- SHOW_DIRECTORIES = NO
-
--# The FILE_VERSION_FILTER tag can be used to specify a program or script that
--# doxygen should invoke to get the current version for each file (typically from the
--# version control system). Doxygen will invoke the program by executing (via
--# popen()) the command <command> <input-file>, where <command> is the value of
--# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
--# provided by doxygen. Whatever the program writes to standard output
-+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
-+# This will remove the Files entry from the Quick Index and from the
-+# Folder Tree View (if specified). The default is YES.
-+
-+SHOW_FILES = YES
-+
-+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
-+# Namespaces page.
-+# This will remove the Namespaces entry from the Quick Index
-+# and from the Folder Tree View (if specified). The default is YES.
-+
-+SHOW_NAMESPACES = YES
-+
-+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
-+# doxygen should invoke to get the current version for each file (typically from
-+# the version control system). Doxygen will invoke the program by executing (via
-+# popen()) the command <command> <input-file>, where <command> is the value of
-+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
-+# provided by doxygen. Whatever the program writes to standard output
- # is used as the file version. See the manual for examples.
-
--FILE_VERSION_FILTER =
-+FILE_VERSION_FILTER =
-+
-+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
-+# by doxygen. The layout file controls the global structure of the generated
-+# output files in an output format independent way. The create the layout file
-+# that represents doxygen's defaults, run doxygen with the -l option.
-+# You can optionally specify a file name after the option, if omitted
-+# DoxygenLayout.xml will be used as the name of the layout file.
-+
-+LAYOUT_FILE =
-
- #---------------------------------------------------------------------------
- # configuration options related to warning and progress messages
- #---------------------------------------------------------------------------
-
--# The QUIET tag can be used to turn on/off the messages that are generated
-+# The QUIET tag can be used to turn on/off the messages that are generated
- # by doxygen. Possible values are YES and NO. If left blank NO is used.
-
- QUIET = NO
-
--# The WARNINGS tag can be used to turn on/off the warning messages that are
--# generated by doxygen. Possible values are YES and NO. If left blank
-+# The WARNINGS tag can be used to turn on/off the warning messages that are
-+# generated by doxygen. Possible values are YES and NO. If left blank
- # NO is used.
-
- WARNINGS = YES
-
--# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
--# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
-+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
-+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
- # automatically be disabled.
-
- WARN_IF_UNDOCUMENTED = YES
-
--# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
--# potential errors in the documentation, such as not documenting some
--# parameters in a documented function, or documenting parameters that
-+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
-+# potential errors in the documentation, such as not documenting some
-+# parameters in a documented function, or documenting parameters that
- # don't exist or using markup commands wrongly.
-
- WARN_IF_DOC_ERROR = YES
-
--# This WARN_NO_PARAMDOC option can be abled to get warnings for
--# functions that are documented, but have no documentation for their parameters
--# or return value. If set to NO (the default) doxygen will only warn about
--# wrong or incomplete parameter documentation, but not about the absence of
-+# This WARN_NO_PARAMDOC option can be abled to get warnings for
-+# functions that are documented, but have no documentation for their parameters
-+# or return value. If set to NO (the default) doxygen will only warn about
-+# wrong or incomplete parameter documentation, but not about the absence of
- # documentation.
-
- WARN_NO_PARAMDOC = NO
-
--# The WARN_FORMAT tag determines the format of the warning messages that
--# doxygen can produce. The string should contain the $file, $line, and $text
--# tags, which will be replaced by the file and line number from which the
--# warning originated and the warning text. Optionally the format may contain
--# $version, which will be replaced by the version of the file (if it could
-+# The WARN_FORMAT tag determines the format of the warning messages that
-+# doxygen can produce. The string should contain the $file, $line, and $text
-+# tags, which will be replaced by the file and line number from which the
-+# warning originated and the warning text. Optionally the format may contain
-+# $version, which will be replaced by the version of the file (if it could
- # be obtained via FILE_VERSION_FILTER)
-
- WARN_FORMAT = "$file:$line: $text"
-
--# The WARN_LOGFILE tag can be used to specify a file to which warning
--# and error messages should be written. If left blank the output is written
-+# The WARN_LOGFILE tag can be used to specify a file to which warning
-+# and error messages should be written. If left blank the output is written
- # to stderr.
-
- WARN_LOGFILE = htmldocs.log
-@@ -454,98 +576,117 @@
- # configuration options related to the input files
- #---------------------------------------------------------------------------
-
--# The INPUT tag can be used to specify the files and/or directories that contain
--# documented source files. You may enter file names like "myfile.cpp" or
--# directories like "/usr/src/myproject". Separate the files or directories
-+# The INPUT tag can be used to specify the files and/or directories that contain
-+# documented source files. You may enter file names like "myfile.cpp" or
-+# directories like "/usr/src/myproject". Separate the files or directories
- # with spaces.
-
- INPUT = @DOXYGEN_INPUT_DIR@
-
--# If the value of the INPUT tag contains directories, you can use the
--# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
--# and *.h) to filter out the source-files in the directories. If left
--# blank the following patterns are tested:
--# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
--# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
-+# This tag can be used to specify the character encoding of the source files
-+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-+# also the default input encoding. Doxygen uses libiconv (or the iconv built
-+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
-+# the list of possible encodings.
-+
-+INPUT_ENCODING = UTF-8
-+
-+# If the value of the INPUT tag contains directories, you can use the
-+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-+# and *.h) to filter out the source-files in the directories. If left
-+# blank the following patterns are tested:
-+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
-+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
-
- FILE_PATTERNS = *.h \
- *.man \
- *.dox
-
--# The RECURSIVE tag can be used to turn specify whether or not subdirectories
--# should be searched for input files as well. Possible values are YES and NO.
-+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
-+# should be searched for input files as well. Possible values are YES and NO.
- # If left blank NO is used.
-
- RECURSIVE = YES
-
--# The EXCLUDE tag can be used to specify files and/or directories that should
--# excluded from the INPUT source files. This way you can easily exclude a
-+# The EXCLUDE tag can be used to specify files and/or directories that should
-+# excluded from the INPUT source files. This way you can easily exclude a
- # subdirectory from a directory tree whose root is specified with the INPUT tag.
-
- EXCLUDE = @DOXYGEN_INPUT_DIR@/config/include \
- @DOXYGEN_INPUT_DIR@/docs
-
--# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
--# directories that are symbolic links (a Unix filesystem feature) are excluded
-+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
-+# directories that are symbolic links (a Unix filesystem feature) are excluded
- # from the input.
-
- EXCLUDE_SYMLINKS = NO
-
--# If the value of the INPUT tag contains directories, you can use the
--# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
--# certain files from those directories. Note that the wildcards are matched
--# against the file with absolute path, so to exclude all test directories
-+# If the value of the INPUT tag contains directories, you can use the
-+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-+# certain files from those directories. Note that the wildcards are matched
-+# against the file with absolute path, so to exclude all test directories
- # for example use the pattern */test/*
-
--EXCLUDE_PATTERNS =
-+EXCLUDE_PATTERNS =
-+
-+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
-+# (namespaces, classes, functions, etc.) that should be excluded from the
-+# output. The symbol name can be a fully qualified name, a word, or if the
-+# wildcard * is used, a substring. Examples: ANamespace, AClass,
-+# AClass::ANamespace, ANamespace::*Test
-+
-+EXCLUDE_SYMBOLS =
-
--# The EXAMPLE_PATH tag can be used to specify one or more files or
--# directories that contain example code fragments that are included (see
-+# The EXAMPLE_PATH tag can be used to specify one or more files or
-+# directories that contain example code fragments that are included (see
- # the \include command).
-
- EXAMPLE_PATH = @DOXYGEN_INPUT_DIR@
-
--# If the value of the EXAMPLE_PATH tag contains directories, you can use the
--# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
--# and *.h) to filter out the source-files in the directories. If left
-+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-+# and *.h) to filter out the source-files in the directories. If left
- # blank all files are included.
-
--EXAMPLE_PATTERNS =
-+EXAMPLE_PATTERNS =
-
--# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
--# searched for input files to be used with the \include or \dontinclude
--# commands irrespective of the value of the RECURSIVE tag.
-+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-+# searched for input files to be used with the \include or \dontinclude
-+# commands irrespective of the value of the RECURSIVE tag.
- # Possible values are YES and NO. If left blank NO is used.
-
- EXAMPLE_RECURSIVE = YES
-
--# The IMAGE_PATH tag can be used to specify one or more files or
--# directories that contain image that are included in the documentation (see
-+# The IMAGE_PATH tag can be used to specify one or more files or
-+# directories that contain image that are included in the documentation (see
- # the \image command).
-
--IMAGE_PATH =
-+IMAGE_PATH =
-
--# The INPUT_FILTER tag can be used to specify a program that doxygen should
--# invoke to filter for each input file. Doxygen will invoke the filter program
--# by executing (via popen()) the command <filter> <input-file>, where <filter>
--# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
--# input file. Doxygen will then use the output that the filter program writes
--# to standard output. If FILTER_PATTERNS is specified, this tag will be
-+# The INPUT_FILTER tag can be used to specify a program that doxygen should
-+# invoke to filter for each input file. Doxygen will invoke the filter program
-+# by executing (via popen()) the command <filter> <input-file>, where <filter>
-+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
-+# input file. Doxygen will then use the output that the filter program writes
-+# to standard output.
-+# If FILTER_PATTERNS is specified, this tag will be
- # ignored.
-
--INPUT_FILTER =
-+INPUT_FILTER =
-
--# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
--# basis. Doxygen will compare the file name with each pattern and apply the
--# filter if there is a match. The filters are a list of the form:
--# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
--# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
-+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-+# basis.
-+# Doxygen will compare the file name with each pattern and apply the
-+# filter if there is a match.
-+# The filters are a list of the form:
-+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
-+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
- # is applied to all files.
-
--FILTER_PATTERNS =
-+FILTER_PATTERNS =
-
--# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
--# INPUT_FILTER) will be used to filter the input files when producing source
-+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-+# INPUT_FILTER) will be used to filter the input files when producing source
- # files to browse (i.e. when SOURCE_BROWSER is set to YES).
-
- FILTER_SOURCE_FILES = NO
-@@ -554,32 +695,32 @@
- # configuration options related to source browsing
- #---------------------------------------------------------------------------
-
--# If the SOURCE_BROWSER tag is set to YES then a list of source files will
--# be generated. Documented entities will be cross-referenced with these sources.
--# Note: To get rid of all source code in the generated output, make sure also
-+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
-+# be generated. Documented entities will be cross-referenced with these sources.
-+# Note: To get rid of all source code in the generated output, make sure also
- # VERBATIM_HEADERS is set to NO.
-
- SOURCE_BROWSER = YES
-
--# Setting the INLINE_SOURCES tag to YES will include the body
-+# Setting the INLINE_SOURCES tag to YES will include the body
- # of functions and classes directly in the documentation.
-
- INLINE_SOURCES = NO
-
--# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
--# doxygen to hide any special comment blocks from generated source code
-+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
-+# doxygen to hide any special comment blocks from generated source code
- # fragments. Normal C and C++ comments will always remain visible.
-
- STRIP_CODE_COMMENTS = YES
-
--# If the REFERENCED_BY_RELATION tag is set to YES (the default)
--# then for each documented function all documented
-+# If the REFERENCED_BY_RELATION tag is set to YES
-+# then for each documented function all documented
- # functions referencing it will be listed.
-
- REFERENCED_BY_RELATION = YES
-
--# If the REFERENCES_RELATION tag is set to YES (the default)
--# then for each documented function all documented entities
-+# If the REFERENCES_RELATION tag is set to YES
-+# then for each documented function all documented entities
- # called/used by that function will be listed.
-
- REFERENCES_RELATION = YES
-@@ -587,20 +728,21 @@
- # If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
- # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
- # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
--# link to the source code. Otherwise they will link to the documentation.
-+# link to the source code.
-+# Otherwise they will link to the documentation.
-
- REFERENCES_LINK_SOURCE = YES
-
--# If the USE_HTAGS tag is set to YES then the references to source code
--# will point to the HTML generated by the htags(1) tool instead of doxygen
--# built-in source browser. The htags tool is part of GNU's global source
--# tagging system (see http://www.gnu.org/software/global/global.html). You
-+# If the USE_HTAGS tag is set to YES then the references to source code
-+# will point to the HTML generated by the htags(1) tool instead of doxygen
-+# built-in source browser. The htags tool is part of GNU's global source
-+# tagging system (see http://www.gnu.org/software/global/global.html). You
- # will need version 4.8.6 or higher.
-
- USE_HTAGS = NO
-
--# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
--# will generate a verbatim copy of the header file for each class for
-+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
-+# will generate a verbatim copy of the header file for each class for
- # which an include is specified. Set to NO to disable this.
-
- VERBATIM_HEADERS = YES
-@@ -609,279 +751,488 @@
- # configuration options related to the alphabetical class index
- #---------------------------------------------------------------------------
-
--# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
--# of all compounds will be generated. Enable this if the project
-+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
-+# of all compounds will be generated. Enable this if the project
- # contains a lot of classes, structs, unions or interfaces.
-
- ALPHABETICAL_INDEX = YES
-
--# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
--# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
-+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
-+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
- # in which this list will be split (can be a number in the range [1..20])
-
- COLS_IN_ALPHA_INDEX = 3
-
--# In case all classes in a project start with a common prefix, all
--# classes will be put under the same header in the alphabetical index.
--# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
-+# In case all classes in a project start with a common prefix, all
-+# classes will be put under the same header in the alphabetical index.
-+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
- # should be ignored while generating the index headers.
-
--IGNORE_PREFIX =
-+IGNORE_PREFIX =
-
- #---------------------------------------------------------------------------
- # configuration options related to the HTML output
- #---------------------------------------------------------------------------
-
--# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
-+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
- # generate HTML output.
-
- GENERATE_HTML = YES
-
--# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
--# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
-+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
- # put in front of it. If left blank `html' will be used as the default path.
-
- HTML_OUTPUT = htmldocs
-
--# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
--# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
-+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
-+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
- # doxygen will generate files with .html extension.
-
- HTML_FILE_EXTENSION = .html
-
--# The HTML_HEADER tag can be used to specify a personal HTML header for
--# each generated HTML page. If it is left blank doxygen will generate a
-+# The HTML_HEADER tag can be used to specify a personal HTML header for
-+# each generated HTML page. If it is left blank doxygen will generate a
- # standard header.
-
--HTML_HEADER =
-+HTML_HEADER =
-
--# The HTML_FOOTER tag can be used to specify a personal HTML footer for
--# each generated HTML page. If it is left blank doxygen will generate a
-+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
-+# each generated HTML page. If it is left blank doxygen will generate a
- # standard footer.
-
- HTML_FOOTER = @DOXYGEN_DATA_DIR@/footer.html
-
--# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
--# style sheet that is used by each HTML page. It can be used to
--# fine-tune the look of the HTML output. If the tag is left blank doxygen
--# will generate a default style sheet. Note that doxygen will try to copy
--# the style sheet file to the HTML output directory, so don't put your own
-+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
-+# style sheet that is used by each HTML page. It can be used to
-+# fine-tune the look of the HTML output. If the tag is left blank doxygen
-+# will generate a default style sheet. Note that doxygen will try to copy
-+# the style sheet file to the HTML output directory, so don't put your own
- # stylesheet in the HTML output directory as well, or it will be erased!
-
--HTML_STYLESHEET =
-+HTML_STYLESHEET =
-+
-+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
-+# Doxygen will adjust the colors in the stylesheet and background images
-+# according to this color. Hue is specified as an angle on a colorwheel,
-+# see http://en.wikipedia.org/wiki/Hue for more information.
-+# For instance the value 0 represents red, 60 is yellow, 120 is green,
-+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
-+# The allowed range is 0 to 359.
-+
-+HTML_COLORSTYLE_HUE = 220
-+
-+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
-+# the colors in the HTML output. For a value of 0 the output will use
-+# grayscales only. A value of 255 will produce the most vivid colors.
-
--# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
--# files or namespaces will be aligned in HTML using tables. If set to
-+HTML_COLORSTYLE_SAT = 100
-+
-+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
-+# the luminance component of the colors in the HTML output. Values below
-+# 100 gradually make the output lighter, whereas values above 100 make
-+# the output darker. The value divided by 100 is the actual gamma applied,
-+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
-+# and 100 does not change the gamma.
-+
-+HTML_COLORSTYLE_GAMMA = 80
-+
-+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
-+# page will contain the date and time when the page was generated. Setting
-+# this to NO can help when comparing the output of multiple runs.
-+
-+HTML_TIMESTAMP = YES
-+
-+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
-+# files or namespaces will be aligned in HTML using tables. If set to
- # NO a bullet list will be used.
-
- HTML_ALIGN_MEMBERS = YES
-
--# If the GENERATE_HTMLHELP tag is set to YES, additional index files
--# will be generated that can be used as input for tools like the
--# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
-+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
-+# documentation will contain sections that can be hidden and shown after the
-+# page has loaded. For this to work a browser that supports
-+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
-+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
-+
-+HTML_DYNAMIC_SECTIONS = NO
-+
-+# If the GENERATE_DOCSET tag is set to YES, additional index files
-+# will be generated that can be used as input for Apple's Xcode 3
-+# integrated development environment, introduced with OSX 10.5 (Leopard).
-+# To create a documentation set, doxygen will generate a Makefile in the
-+# HTML output directory. Running make will produce the docset in that
-+# directory and running "make install" will install the docset in
-+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
-+# it at startup.
-+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
-+# for more information.
-+
-+GENERATE_DOCSET = NO
-+
-+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
-+# feed. A documentation feed provides an umbrella under which multiple
-+# documentation sets from a single provider (such as a company or product suite)
-+# can be grouped.
-+
-+DOCSET_FEEDNAME = "Doxygen generated docs"
-+
-+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
-+# should uniquely identify the documentation set bundle. This should be a
-+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
-+# will append .docset to the name.
-+
-+DOCSET_BUNDLE_ID = org.doxygen.Project
-+
-+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify
-+# the documentation publisher. This should be a reverse domain-name style
-+# string, e.g. com.mycompany.MyDocSet.documentation.
-+
-+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
-+
-+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
-+
-+DOCSET_PUBLISHER_NAME = Publisher
-+
-+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
-+# will be generated that can be used as input for tools like the
-+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
- # of the generated HTML documentation.
-
- GENERATE_HTMLHELP = NO
-
--# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
--# be used to specify the file name of the resulting .chm file. You
--# can add a path in front of the file if the result should not be
-+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
-+# be used to specify the file name of the resulting .chm file. You
-+# can add a path in front of the file if the result should not be
- # written to the html output directory.
-
- CHM_FILE = dcmtk354.chm
-
--# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
--# be used to specify the location (absolute path including file name) of
--# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
-+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
-+# be used to specify the location (absolute path including file name) of
-+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
- # the HTML help compiler on the generated index.hhp.
-
--HHC_LOCATION =
-+HHC_LOCATION =
-
--# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
--# controls if a separate .chi index file is generated (YES) or that
-+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
-+# controls if a separate .chi index file is generated (YES) or that
- # it should be included in the master .chm file (NO).
-
- GENERATE_CHI = NO
-
--# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
--# controls whether a binary table of contents is generated (YES) or a
-+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
-+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
-+# content.
-+
-+CHM_INDEX_ENCODING =
-+
-+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
-+# controls whether a binary table of contents is generated (YES) or a
- # normal table of contents (NO) in the .chm file.
-
- BINARY_TOC = NO
-
--# The TOC_EXPAND flag can be set to YES to add extra items for group members
-+# The TOC_EXPAND flag can be set to YES to add extra items for group members
- # to the contents of the HTML help documentation and to the tree view.
-
- TOC_EXPAND = YES
-
--# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
--# top of each HTML page. The value NO (the default) enables the index and
-+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
-+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
-+# that can be used as input for Qt's qhelpgenerator to generate a
-+# Qt Compressed Help (.qch) of the generated HTML documentation.
-+
-+GENERATE_QHP = NO
-+
-+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
-+# be used to specify the file name of the resulting .qch file.
-+# The path specified is relative to the HTML output folder.
-+
-+QCH_FILE =
-+
-+# The QHP_NAMESPACE tag specifies the namespace to use when generating
-+# Qt Help Project output. For more information please see
-+# http://doc.trolltech.com/qthelpproject.html#namespace
-+
-+QHP_NAMESPACE = org.doxygen.Project
-+
-+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
-+# Qt Help Project output. For more information please see
-+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
-+
-+QHP_VIRTUAL_FOLDER = doc
-+
-+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
-+# add. For more information please see
-+# http://doc.trolltech.com/qthelpproject.html#custom-filters
-+
-+QHP_CUST_FILTER_NAME =
-+
-+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
-+# custom filter to add. For more information please see
-+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
-+# Qt Help Project / Custom Filters</a>.
-+
-+QHP_CUST_FILTER_ATTRS =
-+
-+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
-+# project's
-+# filter section matches.
-+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
-+# Qt Help Project / Filter Attributes</a>.
-+
-+QHP_SECT_FILTER_ATTRS =
-+
-+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
-+# be used to specify the location of Qt's qhelpgenerator.
-+# If non-empty doxygen will try to run qhelpgenerator on the generated
-+# .qhp file.
-+
-+QHG_LOCATION =
-+
-+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
-+# will be generated, which together with the HTML files, form an Eclipse help
-+# plugin. To install this plugin and make it available under the help contents
-+# menu in Eclipse, the contents of the directory containing the HTML and XML
-+# files needs to be copied into the plugins directory of eclipse. The name of
-+# the directory within the plugins directory should be the same as
-+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
-+# the help appears.
-+
-+GENERATE_ECLIPSEHELP = NO
-+
-+# A unique identifier for the eclipse help plugin. When installing the plugin
-+# the directory name containing the HTML and XML files should also have
-+# this name.
-+
-+ECLIPSE_DOC_ID = org.doxygen.Project
-+
-+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
-+# top of each HTML page. The value NO (the default) enables the index and
- # the value YES disables it.
-
- DISABLE_INDEX = NO
-
--# This tag can be used to set the number of enum values (range [1..20])
-+# This tag can be used to set the number of enum values (range [1..20])
- # that doxygen will group on one line in the generated HTML documentation.
-
- ENUM_VALUES_PER_LINE = 4
-
--# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
--# generated containing a tree-like index structure (just like the one that
--# is generated for HTML Help). For this to work a browser that supports
--# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
--# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
--# probably better off using the HTML help feature.
-+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
-+# structure should be generated to display hierarchical information.
-+# If the tag value is set to YES, a side panel will be generated
-+# containing a tree-like index structure (just like the one that
-+# is generated for HTML Help). For this to work a browser that supports
-+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
-+# Windows users are probably better off using the HTML help feature.
-
- GENERATE_TREEVIEW = NO
-
--# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
--# used to set the initial width (in pixels) of the frame in which the tree
-+# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
-+# and Class Hierarchy pages using a tree view instead of an ordered list.
-+
-+USE_INLINE_TREES = NO
-+
-+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
-+# used to set the initial width (in pixels) of the frame in which the tree
- # is shown.
-
- TREEVIEW_WIDTH = 250
-
-+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
-+# links to external symbols imported via tag files in a separate window.
-+
-+EXT_LINKS_IN_WINDOW = NO
-+
-+# Use this tag to change the font size of Latex formulas included
-+# as images in the HTML documentation. The default is 10. Note that
-+# when you change the font size after a successful doxygen run you need
-+# to manually remove any form_*.png images from the HTML output directory
-+# to force them to be regenerated.
-+
-+FORMULA_FONTSIZE = 10
-+
-+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
-+# generated for formulas are transparent PNGs. Transparent PNGs are
-+# not supported properly for IE 6.0, but are supported on all modern browsers.
-+# Note that when changing this option you need to delete any form_*.png files
-+# in the HTML output before the changes have effect.
-+
-+FORMULA_TRANSPARENT = YES
-+
-+# When the SEARCHENGINE tag is enabled doxygen will generate a search box
-+# for the HTML output. The underlying search engine uses javascript
-+# and DHTML and should work on any modern browser. Note that when using
-+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
-+# (GENERATE_DOCSET) there is already a search function so this one should
-+# typically be disabled. For large projects the javascript based search engine
-+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
-+
-+SEARCHENGINE = NO
-+
-+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
-+# implemented using a PHP enabled web server instead of at the web client
-+# using Javascript. Doxygen will generate the search PHP script and index
-+# file to put on the web server. The advantage of the server
-+# based approach is that it scales better to large projects and allows
-+# full text search. The disadvances is that it is more difficult to setup
-+# and does not have live searching capabilities.
-+
-+SERVER_BASED_SEARCH = NO
-+
- #---------------------------------------------------------------------------
- # configuration options related to the LaTeX output
- #---------------------------------------------------------------------------
-
--# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
-+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
- # generate Latex output.
-
- GENERATE_LATEX = NO
-
--# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
--# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
-+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
- # put in front of it. If left blank `latex' will be used as the default path.
-
- LATEX_OUTPUT = latex
-
--# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
- # invoked. If left blank `latex' will be used as the default command name.
-+# Note that when enabling USE_PDFLATEX this option is only used for
-+# generating bitmaps for formulas in the HTML output, but not in the
-+# Makefile that is written to the output directory.
-
- LATEX_CMD_NAME = latex
-
--# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
--# generate index for LaTeX. If left blank `makeindex' will be used as the
-+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
-+# generate index for LaTeX. If left blank `makeindex' will be used as the
- # default command name.
-
- MAKEINDEX_CMD_NAME = makeindex
-
--# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
--# LaTeX documents. This may be useful for small projects and may help to
-+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
-+# LaTeX documents. This may be useful for small projects and may help to
- # save some trees in general.
-
- COMPACT_LATEX = NO
-
--# The PAPER_TYPE tag can be used to set the paper type that is used
--# by the printer. Possible values are: a4, a4wide, letter, legal and
-+# The PAPER_TYPE tag can be used to set the paper type that is used
-+# by the printer. Possible values are: a4, a4wide, letter, legal and
- # executive. If left blank a4wide will be used.
-
- PAPER_TYPE = a4wide
-
--# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
-+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
- # packages that should be included in the LaTeX output.
-
--EXTRA_PACKAGES =
-+EXTRA_PACKAGES =
-
--# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
--# the generated latex document. The header should contain everything until
--# the first chapter. If it is left blank doxygen will generate a
-+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
-+# the generated latex document. The header should contain everything until
-+# the first chapter. If it is left blank doxygen will generate a
- # standard header. Notice: only use this tag if you know what you are doing!
-
--LATEX_HEADER =
-+LATEX_HEADER =
-
--# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
--# is prepared for conversion to pdf (using ps2pdf). The pdf file will
--# contain links (just like the HTML output) instead of page references
-+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
-+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
-+# contain links (just like the HTML output) instead of page references
- # This makes the output suitable for online browsing using a pdf viewer.
-
- PDF_HYPERLINKS = YES
-
--# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
--# plain latex in the generated Makefile. Set this option to YES to get a
-+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
-+# plain latex in the generated Makefile. Set this option to YES to get a
- # higher quality PDF documentation.
-
- USE_PDFLATEX = NO
-
--# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
--# command to the generated LaTeX files. This will instruct LaTeX to keep
--# running if errors occur, instead of asking the user for help.
-+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
-+# command to the generated LaTeX files. This will instruct LaTeX to keep
-+# running if errors occur, instead of asking the user for help.
- # This option is also used when generating formulas in HTML.
-
- LATEX_BATCHMODE = YES
-
--# If LATEX_HIDE_INDICES is set to YES then doxygen will not
--# include the index chapters (such as File Index, Compound Index, etc.)
-+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
-+# include the index chapters (such as File Index, Compound Index, etc.)
- # in the output.
-
- LATEX_HIDE_INDICES = NO
-
-+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
-+# source code with syntax highlighting in the LaTeX output.
-+# Note that which sources are shown also depends on other settings
-+# such as SOURCE_BROWSER.
-+
-+LATEX_SOURCE_CODE = NO
-+
- #---------------------------------------------------------------------------
- # configuration options related to the RTF output
- #---------------------------------------------------------------------------
-
--# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
--# The RTF output is optimized for Word 97 and may not look very pretty with
-+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
-+# The RTF output is optimized for Word 97 and may not look very pretty with
- # other RTF readers or editors.
-
- GENERATE_RTF = NO
-
--# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
--# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
-+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
- # put in front of it. If left blank `rtf' will be used as the default path.
-
- RTF_OUTPUT = rtf
-
--# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
--# RTF documents. This may be useful for small projects and may help to
-+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
-+# RTF documents. This may be useful for small projects and may help to
- # save some trees in general.
-
- COMPACT_RTF = NO
-
--# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
--# will contain hyperlink fields. The RTF file will
--# contain links (just like the HTML output) instead of page references.
--# This makes the output suitable for online browsing using WORD or other
--# programs which support those fields.
-+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
-+# will contain hyperlink fields. The RTF file will
-+# contain links (just like the HTML output) instead of page references.
-+# This makes the output suitable for online browsing using WORD or other
-+# programs which support those fields.
- # Note: wordpad (write) and others do not support links.
-
- RTF_HYPERLINKS = NO
-
--# Load stylesheet definitions from file. Syntax is similar to doxygen's
--# config file, i.e. a series of assignments. You only have to provide
-+# Load stylesheet definitions from file. Syntax is similar to doxygen's
-+# config file, i.e. a series of assignments. You only have to provide
- # replacements, missing definitions are set to their default value.
-
--RTF_STYLESHEET_FILE =
-+RTF_STYLESHEET_FILE =
-
--# Set optional variables used in the generation of an rtf document.
-+# Set optional variables used in the generation of an rtf document.
- # Syntax is similar to doxygen's config file.
-
--RTF_EXTENSIONS_FILE =
-+RTF_EXTENSIONS_FILE =
-
- #---------------------------------------------------------------------------
- # configuration options related to the man page output
- #---------------------------------------------------------------------------
-
--# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
-+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
- # generate man pages
-
- GENERATE_MAN = NO
-
--# The MAN_OUTPUT tag is used to specify where the man pages will be put.
--# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
-+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
- # put in front of it. If left blank `man' will be used as the default path.
-
- MAN_OUTPUT = man
-
--# The MAN_EXTENSION tag determines the extension that is added to
-+# The MAN_EXTENSION tag determines the extension that is added to
- # the generated man pages (default is the subroutine's section .3)
-
- MAN_EXTENSION = .3
-
--# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
--# then it will generate one additional man file for each entity
--# documented in the real man page(s). These additional files
--# only source the real man page, but without them the man command
-+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
-+# then it will generate one additional man file for each entity
-+# documented in the real man page(s). These additional files
-+# only source the real man page, but without them the man command
- # would be unable to find the correct page. The default is NO.
-
- MAN_LINKS = NO
-@@ -890,33 +1241,33 @@
- # configuration options related to the XML output
- #---------------------------------------------------------------------------
-
--# If the GENERATE_XML tag is set to YES Doxygen will
--# generate an XML file that captures the structure of
-+# If the GENERATE_XML tag is set to YES Doxygen will
-+# generate an XML file that captures the structure of
- # the code including all documentation.
-
- GENERATE_XML = NO
-
--# The XML_OUTPUT tag is used to specify where the XML pages will be put.
--# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
-+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
- # put in front of it. If left blank `xml' will be used as the default path.
-
- XML_OUTPUT = xml
-
--# The XML_SCHEMA tag can be used to specify an XML schema,
--# which can be used by a validating XML parser to check the
-+# The XML_SCHEMA tag can be used to specify an XML schema,
-+# which can be used by a validating XML parser to check the
- # syntax of the XML files.
-
--XML_SCHEMA =
-+XML_SCHEMA =
-
--# The XML_DTD tag can be used to specify an XML DTD,
--# which can be used by a validating XML parser to check the
-+# The XML_DTD tag can be used to specify an XML DTD,
-+# which can be used by a validating XML parser to check the
- # syntax of the XML files.
-
--XML_DTD =
-+XML_DTD =
-
--# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
--# dump the program listings (including syntax highlighting
--# and cross-referencing information) to the XML output. Note that
-+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
-+# dump the program listings (including syntax highlighting
-+# and cross-referencing information) to the XML output. Note that
- # enabling this will significantly increase the size of the XML output.
-
- XML_PROGRAMLISTING = YES
-@@ -925,10 +1276,10 @@
- # configuration options for the AutoGen Definitions output
- #---------------------------------------------------------------------------
-
--# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
--# generate an AutoGen Definitions (see autogen.sf.net) file
--# that captures the structure of the code including all
--# documentation. Note that this feature is still experimental
-+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
-+# generate an AutoGen Definitions (see autogen.sf.net) file
-+# that captures the structure of the code including all
-+# documentation. Note that this feature is still experimental
- # and incomplete at the moment.
-
- GENERATE_AUTOGEN_DEF = NO
-@@ -937,82 +1288,84 @@
- # configuration options related to the Perl module output
- #---------------------------------------------------------------------------
-
--# If the GENERATE_PERLMOD tag is set to YES Doxygen will
--# generate a Perl module file that captures the structure of
--# the code including all documentation. Note that this
--# feature is still experimental and incomplete at the
-+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
-+# generate a Perl module file that captures the structure of
-+# the code including all documentation. Note that this
-+# feature is still experimental and incomplete at the
- # moment.
-
- GENERATE_PERLMOD = NO
-
--# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
--# the necessary Makefile rules, Perl scripts and LaTeX code to be able
-+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
-+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
- # to generate PDF and DVI output from the Perl module output.
-
- PERLMOD_LATEX = NO
-
--# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
--# nicely formatted so it can be parsed by a human reader. This is useful
--# if you want to understand what is going on. On the other hand, if this
--# tag is set to NO the size of the Perl module output will be much smaller
-+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
-+# nicely formatted so it can be parsed by a human reader.
-+# This is useful
-+# if you want to understand what is going on.
-+# On the other hand, if this
-+# tag is set to NO the size of the Perl module output will be much smaller
- # and Perl will parse it just the same.
-
- PERLMOD_PRETTY = YES
-
--# The names of the make variables in the generated doxyrules.make file
--# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
--# This is useful so different doxyrules.make files included by the same
-+# The names of the make variables in the generated doxyrules.make file
-+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
-+# This is useful so different doxyrules.make files included by the same
- # Makefile don't overwrite each other's variables.
-
--PERLMOD_MAKEVAR_PREFIX =
-+PERLMOD_MAKEVAR_PREFIX =
-
- #---------------------------------------------------------------------------
--# Configuration options related to the preprocessor
-+# Configuration options related to the preprocessor
- #---------------------------------------------------------------------------
-
--# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
--# evaluate all C-preprocessor directives found in the sources and include
-+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
-+# evaluate all C-preprocessor directives found in the sources and include
- # files.
-
- ENABLE_PREPROCESSING = YES
-
--# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
--# names in the source code. If set to NO (the default) only conditional
--# compilation will be performed. Macro expansion can be done in a controlled
-+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
-+# names in the source code. If set to NO (the default) only conditional
-+# compilation will be performed. Macro expansion can be done in a controlled
- # way by setting EXPAND_ONLY_PREDEF to YES.
-
- MACRO_EXPANSION = NO
-
--# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
--# then the macro expansion is limited to the macros specified with the
-+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
-+# then the macro expansion is limited to the macros specified with the
- # PREDEFINED and EXPAND_AS_DEFINED tags.
-
- EXPAND_ONLY_PREDEF = NO
-
--# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
-+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
- # in the INCLUDE_PATH (see below) will be search if a #include is found.
-
- SEARCH_INCLUDES = YES
-
--# The INCLUDE_PATH tag can be used to specify one or more directories that
--# contain include files that are not input files but should be processed by
-+# The INCLUDE_PATH tag can be used to specify one or more directories that
-+# contain include files that are not input files but should be processed by
- # the preprocessor.
-
--INCLUDE_PATH =
-+INCLUDE_PATH =
-
--# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
--# patterns (like *.h and *.hpp) to filter out the header-files in the
--# directories. If left blank, the patterns specified with FILE_PATTERNS will
-+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-+# patterns (like *.h and *.hpp) to filter out the header-files in the
-+# directories. If left blank, the patterns specified with FILE_PATTERNS will
- # be used.
-
--INCLUDE_FILE_PATTERNS =
-+INCLUDE_FILE_PATTERNS =
-
--# The PREDEFINED tag can be used to specify one or more macro names that
--# are defined before the preprocessor is started (similar to the -D option of
--# gcc). The argument of the tag is a list of macros of the form: name
--# or name=definition (no spaces). If the definition and the = are
--# omitted =1 is assumed. To prevent a macro definition from being
--# undefined via #undef or recursively expanded use the := operator
-+# The PREDEFINED tag can be used to specify one or more macro names that
-+# are defined before the preprocessor is started (similar to the -D option of
-+# gcc). The argument of the tag is a list of macros of the form: name
-+# or name=definition (no spaces). If the definition and the = are
-+# omitted =1 is assumed. To prevent a macro definition from being
-+# undefined via #undef or recursively expanded use the := operator
- # instead of the = operator.
-
- PREDEFINED = WITH_OPENSSL \
-@@ -1104,7 +1457,7 @@
- # toolkit from AT&T and Lucent Bell Labs. The other options in this section
- # have no effect if this option is set to NO (the default)
-
--HAVE_DOT = NO
-+HAVE_DOT = YES
-
- # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
- # will generate a graph for each documented class showing the direct and
-@@ -1182,7 +1535,7 @@
- # generated by dot. Possible values are png, jpg, or gif
- # If left blank png will be used.
-
--DOT_IMAGE_FORMAT = png
-+DOT_IMAGE_FORMAT = svg
-
- # The tag DOT_PATH can be used to specify the path where the dot tool can be
- # found. If left blank, it is assumed the dot tool can be found in the path.