index : checker | |
Archlinux32 consistency checker | gitolite user |
summaryrefslogtreecommitdiff |
author | Andreas Baumann <mail@andreasbaumann.cc> | 2024-09-14 15:09:51 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2024-09-14 15:09:51 +0200 |
commit | b10e18c0939d693bc833425110e615d6bba7908a (patch) | |
tree | fc6a594f3c807905ca1e7e1167d3e070f0044bc7 | |
parent | e9a7c61175caf1e7fca688fe69443b509335a2af (diff) |
-rwxr-xr-x | bin/check | 4 | ||||
-rw-r--r-- | doc/TODOS | 3 | ||||
-rw-r--r-- | doc/www.linuxjournal.com_article_2393.txt | 527 | ||||
-rwxr-xr-x | scripts/tsv2tablerow | 8 | ||||
-rw-r--r-- | templates/stdlib.m4 | 208 | ||||
-rw-r--r-- | templates/summary.m4 | 30 | ||||
-rw-r--r-- | templates/table.m4 | 658 |
@@ -31,8 +31,8 @@ for duplicate in `find "${state_dir}"/{core,extra}-{any,x86_64} -type f | \ rev | cut -f 1 -d / | rev | sort | uniq -D | uniq`; do for packages in `ls ${state_dir}/{core,extra}-{any,x86_64}/$duplicate 2>/dev/null`; do for instance in `echo $packages | rev | cut -f 1,2 -d / | rev`; do - echo -n "${instance} " >> "${data_dir}/duplicates" - cat "${state_dir}/$instance" >> "${data_dir}/duplicates" + echo -n "${instance}\t" >> "${data_dir}/duplicates" + cat "${state_dir}/$instance" | tr -s ' ' '\t' >> "${data_dir}/duplicates" done done done @@ -7,4 +7,5 @@ but the newest version - check for gitrevision from state to appear in packages for every package - check for all tags if they appear in the packages for every package - +- integrate + https://git.archlinux32.org/devops/tree/generate-bug-report diff --git a/doc/www.linuxjournal.com_article_2393.txt b/doc/www.linuxjournal.com_article_2393.txt new file mode 100644 index 0000000..308821c --- /dev/null +++ b/doc/www.linuxjournal.com_article_2393.txt @@ -0,0 +1,527 @@ + [1]Skip to main content + + [2] + +Linux Journal + + (BUTTON) Toggle navigation + * [3]Topics+ + + [4]Cloud + + [5]Containers + + [6]Desktop + + [7]Kernel + + [8]Mobile + + [9]Networking + + [10]Privacy + + [11]Programming + + [12]Security + + [13]Servers + + [14]SysAdmin + * [15]News + * [16]eBooks + +Search + + Search + _______________ (Search) Search + Enter the terms you wish to search for. + * [17]News + * [18]Popular + * [19]Recent + +Writing HTML with m4 + +[20] + + HOWTOs + + by Bob Hepple + on March 1, 1998 + + It's amazing how easy it is to write simple HTML pages--and the + availability of WYSIWYG (what you see is what you get) HTML editors + like Netscape Gold lulls one into a mood of "don't worry, be happy". + However, managing multiple, inter-related pages of HTML rapidly gets + very difficult. I recently had a slightly complex set of pages to put + together, and I started thinking, "there has to be an easier way." + + I immediately turned to the WWW and looked up all sorts of tools--but + quite honestly I was rather disappointed. Mostly, they were what I + would call "typing aids"--instead of having to remember arcane + incantations like <a href="link"7gt;text</a> text, you are given a + button or a magic keychord like alt-ctrl-j which remembers the syntax + and does all the typing for you. + + Linux to the rescue--since HTML is built as ordinary text files, the + normal Linux text management tools can be used. This includes revision + control tools such as rcs and the text manipulation tools like awk, + Perl, etc. These tools offer significant help in version control and + managing development by multiple users as well as automating the + process of displaying information from a database (the classic grep + |sort |awk pipeline). + + The use of these tools with HTML is documented elsewhere, e.g., Jim + Weirich's article in Linux Journal Issue 36, April 1997, "Using Perl to + Check Web Links". I highly recommend this article as yet another way to + really flex those Linux muscles when writing HTML. + + What I will cover here is work I've done recently using the + pre-processor m4 to maintain HTML. The ideas can very easily be + extended to the more general SGML case. + Using m4 + + I decided to use m4 after looking at various other pre-processors + including cpp, the C front-end, which is perhaps a little too + C-specific to be useful with HTML. m4 is a generic and clean macro + expansion program, and it's available under most Unices including + Linux. + + Instead of editing *.html files, I create *.m4 files with my favourite + text editor. These files look something like the following: +m4_include(stdlib.m4) +_HEADER(`This is my header') +<P>This is some plain text<P> +_HEAD1(`This is a main heading') +<P>This is some more plain text<P> +_TRAILER + + The format is just HTML code, but you can include files and add macros + rather like in C. I use a convention that my new macros are in capitals + and start with an _ character to make them stand out from HTML language + and to avoid name-space collisions. + + The m4 file is then processed as follows to create an .html file using + the command: +m4 -P <file.m4 >file.html + + This process is especially easy if you create a makefile to automate + these steps in the usual way. For example: +.SUFFIXES: .m4 .html +.m4.html: + m4 -P <$*.m4 >$*.html +DEFault: index.html +*.html: stdlib.m4 +all: default PROJECT1 PROJECT2 +PROJECT1: + (cd project2; make all) +PROJECT2: + (cd project2; make all) + + Some of the most useful commands in m4 are listed here with their cpp + equivalents shown in parentheses: + * m4_include: includes a common file into your HTML (#include) + * m4_define: defines an m4 variable (#define) + * m4_ifdef: a conditional (#ifdef) + * m4_changecom: change the m4 comment character (normally #) + * m4_debugmode: control error diagnostics + * m4_traceon/off: turn tracing on and off + * m4_dnl: comment + * m4_incr, m4_decr: simple arithmetic + * m4_eval: more general arithmetic + * m4_esyscmd: execute a Linux command and use the output + * m4_divert(i): This is a little complicated, so skip on first + reading. It is a way of storing text for output at the end of + normal processing. It will come in useful later, when we get to + automatic numbering of headings. It sends output from m4 to a + temporary file number i. At the end of processing, any text which + was diverted is then output, in the order of the file number i. + File number -1 is the bit bucket and can be used to comment out + chunks of comments. File number 0 is the normal output stream. + Thus, for example, you can use m4_divert to divert text to file 1, + and it will only be output at the end. + + Sharing HTML Elements Across Several Pages + + In many "nests" of HTML pages, each page shares elements such as a + button bar containing links to other pages like this: +[Home] [Next] [Prev] [Index] + + This is fairly easy to create in each page. The trouble is that if you + make a change in the "standard" button-bar then you have the tedious + job of finding each occurrence of it in every file and manually making + the changes. With m4 we can more easily do this job by putting the + shared elements into an m4_include statement, just like C. + + Let's also automate the naming of pages by putting the following lines + into an include file called button_bar.m4: +m4_define(`_BUTTON_BAR', + <a href="homepage.html">[Home]</a> + <a href="$1">[Next]</a> + <a href="$2">[Prev]</a> + <a href="indexpage.html">[Index]</a>) + + and then these lines in the document: +m4_include button_bar.m4 +_BUTTON_BAR(`page_after_this.html', + `page_before_this.html') + + The $1 and $2 parameters in the macro definition are replaced by the + strings in the macro call. + Managing HTML elements that often change + + It is troublesome to have items change in multiple HTML pages. For + example, if your e-mail address changes, you need to change all + references to it to the new address. Instead, with m4 you can put a + line like the following in your stdlib.m4 file: +m4_define(`_EMAIL_ADDRESS', `MyName@foo.bar.com') + + and then just put _EMAIL_ADDRESS in your m4 files. + + A more substantial example comes from building strings with multiple + components, any of which may change as the page is developed. If, like + me, you develop on one machine, test out the page and then upload to + another machine with a totally different address, then you could use + the m4_ifdef command in your stdlib.m4 file (just like the #ifdef + command in cpp). For example: +m4_define(`_LOCAL') +... +m4_define(`_HOMEPAGE', + m4_ifdef(`_LOCAL', + `//127.0.0.1/~YourAccount', + `http://ISP.com/~YourAccount')) +m4_define(`_PLUG', `<A HREF="http://www.ssc.com/linux/"> +<IMG SRC="_HOMEPAGE/gif/powered.gif" +ALT=<"[Linux Information]"> </A>') + + Note the careful use of quotes to prevent the variable _LOCAL from + being expanded. _HOMEPAGE takes on different values according to + whether the variable _LOCAL is defined or not. This definition can then + ripple through the entire project as you build the pages. + + In this example, _PLUG is a macro to advertise Linux. When you are + testing your pages, use the local version of _HOMEPAGE. When you are + ready to upload, remove or comment out the _LOCAL definition in this + way: +m4_dnl m4_define(`_LOCAL') + + ... and then re-make. + Creating New Text Styles + + Styles built into HTML include things like <EM> for emphasis and <CITE> + for citations. With m4 you can define your own new styles like this: +m4_define(`_MYQUOTE', + <BLOCKQUOTE><EM>$1</EM></BLOCKQUOTE>) + + If, later, you decide you prefer <STRONG> instead of <EM>, it is a + simple matter to change the definition. Then, every _MYQUOTE paragraph + falls into line with a quick make. + + The classic guides to good HTML writing say things like "It is strongly + recommended that you employ the logical styles such as <EM>...</EM> + rather than the physical styles such as <I>...</I> in your documents." + Curiously, the WYSIWYG editors for HTML generate purely physical + styles. Using the m4 styles may be a good way to keep on using logical + styles. + Typing and Mnemonic Aids + + I don't depend on WYSIWYG editing (having been brought up on troff) but + all the same I'm not averse to using help where it's available. There + is a choice (and maybe it's a fine line) to be made between: +<BLOCKQUOTE><PRE><CODE>Some code you want to display. +</CODE></PRE></BLOCKQUOTE> + + and: +_CODE(Some code you want to display.) + + In this case, you would define _CODE like this: +m4_define(`_CODE', +<BLOCKQUOTE><PRE><CODE>$1</CODE></PRE></BLOCKQUOTE>) + + Which version you prefer is a matter of taste and convenience although + the m4 macro certainly saves some typing. Another example I like to + use, since I can never remember the syntax for links, is: +m4_define(`_LINK', <a href="$1">$2</a>) + + Then, instead of typing: +<a href="URL_TO_SOMEWHERE">Click here to get to SOMEWHERE +</a> + + I type: +_LINK(`URL_TO_SOMEWHERE', `Click here to get to SOMEWHERE') + + Automatic Numbering + + m4 has a simple arithmetic facility with two operators m4_incr and + m4_decr. This facility can be used to create automatic numbering, + perhaps for headings, for example: +m4_define(_CARDINAL,0) +m4_define(_H, `m4_define(`_CARDINAL', + m4_incr(_CARDINAL))<H2>_CARDINAL.0 $1</H2>') +_H(First Heading) +_H(Second Heading) + + This produces: +<H2>1.0 First Heading</H2> +<H2>2.0 Second Heading</H2> + + Automatic Date Stamping + + For simple date stamping of HTML pages, I use the m4_esyscmd command to + maintain an automatic timestamp on every page: +This page was updated on m4_esyscmd(date) + + which produces: +This page was last updated on Fri May 9 10:35:03 HKT 1997 + + Generating Tables of Contents + + Using m4 allows you to define commonly repeated phrases and use them + consistently. I hate repeating myself because I am lazy and because I + make mistakes, so I find this feature an absolute necessity. + + A good example of the power of m4 is in building a table of contents in + a big page. This involves repeating the heading title in the table of + contents and then in the text itself. This is tedious and error-prone, + especially when you change the titles. There are specialised tools for + generating a table of contents from HTML pages, but the simple facility + provided by m4 is irresistible to me. + Simple To Understand TOC + + The following example is a fairly simple-minded table of contents + generator. First, create some useful macros in stdlib.m4: +m4_define(`_LINK_TO_LABEL', + <A HREF="#$1">$1</A>) +m4_define(`_SECTION_HEADER', + <A NAME="$1"><H2>$1</H2></A>) + + Then define all the section headings in a table at the start of the + page body: +m4_define(`_DIFFICULTIES', + `The difficulties of HTML') +m4_define(`_USING_M4', `Using + <EM>m4</EM>') +m4_define(`_SHARING', `Sharing HTML + Elements Across Several Pages') + + Then build the table: +<UL><P> + <LI> _LINK_TO_LABEL(_DIFFICULTIES) + <LI> _LINK_TO_LABEL(_USING_M4) + <LI> _LINK_TO_LABEL(_SHARING) +<UL> + + Finally, write the text: + ... +_SECTION_HEADER(_DIFFICULTIES) +... + + The advantages of this approach are twofold. If you change your + headings you only need to change them in one place, and the table of + contents is then automatically regenerated. Also, the links are + guaranteed to work. + Simple To Use TOC + + The table of contents generator that I normally use is a bit more + complex and requires a bit more study, but it is much easier to use. It + not only builds the table, but it also automatically numbers the + headings on the fly--up to four levels of numbering (e.g., section + 3.2.1.3), although this can be easily extended. It is very simple to + use as follows: + 1. Where you want the table to appear, call Start_TOC. + 2. At every heading use _H1(`Heading for level 1') or _H2(`Heading for + level 2') as appropriate. + 3. After the last line of HTML code (probably </HTML>), call End_TOC. + + The code for these macros is shown in [21]Listing 1. One restriction is + that you should not use diversions (i.e., m4-divert) within your text, + unless you preserve the diversion to file 1 used by this TOC generator. + Simple Tables + + Other than Tables of Contents, many browsers support tabular + information. Here are some funky macros as a short cut to producing + these tables. First, an example (see Figure 1) of their use: +<CENTER> +_Start_Table(BORDER=5) +_Table_Hdr(,Apples, Oranges, Lemons) +_Table_Row(England, 100,250,300) +_Table_Row(France,200,500,100) +_Table_Row(Germany,500,50,90) +_Table_Row(Spain,,23,2444) +_Table_Row(Danmark,,,20) +_End_Table +</CENTER> + + Writing HTML with m4 + + Figure 1. Example Table + m4 Gotchas + + Unfortunately, m4 needs some taming. A little time spent on + familiarisation will pay dividends. Definitive documentation is + available (for example, in the Emacs info documentation system) but, + without being a complete tutorial, here are a few tips based on my + experiences. + Gotcha 1--Quotes + + m4's quotation characters are the grave accent ` which starts the + quote, and the acute accent ' which ends it. It may help to put all + arguments to macros in quotes, for example: +_HEAD1(`This is a heading') + + The main reason for using quotes is to prevent confusion if commas are + contained in an argument to a macro, since m4 uses commas to separate + macro parameters. For example, the line _CODE(foo, bar) would put the + foo in the HTML output but not the bar. Use quotes in the line + _CODE(`foo, bar'), and it works properly. + Gotcha 2--Word Swallowing + + The biggest problem with m4 is that some versions of it swallow key + words that it recognises, such as include, format, divert, file, gnu, + line, regexp, shift, unix, builtin and define. You can protect these + words by putting them in single quotes, for example: +Smart people `include' Linux in their list +of computer essentials. + + The trouble is, this is both inconvenient and easy to forget. + + A safer way to protect keywords (my preference) is to invoke m4 with + the -P or --prefix-builtins option. Then all built-in macro names are + modified so that they all begin with the prefix m4_ and ordinary words + are left as is. For example, using this option, one would write + m4_define instead of define (as shown in the examples in this article). + One hitch is that not all versions of m4 support this option--most + notably some PC versions under MS-DOS. + Gotcha 3--Comments + + Comment lines in m4 begin with the # character--everything from the # + to the end of the line is ignored and output unchanged. If you want to + use # in the HTML page, you must quote it like this: `#'. Another + option (my preference) is to change the m4 comment character to + something exotic with a line like this: +m4_changecom(`[[[[') + + and not have to worry about # symbols in your text. + + If you want to use comments in the m4 file but not have them appear in + the final HTML file, use the macro m4_dnl (dnl = Delete to New Line). + This macro suppresses everything until the next newline character. +m4_define(_NEWMACRO, `foo bar') +m4_dnl This is a comment + + Yet another way to have source code ignored is the m4_divert command. + The main purpose of m4_divert is to save text in a temporary buffer for + inclusion in the file later--for example, in building a table of + contents or index. However, if you divert to "-1", it just goes to + limbo-land. This option is useful for getting rid of the whitespace + generated by the m4_define command. For example: +m4_divert(-1) diversion on +m4_define(this ...) +m4_define(that ...) +m4_divert diversion turned off + + Gotcha 4--Debugging + + Another tip for when things go wrong is to increase the number of error + diagnostics that m4 outputs. The easiest way to do this is to add the + following to your m4 file as debugging commands: +m4_debugmode(e) +m4_traceon +... +buggy lines +... +m4_traceoff + + Conclusion + + It should be noted that HTML 3.0 does have an include statement that + looks like this: +<!--#include file="junk.html" --> + + However, the HTML include has the following limitations: + * The work of including and interpreting the include is done on the + server-side before downloading and adds overhead as the server has + to scan files for include statements. + * Most servers (especially public ISPs) deactivate this feature + because of the large overhead. + * Include is all you get--no macro substitution, no parameters to + macros, no ifdef, etc., as with m4. + + There are several other features of m4 that I have not yet exploited in + my HTML ramblings so far, such as regular expressions. It might be + interesting to create a "standard" stdlib.m4 for general use with nice + macros for general text processing and HTML functions. By all means + download my version of stdlib.m4 as a base for your own hacking. I + would be interested in hearing of useful macros, and if there is enough + interest, maybe a Mini-HOWTO could evolve from this article. + + There are many additional advantages to using Linux to develop HTML + pages, far beyond the simple assistance given by the typical typing + aids and WYSIWYG tools. Certainly, I will go on using m4 until HTML + catches up--I will then do my last make and drop back to using pure + HTML. I hope you enjoy these little tricks and encourage you to + contribute your own. + + Writing HTML with m4 + Bob Hepple has been hacking at Unix since 1981 under a variety of + excuses and has somehow been paid for it at least some of the time. + It's allowed him to pursue another interest--living in warm, exotic + countries including Hong Kong, Australia, Qatar, Saudi Arabia, Lesotho + and (presently) Singapore. His initial aversion to the cold was learned + in the UK. Ambition--to stop working for the credit card company and + tax man and to get a real job. Bob can be reached at + bhepple@pacific.net.sg. + [22]Load Disqus comments + Our discussions are [23]powered by Disqus, which require JavaScript. + Connect With Us + + Linux Journal, representing 25+ years of publication, is the original + magazine of the global Open Source community. + © 2024 Slashdot Media, LLC. All rights reserved. + * [24]PRIVACY POLICY + * [25]TERMS OF SERVICE + * [26]ADVERTISE + +Footer Menu Column 2 + + * [27]Masthead + * [28]Authors + * [29]Contact Us + +Footer Menu Column 3 + + * [30]RSS Feeds + * [31]About Us + + [noscript-448i7exgpyqpr9c144q.gif] + + × + +References + + Visible links: + 1. https://www.linuxjournal.com/article/2393#main-content + 2. https://www.linuxjournal.com/ + 3. https://www.linuxjournal.com/ + 4. https://www.linuxjournal.com/tag/cloud + 5. https://www.linuxjournal.com/tag/containers + 6. https://www.linuxjournal.com/tag/desktop + 7. https://www.linuxjournal.com/tag/kernel + 8. https://www.linuxjournal.com/tag/mobile + 9. https://www.linuxjournal.com/tag/networking + 10. https://www.linuxjournal.com/tag/privacy + 11. https://www.linuxjournal.com/tag/programming + 12. https://www.linuxjournal.com/tag/security + 13. https://www.linuxjournal.com/tag/servers + 14. https://www.linuxjournal.com/tag/sysadmin + 15. https://www.linuxjournal.com/news + 16. https://www.linuxjournal.com/books + 17. https://www.linuxjournal.com/news + 18. https://www.linuxjournal.com/popular + 19. https://www.linuxjournal.com/recent + 20. https://www.linuxjournal.com/tag/howtos + 21. https://www.linuxjournal.com/files/linuxjournal.com/linuxjournal/articles/023/2393/2393l1.html + 22. https://www.linuxjournal.com/article/2393#disqus_thread + 23. https://disqus.com/?ref_noscript + 24. https://slashdotmedia.com/privacy-statement/ + 25. https://slashdotmedia.com/terms-of-use/ + 26. https://www.linuxjournal.com/sponsors + 27. https://www.linuxjournal.com/content/masthead + 28. https://www.linuxjournal.com/author + 29. https://www.linuxjournal.com/form/contact + 30. https://www.linuxjournal.com/rss_feeds + 31. https://www.linuxjournal.com/aboutus + + Hidden links: + 33. https://youtube.com/linuxjournalonline + 34. https://www.facebook.com/linuxjournal/ + 35. https://twitter.com/linuxjournal diff --git a/scripts/tsv2tablerow b/scripts/tsv2tablerow new file mode 100755 index 0000000..d8b378d --- /dev/null +++ b/scripts/tsv2tablerow @@ -0,0 +1,8 @@ +#!/bin/oksh + +IFS="\n" +while read line; do +echo -n "_TABLE_ROW(" + echo -n "$line" | tr -s "\\t" "," + echo ")" +done < "$1" diff --git a/templates/stdlib.m4 b/templates/stdlib.m4 new file mode 100644 index 0000000..b320774 --- /dev/null +++ b/templates/stdlib.m4 @@ -0,0 +1,208 @@ +m4_divert(-1) + +m4_define(`_Copyleft', +`Copyright (C) 1997 Bob Hepple + +This program is free software; you can redistribute it +and/or modify it under the terms of the GNU General Public +License as published by the Free Software Foundation; either +version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be +useful, but WITHOUT ANY WARRANTY; without even the implied +warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU General Public License for more +details. + +You should have received a copy of the GNU General Public +License along with this program; if not, write to the Free +Software Foundation, Inc., 675 Mass Ave, Cambridge, MA +02139, USA.') + +m4_changecom(`[[[[') + +m4_dnl define(`_LOCAL',1) + +m4_ifdef(`_LOCAL', + `m4_define(`_HOMEPAGE',`//127.0.0.1/~bhepple')', + `m4_define(`_HOMEPAGE',`//www.bit.net.au/~bhepple')') + +m4_ifdef(`_LOCAL', + `m4_define(`_SECONDPAGE',`//127.0.0.1/~bhepple')', + `m4_define(`_SECONDPAGE',`//www.bit.net.au/~bhepple')') + +m4_define(`_EMAIL_ADDRESS',bhepple@bit.net.au) + +m4_define(`_MAILTO',<A HREF="mailto:$1">$2</A>) + +m4_define(`_EMAILME',_MAILTO(_EMAIL_ADDRESS,$1)) + +m4_define(`_CODEQUOTE',<BLOCKQUOTE><PRE><CODE>$1</CODE></PRE></BLOCKQUOTE>) + +m4_dnl Logical markup: + +m4_define(`_EM',<EM>$1</EM>) +m4_define(`_STRONG',<STRONG>$1</STRONG>) +m4_define(`_CITE',<CITE>$1</CITE>) +m4_define(`_PRE',<BLOCKQUOTE><PRE>$1</PRE></BLOCKQUOTE>) +m4_define(`_CODE',<CODE>$1</CODE>) + +m4_dnl Physical markup: + +m4_define(`_BOLD',<B>$1</B>) +m4_define(`_ITALICS',<I>$1</I>) +m4_define(`_STRIKE',<S>$1</S>) +m4_define(`_SUBSCRIPT',<SUB>$1</SUB>) +m4_define(`_SUPERSCRIPT',<SUP>$1</SUP>) +m4_define(`_COURIER',<TT>$1</TT>) +m4_define(`_UNDERLINE',<U>$1</U>) +m4_define(`_SMALL',<SMALL>$1</SMALL>) +m4_define(`_BIG',<BIG>$1</BIG>) + +m4_define(`_CENTER',<CENTER>$1</CENTER>) + +m4_define(`_LIMAGE', <IMG SRC="$1" ALT="[$1]" WIDTH=$2 HEIGHT=$3>) + +m4_define(`_RIMAGE', <IMG SRC="$1" ALT="[$1]" WIDTH=$2 HEIGHT=$3 ALIGN="right">) + +m4_define(`_IMAGE', <P><CENTER><IMG SRC="$1" ALT="[$1]" WIDTH=$2 HEIGHT=$3></CENTER><P>) + +m4_define(`_IMAGE2',<P><CENTER> +<IMG SRC="$1" ALT="[$1]" ALIGN=TOP WIDTH=$2 HEIGHT=$3> +<IMG SRC="$4" ALT="[$4]" ALIGN=TOP WIDTH=$5 HEIGHT=$6> +</CENTER><P>) + +m4_define(`_FTP',<A HREF="http:$1">$2</A>) + +m4_define(`_HEAD1', <H2>$1</H2>) + +m4_define(`_HEAD2', <H3>$1</H3>) + +m4_define(`_LINK', <a href="$1">$2</a>) + +m4_define(`_SELFLINK', _LINK($1,$1)) + +m4_define(`_LOCALLINK',<A HREF="#$1">$2</A>) + +m4_define(`_LABEL',<A NAME="$1"><H2>$1</H2></A>) + +m4_define(`_LINK_TO_LABEL', _LOCALLINK($1,$1)) + +m4_define(`_PLUG', + _LINK(http://www.ssc.com/linux/, + _IMAGE(_HOMEPAGE/powered.gif,196,49))<BR> +`If you are wondering, Linux is a free, non-commercial +operating system for computers. It happens to be a hobby of +mine and might well interest other hackers. Click on the logo +to learn more...') + +m4_define(`_HEADER', +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD> + <TITLE>$1</TITLE> + <META NAME="Author" CONTENT="Bob Hepple"> +</HEAD> +<BODY BGCOLOR="#FFFFFE" BACKGROUND="http:_HOMEPAGE/bg.gif" $2> +<CENTER><A NAME="Contents"><H1>$1</H1></A></CENTER><HR>) + +m4_define(_COUNTER,) + +m4_dnl define(`_COUNTER',<img SRC="/cgi-bin/Count.cgi?dd=T|ft=6|frgb=648bd8|md=5|pad=Y|df=bhepple$1.dat" align=absmiddle> $2) + +m4_define(`_CREDITS',`For corrections/additions/suggestions for this page, please send email to: _EMAILME(Bob Hepple) <P> Copyright `©' 1997 Bob Hepple. All rights reserved.') + +m4_dnl ---------------------------------------------- +m4_dnl TABLE OF CONTENTS + +m4_define(`_Start_TOC',`<UL><P>m4_divert(-1) + m4_define(`_H1_num',0) + m4_define(`_H2_num',0) + m4_define(`_H3_num',0) + m4_define(`_H4_num',0) + m4_divert(1)') + +m4_define(`_H1', `m4_divert(-1) + m4_define(`_H1_num',m4_incr(_H1_num)) + m4_define(`_H2_num',0) + m4_define(`_H3_num',0) + m4_define(`_H4_num',0) + m4_define(`_TOC_label',`_H1_num. $1') + m4_divert(0)<LI><A HREF="#_TOC_label">_TOC_label</A> + m4_divert(1)<A NAME="_TOC_label"><H2>_TOC_label</H2></A>') + +m4_define(`_H2', `m4_divert(-1) + m4_define(`_H2_num',m4_incr(_H2_num)) + m4_define(`_H3_num',0) + m4_define(`_H4_num',0) + m4_define(`_TOC_label',`_H1_num._H2_num $1') + m4_divert(0)<LI><A HREF="#_TOC_label">_TOC_label</A> + m4_divert(1)<A NAME="_TOC_label"><H2>_TOC_label</H2></A>') + +m4_define(`_H3', `m4_divert(-1) + m4_define(`_H3_num',m4_incr(_H3_num)) + m4_define(`_H4_num',0) + m4_define(`_TOC_label',`_H1_num._H2_num._H3_num $1') + m4_divert(0)<LI><A HREF="#_TOC_label">_TOC_label</A> + m4_divert(1)<A NAME="_TOC_label"><H2>_TOC_label</H2></A>') + +m4_define(`_H4', `m4_divert(-1) + m4_define(`_H4_num',m4_incr(_H4_num)) + m4_define(`_TOC_label',`_H1_num._H2_num._H3_num._H4_num $1') + m4_divert(0)<LI><A HREF="#_TOC_label">_TOC_label</A> + m4_divert(1)<A NAME="_TOC_label"><H2>_TOC_label</H2></A>') + +m4_define(`_End_TOC',`m4_divert(0)</UL><P>') + +m4_dnl ---------------------------------------------- +m4_dnl TABLES + +m4_dnl _Start_Table(Columns,TABLE parameters) +m4_dnl defaults are BORDER=1 CELLPADDING="1" CELLSPACING="1" +m4_dnl WIDTH="n" pixels or "n%" of screen width +m4_define(`_Start_Table',`<TABLE $1>') + +m4_define(`_Table_Hdr_Item', `<th>$1</th>m4_ifelse($#,1,,`_Table_Hdr_Item(m4_shift($@))')') + +m4_define(`_Table_Row_Item', `<td>$1</td>m4_ifelse($#,1,,`_Table_Row_Item(m4_shift($@))')') + +m4_define(`_Table_Hdr',`<tr>_Table_Hdr_Item($@)</tr>') +m4_define(`_Table_Row',`<tr>_Table_Row_Item($@)</tr>') + +m4_define(`_End_Table',</TABLE>) + +m4_dnl -- local adations, we only use the ones below, the ones above are for +m4_dnl -- reference to the original stdlib.m4 + +m4_define(`_LINK_TO_LABEL',` + <a href="#$1">$1</a> +') +m4_define(`_SECTION_HEADER',` + <a name="$2"><$1>$2</$1></a> +') + +m4_define(`_TABLE_START',` +<div class="box"> +<table class="results"> +') + +m4_define(`_Table_Hdr_Item', `<th>$1</th>m4_ifelse($#,1,,`_Table_Hdr_Item(m4_shift($@))')') + +m4_define(`_Table_Row_Item', `<td>$1</td>m4_ifelse($#,1,,`_Table_Row_Item(m4_shift($@))')') + +m4_define(_TABLE_ROW_CNT,0) +m4_define(`_TABLE_HEADER',`<thead><tr>_Table_Hdr_Item($@)</tr></thead>') +m4_define(`_TABLE_ROW',` +<tbody> + m4_define(`_TABLE_ROW_CNT',m4_incr(_TABLE_ROW_CNT)) + m4_ifelse(m4_eval(_TABLE_ROW_CNT % 2),0,`<tr class="even">',`<tr class="odd">') + _Table_Row_Item($@) + </tr> +</tbody> +') + +m4_define(`_TABLE_END',`</table></div>') +<table class="results"> + +m4_divert diff --git a/templates/summary.m4 b/templates/summary.m4 index 23c3b1c..8eb2845 100644 --- a/templates/summary.m4 +++ b/templates/summary.m4 @@ -1,17 +1,31 @@ +m4_include(stdlib.m4) m4_include(header.m4) m4_include(footer.m4) _HEADER(`Archlinux32 Consistency Checker',`anb-stats') -<h2>Statistics</h2> +m4_define(`_STATISTICS',`Statistics') +m4_define(`_DUPLICATES_STATE_REPO',`Duplicate States in State Repo') + +<h1>Table of Contents</h1> +<ul> + <li>_LINK_TO_LABEL(_STATISTICS)</li> + <li>_LINK_TO_LABEL(_DUPLICATES_STATE_REPO)</li> +</ul> + +_SECTION_HEADER(h2,_STATISTICS) Generated on m4_esyscmd(date) -<pre> -m4_esyscmd(cat ../data/stats) -</pre> -<h2>Duplicate States in State Repo</h2> -<pre> -m4_esyscmd(cat ../data/duplicates) -</pre> + +_TABLE_START() +_TABLE_HEADER(what,packages) +m4_esyscmd(`../scripts/tsv2tablerow ../data/stats') +_TABLE_END() + +_SECTION_HEADER(h2,_DUPLICATES_STATE_REPO) +_TABLE_START() +_TABLE_HEADER(repository,package,version,tag,git) +m4_esyscmd(`../scripts/tsv2tablerow ../data/duplicates') +_TABLE_END() _FOOTER() diff --git a/templates/table.m4 b/templates/table.m4 deleted file mode 100644 index 4913ad7..0000000 --- a/templates/table.m4 +++ /dev/null @@ -1,658 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8" /> - <title>Arch Linux 32 - List of Build Slaves</title> - <link rel="stylesheet" type="text/css" href="/static/archweb.css" media="screen, projection" /> - <link rel="icon" type="image/x-icon" href="/static/favicon.ico" /> - <link rel="shortcut icon" type="image/x-icon" href="/static/favicon.ico" /> - </head> - <body class=""> - <div id="archnavbar" class="anb-packages"> - <div id="archnavbarlogo"> - <h1><a href="/" title="Return to the main page">Arch Linux</a></h1> - </div> - <div id="archnavbarmenu"> - <ul id="archnavbarlist"> - <li id="anb-home"><a href="https://www.archlinux32.org/">Home</a></li> - <li id="anb-packages"><a href="https://www.archlinux32.org/packages">Packages</a></li> - <li id="anb-forums"><a href="https://bbs.archlinux32.org/">Forums</a></li> - <li id="anb-bugs"><a href="https://bugs.archlinux32.org/" title="Report and track bugs">Bugs</a></li> - <li id="anb-mailing-list"><a href="https://lists.archlinux.org/archives/list/arch-ports@lists.archlinux.org/latest">Mailing List</a></li> - <li id="anb-download"><a href="https://www.archlinux32.org/download/" title="Get Arch Linux">Download</a></li> - <li id="anb-arch-linux-official"><a href="https://www.archlinux.org/">Arch Linux Official</a></li> - </ul> - </div> - </div> - <div id="content"> - <div id="buildslaveslist-results" class="box"> - <table class="results"> - <thead> - <tr> - <th> - <a href="?showall=&sort=name" title="Sort build assignments by name"> - name - </a> - </th> - <th> - <a href="?showall=&sort=operator" title="Sort build assignments by operator"> - operator - </a> - </th> - <th> - <a href="?showall=&sort=currently_building" title="Sort build assignments by pkgbase of currently building package"> - currently building - </a> - </th> - <th> - <a href="?showall=&sort=last_connection" title="Sort build assignments by time of last connection"> - last connection - </a> - </th> - <th> - <a href="?showall=&sort=building_since" title="Sort build assignments by start of build"> - building since - </a> - </th> - <th> - <a href="?showall=&sort=trials" title="Sort build assignments by number of trials"> - trials - </a> - </th> - <th> - <a href="?showall=&sort=logged_lines" title="Sort build assignments by number of logged lines so far"> - logged lines - </a> - </th> - <th> - <a href="?showall=&sort=last_action" title="Sort build assignments by last action"> - last action - </a> - </th> - </tr> - </thead> - <tbody> - <tr class="odd"> - <td> - <a href="/buildmaster/log.php?show=ssh&slave=build-tasossah-1">build-tasossah-1</a> - </td> - <td> - KitsuWhooa - </td> - <td> - pentium4/ot-urchin - </td> - <td> - 2024-09-10 19:11:29 - </td> - <td> - 2024-09-10 19:09:18 - </td> - <td> - 2 - </td> - <td> - 601 - </td> - <td> - checking-source - </td> - </tr> - <tr class="even"> - <td> - <a href="/buildmaster/log.php?show=ssh&slave=euronuc">euronuc</a> - </td> - <td> - abaumann - </td> - <td> - i686/guile2.2 - </td> - <td> - 2024-09-10 19:11:26 - </td> - <td> - 2024-09-09 23:12:01 - </td> - <td> - 3 - </td> - <td> - 12036 - </td> - <td> - building - </td> - </tr> - <tr class="odd"> - <td> - <a href="/buildmaster/log.php?show=ssh&slave=build-tasossah-2">build-tasossah-2</a> - </td> - <td> - KitsuWhooa - </td> - <td> - i686/sniffnet - </td> - <td> - 2024-09-10 19:11:07 - </td> - <td> - 2024-09-10 15:24:15 - </td> - <td> - 5 - </td> - <td> - 6954 - </td> - <td> - building - </td> - </tr> - <tr class="even"> - <td> - <a href="/buildmaster/log.php?show=ssh&slave=build-tasossah-fx">build-tasossah-fx</a> - </td> - <td> - KitsuWhooa - </td> - <td> - pentium4/vlc - </td> - <td> - 2024-09-10 19:11:01 - </td> - <td> - 2024-09-09 08:13:36 - </td> - <td> - 1 - </td> - <td> - 1479 - </td> - <td> - building - </td> - </tr> - <tr class="odd"> - <td> - <a href="/buildmaster/log.php?show=ssh&slave=euronuc-i486">euronuc-i486</a> - </td> - <td> - abaumann - </td> - <td> - i486/rocm-llvm - </td> - <td> - 2024-09-10 19:11:00 - </td> - <td> - 2024-09-09 21:48:35 - </td> - <td> - 4 - </td> - <td> - 42243 - </td> - <td> - building - </td> - </tr> - <tr class="even"> - <td> - <a href="/buildmaster/log.php?show=ssh&slave=build-tasossah-3">build-tasossah-3</a> - </td> - <td> - KitsuWhooa - </td> - <td> - i686/ot-urchin - </td> - <td> - 2024-09-10 19:10:47 - </td> - <td> - 2024-09-10 19:01:21 - </td> - <td> - 5 - </td> - <td> - 3056 - </td> - <td> - building - </td> - </tr> - <tr class="odd"> - <td> - <a href="/buildmaster/log.php?show=ssh&slave=eurobuild6-6">eurobuild6-6</a> - </td> - <td> - abaumann - </td> - <td> - - </td> - <td> - 2024-09-10 17:30:12 - </td> - <td> - 2024-09-10 16:27:25 - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - </tr> - <tr class="even"> - <td> - <a href="/buildmaster/log.php?show=ssh&slave=eurobuild6-4">eurobuild6-4</a> - </td> - <td> - abaumann - </td> - <td> - - </td> - <td> - 2024-09-10 17:27:58 - </td> - <td> - 2024-09-10 15:45:32 - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - </tr> - <tr class="odd"> - <td> - <a href="/buildmaster/log.php?show=ssh&slave=eurobuild6-1">eurobuild6-1</a> - </td> - <td> - abaumann - </td> - <td> - - </td> - <td> - 2024-09-10 17:23:10 - </td> - <td> - 2024-09-10 16:55:10 - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - </tr> - <tr class="even"> - <td> - <a href="/buildmaster/log.php?show=ssh&slave=eurobuild6-5">eurobuild6-5</a> - </td> - <td> - abaumann - </td> - <td> - - </td> - <td> - 2024-09-10 17:20:00 - </td> - <td> - 2024-09-10 16:42:52 - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - </tr> - <tr class="odd"> - <td> - <a href="/buildmaster/log.php?show=ssh&slave=eurobuild6-8-i486">eurobuild6-8-i486</a> - </td> - <td> - abaumann - </td> - <td> - - </td> - <td> - 2024-09-10 17:14:43 - </td> - <td> - 2024-09-10 16:51:28 - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - </tr> - <tr class="even"> - <td> - <a href="/buildmaster/log.php?show=ssh&slave=eurobuild6-7-i486">eurobuild6-7-i486</a> - </td> - <td> - abaumann - </td> - <td> - - </td> - <td> - 2024-09-10 17:10:43 - </td> - <td> - 2024-09-10 16:54:44 - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - </tr> - <tr class="odd"> - <td> - <a href="/buildmaster/log.php?show=ssh&slave=eurobuild6-3">eurobuild6-3</a> - </td> - <td> - abaumann - </td> - <td> - - </td> - <td> - 2024-09-10 17:10:31 - </td> - <td> - 2024-09-10 16:41:49 - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - </tr> - <tr class="even"> - <td> - <a href="/buildmaster/log.php?show=ssh&slave=eurobuild6-2">eurobuild6-2</a> - </td> - <td> - abaumann - </td> - <td> - - </td> - <td> - 2024-09-10 17:04:09 - </td> - <td> - 2024-09-10 16:36:53 - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - </tr> - <tr class="odd"> - <td> - <a href="/buildmaster/log.php?show=ssh&slave=build-tasossah-c2d">build-tasossah-c2d</a> - </td> - <td> - KitsuWhooa - </td> - <td> - - </td> - <td> - 2024-09-09 15:20:04 - </td> - <td> - 2024-09-09 15:01:04 - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - </tr> - <tr class="even"> - <td> - <a href="/buildmaster/log.php?show=ssh&slave=eurobuild3-i486">eurobuild3-i486</a> - </td> - <td> - abaumann - </td> - <td> - - </td> - <td> - 2024-09-08 11:55:16 - </td> - <td> - 2024-09-08 11:34:55 - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - </tr> - <tr class="odd"> - <td> - <a href="/buildmaster/log.php?show=ssh&slave=eurobuild3">eurobuild3</a> - </td> - <td> - abaumann - </td> - <td> - - </td> - <td> - 2024-09-08 11:49:22 - </td> - <td> - 2024-09-08 11:34:13 - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - </tr> - <tr class="even"> - <td> - <a href="/buildmaster/log.php?show=ssh&slave=streusel-1">streusel-1</a> - </td> - <td> - deep42thought - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - </tr> - <tr class="odd"> - <td> - <a href="/buildmaster/log.php?show=ssh&slave=streusel-2">streusel-2</a> - </td> - <td> - deep42thought - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - </tr> - <tr class="even"> - <td> - <a href="/buildmaster/log.php?show=ssh&slave=streusel-3">streusel-3</a> - </td> - <td> - deep42thought - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - </tr> - <tr class="odd"> - <td> - <a href="/buildmaster/log.php?show=ssh&slave=thuringiabuild1">thuringiabuild1</a> - </td> - <td> - deep42thought - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - <td> - - </td> - </tr> - </tbody> - </table> - <div> - <form> - <input type="hidden" name="sort" value="-last_connection"/> - <label style="font-weight: normal" for="showall">Show all:</label><input type="checkbox" name="showall" /> - <input type="submit" value="Filter"> - </form> - </div> - - </div> - <div id="footer"> - <p> - Copyright © 2002-2019 <a href="mailto:jvinet@zeroflux.org" title="Contact Judd Vinet">Judd Vinet</a> and <a href="mailto:aaron@archlinux.org" title="Contact Aaron Griffin">Aaron Griffin</a>. - Copyright © 2018-2024 <a href="mailto:arch@eckner.net" title="Contact Erich Eckner">Erich Eckner</a>. - </p> - <p> - The Arch Linux® name and logo are recognized <a href="https://wiki.archlinux.org/index.php/DeveloperWiki:TrademarkPolicy" title="Arch Linux Trademark Policy">trademarks</a>. Some rights reserved. - </p> - <p> - The registered trademark Linux&tm; is used pursuant to a sublicense from LMI, the exclusive licensee of Linus Torvalds, owner of the mark on a world-wide basis. - </p> - </div> - </div> - <script type="application/ld+json"> - { - "@context": "http://schema.org", - "@type": "WebSite", - "url": "/", - "potentialAction": { - "@type": "SearchAction", - "target": "/?q={search_term}", - "query-input": "required name=search_term" - } - } - </script> - </body> -</html> |