diff --git a/src/tools/makeBaseApp.pl b/src/tools/makeBaseApp.pl index fe43f7f7f..99d57dcec 100644 --- a/src/tools/makeBaseApp.pl +++ b/src/tools/makeBaseApp.pl @@ -23,7 +23,6 @@ $startdir=cwd(); $startdir=~s'^/tmp_mnt''; Cleanup (1, "Shouldn't run in Home Directory") if (GetHome() eq $startdir); -print "I hope that '$startdir' is NOT your home directory\n"; # look for options @@ -50,14 +49,11 @@ else Cleanup (1,"Cannot find EPICS base, use full path or '-b'") unless $epics_base; -print "Found EPICS base: $epics_base\n"; - unless (-f 'Makefile') { - print "Creating Makefile\n"; open OUT, ">Makefile" or die "Cannot open Makefile"; - print OUT "#\tMakefile generated by makeBaseApp.pl\n"; + print OUT "#Makefile generated by makeBaseApp.pl\n"; print OUT "TOP = .\n"; print OUT "include \$(TOP)/config/CONFIG_APP\n"; print OUT "DIRS += \$(wildcard *App)\n"; @@ -71,47 +67,61 @@ unless (-d 'config') mkdir 'config', 0777; chdir 'config' or die "Cannot create config directory"; - print "Creating files in 'config'\n"; open OUT, ">CONFIG" or die "Cannot create CONFIG"; - print OUT "#\tCONFIG\n"; - print OUT "# Add any changes to make rules here\n"; - print OUT "#CROSS_COMPILER_TARGET_ARCHS = mv167\n"; + print OUT '#CONFIG',"\n"; + print OUT '# Add any changes to make rules here',"\n"; + print OUT '#CROSS_COMPILER_TARGET_ARCHS = mv167',"\n"; close OUT; open OUT, ">CONFIG_APP" or die "Cannot create CONFIG_APP"; - print OUT "#\tCONFIG_APP DO NOT EDIT THIS FILE\n"; - print OUT "include \$(TOP)/config/RELEASE\n"; - print OUT "ifdef SHARE\n"; - print OUT "include $(SHARE)/config/CONFIG_APP\n"; - print OUT "else\n"; - print OUT "ifndef T_A\n"; - print OUT "T_A = \$(HOST_ARCH)\n"; - print OUT "endif #ifndef T_A\n"; - print OUT "include \$(EPICS_BASE)/config/CONFIG\n"; - print OUT "ifdef MASTER_IOCAPPS\n"; - print OUT "USR_INCLUDES += -I\$(MASTER_IOCAPPS)/include\n"; - print OUT "MASTER_IOCAPPS_BIN = \$(MASTER_IOCAPPS)/bin/\$(T_A)\n"; - print OUT "endif #ifdef MASTER_IOCAPPS\n"; - print OUT "include \$(TOP)/config/CONFIG\n"; - print OUT "endif #ifdef SHARE\n"; + print OUT '#CONFIG_APP ',"\n"; + + print OUT 'include $(TOP)/config/RELEASE',"\n"; + print OUT 'ifndef T_A',"\n"; + print OUT 'T_A = $(HOST_ARCH)',"\n"; + print OUT 'endif',"\n"; + print OUT 'include $(EPICS_BASE)/config/CONFIG',"\n"; + print OUT ' ',"\n"; + print OUT '#Other share areas can be added similar to following',"\n"; + print OUT '#ifdef ',"\n"; + print OUT '#USR_INCLUDES += -I$()/include',"\n"; + print OUT '#BIN = $()/bin/$(T_A)',"\n"; + print OUT '#endif',"\n"; + print OUT ' ',"\n"; + print OUT 'ifdef SHARE',"\n"; + print OUT 'USR_INCLUDES += -I$(SHARE)/include',"\n"; + print OUT 'SHARE_BIN = $(SHARE)/bin/$(T_A)',"\n"; + print OUT 'endif',"\n"; + print OUT 'ifdef HIDEOS',"\n"; + print OUT 'USR_INCLUDES += -I$(HIDEOS)/include',"\n"; + print OUT 'HIDEOS_ARCH = $(subst mv,vx,$(T_A))',"\n"; + print OUT 'HIDEOS_LIB=$(HIDEOS)/lib/$(HIDEOS_ARCH)',"\n"; + print OUT 'HIDEOS_APPS=$(HIDEOS)/usrapps/$(HIDEOS_ARCH)',"\n"; + print OUT 'endif',"\n"; + print OUT 'ifdef EPICSHIDEOS',"\n"; + print OUT 'USR_INCLUDES += -I$(EPICSHIDEOS)/include',"\n"; + print OUT 'EPICSHIDEOS_BIN=$(EPICSHIDEOS)/bin/$(T_A)',"\n"; + print OUT 'endif',"\n"; + print OUT 'ifdef MASTER_IOCAPPS',"\n"; + print OUT 'USR_INCLUDES += -I$(MASTER_IOCAPPS)/include',"\n"; + print OUT 'MASTER_IOCAPPS_BIN = $(MASTER_IOCAPPS)/bin/$(T_A)',"\n"; + print OUT 'endif',"\n"; + print OUT 'include $(TOP)/config/CONFIG',"\n"; + close OUT; open OUT, ">RELEASE" or die "Cannot create RELEASE"; - print OUT "#\tRELEASE Location of external products\n"; + print OUT "#RELEASE Location of external products\n"; print OUT "EPICS_BASE=$epics_base\n"; print OUT "#SHARE=\n"; + print OUT "#HIDEOS=\n"; + print OUT "#EPICSHIDEOS=\n"; print OUT "#MASTER_IOCAPPS=\n"; close OUT; - open OUT, ">RULES.Vx" or die "Cannot create RULES.Vx"; - print OUT "#\tRULES.Vx\n"; - print OUT "include \$(EPICS_BASE)/config/RULES.Vx\n"; - print OUT "inc:: \$\(INSTALL_INCREC\)\n"; - close OUT; - open OUT, ">RULES_TOP" or die "Cannot create RULES_TOP"; - print OUT "#\tRULES_TOP\n"; + print OUT "#RULES_TOP\n"; print OUT "include \$(EPICS_BASE)/config/RULES_TOP\n"; print OUT "\n"; print OUT "ifdef MASTER_IOCAPPS\n"; @@ -126,7 +136,7 @@ unless (-d 'config') print OUT 'for DIR in bin lib dbd include man ; do \\'; print OUT "\n"; print OUT "\t"; - print OUT '$(SHARE)/config/makeSoftLinks $(MASTER_IOCAPPS) $${DIR} ;\\'; + print OUT '$(TOP)/config/makeSoftLinks $(MASTER_IOCAPPS) $${DIR} ;\\'; print OUT "\n"; print OUT "\t"; print OUT 'done; fi'; @@ -136,15 +146,86 @@ unless (-d 'config') print OUT "endif\n"; close OUT; + open OUT, ">RULES.iocBoot" or die "Cannot create RULES.iocBoot"; + print OUT '#RULES.iocBoot', "\n"; + print OUT 'DIRS += $(wildcard ioc*)', "\n"; + print OUT 'DIRS += $(wildcard as*)', "\n"; + print OUT 'include $(EPICS_BASE)/config/RULES_DIRS', "\n"; + print OUT 'ifeq ($(findstring nfsCommands,$(wildcard *)),nfsCommands)', "\n"; + print OUT "buildInstall:: nfs.cmd\n"; + print OUT "\n"; + print OUT 'nfs.cmd: nfsCommands', "\n"; + print OUT "\t",'@echo "Creating $@"', "\n"; + print OUT "\t",'@$(RM) $@', "\n"; + print OUT "\t",'@cat $< >> $@', "\n"; + print OUT "\t",'@echo cd \"`\pwd`\" >> $@', "\n"; + print OUT "\n"; + print OUT 'clean::', "\n"; + print OUT "\t",'@$(RM) nfs.cmd', "\n"; + print OUT 'endif', "\n"; + close OUT; + + # Simple config files that just include the BASE version: - foreach $file ( 'RULES.Db', 'RULES.Host', 'RULES.ioc', + foreach $file ( 'RULES.Db', 'RULES.Host', 'RULES.ioc', 'RULES.Vx' , 'RULES_ARCHS', 'RULES_DIRS') { open OUT, ">$file" or die "Cannot create $file"; - print OUT "#\t$file\n"; + print OUT "#$file\n"; print OUT "include \$(EPICS_BASE)/config/$file\n"; + if ( ($file eq "RULES.Host") || ($file eq "RULES.Vx") ) { + print OUT "inc:: \$(INSTALL_INCREC)\n"; + } close OUT; } + + open OUT, ">makeSoftLinks" or die "Cannot createmakeSoftLinks"; + print OUT '#!/bin/sh',"\n"; + print OUT '#makeSoftLinks',"\n"; + print OUT '#This shell program makes soft links to everything in MASTER_IOCAPPS/bin/*',"\n"; + print OUT '#set -xv',"\n"; + print OUT '',"\n"; + print OUT 'SAVEDIR=$PWD',"\n"; + print OUT 'Cleanup() {',"\n"; + print OUT ' cd $SAVEDIR',"\n"; + print OUT ' rtncode=$1',"\n"; + print OUT ' shift 1',"\n"; + print OUT ' for MESSAGE',"\n"; + print OUT ' do',"\n"; + print OUT ' echo "$MESSAGE"',"\n"; + print OUT ' done',"\n"; + print OUT ' exit $rtncode',"\n"; + print OUT '}',"\n"; + print OUT 'USAGE="Usage: makeSoftLinks MASTER_IOCAPPS dir"',"\n"; + print OUT '',"\n"; + print OUT 'if [ $# != 2 ]; then Cleanup 1 "Illegal number args" "$USAGE"; fi;',"\n"; + print OUT 'MASTER_IOCAPPS=$1',"\n"; + print OUT 'DIR=$2',"\n"; + print OUT '',"\n"; + print OUT 'if [ ! -d ${MASTER_IOCAPPS}/${DIR} ] ; then Cleanup 0 ; fi',"\n"; + print OUT '',"\n"; + print OUT 'FROM=${MASTER_IOCAPPS}/${DIR}',"\n"; + print OUT 'if [ -z "`ls ${FROM}`" ] ; then Cleanup 0 ; fi',"\n"; + print OUT 'if [ ! -d ${DIR} ] ; then',"\n"; + print OUT ' echo "mkdir ${DIR}"',"\n"; + print OUT ' mkdir ${DIR}',"\n"; + print OUT 'fi',"\n"; + print OUT 'cd ${DIR}',"\n"; + print OUT 'for FILE in `ls ${FROM}`',"\n"; + print OUT 'do',"\n"; + print OUT ' if [ -d ${FROM}/${FILE} ] ; then',"\n"; + print OUT ' $0 ${MASTER_IOCAPPS}/${DIR} ${FILE}',"\n"; + print OUT ' elif [ -f ${FROM}/${FILE} ] ; then',"\n"; + print OUT ' if [ ! -f "${FILE}" ]; then',"\n"; + print OUT ' ln -s ${MASTER_IOCAPPS}/${DIR}/${FILE} ${FILE}',"\n"; + print OUT ' fi',"\n"; + print OUT ' else',"\n"; + print OUT ' echo "${MASTER_IOCAPPS}/${DIR}/${FILE} Illegal."',"\n"; + print OUT ' fi',"\n"; + print OUT 'done',"\n"; + print OUT 'Cleanup 0',"\n"; + close OUT; + chdir $startdir or die 'cannot return to start directory'; } @@ -152,8 +233,6 @@ unless (-d 'config') # foreach $app ( @apps ) { - print "Creating Application '$app'\n"; - print "with example\n" if $example; if (-d "${app}App") { @@ -167,7 +246,8 @@ foreach $app ( @apps ) open OUT, ">Makefile" or die "Cannot open Makefile"; print OUT "TOP = ..\n"; print OUT "include \$(TOP)/config/CONFIG_APP\n"; - print OUT "DIRS += \$(wildcard *src*)\n"; + print OUT "DIRS += \$(wildcard src)\n"; + print OUT "DIRS += \$(wildcard *Src*)\n"; print OUT "DIRS += \$(wildcard *Db*)\n"; print OUT "include \$(TOP)/config/RULES_DIRS\n"; close OUT; @@ -177,7 +257,21 @@ foreach $app ( @apps ) print OUT "TOP = ../..\n"; print OUT "include \$(TOP)/config/CONFIG_APP\n"; print OUT "\n"; + print OUT "#following creates xxx.db from xxx.template and xxx.substitutions\n"; + print OUT "#DBFROMTEMPLATE += xxx.db\n"; + print OUT "\n"; + print OUT "#Following creates xxxi.db from xxx.template and xxxi.substitutions\n"; + print OUT "#INDDBFROMTEMPLATE += xxxi.db\n"; + print OUT "\n"; + print OUT "#Following taken care of by local rules\n"; + print OUT "#PROD += yyy.db\n"; + print OUT "\n"; + print OUT "\n"; print OUT "include \$(TOP)/config/RULES.Db\n"; + print OUT "\n"; + print OUT "#yyy.db: iocBoot/Makefile" or die "Cannot open iocBoot/Makefile"; + open OUT, ">iocBoot/Makefile" + or die "Cannot open iocBoot/Makefile"; print OUT "TOP = ..\n"; print OUT "include \$(TOP)/config/CONFIG_APP\n"; - print OUT "DIRS += \$(wildcard *ioc* )\n"; - print OUT "include \$(TOP)/config/RULES_DIRS\n"; + print OUT "include \$(TOP)/config/RULES.iocBoot\n"; close OUT; + + open OUT, ">iocBoot/nfsCommands" + or die "Cannot open iocBoot/nfsCommands"; + print OUT '# nfs Commands',"\n"; + print OUT '#Add commands like the following for each host',"\n"; + print OUT 'hostAdd(","xx.xx.xx.xx")', "\n"; + print OUT 'nfsMountAll("")', "\n"; + close OUT; + } # generate ioc stuff for this app? @@ -927,6 +1030,11 @@ ss ss1 print OUT "#Following must be added for many board support packages\n"; print OUT "#cd \n"; print OUT "#cd \"" . UNIXStyleName($startdir) . "\/iocBoot\/ioc$app" . "\"\n"; + print OUT "\n"; + print OUT "#Following will use NFS for file access\n"; + print OUT "#< ../nfs.cmd\n"; + print OUT "#cd \"ioc$app\"\n"; + print OUT "\n"; print OUT "ld < bin/iocCore\n"; print OUT "ld < bin/seq\n"; print OUT "ld < bin/${app}Lib\n";