Annotation of embedaddon/rsync/packaging/cull_options, revision 1.1

1.1     ! misho       1: #!/usr/bin/perl
        !             2: # This script outputs some perl code that parses all possible options
        !             3: # that the code in options.c might send to the server.  This perl code
        !             4: # is included in the rrsync script.
        !             5: use strict;
        !             6: 
        !             7: our %short_no_arg;
        !             8: our %short_with_num;
        !             9: our %long_opt = (
        !            10:     'daemon' => -1,
        !            11:     'fake-super' => 0,
        !            12:     'log-file' => 3,
        !            13: );
        !            14: our $last_long_opt;
        !            15: 
        !            16: open(IN, '../options.c') or die "Unable to open ../options.c: $!\n";
        !            17: 
        !            18: while (<IN>) {
        !            19:     if (/\Qargstr[x++]\E = '([^.ie])'/) {
        !            20:        $short_no_arg{$1} = 1;
        !            21:        undef $last_long_opt;
        !            22:     } elsif (/\Qasprintf(\E[^,]+, "-([a-zA-Z0-9])\%l?[ud]"/) {
        !            23:        $short_with_num{$1} = 1;
        !            24:        undef $last_long_opt;
        !            25:     } elsif (/\Qargs[ac++]\E = "--([^"=]+)"/) {
        !            26:        $last_long_opt = $1;
        !            27:        $long_opt{$1} = 0 unless exists $long_opt{$1};
        !            28:     } elsif (defined($last_long_opt)
        !            29:        && /\Qargs[ac++]\E = ([^["\s]+);/ && $1 ne 'dest_option') {
        !            30:        $long_opt{$last_long_opt} = 2;
        !            31:        undef $last_long_opt;
        !            32:     } elsif (/dest_option = "--([^"]+)"/) {
        !            33:        $long_opt{$1} = 2;
        !            34:        undef $last_long_opt;
        !            35:     } elsif (/\Qasprintf(\E[^,]+, "--([^"=]+)=/ || /\Qargs[ac++]\E = "--([^"=]+)=/) {
        !            36:        $long_opt{$1} = 1;
        !            37:        undef $last_long_opt;
        !            38:     }
        !            39: }
        !            40: close IN;
        !            41: 
        !            42: my $short_no_arg = join('', sort keys %short_no_arg);
        !            43: my $short_with_num = join('', sort keys %short_with_num);
        !            44: 
        !            45: print <<EOT;
        !            46: 
        !            47: # These options are the only options that rsync might send to the server,
        !            48: # and only in the option format that the stock rsync produces.
        !            49: 
        !            50: # To disable a short-named option, add its letter to this string:
        !            51: our \$short_disabled = 's';
        !            52: 
        !            53: our \$short_no_arg = '$short_no_arg'; # DO NOT REMOVE ANY
        !            54: our \$short_with_num = '$short_with_num'; # DO NOT REMOVE ANY
        !            55: 
        !            56: # To disable a long-named option, change its value to a -1.  The values mean:
        !            57: # 0 = the option has no arg; 1 = the arg doesn't need any checking; 2 = only
        !            58: # check the arg when receiving; and 3 = always check the arg.
        !            59: our \%long_opt = (
        !            60: EOT
        !            61: 
        !            62: foreach my $opt (sort keys %long_opt) {
        !            63:     my $val = $long_opt{$opt};
        !            64:     $val = 1 if $opt =~ /^(max-|min-)/;
        !            65:     $val = 3 if $opt eq 'files-from';
        !            66:     $val = '$ro ? -1 : ' . $val if $opt =~ /^remove-/;
        !            67:     print "  '$opt' => $val,\n";
        !            68: }
        !            69: 
        !            70: print ");\n\n";

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>