#!/bin/bash

if [ $1 -a $1 = "clean" ]; then

for x in src/misc src/net src/gui src; do
	echo -n -e "Cleaning in $x...\t";
	cd $x
	make clean 1>/dev/null 2>/dev/null
	rm -rf Makefile .makelog 2>&1 >/dev/null
	echo "done!";
	cd -
done

elif [ $1 -a $1 = "makeclean" ]; then

for x in src/misc src/net src/gui src; do
	echo -n -e "Running make clean in $x...\t";
	cd $x
	make clean 1>/dev/null 2>/dev/null
	echo "done!";
	cd -
done

else

path=$(pwd);
for x in src/misc src/net src/gui; do
	cd $x;
	if [ ! -e Makefile ]; then
	echo -n -e "Bulding Makefile for $x...\t";
	cppfiles=$(ls *.cpp 2>/dev/null);
	objfiles=${cppfiles//.cpp/.o};
	flatobj="";
	for flat in $objfiles; do
		flatobj="$flatobj $flat";
	done;
	rm -rf Makefile
	echo -e "CC=g++\nCFLAGS=-g -I$path/src\n" >> Makefile; 
	echo "OBJ=$flatobj" >> Makefile; 
	echo -e 'all: $(OBJ)\n' >> Makefile;
	for file in $objfiles; do
		echo -e -n "$file: ${file/.o/.h} ${file/.o/.cpp}\n\t@echo \"  CC $file\"\n\t" >> Makefile;
		echo -e -n '@$(CC) -c $(CFLAGS) ' >> Makefile;
		echo -e -n "${file/.o/.cpp} -o $file\n" >> Makefile;
	done;

	echo -e "clean:\n\trm -rf *.o" >> Makefile;
	echo "done!";
	fi;
	make 2>.makelog;
	if [ $? -ne 0 ]; then
		echo "ERROR WHILE MAKING IN $x";
		sleep 1;
		less <.makelog
		exit 1;
	fi;
	echo;
	cd -;
done;

cd src
if [ ! -e Makefile ]; then
echo -n -e "Building main Makefile...\t";

mainobj=$(ls */*.o 2>/dev/null);
flatobj="";
for flat in $mainobj; do
	flatobj="$flatobj $flat";
done;

echo -e "CC=g++
CFLAGS=-g -I$path/src
OBJ=$flatobj
LIBS=$(./libs.conf)
" > Makefile;
echo -e 'all:
\t@echo "  CC main.o"
\t@$(CC) $(CFLAGS) -c main.cpp -o main.o
\t@$(CC) $(CFLAGS) main.o $(OBJ) -o gLanP2P $(LIBS)
\t@echo "  LD gLanP2P"
\t@cp gLanP2P ../\n
clean:
\t@-rm -rf gLanP2P *.o */*.o\n
install:
\t@cp gLanP2P /usr/local/bin\n
' >> Makefile;
echo "done!";
echo
fi
make 2>.makelog;
if [ $? -ne 0 ]; then
	echo "ERROR WHILE MAKING IN src";
	sleep 1;
	less <.makelog
	exit 1;
fi;
cd -
fi;
