update devspec.en_US/1.0.general.md.
[devspec.git] / devspec.en_US / 2.5.=)example-recutils.md
blobd3284c61fb0a15207dd632dfb1c42003a82f3aec
1 \r
2 \r
3 @ dest file list is consisted by:\r
4 # dest executables\r
5 # test executables\r
6 # middle libs\r
7 \r
8 \r
9 # getting DEST_LIST\r
11 $ sudo apt-cache depends recutils\r
12 recutils\r
13   Depends: libc6\r
14   Depends: libmdb2\r
15   Depends: libreadline6\r
16   Depends: librec1\r
17 $ dpkg -L libmdb2\r
18 /.\r
19 /usr\r
20 /usr/share\r
21 /usr/share/doc\r
22 /usr/share/doc/libmdb2\r
23 /usr/share/doc/libmdb2/copyright\r
24 /usr/share/doc/libmdb2/changelog.Debian.gz\r
25 /usr/lib\r
26 /usr/lib/i386-linux-gnu\r
27 /usr/lib/i386-linux-gnu/libmdb.so.2.0.1\r
28 /usr/lib/i386-linux-gnu/libmdb.so.2\r
29 $ dpkg -L librec1\r
30 /.\r
31 /usr\r
32 /usr/lib\r
33 /usr/lib/librec.so.1.0.0\r
34 /usr/share\r
35 /usr/share/doc\r
36 /usr/share/doc/librec1\r
37 /usr/share/doc/librec1/copyright\r
38 /usr/share/doc/librec1/changelog.Debian.gz\r
39 /usr/lib/librec.so.1\r
40 $ dpkg -L recutils\r
41 /.\r
42 /usr\r
43 /usr/lib\r
44 /usr/lib/recutils\r
45 /usr/lib/recutils/bash-builtins\r
46 /usr/lib/recutils/bash-builtins/readrec.so\r
47 /usr/bin\r
48 /usr/bin/recfix\r
49 /usr/bin/recinf\r
50 /usr/bin/csv2rec\r
51 /usr/bin/recset\r
52 /usr/bin/mdb2rec\r
53 /usr/bin/recfmt\r
54 /usr/bin/recsel\r
55 /usr/bin/recins\r
56 /usr/bin/recdel\r
57 /usr/bin/rec2csv\r
58 /usr/share\r
59 /usr/share/doc\r
60 /usr/share/doc/recutils\r
61 /usr/share/doc/recutils/README\r
62 /usr/share/doc/recutils/examples\r
63 /usr/share/doc/recutils/examples/bash-builtins\r
64 /usr/share/doc/recutils/examples/bash-builtins/readrec.sh\r
65 /usr/share/doc/recutils/examples/movie-database\r
66 /usr/share/doc/recutils/examples/movie-database/group_movies_by_audio.sh\r
67 /usr/share/doc/recutils/examples/movie-database/show_movies_german.sh\r
68 /usr/share/doc/recutils/examples/movie-database/README\r
69 /usr/share/doc/recutils/examples/movie-database/group_movies_by_media.sh\r
70 /usr/share/doc/recutils/examples/movie-database/count_movies.sh\r
71 /usr/share/doc/recutils/examples/movie-database/show_movies_unseen_german.sh\r
72 /usr/share/doc/recutils/examples/movie-database/show_movies_unseen.sh\r
73 /usr/share/doc/recutils/examples/movie-database/movies.csv\r
74 /usr/share/doc/recutils/examples/movie-database/show_oldest_and_latest_moviedate.sh\r
75 /usr/share/doc/recutils/examples/movie-database/count_movies_german.sh\r
76 /usr/share/doc/recutils/examples/movie-database/movies.rec\r
77 /usr/share/doc/recutils/examples/movie-database/show_movies_with_more_than_2_discs.sh\r
78 /usr/share/doc/recutils/examples/movie-database/convert_csv_to_rec.sh\r
79 /usr/share/doc/recutils/examples/passwords\r
80 /usr/share/doc/recutils/examples/passwords/show-passwords.sh\r
81 /usr/share/doc/recutils/examples/passwords/passwords.rec\r
82 /usr/share/doc/recutils/examples/passwords/check-encryption.sh\r
83 /usr/share/doc/recutils/examples/passwords/show-encrypted-passwords.sh\r
84 /usr/share/doc/recutils/examples/tool-database\r
85 /usr/share/doc/recutils/examples/tool-database/tools.rec\r
86 /usr/share/doc/recutils/examples/tool-database/README\r
87 /usr/share/doc/recutils/examples/tool-database/to-purchase.sh\r
88 /usr/share/doc/recutils/NEWS.gz\r
89 /usr/share/doc/recutils/README.Debian\r
90 /usr/share/doc/recutils/copyright\r
91 /usr/share/emacs\r
92 /usr/share/emacs/site-lisp\r
93 /usr/share/emacs/site-lisp/rec-mode.el\r
94 /usr/share/emacs/site-lisp/ob-rec.el\r
95 /usr/share/man\r
96 /usr/share/man/man1\r
97 /usr/share/man/man1/recsel.1.gz\r
98 /usr/share/man/man1/mdb2rec.1.gz\r
99 /usr/share/man/man1/recset.1.gz\r
100 /usr/share/man/man1/recinf.1.gz\r
101 /usr/share/man/man1/recdel.1.gz\r
102 /usr/share/man/man1/recfmt.1.gz\r
103 /usr/share/man/man1/csv2rec.1.gz\r
104 /usr/share/man/man1/rec2csv.1.gz\r
105 /usr/share/man/man1/recins.1.gz\r
106 /usr/share/man/man1/recfix.1.gz\r
107 /usr/share/locale\r
108 /usr/share/locale/sr\r
109 /usr/share/locale/sr/LC_MESSAGES\r
110 /usr/share/locale/sr/LC_MESSAGES/recutils.mo\r
111 /usr/share/locale/vi\r
112 /usr/share/locale/vi/LC_MESSAGES\r
113 /usr/share/locale/vi/LC_MESSAGES/recutils.mo\r
114 /usr/share/locale/nl\r
115 /usr/share/locale/nl/LC_MESSAGES\r
116 /usr/share/locale/nl/LC_MESSAGES/recutils.mo\r
117 /usr/share/locale/sv\r
118 /usr/share/locale/sv/LC_MESSAGES\r
119 /usr/share/locale/sv/LC_MESSAGES/recutils.mo\r
120 /usr/share/locale/de\r
121 /usr/share/locale/de/LC_MESSAGES\r
122 /usr/share/locale/de/LC_MESSAGES/recutils.mo\r
123 /usr/share/locale/uk\r
124 /usr/share/locale/uk/LC_MESSAGES\r
125 /usr/share/locale/uk/LC_MESSAGES/recutils.mo\r
126 /usr/share/locale/fr\r
127 /usr/share/locale/fr/LC_MESSAGES\r
128 /usr/share/locale/fr/LC_MESSAGES/recutils.mo\r
129 /usr/share/locale/fi\r
130 /usr/share/locale/fi/LC_MESSAGES\r
131 /usr/share/locale/fi/LC_MESSAGES/recutils.mo\r
132 /usr/share/info\r
133 /usr/share/info/recutils.info.gz\r
134 /usr/share/info/rec-mode.info.gz\r
135 /usr/share/recutils\r
136 /usr/share/recutils/etc\r
137 /usr/share/recutils/etc/FSD.rec\r
138 /usr/share/doc/recutils/changelog.Debian.gz\r
141     this soft-pkg contain two intall-pkg, and the corresponding executables.\r
143 $ dpkg -L libmdb2\r
144 /usr/lib/i386-linux-gnu/libmdb.so.2.0.1\r
145 /usr/lib/i386-linux-gnu/libmdb.so.2\r
146 $ dpkg -L librec1\r
147 /usr/lib/librec.so.1\r
148 /usr/lib/librec.so.1.0.0\r
149 $ dpkg -L recutils\r
150 /usr/lib/recutils/bash-builtins/readrec.so\r
151 /usr/bin/recfix\r
152 /usr/bin/recinf\r
153 /usr/bin/csv2rec\r
154 /usr/bin/recset\r
155 /usr/bin/mdb2rec\r
156 /usr/bin/recfmt\r
157 /usr/bin/recsel\r
158 /usr/bin/recins\r
159 /usr/bin/recdel\r
160 /usr/bin/rec2csv\r
166 PARAM_SRCPKG=recutils\r
168 [arch::]\r
169 PARAM_ARCH_LIST=x86 arm\r
171 build_arch_list(PARAM_ARCH_LIST);\r
174 [srcpkg::recutils]\r
175 PARAM_SRCPKG_LIST=recutils libmdb2\r
177 PARAM_SRCPKG_BUILD_LIST=recutils-x86 libmdb2-x86 recutils-arm libmdb2-arm\r
179 build_srcpkg_list PARAM_SRCPKG_BUILD_LIST x86\r
180 build_srcpkg_list PARAM_SRCPKG_BUILD_LIST arm\r
183 # build srcpkg recutils x86\r
185 PARAM_DEST_BUILD_LIST=""\r
187 [srcpkg::x86::recutils]\r
188 PARAM_ARCH=x86\r
189 PARAM_INSTPKG_LIST=recutils librec1\r
191 [instpkg::x86::recutils]\r
192 PARAM_ARCH_LIST=x86\r
193 PARAM_DEST_LIST="recutils readrec.so recfix recinf csv2rec recset mdb2rec recfmt recsel recins recdel rec2csv"\r
194 ::PARAM_DEST_BUILD_LIST+=" $PARAM_DEST_LIST"\r
196 [instpkg::x86::librec1]\r
197 PARAM_ARCH_LIST=x86\r
198 PARAM_DEST_LIST=librec.so.1.0.0\r
199 ::PARAM_DEST_BUILD_LIST+=" $PARAM_DEST_LIST"\r
201 # build dest in list with specified arch.\r
202 build_dest_list PARAM_DEST_BUILD_LIST x86\r
203 # pkg dest files into install pkg in spedified arch.\r
204 build_instpkg_list ::PARAM_INSTPKG_LIST x86\r
208 # build srcpkg libmdb2 x86\r
210 PARAM_DEST_BUILD_LIST=""\r
212 [srcpkg::x86::libmdb2]\r
213 PARAM_ARCH_LIST=x86\r
214 PARAM_INSTPKG_LIST=libmdb2\r
216 [instpkg::x86::libmdb2]\r
217 PARAM_ARCH_LIST=x86\r
218 PARAM_DEST_LIST="libmdb.so.2.0.1"\r
219 ::PARAM_DEST_BUILD_LIST+=" $PARAM_DEST_LIST"\r
221 # build dest in list with specified arch.\r
222 build_dest_list PARAM_DEST_BUILD_LIST x86\r
223 # pkg dest files into install pkg in spedified arch.\r
224 build_instpkg_list ::PARAM_INSTPKG_LIST x86\r
225 # end of building for x86\r
228 # build srcpkg recutils arm\r
230 PARAM_DEST_BUILD_LIST=""\r
232 [srcpkg::arm::recutils]\r
233 PARAM_ARCH=arm\r
234 PARAM_INSTPKG_LIST=recutils librec1\r
236 [instpkg::arm::recutils]\r
237 PARAM_ARCH_LIST=arm\r
238 PARAM_DEST_LIST="recutils readrec.so recfix recinf csv2rec recset mdb2rec recfmt recsel recins recdel rec2csv"\r
239 ::PARAM_DEST_BUILD_LIST+=" $PARAM_DEST_LIST"\r
241 [instpkg::arm::librec1]\r
242 PARAM_ARCH_LIST=arm\r
243 PARAM_DEST_LIST=librec.so.1.0.0\r
244 ::PARAM_DEST_BUILD_LIST+=" $PARAM_DEST_LIST"\r
246 # build dest in list with specified arch.\r
247 build_dest_list(PARAM_DEST_BUILD_LIST, x86)\r
248 # pkg dest files into install pkg in spedified arch.\r
249 build_instpkg_list(::PARAM_INSTPKG_LIST, x86)\r
253 # build srcpkg libmdb2 arm\r
255 PARAM_DEST_BUILD_LIST=""\r
257 [srcpkg::arm::libmdb2]\r
258 PARAM_ARCH_LIST=arm\r
259 PARAM_INSTPKG_LIST=libmdb2\r
261 [instpkg::arm::libmdb2]\r
262 PARAM_ARCH_LIST=arm\r
263 PARAM_DEST_LIST="libmdb.so.2.0.1"\r
264 PARAM_DEST_BUILD_LIST+=" $PARAM_DEST_LIST"\r
267 PARAM_INSTPKG_LIST=recutils librec1 libmdb.so.2.0.1\r
268 PARAM_DEST_LIST=recutils librec.so.1.0.0 readrec.so recfix recinf csv2rec recset mdb2rec recfmt recsel recins recdel rec2csv libmdb.so.2.0.1\r
270 # build dest in list with specified arch.\r
271 build_dest_list PARAM_DEST_BUILD_LIST x86\r
272 # pkg dest files into install pkg in spedified arch.\r
273 build_instpkg_list ::PARAM_INSTPKG_LIST x86\r
274 # end of building for arm\r
279 # build_all: all => arch => srcpkg => dest\r
280 # qstk: push build func into qstk, and running in task loop.\r
281 #   new task appended in task func, until the task complete.\r
282 \r
283 # build_dest: dest_type => dest_step => task_func\r
285 \r
286 \r
289 # build all: if a srcpkg with multi-srcpkg, it get the build arch_list first, \r
290 #   and get the srcpkg_list by 'build srcpkglist'. and execute 'build curr' to\r
291 #   build the dest in current srcpkg.\r
292 #     'build srcpkglist' invoke 'build subsrcpkglist' and 'build depsrcpkglist' \r
293 #   to display other srcpkg list. and invoke 'build srcpkglist' in dir path of \r
294 #   each sub srcpkg. at last, it get the srcpkg_list to be built for current \r
295 #   srcpkg.\r
296 #     'build curr' get the dest_list in crrent srcpkg, or get the instpkg_list,\r
297 #   and combine the dest_list in them. then do the build work by 'build_dest'.\r
298 \r
299 # build_dest: it's the unit of building operation. it get the dest_type, and \r
300 #   get the dest_step_list, do work one by one. every step is consisted by a\r
301 #   taskunit. it contains input/output/paramter, and the corresponding function\r
302 #   to execute. it like a pipe line, one step produce product for next step,\r
303 #   until the component is produced.\r
304 #     another type of building operation is dependence & trig taskunit. the \r
305 #   dest_type contain a dest_unit. and the dest_unit is in a taskunit lib. all\r
306 #   taskunit fill with the info of dependence & trig & taskfunc. dependence or\r
307 #   trig specify one or more relative taskunit, or the output res generated by\r
308 #   other taskunit. or generate the output res itself, and trig other task unit\r
309 #   automatically.\r
310 #     taskunit can work with those two method. it is setted by dest_step_list,\r
311 #   or dest_taskunit.\r
312 #     the dependence relationship can be draw as a graphic diagram, it will \r
313 #   display the sequence diagram similar with the dest_step_list.\r
314 #     for the legcey feature of tag dependence in makefile, task unit can \r
315 #   express more info then it in makefile.\r
317 # dest and srcpkg:\r
318 #     building work stage is sperated at single srcpkg building. building work \r
319 #   of srcpkg is consisted by many single srcpkg building work. there are no \r
320 #   complex building step and relationship between them, just use a work task\r
321 #   queue. and the work can be scheduled by parell task executing feature on\r
322 #   different cpu, even if on different host machine.\r
323 #     one arch type, one single srcpkg, can be built on one host machine. it \r
324 #   will save build time.\r
325 #     at the same time, a dest building work orgnized by taskunit, can also be\r
326 #   running one different host machine. but the method of building work is \r
327 #   different, it uses cmd agent, instead of taskunit distribution.\r
333 #     'build all' checks srcpkg in depsrcpkglist, if it is existing in develop\r
334 #   environment. if it is not exist in develop environment, download and unzip\r
335 #   them into dir of 'ext-pkgs'.\r
336 # list. those command will be invoked in sub-srcpkg dir path again.\r
337 # external srcpkg_list and sub srcpkg_list. \r
338 #   get srcpkg list by cmd:\r
339 # 'build -d $srcpkg_dir subpkglist'\r
340 # 'build -d $srcpkg_dir deppkglist'\r
341 # 'build -d $srcpkg_dir arch=$PARAM_ARCH all'.\r
342 #   this cmd check srcpkg type in specified dir path, and set cross-platform of\r
343 # srcpkg, then invoke build function to construct the srcpkg in specified dir.\r
346 get_srcpkg_build_srcpkg_list ()\r
348         :\r
351 qstk_create qstk_build_task\r
355 build_qstk_task ()\r
357         local qstk_task=\r
359         while true; do\r
360                 qstk_task="$(qstk_pop qstk_build_task)"\r
361                 [[ -z $qstk_task ]] && break;\r
363                 # execute\r
364                 $qstk_task\r
365         done\r
368 ########################################\r
370 get_this_srcpkg_name ()\r
372         echo "$PARAM_SRCPKG"\r
375 # get sub srcpkg in the srcpkg.\r
376 get_srcpkg_sub_list ()\r
378         :\r
381 # get external dependence srcpkg for srcpkg.\r
382 get_srcpkg_extern_list ()\r
384         :\r
387 get_srcpkg_dest_list ()\r
389         :\r
392 get_srcpkg_inst_list ()\r
394         :\r
397 get_instpkg_dest_list ()\r
399         :\r
402 get_dest_type ()\r
404         :\r
407 get_dest_type_step_list ()\r
409         :\r
413 ########################################\r
415 build_all ()\r
417         build_arch_list "$PARAM_ARCH_LIST"\r
419         # executing task in loop.\r
420         build_qstk_task\r
423 # compile, and generate install pkgs by different arch.\r
424 build_arch_list ()\r
426         local arch=\r
427         local this_pkg="$(get_this_srcpkg_name)"\r
429         for arch in $1; do\r
430                 qstk_push qstk_build_task "build_srcpkg_list \"$(get_srcpkg_list $this_pkg $arch)\" $1"\r
431         done\r
434 # compile dest executables in a srcpkg list, and make install pkgs.\r
435 build_srcpkg_list ()\r
437         local dest_list=\r
438         local instpkg_list=\r
440         instpkg_list="$(get_srcpkg_inst_list $1)"\r
441         \r
442         # normally, dest_list is stored in srcpkg,\r
443         # but sometimes, a srcpkg generate several install pkgs, \r
444         # and contain a dest_list. the dest_list for srcpkg is\r
445         # the combination dest_list of all install pkgs.\r
446         dest_list="$(get_srcpkg_dest_list $1)"\r
447         if [[ -z $dest_list ]]; then\r
448                 for i in $instpkg_list; do\r
449                         dest_list+=" $(get_instpkg_dest_list $i)"\r
450                 done\r
451         fi\r
453         qstk_push qstk_build_task "build_dest_list \"$dest_list\" $2"\r
454         build_instpkg_list "$instpkg_list" $2\r
457 # compile dest executables in dest_list.\r
458 build_dest_list ()\r
460         for i in $1; do\r
461                 qstk_push qstk_build_task "build_dest $i $2"\r
462         done\r
465 build_instpkg_list ()\r
467         for i in $1; do\r
468                 qstk_push qstk_build_task "build_instpkg $i $2"\r
469         done\r
473 # building for one actual executable dest.\r
474 \r
475 build_dest ()\r
477         local dest=$1\r
478         local dest_type=\r
479         local dest_attr=\r
481         local dest_step_list=\r
482         local src_list=\r
483         \r
484         dest_type="$get_dest_type $dest"\r
485         dest_step_list="$get_dest_type_step_list $dest_type"\r
487         for i in $dest_step_list; do\r
488                 build_dest_by_step $i $dest $dest_type\r
489         done\r
492 build_dest_by_step ()\r
494         local step=$1\r
495         local dest=$2\r
496         local dest_type=$3\r
498         local src_list=\r
499         local dest_list=\r
500         local buildtask=\r
502         src_list="$(get_step_src_list $step)"\r
503         dest_list="$(get_step_dest_list $step)"\r
504         buildtask="$(get_step_buildtask_list $step)"\r
506         for srcfile in $src_list; do\r
507                 build_task $buildtask "$srcfile" "$dest_list"\r
508         done\r
511 build_task ()\r
513         local taskfunc=\r
515         taskfunc="$(get_build_task_func $1)"\r
516         $taskfunc "$2" "$3"\r
520 build_instpkg ()\r
522         # build instpkg with specified arch.\r
523         # by using install file list in instpkg setting file.\r
524         :\r
527     get the output executables: ttyrec, ttyplay, ttytime/\r