2011-07-07 16:04:10 +04:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
REP_CC=cc
|
|
|
|
REP_CXX=c++
|
|
|
|
REP_INCLUDE='-I$(HOME)/projects/include -I/usr/include'
|
|
|
|
REP_LIBRARIES=
|
|
|
|
REP_TARGET=target
|
|
|
|
|
|
|
|
SMAKE_DIR=~/dev/bash/smake/etc/smake
|
|
|
|
ENV_FILE=$SMAKE_DIR/env.smk
|
|
|
|
BUILD_FILE=$SMAKE_DIR/build.smk
|
|
|
|
RULES_FILE=$SMAKE_DIR/rules.smk
|
|
|
|
|
|
|
|
# Debug
|
|
|
|
DEBUG=1
|
|
|
|
|
|
|
|
# Parameters processing
|
|
|
|
TEMP=`getopt -o c:x:i:l:t: --long cc:,cxx:,include:,libraries:,target: -- "$@"`
|
|
|
|
eval set -- "$TEMP"
|
|
|
|
|
|
|
|
while true ; do
|
|
|
|
case "$1" in
|
|
|
|
-c|--cc) REP_CC=$2 ; echo "CC=$REP_CC" ; shift 2 ;;
|
|
|
|
-x|--cxx) REP_CXX=$2 ; echo "CXX=$REP_CXX" ; shift 2 ;;
|
|
|
|
-i|--include) REP_INCLUDE=$2 ; echo "INCLUDE=$REP_INCLUDE"; shift 2 ;;
|
|
|
|
-l|--libraries) REP_LIBRARIES=$2 ; echo "LIBRARIES=$REP_LIBRARIES"; shift 2 ;;
|
|
|
|
-t|--target) REP_TARGET=$2 ; echo "TARGET=$REP_TARGET"; shift 2 ;;
|
|
|
|
--) shift ; break ;;
|
|
|
|
*) echo "Internal error!" ; exit 1 ;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
|
|
|
# --- Environment ---
|
|
|
|
sed "s~REP_CC~$REP_CC~ ; s~REP_CXX~$REP_CXX~ ; \
|
|
|
|
s~REP_LIBRARIES~$REP_LIBRARIES~ ; s~REP_TARGET~$REP_TARGET~" $ENV_FILE > Makefile
|
|
|
|
|
|
|
|
# INCLUDE0, INCLUDE1, INCLUDE2, ...
|
2011-07-07 16:13:03 +04:00
|
|
|
REP_INCLUDE=`echo $REP_INCLUDE | sed "s~-I~~g"`
|
2011-07-07 16:04:10 +04:00
|
|
|
|
|
|
|
i=1
|
|
|
|
for d in $REP_INCLUDE; do
|
|
|
|
echo "INCLUDE$i=$d" >> Makefile
|
|
|
|
i=$((i+1))
|
|
|
|
done
|
|
|
|
|
2011-07-07 16:13:03 +04:00
|
|
|
echo -n "INCLUDE=" >> Makefile
|
|
|
|
|
|
|
|
i=1
|
2011-07-07 16:04:10 +04:00
|
|
|
for d in $REP_INCLUDE; do
|
2011-07-07 16:13:03 +04:00
|
|
|
if [ $i != 1 ]; then
|
|
|
|
echo -n ' ' >> Makefile
|
|
|
|
fi
|
|
|
|
echo -n '-I$(INCLUDE'$i')' >> Makefile
|
|
|
|
i=$((i+1))
|
2011-07-07 16:04:10 +04:00
|
|
|
done
|
|
|
|
echo >> Makefile
|
|
|
|
|
|
|
|
echo >> Makefile
|
|
|
|
|
|
|
|
# --- Build ---
|
|
|
|
cat $BUILD_FILE >> Makefile
|
|
|
|
|
|
|
|
echo >> Makefile
|
|
|
|
|
|
|
|
# --- Rules ---
|
|
|
|
cat $RULES_FILE >> Makefile
|
|
|
|
|
2011-07-07 16:13:03 +04:00
|
|
|
REP_INCLUDE=`echo $REP_INCLUDE | sed "s~-I~~g ; s~\\$(HOME)~${HOME}~"`
|
|
|
|
|
2011-07-07 16:04:10 +04:00
|
|
|
all_dep_lst=`grep ^\#include\ \" $REP_TARGET.c | sed 's~[^"]*"\([^"]*\)"~\1~' | sort -u`
|
|
|
|
|
|
|
|
while [[ "$all_dep_lst" != "$old_all_dep_lst" ]]; do
|
|
|
|
old_all_dep_lst=$all_dep_lst
|
|
|
|
for f in $all_dep_lst; do
|
|
|
|
F=""
|
|
|
|
for d in . $REP_INCLUDE; do
|
|
|
|
#echo "$d/$f" # | sed "s~^${HOME}~$\(HOME\)~"
|
|
|
|
if [ -f "$d/$f" ]; then
|
|
|
|
F="$d/$f"
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
if [ "$F" == "" ]; then
|
|
|
|
echo "file \"$f\" not found"
|
|
|
|
exit -1
|
|
|
|
fi
|
|
|
|
#echo "F=$F"
|
|
|
|
all_dep_lst="$all_dep_lst "`grep ^\#include\ \" $F | sed 's~[^"]*"\([^"]*\)"~\1~'`
|
|
|
|
all_dep_lst=`echo $all_dep_lst | sed 's~ ~\n~g' | sort -u`
|
|
|
|
done
|
|
|
|
done
|
|
|
|
|
|
|
|
echo "all_dep_lst=$all_dep_lst"
|
|
|
|
|