#!/usr/bin/perl -w

#----------------------------------------------------------------------
# copyright (C) 1999-2002 Mitel Networks Corporation
#		
# 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 of the License, 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.
#		
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
# 
# Technical support for this program is available from e-smith, inc.
# Please visit our web site www.e-smith.com for details.
#----------------------------------------------------------------------

package esmith;

use strict;
use Errno;
use esmith::config;
use esmith::templates;

my %conf;
tie %conf, 'esmith::config';

esmith::templates::processTemplate({
	TEMPLATE_PATH => '/etc/modules.conf',
	# Delete any blank lines after processing template
	FILTER => sub { $_[0] =~ /^\s*$/ ? '' : $_[0] },
    });
untie %conf;

opendir(BOOT, "/boot") or die("Can't open /boot directory: $!\n");

while (defined (my $file = readdir(BOOT)))
{
    next unless $file =~ /System.map-(.*)/;
    my $version = $1;
    open(MODULES, "</etc/modules.conf") or
	die "Could not read /etc/modules.conf: $!";

    my $pid = open(DEPMOD, "|-");
    $SIG{ALRM} = sub { die "whoops, depmod pipe broke" };

    if ($pid)
    {  # parent
	while (<MODULES>)
	{
	    s/\$\(\/bin\/uname -r\)/$version/;
	    print DEPMOD;
	}
	close(DEPMOD) || warn "depmod exited $?";
	close(MODULES);
    }
    else
    {     # child
	exec("/sbin/depmod",
		    "-C", "/dev/stdin",
		    "-a",
		    "-F", "/boot/System.map-$version",
		    "$version")
	    or die "can't exec depmod: $!";
	# NOTREACHED
    }
}
closedir(BOOT) or die("Can't close /boot: $!\n");

exit (0);
