1 # This makefile will generate versioning files based on information from the 2 # source control system, if it's available. If it's not, then it will use a 3 # timestamp 4 # 5 # The following variables are specific to the SDK and should be defined locally: 6 # sdkinfo_target 7 # sdkinfo_header_filename 8 # sdkinfo_header_macro 9 # sdkinfo_label_macro 10 # sdkinfo_date_macro 11 # sdkinfo_version_file 12 # sdkinfo_version_type 13 14 # Skip all the rules if the target is clean 15 ifneq "$(MAKECMDGOALS)" "clean" 16 17 # Check if variables are set, if not set to default 18 ifeq ($(strip $(GREP)),) 19 GREP := grep 20 endif 21 22 ifeq ($(strip $(CUT)),) 23 CUT := cut 24 endif 25 26 ifeq ($(strip $(ACCUREV)),) 27 ACCUREV := accurev 28 endif 29 30 ifneq ($(strip $(OFFICIAL_RELEASE)),) 31 sdkinfo_official_string := // *** OFFICIAL RELEASE INFO -- Will not auto update 32 else 33 sdkinfo_official_string := 34 endif 35 36 sdkinfo_official_grep := "*** OFFICIAL RELEASE" 37 38 39 # Initialize values to empty 40 file_official:= 41 file_data:= 42 43 # Read data from current file (if any) 44 # First check if file is there 45 file_exists := $(wildcard $(sdkinfo_header_filename)) 46 ifneq ($(strip $(file_exists)),) 47 file_sdkinfo:= $(shell $(GREP) $(sdkinfo_label_macro) $(sdkinfo_header_filename) | $(CUT) -f2 -d\") 48 file_header_time:= $(shell $(GREP) $(sdkinfo_date_macro) $(sdkinfo_header_filename) | $(CUT) -f3 -d" ") 49 50 ifeq ($(strip $(OFFICIAL_RELEASE)),) 51 # only set file_official and file_data if the OFFICIAL_RELEASE is NOT set. 52 # otherwise leave these empty so the file will be regenerated. 53 54 # check if file is marked as an official release internally 55 file_official:= $(shell $(GREP) $(sdkinfo_official_grep) $(sdkinfo_header_filename)) 56 57 # Concat the strings for comparison. We only want to generate the new file 58 # if something has changed 59 file_data:=$(join $(file_sdkinfo), $(file_header_time)) 60 endif 61 62 endif 63 64 65 66 ifeq ($(strip $(file_official)),) 67 68 69 ifeq ($(HOST_ARCH),win32) 70 DATE := gnu_date 71 ECHO := gnu_echo 72 header_date_format := 0x%%Y%%m%%d 73 else 74 DATE := date 75 ECHO := echo 76 header_date_format := 0x%Y%m%d 77 endif 78 79 # Check if date_format strings are good. 80 # On some PCs, this needs to change - not sure why. 81 time_okay := $(shell $(DATE) -u +"$(header_date_format)") 82 ifneq (,$(findstring %, $(time_okay))) 83 # swap settings 84 ifeq ($(HOST_ARCH),win32) 85 header_date_format := 0x%Y%m%d 86 else 87 header_date_format := 0x%%Y%%m%%d 88 endif 89 endif 90 91 92 # Set prerequisites since depending what is passed in, we may build multiple 93 # files 94 sdkinfo_target_prereq := FORCE 95 96 header_time:= $(shell $(DATE) -u +"$(header_date_format)") 97 98 # Get basis of current accurev workspace 99 basis_stream := $(strip $(shell $(ACCUREV) info 2>&1 | $(GREP) "Basis:" | $(CUT) -f2 -d":")) 100 101 ifneq ($(strip $(basis_stream)),) 102 basis_stream_type := $(shell $(ACCUREV) show -fx -s $(basis_stream) streams | $(GREP) "type=" | $(CUT) -f2 -d"\"") 103 ifeq ($(strip $(basis_stream_type)),passthrough) 104 parent_basis_stream := $(shell $(ACCUREV) show -fx -s $(basis_stream) streams | $(GREP) "basis=" | $(CUT) -f2 -d"\"") 105 stream_name := $(parent_basis_stream) 106 transaction_id := $(shell $(ACCUREV) hist -ft -t "now".1 -s $(parent_basis_stream) | $(GREP) "transaction" | $(CUT) -f1 -d";" | $(CUT) -f2 -d" " ) 107 else 108 ifeq ($(strip $(basis_stream_type)),snapshot) 109 transaction_id := $(shell $(ACCUREV) show -fx -s $(basis_stream) streams | $(GREP) "name=" | $(CUT) -f2 -d"\"") 110 else # basis is normal stream type 111 stream_name := $(basis_stream) 112 transaction_id := $(shell $(ACCUREV) hist -ft -t "now".1 -s $(basis_stream) | $(GREP) "transaction" | $(CUT) -f1 -d";" | $(CUT) -f2 -d" " ) 113 endif 114 endif 115 endif 116 117 ifeq ($(strip $(transaction_id)),) 118 sdkinfo := null 119 else 120 sdkinfo := $(transaction_id) 121 endif 122 123 ifneq ($(strip $(stream_name)),) 124 sdkinfo := $(stream_name).$(sdkinfo) 125 endif 126 127 ifneq ($(strip $(sdkinfo_version_file)),) 128 sdkinfo_target_prereq := $(sdkinfo_version_file) FORCE 129 endif 130 131 data:=$(join $(sdkinfo), $(header_time)) 132 133 # $(info header file $(sdkinfo_header_filename), file data = $(file_data), data = $(data)) 134 135 ifneq ($(strip $(file_data)),$(data)) 136 137 $(sdkinfo_target): $(sdkinfo_header_filename) 138 139 $(sdkinfo_header_filename): sdkinfo_rule_hdr_macro := $(sdkinfo_header_macro) 140 $(sdkinfo_header_filename): sdkinfo_rule_label_macro := $(sdkinfo_label_macro) 141 $(sdkinfo_header_filename): sdkinfo_rule_date_macro := $(sdkinfo_date_macro) 142 $(sdkinfo_header_filename): sdkinfo_rule_sdkinfo := $(sdkinfo) 143 $(sdkinfo_header_filename): sdkinfo_rule_official_string := $(sdkinfo_official_string) 144 $(sdkinfo_header_filename): sdkinfo_rule_time := $(header_time) 145 $(sdkinfo_header_filename): sdkinfo_rule_file_data := $(file_data) 146 $(sdkinfo_header_filename): sdkinfo_rule_data := $(data) 147 148 $(sdkinfo_header_filename): $(sdkinfo_target_prereq) 149 @$(ECHO) "Writing $@..." 150 @$(ECHO) "#ifndef $(sdkinfo_rule_hdr_macro)_H_INCLUDED" > $@ 151 @$(ECHO) "#define $(sdkinfo_rule_hdr_macro)_H_INCLUDED" >> $@ 152 @$(ECHO) "" >> $@ 153 @$(ECHO) "// This header file is automatically generated at build-time" >> $@ 154 @$(ECHO) "$(sdkinfo_rule_official_string)" >> $@ 155 @$(ECHO) "" >> $@ 156 @$(ECHO) "#define $(sdkinfo_rule_label_macro) \"$(sdkinfo_rule_sdkinfo)\"" >> $@ 157 @$(ECHO) "#define $(sdkinfo_rule_date_macro) $(sdkinfo_rule_time)" >> $@ 158 @$(ECHO) "" >> $@ 159 @$(ECHO) "#endif //$(sdkinfo_rule_hdr_macro)_H_INCLUDED" >> $@ 160 endif 161 162 # endif for official release file check 163 endif 164 165 166 167 168 $(sdkinfo_version_file): sdkinfo_rule_sdkinfo := $(sdkinfo) 169 $(sdkinfo_version_file): sdkinfo_rule_header_time := $(header_time) 170 171 ifeq ($(strip $(sdkinfo_version_type)),win32) 172 $(sdkinfo_version_file): FORCE 173 @$(ECHO) "Writing $@..." 174 @$(ECHO) "STRINGTABLE DISCARDABLE" > $@ 175 @$(ECHO) "BEGIN" >> $@ 176 @$(ECHO) " IDS_PV_VERSION \"$(sdkinfo_rule_sdkinfo)\"" >> $@ 177 @$(ECHO) "END" >> $@ 178 @$(ECHO) "" >> $@ 179 @$(ECHO) "STRINGTABLE DISCARDABLE" >> $@ 180 @$(ECHO) "BEGIN" >> $@ 181 @$(ECHO) " IDS_PV_BUILD \"$(sdkinfo_rule_header_time)\"" >> $@ 182 @$(ECHO) "END" >> $@ 183 endif 184 185 ifeq ($(strip $(sdkinfo_version_type)),winmobile) 186 $(sdkinfo_version_file): FORCE 187 @$(ECHO) "Writing $@..." 188 @$(ECHO) "STRINGTABLE" > $@ 189 @$(ECHO) "BEGIN" >> $@ 190 @$(ECHO) " IDS_PV_VERSION \"$(sdkinfo_rule_sdkinfo)\"" >> $@ 191 @$(ECHO) "END" >> $@ 192 @$(ECHO) "" >> $@ 193 endif 194 195 196 ifeq ($(strip $(sdkinfo_version_type)),s60v3) 197 $(sdkinfo_version_file): FORCE 198 @$(ECHO) "Writing $@..." 199 @$(ECHO) "_LIT(KPVVersionNumber, \"$(sdkinfo_rule_sdkinfo)\");" > $@ 200 @$(ECHO) "_LIT(KPVBuildNumber, \"$(sdkinfo_rule_header_time)\");" >> $@ 201 @$(ECHO) "" >> $@ 202 endif 203 204 205 # endif for this not being for the clean target 206 endif 207