Update of /cvsroot/fink/dists/10.7/stable/main/finkinfo/devel In directory vz-cvs-3.sog:/tmp/cvs-serv17654
Added Files: flag-sort.info flag-sort.patch Log Message: fine, if you want to actually have the dependencies present. --- NEW FILE: flag-sort.info --- Package: flag-sort Version: 0.4 Revision: 1 BuildDepends: fink (>= 0.24.12-1) Source: none PatchFile: %n.patch PatchFile-MD5: c19f51d7f84fb9c08453912d92b229c4 PatchScript: sed 's,@PREFIX@,%p,' < %{PatchFile} | patch -p1 CompileScript: # InstallScript: << mkdir -p %i/bin install -m755 flag-sort %i/bin << DescUsage: << flag-sort [-r] [-v] CMD ARG1 ARG2 ... The command CMD is launched with ARG1 ARG2 ... as arguments. The arguments are re-ordered to put compiler search-path flags (-I and -L) in an order appropriate for fink. The paths are sorted in the following order: anything un-recognized local/relative (full paths that are local aren't noticed here) fink %p/opt (self-contained rooted packages) fink %p x11 (and /usr/X11 before /usr/X11R6) system (/usr) /usr/local Within each category, order is maintained as given. In addition, lib/ is placed before include/ in each category so that arch-dependent comes before generic and "PREFIX/lib/PACKAGE/{include,lib} hidden packages override standard ones. (%p/opt does not distinguish between lib/ and include/ because the rooted packages need not put those in any well-defined place) The -r flag causes flag-sort to print relative paths before absolute paths. Order is preserved within each class of path. For example, the following command: flag-sort -r echo -L/absolute -Lrelative -L../relative \ -I/absolute -I../relative -Irelative ...would result in: -I../relative -Irelative -I/absolute \ -Lrelative -L../relative -L/absolute The -v flag causes flag-sort to print the command that will be launched and all the flags in order on STDOUT. << Description: Wrapper that sorts compiler flags #Homepage: License: GPL Maintainer: Daniel Macks <dma...@netspace.org> --- NEW FILE: flag-sort.patch --- --- /dev/null 2011-05-16 09:30:15.000000000 -0400 +++ tmp/flag-sort 2011-05-16 09:34:13.000000000 -0400 @@ -0,0 +1,136 @@ +#!/usr/bin/perl +# -*- mode: Perl; tab-width: 4; -*- + +# A dirty hack by Daniel Macks + +use warnings; +use strict; + +# all flags for a listed prefix are grouped together before the next prefix +my @prefix_order = ( + '@PREFIX@/opt', + '@PREFIX@/lib', + '@PREFIX@/include', + '/usr/X11/lib', + '/usr/X11/include', + '/usr/X11R6/lib', + '/usr/X11R6/include', + '/usr/lib', + '/usr/include', + '/usr/local/lib', + '/usr/local/include' +); + +# track the following flags (in this order) +my @flag_order = ( + '-I', + '-L', +); +my %flag_queues = (); # $flag => \@paths_for_flag +my @other_queue = (); # things not fitting into any of %flag_queues + +my $verbose = 0; +my $relative_first = 0; + +while ($ARGV[0] =~ /^-(v|r)/) { + if ($ARGV[0] eq '-v') { + $verbose = 1; + shift; + } elsif ($ARGV[0] eq '-r') { + $relative_first = 1; + shift; + } +} + +if (!@ARGV) { + warn "Usage: $0 [-v] [-r] cmd [flags for cmd]\n"; + warn " resort [flags for cmd] and call cmd with them\n"; + warn " -r causes sort to put relative paths before absolute paths\n"; + warn " -v causes display of some diagnostics on STDOUT\n"; + exit 1; +} + +# full paths should be after relative paths +sub bypath { + my ($a_path) = $a =~ /^-(?:I|L)(.*)$/; + my ($b_path) = $b =~ /^-(?:I|L)(.*)$/; + + #print "a_path = $a_path\n"; + #print "b_path = $b_path\n"; + + if (not defined $a_path or not defined $b_path) { + return 0; + } + + if ($a_path =~ /^\//) { + if ($b_path =~ /^\//) { + return 0; + } else { + return 1; + } + } else { + if ($b_path =~ /^[\/]/) { + return -1; + } else { + return 0; + } + } + + return 0; +} +# what we will launch after organizing the flags + +my @subcmd = (); + +# separate the args according to flag +while (@ARGV) { + my $arg = shift; + my($flag) = grep { $arg =~ s/^$_// } @flag_order; + if (defined $flag) { + # parsed off a known flag + push @{$flag_queues{$flag}}, $arg; + } else { + # unknown flag + push @other_queue, $arg; + } +} + +#assume totally unknown flags and args are most important +push @subcmd, @other_queue; + +# sort all paths for each flag +foreach my $flag (@flag_order) { + next unless defined $flag_queues{$flag}; + my @path_list = @{$flag_queues{$flag}}; + #warn "$0: $flag: @path_list\n"; + + # first separate the paths according to prefix + my %sorted_paths; # $prefix => \@sorted_dirs_for_prefix + my @other_paths; # paths not under any of %sorted_paths + foreach my $path (@{$flag_queues{$flag}}) { + my($prefix) = grep { $path =~ /^$_(\/|\z)/ } @prefix_order; + if (defined $prefix) { + # $path is $prefix or a subdir of it + push @{$sorted_paths{$prefix}}, $path; + } else { + # unknown prefix + push @other_paths, $path; + } + } + + # now reconstruct list of paths according to prefix priority + @path_list = @other_paths; # assume unknowns are "very important" + foreach my $prefix (@prefix_order) { + push(@path_list, @{$sorted_paths{$prefix}}) if exists $sorted_paths{$prefix}; + } + #warn "$0: now $flag: @path_list\n"; + if ($relative_first) { + push @subcmd, sort bypath map "$flag$_", @path_list; + } else { + push @subcmd, map "$flag$_", @path_list; + } +} + +print "$0: @subcmd\n" if $verbose; +exec {$subcmd[0]} @subcmd or die "Could not exec $subcmd[0]: $!\n"; + ------------------------------------------------------------------------------ Got Input? Slashdot Needs You. Take our quick survey online. Come on, we don't ask for help often. Plus, you'll get a chance to win $100 to spend on ThinkGeek. http://p.sf.net/sfu/slashdot-survey _______________________________________________ Fink-commits mailing list Fink-commits@lists.sourceforge.net http://news.gmane.org/gmane.os.apple.fink.cvs