From 8d6deea83d283b6ff2a2e45483f782ab68a1d372 Mon Sep 17 00:00:00 2001 From: Jeff Hill Date: Fri, 11 Apr 1997 20:28:21 +0000 Subject: [PATCH] merged Kay's perl proto branch --- config/CONFIG.Vx.pc486 | 13 +++--- config/CONFIG.WIN32 | 63 ++++++++++++---------------- config/CONFIG.solaris | 3 +- config/CONFIG_COMMON | 6 ++- config/CONFIG_ENV | 4 ++ config/CONFIG_SITE | 2 +- config/CONFIG_SITE_ENV | 5 +++ config/HostSys.txt | 8 +++- config/RULES.Db | 19 +++++---- config/RULES.Host | 93 ++++++++++++++++++------------------------ config/RULES.Vx | 9 ++-- config/RULES.ioc | 6 +++ config/RULES_ARCHS | 8 +--- config/makeMakefile.pl | 30 ++++++++++++++ 14 files changed, 149 insertions(+), 120 deletions(-) create mode 100644 config/makeMakefile.pl diff --git a/config/CONFIG.Vx.pc486 b/config/CONFIG.Vx.pc486 index 65717cc57..9e77c5d8d 100644 --- a/config/CONFIG.Vx.pc486 +++ b/config/CONFIG.Vx.pc486 @@ -6,13 +6,12 @@ # Unix Compiler and other Utilities OLDINSTALL = echo CONFIG.Vx.486 OLDINSTALL -MV=mv -RM=rm -f -CP=cp -RMDIR=rm -rf -MKDIR=mkdir -CHMOD = "/bin/chmod" -WHAT = what +CP =$(PERL) $(EPICS_BASE)/src/tools/cp.pl +MV =$(PERL) $(EPICS_BASE)/src/tools/mv.pl +RM =$(PERL) $(EPICS_BASE)/src/tools/rm.pl -f +MKDIR=$(PERL) $(EPICS_BASE)/src/tools/mkdir.pl +RMDIR=$(PERL) $(EPICS_BASE)/src/tools/rm.pl -rf +CHMOD=echo # overrides defines in CONFIG_SITE that don't fit Tornado # diff --git a/config/CONFIG.WIN32 b/config/CONFIG.WIN32 index 259724be3..5f5a12ddb 100644 --- a/config/CONFIG.WIN32 +++ b/config/CONFIG.WIN32 @@ -3,24 +3,21 @@ # The current make-system for WIN32 # needs # * gnumake (OK, sources for WIN32 are available) -# * several UNIX tools: sed, grep, ... (dito) +# * Perl (e.g. from www.perl.com ) # * a UNIX-like shell (ouch!) # # I found no fully operational shell and no sources for WIN32 so far, # Cygnus' bash e.g. cannot handle this: # (echo a>a; echo b>>a) # Right now I use the knts that I wrote and simplified scripts. -# Jeff eliminated many shell-lines in Makefile.*, -# the final solution could be: -# 1) replace shell, awk, grep, sed, ... by Perl! -# 2) use C code +# Jeff eliminated many shell-lines in Makefile.*. # # Set this to the UNIX-like shell that you have: SHELL=knts # BUILD_TYPE -# Currently either Vx or Host (latter used to be Unix) +# Currently either Vx or Host (latter used to be Unix BUILD_TYPE=Host # to identify the general architecture class: @@ -29,28 +26,26 @@ BUILD_TYPE=Host # ARCH_CLASS=WIN32 - -EXE=.exe -OBJ=.obj - # ifdef WIN32 looks better that ifeq ($(ARCH_CLASS),WIN32) ?? WIN32=1 # Compiler and utility invocation (supply path to compiler here) # (with warning flags built in) # Paths to compilers -YACC = $(EYACC) -LEX = $(ELEX) -CC = cl -nologo -MV=mv -RM=rm -f -MKDIR=mkdir -RMDIR=rm -rf -WHAT = echo +YACC = $(EYACC) +LEX = $(ELEX) +CC = cl -nologo +CP = $(PERL) $(EPICS_BASE)/src/tools/cp.pl +MV = $(PERL) $(EPICS_BASE)/src/tools/mv.pl +RM = $(PERL) $(EPICS_BASE)/src/tools/rm.pl -f +MKDIR = $(PERL) $(EPICS_BASE)/src/tools/mkdir.pl +RMDIR = $(PERL) $(EPICS_BASE)/src/tools/rm.pl -rf +EXE=.exe +OBJ=.obj # Include files -HOST_INCLUDES = -I. -I.. $(USR_INCLUDES) -I$(INSTALL_INCLUDE) -I$(EPICS_BASE_INCLUDE) \ - -I$(EPICS_BASE_INCLUDE)/os/$(ARCH_CLASS) +HOST_INCLUDES = -I. -I.. $(USR_INCLUDES) -I$(INSTALL_INCLUDE) \ + -I$(EPICS_BASE_INCLUDE) -I$(EPICS_BASE_INCLUDE)/os/$(ARCH_CLASS) # Operating system flags (from win32.mak) # @@ -66,26 +61,23 @@ HOST_INCLUDES = -I. -I.. $(USR_INCLUDES) -I$(INSTALL_INCLUDE) -I$(EPICS_BASE_INC OP_SYS_FLAGS:=-MDd -Zi -VMG -VMV -DWIN32 -D_WIN32 -D_DEBUG -D_WINDOWS \ -D_X86_ -D_NTSDK -D_DLL -D__STDC__=0 + +HOST_LDLIBS:=user32.lib kernel32.lib wsock32.lib advapi32.lib winmm.lib +HOST_LDFLAGS:=-nologo -libpath:$(EPICS_BASE_LIB) + # Files and flags needed to link DLLs (used in RULES.Host) # -# Strange but seems to work without: WIN32LDFLAGS should contain +# Strange but seems to work without: WIN32_DLLFLAGS should contain # an entry point: # '-entry:_DllMainCRTStartup$(DLLENTRY)' DLLENTRY:=@12 -WIN32SYSTEMLIBS := user32.lib kernel32.lib wsock32.lib advapi32.lib winmm.lib # yes, for MS it's I386 for 386, 486, Pentium! # don't mix this with VxWorks which has different BSPs for [34]86 ! -WIN32LDFLAGS := $(WIN32SYSTEMLIBS) -nologo -subsystem:windows -dll\ - -incremental:no -debug -machine:I386 +WIN32_DLLFLAGS:=$(HOST_LDFLAGS) $(HOST_LDLIBS)\ + -subsystem:windows -dll -incremental:no -debug -machine:I386 -# -# The remaining lines are very similar to -# all other CONFIG.xxx files. -# This includes the GCC lines which may be removed? -# -HOST_LDLIBS:=$(WIN32SYSTEMLIBS) ARCH_DEP_CFLAGS = ARCH_DEP_CXXFLAGS = $(ARCH_DEP_CFLAGS) HOST_CFLAGS = $(HOST_SFLAGS) $(HOST_INCLUDES) $(OP_SYS_FLAGS) @@ -104,10 +96,10 @@ CFLAGS = $(HOST_OPT_FLAGS) $(TARGET_CFLAGS) $(USR_CFLAGS) $(ARCH_DEP_CFLAGS) $(H CXXFLAGS = $(HOST_OPT_FLAGS) $(TARGET_CXXFLAGS) $(USR_CXXFLAGS) $(ARCH_DEP_CXXFLAGS) $(HOST_CXXFLAGS) CPPFLAGS += $(TARGET_CPPFLAGS) $(USR_CPPFLAGS) -CXX = cl +CXX=cl -nologo -LDFLAGS = $(SPECIAL_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(ARCH_DEP_LDFLAGS) $(HOST_LDFLAGS) -LDLIBS = $(TARGET_LDLIBS) $(USR_LDLIBS) $(ARCH_DEP_LDLIBS) $(HOST_LDLIBS) +LDFLAGS=$(SPECIAL_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(ARCH_DEP_LDFLAGS) $(HOST_LDFLAGS) +LDLIBS=$(TARGET_LDLIBS) $(USR_LDLIBS) $(ARCH_DEP_LDLIBS) $(HOST_LDLIBS) # Override SUN defaults COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) -c @@ -115,11 +107,10 @@ COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) -c # Problem: MS Visual C++ does not recognize *.cc as C++ source, # we have to compile xx.cc using the flag -Tp xx.cc, # i.e. -Tp has to be immediately before the source file name - COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) -DEXPL_TEMPL -c -Tp -LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -Fe$@ -LINK.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) -Fe$@ +LINK.c=link $(LDFLAGS) -out:$@ +LINK.cc=$(LINK.c) # The DEPENDS_RULE may be a script on other systems, # if you need different rules for .c and .cc, diff --git a/config/CONFIG.solaris b/config/CONFIG.solaris index 667c83902..12ad43147 100644 --- a/config/CONFIG.solaris +++ b/config/CONFIG.solaris @@ -1,5 +1,5 @@ # -# $Id$: CONFIG.Unix.solaris,v $ +# $Id$ # # This file is maintained by the EPICS community. @@ -42,7 +42,6 @@ WHAT = what EXE= OBJ=.o - ACC_ANSI_INVOKE_W_NO = $(ACC) -Xa -w ACC_ANSI_INVOKE_W_YES = $(ACC) -Xa ACC_STRICT_INVOKE_W_YES = $(ACC) -Xc -v diff --git a/config/CONFIG_COMMON b/config/CONFIG_COMMON index 7b0b873aa..1a5bd1594 100644 --- a/config/CONFIG_COMMON +++ b/config/CONFIG_COMMON @@ -42,8 +42,12 @@ DIVIDER = . EYACC = $(EPICS_BASE)/bin/$(HOST_ARCH)/antelope$(EXE) ELEX = $(EPICS_BASE)/bin/$(HOST_ARCH)/e_flex$(EXE) -S$(EPICS_BASE_INCLUDE)/flex.skel.static +# Default for perl if it's on the PATH, +# otherwise override this in e.g. CONFIG_SITE +PERL=perl + # install from EPICS -INSTALL = $(EPICS_BASE)/bin/$(HOST_ARCH)/installEpics +INSTALL = $(PERL) $(EPICS_BASE)/bin/$(HOST_ARCH)/installEpics.pl INSTALL_PRODUCT = $(INSTALL) # dbtools from EPICS diff --git a/config/CONFIG_ENV b/config/CONFIG_ENV index 23454b65b..15710756d 100644 --- a/config/CONFIG_ENV +++ b/config/CONFIG_ENV @@ -10,6 +10,10 @@ # not allowed around the '=' signs or in unquoted values. # Makefile variables are not defined here. # +# Note: This file is read by base/src/libCom/bldEnvdata.pl, +# so the variable definitions in here should be kept 'simple': +# VAR=VALUE +# each one on a single line. # diff --git a/config/CONFIG_SITE b/config/CONFIG_SITE index b595a18ce..de6a74c98 100644 --- a/config/CONFIG_SITE +++ b/config/CONFIG_SITE @@ -38,7 +38,7 @@ endif # niCpu030 # pc486 # -CROSS_COMPILER_TARGET_ARCHS=mv167 mv162 +CROSS_COMPILER_TARGET_ARCHS=mv167 # If only a subset of the host architectures perform # the build for the CROSS_COMPILER_TARGET_ARCHS diff --git a/config/CONFIG_SITE_ENV b/config/CONFIG_SITE_ENV index 18b6c5d2f..e6a8c73e3 100644 --- a/config/CONFIG_SITE_ENV +++ b/config/CONFIG_SITE_ENV @@ -10,6 +10,11 @@ # not allowed around the '=' signs or in unquoted values. # Makefile variables are not defined here. # +# Note: This file is read by base/src/libCom/bldEnvdata.pl, +# so the variable definitions in here should be kept 'simple': +# VAR=VALUE +# each one on a single line. +# # Site-specific environment settings diff --git a/config/HostSys.txt b/config/HostSys.txt index 56e5b82c4..ff6ae7410 100644 --- a/config/HostSys.txt +++ b/config/HostSys.txt @@ -49,16 +49,22 @@ A) In CONFIG.: 3) Make sure that the following (new) macros are defined: + CP =$(PERL) $(EPICS_BASE)/src/tools/cp.pl + MV =$(PERL) $(EPICS_BASE)/src/tools/mv.pl + RM =$(PERL) $(EPICS_BASE)/src/tools/rm.pl -f + MKDIR=$(PERL) $(EPICS_BASE)/src/tools/mkdir.pl + RMDIR=$(PERL) $(EPICS_BASE)/src/tools/rm.pl -rf + or CP=cp MV=mv RM=rm -f MKDIR=mkdir RMDIR=rm -rf + EXE= OBJ=.o 4) LINK.c and LINK.cc must now include the target-flag, e.g.: - LINK.c = $(CC) $(LDFLAGS) -o $@ because the "-o $@" is also system dependent (it's -Fe$@ for WIN32) diff --git a/config/RULES.Db b/config/RULES.Db index 6db47b2f0..dc1a98d0f 100644 --- a/config/RULES.Db +++ b/config/RULES.Db @@ -13,14 +13,13 @@ buildInstall: .DEPENDS dbd $(DBFROMTEMPLATE) $(INDDBFROMTEMPLATE) $(PROD) inc build depends: -dbd: - @if [ ! -d $(TOP)/dbd ]; then \ - mkdir $(TOP)/dbd ; \ - fi - @if [ ! -d dbd ]; then \ - echo "ln -s $(TOP)/dbd dbd" ; \ - ln -s $(TOP)/dbd dbd ; \ - fi +$(TOP)/dbd: + $(MKDIR) $(TOP)/dbd + +dbd: $(TOP)/dbd +ifndef WIN32 + ln -s $(TOP)/dbd dbd +endif $(DBFROMTEMPLATE):%.db: %.template %.substitutions @@ -30,16 +29,20 @@ $(DBFROMTEMPLATE):%.db: %.template %.substitutions $(INDDBFROMTEMPLATE):%.db: %.substitutions $(RM) $@ +ifndef WIN32 $(SUBTOOL) $(PREFIX).template $*.substitutions > $@ +endif .DEPENDS: Makefile @$(RM) $@ +ifndef WIN32 @for NAME in $(INDDBFROMTEMPLATE) garbage_marty ; do \ if [ $$NAME != garbage_marty ] ; then \ PREFIX="`echo $$NAME | sed -e 's-[0-9]--g' | sed -e 's-\.db--g'`";\ echo "$$NAME: $$PREFIX.template" >> $@;\ fi ; \ done +endif clean:: @$(RM) dbd $(DBFROMTEMPLATE) $(INDDBFROMTEMPLATE) .DEPENDS $(PROD) diff --git a/config/RULES.Host b/config/RULES.Host index 71b44b85d..c35dc368f 100644 --- a/config/RULES.Host +++ b/config/RULES.Host @@ -1,3 +1,4 @@ +# # $Id$ # # Rules for making things specified in Makefile.Host @@ -194,7 +195,7 @@ ifeq ($(LIBTYPE),SHARED) # create name for dll, import file DLLNAME:=$(LIBRARY).dll # libs defined that we need to link the DLL with? -DLL_DEP_LIBS:=$(DLL_LIBS:%=$(INSTALL_LIB)/%.lib) +DLL_DEP_LIBS:=$(DLL_LIBS:%=%.lib) endif # LIBTYPE=SHARED endif # WIN32 @@ -204,15 +205,13 @@ endif # LIBRARY and LIBOBJS # dito for libraries used by PROD # ifdef PROD_LIBS +# add to USR_LDLIBS so that the libs are linked ifdef WIN32 -PRODDEPLIBS:=$(PROD_LIBS:%=$(INSTALL_LIB)/%.lib) -# add to USR_LDLIBS so that the libs are linked -# we need the full path because there is no "-L" option on WIN32.... +PRODDEPLIBS:=$(PROD_LIBS:%=%.lib) USR_LDLIBS += $(PRODDEPLIBS) else # On Unix: library "ca" is linked with "-lca" etc. -# A library may be just newly build in the local dir: add "-L." PRODDEPLIBS=$(PROD_LIBS:%=$(INSTALL_LIB)/lib%.a) USR_LDLIBS += -L$(INSTALL_LIB) $(PROD_LIBS:%=-l%) endif @@ -298,17 +297,6 @@ endif # all:: install -# Problem on WIN32: -# There seems to be no -L switch, so we have to specify the -# full library names (including the path). -# OK, so we prefix all libs by $(INSTALL_LIB) to be able to link -# with the installed libraries. This means, however, that -# libs have to be installed _before_ we build any PROD that uses them, -# because we cannot use them from the current O.WIN32 directory any more. -# Example: dbExpand etc. in dbStatic all need the db library. -# -# Solution: place INSTALL_DLLS and _LIBS in build -# build:: $(LIBNAME) $(DLLNAME) \ $(INSTALL_LOCATION_LIB) $(INSTALL_LIB)\ $(INSTALL_LIBS) $(INSTALL_DLLS) $(PROD) $(TESTPROD) @@ -346,28 +334,20 @@ clean:: $(DIRECTORY_TARGETS) : $(MKDIR) $@ -# Problem: PRODDEPLIBS may contain libm.a etc. which we cannot locate -# But: The order in build/install should make sure that libs are -# in place before we build PROD anyway. -# $(PROD): $(PRODDEPLIBS) - # The order of the following dependencies is # VERY IMPORTANT !!!! -# generic rule to build executable from same-name-object: -# (this should be handled by the implicit rule below) +# If you want to break this on WIN32, please forget +# that $(COMPILE.cc) is like $(COMPILE.c) for WIN32 +# except the first one ends in -Tp to select 'C++'. # -#%$(EXE): %$(OBJ) -#ifdef WIN32 -# $(LINK.c) $< $(LDLIBS) -#else -# $(RM) $@ -# echo LINKING: -# $(LINK.c) $< $(LDLIBS) -#endif +# EPICS uses .cc for C++, which is not recognized +# by MS Visual C++, so -Tp has to be directly in front of +# the source file. +# -> put the source file directly after $(COMPILE.cc), # explicit list of source files given for PROD ? -# (otherwise implicit rule .c -> $(OBJ) -> $(EXE) +# (otherwise implicit rules .c -> $(EXE), .cc -> $(EXE) ifdef SRCS ifeq ($(findstring cc,$(suffix $(SRCS))),cc) @@ -379,10 +359,9 @@ endif PROD_OBJS=$(addsuffix $(OBJ), $(basename $(SRCS))) $(PROD): $(PROD_OBJS) $(PRODDEPLIBS) - $(RM) $@ - echo $(LDLIBS) + @$(RM) $@ $(PROD_LINKER) $(PROD_OBJS) $(LDLIBS) -endif +endif # explicit list of source files given for TESTPROD ? # (otherwise implicit rule .c -> $(OBJ) -> $(EXE) @@ -397,28 +376,40 @@ endif TESTPROD_OBJS=$(addsuffix $(OBJ), $(basename $(TESTPROD_SRCS))) $(TESTPROD): $(TESTPROD_OBJS) $(PRODDEPLIBS) - $(RM) $@ + @$(RM) $@ $(TESTPROD_LINKER) $(TESTPROD_OBJS) $(LDLIBS) endif +# Generic Rules for 'simple' targets that +# can be generated from a single source with same basename. +# +# The usual two rules .c* -> $(OBJ) and then $(OBJ) -> $(EXE) +# do not work because the $(OBJ)->$(EXE) rule wouldn't +# know if the original source was C or C++. +# +# Hint: The $(subst...) construct removes the .c or .cc +# as well as the '../' from the filename and adds $(OBJ): +# e.g. $< = '../abc.c' -> 'abc.o' %$(EXE): %.c $(PRODDEPLIBS) - $(RM) $@ - $(LINK.c) $< $(LDLIBS) + @$(RM) $@ + $(COMPILE.c) $< + $(LINK.c) $(subst ../,,$(basename $<))$(OBJ) $(LDLIBS) %$(EXE): %.cc $(PRODDEPLIBS) - $(RM) $@ - $(LINK.cc) $< $(LDLIBS) + @$(RM) $@ + $(COMPILE.cc) $< + $(LINK.cc) $(subst ../,,$(basename $<))$(OBJ) $(LDLIBS) %$(OBJ): %.c - $(RM) $@ + @$(RM) $@ $(COMPILE.c) $< %$(OBJ): %.cc - $(RM) $@ + @$(RM) $@ $(COMPILE.cc) $< %.c %.h: ../%.y - $(RM) y.tab.c y.tab.h + @$(RM) y.tab.c y.tab.h $(YACC) $(YACCOPT) $< @if [ -f y.tab.c ]; \ then \ @@ -434,9 +425,9 @@ endif fi %.c: ../%.l - $(RM) lex.yy.c + @$(RM) lex.yy.c $(LEX) $(LEXOPT) $< - $(RM) $@ + @$(RM) $@ $(MV) lex.yy.c $@ #state notation language rule @@ -503,7 +494,6 @@ ifeq ($(DLL_DEF_FILE), $(wildcard $(DLL_DEF_FILE))) DLL_DEF := -def:$(DLL_DEF_FILE) endif -# Ugly trick: # HOST_OPT_FLAGS is part of CFLAGS/CXXFLAGS, # which in turn are used in COMPILE.c[c] # @@ -516,14 +506,13 @@ endif #HOST_OPT_FLAGS += $(subst $@, -D_WINDLL, $(findstring $@,$(LIBOBJS))) $(DLLNAME): $(LIBOBJS) - link $(WIN32LDFLAGS)\ - -implib:$(LIBNAME) -out:$(DLLNAME) $(DLL_DEF) \ - $(DLL_DEP_LIBS) $(LIBOBJS) + link $(WIN32_DLLFLAGS)\ + -implib:$(LIBNAME) -out:$(DLLNAME) $(DLL_DEF)\ + $(DLL_DEP_LIBS) $(ARCH_DEP_LDLIBS) $(HOST_LDLIBS) $(LIBOBJS) else # still on WIN32, this time no DLL but plain lib requested: $(LIBNAME): $(LIBOBJS) - lib -nologo -verbose -out:$(LIBNAME)\ - $(LIBOBJS) + lib -nologo -verbose -out:$(LIBNAME) $(LIBOBJS) lib -nologo -list $(LIBNAME) endif # LIBTYPE is SHARED ? @@ -591,12 +580,10 @@ $(INSTALL_INCLUDE)/%: ../% $(INSTALL_DOC)/%: % @echo "Installing doc $@" - @testmkdir $(INSTALL_DOC) @$(INSTALL) -m 644 $< $(INSTALL_DOC) $(INSTALL_DOC)/%: ../% @echo "Installing doc $@" - @testmkdir $(INSTALL_DOC) @$(INSTALL) -m 644 $< $(INSTALL_DOC) $(INSTALL_TEMPLATES)/$(TEMPLATES_DIR)/%: ../% diff --git a/config/RULES.Vx b/config/RULES.Vx index 8e123c371..94e443da3 100644 --- a/config/RULES.Vx +++ b/config/RULES.Vx @@ -3,7 +3,6 @@ INCREC +=$(RECTYPES) $(MENUS) INSTALL_PROD = $(PROD:%= $(INSTALL_BIN)/%) INSTALL_LIBS = $(LIBNAME:%= $(INSTALL_BIN)/%) -INSTALL_LIBS_CXX = $(LIBNAME_CXX:%= $(INSTALL_BIN)/%) INSTALL_INC = $(INC:%= $(INSTALL_INCLUDE)/%) INSTALL_OSINCLUDE = $(INSTALL_INCLUDE)/os/vxWorks INSTALL_OSINC = $(OSINC:%= $(INSTALL_OSINCLUDE)/%) @@ -45,13 +44,13 @@ install:: inc buildInstall buildInstall :: build $(INSTALL_INCREC)\ $(INSTALL_LOCATION_BIN) \ - $(INSTALL_BIN) $(INSTALL_LIBS) $(INSTALL_LIBS_CXX) \ + $(INSTALL_BIN) $(INSTALL_LIBS) \ $(TARGETS) $(INSTALL_PROD) \ $(INSTALL_MAN) $(INSTALL_MANS)\ $(INSTALL_DOC) $(INSTALL_DOCS) \ $(INSTALL_SCRIPTS) $(INSTALL_INSTALLS)\ $(INSTALL_DBD) $(INSTALL_DBS) $(INSTALL_BPTS) \ - $(INSTALL_DBDNAME) binInstalls + $(INSTALL_DBDNAME) depends:: $(SRCS.c) $(SRCS.cc) ifdef SRCS @@ -153,8 +152,8 @@ $(DIRECTORY_TARGETS) : $(MANGEN) -s $( $@/Makefile - echo "include ../Makefile.$(BUILD_TYPE)" >> $@/Makefile + $(PERL) $(EPICS_BASE)/config/makeMakefile.pl $@ $(BUILD_TYPE) $(crossDirs) : - $(MKDIR) $@ - echo "T_A=$(subst O.,,$@)" > $@/Makefile - echo "include ../Makefile.Vx" >> $@/Makefile + $(PERL) $(EPICS_BASE)/config/makeMakefile.pl $@ Vx # # host/cross action targets diff --git a/config/makeMakefile.pl b/config/makeMakefile.pl new file mode 100644 index 000000000..aab403e46 --- /dev/null +++ b/config/makeMakefile.pl @@ -0,0 +1,30 @@ +#!/usr/local/bin/perl +# +# makeMakefile.pl +# +# called from RULES_ARCHS +# +# +# Usage: perl makeMakefile.pl O.*-dir Makefile-Type + +$dir = $ARGV[0]; +$type= $ARGV[1]; +$makefile="$dir/Makefile"; + +if ($dir =~ m'O.(.+)') +{ + $t_a = $1; +} +else +{ + die "Cannot extract T_A from $dir"; +} + +mkdir ($dir, 0777) unless -d $dir; + +open OUT, "> $makefile" or die "Cannot create $makefile"; +print OUT "T_A=$t_a\n"; +print OUT "include ../Makefile.$type\n"; +close OUT; + +# EOF makeMakefile.pl