#!/usr/bin/perl -w
# vim: set sw=4 ts=4
use strict;
use warnings;
my $portsdir = '/var/db/ports/';
my $conffile = '/usr/local/etc/pkgtools.conf';
my $options = {};
my $make_args = "MAKE_ARGS = {\n";
# da globs deprecated und unsicher sind, sollte man auf readdir zurueckgreifen.
opendir(DIR, $portsdir) || die "da fehlt etwas: $!";
foreach my $dir (readdir(DIR))
{
my $optfile = $portsdir . $dir . '/options';
next unless -f $optfile;
# datei gibts -> WITH krams holen..
open(FILE, '<', $optfile) || next;
chomp(my @targets = grep m/^WITH/, <FILE>);
close(FILE);
# keine optionen -> kein eintrag noetig
next unless @targets;
$make_args .= "'$dir' => '". join(" ", @targets). "', \n";
}
closedir(DIR);
$make_args .= '}';
open(FILE, '<', $conffile) || die "hier fehlt auch etwas: $!";
my @temp = <FILE>;
close(FILE);
# wenn man zeilenweise nach anfang und ende sucht, kann man sehr vielen
# problemen aus dem weg gehen.
# - kein aerger mit interpolation / evaluation
# - gierige ausdruecke sind 'weniger' gefaehrlich
# - man kann kommentare auch ohne /msg beachten
# ...
my ($from, $to);
for my $lc (0 .. $#temp)
{
# anfang finden, kommentare beachten!
$from = $lc if $temp[$lc] =~ m/^\s*MAKE_ARGS/;
# kein anfang -> kein ende
next unless $from;
# ende finden
$to = $lc if $temp[$lc] =~ m/^\s*\}/;
# beides da -> die suche hat ein ende
last if $to;
}
# MAKE_ARGS entfernen
splice @temp, $from, ($to - $from) +1;
# MAKE_ARGS einfuegen
splice @temp, $from, 0, $make_args;
# datei ausgeben (STDOUT durch anderes filehandle ersetzen)
print STDOUT @temp;