Changeset 29536


Ignore:
Timestamp:
2014-12-05T18:12:23+13:00 (9 years ago)
Author:
Jeremy Symon
Message:

Working on a more flexible generation system. Only working for pacman so far, so if you want to generate packages you'll need to check out an old revision. The reason behind this change is that I discovered that the greenstone user database really needs to be owned by the tomcat user rather than root (things such as edit mode don't work properly otherwise), and setting file ownership requires .install files, which was not really possible with the existing system. At this point it would certainly have been faster to just write all the scripts by hand, but this way I get to learn perl.

Location:
main/trunk/package-kits/linux
Files:
10 added
8 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/package-kits/linux/distros/arch

    r29527 r29536  
    11MANAGER:                pacman
    2 FIELD_SEPARATOR:        \n
    32
    43SYSTEMLIB:              /usr/lib
     
    1110GLI:                    /opt/gli
    1211
    13 PKG_GREENSTONE:         'greenstone'
    14 PKG_GREENSTONE_TOOLS:   'greenstone-tools'
    15 PKG_GREENSTONE_DEMO:    'greenstone-demo'
    16 PKG_GLI:                'gli'
    1712PKG_SVN:                'svn'
    1813PKG_JAVA_JRE:           'java-runtime=7'
  • main/trunk/package-kits/linux/distros/fedora

    r29528 r29536  
    11MANAGER:                rpm
    2 FIELD_SEPARATOR:        ,
    32
    43SYSTEMLIB:              /usr/lib
     
    1110GLI:                    /usr/share/gli
    1211
    13 PKG_GREENSTONE:         greenstone,
    14 PKG_GREENSTONE_TOOLS:   greenstone-tools,
    15 PKG_GREENSTONE_DEMO:    greenstone-demo,
    16 PKG_GLI:                gli,
    1712PKG_SVN:                svn,
    1813PKG_JAVA_JRE:           java >= 7,
  • main/trunk/package-kits/linux/distros/ubuntu

    r29516 r29536  
    11MANAGER:                apt
    2 FIELD_SEPARATOR:        ,
    32
    43SYSTEMLIB:              /usr/lib
     
    1110GLI:                    /opt/gli
    1211
    13 PKG_GREENSTONE:         greenstone,
    14 PKG_GREENSTONE_TOOLS:   greenstone-tools,
    15 PKG_GREENSTONE_DEMO:    greenstone-demo,
    16 PKG_GLI:                gli,
    1712PKG_SVN:                subversion,
    1813PKG_JAVA_JRE:           default-jre,
  • main/trunk/package-kits/linux/generate

    r29526 r29536  
    22
    33# Generates Makefiles for different systems and packages
    4 # Uses a hashmap to do config variables  (see readvar for how variables are
    5 #  read in and an example of how they are resolved / used)
    64
    75use strict;
     
    97use utf8;
    108use File::Basename;
    11 use File::Path 'make_path';
    12 use File::Copy 'cp';
    13 use Storable 'dclone';
    14 use Digest::MD5;
    15 
     9use lib 'perllib';
     10use Greenstone::Helpers;
     11use Greenstone::Package;
    1612
    1713my $USAGE = "Usage: " . basename($0) . " <distros> <packages>
     
    2420$#ARGV == 1 or die $USAGE;
    2521
    26 sub globbify {
    27     my ($dir, $files) = @_;
    28     $files =~ /^all$/i and return glob "$dir/*";
    29     my @list = glob "$dir/{$files}";
    30     for (@list) {
    31         -f or die "Could not find '", $_, "'";
    32     }
    33     return @list;
    34 }
     22my @distros  = lsfiles "distros",  shift;
     23my @packages = lsfiles "packages", shift;
    3524
    36 sub empty {
    37     shift =~ /^\s*$/ and return 1;
    38 }
    39 
    40 sub comment {
    41     shift =~ /^\s*#/ and return 1;
    42 }
    43 
    44 sub trim {
    45     for (@_) {
    46         s/^\s+|\s+$//g;
    47     }
    48     return @_;
    49 }
    50 
    51 sub add {
    52     my ($src, $dst, $subst) = @_;
    53     $dst =~ s/@([\w]+)@/$subst->{$1}/g;
    54 
    55     if (-d $src) {
    56         mkdir $dst;
    57         opendir my $DIRFH, $src or die "Could not open '$src': $!";
    58         while (readdir $DIRFH) {
    59             next if ($_ eq '.' or $_ eq '..');
    60             add ("$src/$_", "$dst/$_", $subst);
    61         }
    62         closedir $DIRFH;
    63     } else {
    64         print '    - ', $dst, "\n";
    65         if (-B $src or $src =~ /\.patch$/i) {
    66             # copy binary file
    67             cp $src, $dst or die "Failed to copy '$src': $!";
    68         } else {
    69             # copy normal file
    70             open IN, '<', $src
    71                 or die "Failed to open '$src' for reading: $!";
    72             open OUT, '>', $dst
    73                 or die "Failed to open '$dst' for writing: $!";
    74             while (<IN>) {
    75                 s/@([\w]+)@/$subst->{$1}/g;
    76                 print OUT;
    77             }
    78             my $perms = (stat IN)[2] & 07777;
    79             close IN;
    80             close OUT;
    81             chmod ($perms | 0600, $dst);
    82         }
     25for my $distro (@distros) {
     26    print $distro, "\n";
     27    for my $package (@packages) {
     28        print "  - ", $package, "\n";
     29        makepkg (
     30            package => $package,
     31            distro  => $distro
     32        );
    8333    }
    8434}
    85 
    86 my %escape = (
    87     "n" => "\n",
    88     "\\" => "\\",
    89     " " => " "
    90 );
    91 
    92 sub readvar {
    93     my ($vars, $line) = @_;
    94     my ($var, $val) = trim (split ":", $line, 2);
    95     defined $var and defined $val or die "Invalid variable assignment: '$line'";
    96     local $/ = '';
    97     $val =~ s/@([\w]+)@/$vars->{$1}/g;
    98     $val =~ s/\\([ \\n]|$)/$escape{$1}/g;
    99     $vars->{$var} = $val;
    100 }
    101 
    102 sub addsource {
    103     my ($vars, $source) = @_;
    104     my $md5 = Digest::MD5->new;
    105     open my $MD5FH, '<', $source;
    106     binmode $MD5FH;
    107     $md5->addfile ($MD5FH);
    108     my $field_separator = $vars->{'FIELD_SEPARATOR'};
    109     $vars->{'SOURCES'} .= $field_separator . basename($source);
    110     $vars->{'SOURCE_SUMS'} .= $field_separator . $md5->hexdigest;
    111     close $MD5FH;
    112 }
    113 
    114 my @distros  = globbify "distros",  shift;
    115 my @packages = globbify "packages", shift;
    116 
    117 for my $dconf (@distros) {
    118     my $distro = basename $dconf;
    119     print "$distro\n";
    120 
    121     open DISTRO, '<', $dconf;
    122     my %distro_vars;
    123     while (my $var = <DISTRO>) {
    124         chomp $var;
    125         (comment $var or empty $var) and next;
    126         readvar \%distro_vars, $var;
    127     }
    128     close DISTRO;
    129 
    130     for my $pconf (@packages) {
    131         my $package = basename $pconf;
    132         print " - $package\n";
    133         my $package_path = "build/$distro/$package";
    134         make_path $package_path;
    135 
    136         open PACKAGE, '<', $pconf;
    137         my %package_vars = %{dclone \%distro_vars};
    138         while (my $var = <PACKAGE>) {
    139             chomp $var;
    140             empty $var and last;
    141             comment $var and next;
    142             readvar \%package_vars, $var;
    143         }
    144         for (keys %package_vars) {
    145             defined $package_vars{$_} or $package_vars{$_} = ' ';
    146             # print "$_ = $package_vars{$_}\n";
    147         }
    148 
    149         while (my $file = <PACKAGE>) {
    150             chomp $file;
    151             empty $file and last;
    152             comment $file and next;
    153             add ("files/$file", "$package_path/$file", \%package_vars);
    154             addsource (\%package_vars, "$package_path/$file");
    155         }
    156 
    157         # write the makefile
    158         my $outfile = "$package_path/Makefile";
    159         print "    - $outfile\n";
    160         open MAKEFILE, '>', $outfile
    161             or die "Failed to open '$outfile' for writing: $!";
    162         while (my $segment = <PACKAGE>) {
    163             chomp $segment;
    164             empty $segment and last;
    165             comment $segment and next;
    166             open IN, '<', "segments/$segment"
    167                 or die "Failed to open 'segments/$segment' for reading: $!";
    168             while (<IN>) {
    169                 s/@([\w]+)@/$package_vars{$1}/g;
    170                 print MAKEFILE;
    171             }
    172             close IN;
    173             print MAKEFILE "\n";
    174         }
    175         close PACKAGE;
    176         # add a target for packaging
    177         if (open IN, '<', "segments/$distro_vars{'MANAGER'}") {
    178             while (<IN>) {
    179                 s/@([\w]+)@/$package_vars{$1}/g;
    180                 print MAKEFILE;
    181             }
    182             close IN;
    183         }
    184         close MAKEFILE;
    185         addsource \%package_vars, $outfile;
    186 
    187         # write the package manager files
    188         add ("managers/$distro_vars{'MANAGER'}", $package_path, \%package_vars);
    189     }
    190 }
  • main/trunk/package-kits/linux/packages/demo

    r29526 r29536  
    11SVN_LOCATION:           http://svn.greenstone.org/main/trunk/greenstone3/web/sites/localsite/collect
    2 NAME:                   greenstone-demo
     2NAME:                   @PKG_GREENSTONE_DEMO@
    33VERSION:                3.06
    44RELEASE:                1
     
    99LICENSE_SHORT:          GPL-2
    1010LICENSE:                license
    11 DEPENDS:                @PKG_GREENSTONE@
    12 OPTDEPENDS:             
    13 MAKEDEPENDS:            @PKG_GREENSTONE_TOOLS@ @PKG_SVN@ @PKG_RSYNC@
    14 PROVIDES:               
    15 FILES:                  @GSSRV@/sites/localsite/collect/*
    1611
    17 build-demo.sh
     12DEPENDS:
     13    @PKG_GREENSTONE@
    1814
    19 base
    20 src
    21 clean
    22 demo
     15OPTDEPENDS:
     16
     17MAKEDEPENDS:
     18    @PKG_GREENSTONE_TOOLS@
     19    @PKG_SVN@
     20    @PKG_RSYNC@
     21
     22PROVIDES:
     23
     24FILES:
     25    @GSSRV@/sites/localsite/collect/*
     26
     27SOURCES:
     28    build-demo.sh
     29
     30MAKEFILE:
     31    base
     32    src
     33    clean
     34    demo
  • main/trunk/package-kits/linux/packages/gli

    r29526 r29536  
    11SVN_LOCATION:           http://svn.greenstone.org/main/trunk/gli
    2 NAME:                   greenstone-gli
     2NAME:                   @PKG_GLI@
    33VERSION:                3.06
    44RELEASE:                1
     
    99LICENSE_SHORT:          GPL-2
    1010LICENSE:                license
    11 DEPENDS:                @PKG_JAVA_JRE@ @PKG_GREENSTONE_TOOLS@
    12 OPTDEPENDS:             
    13 MAKEDEPENDS:            @PKG_JAVA_JDK@ @PKG_SVN@ @PKG_RSYNC@
    14 PROVIDES:               
    15 FILES:                  @GLI@\n%{_bindir}/*
    1611
    17 gli
     12DEPENDS:
     13    @PKG_JAVA_JRE@
     14    @PKG_GREENSTONE_TOOLS@
    1815
    19 base
    20 src
    21 clean
    22 gli
     16OPTDEPENDS:
     17
     18MAKEDEPENDS:
     19    @PKG_JAVA_JDK@
     20    @PKG_SVN@
     21    @PKG_RSYNC@
     22
     23PROVIDES:
     24
     25FILES:
     26    @GLI@
     27    %{_bindir}/*
     28
     29SOURCES:
     30    gli
     31
     32MAKEFILE:
     33    base
     34    src
     35    clean
     36    gli
  • main/trunk/package-kits/linux/packages/main

    r29526 r29536  
    11SVN_LOCATION:           http://svn.greenstone.org/main/trunk/greenstone3
    2 NAME:                   greenstone
     2NAME:                   @PKG_GREENSTONE@
    33VERSION:                3.06
    44RELEASE:                1
     
    99LICENSE_SHORT:          GPL-2
    1010LICENSE:                license
    11 DEPENDS:                @PKG_JAVA_JRE@ @PKG_TOMCAT@
    12 OPTDEPENDS:             @PKG_GREENSTONE_DEMO@ @PKG_GREENSTONE_TOOLS@
    13 MAKEDEPENDS:            @PKG_JAVA_JDK@ @PKG_SVN@ @PKG_ANT@ @PKG_PATCH@ @PKG_AUTOCONF@ @PKG_GCC@ @PKG_MAKE@ @PKG_RSYNC@
    14 PROVIDES:               
    15 FILES:                  @GSSRV@\n@TOMCATCONF@/*\n@TOMCATLIB@/*\n%{_libdir}/*
    1611
    17 build.properties
    18 greenstone3.xml
    19 gs2build.patch
    20 perl-util.patch
     12DEPENDS:
     13    @PKG_JAVA_JRE@
     14    @PKG_TOMCAT@
    2115
    22 base
    23 src
    24 clean
    25 build-core
    26 main
     16OPTDEPENDS:
     17    @PKG_GREENSTONE_DEMO@
     18    @PKG_GREENSTONE_TOOLS@
     19
     20MAKEDEPENDS:
     21    @PKG_JAVA_JDK@
     22    @PKG_SVN@
     23    @PKG_ANT@
     24    @PKG_PATCH@
     25    @PKG_AUTOCONF@
     26    @PKG_GCC@
     27    @PKG_MAKE@
     28    @PKG_RSYNC@
     29
     30PROVIDES:
     31
     32FILES:
     33    @GSSRV@
     34    @TOMCATCONF@/*
     35    @TOMCATLIB@/*
     36    %{_libdir}/*
     37
     38SOURCES:
     39    build.properties
     40    greenstone3.xml
     41    gs2build.patch
     42    perl-util.patch
     43
     44MAKEFILE:
     45    base
     46    src
     47    clean
     48    build-core
     49    main
  • main/trunk/package-kits/linux/packages/tools

    r29526 r29536  
    11SVN_LOCATION:           http://svn.greenstone.org/main/trunk/greenstone3
    2 NAME:                   greenstone-tools
     2NAME:                   @PKG_GREENSTONE_TOOLS@
    33VERSION:                3.06
    44RELEASE:                1
     
    99LICENSE_SHORT:          GPL-2
    1010LICENSE:                license
    11 DEPENDS:                @PKG_WVWARE@ @PKG_PERL@ @PKG_IMAGEMAGICK@
    12 OPTDEPENDS:             @PKG_GLI@
    13 MAKEDEPENDS:            @PKG_JAVA_JDK@ @PKG_SVN@ @PKG_ANT@ @PKG_PATCH@ @PKG_AUTOCONF@ @PKG_GCC@ @PKG_MAKE@ @PKG_RSYNC@
    14 PROVIDES:               
    15 FILES:                  @GSTOOLS@\n%{_bindir}/*
    1611
    17 build.properties
    18 greenstone
    19 greenstone3.xml
    20 gs2build.patch
    21 perl-util.patch
    22 wvWare
     12DEPENDS:
     13    @PKG_WVWARE@
     14    @PKG_PERL@
     15    @PKG_IMAGEMAGICK@
    2316
    24 base
    25 src
    26 clean
    27 build-core
    28 tools
     17OPTDEPENDS:
     18    @PKG_GLI@
     19
     20MAKEDEPENDS:
     21    @PKG_JAVA_JDK@
     22    @PKG_SVN@
     23    @PKG_ANT@
     24    @PKG_PATCH@
     25    @PKG_AUTOCONF@
     26    @PKG_GCC@
     27    @PKG_MAKE@
     28    @PKG_RSYNC@
     29
     30PROVIDES:
     31
     32FILES:
     33    @GSTOOLS@
     34    %{_bindir}/*
     35
     36SOURCES:
     37    build.properties
     38    greenstone
     39    greenstone3.xml
     40    gs2build.patch
     41    perl-util.patch
     42    wvWare
     43
     44MAKEFILE:
     45    base
     46    src
     47    clean
     48    build-core
     49    tools
Note: See TracChangeset for help on using the changeset viewer.