File: configure_apache.pl

package info (click to toggle)
libhtml-mason-perl 1%3A1.26-1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 1,636 kB
  • ctags: 1,260
  • sloc: perl: 13,880; sh: 154; makefile: 47
file content (98 lines) | stat: -rwxr-xr-x 2,220 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
use strict;

use File::Basename;
use File::Spec;

my $params_file = './apache_install.txt';
# main
{
    exit unless -e $params_file;

    my %params = read_params();
    my $mason_conf = write_mason_conf(%params);
    alter_httpd_conf( mason_config_file => $mason_conf, %params );
}

sub read_params
{
    local *INST;
    open INST, "<$params_file";
    my $install;
    eval join '', <INST>;
    die $@ if $@;

    return %$install;
}

sub write_mason_conf
{
    my %params = @_;

    my $conf = <<"EOF";
PerlSetVar MasonCompRoot "$params{comp_root}"
PerlSetVar MasonDataDir  "$params{data_dir}"
PerlModule HTML::Mason::ApacheHandler

<Directory "$params{comp_root}">
EOF

    if ( $params{extensions} )
    {
	my $ext_re = '(';
	$ext_re .= join '|', map { "\\.$_" } @{ $params{extensions} };
	$ext_re .= ')$';

	$conf .= qq|  <FilesMatch "$ext_re">\n|;
    }

    $conf .= <<"EOF";
    SetHandler perl-script
    PerlHandler HTML::Mason::ApacheHandler
EOF
    $conf .= "  </FilesMatch>\n" if $params{extensions};

    $conf .= "</Directory>\n";

    my $conf_dir = dirname( $params{apache_config_file} );
    my $conf_file = File::Spec->catfile( $conf_dir, 'mason.conf' );

    local *CONF;
    open CONF, ">$conf_file" or die "Cannot write $conf_file: $!";
    print CONF $conf;
    close CONF or die "Can't close $conf_file: $!";

    return $conf_file;
}

sub alter_httpd_conf
{
    my %params = @_;

    local *CONF;
    open CONF, "<$params{apache_config_file}"
	or die "Can't read $params{apache_config_file}: $!";

    my $new = '';
    while (<CONF>)
    {
	if ( /^# Mason config/ )
	{
	    my $skip = <CONF>; # just eat another line
	    next;
	}
	$new .= $_;
    }
    # clear off last two newlines otherwise file will add one extra
    # blank line every time this script runs
    chomp $new;
    chomp $new;
    $new .= "\n\n# Mason config\nInclude $params{mason_config_file}\n";

    close CONF or die "Can't close $params{apache_config_file}: $!";

    open CONF, ">$params{apache_config_file}"
	or die "Can't write to $params{apache_config_file}: $!";
    print CONF $new
	or die "Can't write to $params{apache_config_file}: $!";
    close CONF or die "Can't close $params{apache_config_file}: $!";
}