#!/usr/pkg/bin/perl

use warnings;
use strict;

my ($ucpkg, $lcpkg, $var);

my ($bo_done, $if_done, $endif_done) = (0,0,0);

my $remove_next_newline = 0;

loop: while (<>) {
	/#\s*\$NetBSD:/ && do {{
		print $_;
		print "# buildlink3.mk file version 20090316\n";
		next loop;
	}};

	/^# buildlink3.mk file version 20090316/ && do {{
		print STDERR "$ARGV: File already converted\n";
		exit 1;
	}};

	/^(([A-Z0-9_.+]+)_BUILDLINK3_MK):=/ && do {{
		$ucpkg = $2;
		$var = $1;
		next loop;
	}};
	
	if (!defined($ucpkg)) {
		print $_;
		next;
	}

	/^BUILDLINK_PACKAGES:=/ && next;
	/^BUILDLINK_PACKAGES\+=\s+(\S+)/ && do {{
		$lcpkg = $1;
		next loop;
	}};
	/^BUILDLINK_ORDER/ && do {{
		if (!$bo_done) {
			print ".if make(show-buildlink3)\n";
			print $_;
			print ".endif\n";
			$bo_done = 1;
		} else {
			print STDERR "$ARGV: b_o transform done twice, please check\n";
		}
		next loop;
	}};

	if (!defined($lcpkg)) {
		print $_;
		next;
	}

	/^\.if\s+(!empty\(${var}:M\+\)|\$\{${var}\}\s+==\s+"\+")/ && do {{
		if (!$if_done) {
			print ".if !defined(${var})\n";
			print "$var=\t# defined\n\n";
			print "BUILDLINK_PACKAGES+=\t$lcpkg\n\n";
			$if_done = 1;
		} else {
			print STDERR "$ARGV: if transform done twice, please check\n";
		}
		next loop;
	}};

	/^\.endif\s+#\s+$var/ && do {{
		$remove_next_newline = 1;
		next loop;
	}};

	/^BUILDLINK_DEPTH.+BUILDLINK_DEPTH:S\/\+\$\/\// && do {{
		print ".endif\t# $var\n\n";
		print $_;
		$endif_done = 1;
		next loop;
	}};

	/^\s$/ && $remove_next_newline && do {{
		$remove_next_newline = 0;
		next loop;
	}};

	print $_;
}

if (!defined($ucpkg)) {
	print STDERR "$ARGV: Couldn't find package name.\n";
	exit 1;
} elsif (!defined($lcpkg)) {
	print STDERR "$ARGV: Couldn't find BUILDLINK_PACKAGES line.\n";
	exit 1;
} elsif (!$bo_done) {
	print STDERR "$ARGV: Couldn't find BUILDLINK_ORDER line.\n";
	exit 1;
} elsif (!$if_done) {
	print STDERR "$ARGV: Couldn't find .if line.\n";
	exit 1;
} elsif (!$endif_done) {
	print STDERR "$ARGV: Couldn't find .endif line.\n";
	exit 1;
}

exit 0;
