[RFC,1/2] podfix: class to remove Pod::Man versions from manpages

Message ID 20191213232156.28367-1-ross.burton@intel.com
State Accepted
Commit 18d8e5ac689d6eb6098f68ac785f43e9d5f5938a
Headers show
Series
  • [RFC,1/2] podfix: class to remove Pod::Man versions from manpages
Related show

Commit Message

Ross Burton Dec. 13, 2019, 11:21 p.m.
Manpages generated by Pod::Man contain the version number, which isn't
reproducible if we're using the host Perl to generate manpage.

One option is to always depend on perl-native when generating manpages
but this is a heavy dependency, so instead strip out the versions in
do_install().

Signed-off-by: Ross Burton <ross.burton@intel.com>

---
 meta/classes/podfix.bbclass | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)
 create mode 100644 meta/classes/podfix.bbclass

-- 
2.20.1

-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Comments

Khem Raj Dec. 16, 2019, 4:39 a.m. | #1
On Fri, Dec 13, 2019 at 3:22 PM Ross Burton <ross.burton@intel.com> wrote:
>

> Manpages generated by Pod::Man contain the version number, which isn't

> reproducible if we're using the host Perl to generate manpage.

>

> One option is to always depend on perl-native when generating manpages

> but this is a heavy dependency, so instead strip out the versions in

> do_install().

>


seeing this error

https://errors.yoctoproject.org/Errors/Details/297478/


> Signed-off-by: Ross Burton <ross.burton@intel.com>

> ---

>  meta/classes/podfix.bbclass | 32 ++++++++++++++++++++++++++++++++

>  1 file changed, 32 insertions(+)

>  create mode 100644 meta/classes/podfix.bbclass

>

> diff --git a/meta/classes/podfix.bbclass b/meta/classes/podfix.bbclass

> new file mode 100644

> index 00000000000..54fff6a0a23

> --- /dev/null

> +++ b/meta/classes/podfix.bbclass

> @@ -0,0 +1,32 @@

> +python pod_strip_version() {

> +    import re

> +

> +    def opener(filename, mode):

> +        if filename.endswith(".gz"):

> +            import gzip

> +            return gzip.open(filename, mode)

> +        elif filename.endswith(".bz2"):

> +            import bz2

> +            return bz2.open(filename, mode)

> +        else:

> +            return open(filename, mode)

> +

> +    bad_re = re.compile(rb"Automatically generated by Pod::Man( [0-9]+.+)")

> +

> +    for root, dirs, files in os.walk(d.expand("${D}${mandir}")):

> +        for filename in files:

> +            filename = os.path.join(root, filename)

> +            with opener(filename, "rb") as manfile:

> +                manpage = manfile.read()

> +                m = bad_re.search(manpage)

> +                if not m:

> +                    continue

> +

> +            bb.note("podfix: stripping version from %s" % filename)

> +            os.unlink(filename)

> +            with opener(filename, "wb") as manfile:

> +                manfile.write(manpage[:m.start(1)])

> +                manfile.write(manpage[m.end(1):])

> +}

> +

> +do_install[postfuncs] += "pod_strip_version"

> --

> 2.20.1

>

> --

> _______________________________________________

> Openembedded-core mailing list

> Openembedded-core@lists.openembedded.org

> http://lists.openembedded.org/mailman/listinfo/openembedded-core

-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core
Ross Burton Dec. 16, 2019, 11:20 a.m. | #2
On 16/12/2019 04:39, Khem Raj wrote:
> On Fri, Dec 13, 2019 at 3:22 PM Ross Burton <ross.burton@intel.com> wrote:

>>

>> Manpages generated by Pod::Man contain the version number, which isn't

>> reproducible if we're using the host Perl to generate manpage.

>>

>> One option is to always depend on perl-native when generating manpages

>> but this is a heavy dependency, so instead strip out the versions in

>> do_install().

>>

> 

> seeing this error

> 

> https://errors.yoctoproject.org/Errors/Details/297478/


Exception: FileNotFoundError: [Errno 2] No such file or directory: 
'TOPDIR/build/tmp/work/core2-32-yoe-linux/fvwm/2.6.8-r0/image/usr/share/man/man1/fvwm2.1'

Is that actually a broken symlink?

Ross
-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core
Khem Raj Dec. 16, 2019, 3:17 p.m. | #3
On Mon, Dec 16, 2019 at 3:21 AM Ross Burton <ross.burton@intel.com> wrote:
>

> On 16/12/2019 04:39, Khem Raj wrote:

> > On Fri, Dec 13, 2019 at 3:22 PM Ross Burton <ross.burton@intel.com> wrote:

> >>

> >> Manpages generated by Pod::Man contain the version number, which isn't

> >> reproducible if we're using the host Perl to generate manpage.

> >>

> >> One option is to always depend on perl-native when generating manpages

> >> but this is a heavy dependency, so instead strip out the versions in

> >> do_install().

> >>

> >

> > seeing this error

> >

> > https://errors.yoctoproject.org/Errors/Details/297478/

>

> Exception: FileNotFoundError: [Errno 2] No such file or directory:

> 'TOPDIR/build/tmp/work/core2-32-yoe-linux/fvwm/2.6.8-r0/image/usr/share/man/man1/fvwm2.1'

>

> Is that actually a broken symlink?

>


it is perhaps I have to rebuilt and check but I think it would be good
if this class did not crash
like that. maybe just report a useful warning of some sort or just ignore it.


> Ross

-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Patch

diff --git a/meta/classes/podfix.bbclass b/meta/classes/podfix.bbclass
new file mode 100644
index 00000000000..54fff6a0a23
--- /dev/null
+++ b/meta/classes/podfix.bbclass
@@ -0,0 +1,32 @@ 
+python pod_strip_version() {
+    import re
+
+    def opener(filename, mode):
+        if filename.endswith(".gz"):
+            import gzip
+            return gzip.open(filename, mode)
+        elif filename.endswith(".bz2"):
+            import bz2
+            return bz2.open(filename, mode)
+        else:
+            return open(filename, mode)
+
+    bad_re = re.compile(rb"Automatically generated by Pod::Man( [0-9]+.+)")
+
+    for root, dirs, files in os.walk(d.expand("${D}${mandir}")):
+        for filename in files:
+            filename = os.path.join(root, filename)
+            with opener(filename, "rb") as manfile:
+                manpage = manfile.read()
+                m = bad_re.search(manpage)
+                if not m:
+                    continue
+
+            bb.note("podfix: stripping version from %s" % filename)
+            os.unlink(filename)
+            with opener(filename, "wb") as manfile:
+                manfile.write(manpage[:m.start(1)])
+                manfile.write(manpage[m.end(1):])
+}
+
+do_install[postfuncs] += "pod_strip_version"