cgal/Scripts/scripts/cgal_create_makefile

212 lines
5.5 KiB
Bash
Executable File

#!/bin/sh
# Copyright (c) 1999,2000,2002-2007
# 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 and .cpp
# files in the current directory.
#
# Usage: cgal_create_makefile [-options] [outputfile]
#
# -d create a default CGAL makefile
# -t create a CGAL makefile for the test suite
# -q create a CGAL makefile with Qt support
#VERSION=2.0
header()
{
printf "#---------------------------------------------------------------------#\n"
printf "# $1\n"
printf "#---------------------------------------------------------------------#\n"
}
create_makefile_entry()
{
# local CFILE MOC_FROM MOCFILE
BASE=`basename $1 .C`
BASE=`basename $BASE .cpp`
CFILE=$1
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=${BASE}.moc
printf "$MOCFILE: $MOC_FROM\n"
printf "\t\$(QT_MOC) -o $MOCFILE $MOC_FROM\n"
printf "\n"
printf "$BASE\$(OBJ_EXT): $MOCFILE\n"
printf "\n"
fi
fi
# Print target for $1 executable if $CFILE contains a function "main()"
egrep '\bmain[ \t]*\(' $CFILE >/dev/null 2>&1
if [ $? -eq 0 ]; then
printf "$BASE\$(EXE_EXT): $BASE\$(OBJ_EXT)\n"
printf "\t\$(CGAL_CXX) \$(LIBPATH) \$(EXE_OPT)$BASE $BASE\$(OBJ_EXT) \$(LDFLAGS)\n"
printf "\n"
fi;
}
create_makefile()
{
# print makefile header
printf "# Created by the script cgal_create_makefile\n"
printf "# This is the makefile for compiling a CGAL application.\n"
printf "\n"
header "include platform specific settings"
printf "# Choose the right include file from the <cgalroot>/make directory.\n"
printf "\n"
printf "# CGAL_MAKEFILE = ENTER_YOUR_INCLUDE_MAKEFILE_HERE\n"
printf "include \$(CGAL_MAKEFILE)\n"
# print compiler flags
printf "\n"
header "compiler flags"
printf "\n"
printf "CXXFLAGS = \\\\\n"
if [ -d include ] ; then
printf " -Iinclude \\\\\n"
fi
printf " -I../../include \\\\\n"
if [ ! -z "$TESTSUITE" ] ; then
printf " \$(TESTSUITE_CXXFLAGS) \\\\\n"
printf " \$(EXTRA_FLAGS) \\\\\n"
fi
printf " \$(CGAL_CXXFLAGS) \\\\\n"
printf " \$(LONG_NAME_PROBLEM_CXXFLAGS)\n"
# print linker flags
printf "\n"
header "linker flags"
printf "\n"
printf "LIBPATH = \\\\\n"
if [ ! -z "$TESTSUITE" ] ; then
printf " \$(TESTSUITE_LIBPATH) \\\\\n"
fi
printf " \$(CGAL_LIBPATH)\n"
printf "\n"
printf "LDFLAGS = \\\\\n"
if [ ! -z "$TESTSUITE" ] ; then
printf " \$(TESTSUITE_LDFLAGS) \\\\\n"
fi
printf " \$(LONG_NAME_PROBLEM_LDFLAGS) \\\\\n"
printf " \$(CGAL_LDFLAGS)\n"
printf "\n"
header "target entries"
# print 'all' target
printf "\n"
printf "all: "
for file in `ls *.C *.cpp 2>/dev/null | sort` ; do
# Add $file's executable to "all" target
# if $file contains a function "main()"
BASE=`basename $file .C`
BASE=`basename $BASE .cpp`
egrep '\bmain[ \t]*\(' $file >/dev/null 2>&1
if [ $? -eq 0 ]; then
printf "\\\\\n $BASE\$(EXE_EXT) "
fi
done
printf "\n"
# print rules for each .C and .cpp file
printf "\n"
for file in `ls *.C *.cpp 2>/dev/null | sort` ; do
create_makefile_entry $file
done
# print 'clean' target
printf "clean: "
for file in `ls *.C *.cpp 2>/dev/null | sort` ; do
BASE=`basename $file .C`
BASE=`basename $BASE .cpp`
printf "\\\\\n ${BASE}.clean "
done
printf "\n\n"
# print "suffix rules"
header "suffix rules"
printf "\n"
printf ".C\$(OBJ_EXT):\n"
printf "\t\$(CGAL_CXX) \$(CXXFLAGS) \$(OBJ_OPT) \$<\n"
printf "\n"
printf "\n"
printf ".cpp\$(OBJ_EXT):\n"
printf "\t\$(CGAL_CXX) \$(CXXFLAGS) \$(OBJ_OPT) \$<\n"
printf "\n"
}
usage()
{
echo "Usage: cgal_create_makefile [-options] [outputfile]"
echo
echo "-d create a default CGAL makefile"
echo "-t create a CGAL makefile for the test suite"
echo "-q create a CGAL makefile with Qt support"
}
case $# in
0) usage
exit 1
esac
for i do
case $i in
-d) ;;
-t) TESTSUITE='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 ..."