[Fedora-packaging] Hardlinking *.pyc and *.pyo

Ville Skyttä ville.skytta at iki.fi
Tue Apr 3 10:42:24 UTC 2007


Related to recent space saving discussions, I came across PLD's
rpm-build-macros package recently, and found that they hardlink
identical *.pyc and *.pyo.  In a lot of cases, they're the same,
and there's some potential for saving some MB "for free",
on my FC6 x86_64 box:

$ /usr/sbin/hardlink -ncv /usr/lib*/python2.4 2>&1 | tail -n 1
Would save 11116544

The PLD implementation looks like this:

# Hardlink binary identical .pyc and .pyo files
# (idea by glen <at> pld-linux <dot> org)
%__spec_install_post_py_hardlink {\
%{!?no_install_post_py_hardlink: __spec_install_post_py_hardlink() { \
[ ! -d "$RPM_BUILD_ROOT" ] || find "$RPM_BUILD_ROOT" -name '*.pyc' | while read a; do \
        b="$(echo $a|sed -e 's/.pyc$/.pyo/')"; \
        if cmp -s "$a" "$b"; then \
                ln -f "$a" "$b"; \
        fi; \
done \
}; __spec_install_post_py_hardlink } }

The use of "cmp" would require diffutils installed.  Or the above
could be converted to use hardlink instead (which would have to be made
sure to be around) or maybe sha1sum (in coreutils, pretty much always
around in buildroots).

I suppose something like the above could be easily added to
redhat-rpm-config or rpm, eg. embedded in brp-python-bytecompile
or run after it in %__os_install_post.

Worth it?  Other comments?

More information about the Fedora-packaging mailing list