2 ############################################################
3 # source: general-srcpkg.shlib
4 # author: devenkong(18151155@qq.com)
6 ############################################################
7 # Copyright (C) 2022- Free Software Foundation, Inc.
8 # This configure script is free software; the Free Software
9 # Foundation gives unlimited permission to copy, distribute
11 ############################################################
13 # paramters about general sh/c/clib src-pkg for
16 ############################################################
28 ##############################
29 # section: public comment info
30 ##############################
34 ##############################
35 # section: variable define
36 ##############################
38 # @ a src-pkg with sh/shlib/c.
39 # shlib is the main lib code.
40 # sh for utility program.
41 # lib/c for shlib builtin/loadables.
42 # src/c for binary utility.
43 # it can be used for shlib, clib, cbinary.
44 # if it need to use cpp, changge c to cpp.
50 # designdir:desc/md/catalog/imi/uml;
51 # testdir:shunit/stdout/timecost;
52 # unittestdir:cunit/shunit/stdout/timecost;
53 # [shitem] bindir:shexe;
54 # [shlibitem] shlibdir:shlib;
55 # [shmdlitem] shlibdir:shexe/mdl;
56 # [shlibmdlitem] shlibdir:shlib/mdl;
57 # [shbuiltin] libdir:def/h; shlibdir:shlib;
61 # [ctestfile] srcdir:cunittest;
63 # [cunititem] srcdir:c/h/cunit;
64 # [cunit] srcdir:desc/c/h/cunit/shunit/stdout/timecost;
65 # [cmodule] srcdir:desc/c/h/cunit/vala/mdl/shunit/stdout/timecost;
66 # [cmdlitem] srcdir:c/h/cunit/vala/mdl;
68 # [clibfile] srcdir:c;
69 # [clibitem] libdir:c/h;
70 # [clibunititem] libdir:c/h/cunit;
71 # [clibunit] libdir:desc/c/h/cunit/shunit/stdout/timecost;
72 # [clibmodule] libdir:desc/c/h/cunit/vala/mdl/shunit/stdout/timecost;
73 # [clibmdlitem] libdir:c/h/cunit/vala/mdl;
77 # those paramters are used for node reverse matching.
79 # ITEM_KINDS='shitem/shlibitem/shmdlitem/shbuiltin'
80 ITEM_KINDS
='citem/cunititem/cunit/cmodule/cmdlitem'
81 DIR_KINDS
='dir/module/unit'
84 # todolist style catalog.
89 # * [new] [scripttest] script_test 0BEA98F7 \
90 # "add a new test utility implemented by shell script."
91 # + [new] [scripttest] paramter_list 20A9E38B \
92 # * [bugfix] [cataid.shlib] ROLL_BACK_ERR \
93 # "when use 'scripttest rollback' if current begin-cataid is 5.3.1 back to
94 # 5.2.x, the value is not correct. foreach function in directory "
99 # variables for a node.
101 # NCATAID, number in current catalog or directory. with a random hex sfx, it's used to alias with
102 # a node in other catalog.
103 # NNAME, name for file and variable.
104 # NTYPE, dir, relative item, or content type. it means the node created in dest-output.
105 # NDESC, the content or description info for a node.
108 # NFULLCATAID, it's the full cataid in catalog.
109 # NTYPE_SFX, if a node is dir or item, it need a sfx for dir/item node name string.
110 # ITEM_KINDS, all item kins used in current catalog.
111 # NDIR_ARRAY, relative dir name array in src-pkg. it's the output dest dir. it's generated from
114 # NFEXT_DISABLE_LIST, ignore files with specified ext-name in global.
115 # NTYPE_LIST[<dir-type>], in the corresponding dir, it stores sfx name for dirnode. NTYPE_LIST for
116 # global. normally, it's a global setting, because there are few dirnode types, and at most time,
117 # a dirnode do not use sfx.
118 # NFEXT_LIST[<dir-type>], file ext-name list for current dir in current itemnode/dirnode. ITEM_KINDS
119 # defines various kinds of itemnode that maybe used in current catalog doc.
120 # if a node is include in a dir, ext-name is the sfx of dir.
126 # @ matching with ext-name
127 # 'ls -f -1 -d -v @{NFEXT_LIST} @{NTYPE_LIST} | grep -v "@{NFEXT_DISABLE_LIST}"'
128 # @ matching with @{NNAME}
129 # 'ls -f -1 -d -v ${NNAME} | grep -v "${NFEXT_DISABLE_LIST}"'
132 # 'ls -f -1 -d -v @{NFEXT_LIST} @{NTYPE_LIST} | grep -v "@{NFEXT_DISABLE_LIST}"'
133 # 1. ls for current dir,
134 # 'ls -f -1 -d -v @{NNAME} | grep -e "[^\.]?@{NNAME}[^\.]?"'
135 # list files for current dirnode,
136 # NFEXT_LIST is the describe ext-name of directory, invoke function to match and get the
137 # varialbe data in valid file. using '*.desc' or '*${NNAME}*'.
138 # NFEXT_DISABLE_LIST is the deny string for filter. using '[^.]?'.
139 # to recognize the type of current dir, 'ls' by '*.desc'.
140 # for a dirnode, at most time, it's a 'desc' file sfx for dir, it generate variables
142 # for a itemnode, it include sfx name defined in corresponding itemnode in current output-dir.
143 # 2. ls for items under current dir.
144 # NFEXT_LIST is setted by first ext-name defined in itemnode,
145 # NTYPE_LIST is a list of dirnode.
146 # list files/dirs by NFEXT_LIST and NTYPE_LIST.
147 # NFEXT_LIST, include the first file type defined in current output dir, to get NNAME for
149 # NTYPE_LIST, include the various kinds of dir name sfx in current dir. it generated from
151 # 3. ls for one items. NFEXT_LIST is the file ext-name defined in itemnode,
152 # NTYPE_LIST is a list of dirnode ext-name.
153 # NFEXT_LIST and NTYPE_LIST can be generated by node defination.
154 # NFEXT_DISABLE_LIST is used for disable list.
158 ################################################################################################
159 # @ node defination for catalog.
160 # in this section, it defines catanode, dirnode, itemnode, contnode, and the corresponding dirnode
161 # and itemnode in different OUTPUT_DIR.
162 ################################################################################################
164 # catanode for catalog
166 #########################
167 attr_create catalog
::catanode
::STR_FMT
='<@{NCATAID}>@{ALIAN}[@{NTYPE}]@{ALIAN}@{NNAME}@{ALIAN}[@{NDESC}]'
168 #attr_create catalog::catanode::regex='<([a-zA-Z0-9_ ]*)> [([a-zA-Z0-9_ ]*)] ([a-zA-Z0-9_ ]*) "([a-zA-Z0-9_ ]*)"'
169 # it's used for multi-blank seperator recognizing between data columns.
170 attr_create catalog
::catanode
::ALIAN_REGEX
='${ALIAN_REGEX}'
171 # when generating catalog, set ' ' as the seperator char.
172 attr_create catalog
::catanode
::ALIAN
=' '
173 attr_create catalog
::catanode
::PAIRCHARS
='<>[]""{}'
176 #########################
177 attr_create catalog
::dirnode
::NFTYPE
='srcdir/testdir/designdir:descfile'
180 #########################
181 # it's the node under current dir. and NODEDIR=''.
182 # it's used for code under a dirnode directly.
183 attr_create catalog
::itemnode
::NODEDIR
=''
184 attr_create catalog
::itemnode
::NFTYPE
='
185 srcdir:c/h/cunittest;
186 testdir:shtest/stdout/timecost;
187 docdir/designdocdir:md'
189 # content node string
190 # the output of content string is generated by STR_FMT, but the reverse procedure is produced
193 #########################
194 #attr_create catalog::contnode::STR_FMT='@{NDESC}'
195 #attr_create catalog::contnode::regex='<([a-zA-Z0-9_ ]*)> [([a-zA-Z0-9_ ]*)] ([a-zA-Z0-9_ ]*) "([a-zA-Z0-9_ ]*)"'
196 #attr_create catalog::contnode::sepchar='.'
197 #attr_create catalog::contnode::attr_wrap=( "none" "wrap1" "wrap2" "wrap3" "<" "<<" "<<<" "[" "\"" "[" )
198 #attr_create catalog::contnode::attr_idx=\( NDESC \)
199 #attr_create catalog::contnode::nid_idx= 0
202 #############################################################
204 #############################################################
206 # [shitem] bindir:shexe;
207 #########################
208 attr_create catalog
::shitem
::NODEDIR
=''
209 attr_create catalog
::shitem
::NFTYPE
='
211 bintestdir:shunit/stdout/timecost/desc;
216 # [shlibitem] shlibdir:shlib;
217 #########################
218 attr_create catalog
::shlibitem
::NODEDIR
=''
219 attr_create catalog
::shlibitem
::NFTYPE
='
221 shlibtestdir:shunit/stdout/timecost/desc;
226 # [shbuiltin] libdir:def/h; shlibdir:shlib;
227 #########################
228 attr_create catalog
::shbuiltin
::NODEDIR
=''
229 attr_create catalog
::shbuiltin
::NFTYPE
='
230 libdir:def/h; shlibdir:shlib;
231 shlibtestdir:shunit/stdout/timecost/desc;
237 #########################
239 # [citem] srcdir:c/h;
240 #########################
241 attr_create catalog
::citem
::NODEDIR
=''
242 attr_create catalog
::citem
::NFTYPE
='
244 unittestdir:cunit/shunit/stdout/timecost/desc;
248 # [cunit] srcdir:desc/c/h/cunit/shunit/stdout/timecost;
249 #########################
250 attr_create catalog
::cunit
::NODEDIR
=''
251 attr_create catalog
::cunit
::NFTYPE
='
252 srcdir:desc/c/h/cunit/shunit/stdout/timecost;
254 designdir:desc/md/catalog/imi/uml;'
256 # [cmodule] srcdir:desc/c/h/cunit/vala/mdl/shunit/stdout/timecost;
257 #########################
258 attr_create catalog
::cmodule
::NODEDIR
=''
259 attr_create catalog
::cmodule
::NFTYPE
='
260 srcdir:desc/c/h/cunit/vala/mdl/shunit/stdout/timecost;
262 designdir:desc/md/catalog/imi/uml;'
264 # [cunititem] srcdir:c/h/cunit;
265 #########################
266 attr_create catalog
::cunititem
::NODEDIR
=''
267 attr_create catalog
::cunititem
::NFTYPE
='
269 unittestdir:shunit/stdout/timecost/desc;
273 # [cmdlitem] srcdir:c/h/cunit/vala/mdl;
274 #########################
275 attr_create catalog
::cmdlitem
::NODEDIR
=''
276 attr_create catalog
::cmdlitem
::NFTYPE
='
277 srcdir:desc/c/h/cunit/vala/mdl;
278 unittestdir:shunit/stdout/timecost/desc;
280 designdir:desc/md/catalog/imi/uml;'
283 #########################
285 # [clibitem] libdir:c/h;
286 #########################
287 attr_create catalog
::clibitem
::NODEDIR
=''
288 attr_create catalog
::clibitem
::NFTYPE
='
290 unittestdir:cunit/shunit/stdout/timecost/desc;
294 # [clibunit] libdir:desc/c/h/cunit/shunit/stdout/timecost;
295 #########################
296 attr_create catalog
::clibunit
::NODEDIR
=''
297 attr_create catalog
::clibunit
::NFTYPE
='
298 libdir:desc/c/h/cunit/shunit/stdout/timecost;
300 designdir:desc/md/catalog/imi/uml;'
302 # [clibmodule] libdir:desc/c/h/cunit/vala/mdl/shunit/stdout/timecost;
303 #########################
304 attr_create catalog
::clibmodule
::NODEDIR
=''
305 attr_create catalog
::clibmodule
::NFTYPE
='
306 libdir:desc/c/h/cunit/vala/mdl/shunit/stdout/timecost;
308 designdir:desc/md/catalog/imi/uml;'
310 # [clibunititem] libdir:c/h/cunit;
311 #########################
312 attr_create catalog
::clibunititem
::NODEDIR
=''
313 attr_create catalog
::clibunititem
::NFTYPE
='
315 unittestdir:shunit/stdout/timecost/desc;
319 # [clibmdlitem] libdir:c/h/cunit/vala/mdl;
320 #########################
321 attr_create catalog
::clibmdlitem
::NODEDIR
=''
322 attr_create catalog
::clibmdlitem
::NFTYPE
='
323 libdir:c/h/cunit/vala/mdl;
324 unittestdir:shunit/stdout/timecost/desc;
326 designdir:desc/md/catalog/imi/uml;'
333 # designdir:desc/md/catalog/imi/uml;
334 # testdir:shunit/stdout/timecost;
335 # testdir:cunit/shunit/stdout/timecost;
336 # libtestdir:cunit/shunit/stdout/timecost;
337 # shtestdir:cunit/shunit/stdout/timecost;
338 # shlibtestdir:cunit/shunit/stdout/timecost;
340 #############################################################
342 #############################################################
345 #########################
346 # main file for itemnode.
347 attr_create catalog
::testdir
::DIRNAME
='testing/1.unit_test'
348 attr_create catalog
::testdir
::OUTPUT_DIR_FMT
='@{SRCPKG_DIR}/@{DIRNAME}/@{LAYEDDIR}/@(NODEDIR)'
349 attr_create catalog
::testdir
::STR_FMT
='@{NCATAID}.@{NNAME}.@{NTYPE}'
350 attr_create catalog
::testdir
::SEPCHAR
='.'
351 attr_create catalog
::testdir
::sfx
='.@{NTYPE}'
355 # list files under a dir. get the main node info, and use it to get item info.
356 # -1, list one file per line.
357 # -d, list dir without its content.
358 # -X, list dir first, then files. it's the default opt.
359 # -U, do not sort. all those sorting opt are actived in cmdline opt sequence.
360 # -f, do not sort. enable -aU, disable -ls --color.
361 # -v, natual sort. by number. if @{NCATAID} specified in generating, file/dir with name
362 # of id, which can be used for sorting, and filter other un-matched file. put this opt
363 # at the last position.
364 # -S, sort by size, largest first.
365 # -t, sort by modify time.
366 # -c, sort by create time.
367 # --sort=time, sort by access time. valid arguments are none, time, size, extension, version.
368 # @{NFEXT_LIST}, main/major ext-name, the first file ext-name defined in NFTYPE. or ext-name list.
369 # or use specified ext-name directly.
371 # -r, reverse order while sorting.
373 # ls_opt_fmt='-f -1 -d -v @{NFEXT_LIST} @{NTYPE_LIST} | grep -v "@{NFEXT_DISABLE_LIST}"'
379 # it's used for node listing, under a dir.
381 #########################
383 attr_create catalog
::testdir
::dirnode
::STR_FMT
='@{NCATAID}.@{NNAME}.@{NTYPE}'
384 attr_create catalog
::testdir
::dirnode
::SEPCHAR
='.'
385 #attr_create catalog::testdir::dirnode::NFEXT_DISABLE_LIST='_test\.sh'
387 # it should be defined in global info.
388 attr_create catalog
::testdir
::dirnode
::NFEXT_LIST
='*.sh'
389 # it should be defined in global info.
390 attr_create catalog
::testdir
::dirnode
::NTYPE_LIST
='*.item *.dir *.module *.unit'
392 attr_create catalog
::testdir
::itemnode
::NFEXT_DISABLE_LIST
='_test\.sh'
393 # this paramter is generated when catalog::itemXXXnode analyzing. the file ext-name list is generated by
394 # catalog::<file-type>::sfx, and <file-type> is defined in catalog::itemXXXnode::NFTYPE.
395 attr_create catalog
::testdir
::itemnode
::NFEXT_LIST
='*_test.sh *.stdout *.timecost *.desc'
396 attr_create catalog
::testdir
::itemnode
::SEPCHAR
='.'
401 #########################
402 # used for dir creating, all sub-files put in it. if not defined, it do not use dir creating step.
403 #attr_create catalog::dirnode::STR_FMT='@{NNAME}.desc.@{NFEXT}'
404 # it's used for itemnode files listing.
405 # or use @{get_ext_opt_list} to run script func.
406 attr_create catalog
::testdir
::itemnode
::ls_opt_fmt
='-f -1 -d -v @{NFEXT_LIST} | grep -v "@{NFEXT_DISABLE_LIST}"'
407 attr_create catalog
::testdir
::itemnode
::NFEXT_DISABLE_LIST
='_test\.sh'
408 # this paramter is generated when catalog::itemXXXnode analyzing. the file ext-name list is generated by
409 # catalog::<file-type>::sfx, and <file-type> is defined in catalog::itemXXXnode::NFTYPE.
410 attr_create catalog
::testdir
::itemnode
::NFEXT_LIST
='*_test.sh *.stdout *.timecost *.desc'
411 attr_create catalog
::testdir
::itemnode
::SEPCHAR
='.'
414 #############################################################
416 #############################################################
419 #########################
420 # main file for itemnode.
421 attr_create catalog
::srcdir
::DIRNAME
='src'
422 attr_create catalog
::srcdir
::OUTPUT_DIR_FMT
='@{SRCPKG_DIR}/@{DIRNAME}/@{LAYEDDIR}/@(NODEDIR)'
423 attr_create catalog
::srcdir
::STR_FMT
='@{NCATAID}.@{NNAME}.@{NTYPE}'
424 attr_create catalog
::srcdir
::SEPCHAR
='.'
425 attr_create catalog
::srcdir
::sfx
='.@{NTYPE}'
428 # it's used for node listing, under a dir.
430 #########################
431 attr_create catalog
::srcdir
::dirnode
::STR_FMT
='@{NCATAID}.@{NNAME}.@{NTYPE}'
432 attr_create catalog
::srcdir
::dirnode
::SEPCHAR
='.'
433 attr_create catalog
::srcdir
::dirnode
::ls_opt_fmt
='-f -1 -d -v @{NFEXT_LIST} @{NTYPE_LIST} | grep -v "@{NFEXT_DISABLE_LIST}"'
434 attr_create catalog
::srcdir
::dirnode
::NFEXT_DISABLE_LIST
='_test\.sh'
435 attr_create catalog
::srcdir
::dirnode
::NFEXT_LIST
='*.sh'
436 attr_create catalog
::srcdir
::dirnode
::NTYPE_LIST
='*.item *.dir *.module *.unit'
440 #########################
441 #attr_create catalog::dirnode::STR_FMT='@{NNAME}.desc.@{NFEXT}'
442 attr_create catalog
::srcdir
::itemnode
::ls_opt_fmt
='-f -1 -d -v @{NFEXT_LIST} | grep -v "@{NFEXT_DISABLE_LIST}"'
443 attr_create catalog
::srcdir
::itemnode
::NFEXT_DISABLE_LIST
='_test\.c'
444 attr_create catalog
::srcdir
::itemnode
::NFEXT_LIST
='*.c *.h *_test.c'
445 attr_create catalog
::srcdir
::itemnode
::SEPCHAR
='.'
448 #############################################################
450 #############################################################
453 #########################
454 # main file for itemnode.
455 attr_create catalog
::designdir
::DIRNAME
='doc/design-doc'
456 attr_create catalog
::designdir
::OUTPUT_DIR_FMT
='@{SRCPKG_DIR}/@{DIRNAME}/@{LAYEDDIR}/@(NODEDIR)'
457 attr_create catalog
::designdir
::STR_FMT
='@{NCATAID}.@{NNAME}'
458 attr_create catalog
::designdir
::SEPCHAR
='.'
461 # it's used for node listing, under a dir.
463 #########################
464 attr_create catalog
::designdir
::dirnode
::STR_FMT
='@{NCATAID}.@{NNAME}.@{NTYPE}'
465 attr_create catalog
::designdir
::dirnode
::SEPCHAR
='.'
466 attr_create catalog
::designdir
::dirnode
::ls_opt_fmt
='-f -1 -d -v @{NFEXT_LIST} @{NTYPE_LIST} | grep -v "@{NFEXT_DISABLE_LIST}"'
467 attr_create catalog
::designdir
::dirnode
::NFEXT_DISABLE_LIST
='_test\.sh'
468 attr_create catalog
::designdir
::dirnode
::NFEXT_LIST
='*.sh'
469 attr_create catalog
::designdir
::dirnode
::NTYPE_LIST
='*.item *.dir *.module *.unit'
473 #########################
474 #attr_create catalog::dirnode::STR_FMT='@{NNAME}.desc.@{NFEXT}'
475 attr_create catalog
::designdir
::itemnode
::ls_opt_fmt
='-f -1 -d -v @{NFEXT_LIST} | grep -v "@{NFEXT_DISABLE_LIST}"'
476 attr_create catalog
::designdir
::itemnode
::NFEXT_DISABLE_LIST
='_test\.sh'
477 attr_create catalog
::designdir
::itemnode
::NFEXT_LIST
='*.sh *.stdout *.timecost'
478 attr_create catalog
::designdir
::itemnode
::SEPCHAR
='.'
481 #############################################################
483 #############################################################
486 #########################
487 # main file for itemnode.
488 attr_create catalog
::docdir
::DIRNAME
='doc/manual'
489 attr_create catalog
::docdir
::STR_FMT
='@{NCATAID}.@{NNAME}'
490 attr_create catalog
::docdir
::SEPCHAR
='.'
493 # it's used for node listing, under a dir.
495 #########################
496 attr_create catalog
::docdir
::dirnode
::STR_FMT
='@{NCATAID}.@{NNAME}.@{NTYPE}'
497 attr_create catalog
::docdir
::dirnode
::SEPCHAR
='.'
498 attr_create catalog
::docdir
::dirnode
::ls_opt_fmt
='-f -1 -d -v @{NFEXT_LIST} @{NTYPE_LIST} | grep -v "@{NFEXT_DISABLE_LIST}"'
499 attr_create catalog
::docdir
::dirnode
::NFEXT_DISABLE_LIST
='_test\.sh'
500 attr_create catalog
::docdir
::dirnode
::NFEXT_LIST
='*.sh'
501 attr_create catalog
::docdir
::dirnode
::NTYPE_LIST
='*.item *.dir *.module *.unit'
505 #########################
506 #attr_create catalog::dirnode::STR_FMT='@{NNAME}.desc.@{NFEXT}'
507 attr_create catalog
::docdir
::itemnode
::ls_opt_fmt
='-f -1 -d -v @{NFEXT_LIST} | grep -v "@{NFEXT_DISABLE_LIST}"'
508 attr_create catalog
::docdir
::itemnode
::NFEXT_DISABLE_LIST
='_test\.sh'
509 attr_create catalog
::docdir
::itemnode
::NFEXT_LIST
='*.sh *.stdout *.timecost'
510 attr_create catalog
::docdir
::itemnode
::SEPCHAR
='.'
514 ##############################
516 ##############################
521 #############################################################
523 #############################################################
528 # [shlibmodule] shlibdir:shlib/vala/mdl;
529 #########################
530 # it's the node under current dir. and NODEDIR='@{node}'.
531 # '@{node}' is under dirnode, and all code under the dir of '@{node}'.
532 attr_create catalog
::itemshlibnode
::NODEDIR
='@{node}'
533 attr_create catalog
::itemshlibnode
::NFTYPE
='
535 testdir:shtest/stdout/timecost;
536 mddocdir/designdocdir:md'
544 #########################
545 # it's the node under current dir. and NODEDIR='@{node}'.
546 # '@{node}' is under dirnode, and all code under the dir of '@{node}'.
547 attr_create catalog
::itemshlibnode
::NODEDIR
='@{node}'
548 attr_create catalog
::itemshlibnode
::NFTYPE
='
550 testdir:shtest/stdout/timecost;
551 mddocdir/designdocdir:md'
555 #########################
556 # it's the node under current dir. and NODEDIR='@{node}'.
557 # '@{node}' is under dirnode, and all code under the dir of '@{node}'.
558 attr_create catalog
::itemcnode
::NODEDIR
='@{node}'
559 attr_create catalog
::itemcnode
::NFTYPE
='
560 srcdir:c/h/cunittest/mdl;
561 testdir:shtest/stdout/timecost;
562 mddocdir/designdocdir:md'
565 #########################
566 # it's the node under current dir. and NODEDIR='@{node}'.
567 # '@{node}' is under dirnode, and all code under the dir of '@{node}'.
568 attr_create catalog
::itemcppnode
::NODEDIR
='@{node}'
569 attr_create catalog
::itemcppnode
::NFTYPE
='
570 srcdir:cpp/h/cppunittest;
571 testdir:shtest/stdout/timecost;
572 mddocdir/designdocdir:md'
575 #########################
576 # it's the node under current dir. and NODEDIR='@{node}'.
577 # '@{node}' is under dirnode, and all code under the dir of '@{node}'.
578 attr_create catalog
::itemmdlnode
::NODEDIR
='@{node}'
579 attr_create catalog
::itemmdlnode
::NFTYPE
='
580 srcdir:c/h/cunittest/mdl;
581 testdir:shtest/stdout/timecost;
582 mddocdir/designdocdir:md'
585 #########################
586 # it's the node under current dir. and NODEDIR='@{node}'.
587 # '@{node}' is under dirnode, and all code under the dir of '@{node}'.
588 attr_create catalog
::itemvalanode
::NODEDIR
='@{node}'
589 attr_create catalog
::itemvalanode
::NFTYPE
='
590 srcdir:c/h/cunittest/vala;
591 testdir:shtest/stdout/timecost;
592 mddocdir/designdocdir:md'