cgal/Scripts/scripts/create_makefile

236 lines
6.2 KiB
Bash
Executable File

#!/bin/sh
# Copyright (c) 1999,2000,2002,2003,2004,2005,2006
# Utrecht University (The Netherlands),
# ETH Zurich (Switzerland), Freie Universitaet Berlin (Germany),
# INRIA Sophia-Antipolis (France), Martin-Luther-University Halle-Wittenberg
# (Germany), Max-Planck-Institute Saarbruecken (Germany), RISC Linz (Austria),
# and Tel-Aviv University (Israel). All rights reserved.
#
# This file is part of CGAL (www.cgal.org); you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public License as
# published by the Free Software Foundation; version 2.1 of the License.
# See the file LICENSE.LGPL distributed with CGAL.
#
# Licensees holding a valid commercial license may use this file in
# accordance with the commercial license agreement provided with the software.
#
# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
# $URL$
# $Id$
#
# Author(s) : various
# 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 ..."