cgal/Scripts/scripts/create_makefile

213 lines
5.3 KiB
Bash
Executable File

#!/bin/sh
#
# This script creates a CGAL makefile with entries for all .C files in the
# current directory.
#
# Usage: create_makefile [-options] [outputfile]
#
# -d create a default CGAL makefile
# -t create a makefile for the test suite
# -w create a makefile with flags for LEDA windows
# -g create a makefile with flags for GEOWIN
# -q create a makefile with support for QT
#VERSION=2.0
header()
{
echo "#---------------------------------------------------------------------#"
echo "# $1"
echo "#---------------------------------------------------------------------#"
}
create_makefile_entry_cpp()
{
# local CFILE MOC_FROM MOCFILE
CFILE=$1.cpp
MOCFILE=""
if [ -n "$QT" ]; then
if MOC_FROM=`awk 'BEGIN{ FS=":"; COUNT=0 } \
/\/\/ *moc_source_file *:/ {print $2; COUNT++} \
END{ exit COUNT==0 }' $CFILE`; then
MOCFILE=$1.moc
echo "$MOCFILE: $MOC_FROM"
echo " \$(QT_MOC) -o $MOCFILE $MOC_FROM"
echo
echo "$1\$(OBJ_EXT): $MOCFILE"
echo
fi
fi
# if grep 'main *(' $CFILE > /dev/null; then
echo "$1\$(OBJ_EXT): $1.cpp"
echo " \$(CGAL_CXX) \$(CXXFLAGS) \$(OBJ_OPT) $1.cpp"
echo "$1\$(EXE_EXT): $1\$(OBJ_EXT)"
echo " \$(CGAL_CXX) \$(LIBPATH) \$(EXE_OPT)$1 $1\$(OBJ_EXT) \$(LDFLAGS)"
echo
# fi;
}
create_makefile_entry()
{
# local CFILE MOC_FROM MOCFILE
CFILE=$1.C
MOCFILE=""
if [ -n "$QT" ]; then
if MOC_FROM=`awk 'BEGIN{ FS=":"; COUNT=0 } \
/\/\/ *moc_source_file *:/ {print $2; COUNT++} \
END{ if (COUNT==0) exit 1; else exit 0 }' $CFILE`; then
MOCFILE=$1.moc
echo "$MOCFILE: $MOC_FROM"
echo " \$(QT_MOC) -o $MOCFILE $MOC_FROM"
echo
echo "$1\$(OBJ_EXT): $MOCFILE"
echo
fi
fi
# if grep 'main *(' $CFILE > /dev/null; then
echo "$1\$(EXE_EXT): $1\$(OBJ_EXT)"
echo " \$(CGAL_CXX) \$(LIBPATH) \$(EXE_OPT)$1 $1\$(OBJ_EXT) \$(LDFLAGS)"
echo
# fi;
}
create_makefile()
{
echo "# Created by the script create_makefile"
echo "# This is the makefile for compiling a CGAL application."
echo
header "include platform specific settings"
echo "# Choose the right include file from the <cgalroot>/make directory."
echo
echo "# CGAL_MAKEFILE = ENTER_YOUR_INCLUDE_MAKEFILE_HERE"
echo "include \$(CGAL_MAKEFILE)"
echo
header "compiler flags"
echo
echo "CXXFLAGS = \\"
echo " -I../../include \\"
if [ ! -z "$TESTSUITE" ] ; then
echo " \$(TESTSUITE_CXXFLAGS) \\"
echo " \$(EXTRA_FLAGS) \\"
fi
echo " \$(CGAL_CXXFLAGS) \\"
if [ -d include ] ; then
echo " -Iinclude \\"
fi
echo " \$(LONG_NAME_PROBLEM_CXXFLAGS)"
echo
header "linker flags"
echo
echo "LIBPATH = \\"
if [ ! -z "$TESTSUITE" ] ; then
echo " \$(TESTSUITE_LIBPATH) \\"
fi
if [ -z "$LEDAWINDOWS" ] ; then
echo " \$(CGAL_LIBPATH)"
else
echo " \$(CGAL_WINDOW_LIBPATH)"
fi
echo
echo "LDFLAGS = \\"
if [ ! -z "$TESTSUITE" ] ; then
echo " \$(TESTSUITE_LDFLAGS) \\"
fi
echo " \$(LONG_NAME_PROBLEM_LDFLAGS) \\"
if [ -n "$QT" ] ; then
echo " \$(CGAL_QT_LDFLAGS)"
elif [ -n "$GEOWIN" ] ; then
echo " \$(CGAL_GEOWIN_LDFLAGS)"
elif [ -z "$LEDAWINDOWS" ] ; then
echo " \$(CGAL_LDFLAGS)"
else
echo " \$(CGAL_WINDOW_LDFLAGS)"
fi
echo
header "target entries"
echo
printf "all: "
for file in `ls *.C 2>/dev/null | sort` ; do
printf "\\\\\n `basename $file .C`\$(EXE_EXT) "
done
for file in `ls *.cpp 2>/dev/null | sort` ; do
printf "\\\\\n `basename $file .cpp`\$(EXE_EXT) "
done
echo
echo
for file in `ls *.C 2>/dev/null | sort` ; do
base=`basename $file .C`
create_makefile_entry $base
done
for file in `ls *.cpp 2>/dev/null | sort` ; do
base=`basename $file .cpp`
create_makefile_entry_cpp $base
done
printf "clean: "
for file in `ls *.C 2>/dev/null | sort` ; do
printf "\\\\\n `basename $file .C`.clean "
done
for file in `ls *.cpp 2>/dev/null | sort` ; do
printf "\\\\\n `basename $file .cpp`.clean "
done
printf "\n\n"
header "suffix rules"
echo
echo ".C\$(OBJ_EXT):"
echo " \$(CGAL_CXX) \$(CXXFLAGS) \$(OBJ_OPT) \$<"
echo
}
usage()
{
echo "Usage: create_makefile [-options] [outputfile]"
echo
echo "-d create a default CGAL makefile"
echo "-t create a makefile for the test suite"
echo "-w create a makefile with flags for LEDA windows"
echo "-g create a makefile with flags for GEOWIN"
echo "-q create a makefile with flags for QT"
}
case $# in
0) usage
exit 1
esac
for i do
case $i in
-d) ;;
-t) TESTSUITE='y';;
-w) LEDAWINDOWS='y';;
-g) GEOWIN='y';;
-q) QT='y';;
-*) usage
exit 1;;
*) if [ -z "$OUTPUTFILE" ] ; then
OUTPUTFILE=$i
else
usage
exit 1
fi;;
esac
done
if [ -z "$OUTPUTFILE" ] ; then
OUTPUTFILE=makefile
fi
if [ -f ${OUTPUTFILE} ] ; then
echo "moving $OUTPUTFILE to ${OUTPUTFILE}.bak ..."
mv -f $OUTPUTFILE ${OUTPUTFILE}.bak
fi
create_makefile > $OUTPUTFILE
echo "created $OUTPUTFILE ..."