#!/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 /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 ..."