From d72b43041ad8e3b77d83d37ea390973141694b19 Mon Sep 17 00:00:00 2001
From: Gerhard Gonter <ggonter@gmail.com>
Date: Tue, 9 Aug 2022 17:40:45 +0200
Subject: [PATCH] debian package building (or hacking)

---
 build_deb.sh         | 12 ++++++++
 debian/control       | 14 +++++++++
 debian/debian-binary |  1 +
 scripts/mkdeb.pl     | 72 ++++++++++++++++++++++++++++++++++++++++----
 4 files changed, 93 insertions(+), 6 deletions(-)
 create mode 100755 build_deb.sh
 create mode 100644 debian/control
 create mode 100644 debian/debian-binary

diff --git a/build_deb.sh b/build_deb.sh
new file mode 100755
index 0000000..94e1332
--- /dev/null
+++ b/build_deb.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+echo 'increment the version number, when necessary!'
+epoch=0
+version=0.1-1
+pkgdir=tmp/stage/libgg-aix-pm-perl/$epoch/$version
+
+scripts/pmlnk.pm --copy --target $pkgdir/data/usr/share/perl5 .
+mkdir $pkgdir/control
+cp debian/control $pkgdir/control
+cp debian/debian-binary $pkgdir
+scripts/mkdeb.pl $pkgdir
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000..79a5553
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,14 @@
+Package: libgg-aix-pm-perl
+Version: 0.1-1
+Architecture: all
+Maintainer: Gerhard Gonter <ggonter@gmail.com>
+Original-Maintainer: Gerhard Gonter <ggonter@gmail.com>
+Installed-Size: 629
+Depends: perl
+Section: perl
+Priority: optional
+Homepage: http://aix-pm.sourceforge.net/
+Description: Perl modules from the aix-pm collection
+ The AIX:: name space plus more. Perl modules that deal with AIX specific
+ issues. A slowly evolving EMC CLARiiON monitoring tool belongs to the
+ "plus more" part.
diff --git a/debian/debian-binary b/debian/debian-binary
new file mode 100644
index 0000000..cd5ac03
--- /dev/null
+++ b/debian/debian-binary
@@ -0,0 +1 @@
+2.0
diff --git a/scripts/mkdeb.pl b/scripts/mkdeb.pl
index b6eb47e..1cc1eac 100755
--- a/scripts/mkdeb.pl
+++ b/scripts/mkdeb.pl
@@ -2,6 +2,9 @@
 
 use strict;
 
+use Data::Dumper;
+$Data::Dumper::Indent= 1;
+
 my $pkg_base= $ENV{PKGBASE} || '~/tmp/pkg';
 
 while (my $arg= shift (@ARGV))
@@ -36,17 +39,26 @@ sub mk_package
   my $pkg_name= shift;
   my $pkg_epoch= shift;
   my $pkg_version= shift;
-
-  my $deb= '../../../'. $pkg_name . '-';
-  $deb .= $pkg_epoch.':' if ($pkg_epoch > 0);
-  $deb .= $pkg_version .'.deb';
-  print __LINE__, " deb=[$deb]\n";
+  my $pkg_arch= shift;
 
   chdir($base)        or die "base not found [$base]";
   chdir($pkg_name)    or die "pkg_name not found [$pkg_name]";
   chdir($pkg_epoch)   or die "pkg_epoch not found [$pkg_epoch]";
   chdir($pkg_version) or die "pkg_version not found [$pkg_version]";
 
+  my $ctrl= Debian::Package::Control->read_control_file ('control/control');
+  print __LINE__, " ctrl: ", Dumper($ctrl);
+  unless (defined ($pkg_arch))
+  {
+    $pkg_arch= $ctrl->{fields}->{Architecture}->{value} || 'all';
+  }
+
+  my $deb= '../../../'. $pkg_name . '_';
+  # my $deb= $pkg_name . '-';
+  $deb .= $pkg_epoch.':' if ($pkg_epoch > 0);
+  $deb .= $pkg_version . '_' . $pkg_arch .'.deb';
+  print __LINE__, " deb=[$deb]\n";
+
   # mk_md5sums();
   unlink('control.tar.xz');
   unlink('data.tar.xz');
@@ -57,7 +69,8 @@ sub mk_package
 
   cmd(qw(xz -zv control.tar data.tar));
 
-  # the ar file must contain these fils in this order
+  # the ar file must contain these fils in this order and should be wiped before
+  unlink($deb);
   cmd('ar', 'rcSv', $deb, 'debian-binary');
   cmd('ar', 'rcSv', $deb, 'control.tar.xz');
   cmd('ar', 'rcSv', $deb, 'data.tar.xz');
@@ -78,3 +91,50 @@ sub mk_md5sums
   # chdir('..');
 }
 
+package Debian::Package::Control;
+
+sub read_control_file
+{
+  my $class= shift;
+  my $fnm= shift;
+
+  open (FI, '<:utf8', $fnm) or die "can't read control file [$fnm]";
+  my @segments;
+  my $segment;
+  my %fields;
+  while (<FI>)
+  {
+    chop;
+    print __LINE__, " l=[$_] segment=[$segment]\n";
+    if ($_ =~ m/^#/)
+    {
+      if (defined ($segment) && $segment->{type} eq 'comment')
+      {
+        push (@{$segment->{lines}} => $_);
+      }
+      else
+      {
+        $segment= { type => 'comment', lines => [ $_ ] };
+        push (@segments, $segment);
+      }
+    }
+    elsif ($_ =~ m#^ #)
+    {
+      die 'invalid continuation' unless (defined ($segment));
+      push (@{$segment->{lines}} => $_);
+    }
+    elsif ($_ =~ m#^([A-Z][\w\-_]+): *(.+)#)
+    {
+      my ($field, $value)= ($1, $2);
+      print __LINE__, " field=[$field] value=[$value]\n";
+      $segment= { type => 'field', field => $field, value => $value, lines => [ $_ ] };
+      push (@segments, $segment);
+      $fields{$field}= $segment;
+    }
+  }
+  close(FI);
+
+  my $res= { fields => \%fields, segments => \@segments };
+  bless ($res, $class);
+}
+
-- 
GitLab