Changeset 29508


Ignore:
Timestamp:
2014-12-01T17:44:17+13:00 (9 years ago)
Author:
Jeremy Symon
Message:

Makefile generater now also generates package manager scripts. Generated scripts are tested and working on Arch

Location:
main/trunk/package-kits/linux
Files:
11 added
3 deleted
14 edited
4 copied

Legend:

Unmodified
Added
Removed
  • main/trunk/package-kits/linux/generate

    r29481 r29508  
    1010use File::Basename;
    1111use File::Path 'make_path';
    12 use File::Copy;
     12use File::Copy 'cp';
    1313use Storable 'dclone';
     14use Digest::MD5;
     15
    1416
    1517my $USAGE = "Usage: " . basename($0) . " <platforms> <packages>
    16     platforms: A comma separated list of the platforms defined in pkg.in/platforms
     18    platforms: A comma separated list of the platforms defined in platforms/
    1719               Or 'all' (for all platforms)
    18     packages:  A comma separated list of the packages defined in pkg.in/packages
    19                Or 'all' (for all platforms)
     20    packages:  A comma separated list of the packages defined in packages/
     21               Or 'all' (for all packages)
    2022";
    2123
     
    3234}
    3335
     36sub empty {
     37    /^\s*$/ and return 1;
     38}
     39
     40sub comment {
     41    /^\s*#/ and return 1;
     42}
     43
     44sub trim {
     45    for (@_) {
     46        s/^\s+|\s+$//g;
     47    }
     48    return @_;
     49}
     50
     51sub copydir {
     52    my ($src, $dst, $subst) = @_;
     53    mkdir $dst;
     54    opendir my $DIRFH, $src or die "Could not open '$src': $!";
     55    while (readdir $DIRFH) {
     56        next if ($_ eq '.' or $_ eq '..');
     57        print "    - $dst/$_\n";
     58        if (-d "$src/$_") {
     59            # copy folder
     60            copydir ("$src/$_", "$dst/$_", $subst);
     61        } elsif (-B "$src/$_") {
     62            # copy binary file
     63            cp "$src/$_", "$dst/$_" or die "Failed to copy '$_': $!";
     64        } else {
     65            # copy normal file
     66            my $newFile = "$dst/$_";
     67            open OUT, '>', $newFile
     68                or die "Failed to open '$_' for writing: $!";
     69            open IN, '<', "$src/$_"
     70                or die "Failed to open '$_' for reading: $!";
     71            while (<IN>) {
     72                s/@([\w]+)@/$subst->{$1}/g;
     73                print OUT;
     74            }
     75            my $perms = (stat IN)[2] & 07777;
     76            close IN;
     77            close OUT;
     78            chmod ($perms | 0600, $newFile);
     79        }
     80    }
     81    closedir $DIRFH;
     82}
     83
     84my %escape = (
     85    "n" => "\n",
     86    "\\" => "\\",
     87    " " => " "
     88);
     89
    3490sub readvar {
    3591    my ($vars, $line) = @_;
    36     my ($var, $val) = split "=", $line;
     92    my ($var, $val) = trim (split ":", $line, 2);
    3793    defined $var and defined $val or die "Invalid variable assignment: '$line'";
    38     $val =~ s/%([\w]+)%/$vars->{$1}/g;
     94    local $/ = '';
     95    $val =~ s/\\([ \\n]|$)/$escape{$1}/g;
     96    $val =~ s/@([\w]+)@/$vars->{$1}/g;
    3997    $vars->{$var} = $val;
    4098}
    4199
    42 my @platforms = globbify "pkg.in/platforms", shift;
    43 my @packages  = globbify "pkg.in/packages",  shift;
     100sub addsource {
     101    my ($vars, $source) = @_;
     102    my $md5 = Digest::MD5->new;
     103    open my $MD5FH, '<', $source;
     104    binmode $MD5FH;
     105    $md5->addfile ($MD5FH);
     106    my $field_separator = $vars->{'FIELD_SEPARATOR'};
     107    $vars->{'SOURCES'} .= $field_separator . basename($source);
     108    $vars->{'SOURCE_SUMS'} .= $field_separator . $md5->hexdigest;
     109    close $MD5FH;
     110}
     111
     112my @platforms = globbify "platforms", shift;
     113my @packages  = globbify "packages",  shift;
    44114
    45115for (@platforms) {
    46     my ($platform) = /^pkg\.in\/platforms\/(.*)$/;
    47     my %platform_vars = ();
    48     open FH, '<', $_ or die "Failed to open '$_' for reading: $!";
    49     # read platform variable definitons
    50     while (<FH>) {
     116    my $platform = basename $_;
     117    print "$platform\n";
     118
     119    open PLATFORM, '<', $_;
     120    my %platform_vars;
     121    while (<PLATFORM>) {
    51122        chomp;
     123        (comment or empty) and next;
    52124        readvar \%platform_vars, $_;
    53125    }
    54     close FH;
     126    close PLATFORM;
    55127
    56128    for (@packages) {
    57         my ($package) = /^pkg\.in\/packages\/(.*)$/;
     129        my $package = basename $_;
     130        print " - $package\n";
    58131        my $package_path = "build/$platform/$package";
    59132        make_path $package_path;
    60133
    61         open FH, '<', $_ or die "Failed to open '$_' for reading: $!";
    62 
    63         # read package file dependencies
    64         while (<FH>) {
     134        open PACKAGE, '<', $_;
     135        my %package_vars = %{dclone \%platform_vars};
     136        while (<PACKAGE>) {
    65137            chomp;
    66             /^[\s]*$/ and last;
    67             -e "pkg.in/files/$_" or die "Could not find '", $_, "'";
    68             copy "pkg.in/files/$_", "$package_path/$_" or die "Failed to copy '$_': $!";
     138            empty and last;
     139            comment and next;
     140            readvar \%package_vars, $_;
     141        }
     142        for (keys %package_vars) {
     143            defined $package_vars{$_} or $package_vars{$_} = ' ';
     144            # print "$_ = $package_vars{$_}\n";
    69145        }
    70146
    71         my %package_vars = %{dclone \%platform_vars};
    72         # read package variable definitions
    73         while (<FH>) {
     147        while (<PACKAGE>) {
    74148            chomp;
    75             /^[\s]*$/ and last;
    76             readvar \%package_vars, $_;
     149            empty and last;
     150            comment and next;
     151            cp "files/$_", "$package_path/$_" or die "Failed to copy '$_': $!";
     152            addsource \%package_vars, "$package_path/$_";
    77153        }
    78        
     154
     155        # write the makefile
    79156        my $outfile = "$package_path/Makefile";
    80         open OUT, '>', $outfile or die "Failed to open '$outfile' for writing: $!";
    81         # read package makefile segments
    82         while (<FH>) {
     157        print "    - $outfile\n";
     158        open MAKEFILE, '>', $outfile
     159            or die "Failed to open '$outfile' for writing: $!";
     160        while (<PACKAGE>) {
    83161            chomp;
    84             open SEG, '<', "pkg.in/segments/$_" or die "Failed to open '$_' for reading: $!";
    85             # write the makefile
    86             while (<SEG>) {
    87                 s/%([\w]+)%/$package_vars{$1}/g;
    88                 print OUT;
     162            empty and last;
     163            comment and next;
     164            open IN, '<', "segments/$_"
     165                or die "Failed to open '$_' for reading: $!";
     166            while (<IN>) {
     167                s/@([\w]+)@/$package_vars{$1}/g;
     168                print MAKEFILE;
    89169            }
    90             close SEG;
     170            close IN;
    91171        }
    92         close FH;
    93         close OUT;
     172        close MAKEFILE;
     173        close PACKAGE;
     174        addsource \%package_vars, $outfile;
     175
     176        # write the package manager files
     177        copydir ("managers/$platform_vars{'MANAGER'}", $package_path, \%package_vars);
    94178    }
    95     print "Generated $platform build scripts in build/$platform/\n";
    96179}
  • main/trunk/package-kits/linux/packages/demo

    r29481 r29508  
     1SVN_LOCATION:           http://svn.greenstone.org/main/trunk/greenstone3/web/sites/localsite/collect
     2NAME:                   greenstone-demo
     3VERSION:                3.06
     4RELEASE:                1
     5DESCRIPTION_SHORT:      short description
     6DESCRIPTION:            description
     7HOMEPAGE:               http://greenstone.org
     8ARCHITECTURE:           i686 x86_64
     9LICENSE_SHORT:          GPL-2
     10LICENSE:                license
     11DEPENDS:                @PKG_GREENSTONE@
     12OPTDEPENDS:             
     13MAKEDEPENDS:            @PKG_GREENSTONE_TOOLS@ @PKG_SVN@ @PKG_RSYNC@
     14PROVIDES:               
     15
    116build-demo.sh
    2 
    3 SVN_LOCATION=http://svn.greenstone.org/main/trunk/greenstone3/web/sites/localsite/collect
    417
    518base
  • main/trunk/package-kits/linux/packages/gli

    r29481 r29508  
     1SVN_LOCATION:           http://svn.greenstone.org/main/trunk/gli
     2NAME:                   greenstone-gli
     3VERSION:                3.06
     4RELEASE:                1
     5DESCRIPTION_SHORT:      short description
     6DESCRIPTION:            description
     7HOMEPAGE:               http://greenstone.org
     8ARCHITECTURE:           any
     9LICENSE_SHORT:          GPL-2
     10LICENSE:                license
     11DEPENDS:                @PKG_JAVA_JRE@ @PKG_GREENSTONE_TOOLS@
     12OPTDEPENDS:             
     13MAKEDEPENDS:            @PKG_JAVA_JDK@ @PKG_SVN@ @PKG_RSYNC@
     14PROVIDES:               
     15
    116gli
    2 
    3 SVN_LOCATION=http://svn.greenstone.org/main/trunk/gli
    417
    518base
  • main/trunk/package-kits/linux/packages/main

    r29481 r29508  
     1SVN_LOCATION:           http://svn.greenstone.org/main/trunk/greenstone3
     2NAME:                   greenstone
     3VERSION:                3.06
     4RELEASE:                1
     5DESCRIPTION_SHORT:      short description
     6DESCRIPTION:            description
     7HOMEPAGE:               http://greenstone.org
     8ARCHITECTURE:           i686 x86_64
     9LICENSE_SHORT:          GPL-2
     10LICENSE:                license
     11DEPENDS:                @PKG_JAVA_JRE@ @PKG_TOMCAT@
     12OPTDEPENDS:             @PKG_GREENSTONE_DEMO@ @PKG_GREENSTONE_TOOLS@
     13MAKEDEPENDS:            @PKG_JAVA_JDK@ @PKG_SVN@ @PKG_ANT@ @PKG_PATCH@ @PKG_AUTOCONF@ @PKG_GCC@ @PKG_MAKE@ @PKG_RSYNC@
     14PROVIDES:               
     15
    116build.properties
    217greenstone
     
    621wvWare
    722
    8 SVN_LOCATION=http://svn.greenstone.org/main/trunk/greenstone3
    9 
    1023base
    1124src
  • main/trunk/package-kits/linux/packages/tools

    r29481 r29508  
     1SVN_LOCATION:           http://svn.greenstone.org/main/trunk/greenstone3
     2NAME:                   greenstone-tools
     3VERSION:                3.06
     4RELEASE:                1
     5DESCRIPTION_SHORT:      short description
     6DESCRIPTION:            description
     7HOMEPAGE:               http://greenstone.org
     8ARCHITECTURE:           i686 x86_64
     9LICENSE_SHORT:          GPL-2
     10LICENSE:                license
     11DEPENDS:                @PKG_WVWARE@ @PKG_PERL@ @PKG_IMAGEMAGICK@
     12OPTDEPENDS:             @PKG_GLI@
     13MAKEDEPENDS:            @PKG_JAVA_JDK@ @PKG_SVN@ @PKG_ANT@ @PKG_PATCH@ @PKG_AUTOCONF@ @PKG_GCC@ @PKG_MAKE@ @PKG_RSYNC@
     14PROVIDES:               
     15
    116build.properties
    217greenstone
     
    621wvWare
    722
    8 SVN_LOCATION=http://svn.greenstone.org/main/trunk/greenstone3
    9 
    1023base
    1124src
  • main/trunk/package-kits/linux/platforms/arch

    r29481 r29508  
    1 SYSTEMLIB=/usr/lib
    2 SYSTEMBIN=/usr/bin
    3 SYSTEMJAVA=%SYSTEMLIB%/jvm/default
    4 GSSRV=/srv/gsdl
    5 TOMCATLIB=/usr/share/java/tomcat7
    6 TOMCATCONF=/etc/tomcat7/Catalina/localhost
    7 GSTOOLS=/opt/greenstone
     1MANAGER:                pacman
     2FIELD_SEPARATOR:        \n
     3
     4SYSTEMLIB:              /usr/lib
     5SYSTEMBIN:              /usr/bin
     6SYSTEMJAVA:             @SYSTEMLIB@/jvm/default
     7GSSRV:                  /srv/gsdl
     8TOMCATLIB:              /usr/share/java/tomcat7
     9TOMCATCONF:             /etc/tomcat7/Catalina/localhost
     10GSTOOLS:                /opt/greenstone
     11
     12PKG_GREENSTONE:         'greenstone'
     13PKG_GREENSTONE_TOOLS:   'greenstone-tools'
     14PKG_GREENSTONE_DEMO:    'greenstone-demo'
     15PKG_GLI:                'gli'
     16PKG_SVN:                'svn'
     17PKG_JAVA_JRE:           'java-runtime=7'
     18PKG_TOMCAT:             'tomcat7' 'tomcat-native'
     19PKG_JAVA_JDK:           'java-environment=7'
     20PKG_ANT:                'apache-ant'
     21PKG_PATCH:              'patch'
     22PKG_AUTOCONF:           'autoconf'
     23PKG_GCC:                'gcc'
     24PKG_MAKE:               'make'
     25PKG_WVWARE:             'wv'
     26PKG_PERL:               'perl' 'perl-xml-parser' 'perl-text-iconv'
     27PKG_IMAGEMAGICK:        'imagemagick'
     28PKG_RSYNC:              'rsync'
  • main/trunk/package-kits/linux/platforms/fedora

    r29481 r29508  
    1 SYSTEMLIB=/usr/lib
    2 SYSTEMBIN=/usr/bin
    3 SYSTEMJAVA=%SYSTEMLIB%/jvm/java
    4 GSSRV=/srv/gsdl
    5 TOMCATLIB=/usr/share/tomcat7/lib
    6 TOMCATCONF=/etc/tomcat7/Catalina/localhost
    7 GSTOOLS=/opt/greenstone
     1MANAGER:                rpm
     2FIELD_SEPARATOR:        ,
     3
     4SYSTEMLIB:              /usr/lib
     5SYSTEMBIN:              /usr/bin
     6SYSTEMJAVA:             @SYSTEMLIB@/jvm/java
     7GSSRV:                  /srv/gsdl
     8TOMCATLIB:              /usr/share/tomcat7/lib
     9TOMCATCONF:             /etc/tomcat7/Catalina/localhost
     10GSTOOLS:                /opt/greenstone
     11
     12PKG_GREENSTONE:         'greenstone'
     13PKG_GREENSTONE_TOOLS:   'greenstone-tools'
     14PKG_GREENSTONE_DEMO:    'greenstone-demo'
     15PKG_GLI:                'gli'
     16PKG_SVN:                'svn'
     17PKG_JAVA_JRE:           'java-runtime=7'
     18PKG_TOMCAT:             'tomcat7' 'tomcat-native'
     19PKG_JAVA_JDK:           'java-environment=7'
     20PKG_ANT:                'apache-ant'
     21PKG_PATCH:              'patch'
     22PKG_AUTOCONF:           'autoconf'
     23PKG_GCC:                'gcc'
     24PKG_MAKE:               'make'
     25PKG_WVWARE:             'wv'
     26PKG_PERL:               'perl' 'perl-xml-parser' 'perl-text-iconv'
     27PKG_IMAGEMAGICK:        'imagemagick'
     28PKG_RSYNC:              'rsync'
  • main/trunk/package-kits/linux/platforms/ubuntu

    r29481 r29508  
    1 SYSTEMLIB=/usr/lib
    2 SYSTEMBIN=/usr/bin
    3 SYSTEMJAVA=%SYSTEMLIB%/jvm/default-java
    4 GSSRV=/srv/gsdl
    5 TOMCATLIB=/usr/share/tomcat7/lib
    6 TOMCATCONF=/etc/tomcat7/Catalina/localhost
    7 GSTOOLS=/opt/greenstone
     1MANAGER:                apt
     2FIELD_SEPARATOR:        ,
     3
     4SYSTEMLIB:              /usr/lib
     5SYSTEMBIN:              /usr/bin
     6SYSTEMJAVA:             @SYSTEMLIB@/jvm/default-java
     7GSSRV:                  /srv/gsdl
     8TOMCATLIB:              /usr/share/tomcat7/lib
     9TOMCATCONF:             /etc/tomcat7/Catalina/localhost
     10GSTOOLS:                /opt/greenstone
     11
     12PKG_GREENSTONE:         greenstone,
     13PKG_GREENSTONE_TOOLS:   greenstone-tools,
     14PKG_GREENSTONE_DEMO:    greenstone-demo,
     15PKG_GLI:                gli,
     16PKG_SVN:                subversion,
     17PKG_JAVA_JRE:           default-jre,
     18PKG_TOMCAT:             tomcat7,
     19PKG_JAVA_JDK:           default-jdk,
     20PKG_ANT:                ant,
     21PKG_PATCH:              patch,
     22PKG_AUTOCONF:           autoconf,
     23PKG_GCC:                gcc,
     24PKG_MAKE:               make,
     25PKG_WVWARE:             wv,
     26PKG_PERL:               perl,
     27PKG_IMAGEMAGICK:        imagemagick,
     28PKG_RSYNC:              rsync,
  • main/trunk/package-kits/linux/segments/base

    r29481 r29508  
    1 systemlib  := %SYSTEMLIB%
    2 systembin  := %SYSTEMBIN%
    3 java       := %SYSTEMJAVA%
    4 gssrv      := %GSSRV%
    5 tomcatlib  := %TOMCATLIB%
    6 tomcatconf := %TOMCATCONF%
    7 gstools    := %GSTOOLS%
     1systemlib  := @SYSTEMLIB@
     2systembin  := @SYSTEMBIN@
     3java       := @SYSTEMJAVA@
     4gssrv      := @GSSRV@
     5tomcatlib  := @TOMCATLIB@
     6tomcatconf := @TOMCATCONF@
     7gstools    := @GSTOOLS@
    88
    99DESTDIR    ?= /
  • main/trunk/package-kits/linux/segments/demo

    r29481 r29508  
    44    touch build
    55
    6 install: build
    7     @echo "Building demo collections"
     6install:
    87    install -d $(DESTDIR)/$(gssrv)/sites/localsite
    98    rsync -a --info=STATS --exclude .svn src/ $(DESTDIR)/$(gssrv)/sites/localsite/collect/
  • main/trunk/package-kits/linux/segments/gli

    r29481 r29508  
    77    touch build
    88
    9 install: build
     9install:
    1010    install -d $(DESTDIR)/$(gli)
    1111    rsync -a --info=STATS --exclude src --exclude .svn src/ $(DESTDIR)/$(gli)
  • main/trunk/package-kits/linux/segments/main

    r29481 r29508  
    1 install: build
     1install:
    22    install -d $(DESTDIR)/$(gssrv) $(DESTDIR)/$(systemlib) $(DESTDIR)/$(tomcatlib)
    33    install -dm775 $(DESTDIR)/$(tomcatlib)
  • main/trunk/package-kits/linux/segments/src

    r29481 r29508  
    11svn:
    22    @echo "Getting latest source"
    3     svn co %SVN_LOCATION% svn
     3    svn co @SVN_LOCATION@ svn
    44
    55src: svn
  • main/trunk/package-kits/linux/segments/tools

    r29481 r29508  
    1 install: build
     1install:
    22    install -d $(DESTDIR)/$(gstools)
    33    rsync -a --info=STATS --exclude build-src --exclude common-src --exclude collect/demo --exclude .svn src/gs2build $(DESTDIR)/$(gstools)/
Note: See TracChangeset for help on using the changeset viewer.