#! /usr/bin/perl

# Copyright (C) 2010 by Dirk Krause
# All rights reserved.
# 
# Redistribution and use in source and binary forms,
# with or without modification, are permitted provided
# that the following conditions are met:
# 
# * Redistributions of source code must retain the above
#   copyright notice, this list of conditions and the
#   following disclaimer.
# * Redistributions in binary form must reproduce the above 
#   opyright notice, this list of conditions and the following
#   disclaimer in the documentation and/or other materials
#   provided with the distribution.
# * Neither the name of the Dirk Krause nor the names of
#   contributors may be used to endorse or promote
#   products derived from this software without specific
#   prior written permission.
# 
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED.
# IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
# DAMAGE.

sub getpwd() {
  my $back = undef;
  my $line;
  if(open(INPUT, "pwd |")) {
    while(<INPUT>) {
      $line = $_; chomp $line;
      if($line =~ /\S+/o) {
        $back = $line;
      }
    }
    close(INPUT);
  }
  return $back;
}

my $cwd = getpwd();

my @files = (
"compver", "depend", "space", "copyright", "request",
"checkinstall", "preinstall", "postinstall",
"preremove", "postremove"
);

if(open(OUTPUT, ">prototype")) {
  if( -f "pkginfo") {
    system("chmod 644 pkginfo");
    print OUTPUT "i pkginfo=$cwd/pkginfo\n";
    foreach my $i (@files) {
      if( -f "$i" ) {
        system("chmod 644 $i");
	print OUTPUT "i $i=$cwd/$i\n";
      }
    }
    if(open(INPUT, "find . -type d -print |")) {
      my $line;
      while(<INPUT>) {
        $line = $_; chomp $line;
	if("$line" ne ".") {
	  if($line =~ /^\.(.*)$/o) {
	    $line = $1;
	  }
	  print OUTPUT "d none $line 0755 bin bin\n";
	}
      }
      close(INPUT);
    }
    if(open(INPUT, "find . -type f -print |")) {
      my $mode = "0644";
      my $line;
      my $must_use_this;
      while(<INPUT>) {
        $line = $_; chomp $line;
	$must_use_this = 1;
	foreach my $i (@files) {
	  if ("$i" eq "$line") {
	    $must_use_this = 0;
	  }
	  if ("/$i" eq "$line") {
	    $must_use_this = 0;
	  }
	}
	if($line =~ /^\.(.*)$/o) {
	  $line = $1;
	}
	if("$line" ne "prototype") {
	  if("$line" ne "/prototype") {
	    if($line =~ /\/bin\//o) {
	      $mode = "0755";
	    }
	    if($line =~ /\/sbin\//o) {
	      $mode = "0755";
	    }
	    if($line =~ /\/libexec\//o) {
	      $mode = "0755";
	    }
	    if($must_use_this) {
	      print OUTPUT "f none $line=$cwd$line";
	      print OUTPUT " $mode bin bin\n";
	    }
	  }
	}
      }
      close(INPUT);
    }
  } else {
    print "dkmkproto: ERROR: Missing pkginfo file!\n";
  }
  close(OUTPUT);
}

