# # Startversion target - generate version number (and alpha number) in a # standard fashion # Input # - TOOLROOT macro is set to point to tools to use for this build. # - mkversionnum and showversionnum available in $(TOOLROOT). These # are part of the buildtools ism # - include $(IVDEPTH)/make/releasedefs at the same level you # include this file. This provides the definition of the # TREE_ID and RELEASE_NUM macros # - The WORKAREA environment variable pointing to a writable directory. # Typically, this is a ptools workarea containing one or more # ISMs. The version number generated applies to all of these # ISMs. # - set the following macros as needed # BUILDER - (to 1 if project build, to 2 if build group build) # defaults to 0 (developer 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) # VNUM_OVERRIDE - a ten digit version number to be directly used. # This option is provided as a hook and should rarely if ever be # used. # Output # - $(WORKAREA)/.version_number - the ten digit version number # - $(WORKAREA)/.alpha_number - the alpha number portion of the # version number # Algorithm # # If PATCH_NUM is set then a patch release version number is generated. # Else if VNUM_OVERRIDE is set then it will be used as the version number. # Else a regular version number is generated. # # Patch version number # # first eight digit are PATCH_RELEASE if it is set. # Else first eight digits of $(WORKAREA)/.version_number. # It is and error for both PATCH_RELEASE and # $(WORKAREA)/.version_number to be unset. # # last two digits are 30 + (PATCH_NUM mod 70). # first eight digits generated above are (potentially) # modified by adding PATCH_NUM/70 (this should rarely happen). # # Regular version number # # first three digits are RELEASE_NUM. # # next five digits are the number of hours since # January 1, 1993 and are generated by the mkversionnum # command. # # next digit is BUILDER. # # last digit is TREE_ID. # # Alpha number # is the fourth thru eighth digits from the version number # generated by the above steps. These five digits are the alpha # number portion of the version number and are the number of # hours since Jan 1, 1993. # #ident "$Revision: 1.1.1.1 $" VNUM=$(WORKAREA)/.version_number ANUM=$(WORKAREA)/.alpha_number MKVERSIONNUM=$(TOOLROOT)/usr/sbin/mkversionnum SHOWVERSIONNUM=$(TOOLROOT)/usr/sbin/showversionnum # The file where the .o file with the ident string lives. # Build this into all files, by building with RLS_ID_OBJECT=${V_IDENTFILE} # in the environment. The cc driver automatically passes this to ld ## if set, as the last item on the ld line. No problem for standalone # because all standalone (coff) programs use ld rather than the driver. # variable constructed so the 3.18 (late alpha) ld recognizes the file # as "PIC-neutral", so it can be used with shared and -non_shared # binaries. Written so both ident and what show a meaningful string on # all resulting binaries. # This one definitely uses the TOOLROOT compiler; do not use $(CCF) # because this may be included in Makefiles that do not define it. V_IDENTFILE=${WORKAREA}/.identfile.o V_IDENTFILE_64=${WORKAREA}/.ident_64.o V_IDENTFILE_N32=${WORKAREA}/.ident_n32.o # want this for the basic system release number for V_IDENTFILE sinclude $(IVDEPTH)/make/releasedefs startversion: @if [ "$(WORKAREA)" = "" ]; then \ echo "You must set the WORKAREA environment variable"; \ exit 1; \ fi @if [ "$(PATCH_NUM)" ]; then \ if [ "$(PATCH_RELEASE)" ]; then \ newvnum=`$(MKVERSIONNUM) -P "$(PATCH_RELEASE)" \ -p "$(PATCH_NUM)"` ; \ else \ patrel=`cat $(VNUM)`; \ newvnum=`$(MKVERSIONNUM) -P "$$patrel" -p "$(PATCH_NUM)"`;\ fi; \ else \ newvnum=`$(MKVERSIONNUM) -r "$(RELEASE_NUM)" -b "$(BUILDER)" \ -t "$(TREE_ID)" -f "$(VNUM_OVERRIDE)"` ; \ fi; \ echo "$$newvnum" > $(VNUM); \ echo "$$newvnum" | sed -e "s/...\(.....\)../\1/" > $(ANUM); \ $(SHOWVERSIONNUM) $$newvnum # # @rm -f ${V_IDENTFILE}* @echo 'const char __Release_ID[] = "@(#)\$$'Header: IRIX ${RELEASE}:`cat ${VNUM}` built `date +%D` at `hostname`:$$ROOT $$'";' > ${V_IDENTFILE}.c @${TOOLROOT}/usr/bin/cc -mips1 -c ${V_IDENTFILE}.c -o ${V_IDENTFILE} @echo Revision information that will go into all binaries is: @ident ${V_IDENTFILE} 2>&1 | sed '/:$$/d' @if [ "$$RLS_ID_OBJECT" != ${V_IDENTFILE} ]; then \ echo Warning: You do not have \$$RLS_ID_OBJECT set to ${V_IDENTFILE} in your environment ;\ echo If you do not do so, you will not get the o32bit ident string in the build;\ fi # # @rm -f ${V_IDENTFILE_64}* @echo 'const char __Release_ID[] = "@(#)$$'Header: IRIX ${RELEASE}:`cat ${VNUM}` built `date +%D` at `hostname`:$$ROOT $$'";' > ${V_IDENTFILE_64}.c @echo 'static const char *p = __Release_ID;' >> ${V_IDENTFILE_64}.c @${TOOLROOT}/usr/bin/cc -64 -mips3 -cckr -c ${V_IDENTFILE_64}.c -o ${V_IDENTFILE_64} @if [ "$$RLS_ID_OBJECT64" != ${V_IDENTFILE_64} ]; then \ echo Warning: You do not have \$$RLS_ID_OBJECT64 set to ${V_IDENTFILE_64} in your environment ;\ echo If you do not do so, you will not get the 64bit ident string in the build;\ fi # # @rm -f ${V_IDENTFILE_N32}* @echo 'const char __Release_ID[] = "@(#)$$'Header: IRIX ${RELEASE}:`cat ${VNUM}` built `date +%D` at `hostname`:$$ROOT $$'";' > ${V_IDENTFILE_N32}.c @echo 'static const char *p = __Release_ID;' >> ${V_IDENTFILE_N32}.c @${TOOLROOT}/usr/bin/cc -n32 -mips3 -cckr -c ${V_IDENTFILE_N32}.c -o ${V_IDENTFILE_N32} @if [ "$$RLS_ID_OBJECTN32" != ${V_IDENTFILE_N32} ]; then \ echo Warning: You do not have \$$RLS_ID_OBJECTN32 set to ${V_IDENTFILE_N32} in your environment ;\ echo If you do not do so, you will not get the n32bit ident string in the build;\ fi