| #!/bin/sh | |
| # makeSystem creates a target SYSTEM.def using the appropriate dialect template. | |
| # Copyright (C) 2008-2026 Free Software Foundation, Inc. | |
| # Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>. | |
| # | |
| # This file is part of GNU Modula-2. | |
| # | |
| # GNU Modula-2 is free software; you can redistribute it and/or modify it under | |
| # the terms of the GNU General Public License as published by the Free | |
| # Software Foundation; either version 3, or (at your option) any later | |
| # version. | |
| # | |
| # GNU Modula-2 is distributed in the hope that it will be useful, but WITHOUT ANY | |
| # WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| # for more details. | |
| # | |
| # You should have received a copy of the GNU General Public License | |
| # along with GCC; see the file COPYING3. If not see | |
| # <http://www.gnu.org/licenses/>. | |
| Usage () { | |
| echo "Usage: makesystem [-gdb] dialectflag SYSTEM.def SYSTEM.mod { librarypath } compiler" | |
| } | |
| if [ $# -lt 6 ] ; then | |
| Usage | |
| exit 1 | |
| fi | |
| if [ "$1" = "-gdb" ] ; then | |
| DEBUG=$1 | |
| shift | |
| else | |
| DEBUG="" | |
| fi | |
| DIALECT=$1 | |
| SYSTEMDEF=$2 | |
| SYSTEMMOD=$3 | |
| shift 3 | |
| LIBRARY="" | |
| while [ $# -gt 2 ] ; do | |
| if [ "$LIBRARY" = "" ] ; then | |
| LIBRARY=$1 | |
| else | |
| LIBRARY="${LIBRARY} $1" | |
| fi | |
| shift | |
| done | |
| COMPILER=$1 | |
| OUTPUTFILE=$2 | |
| if [ "$COMPILER" = "" ] ; then | |
| echo "parameter 5 of makeSystem is incorrect, GM2_FOR_TARGET was unset" | |
| exit 1 | |
| fi | |
| if [ "$DIALECT" != "-fiso" -a "$DIALECT" != "-fpim" ] ; then | |
| Usage | |
| echo "dialect must be -fiso or -fpim" | |
| exit 1 | |
| fi | |
| displayExportedTypes () { | |
| n=1 | |
| c=0 | |
| for i in ${types} ; do | |
| if [ $n -eq 1 ] ; then | |
| n=0 | |
| printf " " >> ${OUTPUTFILE} | |
| fi | |
| printf "$i, " >> ${OUTPUTFILE} | |
| if [ $c -eq 4 ] ; then | |
| printf "\n" >> ${OUTPUTFILE} | |
| n=1 | |
| c=0 | |
| fi | |
| c=`expr $c + 1` | |
| done | |
| printf "\n" >> ${OUTPUTFILE} | |
| } | |
| displayBuiltinTypes () { | |
| for i in ${types} ; do | |
| printf " $i ; " >> ${OUTPUTFILE} | |
| done | |
| } | |
| displayStart () { | |
| sed -e "1,/<SYSTEM_DATATYPES>/!d" < ${SYSTEMDEF} | \ | |
| sed -e "/<SYSTEM_DATATYPES>/d" >> ${OUTPUTFILE} | |
| } | |
| displayMiddle () { | |
| sed -e "1,/<\/SYSTEM_DATATYPES>/d" < ${SYSTEMDEF} | \ | |
| sed -e "1,/<SYSTEM_TYPES>/!d" | \ | |
| sed -e "/<SYSTEM_TYPES>/d" >> ${OUTPUTFILE} | |
| } | |
| displayEnd () { | |
| sed -e "1,/<\/SYSTEM_TYPES>/d" < ${SYSTEMDEF} >> ${OUTPUTFILE} | |
| } | |
| MINIMAL="-fno-scaffold-main -fno-scaffold-dynamic -fno-scaffold-static -fno-m2-plugin" | |
| rm -f ${OUTPUTFILE} | |
| if [ "$DEBUG" != "" ] ; then | |
| echo "entering gdb to debug cc1gm2 when using -fdump-system-exports" | |
| ${COMPILER} ${DIALECT} ${LIBRARY} ${MINIMAL} \ | |
| -c -fdump-system-exports ${SYSTEMMOD} -wrapper gdb,--args | |
| exit $? | |
| fi | |
| ${COMPILER} ${DIALECT} ${LIBRARY} ${MINIMAL} \ | |
| -S -fdump-system-exports ${SYSTEMMOD} -o /dev/null 2>&1 > /dev/null | |
| res=$? | |
| if [ ${res} -eq 0 ] ; then | |
| types=`${COMPILER} ${DIALECT} ${LIBRARY} ${MINIMAL} -fno-m2-plugin -S -fdump-system-exports ${SYSTEMMOD} -o /dev/null | cut -f5 -d' '` | |
| touch ${OUTPUTFILE} | |
| displayStart | |
| displayExportedTypes | |
| displayMiddle | |
| displayBuiltinTypes | |
| displayEnd | |
| else | |
| echo "the command below failed:" | |
| echo "${COMPILER} ${DIALECT} ${LIBRARY} ${MINIMAL} -S -fdump-system-exports ${SYSTEMMOD}" | |
| echo "to debug the command use" | |
| echo "${COMPILER} ${DIALECT} ${LIBRARY} ${MINIMAL} -S -fdump-system-exports ${SYSTEMMOD} -wrapper gdb,--args" | |
| exit $res | |
| fi |