Update of /cvsroot/fink/experimental/rangerrick
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13127

Added Files:
        generate-infofiles.pl 
Removed Files:
        generate-kde.pl 
Log Message:
make the name more meaningful :)

--- generate-kde.pl DELETED ---

--- NEW FILE: generate-infofiles.pl ---
#!/usr/bin/perl

use strict;

use lib '/sw/lib/perl5';
use lib '/Users/ranger/cvs.build/fink/perlmod';
use lib '/Users/ranger/cvs/fink/perlmod';

use Clone qw(clone);
use File::Basename;
use File::Find;
use File::Path;
use Cwd 'abs_path';
use Fink;
use Fink::PkgVersion;
use Fink::Services qw(&read_properties_var &pkglist2lol &lol2pkglist);
use Data::Dumper;

Fink->import;

my $path = abs_path(dirname($0));

my @files = @ARGV;
my %files;

my $translate = 
'(openexr|gst.*0.10.*|gstreamer|gst-plugins|kde|postgres|libpq|libpg|wv2|icecream|qt3|qca|kgpg|xfree86|xorg|\\/mono\\.|libgdiplus|monodevelop|cocoa-sharp|perlmods|libsmoke|fung-calc|.*-pm.info$|libagg|doxygen1.3|piklab|poppler-qt3|distcc|gtk-sharp|gecko-sharp|gtksourceview-sharp|ikvm|ekg|gconfmm2|gnomoradio|libmusicbrainz4|libtunepimp|^taglib|dbus|libmath|glibmm|gconfmm|gtkmm|libxml\\\+\\\+|qca|libxine|imlib|libcapsi|libwpd|libpostproc|ffmpeg)';

my $package_lookup = {
        '10.3' => {
                '^libxine1(\S*)$'      => 'libxine$1',
                '^fontconfig2-shlibs$' => undef,
                '^libicu32-dev$'       => undef,
        },
        '10.4-transitional' => {
                '^libicu31-dev$'       => undef,
                '^gcc3.1$'             => undef,
        },
        '10.4' => {
                '^libicu31-dev$'       => undef,
                '^gcc3.1$'             => undef,
                '^gcc3.3$'             => undef,
#               '^mjpegtools2-dev$'    => 'mjpegtools1.8-dev',
#               '^mjpetools2-shlibs$'  => 'mjpegtools1.8-shlibs',
        },
};

my $version_lookup = {
        '10.4' => {
                '^abiword$'                                 => [ '2.2.7',       
 '1003' ],
                '^advancemame$'                             => [ '0.84.0',      
 '1020' ],
                '^apache2.*$'                               => [ '2.0.55',      
 '1010' ],
                
'^libapache2-mod-(actions|auth-anon|auth-dbm|auth-digest|bucketeer|cgid|expires|headers|info|isapi|mime-magic|proxy|proxy-connect|proxy-ftp|proxy-http|rewrite|speling|ssl|suexec|unique-id|usertrack|vhost-alias)$'
                              => [ '2.0.55',       '1010' ],
                '^apr(-ssl)?(-common|-shlibs)?$'            => [ '0.9.7',       
 '1011' ],
                '^apt(-dev|-shlibs)?$'                      => [ '0.5.4',       
 '1052' ],
                '^aqbanking$'                               => [ '1.0.4',       
 '1beta.1000' ],
                '^aqhbci(-.*)?$'                            => [ '1.0.2',       
 '1beta.1000' ],
                '^aquaterm(-dev|-shlibs)?$'                 => [ '1.0.0',       
 '1002' ],
                '^aspell(-dev|-shlibs)?$'                   => [ '0.50.5',      
 '1002' ],
                '^autotrace(-bin|-shlibs)?$'                => [ '0.31.1',      
 '1014' ],
                '^boost1.32-py..(-shlibs)?$'                => [ '1.32.0',      
 '1002' ],
                '^boost1.32.python(-shlibs)?$'              => [ '1.32.0',      
 '1011' ],
                '^ccp4(-.*)?$'                              => [ '5.99.5',      
 '1001' ],
                '^cdrdao$'                                  => [ '1.2.0',       
 '1010' ],
                '^dasher(-.*)?$'                            => [ '3.2.18',      
 '1001' ],
                '^dbus(-shlibs|-dev)?$'                     => [ '0.60',        
 '1003' ],
                '^dbus(-qt3|-qt4)(-shlibs|-dev)?$'          => [ '0.60',        
 '1001' ],
                '^dialog$'                                  => [ 
'0.9b-20020814', '1024' ],
                '^db3(-bin|-doc|-shlibs)?$'                 => [ '3.3.11',      
 '1027' ],
                '^db4(-bin|-doc|-shlibs)?$'                 => [ '4.0.14',      
 '1026' ],
                '^db41(-ssl)?(-bin|-doc|-shlibs)?$'         => [ '4.1.25',      
 '1023' ],
                '^db42(-ssl)?(-bin|-doc|-java|-shlibs)?$'   => [ '4.2.52',      
 '1017' ],
                '^db43(-ssl)?(-bin|-doc|-java|-shlibs)?$'   => [ '4.3.29',      
 '1001' ],
                '^db44(-aes)?(-bin|-doc|-java|-shlibs)?$'   => [ '4.4.16',      
 '1001' ],
                '^dods$'                                    => [ '3.4.5',       
 '1005' ],
                '^dpkg$'                                    => [ '1.10.21',     
 '1217' ],
                '^firefox(-dev|-shlibs)?$'                  => [ '1.0.7',       
 '1007' ],
                '^flac(-nox)?(-.*)?$'                       => [ '1.1.1',       
 '1011' ],
                '^fltk-x11(-shlibs)?$'                      => [ '1.1.6',       
 '11.1' ],
                '^gal21(-shlibs)?$'                         => [ '0.22',        
 '1014' ],
                '^gc(-shlibs)?$'                            => [ '6.4',         
 '1001' ],
                '^gconfmm2(-shlibs)?$'                      => [ '2.0.2',       
 '1022' ],
                '^gconfmm2.6(-dev|-shlibs)?$'               => [ '2.10.0',      
 '1002' ],
                '^gdal(-ssl)?(-dev|-doc|-grass|-shlibs)?$'  => [ '1.2.6',       
 '1005' ],
                '^gimp(-default|-dev|-shlibs)?$'            => [ '1.2.5',       
 '1003' ],
                '^glib2(-dev|-shlibs)?$'                    => [ '2.6.6',       
 '1111' ],
                '^glibmm2.4(-dev|-shlibs)?$'                => [ '2.6.1',       
 '1001' ],
                '^glut(-shlibs)?$'                          => [ '3.7',         
 '1025' ],
                '^gnuplot$'                                 => [ '4.0.0',       
 '1003' ],
                '^grads$'                                   => [ '1.9',         
 '1004' ],
                '^gtkmm2(-dev|-shlibs)?$'                   => [ '2.2.12',      
 '1002' ],
                '^gtkmm2.4(-dev|-shlibs)?$'                 => [ '2.6.4',       
 '1001' ],
                '^guile16(-dev|-libs|-shlibs)?$'            => [ '1.6.7',       
 '1010' ],
                '^gwenhywfar(-shlibs)?$'                    => [ '1.7.2',       
 '1002' ],
                '^hdf5(-bin|-shlibs)?$'                     => [ '1.6.5',       
 '1002' ],
                '^id3lib4(-dev|-doc|-shlibs)?$'             => [ '3.8.3',       
 '1014' ],
                '^imagemagick(-nox)?(-dev|-shlibs)?$'       => [ '6.1.8',       
 '1002' ],
                '^kaptain$'                                 => [ '0.72',        
 '1012' ],
                '^ktoblzcheck$'                             => [ '1.2',         
 '1003' ],
                '^ladspa(-dev)?$'                           => [ '1.12',        
 '1012' ],
                '^lammpi(-dev|-examples|-shlibs)?$'         => [ '7.0.6',       
 '1011' ],
                '^libcapsinetwork(-dev)?$'                  => [ '0.3.0',       
 '1001' ],
                '^libdap3(-shlibs)?$'                       => [ '3.5.2',       
 '1001' ],
                '^libemf(-shlibs|-bin)?$'                   => [ '1.0.2',       
 '1011' ],
                '^libgeos2(-.*)?$'                          => [ '2.1.4',       
 '1001' ],
                '^libhttpd-persistent$'                     => [ '1.3',         
 '1010' ],
                '^libidl2(-shlibs)?$'                       => [ '0.8.5',       
 '1001' ],
                '^libmath..(-dev)?$'                        => [ '0.0.4',       
 '1001' ],
                '^libmusicbrainz4(-shlibs)?$'               => [ '2.1.1',       
 '1001' ],
                '^libnc-dap3(-shlibs)?$'                    => [ '3.5.2',       
 '1001' ],
                '^(libncurses5(-shlibs)?|ncurses)$'         => [ 
'5.4-20041023', '1006' ],
                '^libncursesw5(-shlibs)?$'                  => [ 
'5.4-20041023', '1001' ],
                '^libofx1(-shlibs)?$'                       => [ '0.7.0',       
 '1002' ],
                '^libogdi3(-bin|-shlibs)?$'                 => [ '3.1.5',       
 '1002' ],
                '^librep(-dev|-shlibs)?$'                   => [ '0.16.2',      
 '1011' ],
                '^librsync(-bin|-shlibs)?$'                 => [ '0.9.7',       
 '1001' ],
                '^libsablot(-dev|-shlibs)?$'                => [ '0.98',        
 '1024' ],
                '^libsidplay(-shlibs)?$'                    => [ '1.36.59',     
 '1001' ],
                '^libsigc..12(-shlibs)?$'                   => [ '1.2.5',       
 '1002' ],
                '^libsigc..2(-shlibs)?$'                    => [ '2.0.11',      
 '1003' ],
                '^libtunepimp2(-shlibs)?$'                  => [ '0.3.0',       
 '1001' ],
                '^libusb(-shlibs)?$'                        => [ '0.1.8',       
 '1014' ],
                '^libwpd-0.8(-shlibs)?$'                    => [ '0.8.2',       
 '1001' ],
                '^libwpd1(-shlibs)?$'                       => [ '0.7.2',       
 '1011' ],
                '^libxml..2(-shlibs)?$'                     => [ '2.10.0',      
 '1001' ],
                '^matplotlib-py..$'                         => [ '0.86.1',      
 '1002' ],
                '^mjpegtools2?(-dev|-shlibs)?$'             => [ '1.6.2',       
 '1003' ],
                '^mozilla(-.*)?$'                           => [ '1.7.5',       
 '1102' ],
                '^mysql(-dev|-shlibs)?$'                    => [ '3.23.58',     
 '1023' ],
                '^mysql12(-dev|-shlibs)?$'                  => [ '4.0.22',      
 '1012' ],
                '^mysql14(-dev|-shlibs)?$'                  => [ '4.1.10',      
 '1002' ],
                '^mysql15(-dev|-shlibs)?$'                  => [ '5.0.16',      
 '1001' ],
                '^ncurses-(dev|shlibs)$'                    => [ 
'5.3-20031018', '1501' ],
                '^netcdf(-bin|-shlibs)?$'                   => [ '3.6.0',       
 '1002' ],
                '^openexr(-dev)?$'                          => [ '1.2.2',       
 '31'   ],
                '^openhbci(-shlibs)?$'                      => [ '0.9.13',      
 '1012' ],
                '^openjade$'                                => [ '1.3.2',       
 '1028' ],
                '^pdcurses(-shlibs)?$'                      => [ '2.6',         
 '1013' ],
                '^pdflib(-shlibs)?$'                        => [ '5.0.3',       
 '1002' ],
                '^pdflib-py..$'                             => [ '5.0.3',       
 '1001' ],
                '^pilot-link9(-bin|-py.+|-shlibs)?$'        => [ '0.11.8',      
 '1035' ],
                '^postgresql-perl.*$'                       => [ '8.1.2',       
 '1022' ],
                '^postgresql-tcl.*$'                        => [ '8.1.2',       
 '1021' ],
                '^postgresql80(-.*)?$'                      => [ '8.0.6',       
 '1026' ],
                '^pstoedit(-bin|-shlibs)?$'                 => [ '3.40',        
 '1002' ],
                '^pygtk-py23$'                              => [ '0.6.9',       
 '1016' ],
                '^python23(-shlibs|-socket)?$'              => [ '1:2.3.5',     
 '1124' ],
                '^python23-nox(-shlibs|-socket)?$'          => [ '1:2.3.4',     
 '1104' ],
                '^python23-socket-ssl$'                     => [ '1:2.3.5',     
 '1101' ],
                '^python24(-shlibs|-socket)?$'              => [ '1:2.4.2',     
 '1004' ],
                '^python24-socket-ssl$'                     => [ '2.4.2',       
 '1101' ],
                '^qca(-shlibs)?$'                           => [ '1.0',         
 '1023' ],
                '^qcad$'                                    => [ '2.0.1.3-1',   
 '1002' ],
                '^qt3(-.+)?$'                               => [ '3.3.5',       
 '1026' ],
                '^qt3mac(-mysql|-postgresql)?$'             => [ '3.3.5',       
 '1001' ],
                '^r-base$'                                  => [ '2.1.1',       
 '1001' ],
                '^readline(-shlibs)?$'                      => [ '4.3',         
 '1028' ],
                '^readline5(-shlibs)?$'                     => [ '5.0',         
 '1004' ],
                '^rep-gtk$'                                 => [ '0.18',        
 '1013' ],
                '^reportlab-.*$'                            => [ '1.20',        
 '1011' ],
                '^sdl(-shlibs)?$'                           => [ '1.2.9',       
 '1001' ],
                '^sdl-mixer(-shlibs)?$'                     => [ '1.2.6',       
 '1012' ],
                '^smpeg(-shlibs)?$'                         => [ '0.4.4',       
 '1025' ],
                '^svn(-.*)?$'                               => [ '1.2.3',       
 '1012' ],
                '^swig(-shlibs)?$'                          => [ '1.3.20',      
 '1012' ],
                '^taglib(-shlibs)?$'                        => [ '1.4',         
 '1001' ],
                '^unixodbc2(-.*)?$'                         => [ '2.2.11',      
 '1010' ],
                '^w3m(-ssl)?$'                              => [ '0.5.1',       
 '1003' ],
                '^wxmac(-shlibs)?$'                         => [ '2.6.1',       
 '1001' ],
                '^xmlto$'                                   => [ '0.0.18',      
 '1005' ],
                '^xpdf$'                                    => [ '3.01',        
 '1002' ],
                '^yelp-viewer(-firefox|-mozilla)$'          => [ '2.12.2',      
 '1001' ],
                '^zope$'                                    => [ '2.6.3',       
 '1102' ],
                '^macosx$'                                  => [ '10.4.3',      
 '1'    ],
        },
        '10.4-transitional' => {
                '^mjpegtools2?(-dev|-shlibs)?$'             => [ '1.6.2',       
 '3'    ],
                '^qt3(-.+)?$'                               => [ '3.3.5',       
 '26'   ],
                '^macosx$'                                  => [ '10.4.3',      
 '1'    ],
        },
        '10.3' => {
                '^mjpegtools2?(-dev|-shlibs)?$'             => [ '1.6.2',       
 '3'    ],
                '^qt3(-.+)?$'                               => [ '3.3.5',       
 '16'   ],
                '^macosx$'                                  => [ '10.3.0',      
 '1'    ],
        },
        'all' => {
                '^arts(-dev|-shlibs)?$'                     => [ undef,         
 '+'    ],
                '^kde\S+(i18n|3|3-unified)(-dev|-shlibs)?$' => [ undef,         
 '+'    ],
#               '^qt3(-.+)?$'                               => [ undef,         
 '+'    ],
                '^postgresql\S+$'                           => [ undef,         
 '+'    ],
        },
};

my @KEYS = (
        'Package', 'Version', 'Revision', 'Epoch', 'Architecture', 
'Description', 'Type',
                'License', 'Maintainer', '<CR>',
        'Depends', 'BuildDepends', 'BuildConflicts', 'Provides', 'Conflicts', 
'Replaces',
                'Recommends', 'Suggests', 'Enhances', 'Pre-Depends', 
'Essential',
                'BuildDependsOnly', 'GCC', '<CR>',
        'CustomMirror', 'Source', 'Source<N>', 'SourceDirectory', 
'Source<N>Directory',
                'NoSourceDirectory', 'SourceExtractDir', 'Source<N>ExtractDir', 
'SourceRename',
                'Source<N>Rename', 'Source-MD5', 'Source<N>-MD5', 
'TarFilesRename',
                'Tar<N>FilesRename', 'UpdateConfigGuess', 
'UpdateConfigGuessInDirs',
                'UpdateLibtool', 'UpdateLibtoolInDirs', 'UpdatePoMakefile', 
'Patch',
                'PatchScript', '<CR>',
        'Set<S>', 'NoSet<S>', 'ConfigureParams', 'CompileScript', '<CR>',
        'UpdatePOD', 'InstallScript', 'NoPerlTests', 'JarFiles', 'DocFiles',
                'RuntimeVars', 'SplitOff', 'SplitOff<N>', 'Files', 'Shlibs', 
'<CR>',
        'PreInstScript', 'PostInstScript', 'PreRmScript', 'PostRmScript', 
'ConfFiles',
                'InfoDocs', 'DaemonicFile', 'DaemonicName', '<CR>',
        'Homepage', 'DescDetail', 'DescUsage', 'DescPackaging', 'DescPort',
);

my @TREES = qw( 10.3 10.4-transitional 10.4 );

my $APPEND_USAGE = '^arts|kde\S+3|kdevelop|koffice|bundle-kde|kgpg';

if (not @files) {
        find(sub {
                push(@files, $File::Find::name);
        }, $path . '/common');
}

for my $file (@files) {
        if ($file !~ /^\//) {
                $file = $path . '/' . $file;
        }
        my ($dir, $filename) = (dirname($file), basename($file));

        next unless ($file =~ /\.(info|patch)$/);
        next unless ($file =~ /$translate/);
        next if ($file =~ /notready/);

        my $contents;
        if (open (FILEIN, $file)) {
                local $/ = undef;
                $contents = <FILEIN>;
                close (FILEIN);
        } else {
                warn "unable to read from $file: $!\n";
                next;
        }

        print $file, "\n";
        if ($file =~ /\.info$/) {
                my $properties = info_hash_from_var(
                        $file,
                        $contents,
                        { case_sensitive => 1 },
                );

#               print Dumper($properties), "\n";

                for my $tree (@TREES) {
                        next if ($file =~ /postgresql73/ and $tree ne "10.3");

                        my $treeproperties = clone($properties);
                        $treeproperties->{'Tree'} = $tree;

                        $treeproperties = transform_fields($treeproperties, 
clone($treeproperties));

                        my $todir = $dir;
                        $todir =~ s#/common/#/${tree}/#;
                        mkdir_p($todir) unless (-d $todir);

                        my $info = serialize_to_info($treeproperties) . "\n";
                        if (open (FILEOUT, '>' . $todir . '/' . $filename)) {
                                print FILEOUT $info;
                                close (FILEOUT);
                        }
                }

        } elsif ($file =~ /\.patch$/) {
                for my $tree (@TREES) {
                        next if ($file =~ /postgresql73/ and $tree ne "10.3");

                        my $todir = $dir;
                        $todir =~ s#/common/#/${tree}/#;
                        mkdir_p($todir) unless (-d $todir);

                        if (open (FILEOUT, '>' . $todir . '/' . $filename)) {
                                print FILEOUT transform_patch($tree, $contents);
                                close (FILEOUT);
                        }
                }

        } else {
                warn "unhandled file: $file\n";
        }

}

sub transform_fields {
        my $packagehash = shift;
        my $properties  = shift;

        for my $field (keys %$properties) {
                my $lcfield = lc($field);
                no strict qw(refs);
                if ($field =~ /^splitoff/i) {
                        $properties->{$field} = transform_fields($packagehash, 
$properties->{$field});
                } elsif (defined &{"transform_$lcfield"}) {
                        $properties->{$field} = 
&{"transform_$lcfield"}($packagehash, $properties->{$field});
                } else {
                        #warn "unhandled field: $field\n";
                }
        }

        if ($packagehash->{'Package'} =~ /$APPEND_USAGE/i) {
                $properties->{'DescUsage'} = transform_descusage($packagehash, 
$properties->{'DescUsage'});
        }

        return $properties;
}

sub print_indent {
        my $field_name = shift;
        my $text       = shift;
        my $indent     = shift || 0;

        $text =~ s/^\n+//gsi;
        $text =~ s/\n+$//gsi;

        my $return = "";

        if ($text =~ /\n/) {
                $return .= "\t" x $indent . $field_name . ": <<\n";
                if ($field_name =~ 
/^(files|conffiles|custommirror|patchscript|shlibs)$/i) {
                        for my $line (split(/\n/, $text)) {
                                $line =~ s/^\s+//;
                                $return .= "\t" x ($indent + 1) . $line . "\n";
                        }
                } else {
                        $return .= $text . "\n";
                }
                $return .= "\t" x $indent . "<<\n";
        } else {
                $return .= "\t" x $indent . $field_name . ": " . $text . "\n";
        }

        return $return;
}

sub serialize_to_info {
        my $package = clone(shift);
        my $indent  = shift || 0;

        #print Dumper($package), "\n";
        my $output = "";

        delete $package->{'Tree'};
        my $infolevel = int($package->{'InfoLevel'});
        delete $package->{'InfoLevel'};

        $output .= "Info${infolevel}: <<\n" if ($infolevel >= 2 and not 
$indent);

        for my $key (@KEYS) {
                if ($key eq "<CR>") {
                        $output .= "\n" unless ($output =~ /\n\n$/gs or 
$indent);
                } elsif ($key =~ /<N>/) {
                        my $regex = $key;
                        $regex =~ s/<N>/\\d\+/gs;
                        for my $field (sort keys %$package) {
                                if ($field =~ /^\s*${regex}\s*$/gsi) {
                                        if (ref $package->{$field}) {
                                                $output .= print_indent($field, 
serialize_to_info($package->{$field}, $indent + 1), $indent);
                                        } else {
                                                $output .= print_indent($field, 
$package->{$field}, $indent);
                                        }
                                        delete $package->{$field};
                                        #warn "$key matched $field 
(/^$regex\$/i\n";
                                } else {
                                        #warn "$key did not match $field 
(/^$regex\$/i\n";
                                }
                        }
                } elsif ($key =~ /<S>/) {
                        my $regex = $key;
                        $regex =~ s/<S>/\.\+/gs;
                        for my $field (sort keys %$package) {
                                if ($field =~ /^\s*${regex}\s*$/gsi) {
                                        if (ref $package->{$field}) {
                                                $output .= print_indent($field, 
serialize_to_info($package->{$field}, $indent + 1), $indent);
                                        } else {
                                                $output .= print_indent($field, 
$package->{$field}, $indent);
                                        }
                                        delete $package->{$field};
                                        #warn "$key matched $field 
(/^$regex\$/i\n";
                                } else {
                                        #warn "$key did not match $field 
(/^$regex\$/i\n";
                                }
                        }
                } else {
                        for my $field (keys %$package) {
                                if ($field =~ /^\s*${key}\s*$/gsi) {
                                        if (ref $package->{$field}) {
                                                $output .= print_indent($key, 
serialize_to_info($package->{$field}, $indent + 1), $indent);
                                        } else {
                                                $output .= print_indent($key, 
$package->{$field}, $indent);
                                        }
                                        delete $package->{$field};
                                }
                        }
                }
        }

        for my $key (sort keys %$package) {
                die "ERROR: '$key' is missing from [EMAIL PROTECTED]";
        }

        $output =~ s/\n\n+/\n\n/gsi;
        $output .= "<<\n" if ($infolevel >= 2 and not $indent);

        return $output;
}

sub prettify_field_name {
        my $field = shift;

        for my $key (@KEYS) {
                if ($key =~ /<N>/) {
                        my $regex = $key;
                        $regex =~ s/<N>/\(\\d\+\)/gs;
                        if (my ($number) = $field =~ /^${regex}$/gsi) {
                                my $field_name = $key;
                                $field_name =~ s/<N>/$number/gsi;
                                return $field_name;
                        }
                } elsif (my ($set, $var) = $field =~ /^(NoSet|Set)(.*)$/i) {
                        if ($set =~ /^no/i) {
                                return "NoSet" . uc($var);
                        } else {
                                return "Set" . uc($var);
                        }
                } elsif ($key =~ /<S>/i) {
                        my $regex = $key;
                        $regex =~ s/<S>/\(\.\+\)/gsi;
                        if (my ($string) = $field =~ /^${regex}$/i) {
                                my $field_name = $key;
                                $field_name =~ s/<S>/$string/gsi;
                                return $field_name;
                        }
                } elsif ($field =~ /^\s*${key}\s*$/gsi) {
                        # warn "prettify: $key =~ /^${field}\$/gsi matched\n";
                        return $key;
                } else {
                        # warn "prettify: $key =~ /^${field}\$/gsi did not 
match\n";
                }
        }
        warn "prettify: no match for '$field'\n";
        return $field;
}

sub transform_patch {
        my $tree = shift;
        my $text = shift;

        if ($tree eq "10.4") {
                $text =~ s/g(cc|\+\+)-3\.3/g$1-4.0/gi;
        }

        return $text;
}

sub transform_descusage {
        my $packagehash = shift;
        my $descusage   = shift;

        if ($packagehash->{'Package'} =~ /$APPEND_USAGE/i) {
                if (open (FILEIN, $path . '/kdedesc.txt')) {
                        local $/ = undef;
                        if ($descusage !~ /^[\s\n]*$/gsi) {
                                warn "descusage is not empty, 
overwriting:\n$descusage\n";
                        }
                        $descusage = <FILEIN>;
                        close (FILEIN);
                } else {
                        warn "unable to open kdedesc.txt: $!\n";
                }
        }

        return $descusage;
}

sub transform_files {
        my $tree  = shift->{'Tree'};
        my $files = shift;

        my @newlines;

        for my $line (split(/\r?\n/, $files)) {
                if ($tree eq "10.3") {
                        next if ($line =~ /libkfontinst/i);
                }
                push(@newlines, $line);
        }

        return join("\n", @newlines);
}

sub transform_shlibs {
        my $tree   = shift->{'Tree'};
        my $shlibs = shift;
        my @newlines;

        for my $line (split(/\r?\n/, $shlibs)) {
                if ($tree eq "10.3") {
                        next if ($line =~ /libkfontinst/i);
                }

                # whoo!  crazy lexing!
                my $newline;
                while ($line =~ /\G(.+?\(\S+\s+\S+\-)([^\-]+)\)/gsi) {
                        my ($rest, $revision) = ($1, $2);
                        $newline .= $rest . transform_revision( $tree, 
$revision ) . ')';
                }
                $line =~ /\G\(.*$/;
                $newline .= $1;

                push(@newlines, $line);
        }

        return join("\n", @newlines);
}

sub transform_configureparams {
        my $tree   = shift->{'Tree'};
        my $params = shift;

        if ($tree eq '10.4') {
                $params =~ s/--disable-java//gs;
        }

        return $params;
}

sub transform_setcxx {
        transform_setcc(@_);
}

sub transform_setcc {
        my $tree  = shift->{'Tree'};
        my $setcc = shift;

        if ($tree eq '10.4') {
                $setcc =~ s/3\.3/4.0/gs;
        }

        return $setcc;
}

sub transform_compilescript {
        my $tree          = shift->{'Tree'};
        my $compilescript = shift;

        if ($tree eq '10.4') {
                # I really don't like having these hardcoded here, need to 
figure out a way to
                # make it more configurable
                $compilescript =~ s/(gcc|g\+\+)-3.3/$1/gs;
                $compilescript =~ s/-fno-coalesce//gs;
        }

        return $compilescript;
}

sub transform_gcc {
        my $tree = shift->{'Tree'};
        my $gcc  = shift;

        if ($tree eq "10.4") {
                $gcc = "4.0";
        }

        return $gcc;
}

sub transform_type {
        my $tree = shift->{'Tree'};
        my $type = shift;
        if ($type =~ /^perl/i) {
                my @versions = qw(5.6.0 5.6.1 5.8.0 5.8.1 5.8.4 5.8.5 5.8.6);
                if ($tree =~ /^10.3/) {
                        @versions = qw(5.6.0 5.8.0 5.8.1 5.8.4 5.8.6);
                } elsif ($tree =~ /^10.4/) {
                        @versions = qw(5.8.1 5.8.4 5.8.6);
                }
                $type = "perl(@versions)";
        } elsif ($type =~ /^python/i) {
                my @versions = qw(2.1 2.2 2.3 2.4);
                if ($tree =~ /^10.3/) {
                        @versions = qw(2.1 2.2 2.3 2.4);
                } elsif ($tree =~ /^10.4/) {
                        @versions = qw(2.2 2.3 2.4);
                }
                $type = "python(@versions)";
        }

        return $type;
}

sub transform_enhances {
        return transform_depends(@_);
}

sub transform_recommends {
        return transform_depends(@_);
}

sub transform_suggests {
        return transform_depends(@_);
}

sub transform_runtimedepends {
        return transform_depends(@_);
}

sub transform_builddepends {
        return transform_depends(@_);
}

sub transform_depends {
        my $packagehash = shift;
        my $depends     = pkglist2lol(shift);
        my @newdepends;

        for my $dep (@$depends) {
                my @newdep;
                for my $pkg (@$dep) {
                        my $newdep = 
transform_dependency($packagehash->{'Tree'}, $pkg);
                        push(@newdep, $newdep) if (defined $newdep);
                }
                push(@newdepends, [EMAIL PROTECTED]);
        }

        return lol2pkglist([EMAIL PROTECTED]);
}

sub transform_dependency {
        my $tree     = shift;
        my $dep_spec = shift;
        my $delete   = 0;

        my ($prefix, $package, $comparator, $version, $revision);
        if ($dep_spec =~ s/^\s*\(([^\)]+)\)\s+//) {
                $prefix = $1;
        }
        if (($package, $comparator, $version, $revision) = $dep_spec =~ 
/^(\S+)\s+\((\S+)\s+(\S+)\-(\S+)\)$/) {
                #print "transform_dependency[$dep_spec]: $package matched 
long-form dep\n";
        } elsif (($package) = $dep_spec =~ /^(\S+)$/) {
                #print "transform_dependency[$dep_spec]: $package matched 
short-form dep\n";
        } elsif (($package, $comparator, $version) = $dep_spec =~ 
/^(\S+)\s+\((\S+)\s+([^\-\s]+)\)$/) {
                #print "transform_dependency[$dep_spec]: $package matched 
incorrect dep\n";
                $revision = 0;
        } else {
                warn "transform_dependency[$dep_spec]: unhandled dependency 
specification\n";
        }

        my $matched = 0;
        for my $tree_iterator ($tree, 'all') {
                next if ($matched);
                if (exists $package_lookup->{$tree_iterator}) {
                        for my $key (keys %{$package_lookup->{$tree_iterator}}) 
{
                                my $replace = 
$package_lookup->{$tree_iterator}->{$key};
                                if ($package =~ /$key/i) {
                                        if (not defined $replace) {
                                                $delete++;
                                        } else {
                                                $package =~ s/$key/$replace/gsi;
                                        }
                                }
                        }
                }
                if (exists $version_lookup->{$tree_iterator}) {
                        #print "checking in $tree_iterator\n";
        
                        for my $key (keys %{$version_lookup->{$tree_iterator}}) 
{
                                if ($package =~ /$key/i) {
                                        #print 
"transform_dependency[$dep_spec]: $package matches $key\n";
                                        my ($newversion, $newrevision) = 
@{$version_lookup->{$tree_iterator}->{$key}};
                                        if (defined $version and defined 
$revision and $revision ne '%r' and $newrevision eq '+') {
                                                $revision = transform_revision( 
$tree, $revision );
                                        } elsif (defined $newversion and 
defined $newrevision and $revision ne '%r') {
                                                $version  = $newversion;
                                                $revision = $newrevision;
                                        } else {
                                                if ((not defined $version and 
not defined $revision) or ($version eq '%v' and $revision eq '%r')) {
                                                        # it's OK to do nothing 
here
                                                } else {
                                                        warn 
"transform_dependency[$dep_spec]: not sure how to handle ($newversion, 
$newrevision) when version = $version and revision = $revision\n";
                                                }
                                        }
                                        $matched++;
                                        last;
                                } else {
                                        #print 
"transform_dependency[$dep_spec]: $package does not match $key\n";
                                }
                        }
                }
        }

        if (defined $package and defined $version and defined $revision) {
                $comparator = '>=' unless (defined $comparator);
                $dep_spec = $package . ' (' . $comparator . ' ' . $version . 
'-' . $revision . ')';
                $dep_spec = '(' . $prefix . ') ' . $dep_spec if (defined 
$prefix);
        } elsif (defined $package) {
                $dep_spec = $package;
                $dep_spec = '(' . $prefix . ') ' . $dep_spec if (defined 
$prefix);
        }

        #print "transform_dependency: returning $dep_spec\n";

        return undef if ($delete);
        return $dep_spec;
}

sub transform_version {
        my $packagehash = shift;
        my $version     = shift;
        return $version;
}

sub transform_revision {
        my $tree     = shift;
        my $revision = shift;
        $tree = $tree->{'Tree'} if (ref $tree eq "HASH");

        if ($tree eq '10.3') {
                $revision = revision_add($revision, 10);
        } elsif ($tree eq '10.4-transitional') {
                $revision = revision_add($revision, 20);
        } elsif ($tree eq '10.4') {
                $revision = revision_add($revision, 1020);
        } else {
                warn "unhandled tree '$tree'\n";
        }
        return $revision;
}

sub revision_add {
        my $revision = shift;
        my $amount   = shift;

        if (my ($pre, $post) = $revision =~ /^(.*\.)(\d+)$/) {
                $post += $amount;
                $revision = $pre . $post;
        } else {
                $revision += $amount;
        }
        return $revision;
}

sub info_hash_from_var {
        my $filename = shift;
        my $var      = shift;
        my $options  = shift;
        my $infolevel = 0;

        my $properties = read_properties_var(
                $filename,
                $var,
                $options,
        );
        ($properties, $infolevel) = 
Fink::PkgVersion->handle_infon_block($properties, $filename);

        my $return;

        for my $key (keys %$properties) {
                my $newkey = prettify_field_name($key);
                #print "$key = $newkey\n";
                if ($key =~ /^splitoff/i) {
                        $return->{$newkey} = info_hash_from_var(
                                $filename . ' (' . $key . ')',
                                $properties->{$key},
                                { remove_space => 1, %$options },
                        );
                } else {
                        $return->{$newkey} = $properties->{$key};
                }
        }

        $return->{'InfoLevel'} = $infolevel;

        return $return;
}

sub mkdir_p {
        my $dir = shift;

        eval { mkpath($dir, 0, 0775) };
        if ($@) {
                warn "unable to create $dir: $!\n";
        } else {
                return 1;
        }
        return;
}



-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
Fink-commits mailing list
Fink-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/fink-commits

Reply via email to