[OE-core] [PATCH 2/3] Add texinfo-dummy-native recipe w/ scripts to stand in for Texinfo utils.
Saul Wold
sgw at linux.intel.com
Thu May 15 14:29:35 UTC 2014
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 at 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 at 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
> +
>
More information about the Openembedded-core
mailing list