svn commit: samba r19861 - in branches/SAMBA_4_0/source/script: .

jelmer at samba.org jelmer at samba.org
Thu Nov 23 17:27:04 GMT 2006


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
+# jelmer at samba.org, 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 <jelmer\@samba.org>\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
   + *



More information about the samba-cvs mailing list