Patchwork [v9,06/10] cpanminus: new package

login
register
mail settings
Submitter Francois Perrad
Date Oct. 6, 2012, 1:53 p.m.
Message ID <1349531633-26717-6-git-send-email-francois.perrad@gadz.org>
Download mbox | patch
Permalink /patch/189706/
State Superseded
Headers show

Comments

Francois Perrad - Oct. 6, 2012, 1:53 p.m.
Signed-off-by: Francois Perrad <francois.perrad@gadz.org>
---
 package/Config.in                        |    5 ++++
 package/cpanminus/Config.in              |   36 +++++++++++++++++++++++
 package/cpanminus/cpanminus.mk           |   46 ++++++++++++++++++++++++++++++
 package/perl/perl-fix-Module-Build.patch |   16 +++++++++++
 4 files changed, 103 insertions(+)
 create mode 100644 package/cpanminus/Config.in
 create mode 100644 package/cpanminus/cpanminus.mk
 create mode 100644 package/perl/perl-fix-Module-Build.patch
Thomas Petazzoni - Oct. 8, 2012, 9:37 a.m.
Dear Francois Perrad,

On Sat,  6 Oct 2012 15:53:49 +0200, Francois Perrad wrote:
> Signed-off-by: Francois Perrad <francois.perrad@gadz.org>
> ---
>  package/Config.in                        |    5 ++++
>  package/cpanminus/Config.in              |   36 +++++++++++++++++++++++
>  package/cpanminus/cpanminus.mk           |   46 ++++++++++++++++++++++++++++++
>  package/perl/perl-fix-Module-Build.patch |   16 +++++++++++
>  4 files changed, 103 insertions(+)
>  create mode 100644 package/cpanminus/Config.in
>  create mode 100644 package/cpanminus/cpanminus.mk
>  create mode 100644 package/perl/perl-fix-Module-Build.patch

One thing that I'm wondering with cpanminus is how it interacts with
the Buildroot mechanisms for download.

I.e :

 *) Where does cpanminus downloads the Perl module tarballs?

 *) Does it re-use the downloaded tarballs between rebuilds?

 *) Is there a way to tell it to download its tarballs in $(DL_DIR) ?

 *) Is there a way to have "make source" work properly, i.e ask
    cpanminus to download the tarballs that it will need so that
    offline builds are possible.

 *) Is it possible to make it play nice with BR2_PRIMARY_SITE ?

Thanks!

Thomas
Francois Perrad - Oct. 10, 2012, 3:04 p.m.
2012/10/8 Thomas Petazzoni <thomas.petazzoni@free-electrons.com>:
> Dear Francois Perrad,
>
> On Sat,  6 Oct 2012 15:53:49 +0200, Francois Perrad wrote:
>> Signed-off-by: Francois Perrad <francois.perrad@gadz.org>
>> ---
>>  package/Config.in                        |    5 ++++
>>  package/cpanminus/Config.in              |   36 +++++++++++++++++++++++
>>  package/cpanminus/cpanminus.mk           |   46 ++++++++++++++++++++++++++++++
>>  package/perl/perl-fix-Module-Build.patch |   16 +++++++++++
>>  4 files changed, 103 insertions(+)
>>  create mode 100644 package/cpanminus/Config.in
>>  create mode 100644 package/cpanminus/cpanminus.mk
>>  create mode 100644 package/perl/perl-fix-Module-Build.patch
>
> One thing that I'm wondering with cpanminus is how it interacts with
> the Buildroot mechanisms for download.
>

It doesn't interact.
cpanminus is not a CPAN client based on BR infrastructure.
I think what creating a CPAN client based on BR infrastructure could
be a nice project, but premature at this time.

But the reproductibility of a project (with an identified version of
each CPAN module) could be done with a local CPAN mirror.
A local CPAN mirror allows to work offline.
(see minicpan, http://search.cpan.org/~rjbs/CPAN-Mini-1.111009/bin/minicpan).
So, cpanminus does the job (with its way).

Fran├žois

> I.e :
>
>  *) Where does cpanminus downloads the Perl module tarballs?
>
>  *) Does it re-use the downloaded tarballs between rebuilds?
>
>  *) Is there a way to tell it to download its tarballs in $(DL_DIR) ?
>
>  *) Is there a way to have "make source" work properly, i.e ask
>     cpanminus to download the tarballs that it will need so that
>     offline builds are possible.
>
>  *) Is it possible to make it play nice with BR2_PRIMARY_SITE ?
>
> Thanks!
>
> Thomas
> --
> Thomas Petazzoni, Free Electrons
> Kernel, drivers, real-time and embedded Linux
> development, consulting, training and support.
> http://free-electrons.com
> _______________________________________________
> buildroot mailing list
> buildroot@busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot

Patch

diff --git a/package/Config.in b/package/Config.in
index d9cadf9..06050f2 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -263,6 +263,11 @@  source "package/xavante/Config.in"
 endmenu
 endif
 source "package/perl/Config.in"
+if BR2_PACKAGE_PERL
+menu "Perl libraries/modules"
+source "package/cpanminus/Config.in"
+endmenu
+endif
 source "package/microperl/Config.in"
 source "package/php/Config.in"
 source "package/python/Config.in"
diff --git a/package/cpanminus/Config.in b/package/cpanminus/Config.in
new file mode 100644
index 0000000..b8b39dc
--- /dev/null
+++ b/package/cpanminus/Config.in
@@ -0,0 +1,36 @@ 
+config BR2_PACKAGE_CPANMINUS
+	bool "cpanminus"
+	help
+	  cpanminus is a script to get, unpack, build and install Perl modules
+	  from CPAN.
+
+	  Why? It's dependency free, requires zero configuration, and stands
+	  alone. When running, it requires only 10MB of RAM.
+
+	  http://github.com/miyagawa/cpanminus
+
+if BR2_PACKAGE_CPANMINUS
+
+config BR2_PACKAGE_CPANMINUS_MIRROR
+	string "mirror"
+	help
+	  Specifies the base URL for the CPAN mirror to use,
+	  such as http://cpan.cpantesters.org/.
+
+config BR2_PACKAGE_CPANMINUS_MODULES
+	string "Perl modules from CPAN"
+	default "Curses::UI"
+	help
+	  List of space-separated Perl modules to install from CPAN.
+
+	  Examples: Try::Tiny Dancer YAML Moo
+
+	  Install the listed modules and their dependencies.
+
+config BR2_PACKAGE_CPANMINUS_NATIVE_DEPENDENCIES
+	string "native dependencies"
+	default "ncurses"
+	help
+	  Some XS modules require native libraries.
+
+endif
diff --git a/package/cpanminus/cpanminus.mk b/package/cpanminus/cpanminus.mk
new file mode 100644
index 0000000..43f8dde
--- /dev/null
+++ b/package/cpanminus/cpanminus.mk
@@ -0,0 +1,46 @@ 
+#############################################################
+#
+# cpanminus
+#
+#############################################################
+
+CPANMINUS_VERSION = 1.5018
+CPANMINUS_SOURCE = miyagawa-cpanminus-$(CPANMINUS_VERSION)-0-gee6cd30.tar.gz
+CPANMINUS_SITE = https://github.com/miyagawa/cpanminus/tarball/$(CPANMINUS_VERSION)
+CPANMINUS_DEPENDENCIES = perl $(call qstrip,$(BR2_PACKAGE_CPANMINUS_NATIVE_DEPENDENCIES))
+
+CPANMINUS_RUN_PERL = $(QEMU_USER) $(STAGING_DIR)/usr/bin/perl
+CPANMINUS_ARCHNAME = $(shell $(CPANMINUS_RUN_PERL) -MConfig -e "print Config->{archname}")
+CPANMINUS_PERL_LIB      = $(TARGET_DIR)/usr/lib/perl5/$(PERL_VERSION)
+CPANMINUS_PERL_SITELIB  = $(TARGET_DIR)/usr/lib/perl5/site_perl/$(PERL_VERSION)
+CPANMINUS_PERL_ARCHLIB  = $(CPANMINUS_PERL_LIB)/$(CPANMINUS_ARCHNAME)
+CPANMINUS_PERL_SITEARCH = $(CPANMINUS_PERL_SITELIB)/$(CPANMINUS_ARCHNAME)
+CPANMINUS_PERL5LIB = $(CPANMINUS_PERL_SITEARCH):$(CPANMINUS_PERL_SITELIB):$(CPANMINUS_PERL_ARCHLIB):$(CPANMINUS_PERL_LIB)
+ifneq ($(BR2_PACKAGE_CPANMINUS_MIRROR),"")
+    CPANMINUS_MIRROR = --mirror $(call qstrip,$(BR2_PACKAGE_CPANMINUS_MIRROR)) --mirror-only
+endif
+CPANMINUS_MODULES = $(call qstrip,$(BR2_PACKAGE_CPANMINUS_MODULES))
+
+ifneq ($(CPANMINUS_MODULES),)
+define CPANMINUS_INSTALL_TARGET_CMDS
+	echo "#!/bin/sh"                                                        > $(@D)/run_perl
+	echo "PERL5LIB=$(CPANMINUS_PERL5LIB) $(CPANMINUS_RUN_PERL) \"\$$@\""    >>$(@D)/run_perl
+	chmod +x $(@D)/run_perl
+	PERL5LIB=$(CPANMINUS_PERL5LIB) \
+	PERL_MM_OPT="DESTDIR=$(TARGET_DIR) PERL=$(@D)/run_perl PERL_LIB=$(CPANMINUS_PERL_LIB) PERL_ARCHLIB=$(CPANMINUS_PERL_ARCHLIB)" \
+	PERL_MB_OPT="--destdir $(TARGET_DIR)" \
+	RUN_PERL="$(@D)/run_perl" \
+	$(CPANMINUS_RUN_PERL) $(@D)/cpanm \
+		--perl=$(@D)/run_perl \
+		--notest \
+		--no-man-pages \
+		$(CPANMINUS_MIRROR) \
+		$(call qstrip,$(BR2_PACKAGE_CPANMINUS_MODULES))
+endef
+else
+define CPANMINUS_INSTALL_TARGET_CMDS
+	@echo "No modules to install"
+endef
+endif
+
+$(eval $(generic-package))
diff --git a/package/perl/perl-fix-Module-Build.patch b/package/perl/perl-fix-Module-Build.patch
new file mode 100644
index 0000000..26b15e4
--- /dev/null
+++ b/package/perl/perl-fix-Module-Build.patch
@@ -0,0 +1,16 @@ 
+
+Signed-off-by: Francois Perrad <francois.perrad@gadz.org>
+
+Index: b/cpan/Module-Build/lib/Module/Build/Base.pm
+===================================================================
+--- a/cpan/Module-Build/lib/Module/Build/Base.pm
++++ b/cpan/Module-Build/lib/Module/Build/Base.pm
+@@ -456,7 +456,7 @@
+   my $proto = shift;
+   my $c     = ref($proto) ? $proto->{config} : 'Module::Build::Config';
+ 
+-  my $perl  = $^X;
++  my $perl  = $ENV{RUN_PERL} || $^X;
+   my $perl_basename = File::Basename::basename($perl);
+ 
+   my @potential_perls;