source: trunk/lib/OpenGuides/Build.pm @ 530

Last change on this file since 530 was 530, checked in by Dominic Hargreaves, 17 years ago

Change custom template locations.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.4 KB
Line 
1package OpenGuides::Build;
2
3use strict;
4use Module::Build;
5use base 'Module::Build';
6
7sub ACTION_install {
8    my $self = shift;
9    $self->SUPER::ACTION_install;
10    $self->ACTION_install_extras;
11
12    eval "use Config::Tiny";
13    die "Config::Tiny is required to set up this application.\n" if $@;
14
15    my $config = Config::Tiny->read("wiki.conf");
16
17    # Initialise the database if necessary.
18    my $dbname = $config->{_}->{dbname};
19    my $dbuser = $config->{_}->{dbuser};
20    my $dbpass = $config->{_}->{dbpass};
21    my $dbhost = $config->{_}->{dbhost};
22    my $dbtype = $config->{_}->{dbtype};
23
24    my %cgi_wiki_exts = ( postgres => "Pg",
25                          mysql    => "MySQL",
26                          sqlite   => "SQLite" );
27
28    my $cgi_wiki_module = "CGI::Wiki::Setup::" . $cgi_wiki_exts{$dbtype};
29    eval "require $cgi_wiki_module";
30    die "There was a problem: $@" if $@;
31
32    print "Checking database schema...\n";
33    {
34        no strict 'refs';
35        &{$cgi_wiki_module . "::setup"}( $dbname, $dbuser, $dbpass, $dbhost );
36    }
37}
38
39sub ACTION_fakeinstall {
40    my $self = shift;
41    $self->SUPER::ACTION_fakeinstall;
42    $self->ACTION_install_extras( fake => 1 );
43    print "Checking database schema...\n";
44}
45
46sub ACTION_install_extras {
47    my ($self, %args) = @_;
48    my $FAKE = $args{fake} || 0;
49
50    eval "use Config::Tiny";
51    die "Config::Tiny is required to set up this application.\n" if $@;
52
53    my $config = Config::Tiny->read("wiki.conf");
54
55    # Install the scripts where we were told to.
56    my $install_directory    = $config->{_}->{install_directory};
57    my $script_name          = $config->{_}->{script_name};
58    my $template_path        = $config->{_}->{template_path};
59    my $custom_template_path = $config->{_}->{custom_template_path};
60    my $custom_lib_path      = $config->{_}->{custom_lib_path};
61    my @extra_scripts        = @{ $self->{config}{__extra_scripts} };
62    my @templates            = @{ $self->{config}{__templates} };
63
64    print "Installing scripts to $install_directory:\n";
65    # Allow for blank script_name - assume "index.cgi".
66        my $script_filename = $script_name || "index.cgi";
67    if ( $FAKE ) {
68        print "wiki.cgi -> $install_directory/$script_filename (FAKE)\n";
69    } else {
70        if ( $script_filename ne "wiki.cgi" ) {
71            File::Copy::copy("wiki.cgi", $script_filename)
72                or die "Can't copy('wiki.cgi', '$script_filename'): $!";
73        }
74        my $copy = $self->copy_if_modified(
75                                            $script_filename,
76                                            $install_directory
77                                          );
78        if ( $copy ) {
79            $self->fix_shebang_line($copy);
80            $self->make_executable($copy);
81            $self->add_custom_lib_path( $copy, $custom_lib_path )
82              if $custom_lib_path;
83        } else {
84            print "Skipping $install_directory/$script_filename (unchanged)\n";
85        }
86        print "(Really: wiki.cgi -> $install_directory/$script_filename)\n"
87            unless $script_filename eq "wiki.cgi";
88    }
89
90    foreach my $script ( @extra_scripts ) {
91        if ( $FAKE ) {
92            print "$script -> $install_directory/$script (FAKE)\n";
93        } else {
94            my $copy = $self->copy_if_modified( $script, $install_directory );
95            if ( $copy ) {
96                $self->fix_shebang_line($copy);
97                $self->make_executable($copy) unless $script eq "wiki.conf";
98                $self->add_custom_lib_path( $copy, $custom_lib_path )
99                  if $custom_lib_path;
100            } else {
101                print "Skipping $install_directory/$script (unchanged)\n";
102            }
103        }
104    }
105
106    print "Installing templates to $template_path:\n";
107    foreach my $template ( @templates ) {
108        if ( $FAKE ) {
109            print "templates/$template -> $template_path/$template (FAKE)\n";
110        } else {
111            $self->copy_if_modified(from => "templates/$template", to_dir => $template_path, flatten => 1)
112                or print "Skipping $template_path/$template (unchanged)\n";
113        }
114    }
115    print "Making sure that $custom_template_path exists.\n";
116    mkdir $custom_template_path or warn "Could not make $custom_template_path";
117}
118
119sub add_custom_lib_path {
120    my ($self, $copy, $lib_path) = @_;
121    local $/ = undef;
122    open my $fh, $copy or die $!;
123    my $content = <$fh>;
124    close $fh or die $!;
125    $content =~ s|use strict;|use strict\;\nuse lib qw( $lib_path )\;|s;
126    open $fh, ">$copy" or die $!;
127    print $fh $content;
128    close $fh or die $!;
129    return 1;
130}
131
1321;
Note: See TracBrowser for help on using the repository browser.