summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <lars.wirzenius@codethink.co.uk>2012-04-23 16:50:36 +0100
committerLars Wirzenius <lars.wirzenius@codethink.co.uk>2012-04-23 16:50:36 +0100
commit6fac2a4d8b8d6a599703c015eb885d4f21544e0c (patch)
tree10cf93458c0a498e280d0351261c82ef6f43315a
parente7b984a06d1fc716f7e3de2dc8ef2a6d52c82232 (diff)
parentaa204b6f53f7655c7583e2e1fcecf0f0f1bc8fa8 (diff)
downloadmorph-6fac2a4d8b8d6a599703c015eb885d4f21544e0c.tar.gz
Merge branch 'master' of gitorious.org:baserock/morph
-rw-r--r--morphlib/buildsystem.py28
-rwxr-xr-xtests/build-system-cpan.script71
-rw-r--r--tests/build-system-cpan.stdout13
3 files changed, 112 insertions, 0 deletions
diff --git a/morphlib/buildsystem.py b/morphlib/buildsystem.py
index ab12e730..799f35cc 100644
--- a/morphlib/buildsystem.py
+++ b/morphlib/buildsystem.py
@@ -150,10 +150,38 @@ class PythonDistutilsBuildSystem(BuildSystem):
return any(exists(x) for x in indicators)
+class CPANBuildSystem(BuildSystem):
+
+ '''The Perl cpan build system.'''
+
+ name = 'cpan'
+
+ def __init__(self):
+ self.configure_commands = [
+ 'perl Makefile.PL INSTALL_BASE="$PREFIX"',
+ ]
+ self.build_commands = [
+ 'make',
+ ]
+ self.test_commands = [
+ ]
+ self.install_commands = [
+ 'make DESTDIR="$DESTDIR" install',
+ ]
+
+ def used_by_project(self, exists):
+ indicators = [
+ 'Makefile.PL',
+ ]
+
+ return any(exists(x) for x in indicators)
+
+
build_systems = [
ManualBuildSystem(),
AutotoolsBuildSystem(),
PythonDistutilsBuildSystem(),
+ CPANBuildSystem(),
DummyBuildSystem(),
]
diff --git a/tests/build-system-cpan.script b/tests/build-system-cpan.script
new file mode 100755
index 00000000..59017d3f
--- /dev/null
+++ b/tests/build-system-cpan.script
@@ -0,0 +1,71 @@
+#!/bin/sh
+#
+# Convert the hello-chunk project to perl with CPAN
+#
+# Copyright (C) 2011, 2012 Codethink Limited
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+set -eu
+
+chunkrepo="$DATADIR/chunk-repo"
+cd "$chunkrepo"
+
+git checkout --quiet farrokh
+
+git rm --quiet hello.c
+
+cat <<EOF >hello
+#!/usr/bin/perl
+print "hello, world\n"
+EOF
+git add hello
+
+cat <<EOF >Makefile.PL
+use strict;
+use warnings;
+use ExtUtils::MakeMaker;
+WriteMakefile(
+ EXE_FILES => ['hello'],
+)
+EOF
+git add Makefile.PL
+
+cat <<EOF >hello.morph
+{
+ "name": "hello",
+ "kind": "chunk",
+ "build-system": "cpan"
+}
+EOF
+git add hello.morph
+
+git commit --quiet -m 'convert hello into a perl cpan project'
+
+"$SRCDIR/scripts/test-morph" build --prefix=/ chunk-repo farrokh hello.morph
+
+TEMPEXTRACT="$DATADIR/cpanextract"
+mkdir -p "$TEMPEXTRACT"
+
+PERLMAJOR=`perl -e 'print $^V' | sed 's|^v\([^\.]*\)\.[^\.]*\.[^\.]*$|\1|'`
+ARCH=`perl -V | grep archname | sed 's|^.*archname=\(\S*\).*$|\1|'`
+
+for chunk in "$DATADIR/cache/"*.chunk.*
+do
+ echo "$chunk:" | sed 's/[^.]*//'
+ tar -tf "$chunk" | LC_ALL=C sort |
+ sed -e '/^\.\/./s:^\./::' \
+ -e s/"$ARCH"/ARCH/ \
+ -e s/perl"$PERLMAJOR"/PERLDIR/
+done
diff --git a/tests/build-system-cpan.stdout b/tests/build-system-cpan.stdout
new file mode 100644
index 00000000..e0c21af1
--- /dev/null
+++ b/tests/build-system-cpan.stdout
@@ -0,0 +1,13 @@
+.chunk.hello:
+./
+baserock/
+baserock/hello.meta
+bin/
+bin/hello
+lib/
+lib/PERLDIR/
+lib/PERLDIR/ARCH/
+lib/PERLDIR/ARCH/auto/
+lib/PERLDIR/ARCH/auto/hello.build/
+lib/PERLDIR/ARCH/auto/hello.build/.packlist
+lib/PERLDIR/ARCH/perllocal.pod