Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 # | 5 # |
| 6 # GNU Make based build file. For details on GNU Make see: | 6 # GNU Make based build file. For details on GNU Make see: |
| 7 # http://www.gnu.org/software/make/manual/make.html | 7 # http://www.gnu.org/software/make/manual/make.html |
| 8 # | 8 # |
| 9 # | 9 # |
| 10 | 10 |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 34 X86_64_LINK?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/bin/x86_64-nacl-g++ | 34 X86_64_LINK?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/bin/x86_64-nacl-g++ |
| 35 X86_64_LIB?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/bin/x86_64-nacl-ar | 35 X86_64_LIB?=$(TC_PATH)/$(OSNAME)_x86_$(TOOLCHAIN)/bin/x86_64-nacl-ar |
| 36 | 36 |
| 37 ARM_CC?=$(TC_PATH)/$(OSNAME)_arm_$(TOOLCHAIN)/bin/arm-nacl-gcc | 37 ARM_CC?=$(TC_PATH)/$(OSNAME)_arm_$(TOOLCHAIN)/bin/arm-nacl-gcc |
| 38 ARM_CXX?=$(TC_PATH)/$(OSNAME)_arm_$(TOOLCHAIN)/bin/arm-nacl-g++ | 38 ARM_CXX?=$(TC_PATH)/$(OSNAME)_arm_$(TOOLCHAIN)/bin/arm-nacl-g++ |
| 39 ARM_LINK?=$(TC_PATH)/$(OSNAME)_arm_$(TOOLCHAIN)/bin/arm-nacl-g++ | 39 ARM_LINK?=$(TC_PATH)/$(OSNAME)_arm_$(TOOLCHAIN)/bin/arm-nacl-g++ |
| 40 ARM_LIB?=$(TC_PATH)/$(OSNAME)_arm_$(TOOLCHAIN)/bin/arm-nacl-ar | 40 ARM_LIB?=$(TC_PATH)/$(OSNAME)_arm_$(TOOLCHAIN)/bin/arm-nacl-ar |
| 41 | 41 |
| 42 | 42 |
| 43 # | 43 # |
| 44 # Convert a source path to a object file path | |
| 45 # | |
| 46 # $1 = Source Name | |
| 47 # $2 = Arch sufffix | |
|
binji
2013/03/05 01:04:58
sp: suffix
Sam Clegg
2013/03/05 20:05:40
Done.
| |
| 48 # | |
| 49 define SRC_TO_OBJ | |
| 50 $(OUTDIR)/$(basename $(subst ..,__,$(1)))_$(2).o | |
| 51 endef | |
| 52 | |
| 53 | |
| 54 # | |
| 44 # Compile Macro | 55 # Compile Macro |
| 45 # | 56 # |
| 46 # $1 = Source Name | 57 # $1 = Source Name |
| 47 # $2 = Compile Flags | 58 # $2 = Compile Flags |
| 48 # | 59 # |
| 49 | |
| 50 define C_COMPILER_RULE | 60 define C_COMPILER_RULE |
| 51 -include $(OUTDIR)/$(basename $(1))_*.d | 61 -include $(OUTDIR)/$(basename $(1))_*.d |
| 52 $(OUTDIR)/$(basename $(1))_x86_32.o : $(1) $(TOP_MAKE) | $(dir $(OUTDIR)/$(basen ame $(1)))dir.stamp | 62 $(call SRC_TO_OBJ,$(1),x86_32): $(1) $(TOP_MAKE) | $(call SRC_TO_OBJ,$(1),x86_32 )dir.stamp |
|
binji
2013/03/05 01:04:58
looks like you lost the call to $(dir)
Sam Clegg
2013/03/05 20:05:40
Done.
| |
| 53 $(call LOG,CC,$$@,$(X86_32_CC) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_ CFLAGS)) | 63 $(call LOG,CC,$$@,$(X86_32_CC) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_ CFLAGS)) |
| 54 | 64 |
| 55 $(OUTDIR)/$(basename $(1))_x86_64.o : $(1) $(TOP_MAKE) | $(dir $(OUTDIR)/$(basen ame $(1)))dir.stamp | 65 $(call SRC_TO_OBJ,$(1),x86_64): $(1) $(TOP_MAKE) | $(call SRC_TO_OBJ,$(1),x86_64 )dir.stamp |
| 56 $(call LOG,CC,$$@,$(X86_64_CC) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_ CFLAGS)) | 66 $(call LOG,CC,$$@,$(X86_64_CC) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_ CFLAGS)) |
| 57 | 67 |
| 58 $(OUTDIR)/$(basename $(1))_arm.o : $(1) $(TOP_MAKE) | $(dir $(OUTDIR)/$(basename $(1)))dir.stamp | 68 $(call SRC_TO_OBJ,$(1),arm): $(1) $(TOP_MAKE) | $(call SRC_TO_OBJ,$(1),arm)dir.s tamp |
| 59 $(call LOG,CC,$$@,$(ARM_CC) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_CFL AGS)) | 69 $(call LOG,CC,$$@,$(ARM_CC) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_CFL AGS)) |
| 60 endef | 70 endef |
| 61 | 71 |
| 62 define CXX_COMPILER_RULE | 72 define CXX_COMPILER_RULE |
| 63 -include $(OUTDIR)/$(basename $(1))_*.d | 73 -include $(OUTDIR)/$(basename $(1))_*.d |
| 64 $(OUTDIR)/$(basename $(1))_x86_32.o : $(1) $(TOP_MAKE) | $(dir $(OUTDIR)/$(basen ame $(1)))dir.stamp | 74 $(call SRC_TO_OBJ,$(1),x86_32): $(1) $(TOP_MAKE) | $(call SRC_TO_OBJ,$(1),x86_32 )dir.stamp |
| 65 $(call LOG,CXX,$$@,$(X86_32_CXX) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NAC L_CXXFLAGS)) | 75 $(call LOG,CXX,$$@,$(X86_32_CXX) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NAC L_CXXFLAGS)) |
| 66 | 76 |
| 67 $(OUTDIR)/$(basename $(1))_x86_64.o : $(1) $(TOP_MAKE) | $(dir $(OUTDIR)/$(basen ame $(1)))dir.stamp | 77 $(call SRC_TO_OBJ,$(1),x86_64): $(1) $(TOP_MAKE) | $(call SRC_TO_OBJ,$(1),x86_64 )dir.stamp |
| 68 $(call LOG,CXX,$$@,$(X86_64_CXX) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NAC L_CXXFLAGS)) | 78 $(call LOG,CXX,$$@,$(X86_64_CXX) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NAC L_CXXFLAGS)) |
| 69 | 79 |
| 70 $(OUTDIR)/$(basename $(1))_arm.o : $(1) $(TOP_MAKE) | $(dir $(OUTDIR)/$(basename $(1)))dir.stamp | 80 $(call SRC_TO_OBJ,$(1),arm): $(1) $(TOP_MAKE) | $(call SRC_TO_OBJ,$(1),arm)dir.s tamp |
| 71 $(call LOG,CXX,$$@,$(ARM_CXX) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_C XXFLAGS)) | 81 $(call LOG,CXX,$$@,$(ARM_CXX) -o $$@ -c $$< $(POSIX_FLAGS) $(2) $(NACL_C XXFLAGS)) |
| 72 endef | 82 endef |
| 73 | 83 |
| 74 | 84 |
| 75 # | 85 # |
| 76 # $1 = Source Name | 86 # $1 = Source Name |
| 77 # $2 = POSIX Compile Flags | 87 # $2 = POSIX Compile Flags |
| 78 # $3 = Include Directories | 88 # $3 = Include Directories |
| 79 # $4 = VC Flags (unused) | 89 # $4 = VC Flags (unused) |
| 80 # | 90 # |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 93 # $1 = Target Name | 103 # $1 = Target Name |
| 94 # $2 = List of Sources | 104 # $2 = List of Sources |
| 95 # $3 = List of LIBS | 105 # $3 = List of LIBS |
| 96 # $4 = List of DEPS | 106 # $4 = List of DEPS |
| 97 # $5 = 1 => Don't add to NMF. | 107 # $5 = 1 => Don't add to NMF. |
| 98 # | 108 # |
| 99 # | 109 # |
| 100 GLIBC_REMAP:= | 110 GLIBC_REMAP:= |
| 101 define SO_RULE | 111 define SO_RULE |
| 102 NMF_TARGETS+=$$(OUTDIR)/$(1)_x86_32.so | 112 NMF_TARGETS+=$$(OUTDIR)/$(1)_x86_32.so |
| 103 $(OUTDIR)/$(1)_x86_32.so : $(foreach src,$(2),$(OUTDIR)/$(basename $(src))_x86_3 2.o) $(4) | 113 $(OUTDIR)/$(1)_x86_32.so : $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),x86_32) $ (4) |
| 104 $(call LOG,LINK,$$@,$(X86_32_LINK) -o $$@ $$(filter-out $(4),$$^) -share d -m32 $$(LD_X86_32) $$(LD_FLAGS) $(foreach lib,$(3),-l$(lib))) | 114 $(call LOG,LINK,$$@,$(X86_32_LINK) -o $$@ $$(filter-out $(4),$$^) -share d -m32 $$(LD_X86_32) $$(LD_FLAGS) $(foreach lib,$(3),-l$(lib))) |
| 105 | 115 |
| 106 NMF_TARGETS+=$(OUTDIR)/$(1)_x86_64.so | 116 NMF_TARGETS+=$(OUTDIR)/$(1)_x86_64.so |
| 107 $(OUTDIR)/$(1)_x86_64.so : $(foreach src,$(2),$$(OUTDIR)/$(basename $(src))_x86_ 64.o) $(4) | 117 $(OUTDIR)/$(1)_x86_64.so : $(foreach src,$(2),$(call SRC_TO_OBJ,$(src)),x86_64) $(4) |
| 108 $(call LOG,LINK,$$@,$(X86_32_LINK) -o $$@ $$(filter-out $(4),$$^) -share d -m64 $(LD_X86_64) $$(LD_FLAGS) $(foreach lib,$(3),-l$(lib))) | 118 $(call LOG,LINK,$$@,$(X86_32_LINK) -o $$@ $$(filter-out $(4),$$^) -share d -m64 $(LD_X86_64) $$(LD_FLAGS) $(foreach lib,$(3),-l$(lib))) |
| 109 | 119 |
| 110 ifneq (1,$(5)) | 120 ifneq (1,$(5)) |
| 111 GLIBC_SO_LIST+=$(OUTDIR)/$(1)_x86_32.so $(OUTDIR)/$(1)_x86_64.so | 121 GLIBC_SO_LIST+=$(OUTDIR)/$(1)_x86_32.so $(OUTDIR)/$(1)_x86_64.so |
| 112 GLIBC_REMAP+=-n $(1)_x86_32.so,$(1).so | 122 GLIBC_REMAP+=-n $(1)_x86_32.so,$(1).so |
| 113 GLIBC_REMAP+=-n $(1)_x86_64.so,$(1).so | 123 GLIBC_REMAP+=-n $(1)_x86_64.so,$(1).so |
| 114 else | 124 else |
| 115 all: $(OUTDIR)/$(1)_x86_32.so $(OUTDIR)/$(1)_x86_64.so | 125 all: $(OUTDIR)/$(1)_x86_32.so $(OUTDIR)/$(1)_x86_64.so |
| 116 endif | 126 endif |
| 117 endef | 127 endef |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 129 $(STAMPDIR)/$(1).stamp : $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$ (1).a | 139 $(STAMPDIR)/$(1).stamp : $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$ (1).a |
| 130 $(STAMPDIR)/$(1).stamp : $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$ (1).a | 140 $(STAMPDIR)/$(1).stamp : $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$ (1).a |
| 131 ifneq ('glibc','$(TOOLCHAIN)') | 141 ifneq ('glibc','$(TOOLCHAIN)') |
| 132 $(STAMPDIR)/$(1).stamp : $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_arm/$(CONFIG)/lib$(1) .a | 142 $(STAMPDIR)/$(1).stamp : $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_arm/$(CONFIG)/lib$(1) .a |
| 133 endif | 143 endif |
| 134 | 144 |
| 135 $(STAMPDIR)/$(1).stamp : | 145 $(STAMPDIR)/$(1).stamp : |
| 136 @echo "TOUCHED $$@" > $(STAMPDIR)/$(1).stamp | 146 @echo "TOUCHED $$@" > $(STAMPDIR)/$(1).stamp |
| 137 | 147 |
| 138 all: $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).a | 148 all: $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).a |
| 139 $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).a : $(foreach src,$(2 ),$(OUTDIR)/$(basename $(src))_x86_32.o) | 149 $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).a : $(foreach src,$(2 ),$(call SRC_TO_OBJ,$(src),x86_32)) |
| 140 $(MKDIR) -p $$(dir $$@) | 150 $(MKDIR) -p $$(dir $$@) |
| 141 $(call LOG,LIB,$$@,$(X86_32_LIB) -r $$@ $$^) | 151 $(call LOG,LIB,$$@,$(X86_32_LIB) -r $$@ $$^) |
| 142 | 152 |
| 143 all: $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).a | 153 all: $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).a |
| 144 $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).a : $(foreach src,$(2 ),$(OUTDIR)/$(basename $(src))_x86_64.o) | 154 $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).a : $(foreach src,$(2 ),$(call SRC_TO_OBJ,$(src),x86_64)) |
| 145 $(MKDIR) -p $$(dir $$@) | 155 $(MKDIR) -p $$(dir $$@) |
| 146 $(call LOG,LIB,$$@,$(X86_64_LIB) -r $$@ $$^) | 156 $(call LOG,LIB,$$@,$(X86_64_LIB) -r $$@ $$^) |
| 147 | 157 |
| 148 ifneq ('glibc','$(TOOLCHAIN)') | 158 ifneq ('glibc','$(TOOLCHAIN)') |
| 149 all: $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_arm/$(CONFIG)/lib$(1).a | 159 all: $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_arm/$(CONFIG)/lib$(1).a |
| 150 endif | 160 endif |
| 151 $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_arm/$(CONFIG)/lib$(1).a : $(foreach src,$(2),$ (OUTDIR)/$(basename $(src))_arm.o) | 161 $(NACL_SDK_ROOT)/lib/$(TOOLCHAIN)_arm/$(CONFIG)/lib$(1).a : $(foreach src,$(2),$ (call SRC_TO_OBJ,$(src),arm)) |
| 152 $(MKDIR) -p $$(dir $$@) | 162 $(MKDIR) -p $$(dir $$@) |
| 153 $(call LOG,LIB,$$@,$(ARM_LIB) -r $$@ $$^) | 163 $(call LOG,LIB,$$@,$(ARM_LIB) -r $$@ $$^) |
| 154 endef | 164 endef |
| 155 | 165 |
| 166 | |
| 156 # | 167 # |
| 157 # Specific Link Macro | 168 # Specific Link Macro |
| 158 # | 169 # |
| 159 # $1 = Target Name | 170 # $1 = Target Name |
| 160 # $2 = List of Sources | 171 # $2 = List of Sources |
| 161 # $3 = List of LIBS | 172 # $3 = List of LIBS |
| 162 # $4 = List of DEPS | 173 # $4 = List of DEPS |
| 163 # $5 = POSIX Link Flags | 174 # $5 = POSIX Link Flags |
| 164 # $6 = Library Paths | 175 # $6 = Library Paths |
| 165 # | 176 # |
| 166 define LINKER_RULE | 177 define LINKER_RULE |
| 167 $(OUTDIR)/$(1)_x86_32.nexe : $(foreach src,$(2),$(OUTDIR)/$(basename $(src))_x86 _32.o) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp) | 178 $(OUTDIR)/$(1)_x86_32.nexe : $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),x86_32) ) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp) |
| 168 $(call LOG,LINK,$$@,$(X86_32_LINK) -o $$@ $$(filter %.o,$$^) $(NACL_LDFL AGS) $(foreach path,$(6),-L$(path)/$(TOOLCHAIN)_x86_32/$(CONFIG)) $(foreach lib, $(3),-l$(lib)) $(5)) | 179 $(call LOG,LINK,$$@,$(X86_32_LINK) -o $$@ $$(filter %.o,$$^) $(NACL_LDFL AGS) $(foreach path,$(6),-L$(path)/$(TOOLCHAIN)_x86_32/$(CONFIG)) $(foreach lib, $(3),-l$(lib)) $(5)) |
| 169 | 180 |
| 170 $(OUTDIR)/$(1)_x86_64.nexe : $(foreach src,$(2),$$(OUTDIR)/$(basename $(src))_x8 6_64.o) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp) | 181 $(OUTDIR)/$(1)_x86_64.nexe : $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),x86_64) ) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp) |
| 171 $(call LOG,LINK,$$@,$(X86_64_LINK) -o $$@ $$(filter %.o,$$^) $(NACL_LDFL AGS) $(foreach path,$(6),-L$(path)/$(TOOLCHAIN)_x86_64/$(CONFIG)) $(foreach lib, $(3),-l$(lib)) $(5)) | 182 $(call LOG,LINK,$$@,$(X86_64_LINK) -o $$@ $$(filter %.o,$$^) $(NACL_LDFL AGS) $(foreach path,$(6),-L$(path)/$(TOOLCHAIN)_x86_64/$(CONFIG)) $(foreach lib, $(3),-l$(lib)) $(5)) |
| 172 | 183 |
| 173 $(OUTDIR)/$(1)_arm.nexe : $(foreach src,$(2),$(OUTDIR)/$(basename $(src))_arm.o) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp) | 184 $(OUTDIR)/$(1)_arm.nexe : $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),arm)) $(fo reach dep,$(4),$(STAMPDIR)/$(dep).stamp) |
| 174 $(call LOG,LINK,$$@,$(ARM_LINK) -o $$@ $$(filter %.o,$$^) $(NACL_LDFLAGS ) $(foreach path,$(6),-L$(path)/$(TOOLCHAIN)_arm/$(CONFIG)) $(foreach lib,$(3),- l$(lib)) $(5)) | 185 $(call LOG,LINK,$$@,$(ARM_LINK) -o $$@ $$(filter %.o,$$^) $(NACL_LDFLAGS ) $(foreach path,$(6),-L$(path)/$(TOOLCHAIN)_arm/$(CONFIG)) $(foreach lib,$(3),- l$(lib)) $(5)) |
| 175 endef | 186 endef |
| 176 | 187 |
| 177 | 188 |
| 178 # | 189 # |
| 179 # Generalized Link Macro | 190 # Generalized Link Macro |
| 180 # | 191 # |
| 181 # $1 = Target Name | 192 # $1 = Target Name |
| 182 # $2 = List of Sources | 193 # $2 = List of Sources |
| 183 # $3 = List of LIBS | 194 # $3 = List of LIBS |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 228 NMF:=python $(NACL_SDK_ROOT)/tools/create_nmf.py | 239 NMF:=python $(NACL_SDK_ROOT)/tools/create_nmf.py |
| 229 GLIBC_DUMP:=$(TC_PATH)/$(OSNAME)_x86_glibc/x86_64-nacl/bin/objdump | 240 GLIBC_DUMP:=$(TC_PATH)/$(OSNAME)_x86_glibc/x86_64-nacl/bin/objdump |
| 230 GLIBC_PATHS:=-L $(TC_PATH)/$(OSNAME)_x86_glibc/x86_64-nacl/lib32 | 241 GLIBC_PATHS:=-L $(TC_PATH)/$(OSNAME)_x86_glibc/x86_64-nacl/lib32 |
| 231 GLIBC_PATHS+=-L $(TC_PATH)/$(OSNAME)_x86_glibc/x86_64-nacl/lib | 242 GLIBC_PATHS+=-L $(TC_PATH)/$(OSNAME)_x86_glibc/x86_64-nacl/lib |
| 232 | 243 |
| 233 define NMF_RULE | 244 define NMF_RULE |
| 234 all:$(OUTDIR)/$(1).nmf | 245 all:$(OUTDIR)/$(1).nmf |
| 235 $(OUTDIR)/$(1).nmf : $(foreach arch,$(NMF_ARCHES),$(OUTDIR)/$(1)$(arch)) $(GLIBC _SO_LIST) | 246 $(OUTDIR)/$(1).nmf : $(foreach arch,$(NMF_ARCHES),$(OUTDIR)/$(1)$(arch)) $(GLIBC _SO_LIST) |
| 236 $(call LOG,CREATE_NMF,$$@,$(NMF) -o $$@ $$^ -D $(GLIBC_DUMP) $(GLIBC_PAT HS) -s $(OUTDIR) $(2) $(GLIBC_REMAP)) | 247 $(call LOG,CREATE_NMF,$$@,$(NMF) -o $$@ $$^ -D $(GLIBC_DUMP) $(GLIBC_PAT HS) -s $(OUTDIR) $(2) $(GLIBC_REMAP)) |
| 237 endef | 248 endef |
| 238 | |
| 239 | |
| OLD | NEW |