diff mbox

Enable deterministic perl archives.

Message ID 87eg22nkvo.fsf@kirby.i-did-not-set--mail-host-address--so-tickle-me
State New
Headers show

Commit Message

Marius Bakke Nov. 23, 2016, 5:53 p.m. UTC
Hi Guix,

This patch disables installation of "perllocal.pod" files which records
build time and not much else in perl packages.

I haven't checked whether this is needed for packages using 'Build.PL',
if you know any such package let me know.

Comments

Ludovic Courtès Nov. 25, 2016, 11:19 p.m. UTC | #1
Hi,

Marius Bakke <mbakke@fastmail.com> skribis:

> Hi Guix,
>
> This patch disables installation of "perllocal.pod" files which records
> build time and not much else in perl packages.
>
> I haven't checked whether this is needed for packages using 'Build.PL',
> if you know any such package let me know.

Are these perllocal.pod files really useless?

In Debian this problem is filed as <https://bugs.debian.org/835815>.
Apparently upstream ended up using SOURCE_DATE_EPOCH:

  https://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker/pull/279

Should we do that instead?  Or are perllocal.pod pointless anyway?

Thanks,
Ludo’.
Marius Bakke Nov. 26, 2016, 8:06 a.m. UTC | #2
Ludovic Courtès <ludo@gnu.org> writes:

> Hi,
>
> Marius Bakke <mbakke@fastmail.com> skribis:
>
>> Hi Guix,
>>
>> This patch disables installation of "perllocal.pod" files which records
>> build time and not much else in perl packages.
>>
>> I haven't checked whether this is needed for packages using 'Build.PL',
>> if you know any such package let me know.
>
> Are these perllocal.pod files really useless?
>
> In Debian this problem is filed as <https://bugs.debian.org/835815>.
> Apparently upstream ended up using SOURCE_DATE_EPOCH:
>
>   https://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker/pull/279
>
> Should we do that instead?  Or are perllocal.pod pointless anyway?

As far as I can tell, they really are pointless. Makefiles generated by
MakeMaker have a "pure_install" target that do not create them.

From http://www.perlmonks.org/?node=ExtUtils%3A%3AMakeMaker:

"make install per default writes some documentation of what has been
done into the file $(INSTALLARCHLIB)/perllocal.pod. This feature can be
bypassed by calling make pure_install."

Here is a typical perllocal.pod:
--8<---------------cut here---------------start------------->8---
=head2 Tue Oct 25 03:46:54 2016: C<Module> L<Eval::Closure|Eval::Closure>

=over 4

=item *

C<installed into: /gnu/store/8bqypkq60c72ndxfxi9g661r6rzby7iv-perl-eval-closure-0.14/lib/perl5/site_perl/5.24.0>

=item *

C<LINKTYPE: dynamic>

=item *

C<VERSION: 0.14>

=item *

C<EXE_FILES: >

=back
--8<---------------cut here---------------end--------------->8---

They contain build date, FFI language, link type, version and a list of
executables.

As far as I can tell, this is used by "traditional" package managers
such as CPAN, which appends information about all modules in a location
to a single perllocal.pod file [0]. Since our modules are
self-contained, they will not have any more utility than the above.

[0]: http://www.cpan.org/misc/cpan-faq.html#How_installed_modules

"Each time a module is installed on your system, it appends information
like the following to a file called perllocal.pod which can be found in
/usr/local/lib/perl5/version number/architecture/ or something akin to
that"
Ludovic Courtès Nov. 28, 2016, 1:42 p.m. UTC | #3
Hello!

Marius Bakke <mbakke@fastmail.com> skribis:

> As far as I can tell, they really are pointless. Makefiles generated by
> MakeMaker have a "pure_install" target that do not create them.
>
> From http://www.perlmonks.org/?node=ExtUtils%3A%3AMakeMaker:
>
> "make install per default writes some documentation of what has been
> done into the file $(INSTALLARCHLIB)/perllocal.pod. This feature can be
> bypassed by calling make pure_install."
>
> Here is a typical perllocal.pod:
>
> =head2 Tue Oct 25 03:46:54 2016: C<Module> L<Eval::Closure|Eval::Closure>
>
> =over 4
>
> =item *
>
> C<installed into: /gnu/store/8bqypkq60c72ndxfxi9g661r6rzby7iv-perl-eval-closure-0.14/lib/perl5/site_perl/5.24.0>
>
> =item *
>
> C<LINKTYPE: dynamic>
>
> =item *
>
> C<VERSION: 0.14>
>
> =item *
>
> C<EXE_FILES: >
>
> =back
>
> They contain build date, FFI language, link type, version and a list of
> executables.
>
> As far as I can tell, this is used by "traditional" package managers
> such as CPAN, which appends information about all modules in a location
> to a single perllocal.pod file [0]. Since our modules are
> self-contained, they will not have any more utility than the above.
>
> [0]: http://www.cpan.org/misc/cpan-faq.html#How_installed_modules
>
> "Each time a module is installed on your system, it appends information
> like the following to a file called perllocal.pod which can be found in
> /usr/local/lib/perl5/version number/architecture/ or something akin to
> that"

Oh so it seems similar to things like ld.so.cache.

Then OK for this patch in core-updates, with a comment explaining what
the flag does and why it’s OK (and/or a link to this thread).

Thank you!

Ludo’.
Marius Bakke Nov. 28, 2016, 10:13 p.m. UTC | #4
Ludovic Courtès <ludo@gnu.org> writes:

> Hello!
>
> Marius Bakke <mbakke@fastmail.com> skribis:
>
>> As far as I can tell, they really are pointless. Makefiles generated by
>> MakeMaker have a "pure_install" target that do not create them.
>>
>> From http://www.perlmonks.org/?node=ExtUtils%3A%3AMakeMaker:
>>
>> "make install per default writes some documentation of what has been
>> done into the file $(INSTALLARCHLIB)/perllocal.pod. This feature can be
>> bypassed by calling make pure_install."
>>
>> Here is a typical perllocal.pod:
>>
>> =head2 Tue Oct 25 03:46:54 2016: C<Module> L<Eval::Closure|Eval::Closure>
>>
>> =over 4
>>
>> =item *
>>
>> C<installed into: /gnu/store/8bqypkq60c72ndxfxi9g661r6rzby7iv-perl-eval-closure-0.14/lib/perl5/site_perl/5.24.0>
>>
>> =item *
>>
>> C<LINKTYPE: dynamic>
>>
>> =item *
>>
>> C<VERSION: 0.14>
>>
>> =item *
>>
>> C<EXE_FILES: >
>>
>> =back
>>
>> They contain build date, FFI language, link type, version and a list of
>> executables.
>>
>> As far as I can tell, this is used by "traditional" package managers
>> such as CPAN, which appends information about all modules in a location
>> to a single perllocal.pod file [0]. Since our modules are
>> self-contained, they will not have any more utility than the above.
>>
>> [0]: http://www.cpan.org/misc/cpan-faq.html#How_installed_modules
>>
>> "Each time a module is installed on your system, it appends information
>> like the following to a file called perllocal.pod which can be found in
>> /usr/local/lib/perl5/version number/architecture/ or something akin to
>> that"
>
> Oh so it seems similar to things like ld.so.cache.
>
> Then OK for this patch in core-updates, with a comment explaining what
> the flag does and why it’s OK (and/or a link to this thread).

OK. Pushed to core-updates as be12f4e27505edd87c4aa457fec43dd0fee23b79!

>
> Thank you!
>
> Ludo’.
diff mbox

Patch

From 34d0dd4e8a002d3768a55e8b28c60c1490b34d45 Mon Sep 17 00:00:00 2001
From: Marius Bakke <mbakke@fastmail.com>
Date: Wed, 23 Nov 2016 18:40:53 +0100
Subject: [PATCH] build-system/perl: Do not create non-deterministic
 '.perllocal' files.

* guix/build/perl-build-system.scm (configure): Add "NO_PERLLOCAL=1"
to Makefile.PL arguments.
---
 guix/build/perl-build-system.scm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/guix/build/perl-build-system.scm b/guix/build/perl-build-system.scm
index 8f480ea..6d9092b 100644
--- a/guix/build/perl-build-system.scm
+++ b/guix/build/perl-build-system.scm
@@ -42,7 +42,7 @@ 
                    "--installdirs=site" ,@module-build-flags))
                 ((file-exists? "Makefile.PL")
                  `("Makefile.PL" ,(string-append "PREFIX=" out)
-                   "INSTALLDIRS=site" ,@make-maker-flags))
+                   "INSTALLDIRS=site" "NO_PERLLOCAL=1" ,@make-maker-flags))
                 (else (error "no Build.PL or Makefile.PL found")))))
     (format #t "running `perl' with arguments ~s~%" args)
     (zero? (apply system* "perl" args))))
-- 
2.10.2