Patchwork [2/3] Add texinfo-dummy-native recipe w/ scripts to stand in for Texinfo utils.

login
register
mail settings
Submitter Max Eliaser
Date May 14, 2014, 9:36 p.m.
Message ID <4607c274a894441baa289f2eaf8eb5f773d1cc35.1400103108.git.max.eliaser@intel.com>
Download mbox | patch
Permalink /patch/72169/
State New
Headers show

Comments

Max Eliaser - May 14, 2014, 9:36 p.m.
More work toward eliminating the dependency on the host system's Texinfo--
Python scripts that understand the same command-line options as the Texinfo
utilities, and create blank output files if appropriate, but don't actually
do any of the work done by those utilities.

This will be necessary to avoid circular dependencies when we start explicitly
tracking dependencies on texinfo-native; i.e. texinfo-native ->
autoconf-native -> texinfo-native. If we have all native recipes that inherit
texinfo.bbclass depend on texinfo-dummy-native instead of texinfo-native, the
cycle is broken.

It may also provide a performance gain by skipping the actual work of
formatting and generating documentation files.

Signed-off-by: Max Eliaser <max.eliaser@intel.com>
---
 .../texinfo-dummy-native/texinfo-dummy-native.bb   |  30 +++++
 .../texinfo-dummy-native/texinfo-dummy/COPYING     |  19 ++++
 .../texinfo-dummy-native/texinfo-dummy/template.py | 122 +++++++++++++++++++++
 3 files changed, 171 insertions(+)
 create mode 100644 meta/recipes-extended/texinfo-dummy-native/texinfo-dummy-native.bb
 create mode 100644 meta/recipes-extended/texinfo-dummy-native/texinfo-dummy/COPYING
 create mode 100644 meta/recipes-extended/texinfo-dummy-native/texinfo-dummy/template.py
Saul Wold - May 15, 2014, 2:29 p.m.
On 05/14/2014 02:36 PM, Max Eliaser wrote:
> More work toward eliminating the dependency on the host system's Texinfo--
> Python scripts that understand the same command-line options as the Texinfo
> utilities, and create blank output files if appropriate, but don't actually
> do any of the work done by those utilities.
>
> This will be necessary to avoid circular dependencies when we start explicitly
> tracking dependencies on texinfo-native; i.e. texinfo-native ->
> autoconf-native -> texinfo-native. If we have all native recipes that inherit
> texinfo.bbclass depend on texinfo-dummy-native instead of texinfo-native, the
> cycle is broken.
>
> It may also provide a performance gain by skipping the actual work of
> formatting and generating documentation files.
>
> Signed-off-by: Max Eliaser <max.eliaser@intel.com>
> ---
>   .../texinfo-dummy-native/texinfo-dummy-native.bb   |  30 +++++
>   .../texinfo-dummy-native/texinfo-dummy/COPYING     |  19 ++++
>   .../texinfo-dummy-native/texinfo-dummy/template.py | 122 +++++++++++++++++++++
>   3 files changed, 171 insertions(+)
>   create mode 100644 meta/recipes-extended/texinfo-dummy-native/texinfo-dummy-native.bb
>   create mode 100644 meta/recipes-extended/texinfo-dummy-native/texinfo-dummy/COPYING
>   create mode 100644 meta/recipes-extended/texinfo-dummy-native/texinfo-dummy/template.py
>
I think these should live in texinfo instead of adding a new 
texinfo-dummp-native directory?

Sau!

> diff --git a/meta/recipes-extended/texinfo-dummy-native/texinfo-dummy-native.bb b/meta/recipes-extended/texinfo-dummy-native/texinfo-dummy-native.bb
> new file mode 100644
> index 0000000..b5420a3
> --- /dev/null
> +++ b/meta/recipes-extended/texinfo-dummy-native/texinfo-dummy-native.bb
> @@ -0,0 +1,30 @@
> +DESCRIPTION = "Fake version of the texinfo utility suite"
> +SECTION = "console/utils"
> +LICENSE = "MIT"
> +LIC_FILES_CHKSUM = "file://COPYING;md5=d6bb62e73ca8b901d3f2e9d71542f4bb"
> +DEPENDS = ""
> +PV = "1.0"
> +
> +SRC_URI = "file://template.py file://COPYING"
> +
> +S = "${WORKDIR}"
> +
> +NATIVE_PACKAGE_PATH_SUFFIX = "/${PN}"
> +
> +inherit native
> +
> +do_install_name() {
> +    FILENAME="${D}${bindir}/$1"
> +    # Using ln causes problems with rm_work
> +    cp -T "${S}/template.py" "$FILENAME"
> +    chmod +x $FILENAME
> +}
> +
> +do_install() {
> +    mkdir -p "${D}${bindir}"
> +    for i in makeinfo pod2texi texi2dvi pdftexi2dvi texindex texi2pdf \
> +             txixml2texi texi2any install-info ginstall-info \
> +             update-info-dir; do
> +        do_install_name $i
> +    done
> +}
> diff --git a/meta/recipes-extended/texinfo-dummy-native/texinfo-dummy/COPYING b/meta/recipes-extended/texinfo-dummy-native/texinfo-dummy/COPYING
> new file mode 100644
> index 0000000..531cbe7
> --- /dev/null
> +++ b/meta/recipes-extended/texinfo-dummy-native/texinfo-dummy/COPYING
> @@ -0,0 +1,19 @@
> +Copyright (c) 2014 Intel Corp.
> +
> +Permission is hereby granted, free of charge, to any person obtaining a copy
> +of this software and associated documentation files (the "Software"), to deal
> +in the Software without restriction, including without limitation the rights
> +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> +copies of the Software, and to permit persons to whom the Software is
> +furnished to do so, subject to the following conditions:
> +
> +The above copyright notice and this permission notice shall be included in
> +all copies or substantial portions of the Software.
> +
> +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
> +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> +THE SOFTWARE.
> diff --git a/meta/recipes-extended/texinfo-dummy-native/texinfo-dummy/template.py b/meta/recipes-extended/texinfo-dummy-native/texinfo-dummy/template.py
> new file mode 100644
> index 0000000..4dc31a9
> --- /dev/null
> +++ b/meta/recipes-extended/texinfo-dummy-native/texinfo-dummy/template.py
> @@ -0,0 +1,122 @@
> +#! /usr/bin/env python2.7
> +
> +# template.py (and other filenames)
> +# By Max Eliaser (max.eliaser@intel.com)
> +
> +# Copyright (c) 2014 Intel Corp.
> +
> +# Permission is hereby granted, free of charge, to any person obtaining a copy
> +# of this software and associated documentation files (the "Software"), to deal
> +# in the Software without restriction, including without limitation the rights
> +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> +# copies of the Software, and to permit persons to whom the Software is
> +# furnished to do so, subject to the following conditions:
> +
> +# The above copyright notice and this permission notice shall be included in
> +# all copies or substantial portions of the Software.
> +
> +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
> +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> +# THE SOFTWARE.
> +
> +# This program acts like a dummy version of the texinfo utilities, creating
> +# the right output files but leaving them blank. It will parse out the name
> +# of the executable from argv[0] and emulate the corresponding program, so
> +# multiple copies of this script will exist under different names.
> +
> +import sys, os
> +
> +olong = "--output="
> +Elong = "--macro-expand="
> +
> +
> +this_binary = sys.argv[0].split ("/")[-1]
> +
> +# To be outputted if functionality that hasn't been stubbed yet is invoked.
> +stub_msg = """
> +This stand-in version of %s is not yet fully capable of emulating the real
> +version from the GNU texinfo suite. If you see this message, file a bug report
> +with details on the recipe that failed.
> +""" % this_binary
> +
> +# Autotools setups query the version, so this is actually necessary. Some of
> +# them (lookin' at you, eglibc) actually look for the substring "GNU texinfo,"
> +# so we put that substring in there without actually telling a lie.
> +version_str = """ %s (fake texinfo, emulating GNU texinfo) 5.2
> +
> +Super amazing version which is totally not fake in any way whatsoever.
> +Copyright (C) 2014 Intel Corp. Distributed under the terms of the MIT
> +license.
> +""" % this_binary
> +
> +simple_binaries = "pod2texi texi2dvi pdftexi2dvi texindex texi2pdf \
> +                   txixml2texi install-info ginstall-info \
> +                   update-info-dir".split ()
> +
> +# These utilities use a slightly different set of options and flags.
> +complex_binaries = "makeinfo texi2any".split ()
> +
> +valid_binaries = simple_binaries + complex_binaries
> +
> +# For generating blank output files.
> +def touch_file (path):
> +    f = open (path, "w")
> +    f.close ()
> +
> +assert this_binary in valid_binaries, \
> +       this_binary + " is not one of " + ', '.join (valid_binaries)
> +
> +if "--version" in sys.argv:
> +    print version_str
> +    sys.exit (0)
> +
> +# For debugging
> +log_interceptions = False
> +if log_interceptions:
> +    f = open ("/tmp/intercepted_" + this_binary, "a")
> +    f.write (' '.join ([this_binary] + sys.argv[1:]) + '\n')
> +    f.close ()
> +
> +# Look through the options and flags, and if necessary, touch any output
> +# files.
> +arg_idx = 1
> +while arg_idx < len (sys.argv):
> +    arg = sys.argv [arg_idx]
> +
> +    if arg == "--":
> +        break
> +
> +    # Something like -I . can result in a need for this (specifically the .)
> +    elif len (arg) < 2:
> +        pass
> +
> +    # Check if -o or --output is specified. These can be used at most once.
> +    elif arg[0] == '-' and arg[1] != '-' and arg[len (arg) - 1] == 'o':
> +        touch_file (sys.argv[arg_idx + 1])
> +        sys.exit (0)
> +    elif arg.startswith (olong):
> +        touch_file (arg.split ("=")[1])
> +        sys.exit (0)
> +
> +    # Check for functionality that isn't implemented yet.
> +    else:
> +        assert arg[1] == '-' or 'E' not in arg or \
> +               this_binary in simple_binaries, \
> +               "-E option not yet supported" + stub_msg
> +
> +        assert not arg.startswith (Elong), \
> +               Elong[:-1] + " option not yet supported" + stub_msg
> +
> +    arg_idx += 1
> +
> +# The -o/--output option overrides the default. For makeinfo and texi2any,
> +# that default is to look for a @setfilename command in the input file.
> +# Otherwise, printing nothing to stdout and then exiting should suffice.
> +assert this_binary in simple_binaries, \
> +       "Don't know how to get default output file name from input file!" + \
> +       stub_msg
> +
>
Max Eliaser - May 15, 2014, 5:29 p.m.
Sure, I could do that. My understanding of the convention was that there was one directory per upstream project, and all the different recipes in that directory implemented different targets or versions of that upstream project-- is that not correct?

-Max

Patch

diff --git a/meta/recipes-extended/texinfo-dummy-native/texinfo-dummy-native.bb b/meta/recipes-extended/texinfo-dummy-native/texinfo-dummy-native.bb
new file mode 100644
index 0000000..b5420a3
--- /dev/null
+++ b/meta/recipes-extended/texinfo-dummy-native/texinfo-dummy-native.bb
@@ -0,0 +1,30 @@ 
+DESCRIPTION = "Fake version of the texinfo utility suite"
+SECTION = "console/utils"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d6bb62e73ca8b901d3f2e9d71542f4bb"
+DEPENDS = ""
+PV = "1.0"
+
+SRC_URI = "file://template.py file://COPYING"
+
+S = "${WORKDIR}"
+
+NATIVE_PACKAGE_PATH_SUFFIX = "/${PN}"
+
+inherit native
+
+do_install_name() {
+    FILENAME="${D}${bindir}/$1"
+    # Using ln causes problems with rm_work
+    cp -T "${S}/template.py" "$FILENAME"
+    chmod +x $FILENAME
+}
+
+do_install() {
+    mkdir -p "${D}${bindir}"
+    for i in makeinfo pod2texi texi2dvi pdftexi2dvi texindex texi2pdf \
+             txixml2texi texi2any install-info ginstall-info \
+             update-info-dir; do
+        do_install_name $i
+    done
+}
diff --git a/meta/recipes-extended/texinfo-dummy-native/texinfo-dummy/COPYING b/meta/recipes-extended/texinfo-dummy-native/texinfo-dummy/COPYING
new file mode 100644
index 0000000..531cbe7
--- /dev/null
+++ b/meta/recipes-extended/texinfo-dummy-native/texinfo-dummy/COPYING
@@ -0,0 +1,19 @@ 
+Copyright (c) 2014 Intel Corp.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/meta/recipes-extended/texinfo-dummy-native/texinfo-dummy/template.py b/meta/recipes-extended/texinfo-dummy-native/texinfo-dummy/template.py
new file mode 100644
index 0000000..4dc31a9
--- /dev/null
+++ b/meta/recipes-extended/texinfo-dummy-native/texinfo-dummy/template.py
@@ -0,0 +1,122 @@ 
+#! /usr/bin/env python2.7
+
+# template.py (and other filenames)
+# By Max Eliaser (max.eliaser@intel.com)
+
+# Copyright (c) 2014 Intel Corp.
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+# This program acts like a dummy version of the texinfo utilities, creating
+# the right output files but leaving them blank. It will parse out the name
+# of the executable from argv[0] and emulate the corresponding program, so
+# multiple copies of this script will exist under different names.
+
+import sys, os
+
+olong = "--output="
+Elong = "--macro-expand="
+
+
+this_binary = sys.argv[0].split ("/")[-1]
+
+# To be outputted if functionality that hasn't been stubbed yet is invoked.
+stub_msg = """
+This stand-in version of %s is not yet fully capable of emulating the real
+version from the GNU texinfo suite. If you see this message, file a bug report
+with details on the recipe that failed.
+""" % this_binary
+
+# Autotools setups query the version, so this is actually necessary. Some of
+# them (lookin' at you, eglibc) actually look for the substring "GNU texinfo,"
+# so we put that substring in there without actually telling a lie.
+version_str = """ %s (fake texinfo, emulating GNU texinfo) 5.2
+ 
+Super amazing version which is totally not fake in any way whatsoever.
+Copyright (C) 2014 Intel Corp. Distributed under the terms of the MIT
+license.
+""" % this_binary
+
+simple_binaries = "pod2texi texi2dvi pdftexi2dvi texindex texi2pdf \
+                   txixml2texi install-info ginstall-info \
+                   update-info-dir".split ()
+
+# These utilities use a slightly different set of options and flags.
+complex_binaries = "makeinfo texi2any".split ()
+
+valid_binaries = simple_binaries + complex_binaries
+
+# For generating blank output files.
+def touch_file (path):
+    f = open (path, "w")
+    f.close ()
+
+assert this_binary in valid_binaries, \
+       this_binary + " is not one of " + ', '.join (valid_binaries)
+
+if "--version" in sys.argv:
+    print version_str
+    sys.exit (0)
+
+# For debugging
+log_interceptions = False
+if log_interceptions:
+    f = open ("/tmp/intercepted_" + this_binary, "a")
+    f.write (' '.join ([this_binary] + sys.argv[1:]) + '\n')
+    f.close ()
+
+# Look through the options and flags, and if necessary, touch any output
+# files.
+arg_idx = 1
+while arg_idx < len (sys.argv):
+    arg = sys.argv [arg_idx]
+    
+    if arg == "--":
+        break
+    
+    # Something like -I . can result in a need for this (specifically the .)
+    elif len (arg) < 2:
+        pass
+    
+    # Check if -o or --output is specified. These can be used at most once.
+    elif arg[0] == '-' and arg[1] != '-' and arg[len (arg) - 1] == 'o':
+        touch_file (sys.argv[arg_idx + 1])
+        sys.exit (0)
+    elif arg.startswith (olong):
+        touch_file (arg.split ("=")[1])
+        sys.exit (0)
+    
+    # Check for functionality that isn't implemented yet.
+    else:
+        assert arg[1] == '-' or 'E' not in arg or \
+               this_binary in simple_binaries, \
+               "-E option not yet supported" + stub_msg
+        
+        assert not arg.startswith (Elong), \
+               Elong[:-1] + " option not yet supported" + stub_msg
+    
+    arg_idx += 1
+
+# The -o/--output option overrides the default. For makeinfo and texi2any,
+# that default is to look for a @setfilename command in the input file.
+# Otherwise, printing nothing to stdout and then exiting should suffice.
+assert this_binary in simple_binaries, \
+       "Don't know how to get default output file name from input file!" + \
+       stub_msg
+