Gentoo Archives: gentoo-commits

From: Horea Christian <horea.christ@×××××.com>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/sci:master commit in: patches/
Date: Fri, 09 Oct 2020 10:41:38
Message-Id: 1602240053.b414dcb4aeff8ee5d9e81560b4090dc185e72000.chymera@gentoo
1 commit: b414dcb4aeff8ee5d9e81560b4090dc185e72000
2 Author: Horea Christian <chr <AT> chymera <DOT> eu>
3 AuthorDate: Fri Oct 9 10:40:53 2020 +0000
4 Commit: Horea Christian <horea.christ <AT> gmail <DOT> com>
5 CommitDate: Fri Oct 9 10:40:53 2020 +0000
6 URL: https://gitweb.gentoo.org/proj/sci.git/commit/?id=b414dcb4
7
8 patchers: removed patches directory for packages distributed by ::gentoo
9
10 Signed-off-by: Horea Christian <chr <AT> chymera.eu>
11
12 ...cfs-move-mdd-ofd-proc-handling-to-seq_fil.patch | 2082 --------------------
13 patches/07_doxygen.patch | 1804 -----------------
14 2 files changed, 3886 deletions(-)
15
16 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
17 deleted file mode 100644
18 index 813446c38..000000000
19 --- a/patches/0002-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
20 +++ /dev/null
21 @@ -1,2082 +0,0 @@
22 -From 9071634fd9db37a6121fdfbd817162f782661202 Mon Sep 17 00:00:00 2001
23 -From: James Simmons <uja.ornl@×××××.com>
24 -Date: Mon, 5 May 2014 10:02:21 -0400
25 -Subject: [PATCH 2/3] LU-3319 procfs: move mdd/ofd proc handling to seq_files
26 -
27 -With 3.10 linux kernel and above proc handling now only
28 -uses struct seq_files. This patch migrates the mdd/ofd
29 -layer proc entries over to using seq_files.
30 -
31 -Signed-off-by: James Simmons <uja.ornl@×××××.com>
32 -Change-Id: I61b7df6bfd5efd0f12e3ca1a1813b7b62d493168
33 ----
34 - lustre/include/lustre_lfsck.h | 6 +-
35 - lustre/lfsck/lfsck_internal.h | 9 +-
36 - lustre/lfsck/lfsck_layout.c | 132 ++++-------
37 - lustre/lfsck/lfsck_lib.c | 88 +++-----
38 - lustre/lfsck/lfsck_namespace.c | 75 ++-----
39 - lustre/mdd/mdd_device.c | 25 +--
40 - lustre/mdd/mdd_internal.h | 1 -
41 - lustre/mdd/mdd_lproc.c | 302 ++++++++++++-------------
42 - lustre/ofd/lproc_ofd.c | 490 +++++++++++++++++++++--------------------
43 - lustre/ofd/ofd_dev.c | 90 ++++----
44 - lustre/ofd/ofd_internal.h | 6 +-
45 - 11 files changed, 543 insertions(+), 681 deletions(-)
46 -
47 -diff --git a/lustre/include/lustre_lfsck.h b/lustre/include/lustre_lfsck.h
48 -index 0d6f666..5adbffe 100644
49 ---- a/lustre/include/lustre_lfsck.h
50 -+++ b/lustre/include/lustre_lfsck.h
51 -@@ -148,12 +148,12 @@ int lfsck_in_notify(const struct lu_env *env, struct dt_device *key,
52 - int lfsck_query(const struct lu_env *env, struct dt_device *key,
53 - struct lfsck_request *lr);
54 -
55 --int lfsck_get_speed(struct dt_device *key, void *buf, int len);
56 -+int lfsck_get_speed(struct seq_file *m, struct dt_device *key);
57 - int lfsck_set_speed(struct dt_device *key, int val);
58 --int lfsck_get_windows(struct dt_device *key, void *buf, int len);
59 -+int lfsck_get_windows(struct seq_file *m, struct dt_device *key);
60 - int lfsck_set_windows(struct dt_device *key, int val);
61 -
62 --int lfsck_dump(struct dt_device *key, void *buf, int len, enum lfsck_type type);
63 -+int lfsck_dump(struct seq_file *m, struct dt_device *key, enum lfsck_type type);
64 -
65 - static inline void lfsck_pack_rfa(struct lfsck_request *lr,
66 - const struct lu_fid *fid)
67 -diff --git a/lustre/lfsck/lfsck_internal.h b/lustre/lfsck/lfsck_internal.h
68 -index 24b84ae..203ad74 100644
69 ---- a/lustre/lfsck/lfsck_internal.h
70 -+++ b/lustre/lfsck/lfsck_internal.h
71 -@@ -303,8 +303,7 @@ struct lfsck_operations {
72 -
73 - int (*lfsck_dump)(const struct lu_env *env,
74 - struct lfsck_component *com,
75 -- char *buf,
76 -- int len);
77 -+ struct seq_file *m);
78 -
79 - int (*lfsck_double_scan)(const struct lu_env *env,
80 - struct lfsck_component *com);
81 -@@ -590,10 +589,10 @@ void lfsck_component_cleanup(const struct lu_env *env,
82 - struct lfsck_component *com);
83 - void lfsck_instance_cleanup(const struct lu_env *env,
84 - struct lfsck_instance *lfsck);
85 --int lfsck_bits_dump(char **buf, int *len, int bits, const char *names[],
86 -+int lfsck_bits_dump(struct seq_file *m, int bits, const char *names[],
87 - const char *prefix);
88 --int lfsck_time_dump(char **buf, int *len, __u64 time, const char *prefix);
89 --int lfsck_pos_dump(char **buf, int *len, struct lfsck_position *pos,
90 -+int lfsck_time_dump(struct seq_file *m, __u64 time, const char *prefix);
91 -+int lfsck_pos_dump(struct seq_file *m, struct lfsck_position *pos,
92 - const char *prefix);
93 - void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
94 - struct lfsck_position *pos, bool init);
95 -diff --git a/lustre/lfsck/lfsck_layout.c b/lustre/lfsck/lfsck_layout.c
96 -index ced2e4d..e2df62d 100644
97 ---- a/lustre/lfsck/lfsck_layout.c
98 -+++ b/lustre/lfsck/lfsck_layout.c
99 -@@ -492,7 +492,7 @@ static struct lfsck_rbtree_node *lfsck_rbtree_new(const struct lu_env *env,
100 - return ERR_PTR(-ENOMEM);
101 - }
102 -
103 -- rb_init_node(&lrn->lrn_node);
104 -+ RB_CLEAR_NODE(&lrn->lrn_node);
105 - lrn->lrn_seq = fid_seq(fid);
106 - lrn->lrn_first_oid = fid_oid(fid) & ~LFSCK_RBTREE_BITMAP_MASK;
107 - atomic_set(&lrn->lrn_known_count, 0);
108 -@@ -4873,69 +4873,53 @@ static int lfsck_layout_slave_post(const struct lu_env *env,
109 - }
110 -
111 - static int lfsck_layout_dump(const struct lu_env *env,
112 -- struct lfsck_component *com, char *buf, int len)
113 -+ struct lfsck_component *com, struct seq_file *m)
114 - {
115 - struct lfsck_instance *lfsck = com->lc_lfsck;
116 - struct lfsck_bookmark *bk = &lfsck->li_bookmark_ram;
117 - struct lfsck_layout *lo = com->lc_file_ram;
118 -- int save = len;
119 -- int ret = -ENOSPC;
120 - int rc;
121 -
122 - down_read(&com->lc_sem);
123 -- rc = snprintf(buf, len,
124 -- "name: lfsck_layout\n"
125 -+ seq_printf(m, "name: lfsck_layout\n"
126 - "magic: %#x\n"
127 - "version: %d\n"
128 - "status: %s\n",
129 - lo->ll_magic,
130 - bk->lb_version,
131 - lfsck_status2names(lo->ll_status));
132 -- if (rc <= 0)
133 -- goto out;
134 -
135 -- buf += rc;
136 -- len -= rc;
137 -- rc = lfsck_bits_dump(&buf, &len, lo->ll_flags, lfsck_flags_names,
138 -- "flags");
139 -+ rc = lfsck_bits_dump(m, lo->ll_flags, lfsck_flags_names, "flags");
140 - if (rc < 0)
141 - goto out;
142 -
143 -- rc = lfsck_bits_dump(&buf, &len, bk->lb_param, lfsck_param_names,
144 -- "param");
145 -+ rc = lfsck_bits_dump(m, bk->lb_param, lfsck_param_names, "param");
146 - if (rc < 0)
147 - goto out;
148 -
149 -- rc = lfsck_time_dump(&buf, &len, lo->ll_time_last_complete,
150 -+ rc = lfsck_time_dump(m, lo->ll_time_last_complete,
151 - "time_since_last_completed");
152 - if (rc < 0)
153 - goto out;
154 -
155 -- rc = lfsck_time_dump(&buf, &len, lo->ll_time_latest_start,
156 -+ rc = lfsck_time_dump(m, lo->ll_time_latest_start,
157 - "time_since_latest_start");
158 - if (rc < 0)
159 - goto out;
160 -
161 -- rc = lfsck_time_dump(&buf, &len, lo->ll_time_last_checkpoint,
162 -+ rc = lfsck_time_dump(m, lo->ll_time_last_checkpoint,
163 - "time_since_last_checkpoint");
164 - if (rc < 0)
165 - goto out;
166 -
167 -- rc = snprintf(buf, len,
168 -- "latest_start_position: "LPU64"\n"
169 -+ seq_printf(m, "latest_start_position: "LPU64"\n"
170 - "last_checkpoint_position: "LPU64"\n"
171 - "first_failure_position: "LPU64"\n",
172 - lo->ll_pos_latest_start,
173 - lo->ll_pos_last_checkpoint,
174 - lo->ll_pos_first_inconsistent);
175 -- if (rc <= 0)
176 -- goto out;
177 -
178 -- buf += rc;
179 -- len -= rc;
180 --
181 -- rc = snprintf(buf, len,
182 -- "success_count: %u\n"
183 -+ seq_printf(m, "success_count: %u\n"
184 - "repaired_dangling: "LPU64"\n"
185 - "repaired_unmatched_pair: "LPU64"\n"
186 - "repaired_multiple_referenced: "LPU64"\n"
187 -@@ -4955,11 +4939,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
188 - lo->ll_objs_skipped,
189 - lo->ll_objs_failed_phase1,
190 - lo->ll_objs_failed_phase2);
191 -- if (rc <= 0)
192 -- goto out;
193 --
194 -- buf += rc;
195 -- len -= rc;
196 -
197 - if (lo->ll_status == LS_SCANNING_PHASE1) {
198 - __u64 pos;
199 -@@ -4977,8 +4956,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
200 - do_div(new_checked, duration);
201 - if (rtime != 0)
202 - do_div(speed, rtime);
203 -- rc = snprintf(buf, len,
204 -- "checked_phase1: "LPU64"\n"
205 -+ seq_printf(m, "checked_phase1: "LPU64"\n"
206 - "checked_phase2: "LPU64"\n"
207 - "run_time_phase1: %u seconds\n"
208 - "run_time_phase2: %u seconds\n"
209 -@@ -4992,11 +4970,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
210 - lo->ll_run_time_phase2,
211 - speed,
212 - new_checked);
213 -- if (rc <= 0)
214 -- goto out;
215 --
216 -- buf += rc;
217 -- len -= rc;
218 -
219 - LASSERT(lfsck->li_di_oit != NULL);
220 -
221 -@@ -5009,12 +4982,8 @@ static int lfsck_layout_dump(const struct lu_env *env,
222 - pos = iops->store(env, lfsck->li_di_oit);
223 - if (!lfsck->li_current_oit_processed)
224 - pos--;
225 -- rc = snprintf(buf, len, "current_position: "LPU64"\n", pos);
226 -- if (rc <= 0)
227 -- goto out;
228 -+ seq_printf(m, "current_position: "LPU64"\n", pos);
229 -
230 -- buf += rc;
231 -- len -= rc;
232 - } else if (lo->ll_status == LS_SCANNING_PHASE2) {
233 - cfs_duration_t duration = cfs_time_current() -
234 - lfsck->li_time_last_checkpoint;
235 -@@ -5032,29 +5001,26 @@ static int lfsck_layout_dump(const struct lu_env *env,
236 - do_div(speed1, lo->ll_run_time_phase1);
237 - if (rtime != 0)
238 - do_div(speed2, rtime);
239 -- rc = snprintf(buf, len,
240 -- "checked_phase1: "LPU64"\n"
241 -- "checked_phase2: "LPU64"\n"
242 -- "run_time_phase1: %u seconds\n"
243 -- "run_time_phase2: %u seconds\n"
244 -- "average_speed_phase1: "LPU64" items/sec\n"
245 -- "average_speed_phase2: "LPU64" items/sec\n"
246 -- "real-time_speed_phase1: N/A\n"
247 -- "real-time_speed_phase2: "LPU64" items/sec\n"
248 -- "current_position: "DFID"\n",
249 -- lo->ll_objs_checked_phase1,
250 -- checked,
251 -- lo->ll_run_time_phase1,
252 -- rtime,
253 -- speed1,
254 -- speed2,
255 -- new_checked,
256 -- PFID(&com->lc_fid_latest_scanned_phase2));
257 -+ rc = seq_printf(m, "checked_phase1: "LPU64"\n"
258 -+ "checked_phase2: "LPU64"\n"
259 -+ "run_time_phase1: %u seconds\n"
260 -+ "run_time_phase2: %u seconds\n"
261 -+ "average_speed_phase1: "LPU64" items/sec\n"
262 -+ "average_speed_phase2: "LPU64" items/sec\n"
263 -+ "real-time_speed_phase1: N/A\n"
264 -+ "real-time_speed_phase2: "LPU64" items/sec\n"
265 -+ "current_position: "DFID"\n",
266 -+ lo->ll_objs_checked_phase1,
267 -+ checked,
268 -+ lo->ll_run_time_phase1,
269 -+ rtime,
270 -+ speed1,
271 -+ speed2,
272 -+ new_checked,
273 -+ PFID(&com->lc_fid_latest_scanned_phase2));
274 - if (rc <= 0)
275 - goto out;
276 -
277 -- buf += rc;
278 -- len -= rc;
279 - } else {
280 - __u64 speed1 = lo->ll_objs_checked_phase1;
281 - __u64 speed2 = lo->ll_objs_checked_phase2;
282 -@@ -5063,34 +5029,26 @@ static int lfsck_layout_dump(const struct lu_env *env,
283 - do_div(speed1, lo->ll_run_time_phase1);
284 - if (lo->ll_run_time_phase2 != 0)
285 - do_div(speed2, lo->ll_run_time_phase2);
286 -- rc = snprintf(buf, len,
287 -- "checked_phase1: "LPU64"\n"
288 -- "checked_phase2: "LPU64"\n"
289 -- "run_time_phase1: %u seconds\n"
290 -- "run_time_phase2: %u seconds\n"
291 -- "average_speed_phase1: "LPU64" items/sec\n"
292 -- "average_speed_phase2: "LPU64" objs/sec\n"
293 -- "real-time_speed_phase1: N/A\n"
294 -- "real-time_speed_phase2: N/A\n"
295 -- "current_position: N/A\n",
296 -- lo->ll_objs_checked_phase1,
297 -- lo->ll_objs_checked_phase2,
298 -- lo->ll_run_time_phase1,
299 -- lo->ll_run_time_phase2,
300 -- speed1,
301 -- speed2);
302 -- if (rc <= 0)
303 -- goto out;
304 --
305 -- buf += rc;
306 -- len -= rc;
307 -+ seq_printf(m, "checked_phase1: "LPU64"\n"
308 -+ "checked_phase2: "LPU64"\n"
309 -+ "run_time_phase1: %u seconds\n"
310 -+ "run_time_phase2: %u seconds\n"
311 -+ "average_speed_phase1: "LPU64" items/sec\n"
312 -+ "average_speed_phase2: "LPU64" objs/sec\n"
313 -+ "real-time_speed_phase1: N/A\n"
314 -+ "real-time_speed_phase2: N/A\n"
315 -+ "current_position: N/A\n",
316 -+ lo->ll_objs_checked_phase1,
317 -+ lo->ll_objs_checked_phase2,
318 -+ lo->ll_run_time_phase1,
319 -+ lo->ll_run_time_phase2,
320 -+ speed1,
321 -+ speed2);
322 - }
323 -- ret = save - len;
324 --
325 - out:
326 - up_read(&com->lc_sem);
327 -
328 -- return ret;
329 -+ return rc;
330 - }
331 -
332 - static int lfsck_layout_master_double_scan(const struct lu_env *env,
333 -diff --git a/lustre/lfsck/lfsck_lib.c b/lustre/lfsck/lfsck_lib.c
334 -index db73616..f6f1cce 100644
335 ---- a/lustre/lfsck/lfsck_lib.c
336 -+++ b/lustre/lfsck/lfsck_lib.c
337 -@@ -900,21 +900,15 @@ static inline int lfsck_instance_add(struct lfsck_instance *lfsck)
338 - return 0;
339 - }
340 -
341 --int lfsck_bits_dump(char **buf, int *len, int bits, const char *names[],
342 -+int lfsck_bits_dump(struct seq_file *m, int bits, const char *names[],
343 - const char *prefix)
344 - {
345 -- int save = *len;
346 - int flag;
347 -- int rc;
348 - int i;
349 - bool newline = (bits != 0 ? false : true);
350 -
351 -- rc = snprintf(*buf, *len, "%s:%c", prefix, newline ? '\n' : ' ');
352 -- if (rc <= 0)
353 -- return -ENOSPC;
354 -+ seq_printf(m, "%s:%c", prefix, bits != 0 ? ' ' : '\n');
355 -
356 -- *buf += rc;
357 -- *len -= rc;
358 - for (i = 0, flag = 1; bits != 0; i++, flag = 1 << i) {
359 - if (flag & bits) {
360 - bits &= ~flag;
361 -@@ -922,69 +916,43 @@ int lfsck_bits_dump(char **buf, int *len, int bits, const char *names[],
362 - if (bits == 0)
363 - newline = true;
364 -
365 -- rc = snprintf(*buf, *len, "%s%c", names[i],
366 -- newline ? '\n' : ',');
367 -- if (rc <= 0)
368 -- return -ENOSPC;
369 --
370 -- *buf += rc;
371 -- *len -= rc;
372 -+ seq_printf(m, "%s%c", names[i],
373 -+ newline ? '\n' : ',');
374 - }
375 - }
376 - }
377 -
378 -- if (!newline) {
379 -- rc = snprintf(*buf, *len, "\n");
380 -- if (rc <= 0)
381 -- return -ENOSPC;
382 --
383 -- *buf += rc;
384 -- *len -= rc;
385 -- }
386 --
387 -- return save - *len;
388 -+ if (!newline)
389 -+ seq_printf(m, "\n");
390 -+ return 0;
391 - }
392 -
393 --int lfsck_time_dump(char **buf, int *len, __u64 time, const char *prefix)
394 -+int lfsck_time_dump(struct seq_file *m, __u64 time, const char *prefix)
395 - {
396 -- int rc;
397 --
398 - if (time != 0)
399 -- rc = snprintf(*buf, *len, "%s: "LPU64" seconds\n", prefix,
400 -- cfs_time_current_sec() - time);
401 -+ seq_printf(m, "%s: "LPU64" seconds\n", prefix,
402 -+ cfs_time_current_sec() - time);
403 - else
404 -- rc = snprintf(*buf, *len, "%s: N/A\n", prefix);
405 -- if (rc <= 0)
406 -- return -ENOSPC;
407 --
408 -- *buf += rc;
409 -- *len -= rc;
410 -- return rc;
411 -+ seq_printf(m, "%s: N/A\n", prefix);
412 -+ return 0;
413 - }
414 -
415 --int lfsck_pos_dump(char **buf, int *len, struct lfsck_position *pos,
416 -+int lfsck_pos_dump(struct seq_file *m, struct lfsck_position *pos,
417 - const char *prefix)
418 - {
419 -- int rc;
420 --
421 - if (fid_is_zero(&pos->lp_dir_parent)) {
422 - if (pos->lp_oit_cookie == 0)
423 -- rc = snprintf(*buf, *len, "%s: N/A, N/A, N/A\n",
424 -- prefix);
425 -+ seq_printf(m, "%s: N/A, N/A, N/A\n",
426 -+ prefix);
427 - else
428 -- rc = snprintf(*buf, *len, "%s: "LPU64", N/A, N/A\n",
429 -- prefix, pos->lp_oit_cookie);
430 -+ seq_printf(m, "%s: "LPU64", N/A, N/A\n",
431 -+ prefix, pos->lp_oit_cookie);
432 - } else {
433 -- rc = snprintf(*buf, *len, "%s: "LPU64", "DFID", "LPU64"\n",
434 -- prefix, pos->lp_oit_cookie,
435 -- PFID(&pos->lp_dir_parent), pos->lp_dir_cookie);
436 -+ seq_printf(m, "%s: "LPU64", "DFID", "LPU64"\n",
437 -+ prefix, pos->lp_oit_cookie,
438 -+ PFID(&pos->lp_dir_parent), pos->lp_dir_cookie);
439 - }
440 -- if (rc <= 0)
441 -- return -ENOSPC;
442 --
443 -- *buf += rc;
444 -- *len -= rc;
445 -- return rc;
446 -+ return 0;
447 - }
448 -
449 - void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
450 -@@ -1670,7 +1638,7 @@ int lfsck_async_request(const struct lu_env *env, struct obd_export *exp,
451 -
452 - /* external interfaces */
453 -
454 --int lfsck_get_speed(struct dt_device *key, void *buf, int len)
455 -+int lfsck_get_speed(struct seq_file *m, struct dt_device *key)
456 - {
457 - struct lu_env env;
458 - struct lfsck_instance *lfsck;
459 -@@ -1683,8 +1651,7 @@ int lfsck_get_speed(struct dt_device *key, void *buf, int len)
460 -
461 - lfsck = lfsck_instance_find(key, true, false);
462 - if (likely(lfsck != NULL)) {
463 -- rc = snprintf(buf, len, "%u\n",
464 -- lfsck->li_bookmark_ram.lb_speed_limit);
465 -+ seq_printf(m, "%u\n", lfsck->li_bookmark_ram.lb_speed_limit);
466 - lfsck_instance_put(&env, lfsck);
467 - } else {
468 - rc = -ENXIO;
469 -@@ -1724,7 +1691,7 @@ int lfsck_set_speed(struct dt_device *key, int val)
470 - }
471 - EXPORT_SYMBOL(lfsck_set_speed);
472 -
473 --int lfsck_get_windows(struct dt_device *key, void *buf, int len)
474 -+int lfsck_get_windows(struct seq_file *m, struct dt_device *key)
475 - {
476 - struct lu_env env;
477 - struct lfsck_instance *lfsck;
478 -@@ -1737,8 +1704,7 @@ int lfsck_get_windows(struct dt_device *key, void *buf, int len)
479 -
480 - lfsck = lfsck_instance_find(key, true, false);
481 - if (likely(lfsck != NULL)) {
482 -- rc = snprintf(buf, len, "%u\n",
483 -- lfsck->li_bookmark_ram.lb_async_windows);
484 -+ seq_printf(m, "%u\n", lfsck->li_bookmark_ram.lb_async_windows);
485 - lfsck_instance_put(&env, lfsck);
486 - } else {
487 - rc = -ENXIO;
488 -@@ -1788,7 +1754,7 @@ int lfsck_set_windows(struct dt_device *key, int val)
489 - }
490 - EXPORT_SYMBOL(lfsck_set_windows);
491 -
492 --int lfsck_dump(struct dt_device *key, void *buf, int len, enum lfsck_type type)
493 -+int lfsck_dump(struct seq_file *m, struct dt_device *key, enum lfsck_type type)
494 - {
495 - struct lu_env env;
496 - struct lfsck_instance *lfsck;
497 -@@ -1804,7 +1770,7 @@ int lfsck_dump(struct dt_device *key, void *buf, int len, enum lfsck_type type)
498 - if (likely(lfsck != NULL)) {
499 - com = lfsck_component_find(lfsck, type);
500 - if (likely(com != NULL)) {
501 -- rc = com->lc_ops->lfsck_dump(&env, com, buf, len);
502 -+ rc = com->lc_ops->lfsck_dump(&env, com, m);
503 - lfsck_component_put(&env, com);
504 - } else {
505 - rc = -ENOTSUPP;
506 -diff --git a/lustre/lfsck/lfsck_namespace.c b/lustre/lfsck/lfsck_namespace.c
507 -index 4dccb70..fc9a0dc 100644
508 ---- a/lustre/lfsck/lfsck_namespace.c
509 -+++ b/lustre/lfsck/lfsck_namespace.c
510 -@@ -1099,65 +1099,56 @@ static int lfsck_namespace_post(const struct lu_env *env,
511 -
512 - static int
513 - lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
514 -- char *buf, int len)
515 -+ struct seq_file *m)
516 - {
517 - struct lfsck_instance *lfsck = com->lc_lfsck;
518 - struct lfsck_bookmark *bk = &lfsck->li_bookmark_ram;
519 - struct lfsck_namespace *ns = com->lc_file_ram;
520 -- int save = len;
521 -- int ret = -ENOSPC;
522 - int rc;
523 -
524 - down_read(&com->lc_sem);
525 -- rc = snprintf(buf, len,
526 -- "name: lfsck_namespace\n"
527 -- "magic: %#x\n"
528 -- "version: %d\n"
529 -- "status: %s\n",
530 -- ns->ln_magic,
531 -- bk->lb_version,
532 -- lfsck_status2names(ns->ln_status));
533 -- if (rc <= 0)
534 -- goto out;
535 --
536 -- buf += rc;
537 -- len -= rc;
538 -- rc = lfsck_bits_dump(&buf, &len, ns->ln_flags, lfsck_flags_names,
539 -- "flags");
540 -+ seq_printf(m, "name: lfsck_namespace\n"
541 -+ "magic: %#x\n"
542 -+ "version: %d\n"
543 -+ "status: %s\n",
544 -+ ns->ln_magic,
545 -+ bk->lb_version,
546 -+ lfsck_status2names(ns->ln_status));
547 -+
548 -+ rc = lfsck_bits_dump(m, ns->ln_flags, lfsck_flags_names, "flags");
549 - if (rc < 0)
550 - goto out;
551 -
552 -- rc = lfsck_bits_dump(&buf, &len, bk->lb_param, lfsck_param_names,
553 -- "param");
554 -+ rc = lfsck_bits_dump(m, bk->lb_param, lfsck_param_names, "param");
555 - if (rc < 0)
556 - goto out;
557 -
558 -- rc = lfsck_time_dump(&buf, &len, ns->ln_time_last_complete,
559 -+ rc = lfsck_time_dump(m, ns->ln_time_last_complete,
560 - "time_since_last_completed");
561 - if (rc < 0)
562 - goto out;
563 -
564 -- rc = lfsck_time_dump(&buf, &len, ns->ln_time_latest_start,
565 -+ rc = lfsck_time_dump(m, ns->ln_time_latest_start,
566 - "time_since_latest_start");
567 - if (rc < 0)
568 - goto out;
569 -
570 -- rc = lfsck_time_dump(&buf, &len, ns->ln_time_last_checkpoint,
571 -+ rc = lfsck_time_dump(m, ns->ln_time_last_checkpoint,
572 - "time_since_last_checkpoint");
573 - if (rc < 0)
574 - goto out;
575 -
576 -- rc = lfsck_pos_dump(&buf, &len, &ns->ln_pos_latest_start,
577 -+ rc = lfsck_pos_dump(m, &ns->ln_pos_latest_start,
578 - "latest_start_position");
579 - if (rc < 0)
580 - goto out;
581 -
582 -- rc = lfsck_pos_dump(&buf, &len, &ns->ln_pos_last_checkpoint,
583 -+ rc = lfsck_pos_dump(m, &ns->ln_pos_last_checkpoint,
584 - "last_checkpoint_position");
585 - if (rc < 0)
586 - goto out;
587 -
588 -- rc = lfsck_pos_dump(&buf, &len, &ns->ln_pos_first_inconsistent,
589 -+ rc = lfsck_pos_dump(m, &ns->ln_pos_first_inconsistent,
590 - "first_failure_position");
591 - if (rc < 0)
592 - goto out;
593 -@@ -1177,8 +1168,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
594 - do_div(new_checked, duration);
595 - if (rtime != 0)
596 - do_div(speed, rtime);
597 -- rc = snprintf(buf, len,
598 -- "checked_phase1: "LPU64"\n"
599 -+ seq_printf(m, "checked_phase1: "LPU64"\n"
600 - "checked_phase2: "LPU64"\n"
601 - "updated_phase1: "LPU64"\n"
602 - "updated_phase2: "LPU64"\n"
603 -@@ -1214,11 +1204,6 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
604 - ns->ln_run_time_phase2,
605 - speed,
606 - new_checked);
607 -- if (rc <= 0)
608 -- goto out;
609 --
610 -- buf += rc;
611 -- len -= rc;
612 -
613 - LASSERT(lfsck->li_di_oit != NULL);
614 -
615 -@@ -1247,9 +1232,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
616 - pos.lp_dir_cookie = 0;
617 - }
618 - spin_unlock(&lfsck->li_lock);
619 -- rc = lfsck_pos_dump(&buf, &len, &pos, "current_position");
620 -- if (rc <= 0)
621 -- goto out;
622 -+ lfsck_pos_dump(m, &pos, "current_position");
623 - } else if (ns->ln_status == LS_SCANNING_PHASE2) {
624 - cfs_duration_t duration = cfs_time_current() -
625 - lfsck->li_time_last_checkpoint;
626 -@@ -1267,8 +1250,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
627 - do_div(speed1, ns->ln_run_time_phase1);
628 - if (rtime != 0)
629 - do_div(speed2, rtime);
630 -- rc = snprintf(buf, len,
631 -- "checked_phase1: "LPU64"\n"
632 -+ seq_printf(m, "checked_phase1: "LPU64"\n"
633 - "checked_phase2: "LPU64"\n"
634 - "updated_phase1: "LPU64"\n"
635 - "updated_phase2: "LPU64"\n"
636 -@@ -1307,11 +1289,6 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
637 - speed2,
638 - new_checked,
639 - PFID(&ns->ln_fid_latest_scanned_phase2));
640 -- if (rc <= 0)
641 -- goto out;
642 --
643 -- buf += rc;
644 -- len -= rc;
645 - } else {
646 - __u64 speed1 = ns->ln_items_checked;
647 - __u64 speed2 = ns->ln_objs_checked_phase2;
648 -@@ -1320,8 +1297,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
649 - do_div(speed1, ns->ln_run_time_phase1);
650 - if (ns->ln_run_time_phase2 != 0)
651 - do_div(speed2, ns->ln_run_time_phase2);
652 -- rc = snprintf(buf, len,
653 -- "checked_phase1: "LPU64"\n"
654 -+ seq_printf(m, "checked_phase1: "LPU64"\n"
655 - "checked_phase2: "LPU64"\n"
656 - "updated_phase1: "LPU64"\n"
657 - "updated_phase2: "LPU64"\n"
658 -@@ -1358,17 +1334,10 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
659 - ns->ln_run_time_phase2,
660 - speed1,
661 - speed2);
662 -- if (rc <= 0)
663 -- goto out;
664 --
665 -- buf += rc;
666 -- len -= rc;
667 - }
668 -- ret = save - len;
669 --
670 - out:
671 - up_read(&com->lc_sem);
672 -- return ret;
673 -+ return 0;
674 - }
675 -
676 - static int lfsck_namespace_double_scan_main(void *args)
677 -diff --git a/lustre/mdd/mdd_device.c b/lustre/mdd/mdd_device.c
678 -index 4f0baa4..f6deaca 100644
679 ---- a/lustre/mdd/mdd_device.c
680 -+++ b/lustre/mdd/mdd_device.c
681 -@@ -889,16 +889,16 @@ static int mdd_process_config(const struct lu_env *env,
682 - ENTRY;
683 -
684 - switch (cfg->lcfg_command) {
685 -- case LCFG_PARAM: {
686 -- struct lprocfs_static_vars lvars;
687 --
688 -- lprocfs_mdd_init_vars(&lvars);
689 -- rc = class_process_proc_param(PARAM_MDD, lvars.obd_vars, cfg,m);
690 -- if (rc > 0 || rc == -ENOSYS)
691 -- /* we don't understand; pass it on */
692 -- rc = next->ld_ops->ldo_process_config(env, next, cfg);
693 -- break;
694 -- }
695 -+ case LCFG_PARAM: {
696 -+ struct obd_device *obd = mdd2obd_dev(m);
697 -+
698 -+ rc = class_process_proc_seq_param(PARAM_MDD, obd->obd_vars,
699 -+ cfg, m);
700 -+ if (rc > 0 || rc == -ENOSYS)
701 -+ /* we don't understand; pass it on */
702 -+ rc = next->ld_ops->ldo_process_config(env, next, cfg);
703 -+ break;
704 -+ }
705 - case LCFG_SETUP:
706 - rc = next->ld_ops->ldo_process_config(env, next, cfg);
707 - if (rc)
708 -@@ -1566,11 +1566,8 @@ LU_CONTEXT_KEY_DEFINE(mdd, LCT_MD_THREAD);
709 -
710 - static int __init mdd_mod_init(void)
711 - {
712 -- struct lprocfs_static_vars lvars;
713 - int rc;
714 -
715 -- lprocfs_mdd_init_vars(&lvars);
716 --
717 - rc = lu_kmem_init(mdd_caches);
718 - if (rc)
719 - return rc;
720 -@@ -1586,7 +1583,7 @@ static int __init mdd_mod_init(void)
721 -
722 - rc = class_register_type(&mdd_obd_device_ops, NULL, true, NULL,
723 - #ifndef HAVE_ONLY_PROCFS_SEQ
724 -- lvars.module_vars,
725 -+ NULL,
726 - #endif
727 - LUSTRE_MDD_NAME, &mdd_device_type);
728 - if (rc)
729 -diff --git a/lustre/mdd/mdd_internal.h b/lustre/mdd/mdd_internal.h
730 -index 4411892..37698f8 100644
731 ---- a/lustre/mdd/mdd_internal.h
732 -+++ b/lustre/mdd/mdd_internal.h
733 -@@ -248,7 +248,6 @@ int orph_declare_index_delete(const struct lu_env *, struct mdd_object *,
734 - struct thandle *);
735 -
736 - /* mdd_lproc.c */
737 --void lprocfs_mdd_init_vars(struct lprocfs_static_vars *lvars);
738 - int mdd_procfs_init(struct mdd_device *mdd, const char *name);
739 - int mdd_procfs_fini(struct mdd_device *mdd);
740 -
741 -diff --git a/lustre/mdd/mdd_lproc.c b/lustre/mdd/mdd_lproc.c
742 -index de379b3..7ac4afa 100644
743 ---- a/lustre/mdd/mdd_lproc.c
744 -+++ b/lustre/mdd/mdd_lproc.c
745 -@@ -49,56 +49,14 @@
746 - #include <libcfs/libcfs_string.h>
747 - #include "mdd_internal.h"
748 -
749 --int mdd_procfs_init(struct mdd_device *mdd, const char *name)
750 --{
751 -- struct lprocfs_static_vars lvars;
752 -- struct obd_type *type;
753 -- int rc;
754 -- ENTRY;
755 --
756 -- /* at the moment there is no linkage between lu_type
757 -- * and obd_type, so we lookup obd_type this way */
758 -- type = class_search_type(LUSTRE_MDD_NAME);
759 --
760 -- LASSERT(name != NULL);
761 -- LASSERT(type != NULL);
762 --
763 -- /* Find the type procroot and add the proc entry for this device */
764 -- lprocfs_mdd_init_vars(&lvars);
765 -- mdd->mdd_proc_entry = lprocfs_register(name, type->typ_procroot,
766 -- lvars.obd_vars, mdd);
767 -- if (IS_ERR(mdd->mdd_proc_entry)) {
768 -- rc = PTR_ERR(mdd->mdd_proc_entry);
769 -- CERROR("Error %d setting up lprocfs for %s\n",
770 -- rc, name);
771 -- mdd->mdd_proc_entry = NULL;
772 -- GOTO(out, rc);
773 -- }
774 --
775 -- rc = 0;
776 --
777 -- EXIT;
778 --out:
779 -- if (rc)
780 -- mdd_procfs_fini(mdd);
781 -- return rc;
782 --}
783 --
784 --int mdd_procfs_fini(struct mdd_device *mdd)
785 --{
786 -- if (mdd->mdd_proc_entry) {
787 -- lprocfs_remove(&mdd->mdd_proc_entry);
788 -- mdd->mdd_proc_entry = NULL;
789 -- }
790 -- RETURN(0);
791 --}
792 --
793 --static int lprocfs_wr_atime_diff(struct file *file, const char *buffer,
794 -- unsigned long count, void *data)
795 -+static ssize_t
796 -+mdd_atime_diff_seq_write(struct file *file, const char *buffer,
797 -+ size_t count, loff_t *off)
798 - {
799 -- struct mdd_device *mdd = data;
800 -- char kernbuf[20], *end;
801 -- unsigned long diff = 0;
802 -+ struct seq_file *m = file->private_data;
803 -+ struct mdd_device *mdd = m->private;
804 -+ char kernbuf[20], *end;
805 -+ unsigned long diff = 0;
806 -
807 - if (count > (sizeof(kernbuf) - 1))
808 - return -EINVAL;
809 -@@ -116,37 +74,35 @@ static int lprocfs_wr_atime_diff(struct file *file, const char *buffer,
810 - return count;
811 - }
812 -
813 --static int lprocfs_rd_atime_diff(char *page, char **start, off_t off,
814 -- int count, int *eof, void *data)
815 -+static int mdd_atime_diff_seq_show(struct seq_file *m, void *data)
816 - {
817 -- struct mdd_device *mdd = data;
818 -+ struct mdd_device *mdd = m->private;
819 -
820 -- *eof = 1;
821 -- return snprintf(page, count, "%lu\n", mdd->mdd_atime_diff);
822 -+ return seq_printf(m, "%lu\n", mdd->mdd_atime_diff);
823 - }
824 --
825 -+LPROC_SEQ_FOPS(mdd_atime_diff);
826 -
827 - /**** changelogs ****/
828 --static int lprocfs_rd_changelog_mask(char *page, char **start, off_t off,
829 -- int count, int *eof, void *data)
830 -+static int mdd_changelog_mask_seq_show(struct seq_file *m, void *data)
831 - {
832 -- struct mdd_device *mdd = data;
833 -- int i = 0, rc = 0;
834 --
835 -- *eof = 1;
836 -- while (i < CL_LAST) {
837 -- if (mdd->mdd_cl.mc_mask & (1 << i))
838 -- rc += snprintf(page + rc, count - rc, "%s ",
839 -- changelog_type2str(i));
840 -- i++;
841 -- }
842 -- return rc;
843 -+ struct mdd_device *mdd = m->private;
844 -+ int i = 0;
845 -+
846 -+ while (i < CL_LAST) {
847 -+ if (mdd->mdd_cl.mc_mask & (1 << i))
848 -+ seq_printf(m, "%s ", changelog_type2str(i));
849 -+ i++;
850 -+ }
851 -+ seq_printf(m, "\n");
852 -+ return 0;
853 - }
854 -
855 --static int lprocfs_wr_changelog_mask(struct file *file, const char *buffer,
856 -- unsigned long count, void *data)
857 -+static ssize_t
858 -+mdd_changelog_mask_seq_write(struct file *file, const char *buffer,
859 -+ size_t count, loff_t *off)
860 - {
861 -- struct mdd_device *mdd = data;
862 -+ struct seq_file *m = file->private_data;
863 -+ struct mdd_device *mdd = m->private;
864 - char *kernbuf;
865 - int rc;
866 - ENTRY;
867 -@@ -168,45 +124,32 @@ out:
868 - OBD_FREE(kernbuf, PAGE_CACHE_SIZE);
869 - return rc;
870 - }
871 --
872 --struct cucb_data {
873 -- char *page;
874 -- int count;
875 -- int idx;
876 --};
877 -+LPROC_SEQ_FOPS(mdd_changelog_mask);
878 -
879 - static int lprocfs_changelog_users_cb(const struct lu_env *env,
880 - struct llog_handle *llh,
881 - struct llog_rec_hdr *hdr, void *data)
882 - {
883 -- struct llog_changelog_user_rec *rec;
884 -- struct cucb_data *cucb = (struct cucb_data *)data;
885 -+ struct llog_changelog_user_rec *rec;
886 -+ struct seq_file *m = data;
887 -
888 -- LASSERT(llh->lgh_hdr->llh_flags & LLOG_F_IS_PLAIN);
889 -+ LASSERT(llh->lgh_hdr->llh_flags & LLOG_F_IS_PLAIN);
890 -
891 -- rec = (struct llog_changelog_user_rec *)hdr;
892 -+ rec = (struct llog_changelog_user_rec *)hdr;
893 -
894 -- cucb->idx += snprintf(cucb->page + cucb->idx, cucb->count - cucb->idx,
895 -- CHANGELOG_USER_PREFIX"%-3d "LPU64"\n",
896 -- rec->cur_id, rec->cur_endrec);
897 -- if (cucb->idx >= cucb->count)
898 -- return -ENOSPC;
899 --
900 -- return 0;
901 -+ seq_printf(m, CHANGELOG_USER_PREFIX"%-3d "LPU64"\n",
902 -+ rec->cur_id, rec->cur_endrec);
903 -+ return 0;
904 - }
905 -
906 --static int lprocfs_rd_changelog_users(char *page, char **start, off_t off,
907 -- int count, int *eof, void *data)
908 -+static int mdd_changelog_users_seq_show(struct seq_file *m, void *data)
909 - {
910 - struct lu_env env;
911 -- struct mdd_device *mdd = data;
912 -+ struct mdd_device *mdd = m->private;
913 - struct llog_ctxt *ctxt;
914 -- struct cucb_data cucb;
915 - __u64 cur;
916 - int rc;
917 -
918 -- *eof = 1;
919 --
920 - ctxt = llog_get_context(mdd2obd_dev(mdd),
921 - LLOG_CHANGELOG_USER_ORIG_CTXT);
922 - if (ctxt == NULL)
923 -@@ -223,37 +166,32 @@ static int lprocfs_rd_changelog_users(char *page, char **start, off_t off,
924 - cur = mdd->mdd_cl.mc_index;
925 - spin_unlock(&mdd->mdd_cl.mc_lock);
926 -
927 -- cucb.count = count;
928 -- cucb.page = page;
929 -- cucb.idx = 0;
930 --
931 -- cucb.idx += snprintf(cucb.page + cucb.idx, cucb.count - cucb.idx,
932 -- "current index: "LPU64"\n", cur);
933 --
934 -- cucb.idx += snprintf(cucb.page + cucb.idx, cucb.count - cucb.idx,
935 -- "%-5s %s\n", "ID", "index");
936 -+ seq_printf(m, "current index: "LPU64"\n", cur);
937 -+ seq_printf(m, "%-5s %s\n", "ID", "index");
938 -
939 - llog_cat_process(&env, ctxt->loc_handle, lprocfs_changelog_users_cb,
940 -- &cucb, 0, 0);
941 -+ m, 0, 0);
942 -
943 - lu_env_fini(&env);
944 - llog_ctxt_put(ctxt);
945 -- return cucb.idx;
946 -+ return 0;
947 - }
948 -+LPROC_SEQ_FOPS_RO(mdd_changelog_users);
949 -
950 --static int lprocfs_rd_sync_perm(char *page, char **start, off_t off,
951 -- int count, int *eof, void *data)
952 -+static int mdd_sync_perm_seq_show(struct seq_file *m, void *data)
953 - {
954 -- struct mdd_device *mdd = data;
955 -+ struct mdd_device *mdd = m->private;
956 -
957 -- LASSERT(mdd != NULL);
958 -- return snprintf(page, count, "%d\n", mdd->mdd_sync_permission);
959 -+ LASSERT(mdd != NULL);
960 -+ return seq_printf(m, "%d\n", mdd->mdd_sync_permission);
961 - }
962 -
963 --static int lprocfs_wr_sync_perm(struct file *file, const char *buffer,
964 -- unsigned long count, void *data)
965 -+static ssize_t
966 -+mdd_sync_perm_seq_write(struct file *file, const char *buffer,
967 -+ size_t count, loff_t *off)
968 - {
969 -- struct mdd_device *mdd = data;
970 -+ struct seq_file *m = file->private_data;
971 -+ struct mdd_device *mdd = m->private;
972 - int val, rc;
973 -
974 - LASSERT(mdd != NULL);
975 -@@ -264,22 +202,22 @@ static int lprocfs_wr_sync_perm(struct file *file, const char *buffer,
976 - mdd->mdd_sync_permission = !!val;
977 - return count;
978 - }
979 -+LPROC_SEQ_FOPS(mdd_sync_perm);
980 -
981 --static int lprocfs_rd_lfsck_speed_limit(char *page, char **start, off_t off,
982 -- int count, int *eof, void *data)
983 -+static int mdd_lfsck_speed_limit_seq_show(struct seq_file *m, void *data)
984 - {
985 -- struct mdd_device *mdd = data;
986 -+ struct mdd_device *mdd = m->private;
987 -
988 - LASSERT(mdd != NULL);
989 -- *eof = 1;
990 --
991 -- return lfsck_get_speed(mdd->mdd_bottom, page, count);
992 -+ return lfsck_get_speed(m, mdd->mdd_bottom);
993 - }
994 -
995 --static int lprocfs_wr_lfsck_speed_limit(struct file *file, const char *buffer,
996 -- unsigned long count, void *data)
997 -+static ssize_t
998 -+mdd_lfsck_speed_limit_seq_write(struct file *file, const char *buffer,
999 -+ size_t count, loff_t *off)
1000 - {
1001 -- struct mdd_device *mdd = data;
1002 -+ struct seq_file *m = file->private_data;
1003 -+ struct mdd_device *mdd = m->private;
1004 - __u32 val;
1005 - int rc;
1006 -
1007 -@@ -291,25 +229,22 @@ static int lprocfs_wr_lfsck_speed_limit(struct file *file, const char *buffer,
1008 - rc = lfsck_set_speed(mdd->mdd_bottom, val);
1009 - return rc != 0 ? rc : count;
1010 - }
1011 -+LPROC_SEQ_FOPS(mdd_lfsck_speed_limit);
1012 -
1013 --static int lprocfs_rd_lfsck_async_windows(char *page, char **start, off_t off,
1014 -- int count, int *eof, void *data)
1015 -+static int mdd_lfsck_async_windows_seq_show(struct seq_file *m, void *data)
1016 - {
1017 -- struct mdd_device *mdd = data;
1018 -- int rc;
1019 -+ struct mdd_device *mdd = m->private;
1020 -
1021 - LASSERT(mdd != NULL);
1022 -- *eof = 1;
1023 --
1024 -- rc = lfsck_get_windows(mdd->mdd_bottom, page, count);
1025 --
1026 -- return rc != 0 ? rc : count;
1027 -+ return lfsck_get_windows(m, mdd->mdd_bottom);
1028 - }
1029 -
1030 --static int lprocfs_wr_lfsck_async_windows(struct file *file, const char *buffer,
1031 -- unsigned long count, void *data)
1032 -+static ssize_t
1033 -+mdd_lfsck_async_windows_seq_write(struct file *file, const char *buffer,
1034 -+ size_t count, loff_t *off)
1035 - {
1036 -- struct mdd_device *mdd = data;
1037 -+ struct seq_file *m = file->private_data;
1038 -+ struct mdd_device *mdd = m->private;
1039 - __u32 val;
1040 - int rc;
1041 -
1042 -@@ -320,54 +255,87 @@ static int lprocfs_wr_lfsck_async_windows(struct file *file, const char *buffer,
1043 -
1044 - return rc != 0 ? rc : count;
1045 - }
1046 -+LPROC_SEQ_FOPS(mdd_lfsck_async_windows);
1047 -
1048 --static int lprocfs_rd_lfsck_namespace(char *page, char **start, off_t off,
1049 -- int count, int *eof, void *data)
1050 -+static int mdd_lfsck_namespace_seq_show(struct seq_file *m, void *data)
1051 - {
1052 -- struct mdd_device *mdd = data;
1053 -- int rc;
1054 -+ struct mdd_device *mdd = m->private;
1055 -
1056 - LASSERT(mdd != NULL);
1057 -- *eof = 1;
1058 -
1059 -- rc = lfsck_dump(mdd->mdd_bottom, page, count, LT_NAMESPACE);
1060 -- return rc;
1061 -+ return lfsck_dump(m, mdd->mdd_bottom, LT_NAMESPACE);
1062 - }
1063 -+LPROC_SEQ_FOPS_RO(mdd_lfsck_namespace);
1064 -
1065 --static int lprocfs_rd_lfsck_layout(char *page, char **start, off_t off,
1066 -- int count, int *eof, void *data)
1067 -+static int mdd_lfsck_layout_seq_show(struct seq_file *m, void *data)
1068 - {
1069 -- struct mdd_device *mdd = data;
1070 -+ struct mdd_device *mdd = m->private;
1071 -
1072 - LASSERT(mdd != NULL);
1073 -- *eof = 1;
1074 -
1075 -- return lfsck_dump(mdd->mdd_bottom, page, count, LT_LAYOUT);
1076 -+ return lfsck_dump(m, mdd->mdd_bottom, LT_LAYOUT);
1077 - }
1078 --
1079 --static struct lprocfs_vars lprocfs_mdd_obd_vars[] = {
1080 -- { "atime_diff", lprocfs_rd_atime_diff, lprocfs_wr_atime_diff, 0 },
1081 -- { "changelog_mask", lprocfs_rd_changelog_mask,
1082 -- lprocfs_wr_changelog_mask, 0 },
1083 -- { "changelog_users", lprocfs_rd_changelog_users, 0, 0},
1084 -- { "sync_permission", lprocfs_rd_sync_perm, lprocfs_wr_sync_perm, 0 },
1085 -- { "lfsck_speed_limit", lprocfs_rd_lfsck_speed_limit,
1086 -- lprocfs_wr_lfsck_speed_limit, 0 },
1087 -- { "lfsck_async_windows", lprocfs_rd_lfsck_async_windows,
1088 -- lprocfs_wr_lfsck_async_windows, 0 },
1089 -- { "lfsck_namespace", lprocfs_rd_lfsck_namespace, 0, 0 },
1090 -- { "lfsck_layout", lprocfs_rd_lfsck_layout, 0, 0 },
1091 -+LPROC_SEQ_FOPS_RO(mdd_lfsck_layout);
1092 -+
1093 -+static struct lprocfs_seq_vars lprocfs_mdd_obd_vars[] = {
1094 -+ { .name = "atime_diff",
1095 -+ .fops = &mdd_atime_diff_fops },
1096 -+ { .name = "changelog_mask",
1097 -+ .fops = &mdd_changelog_mask_fops },
1098 -+ { .name = "changelog_users",
1099 -+ .fops = &mdd_changelog_users_fops },
1100 -+ { .name = "sync_permission",
1101 -+ .fops = &mdd_sync_perm_fops },
1102 -+ { .name = "lfsck_speed_limit",
1103 -+ .fops = &mdd_lfsck_speed_limit_fops },
1104 -+ { .name = "lfsck_async_windows",
1105 -+ .fops = &mdd_lfsck_async_windows_fops },
1106 -+ { .name = "lfsck_namespace",
1107 -+ .fops = &mdd_lfsck_namespace_fops },
1108 -+ { .name = "lfsck_layout",
1109 -+ .fops = &mdd_lfsck_layout_fops },
1110 - { 0 }
1111 - };
1112 -
1113 --static struct lprocfs_vars lprocfs_mdd_module_vars[] = {
1114 -- { "num_refs", lprocfs_rd_numrefs, 0, 0 },
1115 -- { 0 }
1116 --};
1117 --
1118 --void lprocfs_mdd_init_vars(struct lprocfs_static_vars *lvars)
1119 -+int mdd_procfs_init(struct mdd_device *mdd, const char *name)
1120 - {
1121 -- lvars->module_vars = lprocfs_mdd_module_vars;
1122 -- lvars->obd_vars = lprocfs_mdd_obd_vars;
1123 -+ struct obd_device *obd = class_name2obd(name);
1124 -+ struct obd_type *type;
1125 -+ int rc;
1126 -+ ENTRY;
1127 -+
1128 -+ /* at the moment there is no linkage between lu_type
1129 -+ * and obd_type, so we lookup obd_type this way */
1130 -+ type = class_search_type(LUSTRE_MDD_NAME);
1131 -+
1132 -+ LASSERT(name != NULL);
1133 -+ LASSERT(type != NULL);
1134 -+ LASSERT(obd != NULL);
1135 -+
1136 -+ /* Find the type procroot and add the proc entry for this device */
1137 -+ obd->obd_vars = lprocfs_mdd_obd_vars;
1138 -+ mdd->mdd_proc_entry = lprocfs_seq_register(name, type->typ_procroot,
1139 -+ obd->obd_vars, mdd);
1140 -+ if (IS_ERR(mdd->mdd_proc_entry)) {
1141 -+ rc = PTR_ERR(mdd->mdd_proc_entry);
1142 -+ CERROR("Error %d setting up lprocfs for %s\n",
1143 -+ rc, name);
1144 -+ mdd->mdd_proc_entry = NULL;
1145 -+ GOTO(out, rc);
1146 -+ }
1147 -+ rc = 0;
1148 -+ EXIT;
1149 -+out:
1150 -+ if (rc)
1151 -+ mdd_procfs_fini(mdd);
1152 -+ return rc;
1153 - }
1154 -
1155 -+int mdd_procfs_fini(struct mdd_device *mdd)
1156 -+{
1157 -+ if (mdd->mdd_proc_entry) {
1158 -+ lprocfs_remove(&mdd->mdd_proc_entry);
1159 -+ mdd->mdd_proc_entry = NULL;
1160 -+ }
1161 -+ RETURN(0);
1162 -+}
1163 -diff --git a/lustre/ofd/lproc_ofd.c b/lustre/ofd/lproc_ofd.c
1164 -index 359b373..fcde82a 100644
1165 ---- a/lustre/ofd/lproc_ofd.c
1166 -+++ b/lustre/ofd/lproc_ofd.c
1167 -@@ -47,81 +47,75 @@
1168 -
1169 - #ifdef LPROCFS
1170 -
1171 --static int lprocfs_ofd_rd_seqs(char *page, char **start, off_t off,
1172 -- int count, int *eof, void *data)
1173 -+static int ofd_seqs_seq_show(struct seq_file *m, void *data)
1174 - {
1175 -- struct obd_device *obd = (struct obd_device *)data;
1176 -+ struct obd_device *obd = m->private;
1177 - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1178 -
1179 -- *eof = 1;
1180 -- return snprintf(page, count, "%u\n", ofd->ofd_seq_count);
1181 -+ return seq_printf(m, "%u\n", ofd->ofd_seq_count);
1182 - }
1183 -+LPROC_SEQ_FOPS_RO(ofd_seqs);
1184 -
1185 --static int lprocfs_ofd_rd_tot_dirty(char *page, char **start, off_t off,
1186 -- int count, int *eof, void *data)
1187 -+static int ofd_tot_dirty_seq_show(struct seq_file *m, void *data)
1188 - {
1189 -- struct obd_device *obd = (struct obd_device *)data;
1190 -+ struct obd_device *obd = m->private;
1191 - struct ofd_device *ofd;
1192 -
1193 - LASSERT(obd != NULL);
1194 - ofd = ofd_dev(obd->obd_lu_dev);
1195 -- *eof = 1;
1196 -- return snprintf(page, count, LPU64"\n", ofd->ofd_tot_dirty);
1197 -+ return seq_printf(m, LPU64"\n", ofd->ofd_tot_dirty);
1198 - }
1199 -+LPROC_SEQ_FOPS_RO(ofd_tot_dirty);
1200 -
1201 --static int lprocfs_ofd_rd_tot_granted(char *page, char **start, off_t off,
1202 -- int count, int *eof, void *data)
1203 -+static int ofd_tot_granted_seq_show(struct seq_file *m, void *data)
1204 - {
1205 -- struct obd_device *obd = (struct obd_device *)data;
1206 -+ struct obd_device *obd = m->private;
1207 - struct ofd_device *ofd;
1208 -
1209 - LASSERT(obd != NULL);
1210 - ofd = ofd_dev(obd->obd_lu_dev);
1211 -- *eof = 1;
1212 -- return snprintf(page, count, LPU64"\n", ofd->ofd_tot_granted);
1213 -+ return seq_printf(m, LPU64"\n", ofd->ofd_tot_granted);
1214 - }
1215 -+LPROC_SEQ_FOPS_RO(ofd_tot_granted);
1216 -
1217 --static int lprocfs_ofd_rd_tot_pending(char *page, char **start, off_t off,
1218 -- int count, int *eof, void *data)
1219 -+static int ofd_tot_pending_seq_show(struct seq_file *m, void *data)
1220 - {
1221 -- struct obd_device *obd = (struct obd_device *)data;
1222 -+ struct obd_device *obd = m->private;
1223 - struct ofd_device *ofd;
1224 -
1225 - LASSERT(obd != NULL);
1226 - ofd = ofd_dev(obd->obd_lu_dev);
1227 -- *eof = 1;
1228 -- return snprintf(page, count, LPU64"\n", ofd->ofd_tot_pending);
1229 -+ return seq_printf(m, LPU64"\n", ofd->ofd_tot_pending);
1230 - }
1231 -+LPROC_SEQ_FOPS_RO(ofd_tot_pending);
1232 -
1233 --static int lprocfs_ofd_rd_grant_precreate(char *page, char **start, off_t off,
1234 -- int count, int *eof, void *data)
1235 -+static int ofd_grant_precreate_seq_show(struct seq_file *m, void *data)
1236 - {
1237 -- struct obd_device *obd = (struct obd_device *)data;
1238 -+ struct obd_device *obd = m->private;
1239 -
1240 - LASSERT(obd != NULL);
1241 -- *eof = 1;
1242 -- return snprintf(page, count, "%ld\n",
1243 -- obd->obd_self_export->exp_filter_data.fed_grant);
1244 -+ return seq_printf(m, "%ld\n",
1245 -+ obd->obd_self_export->exp_filter_data.fed_grant);
1246 - }
1247 -+LPROC_SEQ_FOPS_RO(ofd_grant_precreate);
1248 -
1249 --static int lprocfs_ofd_rd_grant_ratio(char *page, char **start, off_t off,
1250 -- int count, int *eof, void *data)
1251 -+static int ofd_grant_ratio_seq_show(struct seq_file *m, void *data)
1252 - {
1253 -- struct obd_device *obd = (struct obd_device *)data;
1254 -+ struct obd_device *obd = m->private;
1255 - struct ofd_device *ofd;
1256 -
1257 - LASSERT(obd != NULL);
1258 - ofd = ofd_dev(obd->obd_lu_dev);
1259 -- *eof = 1;
1260 -- return snprintf(page, count, "%d%%\n",
1261 -- (int) ofd_grant_reserved(ofd, 100));
1262 -+ return seq_printf(m, "%d%%\n",
1263 -+ (int) ofd_grant_reserved(ofd, 100));
1264 - }
1265 -
1266 --static int lprocfs_ofd_wr_grant_ratio(struct file *file,
1267 -- const char __user *buffer,
1268 -- unsigned long count, void *data)
1269 -+static ssize_t
1270 -+ofd_grant_ratio_seq_write(struct file *file, const char __user *buffer,
1271 -+ size_t count, loff_t *off)
1272 - {
1273 -- struct obd_device *obd = (struct obd_device *)data;
1274 -+ struct seq_file *m = file->private_data;
1275 -+ struct obd_device *obd = m->private;
1276 - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1277 - int val;
1278 - int rc;
1279 -@@ -145,24 +139,24 @@ static int lprocfs_ofd_wr_grant_ratio(struct file *file,
1280 - spin_unlock(&ofd->ofd_grant_lock);
1281 - return count;
1282 - }
1283 -+LPROC_SEQ_FOPS(ofd_grant_ratio);
1284 -
1285 --static int lprocfs_ofd_rd_precreate_batch(char *page, char **start, off_t off,
1286 -- int count, int *eof, void *data)
1287 -+static int ofd_precreate_batch_seq_show(struct seq_file *m, void *data)
1288 - {
1289 -- struct obd_device *obd = (struct obd_device *)data;
1290 -+ struct obd_device *obd = m->private;
1291 - struct ofd_device *ofd;
1292 -
1293 - LASSERT(obd != NULL);
1294 - ofd = ofd_dev(obd->obd_lu_dev);
1295 -- *eof = 1;
1296 -- return snprintf(page, count, "%d\n", ofd->ofd_precreate_batch);
1297 -+ return seq_printf(m, "%d\n", ofd->ofd_precreate_batch);
1298 - }
1299 -
1300 --static int lprocfs_ofd_wr_precreate_batch(struct file *file,
1301 -- const char __user *buffer,
1302 -- unsigned long count, void *data)
1303 -+static ssize_t
1304 -+ofd_precreate_batch_seq_write(struct file *file, const char __user *buffer,
1305 -+ size_t count, loff_t *off)
1306 - {
1307 -- struct obd_device *obd = (struct obd_device *)data;
1308 -+ struct seq_file *m = file->private_data;
1309 -+ struct obd_device *obd = m->private;
1310 - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1311 - int val;
1312 - int rc;
1313 -@@ -179,11 +173,11 @@ static int lprocfs_ofd_wr_precreate_batch(struct file *file,
1314 - spin_unlock(&ofd->ofd_batch_lock);
1315 - return count;
1316 - }
1317 -+LPROC_SEQ_FOPS(ofd_precreate_batch);
1318 -
1319 --static int lprocfs_ofd_rd_last_id(char *page, char **start, off_t off,
1320 -- int count, int *eof, void *data)
1321 -+static int ofd_last_id_seq_show(struct seq_file *m, void *data)
1322 - {
1323 -- struct obd_device *obd = data;
1324 -+ struct obd_device *obd = m->private;
1325 - struct ofd_device *ofd;
1326 - struct ofd_seq *oseq = NULL;
1327 - int retval = 0, rc;
1328 -@@ -201,35 +195,32 @@ static int lprocfs_ofd_rd_last_id(char *page, char **start, off_t off,
1329 - fid_idif_seq(ostid_id(&oseq->os_oi),
1330 - ofd->ofd_lut.lut_lsd.lsd_osd_index) :
1331 - ostid_seq(&oseq->os_oi);
1332 -- rc = snprintf(page, count, DOSTID"\n", seq,
1333 -- ostid_id(&oseq->os_oi));
1334 -+ rc = seq_printf(m, DOSTID"\n", seq, ostid_id(&oseq->os_oi));
1335 - if (rc < 0) {
1336 - retval = rc;
1337 - break;
1338 - }
1339 -- page += rc;
1340 -- count -= rc;
1341 - retval += rc;
1342 - }
1343 - read_unlock(&ofd->ofd_seq_list_lock);
1344 - return retval;
1345 - }
1346 -+LPROC_SEQ_FOPS_RO(ofd_last_id);
1347 -
1348 --int lprocfs_ofd_rd_fmd_max_num(char *page, char **start, off_t off,
1349 -- int count, int *eof, void *data)
1350 -+static int ofd_fmd_max_num_seq_show(struct seq_file *m, void *data)
1351 - {
1352 -- struct obd_device *obd = data;
1353 -- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1354 -- int rc;
1355 -+ struct obd_device *obd = m->private;
1356 -+ struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1357 -
1358 -- rc = snprintf(page, count, "%u\n", ofd->ofd_fmd_max_num);
1359 -- return rc;
1360 -+ return seq_printf(m, "%u\n", ofd->ofd_fmd_max_num);
1361 - }
1362 -
1363 --int lprocfs_ofd_wr_fmd_max_num(struct file *file, const char __user *buffer,
1364 -- unsigned long count, void *data)
1365 -+static ssize_t
1366 -+ofd_fmd_max_num_seq_write(struct file *file, const char __user *buffer,
1367 -+ size_t count, loff_t *off)
1368 - {
1369 -- struct obd_device *obd = data;
1370 -+ struct seq_file *m = file->private_data;
1371 -+ struct obd_device *obd = m->private;
1372 - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1373 - int val;
1374 - int rc;
1375 -@@ -244,22 +235,22 @@ int lprocfs_ofd_wr_fmd_max_num(struct file *file, const char __user *buffer,
1376 - ofd->ofd_fmd_max_num = val;
1377 - return count;
1378 - }
1379 -+LPROC_SEQ_FOPS(ofd_fmd_max_num);
1380 -
1381 --int lprocfs_ofd_rd_fmd_max_age(char *page, char **start, off_t off,
1382 -- int count, int *eof, void *data)
1383 -+static int ofd_fmd_max_age_seq_show(struct seq_file *m, void *data)
1384 - {
1385 -- struct obd_device *obd = data;
1386 -- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1387 -- int rc;
1388 -+ struct obd_device *obd = m->private;
1389 -+ struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1390 -
1391 -- rc = snprintf(page, count, "%ld\n", ofd->ofd_fmd_max_age / HZ);
1392 -- return rc;
1393 -+ return seq_printf(m, "%ld\n", ofd->ofd_fmd_max_age / HZ);
1394 - }
1395 -
1396 --int lprocfs_ofd_wr_fmd_max_age(struct file *file, const char __user *buffer,
1397 -- unsigned long count, void *data)
1398 -+static ssize_t
1399 -+ofd_fmd_max_age_seq_write(struct file *file, const char __user *buffer,
1400 -+ size_t count, loff_t *off)
1401 - {
1402 -- struct obd_device *obd = data;
1403 -+ struct seq_file *m = file->private_data;
1404 -+ struct obd_device *obd = m->private;
1405 - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1406 - int val;
1407 - int rc;
1408 -@@ -274,22 +265,22 @@ int lprocfs_ofd_wr_fmd_max_age(struct file *file, const char __user *buffer,
1409 - ofd->ofd_fmd_max_age = val * HZ;
1410 - return count;
1411 - }
1412 -+LPROC_SEQ_FOPS(ofd_fmd_max_age);
1413 -
1414 --static int lprocfs_ofd_rd_capa(char *page, char **start, off_t off,
1415 -- int count, int *eof, void *data)
1416 -+static int ofd_capa_seq_show(struct seq_file *m, void *data)
1417 - {
1418 -- struct obd_device *obd = data;
1419 -- int rc;
1420 -+ struct obd_device *obd = m->private;
1421 -
1422 -- rc = snprintf(page, count, "capability on: %s\n",
1423 -- obd->u.filter.fo_fl_oss_capa ? "oss" : "");
1424 -- return rc;
1425 -+ return seq_printf(m, "capability on: %s\n",
1426 -+ obd->u.filter.fo_fl_oss_capa ? "oss" : "");
1427 - }
1428 -
1429 --static int lprocfs_ofd_wr_capa(struct file *file, const char __user *buffer,
1430 -- unsigned long count, void *data)
1431 -+static ssize_t
1432 -+ofd_capa_seq_write(struct file *file, const char *__user buffer, size_t count,
1433 -+ loff_t *off)
1434 - {
1435 -- struct obd_device *obd = data;
1436 -+ struct seq_file *m = file->private_data;
1437 -+ struct obd_device *obd = m->private;
1438 - int val, rc;
1439 -
1440 - rc = lprocfs_write_helper(buffer, count, &val);
1441 -@@ -308,28 +299,29 @@ static int lprocfs_ofd_wr_capa(struct file *file, const char __user *buffer,
1442 - val ? "enabled" : "disabled");
1443 - return count;
1444 - }
1445 -+LPROC_SEQ_FOPS(ofd_capa);
1446 -
1447 --static int lprocfs_ofd_rd_capa_count(char *page, char **start, off_t off,
1448 -- int count, int *eof, void *data)
1449 -+static int ofd_capa_count_seq_show(struct seq_file *m, void *data)
1450 - {
1451 -- return snprintf(page, count, "%d %d\n",
1452 -- capa_count[CAPA_SITE_CLIENT],
1453 -- capa_count[CAPA_SITE_SERVER]);
1454 -+ return seq_printf(m, "%d %d\n", capa_count[CAPA_SITE_CLIENT],
1455 -+ capa_count[CAPA_SITE_SERVER]);
1456 - }
1457 -+LPROC_SEQ_FOPS_RO(ofd_capa_count);
1458 -
1459 --int lprocfs_ofd_rd_degraded(char *page, char **start, off_t off,
1460 -- int count, int *eof, void *data)
1461 -+static int ofd_degraded_seq_show(struct seq_file *m, void *data)
1462 - {
1463 -- struct obd_device *obd = data;
1464 -+ struct obd_device *obd = m->private;
1465 - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1466 -
1467 -- return snprintf(page, count, "%u\n", ofd->ofd_raid_degraded);
1468 -+ return seq_printf(m, "%u\n", ofd->ofd_raid_degraded);
1469 - }
1470 -
1471 --int lprocfs_ofd_wr_degraded(struct file *file, const char __user *buffer,
1472 -- unsigned long count, void *data)
1473 -+static ssize_t
1474 -+ofd_degraded_seq_write(struct file *file, const char __user *buffer,
1475 -+ size_t count, loff_t *off)
1476 - {
1477 -- struct obd_device *obd = data;
1478 -+ struct seq_file *m = file->private_data;
1479 -+ struct obd_device *obd = m->private;
1480 - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1481 - int val, rc;
1482 -
1483 -@@ -340,38 +332,37 @@ int lprocfs_ofd_wr_degraded(struct file *file, const char __user *buffer,
1484 - spin_lock(&ofd->ofd_flags_lock);
1485 - ofd->ofd_raid_degraded = !!val;
1486 - spin_unlock(&ofd->ofd_flags_lock);
1487 --
1488 - return count;
1489 - }
1490 -+LPROC_SEQ_FOPS(ofd_degraded);
1491 -
1492 --int lprocfs_ofd_rd_fstype(char *page, char **start, off_t off, int count,
1493 -- int *eof, void *data)
1494 -+static int ofd_fstype_seq_show(struct seq_file *m, void *data)
1495 - {
1496 -- struct obd_device *obd = data;
1497 -+ struct obd_device *obd = m->private;
1498 - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1499 - struct lu_device *d;
1500 -
1501 - LASSERT(ofd->ofd_osd);
1502 - d = &ofd->ofd_osd->dd_lu_dev;
1503 - LASSERT(d->ld_type);
1504 -- return snprintf(page, count, "%s\n", d->ld_type->ldt_name);
1505 -+ return seq_printf(m, "%s\n", d->ld_type->ldt_name);
1506 - }
1507 -+LPROC_SEQ_FOPS_RO(ofd_fstype);
1508 -
1509 --int lprocfs_ofd_rd_syncjournal(char *page, char **start, off_t off,
1510 -- int count, int *eof, void *data)
1511 -+static int ofd_syncjournal_seq_show(struct seq_file *m, void *data)
1512 - {
1513 -- struct obd_device *obd = data;
1514 -+ struct obd_device *obd = m->private;
1515 - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1516 -- int rc;
1517 -
1518 -- rc = snprintf(page, count, "%u\n", ofd->ofd_syncjournal);
1519 -- return rc;
1520 -+ return seq_printf(m, "%u\n", ofd->ofd_syncjournal);
1521 - }
1522 -
1523 --int lprocfs_ofd_wr_syncjournal(struct file *file, const char __user *buffer,
1524 -- unsigned long count, void *data)
1525 -+static ssize_t
1526 -+ofd_syncjournal_seq_write(struct file *file, const char __user *buffer,
1527 -+ size_t count, loff_t *off)
1528 - {
1529 -- struct obd_device *obd = data;
1530 -+ struct seq_file *m = file->private_data;
1531 -+ struct obd_device *obd = m->private;
1532 - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1533 - int val;
1534 - int rc;
1535 -@@ -390,6 +381,7 @@ int lprocfs_ofd_wr_syncjournal(struct file *file, const char __user *buffer,
1536 -
1537 - return count;
1538 - }
1539 -+LPROC_SEQ_FOPS(ofd_syncjournal);
1540 -
1541 - /* This must be longer than the longest string below */
1542 - #define SYNC_STATES_MAXLEN 16
1543 -@@ -397,23 +389,21 @@ static char *sync_on_cancel_states[] = {"never",
1544 - "blocking",
1545 - "always" };
1546 -
1547 --int lprocfs_ofd_rd_sync_lock_cancel(char *page, char **start, off_t off,
1548 -- int count, int *eof, void *data)
1549 -+static int ofd_sync_lock_cancel_seq_show(struct seq_file *m, void *data)
1550 - {
1551 -- struct obd_device *obd = data;
1552 -+ struct obd_device *obd = m->private;
1553 - struct lu_target *tgt = obd->u.obt.obt_lut;
1554 -- int rc;
1555 -
1556 -- rc = snprintf(page, count, "%s\n",
1557 -- sync_on_cancel_states[tgt->lut_sync_lock_cancel]);
1558 -- return rc;
1559 -+ return seq_printf(m, "%s\n",
1560 -+ sync_on_cancel_states[tgt->lut_sync_lock_cancel]);
1561 - }
1562 -
1563 --int lprocfs_ofd_wr_sync_lock_cancel(struct file *file,
1564 -- const char __user *buffer,
1565 -- unsigned long count, void *data)
1566 -+static ssize_t
1567 -+ofd_sync_lock_cancel_seq_write(struct file *file, const char __user *buffer,
1568 -+ size_t count, loff_t *off)
1569 - {
1570 -- struct obd_device *obd = data;
1571 -+ struct seq_file *m = file->private_data;
1572 -+ struct obd_device *obd = m->private;
1573 - struct lu_target *tgt = obd->u.obt.obt_lut;
1574 - char kernbuf[SYNC_STATES_MAXLEN];
1575 - int val = -1;
1576 -@@ -455,23 +445,23 @@ int lprocfs_ofd_wr_sync_lock_cancel(struct file *file,
1577 - spin_unlock(&tgt->lut_flags_lock);
1578 - return count;
1579 - }
1580 -+LPROC_SEQ_FOPS(ofd_sync_lock_cancel);
1581 -
1582 --int lprocfs_ofd_rd_grant_compat_disable(char *page, char **start, off_t off,
1583 -- int count, int *eof, void *data)
1584 -+static int ofd_grant_compat_disable_seq_show(struct seq_file *m, void *data)
1585 - {
1586 -- struct obd_device *obd = data;
1587 -- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1588 -- int rc;
1589 -+ struct obd_device *obd = m->private;
1590 -+ struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1591 -
1592 -- rc = snprintf(page, count, "%u\n", ofd->ofd_grant_compat_disable);
1593 -- return rc;
1594 -+ return seq_printf(m, "%u\n", ofd->ofd_grant_compat_disable);
1595 - }
1596 -
1597 --int lprocfs_ofd_wr_grant_compat_disable(struct file *file,
1598 -- const char __user *buffer,
1599 -- unsigned long count, void *data)
1600 -+static ssize_t
1601 -+ofd_grant_compat_disable_seq_write(struct file *file,
1602 -+ const char __user *buffer,
1603 -+ size_t count, loff_t *off)
1604 - {
1605 -- struct obd_device *obd = data;
1606 -+ struct seq_file *m = file->private_data;
1607 -+ struct obd_device *obd = m->private;
1608 - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1609 - int val;
1610 - int rc;
1611 -@@ -489,42 +479,43 @@ int lprocfs_ofd_wr_grant_compat_disable(struct file *file,
1612 -
1613 - return count;
1614 - }
1615 -+LPROC_SEQ_FOPS(ofd_grant_compat_disable);
1616 -
1617 --int lprocfs_ofd_rd_soft_sync_limit(char *page, char **start, off_t off,
1618 -- int count, int *eof, void *data)
1619 -+static int ofd_soft_sync_limit_seq_show(struct seq_file *m, void *data)
1620 - {
1621 -- struct obd_device *obd = data;
1622 -+ struct obd_device *obd = m->private;
1623 - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1624 -
1625 -- return lprocfs_rd_uint(page, start, off, count, eof,
1626 -- &ofd->ofd_soft_sync_limit);
1627 -+ return lprocfs_uint_seq_show(m, &ofd->ofd_soft_sync_limit);
1628 - }
1629 -
1630 --int lprocfs_ofd_wr_soft_sync_limit(struct file *file, const char __user *buffer,
1631 -- unsigned long count, void *data)
1632 -+static ssize_t
1633 -+ofd_soft_sync_limit_seq_write(struct file *file, const char __user *buffer,
1634 -+ size_t count, loff_t *off)
1635 - {
1636 -- struct obd_device *obd = data;
1637 -- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1638 -+ struct seq_file *m = file->private_data;
1639 -+ struct obd_device *obd = m->private;
1640 -+ struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1641 -
1642 -- return lprocfs_wr_uint(file, buffer, count, &ofd->ofd_soft_sync_limit);
1643 -+ return lprocfs_uint_seq_write(file, buffer, count,
1644 -+ (loff_t *) &ofd->ofd_soft_sync_limit);
1645 - }
1646 -+LPROC_SEQ_FOPS(ofd_soft_sync_limit);
1647 -
1648 --static int lprocfs_rd_lfsck_speed_limit(char *page, char **start, off_t off,
1649 -- int count, int *eof, void *data)
1650 -+static int ofd_lfsck_speed_limit_seq_show(struct seq_file *m, void *data)
1651 - {
1652 -- struct obd_device *obd = data;
1653 -+ struct obd_device *obd = m->private;
1654 - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1655 -
1656 -- *eof = 1;
1657 --
1658 -- return lfsck_get_speed(ofd->ofd_osd, page, count);
1659 -+ return lfsck_get_speed(m, ofd->ofd_osd);
1660 - }
1661 -
1662 --static int lprocfs_wr_lfsck_speed_limit(struct file *file,
1663 -- const char __user *buffer,
1664 -- unsigned long count, void *data)
1665 -+static ssize_t
1666 -+ofd_lfsck_speed_limit_seq_write(struct file *file, const char __user *buffer,
1667 -+ size_t count, loff_t *off)
1668 - {
1669 -- struct obd_device *obd = data;
1670 -+ struct seq_file *m = file->private_data;
1671 -+ struct obd_device *obd = m->private;
1672 - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1673 - __u32 val;
1674 - int rc;
1675 -@@ -537,38 +528,35 @@ static int lprocfs_wr_lfsck_speed_limit(struct file *file,
1676 -
1677 - return rc != 0 ? rc : count;
1678 - }
1679 -+LPROC_SEQ_FOPS(ofd_lfsck_speed_limit);
1680 -
1681 --static int lprocfs_rd_lfsck_layout(char *page, char **start, off_t off,
1682 -- int count, int *eof, void *data)
1683 -+static int ofd_lfsck_layout_seq_show(struct seq_file *m, void *data)
1684 - {
1685 -- struct obd_device *obd = data;
1686 -- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1687 --
1688 -- *eof = 1;
1689 -+ struct obd_device *obd = m->private;
1690 -+ struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1691 -
1692 -- return lfsck_dump(ofd->ofd_osd, page, count, LT_LAYOUT);
1693 -+ return lfsck_dump(m, ofd->ofd_osd, LT_LAYOUT);
1694 - }
1695 -+LPROC_SEQ_FOPS_RO(ofd_lfsck_layout);
1696 -
1697 --static int lprocfs_rd_lfsck_verify_pfid(char *page, char **start, off_t off,
1698 -- int count, int *eof, void *data)
1699 -+static int ofd_lfsck_verify_pfid_seq_show(struct seq_file *m, void *data)
1700 - {
1701 -- struct obd_device *obd = data;
1702 -- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1703 --
1704 -- *eof = 1;
1705 -+ struct obd_device *obd = m->private;
1706 -+ struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1707 -
1708 -- return snprintf(page, count,
1709 -- "switch: %s\ndetected: "LPU64"\nrepaired: "LPU64"\n",
1710 -- ofd->ofd_lfsck_verify_pfid ? "on" : "off",
1711 -- ofd->ofd_inconsistency_self_detected,
1712 -- ofd->ofd_inconsistency_self_repaired);
1713 -+ return seq_printf(m,
1714 -+ "switch: %s\ndetected: "LPU64"\nrepaired: "LPU64"\n",
1715 -+ ofd->ofd_lfsck_verify_pfid ? "on" : "off",
1716 -+ ofd->ofd_inconsistency_self_detected,
1717 -+ ofd->ofd_inconsistency_self_repaired);
1718 - }
1719 -
1720 --static int lprocfs_wr_lfsck_verify_pfid(struct file *file,
1721 -- const char __user *buffer,
1722 -- unsigned long count, void *data)
1723 -+static ssize_t
1724 -+ofd_lfsck_verify_pfid_seq_write(struct file *file, const char __user *buffer,
1725 -+ size_t count, loff_t *off)
1726 - {
1727 -- struct obd_device *obd = data;
1728 -+ struct seq_file *m = file->private_data;
1729 -+ struct obd_device *obd = m->private;
1730 - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
1731 - __u32 val;
1732 - int rc;
1733 -@@ -581,75 +569,101 @@ static int lprocfs_wr_lfsck_verify_pfid(struct file *file,
1734 -
1735 - return count;
1736 - }
1737 --
1738 --static struct lprocfs_vars lprocfs_ofd_obd_vars[] = {
1739 -- { "uuid", lprocfs_rd_uuid, 0, 0 },
1740 -- { "blocksize", lprocfs_rd_blksize, 0, 0 },
1741 -- { "kbytestotal", lprocfs_rd_kbytestotal, 0, 0 },
1742 -- { "kbytesfree", lprocfs_rd_kbytesfree, 0, 0 },
1743 -- { "kbytesavail", lprocfs_rd_kbytesavail, 0, 0 },
1744 -- { "filestotal", lprocfs_rd_filestotal, 0, 0 },
1745 -- { "filesfree", lprocfs_rd_filesfree, 0, 0 },
1746 -- { "seqs_allocated", lprocfs_ofd_rd_seqs, 0, 0 },
1747 -- { "fstype", lprocfs_ofd_rd_fstype, 0, 0 },
1748 -- { "last_id", lprocfs_ofd_rd_last_id, 0, 0 },
1749 -- { "tot_dirty", lprocfs_ofd_rd_tot_dirty, 0, 0 },
1750 -- { "tot_pending", lprocfs_ofd_rd_tot_pending, 0, 0 },
1751 -- { "tot_granted", lprocfs_ofd_rd_tot_granted, 0, 0 },
1752 -- { "grant_precreate", lprocfs_ofd_rd_grant_precreate, 0, 0 },
1753 -- { "grant_ratio", lprocfs_ofd_rd_grant_ratio,
1754 -- lprocfs_ofd_wr_grant_ratio, 0, 0 },
1755 -- { "precreate_batch", lprocfs_ofd_rd_precreate_batch,
1756 -- lprocfs_ofd_wr_precreate_batch, 0 },
1757 -- { "recovery_status", lprocfs_obd_rd_recovery_status, 0, 0 },
1758 -- { "recovery_time_soft", lprocfs_obd_rd_recovery_time_soft,
1759 -- lprocfs_obd_wr_recovery_time_soft, 0},
1760 -- { "recovery_time_hard", lprocfs_obd_rd_recovery_time_hard,
1761 -- lprocfs_obd_wr_recovery_time_hard, 0},
1762 -- { "evict_client", 0, lprocfs_wr_evict_client, 0,
1763 -- &lprocfs_evict_client_fops},
1764 -- { "num_exports", lprocfs_rd_num_exports, 0, 0 },
1765 -- { "degraded", lprocfs_ofd_rd_degraded,
1766 -- lprocfs_ofd_wr_degraded, 0},
1767 -- { "sync_journal", lprocfs_ofd_rd_syncjournal,
1768 -- lprocfs_ofd_wr_syncjournal, 0 },
1769 -- { "sync_on_lock_cancel", lprocfs_ofd_rd_sync_lock_cancel,
1770 -- lprocfs_ofd_wr_sync_lock_cancel, 0 },
1771 -- { "instance", lprocfs_target_rd_instance, 0 },
1772 -- { "ir_factor", lprocfs_obd_rd_ir_factor,
1773 -- lprocfs_obd_wr_ir_factor, 0},
1774 -- { "grant_compat_disable", lprocfs_ofd_rd_grant_compat_disable,
1775 -- lprocfs_ofd_wr_grant_compat_disable, 0 },
1776 -- { "client_cache_count", lprocfs_ofd_rd_fmd_max_num,
1777 -- lprocfs_ofd_wr_fmd_max_num, 0 },
1778 -- { "client_cache_seconds", lprocfs_ofd_rd_fmd_max_age,
1779 -- lprocfs_ofd_wr_fmd_max_age, 0 },
1780 -- { "capa", lprocfs_ofd_rd_capa,
1781 -- lprocfs_ofd_wr_capa, 0 },
1782 -- { "capa_count", lprocfs_ofd_rd_capa_count, 0, 0 },
1783 -- { "job_cleanup_interval", lprocfs_rd_job_interval,
1784 -- lprocfs_wr_job_interval, 0},
1785 -- { "soft_sync_limit", lprocfs_ofd_rd_soft_sync_limit,
1786 -- lprocfs_ofd_wr_soft_sync_limit, 0},
1787 -- { "lfsck_speed_limit", lprocfs_rd_lfsck_speed_limit,
1788 -- lprocfs_wr_lfsck_speed_limit, 0 },
1789 -- { "lfsck_layout", lprocfs_rd_lfsck_layout, 0, 0 },
1790 -- { "lfsck_verify_pfid", lprocfs_rd_lfsck_verify_pfid,
1791 -- lprocfs_wr_lfsck_verify_pfid, 0 },
1792 -- { 0 }
1793 --};
1794 --
1795 --static struct lprocfs_vars lprocfs_ofd_module_vars[] = {
1796 -- { "num_refs", lprocfs_rd_numrefs, 0, 0 },
1797 -+LPROC_SEQ_FOPS(ofd_lfsck_verify_pfid);
1798 -+
1799 -+LPROC_SEQ_FOPS_RO_TYPE(ofd, uuid);
1800 -+LPROC_SEQ_FOPS_RO_TYPE(ofd, blksize);
1801 -+LPROC_SEQ_FOPS_RO_TYPE(ofd, kbytestotal);
1802 -+LPROC_SEQ_FOPS_RO_TYPE(ofd, kbytesfree);
1803 -+LPROC_SEQ_FOPS_RO_TYPE(ofd, kbytesavail);
1804 -+LPROC_SEQ_FOPS_RO_TYPE(ofd, filestotal);
1805 -+LPROC_SEQ_FOPS_RO_TYPE(ofd, filesfree);
1806 -+
1807 -+LPROC_SEQ_FOPS_RO_TYPE(ofd, recovery_status);
1808 -+LPROC_SEQ_FOPS_RW_TYPE(ofd, recovery_time_soft);
1809 -+LPROC_SEQ_FOPS_RW_TYPE(ofd, recovery_time_hard);
1810 -+LPROC_SEQ_FOPS_WO_TYPE(ofd, evict_client);
1811 -+LPROC_SEQ_FOPS_RO_TYPE(ofd, num_exports);
1812 -+LPROC_SEQ_FOPS_RO_TYPE(ofd, target_instance);
1813 -+LPROC_SEQ_FOPS_RW_TYPE(ofd, ir_factor);
1814 -+LPROC_SEQ_FOPS_RW_TYPE(ofd, job_interval);
1815 -+
1816 -+struct lprocfs_seq_vars lprocfs_ofd_obd_vars[] = {
1817 -+ { .name = "uuid",
1818 -+ .fops = &ofd_uuid_fops },
1819 -+ { .name = "blocksize",
1820 -+ .fops = &ofd_blksize_fops },
1821 -+ { .name = "kbytestotal",
1822 -+ .fops = &ofd_kbytestotal_fops },
1823 -+ { .name = "kbytesfree",
1824 -+ .fops = &ofd_kbytesfree_fops },
1825 -+ { .name = "kbytesavail",
1826 -+ .fops = &ofd_kbytesavail_fops },
1827 -+ { .name = "filestotal",
1828 -+ .fops = &ofd_filestotal_fops },
1829 -+ { .name = "filesfree",
1830 -+ .fops = &ofd_filesfree_fops },
1831 -+ { .name = "seqs_allocated",
1832 -+ .fops = &ofd_seqs_fops },
1833 -+ { .name = "fstype",
1834 -+ .fops = &ofd_fstype_fops },
1835 -+ { .name = "last_id",
1836 -+ .fops = &ofd_last_id_fops },
1837 -+ { .name = "tot_dirty",
1838 -+ .fops = &ofd_tot_dirty_fops },
1839 -+ { .name = "tot_pending",
1840 -+ .fops = &ofd_tot_pending_fops },
1841 -+ { .name = "tot_granted",
1842 -+ .fops = &ofd_tot_granted_fops },
1843 -+ { .name = "grant_precreate",
1844 -+ .fops = &ofd_grant_precreate_fops },
1845 -+ { .name = "grant_ratio",
1846 -+ .fops = &ofd_grant_ratio_fops },
1847 -+ { .name = "precreate_batch",
1848 -+ .fops = &ofd_precreate_batch_fops },
1849 -+ { .name = "recovery_status",
1850 -+ .fops = &ofd_recovery_status_fops },
1851 -+ { .name = "recovery_time_soft",
1852 -+ .fops = &ofd_recovery_time_soft_fops },
1853 -+ { .name = "recovery_time_hard",
1854 -+ .fops = &ofd_recovery_time_hard_fops },
1855 -+ { .name = "evict_client",
1856 -+ .fops = &ofd_evict_client_fops },
1857 -+ { .name = "num_exports",
1858 -+ .fops = &ofd_num_exports_fops },
1859 -+ { .name = "degraded",
1860 -+ .fops = &ofd_degraded_fops },
1861 -+ { .name = "sync_journal",
1862 -+ .fops = &ofd_syncjournal_fops },
1863 -+ { .name = "sync_on_lock_cancel",
1864 -+ .fops = &ofd_sync_lock_cancel_fops },
1865 -+ { .name = "instance",
1866 -+ .fops = &ofd_target_instance_fops },
1867 -+ { .name = "ir_factor",
1868 -+ .fops = &ofd_ir_factor_fops },
1869 -+ { .name = "grant_compat_disable",
1870 -+ .fops = &ofd_grant_compat_disable_fops },
1871 -+ { .name = "client_cache_count",
1872 -+ .fops = &ofd_fmd_max_num_fops },
1873 -+ { .name = "client_cache_seconds",
1874 -+ .fops = &ofd_fmd_max_age_fops },
1875 -+ { .name = "capa",
1876 -+ .fops = &ofd_capa_fops },
1877 -+ { .name = "capa_count",
1878 -+ .fops = &ofd_capa_count_fops },
1879 -+ { .name = "job_cleanup_interval",
1880 -+ .fops = &ofd_job_interval_fops },
1881 -+ { .name = "soft_sync_limit",
1882 -+ .fops = &ofd_soft_sync_limit_fops },
1883 -+ { .name = "lfsck_speed_limit",
1884 -+ .fops = &ofd_lfsck_speed_limit_fops },
1885 -+ { .name = "lfsck_layout",
1886 -+ .fops = &ofd_lfsck_layout_fops },
1887 -+ { .name = "lfsck_verify_pfid",
1888 -+ .fops = &ofd_lfsck_verify_pfid_fops },
1889 - { 0 }
1890 - };
1891 -
1892 --void lprocfs_ofd_init_vars(struct lprocfs_static_vars *lvars)
1893 --{
1894 -- lvars->module_vars = lprocfs_ofd_module_vars;
1895 -- lvars->obd_vars = lprocfs_ofd_obd_vars;
1896 --}
1897 --
1898 - void ofd_stats_counter_init(struct lprocfs_stats *stats)
1899 - {
1900 - LASSERT(stats && stats->ls_num >= LPROC_OFD_STATS_LAST);
1901 -diff --git a/lustre/ofd/ofd_dev.c b/lustre/ofd/ofd_dev.c
1902 -index 0f0d51a..6172913 100644
1903 ---- a/lustre/ofd/ofd_dev.c
1904 -+++ b/lustre/ofd/ofd_dev.c
1905 -@@ -239,8 +239,7 @@ static int ofd_process_config(const struct lu_env *env, struct lu_device *d,
1906 -
1907 - switch (cfg->lcfg_command) {
1908 - case LCFG_PARAM: {
1909 -- struct lprocfs_static_vars lvars;
1910 --
1911 -+ struct obd_device *obd = ofd_obd(m);
1912 - /* For interoperability */
1913 - struct cfg_interop_param *ptr = NULL;
1914 - struct lustre_cfg *old_cfg = NULL;
1915 -@@ -278,8 +277,7 @@ static int ofd_process_config(const struct lu_env *env, struct lu_device *d,
1916 - break;
1917 - }
1918 -
1919 -- lprocfs_ofd_init_vars(&lvars);
1920 -- rc = class_process_proc_param(PARAM_OST, lvars.obd_vars, cfg,
1921 -+ rc = class_process_proc_seq_param(PARAM_OST, obd->obd_vars, cfg,
1922 - d->ld_obd);
1923 - if (rc > 0 || rc == -ENOSYS) {
1924 - CDEBUG(D_CONFIG, "pass param %s down the stack.\n",
1925 -@@ -485,9 +483,10 @@ static struct lu_device_operations ofd_lu_ops = {
1926 - .ldo_prepare = ofd_prepare,
1927 - };
1928 -
1929 -+LPROC_SEQ_FOPS(lprocfs_nid_stats_clear);
1930 -+
1931 - static int ofd_procfs_init(struct ofd_device *ofd)
1932 - {
1933 -- struct lprocfs_static_vars lvars;
1934 - struct obd_device *obd = ofd_obd(ofd);
1935 - cfs_proc_dir_entry_t *entry;
1936 - int rc = 0;
1937 -@@ -496,8 +495,8 @@ static int ofd_procfs_init(struct ofd_device *ofd)
1938 -
1939 - /* lprocfs must be setup before the ofd so state can be safely added
1940 - * to /proc incrementally as the ofd is setup */
1941 -- lprocfs_ofd_init_vars(&lvars);
1942 -- rc = lprocfs_obd_setup(obd, lvars.obd_vars);
1943 -+ obd->obd_vars = lprocfs_ofd_obd_vars;
1944 -+ rc = lprocfs_seq_obd_setup(obd);
1945 - if (rc) {
1946 - CERROR("%s: lprocfs_obd_setup failed: %d.\n",
1947 - obd->obd_name, rc);
1948 -@@ -513,7 +512,8 @@ static int ofd_procfs_init(struct ofd_device *ofd)
1949 -
1950 - obd->obd_uses_nid_stats = 1;
1951 -
1952 -- entry = lprocfs_register("exports", obd->obd_proc_entry, NULL, NULL);
1953 -+ entry = lprocfs_seq_register("exports", obd->obd_proc_entry, NULL,
1954 -+ NULL);
1955 - if (IS_ERR(entry)) {
1956 - rc = PTR_ERR(entry);
1957 - CERROR("%s: error %d setting up lprocfs for %s\n",
1958 -@@ -523,8 +523,10 @@ static int ofd_procfs_init(struct ofd_device *ofd)
1959 - obd->obd_proc_exports_entry = entry;
1960 -
1961 - entry = lprocfs_add_simple(obd->obd_proc_exports_entry, "clear",
1962 -- lprocfs_nid_stats_clear_read,
1963 -- lprocfs_nid_stats_clear_write, obd, NULL);
1964 -+#ifndef HAVE_ONLY_PROCFS_SEQ
1965 -+ NULL, NULL,
1966 -+#endif
1967 -+ obd, &lprocfs_nid_stats_clear_fops);
1968 - if (IS_ERR(entry)) {
1969 - rc = PTR_ERR(entry);
1970 - CERROR("%s: add proc entry 'clear' failed: %d.\n",
1971 -@@ -540,7 +542,7 @@ static int ofd_procfs_init(struct ofd_device *ofd)
1972 - GOTO(remove_entry_clear, rc);
1973 - RETURN(0);
1974 - remove_entry_clear:
1975 -- lprocfs_remove_proc_entry("clear", obd->obd_proc_exports_entry);
1976 -+ lprocfs_remove(&obd->obd_proc_exports_entry);
1977 - obd_cleanup:
1978 - lprocfs_obd_cleanup(obd);
1979 - lprocfs_free_obd_stats(obd);
1980 -@@ -548,51 +550,48 @@ obd_cleanup:
1981 - return rc;
1982 - }
1983 -
1984 -+/**
1985 -+ * ofd_procfs_add_brw_stats_symlink - expose osd stats to ofd layer
1986 -+ *
1987 -+ * The osd interfaces to the backend file system exposes useful data
1988 -+ * such as brw_stats and read or write cache states. This same data
1989 -+ * needs to be exposed into the obdfilter (ofd) layer to maintain
1990 -+ * backwards compatibility. This function creates the symlinks in the
1991 -+ * proc layer to enable this.
1992 -+ */
1993 - static void ofd_procfs_add_brw_stats_symlink(struct ofd_device *ofd)
1994 - {
1995 - struct obd_device *obd = ofd_obd(ofd);
1996 - struct obd_device *osd_obd = ofd->ofd_osd_exp->exp_obd;
1997 -- cfs_proc_dir_entry_t *osd_root = osd_obd->obd_type->typ_procroot;
1998 -- cfs_proc_dir_entry_t *osd_dir;
1999 -
2000 -- osd_dir = lprocfs_srch(osd_root, obd->obd_name);
2001 -- if (osd_dir == NULL)
2002 -+ if (obd->obd_proc_entry == NULL)
2003 - return;
2004 -
2005 -- if (lprocfs_srch(osd_dir, "brw_stats") != NULL)
2006 -- lprocfs_add_symlink("brw_stats", obd->obd_proc_entry,
2007 -- "../../%s/%s/brw_stats",
2008 -- osd_root->name, osd_dir->name);
2009 --
2010 -- if (lprocfs_srch(osd_dir, "read_cache_enable") != NULL)
2011 -- lprocfs_add_symlink("read_cache_enable", obd->obd_proc_entry,
2012 -- "../../%s/%s/read_cache_enable",
2013 -- osd_root->name, osd_dir->name);
2014 --
2015 -- if (lprocfs_srch(osd_dir, "readcache_max_filesize") != NULL)
2016 -- lprocfs_add_symlink("readcache_max_filesize",
2017 -- obd->obd_proc_entry,
2018 -- "../../%s/%s/readcache_max_filesize",
2019 -- osd_root->name, osd_dir->name);
2020 --
2021 -- if (lprocfs_srch(osd_dir, "writethrough_cache_enable") != NULL)
2022 -- lprocfs_add_symlink("writethrough_cache_enable",
2023 -- obd->obd_proc_entry,
2024 -- "../../%s/%s/writethrough_cache_enable",
2025 -- osd_root->name, osd_dir->name);
2026 -+ lprocfs_add_symlink("brw_stats", obd->obd_proc_entry,
2027 -+ "../../%s/%s/brw_stats",
2028 -+ osd_obd->obd_type->typ_name, obd->obd_name);
2029 -+
2030 -+ lprocfs_add_symlink("read_cache_enable", obd->obd_proc_entry,
2031 -+ "../../%s/%s/read_cache_enable",
2032 -+ osd_obd->obd_type->typ_name, obd->obd_name);
2033 -+
2034 -+ lprocfs_add_symlink("readcache_max_filesize",
2035 -+ obd->obd_proc_entry,
2036 -+ "../../%s/%s/readcache_max_filesize",
2037 -+ osd_obd->obd_type->typ_name, obd->obd_name);
2038 -+
2039 -+ lprocfs_add_symlink("writethrough_cache_enable",
2040 -+ obd->obd_proc_entry,
2041 -+ "../../%s/%s/writethrough_cache_enable",
2042 -+ osd_obd->obd_type->typ_name, obd->obd_name);
2043 - }
2044 -
2045 - static void ofd_procfs_fini(struct ofd_device *ofd)
2046 - {
2047 - struct obd_device *obd = ofd_obd(ofd);
2048 -
2049 -- lprocfs_remove_proc_entry("writethrough_cache_enable",
2050 -- obd->obd_proc_entry);
2051 -- lprocfs_remove_proc_entry("readcache_max_filesize",
2052 -- obd->obd_proc_entry);
2053 -- lprocfs_remove_proc_entry("read_cache_enable", obd->obd_proc_entry);
2054 -- lprocfs_remove_proc_entry("brw_stats", obd->obd_proc_entry);
2055 -- lprocfs_remove_proc_entry("clear", obd->obd_proc_exports_entry);
2056 -+ lprocfs_remove(&obd->obd_proc_exports_entry);
2057 -+ lprocfs_remove(&obd->obd_proc_entry);
2058 - lprocfs_free_per_client_stats(obd);
2059 - lprocfs_obd_cleanup(obd);
2060 - lprocfs_free_obd_stats(obd);
2061 -@@ -2377,7 +2376,6 @@ static struct lu_device_type ofd_device_type = {
2062 -
2063 - int __init ofd_init(void)
2064 - {
2065 -- struct lprocfs_static_vars lvars;
2066 - int rc;
2067 -
2068 - rc = lu_kmem_init(ofd_caches);
2069 -@@ -2390,11 +2388,9 @@ int __init ofd_init(void)
2070 - return(rc);
2071 - }
2072 -
2073 -- lprocfs_ofd_init_vars(&lvars);
2074 --
2075 - rc = class_register_type(&ofd_obd_ops, NULL, true, NULL,
2076 - #ifndef HAVE_ONLY_PROCFS_SEQ
2077 -- lvars.module_vars,
2078 -+ NULL,
2079 - #endif
2080 - LUSTRE_OST_NAME, &ofd_device_type);
2081 - return rc;
2082 -diff --git a/lustre/ofd/ofd_internal.h b/lustre/ofd/ofd_internal.h
2083 -index 4f12506..2e75de5 100644
2084 ---- a/lustre/ofd/ofd_internal.h
2085 -+++ b/lustre/ofd/ofd_internal.h
2086 -@@ -403,13 +403,9 @@ int ofd_txn_stop_cb(const struct lu_env *env, struct thandle *txn,
2087 -
2088 - /* lproc_ofd.c */
2089 - #ifdef LPROCFS
2090 --void lprocfs_ofd_init_vars(struct lprocfs_static_vars *lvars);
2091 -+extern struct lprocfs_seq_vars lprocfs_ofd_obd_vars[];
2092 - void ofd_stats_counter_init(struct lprocfs_stats *stats);
2093 - #else
2094 --static void lprocfs_ofd_init_vars(struct lprocfs_static_vars *lvars)
2095 --{
2096 -- memset(lvars, 0, sizeof(*lvars));
2097 --}
2098 - static inline void ofd_stats_counter_init(struct lprocfs_stats *stats) {}
2099 - #endif
2100 -
2101 ---
2102 -1.9.3
2103 -
2104
2105 diff --git a/patches/07_doxygen.patch b/patches/07_doxygen.patch
2106 deleted file mode 100644
2107 index 6df24ea2e..000000000
2108 --- a/patches/07_doxygen.patch
2109 +++ /dev/null
2110 @@ -1,1804 +0,0 @@
2111 -Index: dcmtk-3.6.0/doxygen/htmldocs.cfg
2112 -===================================================================
2113 ---- dcmtk-3.6.0.orig/doxygen/htmldocs.cfg 2011-11-23 15:49:41.000000000 +0100
2114 -+++ dcmtk-3.6.0/doxygen/htmldocs.cfg 2011-11-23 15:50:00.000000000 +0100
2115 -@@ -1,4 +1,4 @@
2116 --# Doxyfile 1.5.1
2117 -+# Doxyfile 1.7.1
2118 -
2119 - # This file describes the settings to be used by the documentation system
2120 - # doxygen (www.doxygen.org) for a project
2121 -@@ -14,438 +14,560 @@
2122 - # Project related configuration options
2123 - #---------------------------------------------------------------------------
2124 -
2125 --# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
2126 -+# This tag specifies the encoding used for all characters in the config file
2127 -+# that follow. The default is UTF-8 which is also the encoding used for all
2128 -+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
2129 -+# iconv built into libc) for the transcoding. See
2130 -+# http://www.gnu.org/software/libiconv for the list of possible encodings.
2131 -+
2132 -+DOXYFILE_ENCODING = UTF-8
2133 -+
2134 -+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
2135 - # by quotes) that should identify the project.
2136 -
2137 - PROJECT_NAME = "OFFIS DCMTK"
2138 -
2139 --# The PROJECT_NUMBER tag can be used to enter a project or revision number.
2140 --# This could be handy for archiving the generated documentation or
2141 -+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
2142 -+# This could be handy for archiving the generated documentation or
2143 - # if some version control system is used.
2144 -
2145 - PROJECT_NUMBER = "Version @DCMTK_VERSION@"
2146 -
2147 --# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
2148 --# base path where the generated documentation will be put.
2149 --# If a relative path is entered, it will be relative to the location
2150 -+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
2151 -+# base path where the generated documentation will be put.
2152 -+# If a relative path is entered, it will be relative to the location
2153 - # where doxygen was started. If left blank the current directory will be used.
2154 -
2155 --OUTPUT_DIRECTORY =
2156 -+OUTPUT_DIRECTORY =
2157 -
2158 --# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
2159 --# 4096 sub-directories (in 2 levels) under the output directory of each output
2160 --# format and will distribute the generated files over these directories.
2161 --# Enabling this option can be useful when feeding doxygen a huge amount of
2162 --# source files, where putting all generated files in the same directory would
2163 -+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
2164 -+# 4096 sub-directories (in 2 levels) under the output directory of each output
2165 -+# format and will distribute the generated files over these directories.
2166 -+# Enabling this option can be useful when feeding doxygen a huge amount of
2167 -+# source files, where putting all generated files in the same directory would
2168 - # otherwise cause performance problems for the file system.
2169 -
2170 - CREATE_SUBDIRS = NO
2171 -
2172 --# The OUTPUT_LANGUAGE tag is used to specify the language in which all
2173 --# documentation generated by doxygen is written. Doxygen will use this
2174 --# information to generate all constant output in the proper language.
2175 --# The default language is English, other supported languages are:
2176 --# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
2177 --# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian,
2178 --# Italian, Japanese, Japanese-en (Japanese with English messages), Korean,
2179 --# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
2180 --# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
2181 -+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
2182 -+# documentation generated by doxygen is written. Doxygen will use this
2183 -+# information to generate all constant output in the proper language.
2184 -+# The default language is English, other supported languages are:
2185 -+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
2186 -+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
2187 -+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
2188 -+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
2189 -+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak,
2190 -+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
2191 -
2192 - OUTPUT_LANGUAGE = English
2193 -
2194 --# This tag can be used to specify the encoding used in the generated output.
2195 --# The encoding is not always determined by the language that is chosen,
2196 --# but also whether or not the output is meant for Windows or non-Windows users.
2197 --# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES
2198 --# forces the Windows encoding (this is the default for the Windows binary),
2199 --# whereas setting the tag to NO uses a Unix-style encoding (the default for
2200 --# all platforms other than Windows).
2201 --
2202 --USE_WINDOWS_ENCODING = NO
2203 --
2204 --# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
2205 --# include brief member descriptions after the members that are listed in
2206 --# the file and class documentation (similar to JavaDoc).
2207 -+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
2208 -+# include brief member descriptions after the members that are listed in
2209 -+# the file and class documentation (similar to JavaDoc).
2210 - # Set to NO to disable this.
2211 -
2212 - BRIEF_MEMBER_DESC = YES
2213 -
2214 --# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
2215 --# the brief description of a member or function before the detailed description.
2216 --# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
2217 -+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
2218 -+# the brief description of a member or function before the detailed description.
2219 -+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
2220 - # brief descriptions will be completely suppressed.
2221 -
2222 - REPEAT_BRIEF = YES
2223 -
2224 --# This tag implements a quasi-intelligent brief description abbreviator
2225 --# that is used to form the text in various listings. Each string
2226 --# in this list, if found as the leading text of the brief description, will be
2227 --# stripped from the text and the result after processing the whole list, is
2228 --# used as the annotated text. Otherwise, the brief description is used as-is.
2229 --# If left blank, the following values are used ("$name" is automatically
2230 --# replaced with the name of the entity): "The $name class" "The $name widget"
2231 --# "The $name file" "is" "provides" "specifies" "contains"
2232 -+# This tag implements a quasi-intelligent brief description abbreviator
2233 -+# that is used to form the text in various listings. Each string
2234 -+# in this list, if found as the leading text of the brief description, will be
2235 -+# stripped from the text and the result after processing the whole list, is
2236 -+# used as the annotated text. Otherwise, the brief description is used as-is.
2237 -+# If left blank, the following values are used ("$name" is automatically
2238 -+# replaced with the name of the entity): "The $name class" "The $name widget"
2239 -+# "The $name file" "is" "provides" "specifies" "contains"
2240 - # "represents" "a" "an" "the"
2241 -
2242 --ABBREVIATE_BRIEF =
2243 -+ABBREVIATE_BRIEF =
2244 -
2245 --# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
2246 --# Doxygen will generate a detailed section even if there is only a brief
2247 -+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
2248 -+# Doxygen will generate a detailed section even if there is only a brief
2249 - # description.
2250 -
2251 - ALWAYS_DETAILED_SEC = NO
2252 -
2253 --# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
2254 --# inherited members of a class in the documentation of that class as if those
2255 --# members were ordinary class members. Constructors, destructors and assignment
2256 -+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
2257 -+# inherited members of a class in the documentation of that class as if those
2258 -+# members were ordinary class members. Constructors, destructors and assignment
2259 - # operators of the base classes will not be shown.
2260 -
2261 - INLINE_INHERITED_MEMB = NO
2262 -
2263 --# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
2264 --# path before files name in the file list and in the header files. If set
2265 -+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
2266 -+# path before files name in the file list and in the header files. If set
2267 - # to NO the shortest path that makes the file name unique will be used.
2268 -
2269 - FULL_PATH_NAMES = YES
2270 -
2271 --# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
2272 --# can be used to strip a user-defined part of the path. Stripping is
2273 --# only done if one of the specified strings matches the left-hand part of
2274 --# the path. The tag can be used to show relative paths in the file list.
2275 --# If left blank the directory from which doxygen is run is used as the
2276 -+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
2277 -+# can be used to strip a user-defined part of the path. Stripping is
2278 -+# only done if one of the specified strings matches the left-hand part of
2279 -+# the path. The tag can be used to show relative paths in the file list.
2280 -+# If left blank the directory from which doxygen is run is used as the
2281 - # path to strip.
2282 -
2283 - STRIP_FROM_PATH = ..
2284 -
2285 --# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
2286 --# the path mentioned in the documentation of a class, which tells
2287 --# the reader which header file to include in order to use a class.
2288 --# If left blank only the name of the header file containing the class
2289 --# definition is used. Otherwise one should specify the include paths that
2290 -+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
2291 -+# the path mentioned in the documentation of a class, which tells
2292 -+# the reader which header file to include in order to use a class.
2293 -+# If left blank only the name of the header file containing the class
2294 -+# definition is used. Otherwise one should specify the include paths that
2295 - # are normally passed to the compiler using the -I flag.
2296 -
2297 --STRIP_FROM_INC_PATH =
2298 -+STRIP_FROM_INC_PATH =
2299 -
2300 --# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
2301 --# (but less readable) file names. This can be useful is your file systems
2302 -+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
2303 -+# (but less readable) file names. This can be useful is your file systems
2304 - # doesn't support long names like on DOS, Mac, or CD-ROM.
2305 -
2306 - SHORT_NAMES = NO
2307 -
2308 --# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
2309 --# will interpret the first line (until the first dot) of a JavaDoc-style
2310 --# comment as the brief description. If set to NO, the JavaDoc
2311 --# comments will behave just like the Qt-style comments (thus requiring an
2312 --# explicit @brief command for a brief description.
2313 -+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
2314 -+# will interpret the first line (until the first dot) of a JavaDoc-style
2315 -+# comment as the brief description. If set to NO, the JavaDoc
2316 -+# comments will behave just like regular Qt-style comments
2317 -+# (thus requiring an explicit @brief command for a brief description.)
2318 -
2319 - JAVADOC_AUTOBRIEF = YES
2320 -
2321 --# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
2322 --# treat a multi-line C++ special comment block (i.e. a block of //! or ///
2323 --# comments) as a brief description. This used to be the default behaviour.
2324 --# The new default is to treat a multi-line C++ comment block as a detailed
2325 -+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
2326 -+# interpret the first line (until the first dot) of a Qt-style
2327 -+# comment as the brief description. If set to NO, the comments
2328 -+# will behave just like regular Qt-style comments (thus requiring
2329 -+# an explicit \brief command for a brief description.)
2330 -+
2331 -+QT_AUTOBRIEF = NO
2332 -+
2333 -+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
2334 -+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
2335 -+# comments) as a brief description. This used to be the default behaviour.
2336 -+# The new default is to treat a multi-line C++ comment block as a detailed
2337 - # description. Set this tag to YES if you prefer the old behaviour instead.
2338 -
2339 - MULTILINE_CPP_IS_BRIEF = NO
2340 -
2341 --# If the DETAILS_AT_TOP tag is set to YES then Doxygen
2342 --# will output the detailed description near the top, like JavaDoc.
2343 --# If set to NO, the detailed description appears after the member
2344 --# documentation.
2345 --
2346 --DETAILS_AT_TOP = NO
2347 --
2348 --# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
2349 --# member inherits the documentation from any documented member that it
2350 -+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
2351 -+# member inherits the documentation from any documented member that it
2352 - # re-implements.
2353 -
2354 - INHERIT_DOCS = NO
2355 -
2356 --# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
2357 --# a new page for each member. If set to NO, the documentation of a member will
2358 -+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
2359 -+# a new page for each member. If set to NO, the documentation of a member will
2360 - # be part of the file/class/namespace that contains it.
2361 -
2362 - SEPARATE_MEMBER_PAGES = NO
2363 -
2364 --# The TAB_SIZE tag can be used to set the number of spaces in a tab.
2365 -+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
2366 - # Doxygen uses this value to replace tabs by spaces in code fragments.
2367 -
2368 - TAB_SIZE = 4
2369 -
2370 --# This tag can be used to specify a number of aliases that acts
2371 --# as commands in the documentation. An alias has the form "name=value".
2372 --# For example adding "sideeffect=\par Side Effects:\n" will allow you to
2373 --# put the command \sideeffect (or @sideeffect) in the documentation, which
2374 --# will result in a user-defined paragraph with heading "Side Effects:".
2375 -+# This tag can be used to specify a number of aliases that acts
2376 -+# as commands in the documentation. An alias has the form "name=value".
2377 -+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
2378 -+# put the command \sideeffect (or @sideeffect) in the documentation, which
2379 -+# will result in a user-defined paragraph with heading "Side Effects:".
2380 - # You can put \n's in the value part of an alias to insert newlines.
2381 -
2382 --ALIASES =
2383 -+ALIASES =
2384 -
2385 --# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
2386 --# sources only. Doxygen will then generate output that is more tailored for C.
2387 --# For instance, some of the names that are used will be different. The list
2388 -+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
2389 -+# sources only. Doxygen will then generate output that is more tailored for C.
2390 -+# For instance, some of the names that are used will be different. The list
2391 - # of all members will be omitted, etc.
2392 -
2393 - OPTIMIZE_OUTPUT_FOR_C = NO
2394 -
2395 --# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
2396 --# sources only. Doxygen will then generate output that is more tailored for Java.
2397 --# For instance, namespaces will be presented as packages, qualified scopes
2398 --# will look different, etc.
2399 -+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
2400 -+# sources only. Doxygen will then generate output that is more tailored for
2401 -+# Java. For instance, namespaces will be presented as packages, qualified
2402 -+# scopes will look different, etc.
2403 -
2404 - OPTIMIZE_OUTPUT_JAVA = NO
2405 -
2406 --# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to
2407 --# include (a tag file for) the STL sources as input, then you should
2408 --# set this tag to YES in order to let doxygen match functions declarations and
2409 --# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
2410 --# func(std::string) {}). This also make the inheritance and collaboration
2411 -+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
2412 -+# sources only. Doxygen will then generate output that is more tailored for
2413 -+# Fortran.
2414 -+
2415 -+OPTIMIZE_FOR_FORTRAN = NO
2416 -+
2417 -+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
2418 -+# sources. Doxygen will then generate output that is tailored for
2419 -+# VHDL.
2420 -+
2421 -+OPTIMIZE_OUTPUT_VHDL = NO
2422 -+
2423 -+# Doxygen selects the parser to use depending on the extension of the files it
2424 -+# parses. With this tag you can assign which parser to use for a given extension.
2425 -+# Doxygen has a built-in mapping, but you can override or extend it using this
2426 -+# tag. The format is ext=language, where ext is a file extension, and language
2427 -+# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C,
2428 -+# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make
2429 -+# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
2430 -+# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions
2431 -+# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
2432 -+
2433 -+EXTENSION_MAPPING =
2434 -+
2435 -+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
2436 -+# to include (a tag file for) the STL sources as input, then you should
2437 -+# set this tag to YES in order to let doxygen match functions declarations and
2438 -+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
2439 -+# func(std::string) {}). This also make the inheritance and collaboration
2440 - # diagrams that involve STL classes more complete and accurate.
2441 -
2442 - BUILTIN_STL_SUPPORT = NO
2443 -
2444 --# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
2445 --# tag is set to YES, then doxygen will reuse the documentation of the first
2446 --# member in the group (if any) for the other members of the group. By default
2447 -+# If you use Microsoft's C++/CLI language, you should set this option to YES to
2448 -+# enable parsing support.
2449 -+
2450 -+CPP_CLI_SUPPORT = NO
2451 -+
2452 -+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
2453 -+# Doxygen will parse them like normal C++ but will assume all classes use public
2454 -+# instead of private inheritance when no explicit protection keyword is present.
2455 -+
2456 -+SIP_SUPPORT = NO
2457 -+
2458 -+# For Microsoft's IDL there are propget and propput attributes to indicate getter
2459 -+# and setter methods for a property. Setting this option to YES (the default)
2460 -+# will make doxygen to replace the get and set methods by a property in the
2461 -+# documentation. This will only work if the methods are indeed getting or
2462 -+# setting a simple type. If this is not the case, or you want to show the
2463 -+# methods anyway, you should set this option to NO.
2464 -+
2465 -+IDL_PROPERTY_SUPPORT = YES
2466 -+
2467 -+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
2468 -+# tag is set to YES, then doxygen will reuse the documentation of the first
2469 -+# member in the group (if any) for the other members of the group. By default
2470 - # all members of a group must be documented explicitly.
2471 -
2472 - DISTRIBUTE_GROUP_DOC = NO
2473 -
2474 --# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
2475 --# the same type (for instance a group of public functions) to be put as a
2476 --# subgroup of that type (e.g. under the Public Functions section). Set it to
2477 --# NO to prevent subgrouping. Alternatively, this can be done per class using
2478 -+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
2479 -+# the same type (for instance a group of public functions) to be put as a
2480 -+# subgroup of that type (e.g. under the Public Functions section). Set it to
2481 -+# NO to prevent subgrouping. Alternatively, this can be done per class using
2482 - # the \nosubgrouping command.
2483 -
2484 - SUBGROUPING = YES
2485 -
2486 -+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
2487 -+# is documented as struct, union, or enum with the name of the typedef. So
2488 -+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
2489 -+# with name TypeT. When disabled the typedef will appear as a member of a file,
2490 -+# namespace, or class. And the struct will be named TypeS. This can typically
2491 -+# be useful for C code in case the coding convention dictates that all compound
2492 -+# types are typedef'ed and only the typedef is referenced, never the tag name.
2493 -+
2494 -+TYPEDEF_HIDES_STRUCT = NO
2495 -+
2496 -+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
2497 -+# determine which symbols to keep in memory and which to flush to disk.
2498 -+# When the cache is full, less often used symbols will be written to disk.
2499 -+# For small to medium size projects (<1000 input files) the default value is
2500 -+# probably good enough. For larger projects a too small cache size can cause
2501 -+# doxygen to be busy swapping symbols to and from disk most of the time
2502 -+# causing a significant performance penality.
2503 -+# If the system has enough physical memory increasing the cache will improve the
2504 -+# performance by keeping more symbols in memory. Note that the value works on
2505 -+# a logarithmic scale so increasing the size by one will rougly double the
2506 -+# memory usage. The cache size is given by this formula:
2507 -+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
2508 -+# corresponding to a cache size of 2^16 = 65536 symbols
2509 -+
2510 -+SYMBOL_CACHE_SIZE = 0
2511 -+
2512 - #---------------------------------------------------------------------------
2513 - # Build related configuration options
2514 - #---------------------------------------------------------------------------
2515 -
2516 --# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
2517 --# documentation are documented, even if no documentation was available.
2518 --# Private class members and static file members will be hidden unless
2519 -+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
2520 -+# documentation are documented, even if no documentation was available.
2521 -+# Private class members and static file members will be hidden unless
2522 - # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
2523 -
2524 - EXTRACT_ALL = NO
2525 -
2526 --# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
2527 -+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
2528 - # will be included in the documentation.
2529 -
2530 - EXTRACT_PRIVATE = YES
2531 -
2532 --# If the EXTRACT_STATIC tag is set to YES all static members of a file
2533 -+# If the EXTRACT_STATIC tag is set to YES all static members of a file
2534 - # will be included in the documentation.
2535 -
2536 - EXTRACT_STATIC = YES
2537 -
2538 --# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
2539 --# defined locally in source files will be included in the documentation.
2540 -+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
2541 -+# defined locally in source files will be included in the documentation.
2542 - # If set to NO only classes defined in header files are included.
2543 -
2544 - EXTRACT_LOCAL_CLASSES = YES
2545 -
2546 --# This flag is only useful for Objective-C code. When set to YES local
2547 --# methods, which are defined in the implementation section but not in
2548 --# the interface are included in the documentation.
2549 -+# This flag is only useful for Objective-C code. When set to YES local
2550 -+# methods, which are defined in the implementation section but not in
2551 -+# the interface are included in the documentation.
2552 - # If set to NO (the default) only methods in the interface are included.
2553 -
2554 - EXTRACT_LOCAL_METHODS = NO
2555 -
2556 --# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
2557 --# undocumented members of documented classes, files or namespaces.
2558 --# If set to NO (the default) these members will be included in the
2559 --# various overviews, but no documentation section is generated.
2560 -+# If this flag is set to YES, the members of anonymous namespaces will be
2561 -+# extracted and appear in the documentation as a namespace called
2562 -+# 'anonymous_namespace{file}', where file will be replaced with the base
2563 -+# name of the file that contains the anonymous namespace. By default
2564 -+# anonymous namespace are hidden.
2565 -+
2566 -+EXTRACT_ANON_NSPACES = NO
2567 -+
2568 -+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
2569 -+# undocumented members of documented classes, files or namespaces.
2570 -+# If set to NO (the default) these members will be included in the
2571 -+# various overviews, but no documentation section is generated.
2572 - # This option has no effect if EXTRACT_ALL is enabled.
2573 -
2574 - HIDE_UNDOC_MEMBERS = NO
2575 -
2576 --# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
2577 --# undocumented classes that are normally visible in the class hierarchy.
2578 --# If set to NO (the default) these classes will be included in the various
2579 -+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
2580 -+# undocumented classes that are normally visible in the class hierarchy.
2581 -+# If set to NO (the default) these classes will be included in the various
2582 - # overviews. This option has no effect if EXTRACT_ALL is enabled.
2583 -
2584 - HIDE_UNDOC_CLASSES = NO
2585 -
2586 --# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
2587 --# friend (class|struct|union) declarations.
2588 --# If set to NO (the default) these declarations will be included in the
2589 -+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
2590 -+# friend (class|struct|union) declarations.
2591 -+# If set to NO (the default) these declarations will be included in the
2592 - # documentation.
2593 -
2594 - HIDE_FRIEND_COMPOUNDS = NO
2595 -
2596 --# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
2597 --# documentation blocks found inside the body of a function.
2598 --# If set to NO (the default) these blocks will be appended to the
2599 -+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
2600 -+# documentation blocks found inside the body of a function.
2601 -+# If set to NO (the default) these blocks will be appended to the
2602 - # function's detailed documentation block.
2603 -
2604 - HIDE_IN_BODY_DOCS = NO
2605 -
2606 --# The INTERNAL_DOCS tag determines if documentation
2607 --# that is typed after a \internal command is included. If the tag is set
2608 --# to NO (the default) then the documentation will be excluded.
2609 -+# The INTERNAL_DOCS tag determines if documentation
2610 -+# that is typed after a \internal command is included. If the tag is set
2611 -+# to NO (the default) then the documentation will be excluded.
2612 - # Set it to YES to include the internal documentation.
2613 -
2614 - INTERNAL_DOCS = NO
2615 -
2616 --# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
2617 --# file names in lower-case letters. If set to YES upper-case letters are also
2618 --# allowed. This is useful if you have classes or files whose names only differ
2619 --# in case and if your file system supports case sensitive file names. Windows
2620 -+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
2621 -+# file names in lower-case letters. If set to YES upper-case letters are also
2622 -+# allowed. This is useful if you have classes or files whose names only differ
2623 -+# in case and if your file system supports case sensitive file names. Windows
2624 - # and Mac users are advised to set this option to NO.
2625 -
2626 - CASE_SENSE_NAMES = YES
2627 -
2628 --# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
2629 --# will show members with their full class and namespace scopes in the
2630 -+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
2631 -+# will show members with their full class and namespace scopes in the
2632 - # documentation. If set to YES the scope will be hidden.
2633 -
2634 - HIDE_SCOPE_NAMES = NO
2635 -
2636 --# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
2637 --# will put a list of the files that are included by a file in the documentation
2638 -+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
2639 -+# will put a list of the files that are included by a file in the documentation
2640 - # of that file.
2641 -
2642 - SHOW_INCLUDE_FILES = NO
2643 -
2644 --# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
2645 -+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
2646 -+# will list include files with double quotes in the documentation
2647 -+# rather than with sharp brackets.
2648 -+
2649 -+FORCE_LOCAL_INCLUDES = NO
2650 -+
2651 -+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
2652 - # is inserted in the documentation for inline members.
2653 -
2654 - INLINE_INFO = YES
2655 -
2656 --# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
2657 --# will sort the (detailed) documentation of file and class members
2658 --# alphabetically by member name. If set to NO the members will appear in
2659 -+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
2660 -+# will sort the (detailed) documentation of file and class members
2661 -+# alphabetically by member name. If set to NO the members will appear in
2662 - # declaration order.
2663 -
2664 - SORT_MEMBER_DOCS = YES
2665 -
2666 --# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
2667 --# brief documentation of file, namespace and class members alphabetically
2668 --# by member name. If set to NO (the default) the members will appear in
2669 -+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
2670 -+# brief documentation of file, namespace and class members alphabetically
2671 -+# by member name. If set to NO (the default) the members will appear in
2672 - # declaration order.
2673 -
2674 - SORT_BRIEF_DOCS = NO
2675 -
2676 --# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
2677 --# sorted by fully-qualified names, including namespaces. If set to
2678 --# NO (the default), the class list will be sorted only by class name,
2679 --# not including the namespace part.
2680 -+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
2681 -+# will sort the (brief and detailed) documentation of class members so that
2682 -+# constructors and destructors are listed first. If set to NO (the default)
2683 -+# the constructors will appear in the respective orders defined by
2684 -+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
2685 -+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
2686 -+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
2687 -+
2688 -+SORT_MEMBERS_CTORS_1ST = NO
2689 -+
2690 -+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
2691 -+# hierarchy of group names into alphabetical order. If set to NO (the default)
2692 -+# the group names will appear in their defined order.
2693 -+
2694 -+SORT_GROUP_NAMES = NO
2695 -+
2696 -+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
2697 -+# sorted by fully-qualified names, including namespaces. If set to
2698 -+# NO (the default), the class list will be sorted only by class name,
2699 -+# not including the namespace part.
2700 - # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
2701 --# Note: This option applies only to the class list, not to the
2702 -+# Note: This option applies only to the class list, not to the
2703 - # alphabetical list.
2704 -
2705 - SORT_BY_SCOPE_NAME = NO
2706 -
2707 --# The GENERATE_TODOLIST tag can be used to enable (YES) or
2708 --# disable (NO) the todo list. This list is created by putting \todo
2709 -+# The GENERATE_TODOLIST tag can be used to enable (YES) or
2710 -+# disable (NO) the todo list. This list is created by putting \todo
2711 - # commands in the documentation.
2712 -
2713 - GENERATE_TODOLIST = NO
2714 -
2715 --# The GENERATE_TESTLIST tag can be used to enable (YES) or
2716 --# disable (NO) the test list. This list is created by putting \test
2717 -+# The GENERATE_TESTLIST tag can be used to enable (YES) or
2718 -+# disable (NO) the test list. This list is created by putting \test
2719 - # commands in the documentation.
2720 -
2721 - GENERATE_TESTLIST = NO
2722 -
2723 --# The GENERATE_BUGLIST tag can be used to enable (YES) or
2724 --# disable (NO) the bug list. This list is created by putting \bug
2725 -+# The GENERATE_BUGLIST tag can be used to enable (YES) or
2726 -+# disable (NO) the bug list. This list is created by putting \bug
2727 - # commands in the documentation.
2728 -
2729 - GENERATE_BUGLIST = NO
2730 -
2731 --# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
2732 --# disable (NO) the deprecated list. This list is created by putting
2733 -+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
2734 -+# disable (NO) the deprecated list. This list is created by putting
2735 - # \deprecated commands in the documentation.
2736 -
2737 - GENERATE_DEPRECATEDLIST= YES
2738 -
2739 --# The ENABLED_SECTIONS tag can be used to enable conditional
2740 -+# The ENABLED_SECTIONS tag can be used to enable conditional
2741 - # documentation sections, marked by \if sectionname ... \endif.
2742 -
2743 --ENABLED_SECTIONS = # MODULE_DCMJP2K MODULE_DCMPPS MODULE_DCMSTCOM MODULE_DCMRT
2744 -+ENABLED_SECTIONS =
2745 -
2746 --# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
2747 --# the initial value of a variable or define consists of for it to appear in
2748 --# the documentation. If the initializer consists of more lines than specified
2749 --# here it will be hidden. Use a value of 0 to hide initializers completely.
2750 --# The appearance of the initializer of individual variables and defines in the
2751 --# documentation can be controlled using \showinitializer or \hideinitializer
2752 -+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
2753 -+# the initial value of a variable or define consists of for it to appear in
2754 -+# the documentation. If the initializer consists of more lines than specified
2755 -+# here it will be hidden. Use a value of 0 to hide initializers completely.
2756 -+# The appearance of the initializer of individual variables and defines in the
2757 -+# documentation can be controlled using \showinitializer or \hideinitializer
2758 - # command in the documentation regardless of this setting.
2759 -
2760 - MAX_INITIALIZER_LINES = 30
2761 -
2762 --# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
2763 --# at the bottom of the documentation of classes and structs. If set to YES the
2764 -+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
2765 -+# at the bottom of the documentation of classes and structs. If set to YES the
2766 - # list will mention the files that were used to generate the documentation.
2767 -
2768 - SHOW_USED_FILES = YES
2769 -
2770 --# If the sources in your project are distributed over multiple directories
2771 --# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
2772 -+# If the sources in your project are distributed over multiple directories
2773 -+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
2774 - # in the documentation. The default is NO.
2775 -
2776 - SHOW_DIRECTORIES = NO
2777 -
2778 --# The FILE_VERSION_FILTER tag can be used to specify a program or script that
2779 --# doxygen should invoke to get the current version for each file (typically from the
2780 --# version control system). Doxygen will invoke the program by executing (via
2781 --# popen()) the command <command> <input-file>, where <command> is the value of
2782 --# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
2783 --# provided by doxygen. Whatever the program writes to standard output
2784 -+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
2785 -+# This will remove the Files entry from the Quick Index and from the
2786 -+# Folder Tree View (if specified). The default is YES.
2787 -+
2788 -+SHOW_FILES = YES
2789 -+
2790 -+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
2791 -+# Namespaces page.
2792 -+# This will remove the Namespaces entry from the Quick Index
2793 -+# and from the Folder Tree View (if specified). The default is YES.
2794 -+
2795 -+SHOW_NAMESPACES = YES
2796 -+
2797 -+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
2798 -+# doxygen should invoke to get the current version for each file (typically from
2799 -+# the version control system). Doxygen will invoke the program by executing (via
2800 -+# popen()) the command <command> <input-file>, where <command> is the value of
2801 -+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
2802 -+# provided by doxygen. Whatever the program writes to standard output
2803 - # is used as the file version. See the manual for examples.
2804 -
2805 --FILE_VERSION_FILTER =
2806 -+FILE_VERSION_FILTER =
2807 -+
2808 -+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
2809 -+# by doxygen. The layout file controls the global structure of the generated
2810 -+# output files in an output format independent way. The create the layout file
2811 -+# that represents doxygen's defaults, run doxygen with the -l option.
2812 -+# You can optionally specify a file name after the option, if omitted
2813 -+# DoxygenLayout.xml will be used as the name of the layout file.
2814 -+
2815 -+LAYOUT_FILE =
2816 -
2817 - #---------------------------------------------------------------------------
2818 - # configuration options related to warning and progress messages
2819 - #---------------------------------------------------------------------------
2820 -
2821 --# The QUIET tag can be used to turn on/off the messages that are generated
2822 -+# The QUIET tag can be used to turn on/off the messages that are generated
2823 - # by doxygen. Possible values are YES and NO. If left blank NO is used.
2824 -
2825 - QUIET = NO
2826 -
2827 --# The WARNINGS tag can be used to turn on/off the warning messages that are
2828 --# generated by doxygen. Possible values are YES and NO. If left blank
2829 -+# The WARNINGS tag can be used to turn on/off the warning messages that are
2830 -+# generated by doxygen. Possible values are YES and NO. If left blank
2831 - # NO is used.
2832 -
2833 - WARNINGS = YES
2834 -
2835 --# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
2836 --# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
2837 -+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
2838 -+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
2839 - # automatically be disabled.
2840 -
2841 - WARN_IF_UNDOCUMENTED = YES
2842 -
2843 --# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
2844 --# potential errors in the documentation, such as not documenting some
2845 --# parameters in a documented function, or documenting parameters that
2846 -+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
2847 -+# potential errors in the documentation, such as not documenting some
2848 -+# parameters in a documented function, or documenting parameters that
2849 - # don't exist or using markup commands wrongly.
2850 -
2851 - WARN_IF_DOC_ERROR = YES
2852 -
2853 --# This WARN_NO_PARAMDOC option can be abled to get warnings for
2854 --# functions that are documented, but have no documentation for their parameters
2855 --# or return value. If set to NO (the default) doxygen will only warn about
2856 --# wrong or incomplete parameter documentation, but not about the absence of
2857 -+# This WARN_NO_PARAMDOC option can be abled to get warnings for
2858 -+# functions that are documented, but have no documentation for their parameters
2859 -+# or return value. If set to NO (the default) doxygen will only warn about
2860 -+# wrong or incomplete parameter documentation, but not about the absence of
2861 - # documentation.
2862 -
2863 - WARN_NO_PARAMDOC = NO
2864 -
2865 --# The WARN_FORMAT tag determines the format of the warning messages that
2866 --# doxygen can produce. The string should contain the $file, $line, and $text
2867 --# tags, which will be replaced by the file and line number from which the
2868 --# warning originated and the warning text. Optionally the format may contain
2869 --# $version, which will be replaced by the version of the file (if it could
2870 -+# The WARN_FORMAT tag determines the format of the warning messages that
2871 -+# doxygen can produce. The string should contain the $file, $line, and $text
2872 -+# tags, which will be replaced by the file and line number from which the
2873 -+# warning originated and the warning text. Optionally the format may contain
2874 -+# $version, which will be replaced by the version of the file (if it could
2875 - # be obtained via FILE_VERSION_FILTER)
2876 -
2877 - WARN_FORMAT = "$file:$line: $text"
2878 -
2879 --# The WARN_LOGFILE tag can be used to specify a file to which warning
2880 --# and error messages should be written. If left blank the output is written
2881 -+# The WARN_LOGFILE tag can be used to specify a file to which warning
2882 -+# and error messages should be written. If left blank the output is written
2883 - # to stderr.
2884 -
2885 - WARN_LOGFILE = htmldocs.log
2886 -@@ -454,98 +576,117 @@
2887 - # configuration options related to the input files
2888 - #---------------------------------------------------------------------------
2889 -
2890 --# The INPUT tag can be used to specify the files and/or directories that contain
2891 --# documented source files. You may enter file names like "myfile.cpp" or
2892 --# directories like "/usr/src/myproject". Separate the files or directories
2893 -+# The INPUT tag can be used to specify the files and/or directories that contain
2894 -+# documented source files. You may enter file names like "myfile.cpp" or
2895 -+# directories like "/usr/src/myproject". Separate the files or directories
2896 - # with spaces.
2897 -
2898 - INPUT = @DOXYGEN_INPUT_DIR@
2899 -
2900 --# If the value of the INPUT tag contains directories, you can use the
2901 --# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
2902 --# and *.h) to filter out the source-files in the directories. If left
2903 --# blank the following patterns are tested:
2904 --# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
2905 --# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
2906 -+# This tag can be used to specify the character encoding of the source files
2907 -+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
2908 -+# also the default input encoding. Doxygen uses libiconv (or the iconv built
2909 -+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
2910 -+# the list of possible encodings.
2911 -+
2912 -+INPUT_ENCODING = UTF-8
2913 -+
2914 -+# If the value of the INPUT tag contains directories, you can use the
2915 -+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
2916 -+# and *.h) to filter out the source-files in the directories. If left
2917 -+# blank the following patterns are tested:
2918 -+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
2919 -+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
2920 -
2921 - FILE_PATTERNS = *.h \
2922 - *.man \
2923 - *.dox
2924 -
2925 --# The RECURSIVE tag can be used to turn specify whether or not subdirectories
2926 --# should be searched for input files as well. Possible values are YES and NO.
2927 -+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
2928 -+# should be searched for input files as well. Possible values are YES and NO.
2929 - # If left blank NO is used.
2930 -
2931 - RECURSIVE = YES
2932 -
2933 --# The EXCLUDE tag can be used to specify files and/or directories that should
2934 --# excluded from the INPUT source files. This way you can easily exclude a
2935 -+# The EXCLUDE tag can be used to specify files and/or directories that should
2936 -+# excluded from the INPUT source files. This way you can easily exclude a
2937 - # subdirectory from a directory tree whose root is specified with the INPUT tag.
2938 -
2939 - EXCLUDE = @DOXYGEN_INPUT_DIR@/config/include \
2940 - @DOXYGEN_INPUT_DIR@/docs
2941 -
2942 --# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
2943 --# directories that are symbolic links (a Unix filesystem feature) are excluded
2944 -+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
2945 -+# directories that are symbolic links (a Unix filesystem feature) are excluded
2946 - # from the input.
2947 -
2948 - EXCLUDE_SYMLINKS = NO
2949 -
2950 --# If the value of the INPUT tag contains directories, you can use the
2951 --# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
2952 --# certain files from those directories. Note that the wildcards are matched
2953 --# against the file with absolute path, so to exclude all test directories
2954 -+# If the value of the INPUT tag contains directories, you can use the
2955 -+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
2956 -+# certain files from those directories. Note that the wildcards are matched
2957 -+# against the file with absolute path, so to exclude all test directories
2958 - # for example use the pattern */test/*
2959 -
2960 --EXCLUDE_PATTERNS =
2961 -+EXCLUDE_PATTERNS =
2962 -+
2963 -+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
2964 -+# (namespaces, classes, functions, etc.) that should be excluded from the
2965 -+# output. The symbol name can be a fully qualified name, a word, or if the
2966 -+# wildcard * is used, a substring. Examples: ANamespace, AClass,
2967 -+# AClass::ANamespace, ANamespace::*Test
2968 -+
2969 -+EXCLUDE_SYMBOLS =
2970 -
2971 --# The EXAMPLE_PATH tag can be used to specify one or more files or
2972 --# directories that contain example code fragments that are included (see
2973 -+# The EXAMPLE_PATH tag can be used to specify one or more files or
2974 -+# directories that contain example code fragments that are included (see
2975 - # the \include command).
2976 -
2977 - EXAMPLE_PATH = @DOXYGEN_INPUT_DIR@
2978 -
2979 --# If the value of the EXAMPLE_PATH tag contains directories, you can use the
2980 --# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
2981 --# and *.h) to filter out the source-files in the directories. If left
2982 -+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
2983 -+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
2984 -+# and *.h) to filter out the source-files in the directories. If left
2985 - # blank all files are included.
2986 -
2987 --EXAMPLE_PATTERNS =
2988 -+EXAMPLE_PATTERNS =
2989 -
2990 --# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
2991 --# searched for input files to be used with the \include or \dontinclude
2992 --# commands irrespective of the value of the RECURSIVE tag.
2993 -+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
2994 -+# searched for input files to be used with the \include or \dontinclude
2995 -+# commands irrespective of the value of the RECURSIVE tag.
2996 - # Possible values are YES and NO. If left blank NO is used.
2997 -
2998 - EXAMPLE_RECURSIVE = YES
2999 -
3000 --# The IMAGE_PATH tag can be used to specify one or more files or
3001 --# directories that contain image that are included in the documentation (see
3002 -+# The IMAGE_PATH tag can be used to specify one or more files or
3003 -+# directories that contain image that are included in the documentation (see
3004 - # the \image command).
3005 -
3006 --IMAGE_PATH =
3007 -+IMAGE_PATH =
3008 -
3009 --# The INPUT_FILTER tag can be used to specify a program that doxygen should
3010 --# invoke to filter for each input file. Doxygen will invoke the filter program
3011 --# by executing (via popen()) the command <filter> <input-file>, where <filter>
3012 --# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
3013 --# input file. Doxygen will then use the output that the filter program writes
3014 --# to standard output. If FILTER_PATTERNS is specified, this tag will be
3015 -+# The INPUT_FILTER tag can be used to specify a program that doxygen should
3016 -+# invoke to filter for each input file. Doxygen will invoke the filter program
3017 -+# by executing (via popen()) the command <filter> <input-file>, where <filter>
3018 -+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
3019 -+# input file. Doxygen will then use the output that the filter program writes
3020 -+# to standard output.
3021 -+# If FILTER_PATTERNS is specified, this tag will be
3022 - # ignored.
3023 -
3024 --INPUT_FILTER =
3025 -+INPUT_FILTER =
3026 -
3027 --# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
3028 --# basis. Doxygen will compare the file name with each pattern and apply the
3029 --# filter if there is a match. The filters are a list of the form:
3030 --# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
3031 --# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
3032 -+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
3033 -+# basis.
3034 -+# Doxygen will compare the file name with each pattern and apply the
3035 -+# filter if there is a match.
3036 -+# The filters are a list of the form:
3037 -+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
3038 -+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
3039 - # is applied to all files.
3040 -
3041 --FILTER_PATTERNS =
3042 -+FILTER_PATTERNS =
3043 -
3044 --# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
3045 --# INPUT_FILTER) will be used to filter the input files when producing source
3046 -+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
3047 -+# INPUT_FILTER) will be used to filter the input files when producing source
3048 - # files to browse (i.e. when SOURCE_BROWSER is set to YES).
3049 -
3050 - FILTER_SOURCE_FILES = NO
3051 -@@ -554,32 +695,32 @@
3052 - # configuration options related to source browsing
3053 - #---------------------------------------------------------------------------
3054 -
3055 --# If the SOURCE_BROWSER tag is set to YES then a list of source files will
3056 --# be generated. Documented entities will be cross-referenced with these sources.
3057 --# Note: To get rid of all source code in the generated output, make sure also
3058 -+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
3059 -+# be generated. Documented entities will be cross-referenced with these sources.
3060 -+# Note: To get rid of all source code in the generated output, make sure also
3061 - # VERBATIM_HEADERS is set to NO.
3062 -
3063 - SOURCE_BROWSER = YES
3064 -
3065 --# Setting the INLINE_SOURCES tag to YES will include the body
3066 -+# Setting the INLINE_SOURCES tag to YES will include the body
3067 - # of functions and classes directly in the documentation.
3068 -
3069 - INLINE_SOURCES = NO
3070 -
3071 --# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
3072 --# doxygen to hide any special comment blocks from generated source code
3073 -+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
3074 -+# doxygen to hide any special comment blocks from generated source code
3075 - # fragments. Normal C and C++ comments will always remain visible.
3076 -
3077 - STRIP_CODE_COMMENTS = YES
3078 -
3079 --# If the REFERENCED_BY_RELATION tag is set to YES (the default)
3080 --# then for each documented function all documented
3081 -+# If the REFERENCED_BY_RELATION tag is set to YES
3082 -+# then for each documented function all documented
3083 - # functions referencing it will be listed.
3084 -
3085 - REFERENCED_BY_RELATION = YES
3086 -
3087 --# If the REFERENCES_RELATION tag is set to YES (the default)
3088 --# then for each documented function all documented entities
3089 -+# If the REFERENCES_RELATION tag is set to YES
3090 -+# then for each documented function all documented entities
3091 - # called/used by that function will be listed.
3092 -
3093 - REFERENCES_RELATION = YES
3094 -@@ -587,20 +728,21 @@
3095 - # If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
3096 - # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
3097 - # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
3098 --# link to the source code. Otherwise they will link to the documentation.
3099 -+# link to the source code.
3100 -+# Otherwise they will link to the documentation.
3101 -
3102 - REFERENCES_LINK_SOURCE = YES
3103 -
3104 --# If the USE_HTAGS tag is set to YES then the references to source code
3105 --# will point to the HTML generated by the htags(1) tool instead of doxygen
3106 --# built-in source browser. The htags tool is part of GNU's global source
3107 --# tagging system (see http://www.gnu.org/software/global/global.html). You
3108 -+# If the USE_HTAGS tag is set to YES then the references to source code
3109 -+# will point to the HTML generated by the htags(1) tool instead of doxygen
3110 -+# built-in source browser. The htags tool is part of GNU's global source
3111 -+# tagging system (see http://www.gnu.org/software/global/global.html). You
3112 - # will need version 4.8.6 or higher.
3113 -
3114 - USE_HTAGS = NO
3115 -
3116 --# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
3117 --# will generate a verbatim copy of the header file for each class for
3118 -+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
3119 -+# will generate a verbatim copy of the header file for each class for
3120 - # which an include is specified. Set to NO to disable this.
3121 -
3122 - VERBATIM_HEADERS = YES
3123 -@@ -609,279 +751,488 @@
3124 - # configuration options related to the alphabetical class index
3125 - #---------------------------------------------------------------------------
3126 -
3127 --# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
3128 --# of all compounds will be generated. Enable this if the project
3129 -+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
3130 -+# of all compounds will be generated. Enable this if the project
3131 - # contains a lot of classes, structs, unions or interfaces.
3132 -
3133 - ALPHABETICAL_INDEX = YES
3134 -
3135 --# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
3136 --# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
3137 -+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
3138 -+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
3139 - # in which this list will be split (can be a number in the range [1..20])
3140 -
3141 - COLS_IN_ALPHA_INDEX = 3
3142 -
3143 --# In case all classes in a project start with a common prefix, all
3144 --# classes will be put under the same header in the alphabetical index.
3145 --# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
3146 -+# In case all classes in a project start with a common prefix, all
3147 -+# classes will be put under the same header in the alphabetical index.
3148 -+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
3149 - # should be ignored while generating the index headers.
3150 -
3151 --IGNORE_PREFIX =
3152 -+IGNORE_PREFIX =
3153 -
3154 - #---------------------------------------------------------------------------
3155 - # configuration options related to the HTML output
3156 - #---------------------------------------------------------------------------
3157 -
3158 --# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
3159 -+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
3160 - # generate HTML output.
3161 -
3162 - GENERATE_HTML = YES
3163 -
3164 --# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
3165 --# If a relative path is entered the value of OUTPUT_DIRECTORY will be
3166 -+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
3167 -+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
3168 - # put in front of it. If left blank `html' will be used as the default path.
3169 -
3170 - HTML_OUTPUT = htmldocs
3171 -
3172 --# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
3173 --# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
3174 -+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
3175 -+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
3176 - # doxygen will generate files with .html extension.
3177 -
3178 - HTML_FILE_EXTENSION = .html
3179 -
3180 --# The HTML_HEADER tag can be used to specify a personal HTML header for
3181 --# each generated HTML page. If it is left blank doxygen will generate a
3182 -+# The HTML_HEADER tag can be used to specify a personal HTML header for
3183 -+# each generated HTML page. If it is left blank doxygen will generate a
3184 - # standard header.
3185 -
3186 --HTML_HEADER =
3187 -+HTML_HEADER =
3188 -
3189 --# The HTML_FOOTER tag can be used to specify a personal HTML footer for
3190 --# each generated HTML page. If it is left blank doxygen will generate a
3191 -+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
3192 -+# each generated HTML page. If it is left blank doxygen will generate a
3193 - # standard footer.
3194 -
3195 - HTML_FOOTER = @DOXYGEN_DATA_DIR@/footer.html
3196 -
3197 --# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
3198 --# style sheet that is used by each HTML page. It can be used to
3199 --# fine-tune the look of the HTML output. If the tag is left blank doxygen
3200 --# will generate a default style sheet. Note that doxygen will try to copy
3201 --# the style sheet file to the HTML output directory, so don't put your own
3202 -+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
3203 -+# style sheet that is used by each HTML page. It can be used to
3204 -+# fine-tune the look of the HTML output. If the tag is left blank doxygen
3205 -+# will generate a default style sheet. Note that doxygen will try to copy
3206 -+# the style sheet file to the HTML output directory, so don't put your own
3207 - # stylesheet in the HTML output directory as well, or it will be erased!
3208 -
3209 --HTML_STYLESHEET =
3210 -+HTML_STYLESHEET =
3211 -+
3212 -+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
3213 -+# Doxygen will adjust the colors in the stylesheet and background images
3214 -+# according to this color. Hue is specified as an angle on a colorwheel,
3215 -+# see http://en.wikipedia.org/wiki/Hue for more information.
3216 -+# For instance the value 0 represents red, 60 is yellow, 120 is green,
3217 -+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
3218 -+# The allowed range is 0 to 359.
3219 -+
3220 -+HTML_COLORSTYLE_HUE = 220
3221 -+
3222 -+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
3223 -+# the colors in the HTML output. For a value of 0 the output will use
3224 -+# grayscales only. A value of 255 will produce the most vivid colors.
3225 -
3226 --# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
3227 --# files or namespaces will be aligned in HTML using tables. If set to
3228 -+HTML_COLORSTYLE_SAT = 100
3229 -+
3230 -+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
3231 -+# the luminance component of the colors in the HTML output. Values below
3232 -+# 100 gradually make the output lighter, whereas values above 100 make
3233 -+# the output darker. The value divided by 100 is the actual gamma applied,
3234 -+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
3235 -+# and 100 does not change the gamma.
3236 -+
3237 -+HTML_COLORSTYLE_GAMMA = 80
3238 -+
3239 -+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
3240 -+# page will contain the date and time when the page was generated. Setting
3241 -+# this to NO can help when comparing the output of multiple runs.
3242 -+
3243 -+HTML_TIMESTAMP = YES
3244 -+
3245 -+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
3246 -+# files or namespaces will be aligned in HTML using tables. If set to
3247 - # NO a bullet list will be used.
3248 -
3249 - HTML_ALIGN_MEMBERS = YES
3250 -
3251 --# If the GENERATE_HTMLHELP tag is set to YES, additional index files
3252 --# will be generated that can be used as input for tools like the
3253 --# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
3254 -+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
3255 -+# documentation will contain sections that can be hidden and shown after the
3256 -+# page has loaded. For this to work a browser that supports
3257 -+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
3258 -+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
3259 -+
3260 -+HTML_DYNAMIC_SECTIONS = NO
3261 -+
3262 -+# If the GENERATE_DOCSET tag is set to YES, additional index files
3263 -+# will be generated that can be used as input for Apple's Xcode 3
3264 -+# integrated development environment, introduced with OSX 10.5 (Leopard).
3265 -+# To create a documentation set, doxygen will generate a Makefile in the
3266 -+# HTML output directory. Running make will produce the docset in that
3267 -+# directory and running "make install" will install the docset in
3268 -+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
3269 -+# it at startup.
3270 -+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
3271 -+# for more information.
3272 -+
3273 -+GENERATE_DOCSET = NO
3274 -+
3275 -+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
3276 -+# feed. A documentation feed provides an umbrella under which multiple
3277 -+# documentation sets from a single provider (such as a company or product suite)
3278 -+# can be grouped.
3279 -+
3280 -+DOCSET_FEEDNAME = "Doxygen generated docs"
3281 -+
3282 -+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
3283 -+# should uniquely identify the documentation set bundle. This should be a
3284 -+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
3285 -+# will append .docset to the name.
3286 -+
3287 -+DOCSET_BUNDLE_ID = org.doxygen.Project
3288 -+
3289 -+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify
3290 -+# the documentation publisher. This should be a reverse domain-name style
3291 -+# string, e.g. com.mycompany.MyDocSet.documentation.
3292 -+
3293 -+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
3294 -+
3295 -+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
3296 -+
3297 -+DOCSET_PUBLISHER_NAME = Publisher
3298 -+
3299 -+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
3300 -+# will be generated that can be used as input for tools like the
3301 -+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
3302 - # of the generated HTML documentation.
3303 -
3304 - GENERATE_HTMLHELP = NO
3305 -
3306 --# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
3307 --# be used to specify the file name of the resulting .chm file. You
3308 --# can add a path in front of the file if the result should not be
3309 -+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
3310 -+# be used to specify the file name of the resulting .chm file. You
3311 -+# can add a path in front of the file if the result should not be
3312 - # written to the html output directory.
3313 -
3314 - CHM_FILE = dcmtk354.chm
3315 -
3316 --# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
3317 --# be used to specify the location (absolute path including file name) of
3318 --# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
3319 -+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
3320 -+# be used to specify the location (absolute path including file name) of
3321 -+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
3322 - # the HTML help compiler on the generated index.hhp.
3323 -
3324 --HHC_LOCATION =
3325 -+HHC_LOCATION =
3326 -
3327 --# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
3328 --# controls if a separate .chi index file is generated (YES) or that
3329 -+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
3330 -+# controls if a separate .chi index file is generated (YES) or that
3331 - # it should be included in the master .chm file (NO).
3332 -
3333 - GENERATE_CHI = NO
3334 -
3335 --# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
3336 --# controls whether a binary table of contents is generated (YES) or a
3337 -+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
3338 -+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
3339 -+# content.
3340 -+
3341 -+CHM_INDEX_ENCODING =
3342 -+
3343 -+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
3344 -+# controls whether a binary table of contents is generated (YES) or a
3345 - # normal table of contents (NO) in the .chm file.
3346 -
3347 - BINARY_TOC = NO
3348 -
3349 --# The TOC_EXPAND flag can be set to YES to add extra items for group members
3350 -+# The TOC_EXPAND flag can be set to YES to add extra items for group members
3351 - # to the contents of the HTML help documentation and to the tree view.
3352 -
3353 - TOC_EXPAND = YES
3354 -
3355 --# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
3356 --# top of each HTML page. The value NO (the default) enables the index and
3357 -+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
3358 -+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
3359 -+# that can be used as input for Qt's qhelpgenerator to generate a
3360 -+# Qt Compressed Help (.qch) of the generated HTML documentation.
3361 -+
3362 -+GENERATE_QHP = NO
3363 -+
3364 -+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
3365 -+# be used to specify the file name of the resulting .qch file.
3366 -+# The path specified is relative to the HTML output folder.
3367 -+
3368 -+QCH_FILE =
3369 -+
3370 -+# The QHP_NAMESPACE tag specifies the namespace to use when generating
3371 -+# Qt Help Project output. For more information please see
3372 -+# http://doc.trolltech.com/qthelpproject.html#namespace
3373 -+
3374 -+QHP_NAMESPACE = org.doxygen.Project
3375 -+
3376 -+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
3377 -+# Qt Help Project output. For more information please see
3378 -+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
3379 -+
3380 -+QHP_VIRTUAL_FOLDER = doc
3381 -+
3382 -+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
3383 -+# add. For more information please see
3384 -+# http://doc.trolltech.com/qthelpproject.html#custom-filters
3385 -+
3386 -+QHP_CUST_FILTER_NAME =
3387 -+
3388 -+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
3389 -+# custom filter to add. For more information please see
3390 -+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
3391 -+# Qt Help Project / Custom Filters</a>.
3392 -+
3393 -+QHP_CUST_FILTER_ATTRS =
3394 -+
3395 -+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
3396 -+# project's
3397 -+# filter section matches.
3398 -+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
3399 -+# Qt Help Project / Filter Attributes</a>.
3400 -+
3401 -+QHP_SECT_FILTER_ATTRS =
3402 -+
3403 -+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
3404 -+# be used to specify the location of Qt's qhelpgenerator.
3405 -+# If non-empty doxygen will try to run qhelpgenerator on the generated
3406 -+# .qhp file.
3407 -+
3408 -+QHG_LOCATION =
3409 -+
3410 -+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
3411 -+# will be generated, which together with the HTML files, form an Eclipse help
3412 -+# plugin. To install this plugin and make it available under the help contents
3413 -+# menu in Eclipse, the contents of the directory containing the HTML and XML
3414 -+# files needs to be copied into the plugins directory of eclipse. The name of
3415 -+# the directory within the plugins directory should be the same as
3416 -+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
3417 -+# the help appears.
3418 -+
3419 -+GENERATE_ECLIPSEHELP = NO
3420 -+
3421 -+# A unique identifier for the eclipse help plugin. When installing the plugin
3422 -+# the directory name containing the HTML and XML files should also have
3423 -+# this name.
3424 -+
3425 -+ECLIPSE_DOC_ID = org.doxygen.Project
3426 -+
3427 -+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
3428 -+# top of each HTML page. The value NO (the default) enables the index and
3429 - # the value YES disables it.
3430 -
3431 - DISABLE_INDEX = NO
3432 -
3433 --# This tag can be used to set the number of enum values (range [1..20])
3434 -+# This tag can be used to set the number of enum values (range [1..20])
3435 - # that doxygen will group on one line in the generated HTML documentation.
3436 -
3437 - ENUM_VALUES_PER_LINE = 4
3438 -
3439 --# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
3440 --# generated containing a tree-like index structure (just like the one that
3441 --# is generated for HTML Help). For this to work a browser that supports
3442 --# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
3443 --# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
3444 --# probably better off using the HTML help feature.
3445 -+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
3446 -+# structure should be generated to display hierarchical information.
3447 -+# If the tag value is set to YES, a side panel will be generated
3448 -+# containing a tree-like index structure (just like the one that
3449 -+# is generated for HTML Help). For this to work a browser that supports
3450 -+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
3451 -+# Windows users are probably better off using the HTML help feature.
3452 -
3453 - GENERATE_TREEVIEW = NO
3454 -
3455 --# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
3456 --# used to set the initial width (in pixels) of the frame in which the tree
3457 -+# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
3458 -+# and Class Hierarchy pages using a tree view instead of an ordered list.
3459 -+
3460 -+USE_INLINE_TREES = NO
3461 -+
3462 -+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
3463 -+# used to set the initial width (in pixels) of the frame in which the tree
3464 - # is shown.
3465 -
3466 - TREEVIEW_WIDTH = 250
3467 -
3468 -+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
3469 -+# links to external symbols imported via tag files in a separate window.
3470 -+
3471 -+EXT_LINKS_IN_WINDOW = NO
3472 -+
3473 -+# Use this tag to change the font size of Latex formulas included
3474 -+# as images in the HTML documentation. The default is 10. Note that
3475 -+# when you change the font size after a successful doxygen run you need
3476 -+# to manually remove any form_*.png images from the HTML output directory
3477 -+# to force them to be regenerated.
3478 -+
3479 -+FORMULA_FONTSIZE = 10
3480 -+
3481 -+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
3482 -+# generated for formulas are transparent PNGs. Transparent PNGs are
3483 -+# not supported properly for IE 6.0, but are supported on all modern browsers.
3484 -+# Note that when changing this option you need to delete any form_*.png files
3485 -+# in the HTML output before the changes have effect.
3486 -+
3487 -+FORMULA_TRANSPARENT = YES
3488 -+
3489 -+# When the SEARCHENGINE tag is enabled doxygen will generate a search box
3490 -+# for the HTML output. The underlying search engine uses javascript
3491 -+# and DHTML and should work on any modern browser. Note that when using
3492 -+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
3493 -+# (GENERATE_DOCSET) there is already a search function so this one should
3494 -+# typically be disabled. For large projects the javascript based search engine
3495 -+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
3496 -+
3497 -+SEARCHENGINE = NO
3498 -+
3499 -+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
3500 -+# implemented using a PHP enabled web server instead of at the web client
3501 -+# using Javascript. Doxygen will generate the search PHP script and index
3502 -+# file to put on the web server. The advantage of the server
3503 -+# based approach is that it scales better to large projects and allows
3504 -+# full text search. The disadvances is that it is more difficult to setup
3505 -+# and does not have live searching capabilities.
3506 -+
3507 -+SERVER_BASED_SEARCH = NO
3508 -+
3509 - #---------------------------------------------------------------------------
3510 - # configuration options related to the LaTeX output
3511 - #---------------------------------------------------------------------------
3512 -
3513 --# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
3514 -+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
3515 - # generate Latex output.
3516 -
3517 - GENERATE_LATEX = NO
3518 -
3519 --# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
3520 --# If a relative path is entered the value of OUTPUT_DIRECTORY will be
3521 -+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
3522 -+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
3523 - # put in front of it. If left blank `latex' will be used as the default path.
3524 -
3525 - LATEX_OUTPUT = latex
3526 -
3527 --# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
3528 -+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
3529 - # invoked. If left blank `latex' will be used as the default command name.
3530 -+# Note that when enabling USE_PDFLATEX this option is only used for
3531 -+# generating bitmaps for formulas in the HTML output, but not in the
3532 -+# Makefile that is written to the output directory.
3533 -
3534 - LATEX_CMD_NAME = latex
3535 -
3536 --# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
3537 --# generate index for LaTeX. If left blank `makeindex' will be used as the
3538 -+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
3539 -+# generate index for LaTeX. If left blank `makeindex' will be used as the
3540 - # default command name.
3541 -
3542 - MAKEINDEX_CMD_NAME = makeindex
3543 -
3544 --# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
3545 --# LaTeX documents. This may be useful for small projects and may help to
3546 -+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
3547 -+# LaTeX documents. This may be useful for small projects and may help to
3548 - # save some trees in general.
3549 -
3550 - COMPACT_LATEX = NO
3551 -
3552 --# The PAPER_TYPE tag can be used to set the paper type that is used
3553 --# by the printer. Possible values are: a4, a4wide, letter, legal and
3554 -+# The PAPER_TYPE tag can be used to set the paper type that is used
3555 -+# by the printer. Possible values are: a4, a4wide, letter, legal and
3556 - # executive. If left blank a4wide will be used.
3557 -
3558 - PAPER_TYPE = a4wide
3559 -
3560 --# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
3561 -+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
3562 - # packages that should be included in the LaTeX output.
3563 -
3564 --EXTRA_PACKAGES =
3565 -+EXTRA_PACKAGES =
3566 -
3567 --# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
3568 --# the generated latex document. The header should contain everything until
3569 --# the first chapter. If it is left blank doxygen will generate a
3570 -+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
3571 -+# the generated latex document. The header should contain everything until
3572 -+# the first chapter. If it is left blank doxygen will generate a
3573 - # standard header. Notice: only use this tag if you know what you are doing!
3574 -
3575 --LATEX_HEADER =
3576 -+LATEX_HEADER =
3577 -
3578 --# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
3579 --# is prepared for conversion to pdf (using ps2pdf). The pdf file will
3580 --# contain links (just like the HTML output) instead of page references
3581 -+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
3582 -+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
3583 -+# contain links (just like the HTML output) instead of page references
3584 - # This makes the output suitable for online browsing using a pdf viewer.
3585 -
3586 - PDF_HYPERLINKS = YES
3587 -
3588 --# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
3589 --# plain latex in the generated Makefile. Set this option to YES to get a
3590 -+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
3591 -+# plain latex in the generated Makefile. Set this option to YES to get a
3592 - # higher quality PDF documentation.
3593 -
3594 - USE_PDFLATEX = NO
3595 -
3596 --# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
3597 --# command to the generated LaTeX files. This will instruct LaTeX to keep
3598 --# running if errors occur, instead of asking the user for help.
3599 -+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
3600 -+# command to the generated LaTeX files. This will instruct LaTeX to keep
3601 -+# running if errors occur, instead of asking the user for help.
3602 - # This option is also used when generating formulas in HTML.
3603 -
3604 - LATEX_BATCHMODE = YES
3605 -
3606 --# If LATEX_HIDE_INDICES is set to YES then doxygen will not
3607 --# include the index chapters (such as File Index, Compound Index, etc.)
3608 -+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
3609 -+# include the index chapters (such as File Index, Compound Index, etc.)
3610 - # in the output.
3611 -
3612 - LATEX_HIDE_INDICES = NO
3613 -
3614 -+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
3615 -+# source code with syntax highlighting in the LaTeX output.
3616 -+# Note that which sources are shown also depends on other settings
3617 -+# such as SOURCE_BROWSER.
3618 -+
3619 -+LATEX_SOURCE_CODE = NO
3620 -+
3621 - #---------------------------------------------------------------------------
3622 - # configuration options related to the RTF output
3623 - #---------------------------------------------------------------------------
3624 -
3625 --# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
3626 --# The RTF output is optimized for Word 97 and may not look very pretty with
3627 -+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
3628 -+# The RTF output is optimized for Word 97 and may not look very pretty with
3629 - # other RTF readers or editors.
3630 -
3631 - GENERATE_RTF = NO
3632 -
3633 --# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
3634 --# If a relative path is entered the value of OUTPUT_DIRECTORY will be
3635 -+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
3636 -+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
3637 - # put in front of it. If left blank `rtf' will be used as the default path.
3638 -
3639 - RTF_OUTPUT = rtf
3640 -
3641 --# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
3642 --# RTF documents. This may be useful for small projects and may help to
3643 -+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
3644 -+# RTF documents. This may be useful for small projects and may help to
3645 - # save some trees in general.
3646 -
3647 - COMPACT_RTF = NO
3648 -
3649 --# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
3650 --# will contain hyperlink fields. The RTF file will
3651 --# contain links (just like the HTML output) instead of page references.
3652 --# This makes the output suitable for online browsing using WORD or other
3653 --# programs which support those fields.
3654 -+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
3655 -+# will contain hyperlink fields. The RTF file will
3656 -+# contain links (just like the HTML output) instead of page references.
3657 -+# This makes the output suitable for online browsing using WORD or other
3658 -+# programs which support those fields.
3659 - # Note: wordpad (write) and others do not support links.
3660 -
3661 - RTF_HYPERLINKS = NO
3662 -
3663 --# Load stylesheet definitions from file. Syntax is similar to doxygen's
3664 --# config file, i.e. a series of assignments. You only have to provide
3665 -+# Load stylesheet definitions from file. Syntax is similar to doxygen's
3666 -+# config file, i.e. a series of assignments. You only have to provide
3667 - # replacements, missing definitions are set to their default value.
3668 -
3669 --RTF_STYLESHEET_FILE =
3670 -+RTF_STYLESHEET_FILE =
3671 -
3672 --# Set optional variables used in the generation of an rtf document.
3673 -+# Set optional variables used in the generation of an rtf document.
3674 - # Syntax is similar to doxygen's config file.
3675 -
3676 --RTF_EXTENSIONS_FILE =
3677 -+RTF_EXTENSIONS_FILE =
3678 -
3679 - #---------------------------------------------------------------------------
3680 - # configuration options related to the man page output
3681 - #---------------------------------------------------------------------------
3682 -
3683 --# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
3684 -+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
3685 - # generate man pages
3686 -
3687 - GENERATE_MAN = NO
3688 -
3689 --# The MAN_OUTPUT tag is used to specify where the man pages will be put.
3690 --# If a relative path is entered the value of OUTPUT_DIRECTORY will be
3691 -+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
3692 -+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
3693 - # put in front of it. If left blank `man' will be used as the default path.
3694 -
3695 - MAN_OUTPUT = man
3696 -
3697 --# The MAN_EXTENSION tag determines the extension that is added to
3698 -+# The MAN_EXTENSION tag determines the extension that is added to
3699 - # the generated man pages (default is the subroutine's section .3)
3700 -
3701 - MAN_EXTENSION = .3
3702 -
3703 --# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
3704 --# then it will generate one additional man file for each entity
3705 --# documented in the real man page(s). These additional files
3706 --# only source the real man page, but without them the man command
3707 -+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
3708 -+# then it will generate one additional man file for each entity
3709 -+# documented in the real man page(s). These additional files
3710 -+# only source the real man page, but without them the man command
3711 - # would be unable to find the correct page. The default is NO.
3712 -
3713 - MAN_LINKS = NO
3714 -@@ -890,33 +1241,33 @@
3715 - # configuration options related to the XML output
3716 - #---------------------------------------------------------------------------
3717 -
3718 --# If the GENERATE_XML tag is set to YES Doxygen will
3719 --# generate an XML file that captures the structure of
3720 -+# If the GENERATE_XML tag is set to YES Doxygen will
3721 -+# generate an XML file that captures the structure of
3722 - # the code including all documentation.
3723 -
3724 - GENERATE_XML = NO
3725 -
3726 --# The XML_OUTPUT tag is used to specify where the XML pages will be put.
3727 --# If a relative path is entered the value of OUTPUT_DIRECTORY will be
3728 -+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
3729 -+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
3730 - # put in front of it. If left blank `xml' will be used as the default path.
3731 -
3732 - XML_OUTPUT = xml
3733 -
3734 --# The XML_SCHEMA tag can be used to specify an XML schema,
3735 --# which can be used by a validating XML parser to check the
3736 -+# The XML_SCHEMA tag can be used to specify an XML schema,
3737 -+# which can be used by a validating XML parser to check the
3738 - # syntax of the XML files.
3739 -
3740 --XML_SCHEMA =
3741 -+XML_SCHEMA =
3742 -
3743 --# The XML_DTD tag can be used to specify an XML DTD,
3744 --# which can be used by a validating XML parser to check the
3745 -+# The XML_DTD tag can be used to specify an XML DTD,
3746 -+# which can be used by a validating XML parser to check the
3747 - # syntax of the XML files.
3748 -
3749 --XML_DTD =
3750 -+XML_DTD =
3751 -
3752 --# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
3753 --# dump the program listings (including syntax highlighting
3754 --# and cross-referencing information) to the XML output. Note that
3755 -+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
3756 -+# dump the program listings (including syntax highlighting
3757 -+# and cross-referencing information) to the XML output. Note that
3758 - # enabling this will significantly increase the size of the XML output.
3759 -
3760 - XML_PROGRAMLISTING = YES
3761 -@@ -925,10 +1276,10 @@
3762 - # configuration options for the AutoGen Definitions output
3763 - #---------------------------------------------------------------------------
3764 -
3765 --# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
3766 --# generate an AutoGen Definitions (see autogen.sf.net) file
3767 --# that captures the structure of the code including all
3768 --# documentation. Note that this feature is still experimental
3769 -+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
3770 -+# generate an AutoGen Definitions (see autogen.sf.net) file
3771 -+# that captures the structure of the code including all
3772 -+# documentation. Note that this feature is still experimental
3773 - # and incomplete at the moment.
3774 -
3775 - GENERATE_AUTOGEN_DEF = NO
3776 -@@ -937,82 +1288,84 @@
3777 - # configuration options related to the Perl module output
3778 - #---------------------------------------------------------------------------
3779 -
3780 --# If the GENERATE_PERLMOD tag is set to YES Doxygen will
3781 --# generate a Perl module file that captures the structure of
3782 --# the code including all documentation. Note that this
3783 --# feature is still experimental and incomplete at the
3784 -+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
3785 -+# generate a Perl module file that captures the structure of
3786 -+# the code including all documentation. Note that this
3787 -+# feature is still experimental and incomplete at the
3788 - # moment.
3789 -
3790 - GENERATE_PERLMOD = NO
3791 -
3792 --# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
3793 --# the necessary Makefile rules, Perl scripts and LaTeX code to be able
3794 -+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
3795 -+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
3796 - # to generate PDF and DVI output from the Perl module output.
3797 -
3798 - PERLMOD_LATEX = NO
3799 -
3800 --# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
3801 --# nicely formatted so it can be parsed by a human reader. This is useful
3802 --# if you want to understand what is going on. On the other hand, if this
3803 --# tag is set to NO the size of the Perl module output will be much smaller
3804 -+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
3805 -+# nicely formatted so it can be parsed by a human reader.
3806 -+# This is useful
3807 -+# if you want to understand what is going on.
3808 -+# On the other hand, if this
3809 -+# tag is set to NO the size of the Perl module output will be much smaller
3810 - # and Perl will parse it just the same.
3811 -
3812 - PERLMOD_PRETTY = YES
3813 -
3814 --# The names of the make variables in the generated doxyrules.make file
3815 --# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
3816 --# This is useful so different doxyrules.make files included by the same
3817 -+# The names of the make variables in the generated doxyrules.make file
3818 -+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
3819 -+# This is useful so different doxyrules.make files included by the same
3820 - # Makefile don't overwrite each other's variables.
3821 -
3822 --PERLMOD_MAKEVAR_PREFIX =
3823 -+PERLMOD_MAKEVAR_PREFIX =
3824 -
3825 - #---------------------------------------------------------------------------
3826 --# Configuration options related to the preprocessor
3827 -+# Configuration options related to the preprocessor
3828 - #---------------------------------------------------------------------------
3829 -
3830 --# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
3831 --# evaluate all C-preprocessor directives found in the sources and include
3832 -+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
3833 -+# evaluate all C-preprocessor directives found in the sources and include
3834 - # files.
3835 -
3836 - ENABLE_PREPROCESSING = YES
3837 -
3838 --# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
3839 --# names in the source code. If set to NO (the default) only conditional
3840 --# compilation will be performed. Macro expansion can be done in a controlled
3841 -+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
3842 -+# names in the source code. If set to NO (the default) only conditional
3843 -+# compilation will be performed. Macro expansion can be done in a controlled
3844 - # way by setting EXPAND_ONLY_PREDEF to YES.
3845 -
3846 - MACRO_EXPANSION = NO
3847 -
3848 --# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
3849 --# then the macro expansion is limited to the macros specified with the
3850 -+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
3851 -+# then the macro expansion is limited to the macros specified with the
3852 - # PREDEFINED and EXPAND_AS_DEFINED tags.
3853 -
3854 - EXPAND_ONLY_PREDEF = NO
3855 -
3856 --# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
3857 -+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
3858 - # in the INCLUDE_PATH (see below) will be search if a #include is found.
3859 -
3860 - SEARCH_INCLUDES = YES
3861 -
3862 --# The INCLUDE_PATH tag can be used to specify one or more directories that
3863 --# contain include files that are not input files but should be processed by
3864 -+# The INCLUDE_PATH tag can be used to specify one or more directories that
3865 -+# contain include files that are not input files but should be processed by
3866 - # the preprocessor.
3867 -
3868 --INCLUDE_PATH =
3869 -+INCLUDE_PATH =
3870 -
3871 --# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
3872 --# patterns (like *.h and *.hpp) to filter out the header-files in the
3873 --# directories. If left blank, the patterns specified with FILE_PATTERNS will
3874 -+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
3875 -+# patterns (like *.h and *.hpp) to filter out the header-files in the
3876 -+# directories. If left blank, the patterns specified with FILE_PATTERNS will
3877 - # be used.
3878 -
3879 --INCLUDE_FILE_PATTERNS =
3880 -+INCLUDE_FILE_PATTERNS =
3881 -
3882 --# The PREDEFINED tag can be used to specify one or more macro names that
3883 --# are defined before the preprocessor is started (similar to the -D option of
3884 --# gcc). The argument of the tag is a list of macros of the form: name
3885 --# or name=definition (no spaces). If the definition and the = are
3886 --# omitted =1 is assumed. To prevent a macro definition from being
3887 --# undefined via #undef or recursively expanded use the := operator
3888 -+# The PREDEFINED tag can be used to specify one or more macro names that
3889 -+# are defined before the preprocessor is started (similar to the -D option of
3890 -+# gcc). The argument of the tag is a list of macros of the form: name
3891 -+# or name=definition (no spaces). If the definition and the = are
3892 -+# omitted =1 is assumed. To prevent a macro definition from being
3893 -+# undefined via #undef or recursively expanded use the := operator
3894 - # instead of the = operator.
3895 -
3896 - PREDEFINED = WITH_OPENSSL \
3897 -@@ -1104,7 +1457,7 @@
3898 - # toolkit from AT&T and Lucent Bell Labs. The other options in this section
3899 - # have no effect if this option is set to NO (the default)
3900 -
3901 --HAVE_DOT = NO
3902 -+HAVE_DOT = YES
3903 -
3904 - # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
3905 - # will generate a graph for each documented class showing the direct and
3906 -@@ -1182,7 +1535,7 @@
3907 - # generated by dot. Possible values are png, jpg, or gif
3908 - # If left blank png will be used.
3909 -
3910 --DOT_IMAGE_FORMAT = png
3911 -+DOT_IMAGE_FORMAT = svg
3912 -
3913 - # The tag DOT_PATH can be used to specify the path where the dot tool can be
3914 - # found. If left blank, it is assumed the dot tool can be found in the path.