#!/bin/sh ########################################################################## # # Aubit 4gl compiler - make system # # genmake - utillity script to create Aubit-style makefiles from typical # existing 4gl makefiles. # # You are not supposed to run this script mannualy; it will be called from # makefiles created with "prepmake" script. # $Id: genmake,v 1.6 2001/10/16 03:09:13 afalout Exp $ # ########################################################################## if [ $# -lt 2 -o "$1" = "--help" ] then echo "ERROR: not enough parameters." echo "You are not supposed to run this script mannualy; it will be" echo "called from makefiles created with 'prepmake' script." exit 2 fi #filer out crap: CMDLINE= CMDLINEBASENAME= CNT=0 CNTALL=0 CNTSKIP=0 ########### for a in $@ ########### do let CNTALL=CNTALL+1 DIRNAME=`dirname $a` FULLNAME=$a a=`basename $a` if ! [ "$a" = "libfgl4js.42x" -o "$a" = "crap" ] then let CNT=CNT+1 if [ "$DIRNAME" != "" ] && [ "$DIRNAME" != "." ] then if [ "$DIRNAME" != "$PWD" ] then if [ "$MAXDIR" != "" ] then A1=$(echo $MAXDIR | sed -e "s/\//\\\\\//g") else echo "FIXME: cannot do this without MAXDIR" exit 99 fi A3=$(echo $DIRNAME | sed -e "s/$A1//") A2=$(echo $A3 | sed -e "/../s/..//") #echo "DIRNAME = $DIRNAME" #echo "LASTDIR = $LASTDIR" #current dir: B1=$(echo $PWD | sed -e "s/$A1//") #if [ "B1" = "/cm/source" ] #then #../../gprog/contact.42r points outside current dir (/cm/source), to /../gprog TMP=$A2 A2=$(echo $A2 | sed -e "/../s/\/\.\.//") #fi #../winds/invwind.42x points outside current dir, to ../winds. STOP. if [ "$A2" != "/gprog" ] && [ "$A2" != "prog" ] && [ "$A2" != "/gform" ] && [ "$A2" != "$B1" ] then #if this happens, add it to vpath echo "$FULLNAME points outside current dir ($B1), to $A2. STOP." echo $TMP exit 67 #FIXME: #Maximise makefiles sometimes expect object to allreadu be #in ../prog or ../gprog: #we should actually check if this file is in current dir, #and if not, look for it, and add vpath to that place fi fi fi STRIPPATH=`basename $a` CMDLINE="$CMDLINE $a" CMDLINEBASENAME="$CMDLINEBASENAME $STRIPPATH" #second can't be .42x ########## case $a in ########## *.42x) if test "$CNT" = "1" then #We are supposed to make library: FIRST=$a fi #second is treated a GLOBALS, and lib cannot be GLOBAL file(?) if test "$CNT" = "2" then echo "Got $a in second position." #exit 56 GLOBNAME=1 fi ;; *) if test "$GLOBNAME" = "1" then #This will happen if we cannot use second param for GLOBALS #because it's not 4gl file: GLOBNAME=$a else if test "$CNT" = "1" then #FIRST=`basename $a` FIRST=$a fi if test "$CNT" = "2" then #SECOND=`basename $a` SECOND=$a fi fi ;; #### esac #### else let CNTSKIP=CNTSKIP+1 fi #### done #### PROG=`basename $FIRST .4go` if [ "$PROG" != "$FIRST" ] then IS4GO="1" IS42M="0" ISLIB="1" OBJEXT=4go PROGEXT=4gi LIBEXT=4go FRMEXT=frm else PROG=`basename $FIRST .42m` if [ "$PROG" != "$FIRST" ] then IS4GO="0" IS42M="1" ISLIB="1" OBJEXT=42m PROGEXT=42r LIBEXT=42x FRMEXT=42f else PROG=`basename $FIRST .42x` if [ "$PROG" != "$FIRST" ] then IS4GO="0" IS42M="0" ISLIB="1" OBJEXT=42m PROGEXT=42r LIBEXT=42x FRMEXT=42f else IS4GO="0" IS42M="0" ISLIB="0" fi fi fi if test "$ISLIB" = "0" then PROG=`basename $FIRST .4gi` if [ "$PROG" != "$FIRST" ] then IS4GI="1" FJSLINKLINE=0 OBJEXT=4go PROGEXT=4gi LIBEXT=4go FRMEXT=frm else PROG=`basename $FIRST .42r` if [ "$PROG" != "$FIRST" ] then IS4GI="1" #we are extracting components from 4Js link line, not from #dependencies list: FJSLINKLINE=1 OBJEXT=42m PROGEXT=42r LIBEXT=42x FRMEXT=42f else echo "Cannot recognise extension of $FIRST STOP." exit 4 fi fi fi HEADERNAME='${AUBITDIR}/incl/header.mki' #HEADERNAME=header.mki FOOTERNAME='${AUBITDIR}/incl/footer.mki' FORMFILES= LIBLIST= FGLLIST= #if we revceived only prog name and one 4gl file, AND program name is one #of lib extensions, this is library function, not executable program: if [ $# = "2" ] && [ "$ISLIB" = "1" ] then IS_SINGLE_LIB="1" FILENAME=allsinglelibs.mk fname=`basename $SECOND .$OBJEXT` fname=`basename $fname .4gl` if ! [ -f $FILENAME ] then echo include $HEADERNAME > $FILENAME echo >> $FILENAME echo '#we are using this dummy name only to get all in objects-' >> $FILENAME echo '#it will not be used for anything - and it will possibly' >> $FILENAME echo '#even fail to link:' >> $FILENAME echo "PROG = dummy.lib" >> $FILENAME echo >> $FILENAME echo "GLOBALS.4gl = $fname.4gl" >> $FILENAME GLOBFILE=$fname.4gl echo >> $FILENAME echo 'FILES.4gl = \' >> $FILENAME echo ' ${GLOBALS.4gl} \' >> $FILENAME else echo " $fname.4gl \\" >> $FILENAME fi else FILENAME=$PROG.mk echo include $HEADERNAME > $FILENAME echo >> $FILENAME #echo "#-------------------------------------" >> $FILENAME #echo >> $FILENAME if [ "$ISLIB" = "1" ] then echo "PROG = $PROG.lib" >> $FILENAME else echo "PROG = $PROG" >> $FILENAME fi echo >> $FILENAME if [ "$GLOBNAME" != "" ] then #if we received non-4gl dile as second param: fname=`basename $GLOBNAME .$OBJEXT` else fname=`basename $SECOND .$OBJEXT` fi fname=`basename $fname .4gl` echo "GLOBALS.4gl = $fname.4gl" >> $FILENAME GLOBFILE=$fname.4gl echo >> $FILENAME ################## for a in $CMDLINE ################## do if [ "$FIRST" != "$a" ] #it's program name then if [ "$GLOBNAME" != "$a" ] #it's GLOBALS file then if [ "$SECOND" != "$a" -o "$GLOBNAME" != "" ] then ########## case $a in ########## #*.42m) || *.4go) HOW THE HELL DO YOU DO _OR_here ? #*.4go) *.$OBJEXT) fname=`basename $a .$OBJEXT` #EXT=ao EXT=4gl #cinqwind is BOTH a 4gl and library (.42x, .aox) name #which is VERY stupid thing to do, and should be fixed in Maximise; #since I will have dependencies listeds with .4go in Maximise makefile, #(there will be .42x in 4Js link line, but I'm not looking at that... #Maybe I shoud use "fgllink..." line to get files, and not dependencies?) if [ "$fname" = "cinqwind" -o "$fname" = "invwind" -o "$fname" = "lic_keys" -o "$fname" = "pinqwind" -o "$fname" = "wcustwind" -o "$fname" = "wordrwin" -o "$fname" = "wpinqwind" ] then if [ "$OBJEXT" = "4go" ] then #EXT=aox #if [ "$LIBLIST" = "" ] #then # #echo ' ${FILES.lib} \' >> $FILENAME #fi LIBLIST="$LIBLIST $fname.lib" else FGLLIST="$FGLLIST $fname.$EXT" fi else FGLLIST="$FGLLIST $fname.$EXT" fi ;; *.$LIBEXT) fname=`basename $a .$LIBEXT` LIBLIST="$LIBLIST $fname.lib" ;; #*.42f) || *.frm) #*.frm) *.$FRMEXT) fname=`basename $a .$FRMEXT` FORMFILES="$FORMFILES $fname.per" ;; *) echo "ERROR: what the hell is $a" echo "IS4GO = $IS4GO IS42M = $IS42M ISLIB = $ISLIB" echo "$OBJEXT $PROGEXT $LIBEXT" echo "---------------------------x" echo $CMDLINEBASENAME echo "---------------------------x" echo FIRST = $FIRST SECOND = $SECOND #echo $@ exit 1 ;; #### esac #### fi fi fi #### done #### echo >> $FILENAME ############################ #Write all libs to makefile: ############################ if [ "$LIBLIST" != "" ] then echo 'FILES.lib = \' >> $FILENAME ################# for a in $LIBLIST ################# do echo " $a \\" >> $FILENAME #### done #### echo >> $FILENAME fi ############################ #Write all 4gl's to makefile: ############################ if [ "$FGLLIST" != "" ] then echo 'FILES.4gl = \' >> $FILENAME echo ' ${GLOBALS.4gl} \' >> $FILENAME #if [ "$LIBLIST" != "" ] #then # echo ' ${FILES.lib} \' >> $FILENAME #fi ################# for a in $FGLLIST ################# do echo " $a \\" >> $FILENAME #### done #### echo >> $FILENAME else #This can happen with porgrams that have only one 4gl file #echo FGLLIST is empty grep -i "end main" $GLOBFILE > /dev/null RET=$? if test $RET != "0" then echo "no END MAIN in $GLOBFILE" #is this one of 0 size 4gl files? FGLFILESIZE=$(ls -al $GLOBFILE | awk '{print $5}') if [ "$VERBOSE" = "1" ] then echo FGLFILESIZE of $GLOBFILE is $FGLFILESIZE fi if [ "$FGLFILESIZE" = "0" ] then echo "This is zero size file, ignoring." fi rm $FILENAME exit 0 else echo 'FILES.4gl = ${GLOBALS.4gl} ' >> $FILENAME fi fi ############################ #Write all forms to makefile: ############################ if [ "$ISLIB" != "1" ] then if [ "$FORMFILES" = "" ] then #as defined in header.mki: echo 'FILES.per = ${ALLFORMS.per}' >> $FILENAME else echo "FILES.per = \\" >> $FILENAME ################### for a in $FORMFILES ################### do echo " $a \\" >> $FILENAME done fi fi ############################ #Write footer to makefile: ############################ echo >> $FILENAME #echo "#-------------------------------------" >> $FILENAME #echo >> $FILENAME echo include $FOOTERNAME >> $FILENAME echo >> $FILENAME fi #------------------------------ EOF --------------------------------