Author: jelmer Date: 2006-11-23 17:27:04 +0000 (Thu, 23 Nov 2006) New Revision: 19861
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=19861 Log: Add simple pkg-config replacement. Added: branches/SAMBA_4_0/source/script/pkg-config Changeset: Added: branches/SAMBA_4_0/source/script/pkg-config =================================================================== --- branches/SAMBA_4_0/source/script/pkg-config 2006-11-23 16:19:06 UTC (rev 19860) +++ branches/SAMBA_4_0/source/script/pkg-config 2006-11-23 17:27:04 UTC (rev 19861) @@ -0,0 +1,130 @@ +#!/usr/bin/perl +# Simple pkg-config implementation in perl +# [EMAIL PROTECTED], November 2006 + +use strict; +use Getopt::Long; + +my @dirs = split(/:/, $ENV{PKG_CONFIG_PATH}); + +my $opt_help = 0; +my $opt_libs = 0; +my $opt_cflags = 0; +my $opt_static = 0; + +my $result = GetOptions ( + 'help|h|?' => \$opt_help, + 'static' => \$opt_static, + 'libs' => \$opt_libs, + 'cflags' => \$opt_cflags + ); + +if (not $result) { + exit(1); +} + +if ($opt_help) { + print "pkg-config replacement in perl\n"; + print "Copyright (C) 2006 Jelmer Vernooij <[EMAIL PROTECTED]>\n"; + print "\n"; + print " --help Print this help message\n"; + print " --static Print flags for static libraries\n"; + print " --libs Print linker flags\n"; + print " --cflags Print C compiler flags\n"; + print "\n"; + exit(0); +} + +sub find_path($) +{ + my $name = shift; + foreach my $dir (@dirs) { + if (-f "$dir/$name-uninstalled.pc") { + return "$dir/$name-uninstalled.pc"; + } + } + foreach my $dir (@dirs) { + if (-f "$dir/$name.pc" ) { + return "$dir/$name.pc"; + } + } + die("No such package `$name'"); +} + +sub ReplaceVars($$) +{ + my ($expr, $vars) = @_; + + $_ = $expr; + + while (/(.*)\${([^}]+)}(.*)/) { + $_ = "$1$vars->{$2}$3"; + } + + return $_; +} + +sub Parse($) +{ + my $name = shift; + my $path = find_path($name); + my %variables = (); + my %fields = (); + my $lineno = 0; + open(IN, "<$path") or die("Unable to open $path: $!"); + foreach (<IN>) { + $lineno+=1; + next if (/^#.*/); + if (/^([A-Za-z.]+): (.*)$/) { + $fields{$1} = ReplaceVars($2, \%variables); + } elsif (/^([A-Za-z_]+)=(.*)$/) { + $variables{$1} = ReplaceVars($2, \%variables); + } elsif (/^[ \t]*$/) { + } else { + warn("$path:$lineno: parse error"); + } + } + close(IN); + return \%fields; +} + +sub Cflags($) +{ + my $name = shift; + my $fields = Parse($name); + my $cflags = $fields->{Cflags}; + foreach (split(/[, ]/, $fields->{Requires})) { + $cflags .= " ".Cflags($_); + } + return split(/ /, $cflags); +} + +sub Libs($) +{ + my $name = shift; + my $fields = Parse($name); + my $libs = $fields->{Libs}; + foreach (split(/[, ]/, $fields->{Requires})) { + $libs .= " ".Libs($_); + } + if ($opt_static) { + foreach (split(/[ ,]/, $fields->{"Requires.private"})) { + $libs .= " ".Libs($_); + } + } + return split(/ /, $libs); +} + +my @out = (); + +foreach my $pkg (@ARGV) +{ + push (@out, Libs($pkg)) if ($opt_libs); + push (@out, Cflags($pkg)) if ($opt_cflags); +} + +if ($#out >= 0) { + print join(' ', @out) . "\n"; +} + +exit 0; Property changes on: branches/SAMBA_4_0/source/script/pkg-config ___________________________________________________________________ Name: svn:executable + *