Mercurial > hg > octave-kai > gnulib-hg
comparison MODULES.html.sh @ 7656:50308a13df4d
* MODULES.html.sh (seen_modules, seen_files): New variables.
(func_module): Rewrite to use a few less gnulib-tool and sed
invocations. Avoid a couple of quadratic algorithms for ...
(missed_modules, missed_files): ... these, with ...
(func_append, func_tmpdir): ... these new functions, from
gnulib-tool. Analogously, install traps for cleanup.
author | Ralf Wildenhues <Ralf.Wildenhues@gmx.de> |
---|---|
date | Tue, 14 Nov 2006 22:01:14 +0000 |
parents | e856370de785 |
children | 1757949a7c72 |
comparison
equal
deleted
inserted
replaced
7655:3360eb5824e9 | 7656:50308a13df4d |
---|---|
1241 y1 | 1241 y1 |
1242 yn | 1242 yn |
1243 ' | sed -e "$sed_alt1" | tr -d "$trnl" | sed -e "$sed_alt2" -e "$sed_alt3"` | 1243 ' | sed -e "$sed_alt1" | tr -d "$trnl" | sed -e "$sed_alt2" -e "$sed_alt3"` |
1244 | 1244 |
1245 indent="" | 1245 indent="" |
1246 missed_modules=`gnulib-tool --list` | 1246 seen_modules= |
1247 missed_files=`ls -d lib/* m4/* | sed -e /CVS/d -e /README/d -e /ChangeLog/d -e /Makefile/d -e /TODO/d -e '/~$/d'` | 1247 seen_files= |
1248 | |
1249 # func_exit STATUS | |
1250 # exit with status | |
1251 func_exit () | |
1252 { | |
1253 (exit $1); exit $1 | |
1254 } | |
1255 | |
1256 # func_tmpdir | |
1257 # creates a temporary directory. | |
1258 # Sets variable | |
1259 # - tmp pathname of freshly created temporary directory | |
1260 func_tmpdir () | |
1261 { | |
1262 # Use the environment variable TMPDIR, falling back to /tmp. This allows | |
1263 # users to specify a different temporary directory, for example, if their | |
1264 # /tmp is filled up or too small. | |
1265 : ${TMPDIR=/tmp} | |
1266 { | |
1267 # Use the mktemp program if available. If not available, hide the error | |
1268 # message. | |
1269 tmp=`(umask 077 && mktemp -d "$TMPDIR/MDXXXXXX") 2>/dev/null` && | |
1270 test -n "$tmp" && test -d "$tmp" | |
1271 } || | |
1272 { | |
1273 # Use a simple mkdir command. It is guaranteed to fail if the directory | |
1274 # already exists. $RANDOM is bash specific and expands to empty in shells | |
1275 # other than bash, ksh and zsh. Its use does not increase security; | |
1276 # rather, it minimizes the probability of failure in a very cluttered /tmp | |
1277 # directory. | |
1278 tmp=$TMPDIR/MD$$-$RANDOM | |
1279 (umask 077 && mkdir "$tmp") | |
1280 } || | |
1281 { | |
1282 echo "$0: cannot create a temporary directory in $TMPDIR" >&2 | |
1283 func_exit 1 | |
1284 } | |
1285 } | |
1286 | |
1287 # func_append var value | |
1288 # appends the given value to the shell variable var. | |
1289 if ( foo=bar; foo+=baz && test "$foo" = barbaz ) >/dev/null 2>&1; then | |
1290 # Use bash's += operator. It reduces complexity of appending repeatedly to | |
1291 # a single variable from O(n^2) to O(n). | |
1292 func_append () | |
1293 { | |
1294 eval "$1+=\"\$2\"" | |
1295 } | |
1296 else | |
1297 func_append () | |
1298 { | |
1299 eval "$1=\"\$$1\$2\"" | |
1300 } | |
1301 fi | |
1248 | 1302 |
1249 # func_echo line | 1303 # func_echo line |
1250 # outputs line with indentation. | 1304 # outputs line with indentation. |
1251 func_echo () | 1305 func_echo () |
1252 { | 1306 { |
1337 element='<A HREF="#module='$1'">'$1'</A>' | 1391 element='<A HREF="#module='$1'">'$1'</A>' |
1338 func_echo "<TD ALIGN=LEFT VALIGN=TOP WIDTH=\"20%\">$element" | 1392 func_echo "<TD ALIGN=LEFT VALIGN=TOP WIDTH=\"20%\">$element" |
1339 | 1393 |
1340 element=`gnulib-tool --extract-description $1 \ | 1394 element=`gnulib-tool --extract-description $1 \ |
1341 | sed -e "$sed_lt" -e "$sed_gt" -e "$sed_remove_trailing_empty_line" \ | 1395 | sed -e "$sed_lt" -e "$sed_gt" -e "$sed_remove_trailing_empty_line" \ |
1342 | sed -e 's,^, ,' \ | 1396 -e 's,^, ,' \ |
1343 | sed -e 's,\([^a-zA-Z]\)'"${posix_functions}"'(),\1<A HREF="'"$POSIX2001_URL"'xsh/\2.html">\2</A>(),g' \ | 1397 -e 's,\([^a-zA-Z]\)'"${posix_functions}"'(),\1<A HREF="'"$POSIX2001_URL"'xsh/\2.html">\2</A>(),g' \ |
1344 | sed -e 's,^ ,,'` | 1398 -e 's,^ ,,'` |
1345 func_echo "<TD ALIGN=LEFT VALIGN=TOP WIDTH=\"80%\">$element" | 1399 func_echo "<TD ALIGN=LEFT VALIGN=TOP WIDTH=\"80%\">$element" |
1346 | 1400 |
1347 func_end TR | 1401 func_end TR |
1348 | 1402 |
1349 else | 1403 else |
1351 func_begin TR | 1405 func_begin TR |
1352 | 1406 |
1353 element='<A NAME="module='$1'"></A><A HREF="modules/'$1'">'$1'</A>' | 1407 element='<A NAME="module='$1'"></A><A HREF="modules/'$1'">'$1'</A>' |
1354 func_echo "<TD ALIGN=LEFT VALIGN=TOP>$element" | 1408 func_echo "<TD ALIGN=LEFT VALIGN=TOP>$element" |
1355 | 1409 |
1356 element=`gnulib-tool --extract-include-directive $1 \ | 1410 includes=`gnulib-tool --extract-include-directive $1` |
1411 files=`gnulib-tool --extract-filelist $1` | |
1412 element=`echo "$includes" \ | |
1357 | sed -e "$sed_lt" -e "$sed_gt" -e "$sed_remove_trailing_empty_line" \ | 1413 | sed -e "$sed_lt" -e "$sed_gt" -e "$sed_remove_trailing_empty_line" \ |
1358 | sed -e 's,^#include "\(.*\)"$,#include "<A HREF="lib/\1">\1</A>",' \ | 1414 -e 's,^#include "\(.*\)"$,#include "<A HREF="lib/\1">\1</A>",' \ |
1359 -e 's,^#include <'"${posix_headers}"'\.h>$,#include \<<A HREF="'"$POSIX2001_URL"'xbd/\1.h.html">\1.h</A>\>,' \ | 1415 -e 's,^#include <'"${posix_headers}"'\.h>$,#include \<<A HREF="'"$POSIX2001_URL"'xbd/\1.h.html">\1.h</A>\>,' \ |
1360 | sed -e 's/$/<BR>/' | tr -d "$trnl" | sed -e 's/<BR>$//'` | 1416 -e 's/$/<BR>/' | tr -d "$trnl" | sed -e 's/<BR>$//'` |
1361 test -n "$element" || element='---' | 1417 test -n "$element" || element='---' |
1362 func_echo "<TD ALIGN=LEFT VALIGN=TOP>$element" | 1418 func_echo "<TD ALIGN=LEFT VALIGN=TOP>$element" |
1363 | 1419 |
1364 sed_choose_unconditional_nonstandard_include='s,^#include "\(.*\)"$,\1,p' | 1420 sed_choose_unconditional_nonstandard_include='s,^#include "\(.*\)"$,\1,p' |
1365 includefile=`gnulib-tool --extract-include-directive $1 \ | 1421 includefile=`echo "$includes" \ |
1366 | sed -n -e "$sed_choose_unconditional_nonstandard_include" \ | 1422 | sed -n -e "$sed_choose_unconditional_nonstandard_include" \ |
1367 | sed -e "$sed_escape_dot" | tr -d "$trnl"` | 1423 | sed -e "$sed_escape_dot" | tr -d "$trnl"` |
1368 sed_choose_lib_files='s,^lib/\(.*\)$,\1,p' | 1424 sed_choose_lib_files='s,^lib/\(.*\)$,\1,p' |
1369 element=`gnulib-tool --extract-filelist $1 \ | 1425 element=`echo "$files" \ |
1370 | sed -e '/^$/d' \ | 1426 | sed -e '/^$/d' \ |
1371 | sed -n -e "$sed_choose_lib_files" \ | 1427 | sed -n -e "$sed_choose_lib_files" \ |
1372 | sed -e '/^'"${includefile}"'$/d' \ | 1428 | sed -e '/^'"${includefile}"'$/d' \ |
1373 | sed -e 's,^\(.*\)$,<A HREF="lib/\1">\1</A>,' \ | 1429 -e 's,^\(.*\)$,<A HREF="lib/\1">\1</A>,' \ |
1374 | sed -e 's/$/<BR>/' | tr -d "$trnl" | sed -e 's/<BR>$//'` | 1430 -e 's/$/<BR>/' | tr -d "$trnl" | sed -e 's/<BR>$//'` |
1375 test -n "$element" || element='---' | 1431 test -n "$element" || element='---' |
1376 func_echo "<TD ALIGN=LEFT VALIGN=TOP>$element" | 1432 func_echo "<TD ALIGN=LEFT VALIGN=TOP>$element" |
1377 | 1433 |
1378 sed_choose_m4_files='s,^m4/\(.*\)$,\1,p' | 1434 sed_choose_m4_files='s,^m4/\(.*\)$,\1,p' |
1379 element=`(gnulib-tool --extract-filelist $1 \ | 1435 element=`(echo "$files" \ |
1380 | sed -e "$sed_remove_trailing_empty_line" \ | 1436 | sed -e "$sed_remove_trailing_empty_line" \ |
1381 | sed -n -e "$sed_choose_m4_files" \ | 1437 | sed -n -e "$sed_choose_m4_files" \ |
1382 | sed -e '/^onceonly/d' \ | 1438 | sed -e '/^onceonly/d' \ |
1383 | sed -e 's,^\(.*\)$,<A HREF="m4/\1">\1</A>,'; \ | 1439 -e 's,^\(.*\)$,<A HREF="m4/\1">\1</A>,'; \ |
1384 gnulib-tool --extract-autoconf-snippet $1 \ | 1440 gnulib-tool --extract-autoconf-snippet $1 \ |
1385 | sed -e "$sed_remove_trailing_empty_line") \ | 1441 | sed -e "$sed_remove_trailing_empty_line") \ |
1386 | sed -e 's/$/<BR>/' | tr -d "$trnl" | sed -e 's/<BR>$//'` | 1442 | sed -e 's/$/<BR>/' | tr -d "$trnl" | sed -e 's/<BR>$//'` |
1387 test -n "$element" || element='---' | 1443 test -n "$element" || element='---' |
1388 func_echo "<TD ALIGN=LEFT VALIGN=TOP>$element" | 1444 func_echo "<TD ALIGN=LEFT VALIGN=TOP>$element" |
1389 | 1445 |
1390 element=`gnulib-tool --extract-dependencies $1 \ | 1446 element=`gnulib-tool --extract-dependencies $1 \ |
1391 | sed -e "$sed_remove_trailing_empty_line" \ | 1447 | sed -e "$sed_remove_trailing_empty_line" \ |
1392 | sed -e 's/$/<BR>/' | tr -d "$trnl" | sed -e 's/<BR>$//'` | 1448 -e 's/$/<BR>/' | tr -d "$trnl" | sed -e 's/<BR>$//'` |
1393 test -n "$element" || element='---' | 1449 test -n "$element" || element='---' |
1394 func_echo "<TD ALIGN=LEFT VALIGN=TOP>$element" | 1450 func_echo "<TD ALIGN=LEFT VALIGN=TOP>$element" |
1395 | 1451 |
1396 func_end TR | 1452 func_end TR |
1397 | 1453 |
1398 missed_modules=`echo "$missed_modules" | sed -e '/^'"$1"'$/d'` | 1454 func_append seen_modules " $1" |
1399 | 1455 func_append seen_files " $files" |
1400 files=`gnulib-tool --extract-filelist $1` | |
1401 sed_removal_prefix='s,^,/^,' | |
1402 sed_removal_suffix='s,$,\$/d,' | |
1403 sed_remove_files=`echo '{'; \ | |
1404 for file in $files; do \ | |
1405 echo $file \ | |
1406 | sed -e "$sed_escape_dot" -e "$sed_escape_slash" \ | |
1407 | sed -e "$sed_removal_prefix" -e "$sed_removal_suffix"; \ | |
1408 done; \ | |
1409 echo '}'` | |
1410 missed_files=`echo "$missed_files" | sed -e "$sed_remove_files"` | |
1411 | |
1412 fi | 1456 fi |
1413 } | 1457 } |
1414 | 1458 |
1415 # func_end_table | 1459 # func_end_table |
1416 func_end_table () | 1460 func_end_table () |
2191 func_module host-os | 2235 func_module host-os |
2192 func_module perl | 2236 func_module perl |
2193 func_module uptime | 2237 func_module uptime |
2194 func_end_table | 2238 func_end_table |
2195 } | 2239 } |
2196 | 2240 |
2241 | |
2242 func_tmpdir | |
2243 trap 'exit_status=$? | |
2244 if test "$signal" != 0; then | |
2245 echo "caught signal $signal" >&2 | |
2246 fi | |
2247 rm -rf "$tmp" | |
2248 exit $exit_status' 0 | |
2249 for signal in 1 2 3 13 15; do | |
2250 trap '{ signal='$signal'; func_exit 1; }' $signal | |
2251 done | |
2252 signal=0 | |
2197 | 2253 |
2198 echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">' | 2254 echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">' |
2199 func_begin HTML | 2255 func_begin HTML |
2200 | 2256 |
2201 func_begin HEAD | 2257 func_begin HEAD |
2222 func_all_modules | 2278 func_all_modules |
2223 | 2279 |
2224 in_toc= | 2280 in_toc= |
2225 func_all_modules | 2281 func_all_modules |
2226 | 2282 |
2283 | |
2284 gnulib-tool --list > "$tmp/all-modules" | |
2285 missed_modules=`for module in $seen_modules; do echo $module; done \ | |
2286 | LC_ALL=C sort -u \ | |
2287 | LC_ALL=C join -v 2 - "$tmp/all-modules"` | |
2288 | |
2227 if test -n "$missed_modules"; then | 2289 if test -n "$missed_modules"; then |
2228 | 2290 |
2229 element="Unclassified modules - please update MODULES.html.sh" | 2291 element="Unclassified modules - please update MODULES.html.sh" |
2230 element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` | 2292 element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` |
2231 func_wrap H2 | 2293 func_wrap H2 |
2236 func_module $module | 2298 func_module $module |
2237 done | 2299 done |
2238 func_end_table | 2300 func_end_table |
2239 | 2301 |
2240 fi | 2302 fi |
2303 | |
2304 LC_ALL=C ls -d lib/* m4/* | sed -e /CVS/d -e /README/d -e /ChangeLog/d -e /Makefile/d -e /TODO/d -e '/tags$/d' -e '/TAGS$/d' -e '/~$/d' > "$tmp/all-files" | |
2305 missed_files=`for file in $seen_files; do echo $file; done \ | |
2306 | LC_ALL=C sort -u \ | |
2307 | LC_ALL=C join -v 2 - "$tmp/all-files"` | |
2241 | 2308 |
2242 if test -n "$missed_files"; then | 2309 if test -n "$missed_files"; then |
2243 | 2310 |
2244 element="Lone files - please create new modules containing them" | 2311 element="Lone files - please create new modules containing them" |
2245 element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` | 2312 element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` |
2272 func_echo 'Generated from <CODE>MODULES.html.sh</CODE> on '`LC_ALL=C date +"%e %B %Y"`. | 2339 func_echo 'Generated from <CODE>MODULES.html.sh</CODE> on '`LC_ALL=C date +"%e %B %Y"`. |
2273 | 2340 |
2274 func_end BODY | 2341 func_end BODY |
2275 | 2342 |
2276 func_end HTML | 2343 func_end HTML |
2344 | |
2345 rm -rf "$tmp" | |
2346 # Undo the effect of the previous 'trap' command. | |
2347 trap '' 0 | |
2348 trap 'func_exit $?' 1 2 3 13 15 | |
2349 | |
2350 exit 0 |