summaryrefslogtreecommitdiff
path: root/Build/Collax.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Build/Collax.pm')
-rw-r--r--Build/Collax.pm64
1 files changed, 64 insertions, 0 deletions
diff --git a/Build/Collax.pm b/Build/Collax.pm
new file mode 100644
index 0000000..2fc332c
--- /dev/null
+++ b/Build/Collax.pm
@@ -0,0 +1,64 @@
+#
+# Copyright 2015 Zarafa B.V. and its licensors
+#
+# 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; either version 2 or (at your option) any later version.
+#
+# 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.
+#
+package Build::Collax;
+
+use strict;
+
+sub parse {
+ my($buildconf, $fn) = @_;
+ my @bscript;
+
+ if (ref($fn) eq "ARRAY") {
+ @bscript = @$fn;
+ $fn = undef;
+ } elsif (ref($fn) ne "") {
+ die "Unhandled ref type in collax";
+ } else {
+ local *FH;
+ if (!open(FH, "<", $fn)) {
+ return {"error" => "$fn: $!"};
+ }
+ @bscript = <FH>;
+ chomp(@bscript);
+ close(FH);
+ }
+
+ my $ret = {"deps" => []};
+ for (my $i = 0; $i <= $#bscript; ++$i) {
+ next unless $bscript[$i] =~ m{^\w+=};
+ my $key = lc(substr($&, 0, -1));
+ my $value = $';
+ if ($value =~ m{^([\'\"])}) {
+ $value = substr($value, 1);
+ while ($value !~ m{[\'\"]}) {
+ my @cut = splice(@bscript, $i + 1, 1);
+ $value .= $cut[0];
+ }
+ $value =~ s{[\'\"]}{}s;
+ $value =~ s{\n}{ }gs;
+ }
+ if ($key eq "package") {
+ $ret->{"name"} = $value;
+ } elsif ($key eq "version") {
+ $ret->{$key} = $value;
+ } elsif ($key eq "builddepends" || $key eq "extradepends") {
+ $value =~ s{^\s+}{}gs;
+ $value =~ s{\s+$}{}gs;
+ $value =~ s{,}{ }gs;
+ push(@{$ret->{"deps"}}, split(/\s+/, $value));
+ }
+ }
+ return $ret;
+}
+
+1;