#!/usr/local/bin/bash
# -*- mode: Shell-script; -*-
# set -x
# $Id: make3,v 1.15 2001-01-27 15:18:55+09 hayakawa Exp $

ULTRA_ROOT=/ultra
export ULTRA_ROOT
#/usr/local/bin/bash
#/usr/bin/egrep
#/usr/sbin/smake
#/usr/local/bin/sed
#/sbin/make
#/usr/local/bin/bash
#/usr/bin/X11/mkdirhier
#/usr/local/srd/bin/jmake_gcc

#PATH=$ULTRA_ROOT/usr/local/nu64/bin:$ULTRA_ROOT/usr/local/lib/gcc-lib/nu64/2.8.1:$ULTRA_ROOT/usr/local/nu64/bin:/usr/gnu/bin:$PATH
if [ "$USER" != "hayakawa" ]; then
    PATH=$ULTRA_ROOT/usr/local/nu64/bin:$ULTRA_ROOT/usr/local/lib/gcc-lib/nu64/2.8.1:$ULTRA_ROOT/usr/local/nu64/bin:/usr/gnu/bin:/usr/local/srd/bin:/usr/local/bin:/usr/bin/X11:/usr/sbin:/sbin:/usr/bin:/usr/bsd
    export PATH
else
    PATH=$HOME/bin:$ULTRA_ROOT/usr/local/nu64/bin:$ULTRA_ROOT/usr/local/lib/gcc-lib/nu64/2.8.1:$ULTRA_ROOT/usr/local/nu64/bin:/usr/gnu/bin:/usr/local/srd/bin:/usr/local/bin:/usr/bin/X11:/usr/sbin:/sbin:/usr/bin:/usr/bsd
    export PATH
fi
INCDIR=$ULTRA_ROOT/usr/local/lib/gcc-lib/nu64/2.8.1/include
export INCDIR

if [ $# = 0 ]; then
cat <<EOF

ゼルダメイクチェッカー
cc, gcc, c++ によるコンパイルをしてバグを見つけるのを支援します
usage: $0 file.o ...

以下の環境変数をセットするとコンパイルの種類を制御できます
MAKE3_DFX 'd f x'
MAKE3_CCC 'gcc g++ c++ cc'

リンクの張れてないひとはスーパーユーザで張ってください。
ln -s /auto/srd-usrlocal-server/export/ultra /.
ln -s /auto/srd-usrlocal-server/usr/gnu /usr/.

EOF
    make -n rom_d rom_x rom_f | egrep -v 'rom$' | sed -e 's/^\(.*\)$/(\1)/g' | bash
    rm -rf tmp_rom_{d,x,f}_{c++,cc,g++,gcc}
    mkdir  tmp_rom_{d,x,f}_{c++,cc,g++,gcc}
#    for DIR in tmp_rom_{d,x,f}_{c++,cc,g++,gcc}; do mkdir -p $DIR; done
    cp -p rom_d/{m_name_table_declS_i.h,ac_furniture_name_decl_i.h} tmp_rom_d_c++/.
    cp -p rom_d/{m_name_table_declS_i.h,ac_furniture_name_decl_i.h} tmp_rom_d_cc/.
    cp -p rom_d/{m_name_table_declS_i.h,ac_furniture_name_decl_i.h} tmp_rom_d_g++/.
    cp -p rom_d/{m_name_table_declS_i.h,ac_furniture_name_decl_i.h} tmp_rom_d_gcc/.
    cp -p rom_x/{m_name_table_declS_i.h,ac_furniture_name_decl_i.h} tmp_rom_x_c++/.
    cp -p rom_x/{m_name_table_declS_i.h,ac_furniture_name_decl_i.h} tmp_rom_x_cc/.
    cp -p rom_x/{m_name_table_declS_i.h,ac_furniture_name_decl_i.h} tmp_rom_x_g++/.
    cp -p rom_x/{m_name_table_declS_i.h,ac_furniture_name_decl_i.h} tmp_rom_x_gcc/.
    cp -p rom_f/{m_name_table_declS_i.h,ac_furniture_name_decl_i.h} tmp_rom_f_c++/.
    cp -p rom_f/{m_name_table_declS_i.h,ac_furniture_name_decl_i.h} tmp_rom_f_cc/.
    cp -p rom_f/{m_name_table_declS_i.h,ac_furniture_name_decl_i.h} tmp_rom_f_g++/.
    cp -p rom_f/{m_name_table_declS_i.h,ac_furniture_name_decl_i.h} tmp_rom_f_gcc/.
    rm -f m_name_table_declS_i.h ac_furniture_name_decl_i.h
    exit 1
fi

ARGS=`echo $*|sed -e "s/\.c/\.o/g"`
if [ "$*" != "$ARGS" ]; then
  echo "*** 引数は .c → .o 変換されました ***"
  echo $0 $ARGS
fi

make_common() {
    MAKE_DIR=tmp_rom_$1_$2
    if [ ! -d ${MAKE_DIR} ]; then
	mkdir ${MAKE_DIR}
    fi
    echo ": Entering directory \`./${MAKE_DIR}/'"
    case "$2" in
    "g++" )
	(echo `make -n romPP_$1 | sed -n -e "s/cd rom_$1/cd ${MAKE_DIR}/" -e "/smake/s/ romPP/ __GCC__= FORCE_CPP= WARNLEVEL1= VCDEFS=-DMAKE3_RUNNING $ARGS /p"`)
	(eval `make -n romPP_$1 | sed -n -e "s/cd rom_$1/cd ${MAKE_DIR}/" -e "/smake/s/ romPP/ __GCC__= FORCE_CPP= WARNLEVEL1= VCDEFS=-DMAKE3_RUNNING $ARGS /p"`) 2>&1 | jmake_gcc
	;;
    "gcc" )
	(echo `make -n romPP_$1 | sed -n -e "s/cd rom_$1/cd ${MAKE_DIR}/" -e "/smake/s/ romPP/ __GCC__= WARNLEVEL1= VCDEFS=-DMAKE3_RUNNING $ARGS /p"`)
	(eval `make -n romPP_$1 | sed -n -e "s/cd rom_$1/cd ${MAKE_DIR}/" -e "/smake/s/ romPP/ __GCC__= WARNLEVEL1= VCDEFS=-DMAKE3_RUNNING $ARGS /p"`) 2>&1 | jmake_gcc
	;;
    "c++" )
	(echo `make -n romPP_$1 | sed -n -e "s/cd rom_$1/cd ${MAKE_DIR}/" -e "/smake/s/ romPP/ FORCE_CPP= WARNLEVEL1= VCDEFS=-DMAKE3_RUNNING $ARGS /p"`)
	(eval `make -n romPP_$1 | sed -n -e "s/cd rom_$1/cd ${MAKE_DIR}/" -e "/smake/s/ romPP/ FORCE_CPP= WARNLEVEL1= VCDEFS=-DMAKE3_RUNNING $ARGS /p"`) 2>&1 | jmake
	;;
    * )
	(echo `make -n romPP_$1 | sed -n -e "s/cd rom_$1/cd ${MAKE_DIR}/" -e "/smake/s/ romPP/ WARNLEVEL1= VCDEFS=-DMAKE3_RUNNING $ARGS /p"`)
	(eval `make -n romPP_$1 | sed -n -e "s/cd rom_$1/cd ${MAKE_DIR}/" -e "/smake/s/ romPP/ WARNLEVEL1= VCDEFS=-DMAKE3_RUNNING $ARGS /p"`) 2>&1 | jmake
	;;
    esac
    echo ": Leaving directory \`./${MAKE_DIR}/'"
    MAKE_DIR=

}
for DFX in ${MAKE3_DFX:=d f}; do
    for CCC in ${MAKE3_CCC:=gcc g++ c++ cc}; do
	make_common ${DFX} ${CCC}
    done
done
