#!/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 -s 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/\(\)/\L\1/' -e 's/\(\)/\L\1/' -e 's/\(\)/\L\1/' -e 's/\(\)/\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