[Freeswitch-svn] [commit] r1744 - freeswitch/branches/stkn

Freeswitch SVN stkn at freeswitch.org
Mon Jul 3 21:59:14 EDT 2006


Author: stkn
Date: Mon Jul  3 21:59:14 2006
New Revision: 1744

Added:
   freeswitch/branches/stkn/fsxs.in   (contents, props changed)

Log:
Add initial version of fsxs, integration into autotools pending

Added: freeswitch/branches/stkn/fsxs.in
==============================================================================
--- (empty file)
+++ freeswitch/branches/stkn/fsxs.in	Mon Jul  3 21:59:14 2006
@@ -0,0 +1,306 @@
+#!/usr/bin/perl
+#
+# FreeSwitch fsxs
+#
+# (C) 2006 Stefan Knoblich <stkn at netdomination.org>
+
+use strict;
+
+#
+# @FOO@ will be replaced by the freeswitch build process
+#
+my %vars = (
+	CC => '@CC@',
+	LD => '@LD@',
+	MKDIR => '@MKINSTALLDIR@',
+	INSTALL => '@INSTALL@',
+	LIBS => '@LIBS@',
+	CFLAGS => '@CFLAGS@',
+	LDFLAGS => '@LDFLAGS@',
+	SOLINK => '@SOLINK@',
+	APR_CFLAGS => '@APR_CFLAGS@',
+	APR_LIBS => '@APR_LIBS@',
+
+	MODULES_DIR => '@MODULES_DIR@'
+	LIB_DIR => '@LIB_DIR@',
+	BIN_DIR => '@BIN_DIR@',
+	DB_DIR => '@DB_DIR@',
+	CFG_DIR => '@CFG_DIR@',
+	PREFIX => '@PREFIX@'
+);
+
+## example
+#my %vars = (
+#	CC => 'gcc',
+#	LD => 'gcc',
+#	MKDIR => 'mkdir -p',
+#	INSTALL => 'install',
+#	LIBS => '-lfreeswitch',
+#	CFLAGS => '-O2 -march=athlon-xp -pipe -ggdb3 -I/opt/freeswitch/include -I/opt/freeswitch/include/apr-1 -I/opt/freeswitch/include/apr-util-1',
+#	LDFLAGS => '-L/opt/freeswitch/lib',
+#	SOLINK => '-shared -Xlinker -x',
+#	APR_CFLAGS => '-pthread -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -D_LARGEFILE64_SOURCE',
+#	APR_LIBS => '',
+#
+#	MODULES_DIR => '/opt/freeswitch/mod',
+#	LIB_DIR => '/opt/freeswitch/lib',
+#	BIN_DIR => '/opt/freeswitch/bin',
+#	DB_DIR => '/opt/freeswitch/db',
+#	CFG_DIR => '/opt/freeswitch/conf',
+#	PREFIX => '/opt/freeswitch'
+#);
+
+#
+# Misc variables
+#
+my @files = ();
+
+my $command;
+my $target;
+
+my $needs_target = 1;
+my $debug = 0;
+
+#
+# functions 
+#
+
+sub do_exec {
+	my $retval = system( "@_ >/dev/null" );
+	if( $retval ) {
+		exit $retval;
+	}
+}
+
+sub fsxs_usage {
+	print "FreeSwitch fsxs\n(C) 2006 Stefan Knoblich <stkn at netdomination.org>\n";
+	print "\n";
+	print "Usage:\n";
+	print "\t$0 compile [options] <file1 ...>\n";
+	print "\t$0 link    [options] <target> <file1 ...>\n";
+	print "\t$0 build   [options] <target> <file1 ...>\n";
+	print "\t$0 install [options] <file1 ...>\n";
+	print "\t$0 show    <var1 ...>\n\n";
+	print "Command description:\n";
+	print "\tcompile: Compile source file(s) into object file(s)\n";
+	print "\tlink:    Create module from object file(s)\n";
+	print "\tbuild:   Build module from source file(s) (compile + link)\n";
+	print "\tinstall: Install module(s) into freeswitch module directory\n";
+	print "\tshow:    Show defined variable(s)\n";
+	print "\n";
+
+	print "Options:\n";
+	print "\t--add-cflags  Append custom cflags   [compile, build]\n";
+	print "\t--set-cflags  Override cflags        [compile, build]\n";
+	print "\n";
+	print "\t--add-ldflags Append custom ldflags  [link, build]\n";
+	print "\t--set-ldflags Override ldflags       [link, build]\n";
+	print "\t--add-libs    Append additional libs [link, build]\n";
+	print "\t--set-libs    Override libs          [link, build]\n";
+	print "\n";
+	print "\t--destdir     Installation prefix    [install]\n";
+	print "\n";
+
+	print "Examples:\n";
+	print "\t$0 compile --add-cflags=\"-DFOO=1 -DBAR\" mod_test.c mod_test2.c\n\n";
+	print "\t$0 link --add-ldflags=\"-ltest\" mod_test.so mod_test.o mod_test2.o\n\n";
+	print "\t$0 build --add-cflags=\"-DFOO\" --add-ldflags=\"-ltest\" mod_test.so mod_test.c mod_test2.c\n\n";
+	exit 1;
+}
+
+sub fsxs_compile {
+	my $cc_cmd;
+
+	$cc_cmd = "$vars{CC}";
+	if( defined( $vars{APR_CFLAGS} ) && $vars{APR_CFLAGS} ) {
+		$cc_cmd = $cc_cmd . " $vars{APR_CFLAGS}"
+	}
+	$cc_cmd = $cc_cmd . " $vars{CFLAGS} -c -o";
+
+	foreach( @_ ) {
+		chomp( $_ );
+
+		# replace file extension
+		my $outfile = $_;
+		$outfile =~ s/\.(cpp|cc|c)$/.o/;
+
+		print "CC\t$_\n";
+		if( $debug ) {
+			print "$cc_cmd $outfile $_\n"
+		}
+		do_exec( "$cc_cmd $outfile $_" );
+	}
+}
+
+sub fsxs_link {
+	my $target = shift;
+	my @objs = @_;
+	my $ld_cmd;
+
+	$ld_cmd = "$vars{LD}";
+	if( defined( $vars{APR_LIBS} ) && $vars{APR_LIBS} ) {
+		$ld_cmd = $ld_cmd . " $vars{APR_LIBS}"
+	}
+	$ld_cmd = $ld_cmd . " $vars{LDFLAGS} $vars{SOLINK} -o";
+
+	print "LD\t$target\t[@objs]\n";
+	if( $debug ) {
+		print "$ld_cmd $target @objs $vars{LIBS}\n"
+	}
+	do_exec( "$ld_cmd $target @objs $vars{LIBS}" );
+}
+
+sub fsxs_install {
+	my @files = @_;
+	my $destination = $vars{DESTDIR} . $vars{MODULES_DIR};
+
+	# check if destination exists, create if it doesn't
+	if( ! -e $destination ) {
+		if( $debug ) {
+			print "$vars{MKDIR} $destination\n";
+		}
+		do_exec( "$vars{MKDIR} $destination" );
+	}
+	if( $debug ) {
+		print "$vars{INSTALL} -m644 @files $destination\n";
+	}
+	do_exec( "$vars{INSTALL} -m644 @files $destination" );
+}
+
+sub fsxs_show {
+	my @varlist = @_;
+
+	if( $#varlist < 0 ) {
+		# none requested, show all variables with names
+		my $key;
+		foreach $key ( keys %vars ) {
+			print "$key: $vars{$key}\n";
+		}
+	}
+	elsif( $#varlist > 0 ) {
+		# more than one requested, show with name
+		foreach( @varlist ) {
+			if( defined $vars{$_} ) {
+				print "$_: $vars{$_}\n";
+			}
+		}
+	} else {
+		# show only one variable, without name
+		if( defined $vars{$varlist[0]} ) {
+			print "$vars{$varlist[0]}\n";
+		}
+	}
+}
+
+#
+# main part
+#
+if( $#ARGV < 0 ) {
+	fsxs_usage;
+}
+chomp( $command = shift @ARGV );
+
+if( $command =~ /^install|build|link|compile|show$/ ) {
+
+	if( $command =~ /^show|compile|install$/ ) {
+		$needs_target = 0;
+	}
+}
+else {
+	print STDERR "Unknown command: $command\n";
+	fsxs_usage;
+}
+
+# parse environment variables
+if( defined $ENV{DEBUG} && $ENV{DEBUG} ) {
+	$debug = 1;
+}
+
+# parse arguments
+foreach(@ARGV) {
+	chomp( $_ );
+
+	if( $command ne 'show' )
+	{
+		if( /^\--add-cflags=(.*)$/ ) {
+			$vars{CFLAGS} = "$vars{CFLAGS} $1";
+		}
+		elsif( /^\--set-cflags=(.*)$/ ) {
+			$vars{CFLAGS} = "$1";
+		}
+		elsif( /^\--add-ldflags=(.*)$/ ) {
+			$vars{LDFLAGS} = "$vars{LDFLAGS} $1";
+		}
+		elsif( /^\--set-ldflags=(.*)$/ ) {
+			$vars{LDFLAGS} = "$1";
+		}
+		elsif( /^\--add-libs=(.*)$/ ) {
+			$vars{LIBS} = "$vars{LIBS} $1";
+		}
+		elsif( /^\--set-libs=(.*)$/ ) {
+			$vars{LIBS} = "$1";
+		}
+		elsif( /^\--destdir=(.*)$/ ) {
+			$vars{DESTDIR} = "$1";
+		}
+		elsif( /^\--debug$/ ) {
+			$debug = 1;
+		}
+		elsif( /^(DESTDIR|CFLAGS|CC|LDFLAGS|LD|LIBS)=(.*)$/ ) {
+			if( $debug ) {
+				print "Overriding $1 (new value: $2)\n";
+			}
+			$vars{$1} = "$2";
+		}
+		elsif( /^([^\-]+.*)$/ ) {
+			if( $needs_target ) {
+				$target = "$1";
+				$needs_target = 0;
+			} else {
+				push(@files, "$1");
+			}
+		}
+	} else {
+		# show command has different parameter handling
+		if( /^\--(.*)$/ ) {
+			push( @files, uc "$1" );
+		}
+		elsif( /^([^\-]+.*)$/ ) {
+			push( @files, uc "$1" );
+		}
+	}
+}
+
+#
+# execute commands
+#
+if( $command eq 'link' ) {
+	fsxs_link( $target, @files );
+}
+elsif( $command eq 'compile' ) {
+	fsxs_compile( @files );
+}
+elsif( $command eq 'build' ) {
+	my @objs = ();
+
+	fsxs_compile( @files );
+
+	foreach( @files ) {
+		chomp( $_ );
+		$_ =~ s/\.(cpp|cc|c)$/.o/;
+		push( @objs, "$_" );
+	}
+
+	fsxs_link( $target, @objs );
+}
+elsif( $command eq 'show' ) {
+	fsxs_show( @files );
+}
+elsif( $command eq 'install' ) {
+	fsxs_install( @files );
+}
+else {
+	fsxs_usage;
+}
+
+exit 0;



More information about the Freeswitch-svn mailing list