[Lsb-messages] /var/www/bzr/lsb/devel/lsbspec r3970: add a note on lsbspec usage of m4 files

Mats Wichmann mats at linuxfoundation.org
Sun Oct 13 17:57:52 UTC 2013


------------------------------------------------------------
revno: 3970
committer: Mats Wichmann <mats at linuxfoundation.org>
branch nick: lsbspec
timestamp: Sun 2013-10-13 11:57:52 -0600
message:
  add a note on lsbspec usage of m4 files
added:
  README.m4files
-------------- next part --------------
=== added file 'README.m4files'
--- a/README.m4files	1970-01-01 00:00:00 +0000
+++ b/README.m4files	2013-10-13 17:57:52 +0000
@@ -0,0 +1,86 @@
+The LSB specification uses a lot of files suffixed .m4.  These exist to
+allow a little bit of macro processing, and to do file inclusion, using
+the m4 tool.
+
+A pretty typical setup is Toolkit_Gtk/generic/GTK:
+
+This directory contains some manually written specification text
+(the list enumerated by MANPAGES in the makefile), as well as some
+files generated from the specification database by script (this list
+is enumerated by TABLES).  However, the objective is to produce just a
+single docbook file for use in processing.
+
+This is done using a template file, named GTK.m4 here.  It contains
+docbook markup for the overall chapter, and some lines which look like:
+
+    m4_include(libGlib.sgml)
+
+These are used to build the eventual output file, the product of all
+this work, GTK.sgml.  It should be noted that the generated TABLES files 
+may themselves contain further m4 instructions - this
+happens when the generator script notices that an interface contained
+within that library is marked as being documented by LSB - it will
+then attempt to include the appropriate file - which should be one of
+the MANPAGES files.  If the file does not exist, the generator emits
+a comment instead.  Examples of both:
+
+    m4_sinclude(m4_ifdef('g_cache_value_foreach','',g_cache_value_foreach.sgml))
+    m4_define('g_cache_value_foreach','1')
+
+    <!-- MISSING DEFINITION FOR g_once_init_enter_impl -->
+    <!-- Lets just hope nobody notices -->
+
+The m4 files can also do some macro processing with the idea of reducing
+duplication of files - if there is some wording that should be in the
+generic valume and be different in the arch-specific volumes, this can
+also be handled. Example is from LSB/generic/intro/intro.m4:
+
+   m4_ifelse(ARCH,`All', `
+   <!-- the ID below is for auto generated xrefs to the LSB itself -->
+   <para id=STD.LSB xreflabel="This Specification">',`<para>')
+
+The makefiles then do appropriate things to set these. Generic:
+
+    m4 -P -Uindex -Uformat -DARCH=All -DCORE=1 intro.m4 >intro.sgml
+
+and x86-64:
+
+    m4 -P -Uindex -Uformat -DARCH=x86-64 intro.m4 >intro.sgml
+
+So now the reason for creating this note: where care has been taken
+to create multi-use m4 files, they should be kept that way.  If you
+have a submodule which contains arch-specifics, you will have eight
+separate directories. If they can share an m4 file, put it only in
+generic, and add rules to the makefiles in the arch-specific directories
+to pick it up as needed:
+
+    # change this if all the books stop sharing the same m4 file
+    intro.m4::
+            cp ../../generic/intro/$@ .
+
+and then add a rule to make sure the copied file can be removed:
+
+    spotless: clean
+	    rm -f $(TABLES) intro.m4
+
+DO NOT check in the copied files, then you'll risk the files going
+out of skew with each other, someone will modify the one in generic
+and the other directories won't pick up the changes.
+
+Recently had to sweep through the spec and clean out a whole bunch
+of these.
+
+Note there are cases when the m4 files do differ.  For example, in
+Desktop, the module contains both generic submodules and ones with
+arch-specific pieces.  When the appendix list of interfaces is built,
+the generic one gets everything, the arch-specific ones get only the
+interfaces for the libraries which have arch-speicific pieces.  So here
+they include different lists of files.  Yes, work could be done with
+the m4 macro trick noted above to keep the file common across all eight.
+Maybe someday.  There are certainly also cases where different wording
+is wanted. Again, it /could/ be handled with macros.  One pain with
+the m4 macros that discourages excess use is that the start and end 
+delimiters for a piece of text are different, this makes it a little
+harder on matching tools in editors, and syntax-higlighting editors
+don't seem to recognize m4 usage.
+



More information about the lsb-messages mailing list