#!/bin/sh

BASE=$PWD

rm -rf staticbin
mkdir -p staticbin

for i in src/common src/ksbuild src/synthesizer src/shellutils
do
	FILES=`cat $i/Makefile |grep '_SOURCES =' |sed 's/.*=//g' |\
	sed 's/\.cc/.o/g' | sed 's/\.cpp/.o/g' | sed 's/\.c/.o/g'`

	MOCFILES=`cat $i/Makefile |grep '^[a-z].*\.moc\.cpp:' |sed 's/:.*//g' |\
		sed 's/\.cpp/.o/g'`

	for file in $FILES $MOCFILES
	do
		if ! grep "/$file\$" staticbin/mkstaticbin.list >/dev/null 2>&1; then
			echo " => building $i/$file "
			echo $i/$file >>staticbin/mkstaticbin.list
			cd $i
			make CXXFLAGS="-O2 -DCOMMON_BINARY" $file || exit 1;
			cd $BASE
			[ ! -f staticbin/$file ] && cp $i/$file staticbin
		fi
	done
done

cat > staticbin/artsmain.cc << EOH
/** This is autogenerated by mkstaticbin - DO NOT EDIT **/

#include <sys/types.h>
#include <unistd.h>
#include <string.h>
#include <ctype.h>
#include <stdio.h>
#include "../config.h"

extern int synth_server_main(int argc, char **argv);
extern int midisend_main(int argc, char **argv);
extern int artscat_main(int argc, char **argv);
extern int artsshell_main(int argc, char **argv);
extern int artsbuilder_main(int argc, char **argv);

int main(int argc, char **argv)
{
	char *binaryname = strdup(argv[0]);
	int i = strlen(binaryname)-1;

	while(i>0 && binaryname[i] != '/')
	{
		binaryname[i] = tolower(binaryname[i]);
		i--;
	}
	binaryname[i] = tolower(binaryname[i]);
	if(i!=0) binaryname = &binaryname[i+1];

	if(strcmp("artsserver.bin",binaryname) == 0)
		return synth_server_main(argc,argv);

	// drop root priviliges if running setuid root
	// (due to realtime priority stuff)
    if (geteuid() != getuid()) seteuid(getuid());

	if(strcmp("midisend",binaryname) == 0)
		return midisend_main(argc,argv);

	if(strcmp("artscat",binaryname) == 0)
		return artscat_main(argc,argv);

	if(strcmp("artsshell",binaryname) == 0)
		return artsshell_main(argc,argv);

	if(strcmp("artsbuilder",binaryname) == 0)
		return artsbuilder_main(argc,argv);

	fprintf(stderr,
	"aRts %s - static binary\n\n"

	"  This binary contains artsserver.bin, midisend, artscat, artsshell\n"
	"  and artsbuilder. To use them, create a link on this binary with the\n"
	"  appropriate name, e.g.\n\n"
	"      ln -s %s artsserver.bin\n\n"
	"  to get a artsserver.bin binary. (hint: you currently called this\n"
	"  program as <%s>)\n\n",VERSION,argv[0],binaryname);
}
EOH

cd staticbin
make artsmain.o

OBJS=`cat mkstaticbin.list |sed 's:.*/::g'`

../libtool --mode=link gcc -all-static -o arts artsmain.o $OBJS -L/usr/X11R6/lib -L/usr/local/arts/lib -lkfile -lkfm -lkdeui -lkdecore -lqt -lXext -lX11 -lmico2.2.7 -ldl -lpthread -laudiofile -L/usr/lib/gcc-lib/i486-linux/egcs-2.91.60 -lstdc++ -lm
cd $BASE
