summaryrefslogtreecommitdiff
path: root/experimental/gnu-install
blob: af29a47d38db876598d75fe06d45e800d41e66e4 (plain)
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
#!/usr/bin/env perl
use strict;
use warnings;
use DBI;

#### Begin Section: Useful webpages
# http://directory.fsf.org/GNU/ Directory of GNU software
# http://sql-info.de/mysql/examples/Perl-DBI-examples.html
# http://mailliststock.wordpress.com/2007/03/01/sqlite-examples-with-bash-perl-and-python/
#### End Section: Useful webpages

my $repository = '/tmp/';
my $stow_dir = '/stow';
my $target_dir = 
my $su_command = 'sudo';
my $tar_command = 'tar --verbose --extract --file';
my $database = 'gnu.db';
unlink($database);

my $dbh = DBI->connect("dbi:SQLite:$database", "", "", {RaiseError => 1, AutoCommit => 1});
# su -c 'aptitude install libdbd-sqlite3-perl' on a Debian system TDW 2009-04-19

&print_software;
&stow_gnu_software($ARGV[0]);

################################################ Subroutines only below this line ############################

sub stow_gnu_software {
    my ( $software ) = @_;
    print "\t$software\n";
#        $dbh->do("CREATE TABLE gnu_software (id INTEGER PRIMARY KEY, short_name TEXT UNIQUE, name TEXT, latest_version TEXT, date_checked DATE )");
    my $sth_id = $dbh->prepare("SELECT id, latest_version FROM gnu_software WHERE short_name = \'$software\'");
    $sth_id->execute();
    my ($software_id, $version) = $sth_id->fetchrow_array();
    print "$software => $version\n";
    # Given software short name, get id
    # Given id, get version
    my $all = $dbh->selectall_arrayref("SELECT * FROM mirror_url");
    foreach my $row (@$all) {
	my ($software_id, $country_id, $region_id, $url, $date_checked ) = @$row;
    }
    my $sth = $dbh->prepare('SELECT url FROM mirror_url WHERE id = ?');
    $sth->execute(1);
    my $url = $sth->fetchrow_array();
    my $sth2 = $dbh->prepare('SELECT directory, latest_tarball FROM latest_tarball WHERE gnu_software_id = ?');
    $sth2->execute($software_id);
    my ( $directory, $tarball ) = $sth2->fetchrow_array;
    my $download_command = "wget --no-clobber ${url}${directory}/$tarball";
    system ("$download_command");
    system ("$tar_command $tarball");
    chdir ("$software-$version");
    open(OUT, ">stow-$software-$version");
    print OUT "#!/bin/bash\n";
    print OUT "set -o errexit # exit on error\n";
    print OUT "./configure --prefix=/usr/local\n";
    print OUT "make\n";
    print OUT "$su_command make DESTDIR=$stow_dir/$software-$version install\n";
    print OUT "$su_command stow $software-$version\n";
    print OUT "$su_command /sbin/ldconfig -v\n";
    close(OUT);
}

sub print_software {
    print "=================================== Table gnu_software =================================\n";
    # $dbh->do("CREATE TABLE gnu_software (id INTEGER PRIMARY KEY, short_name TEXT UNIQUE, name TEXT, latest_version TEXT, date_checked DATE )");
    my $all = $dbh->selectall_arrayref("SELECT * FROM gnu_software ORDER BY short_name");
    foreach my $row (@$all) {
	my ($id, $short_name, $name, $latest_version, $date_checked ) = @$row;
	print "$short_name\t$latest_version v.$latest_version\t$name\n";
    }
}