#!/bin/bash

if [ ! -e "sdk/$2.sdk" ]; then 
	echo "sdk/$2.sdk not found"
	exit 1
fi

case $1 in
  install)	
	while IFS='' read -r line || [[ -n "$line" ]]; do
    	a=(${line//:/ })
    	case ${a[0]} in
    		Short | Version | Author | Uploader | Type | Replaces | Architecture)
    			echo "$line"
    			;; 
    		Url)
    			file=$(basename ${a[2]})
    			if [ "${a[1]}" == "git" ]; then
	    			if [ ! -e "projects/$file" ]; then
	    				pushd projects
	    				git clone ${a[1]}:${a[2]} || rm -rf $file; exit 1
	    				popd;
	    			fi
    				pushd projects/$file
    				git pull
    				popd
    				rsync projects/$file/* build/$2/
    			else
	    			if [ ! -e "download/$file" ]; then
	    				echo wget ${a[1]}:${a[2]} -O download/$file
	    				wget ${a[1]}:${a[2]} -O download/$file || (rm download/$file; exit 1)
	    			fi
	    			if [ ! -e "build/$2" ] || [ "$(ls -l build/$2)" == "total 0" ]; then
		    			mkdir -p build/$2
		    			pushd build/$2
		    				lha x "../../download/$file" && $3/bin/lha x "../../download/$file"
		    			popd
	    			fi
	    		fi
    		;;
    		fd2sfd)
    			fd=${a[1]}
    			proto=${a[2]}
    			file=$(basename $fd)
   				name=${file%???}
    			mkdir -p $3/m68k-amigaos/lib/sfd/
    			$3/bin/fd2sfd -o $3/m68k-amigaos/lib/sfd/$name.sfd $3/m68k-amigaos/lib/fd/$fd $3/m68k-amigaos/include/$proto || exit 1
    		;;
    		sfdc)
    			sfd=${a[1]}
    			file=$(basename $sfd)
   				name=${file%????}
    			mkdir -p $3/m68k-amigaos/include/proto/
    			$3/bin/sfdc --mode=proto --target=m68k-amigaos --output=$3/m68k-amigaos/include/proto/$name.h $3/m68k-amigaos/lib/sfd/$sfd || exit 1
    			sed -i.bak -e 's/\(<clib\/.*>\)/\L\1/' -e 's/\(<defines\/.*>\)/\L\1/' -e 's/\(<inline\/.*>\)/\L\1/' -e 's/\(<pragmas\/.*>\)/\L\1/' $3/m68k-amigaos/include/proto/$name.h 
    			rm $3/m68k-amigaos/include/proto/$name.h.bak
    			mkdir -p $3/m68k-amigaos/include/inline/
    			$3/bin/sfdc --mode=macros --target=m68k-amigaos --output=$3/m68k-amigaos/include/inline/$name.h $3/m68k-amigaos/lib/sfd/$sfd || exit 1
    			mkdir -p $3/m68k-amigaos/include/lvo/
    			$3/bin/sfdc --mode=lvo --target=m68k-amigaos --output=$3/m68k-amigaos/include/proto/$name.i $3/m68k-amigaos/lib/sfd/$sfd || exit 1
    			if [ "${a[2]}" != "" ] && [ "${a[3]}" != "" ]; then
    				echo fixup names from ${a[2]} to ${a[3]}
    				echo sed -i.bak -e "s/${a[2]}/${a[3]}/" $3/m68k-amigaos/include/proto/$name.h
    				sed -i.bak -e "s/${a[2]}/${a[3]}/" $3/m68k-amigaos/include/proto/$name.h 
    				sed -i.bak -e "s/${a[2]}/${a[3]}/" $3/m68k-amigaos/include/proto/$name.i
    				sed -i.bak -e "s/${a[2]}/${a[3]}/" $3/m68k-amigaos/include/inline/$name.h
    				rm $3/m68k-amigaos/include/proto/$name.h.bak $3/m68k-amigaos/include/proto/$name.i.bak $3/m68k-amigaos/include/inline/$name.h.bak 
    			fi
    		;;
    		stubs)
    			sfd=${a[1]}
    			file=$(basename $sfd)
   				name=${file%????}
    			$3/bin/sfdc --mode=autoopen --target=m68k-amigaos --output=build/$2/$name.c $3/m68k-amigaos/lib/sfd/$name.sfd || exit 1
    			sed -i.bak -e 's/__inline//g' -e 's/: \"d0\",/:/g' build/$2/$name.c || exit 1
    			echo $3/bin/m68k-amigaos-gcc -Os -noixemul -fomit-frame-pointer build/$2/$name.c -c  
    			$3/bin/m68k-amigaos-gcc -Os -noixemul -fomit-frame-pointer build/$2/$name.c -c -o build/$2/$name.o || exit 1
    			echo $3/bin/m68k-amigaos-ar r $3/m68k-amigaos/lib/libstubs.a build/$2/$name.o
    			(
					flock -x 200

	    			$3/bin/m68k-amigaos-ar r $3/m68k-amigaos/lib/libstubs.a build/$2/$name.o || exit 1
	    			$3/bin/m68k-amigaos-ar r $3/m68k-amigaos/lib/libb/libstubs.a build/$2/$name.o || exit 1
	    			$3/bin/m68k-amigaos-ar r $3/m68k-amigaos/lib/libm020/libstubs.a build/$2/$name.o || exit 1
	    			$3/bin/m68k-amigaos-ar r $3/m68k-amigaos/lib/libm020/libb/libstubs.a build/$2/$name.o || exit 1
	    			$3/bin/m68k-amigaos-ar r $3/m68k-amigaos/lib/libm020/libb32/libstubs.a build/$2/$name.o || exit 1
	    		) 200>/tmp/amiga-gcc-libstubs-lock
    		;;
    		lib)
    			sfd=${a[1]}
    			file=$(basename $sfd)
    			name=${file%????}
    			$3/bin/sfdc --mode=stubs --target=m68k-amigaos --output=build/$2/lib$2.c $3/m68k-amigaos/lib/sfd/$name.sfd || exit 1
    			sed -i.bak -e 's/__inline//g' -e 's/: \"d0\",/:/g' build/$2/lib$2.c || exit 1
    			echo $3/bin/m68k-amigaos-gcc -Os -noixemul -fomit-frame-pointer build/$2/lib$2.c -c 
    			$3/bin/m68k-amigaos-gcc -Os -noixemul -fomit-frame-pointer build/$2/lib$2.c -c -o build/$2/lib$2.o || exit 1
    			echo $3/bin/m68k-amigaos-ar r $3/m68k-amigaos/lib/lib$2.a build/$2/lib$2.o
    			$3/bin/m68k-amigaos-ar r $3/m68k-amigaos/lib/lib$2.a build/$2/lib$2.o || exit 1
    		;;
    		redirinc)
    			echo creating redirecting header $3/m68k-amigaos/include/${a[1]}
    			echo "#include \"${a[2]}\"" >$3/m68k-amigaos/include/${a[1]}
    		;;
    		symlink)
    			echo creating symlink from $3/m68k-amigaos/${a[2]} to $3/m68k-amigaos/${a[1]}
    			rm -rf $3/m68k-amigaos/${a[2]}
    			ln -s $3/m68k-amigaos/${a[1]} $3/m68k-amigaos/${a[2]}
    		;;
    		*)
    			if [ "$line" != "" ]; then		
	    			if [ "${a[1]}" == "=" ]; then
	    				file=${a[2]}
	    				line=${a[0]}
	    				cp build/$2/$line build/$2/$(dirname $line)/$file
	    			else
	    				file=$(basename $line)
	    			fi
	    			
    				dir=$(basename $(dirname $line))
	    			
	    			if [[ $file == *.h ]] || [[ $file == *.i ]]; then
						mkdir -p "$3/m68k-amigaos/include/$dir"
						echo cp "build/$2/$line" "$3/m68k-amigaos/include/$dir/$file" 
						cp "build/$2/$line" "$3/m68k-amigaos/include/$dir/$file" 
					elif [[ $file == *.guide ]]; then
						mkdir -p "$3/m68k-amigaos/guide"
						echo cp "build/$2/$line" "$3/m68k-amigaos/guide/$file" 
						cp "build/$2/$line" "$3/m68k-amigaos/guide/$file" 
					elif [[ $file == *.doc ]]; then
						mkdir -p "$3/m68k-amigaos/doc"
						echo cp "build/$2/$line" "$3/m68k-amigaos/doc/$file" 
						cp "build/$2/$line" "$3/m68k-amigaos/doc/$file" 
					elif [[ $file == *.sfd ]]; then
						mkdir -p "$3/m68k-amigaos/lib/sfd"
						echo cp "build/$2/$line" "$3/m68k-amigaos/lib/sfd/$file" 
						cp "build/$2/$line" "$3/m68k-amigaos/lib/sfd/$file" 
					elif [[ $file == *.fd ]]; then
						mkdir -p "$3/m68k-amigaos/lib/fd"
						echo cp "build/$2/$line" "$3/m68k-amigaos/lib/fd/$file" 
						cp "build/$2/$line" "$3/m68k-amigaos/lib/fd/$file" 
					elif [[ $file == *.a ]]; then
						echo cp "build/$2/$line" "$3/m68k-amigaos/lib/$file" 
						cp "build/$2/$line" "$3/m68k-amigaos/lib/$file" 
	    			fi
				fi	    			
    		;;
    	esac
	done < "sdk/$2.sdk"
  ;;  
  clean)
	rm -rf build/$2
  ;;  
esac
