# # Commonrules to build idb's and images for an ism # # # For an ism that doesn't have a rawidb idb # set LIDBJOINFLAGS to -m # In this case a zero length RAWIDB is required # # # Targets: # buildimages - make real images (an individual image can also be made) # buildidbs - makes an external idb # these idb(s) are the exported ones - the image names # must correspond to the public exported names that the # ism has published (and are used in the product # defining spec files). # The idb also must have full path names to the location # of the objects # buildism - old name for buildidbs # version - create a version file # startversion - create a version number in $(WORKAREA)/.version_number # (and alpha number in $(WORKAREA)/.alpha_number # # Before including this file the following should be set: # ALLIMAGES - names of images to be made - must correspond to # product name(s) in spec file # SPEC - spec file name # RAWIDB - rawidb file name # SRCIDB - src/checked in idb file name # # Macros you may wish to set # BUILDER - (to 1 if project build, to 2 if build group build) # TREE_ID - to an integer 1-9 to distinguish parallel OS efforts # targeted to new hardware. # It will default to the value of TREE_ID found in # $(IVDEPTH)/make/releasedefs. # PATCH_RELEASE - if creating a patch release (will default to first eight # digits of $(WORKAREA)/.version_number) # PATCH_NUM - patch number (sequences patch releases) # # Note that macros ALLIMAGES, SPEC, RAWIDB, and SRCIDB need only be set # in the build/Makefile. Typically, one just uses the settings as # provided via the ism template for the build/Makefile. # # #ident "$Revision: 1.1.1.1 $" # XXX smake2gmake - no complete analog in gmake for .NOTPARALLEL .NOTPARALLEL: include $(RELEASEDEFS) include $(COMMONRULES) IDBSAREA=../idbs IMAGESAREA=../images # this is old and shouldn't be used ISMAREA=$(IDBSAREA) SPECDFLT=$(TOOLROOT)/usr/sbin/specdflt SPECPRODS=$(TOOLROOT)/usr/sbin/specprods SPECEXTERN=awk -f $(TOOLROOT)/usr/lib/specextern.awk # get the definition of the startversion target include $(IVDEPTH)/make/startversion $(BUILDIMGPREF)buildimages: checkversion finalidb $(SPEC) @if [ ! -d $(IMAGESAREA) ]; then mkdir $(IMAGESAREA); fi; \ (cd $(IMAGESAREA); for i in $(ALLIMAGES); do \ rm -f $${i}.* $${i}; done) # next 14 lines replicated below @if [ -r $(SPEC) ]; then \ USESPEC=$(SPEC); \ if [ "$(ALLIMAGES)" = "no_images_supplied" ]; then \ echo "\nderiving names of products to generate from file $(SPEC)\n"; \ USEALLIMAGES=`$(SPECPRODS) $$USESPEC`; \ else \ USEALLIMAGES='$(ALLIMAGES)'; \ fi; \ else \ echo "\nderiving file $(SPEC).dflt from file finalidb\n"; \ $(SPECDFLT) > $(SPEC).dflt;\ USESPEC=$(SPEC).dflt; \ USEALLIMAGES=`$(SPECPRODS) $$USESPEC`; \ fi; \ echo "$(GENDIST) $(GENDISTFLAGS) -all -root /"; \ echo "\t-source $(SRC) -idb finalidb"; \ echo "\t-spec $$USESPEC -dist $(IMAGESAREA) $$USEALLIMAGES"; \ VERSION=`cat $(VNUM)` \ $(GENDIST) $(GENDISTFLAGS) -all -root / -source $(SRC) -idb finalidb \ -spec $$USESPEC -dist $(IMAGESAREA) $$USEALLIMAGES # # Generate an external idb - this is the internal idb (finalidb) # run through gendist to convert the internal subsystem names to # the external subsystem names (those specified in the spec file and # published to the product build group). # NOTE: buildism is old target - buildidb is prefered. # $(BUILDISMPREF)buildism:buildidbs $(BUILDIDBPREF)buildidbs:finalidb $(SPEC) @if [ ! -d $(IDBSAREA) ]; then mkdir $(IDBSAREA); fi; \ (cd $(IDBSAREA); for i in $(ALLIMAGES); do \ rm -f $${i}.* $${i}; done) # next 14 lines replicated above @if [ -r $(SPEC) ]; then \ USESPEC=$(SPEC); \ if [ "$(ALLIMAGES)" = "no_images_supplied" ]; then \ echo "\nderiving names of products to generate from file $(SPEC)\n"; \ USEALLIMAGES=`$(SPECPRODS) $$USESPEC`; \ else \ USEALLIMAGES='$(ALLIMAGES)'; \ fi; \ else \ echo "\nderiving file $(SPEC).dflt from file $(RAWIDB)\n"; \ $(SPECDFLT) > $(SPEC).dflt;\ USESPEC=$(SPEC).dflt; \ USEALLIMAGES=`$(SPECPRODS) $$USESPEC`; \ fi;\ $(GENDIST) $(GENDISTFLAGS) -externidb -root / -source $(SRC) \ -idb finalidb -spec $$USESPEC -dist $(IDBSAREA) $$USEALLIMAGES \ >dryrun 2>&1;\ $(SPECEXTERN) < $$USESPEC > $(IDBSAREA)/spec;\ ISMROOT=`pwd`;\ ISMROOT=`echo "$$ISMROOT/.." | sed -e 's/\/[^/]*\/\.\.//'`; \ cd $(IDBSAREA); for i in $$USEALLIMAGES; do \ [ ! -r $$i.idb ] && continue; \ nawk '{$$6=head"/"$$6;print}' head=$$ISMROOT < $$i.idb > $$i.$$$$;\ mv $$i.$$$$ $$i.idb; done $(ALLIMAGES): $(MAKE) ALLIMAGES=$@ buildimages $(FINALPREF)finalidb: $(SRCIDB) -rm -f joinedidb extra missing @#gendist still likes things sorted on dstpath @# use -o so makefile is restartable @if [ -r $(SRCIDB) ]; then \ SIDBS=`echo $(SRCIDB) | tr ' ' ' ' | tr -s '' ' ' | \ sed -e 's/^/-s/' -e 's/ / -s/g'` ;\ $(IDBJOIN) $(IDBJOINFLAGS) $$SIDBS $(RAWIDB) joinedidb extra missing; \ LANG=C sort +4 -5 joinedidb -o finalidb; \ else \ echo "\nderiving file finalidb from file $(RAWIDB)\n"; \ LANG=C sort +4 -5 $(RAWIDB) -o finalidb; \ fi .PHONY: checkversion checkalpha version checkversion: @if [ ! -r $(VNUM) ]; then \ echo "Use the startversion target to set your version number.";\ exit 1 ;\ else \ VERSION=`cat $(VNUM)` ;\ fi # old target provided so that build doesn't break checkalpha: @echo "This target is no longer used." @echo "Please modify your Makefile to remove it." version:checkversion @VERSION=`cat $(VNUM)` \ $(TOOLROOT)/usr/sbin/makeversion $(ISM_NAME).version # ok if these not present, but do need their modification dates if they are fake_target_so_not_empty $(SRCIDB) $(SPEC): :