]> rtime.felk.cvut.cz Git - arc.git/blob - scripts/req_extract.r
regenerated configs for all mpc560x targets so they build again. Although bug for...
[arc.git] / scripts / req_extract.r
1 comment {\r
2   Rebol 3.0 Alpha version ONLY\r
3   May be run with from msys:\r
4    $ powershell -Command "r3-a96.exe scripts\extract_req.r > result.txt"\r
5      OR\r
6    $ cmd.exe /S /K "r3-a96.exe scripts\extract_req.r > result.txt && exit"\r
7 }\r
8 \r
9 REBOL [\r
10     Title:  "Requirements extractor"\r
11     Date:   6-Jan-2010\r
12     File:   %extract_req.r\r
13     Author: "mahi"\r
14     Version: 0.0.1\r
15 ]\r
16 \r
17 usage: does [\r
18 ; do/args %req_extract.r ["diff" "OS" "req" "Class=1,Component=Code"]\r
19   print "Usage: do/args %req_extract.r [ ^"<cmd>^" ^"[....]^" ]"\r
20   print "       req.sh diff OS req ^"Class=1^""\r
21   print "  <cmd> = (diff|ls) "\r
22   print "    diff <module> (code|test) <filter>"\r
23   print "    ls   <module> <filter>"\r
24   quit\r
25 ]\r
26 \r
27 ;=======================================================\r
28 ; See http://www.rebol.com/r3/docs/functions/secure.html\r
29 secure [\r
30     net quit\r
31     file allow  ; Allow Read/write to files.\r
32 ]\r
33 \r
34 ;=======================================================\r
35 right: func [s [string!] n [integer!]] [\r
36   copy/part at s (length? s) - n + 1 n\r
37 ]\r
38 \r
39 ;=======================================================\r
40 \r
41 find-files: func [dir list /local files] [\r
42     files: sort load dir\r
43 \r
44     ; Get files that match the above types:\r
45     foreach file files [\r
46         if find file-types suffix? file [\r
47             append list dir/:file\r
48         ]\r
49     ]\r
50     ; Search sub-directories:\r
51     foreach file files [\r
52         if find file "/" [find-files dir/:file list]\r
53     ]\r
54 ]\r
55 \r
56 ;=======================================================\r
57 \r
58 req-xml: func[\r
59   filename [file!]\r
60   filter [string!]\r
61   "Filters separated with a ,"\r
62 ][\r
63   ; print filename\r
64   ; Get a good rebol3 xml parser..\r
65   if not any-function? :load-xml [\r
66         do http://www.ross-gill.com/r/r3xml.r\r
67   ]\r
68 \r
69   filter-split: parse/all filter ","\r
70   doc: load-xml/dom filename\r
71   body: doc/get-by-tag <Req>\r
72   list: []\r
73   foreach j filter-split [print j]\r
74 \r
75   print "go........"\r
76   ; Go over all req tags.\r
77   foreach iter body [\r
78     ; Look for any matching filter\r
79     fail: false\r
80     foreach i filter-split [\r
81       val: parse i "="\r
82       if/else find (iter/get to-tag val/1) val/2 [\r
83       ] [\r
84         fail: true\r
85         break\r
86       ]\r
87     ]\r
88     if fail == false [ append list iter/get #id ]\r
89   ]\r
90   return list\r
91 ]\r
92 \r
93 comment {\r
94 req-xml: func[\r
95   filename [file!]\r
96   filter [string!]\r
97   "Filters separated with a ,"\r
98 ][\r
99   ; print filename\r
100   ; Get a good rebol3 xml parser..\r
101   if not any-function? :load-xml [\r
102         do http://www.ross-gill.com/r/r3xml.r\r
103   ]\r
104 \r
105   filter-split: parse/all filter "="\r
106   doc: load-xml/dom filename\r
107   body: doc/get-by-tag <Req>\r
108   list: []\r
109   print ["Filter:" filter-split/1 filter-split/2]\r
110   foreach iter body [\r
111     foreach filter-entry filter-split [\r
112       if/else find (iter/get to-tag filter-split/1) filter-split/2 [\r
113         append list iter/get #id\r
114       ] [ break ]\r
115     ]\r
116   ]\r
117   return list\r
118 ]\r
119 }\r
120 \r
121 ;=======================================================\r
122 req-source: func[\r
123   dir-list [block!]\r
124 ][\r
125   file-types: [%.c %.h]\r
126   file-list: []\r
127   req-list: []\r
128   text: string!\r
129 ;  text2: string!\r
130 \r
131   ; Grab the file-list...\r
132   foreach dir dir-list [\r
133     print dir\r
134     foreach file load dir [\r
135       if find file-types suffix? file [append file-list dir/:file]\r
136     ]\r
137   ]\r
138 \r
139   rule:[\r
140     any [\r
141       thru "@req " copy text to [ newline | "*/"]\r
142       (append req-list first parse text none)\r
143 ;      (text2: first parse text none)\r
144 ;      (append req-list text2)\r
145 ;      (probe text2)\r
146     ]\r
147   ]\r
148 \r
149   clear req-list\r
150   foreach file file-list [\r
151     ;clear text\r
152     text: ""\r
153     content: read/string file\r
154 ;    probe file\r
155     parse content rule\r
156 ;    print text\r
157     ;append req-list first parse text none\r
158     ;parse content [ any [thru "@req" begin: to [ newline | "*/" ] fin: (append req-list trim copy/part at begin 0 ((index? fin) - (index? begin)) )]]\r
159   ]\r
160   return req-list\r
161 ]\r
162 \r
163 ;=======================================================\r
164 \r
165 ; Simplest to keep all requirement files in one directory:\r
166 ; e.g req-os.xml, req-can.xml\r
167 \r
168 ; Rebol strange argument passing...\r
169 if/else (found? system/options/args) [\r
170   ; Used from real command line\r
171   args: system/options/args\r
172 ] [\r
173   if/else(found? system/script/args) [\r
174     ; Used when running from within rebol, e.g. do/args...\r
175     args: system/script/args\r
176   ] [ usage ]\r
177 ]\r
178 \r
179 foreach a args [print ["arg:" a]]\r
180 cmd: pick args 1\r
181 \r
182 print length? args\r
183 ; Check args\r
184 switch cmd [\r
185   "diff" [ if (length? args) != 4 [usage]]\r
186   "ls"   [ if (length? args) != 4 [usage]]\r
187 ]\r
188 \r
189 path-info: [\r
190         ["OS"  %req-os.xml [%../system/kernel/  %../system/kernel/include/ %../include/ ] "Class=1,2,3,4"]\r
191         ["CAN" %req-can.xml [%../arch/ppc/mpc55xx/drivers] ]\r
192 ]\r
193 \r
194 print length? path-info\r
195 ;foreach a path-info/1 [print a]\r
196 ;print length? path-info/1\r
197 ;print path-info/1/1\r
198 ;print dir? path-info/1/3\r
199 ;print path-info/1/2\r
200 ;print exists? path-info/1/2\r
201 \r
202 list-xml: req-xml path-info/1/2 pick args 4 ;"Class=1"\r
203 list-source: req-source path-info/1/3\r
204 \r
205 print length? list-xml\r
206 print length? list-source\r
207 \r
208 print ["Requirements for module:" (pick args 2) "with filter:" pick args 4 ]\r
209 probe sort list-xml\r
210 print newline\r
211 \r
212 print "Requirements for from source"\r
213 probe sort list-source\r
214 print newline\r
215 \r
216 print "Requirements diff"\r
217 probe exclude list-xml list-source\r
218 print newline\r
219 \r
220 comment {\r
221   none\r
222 }\r
223 \r
224 \r
225 \r
226 \r
227 \r
228 \r