github.com/m3db/m3@v1.5.1-0.20231129193456-75a402aa583b/src/x/generated-source-files.mk (about)

     1  gopath_prefix            := $(GOPATH)/src
     2  m3x_package              := github.com/m3db/m3/src/x
     3  m3x_package_path         := $(gopath_prefix)/$(m3x_package)
     4  temp_suffix              := _temp
     5  
     6  # Tests that all currently generated types match their contents if they were regenerated
     7  .PHONY: test-genny-all
     8  test-genny-all: genny-all
     9  	@test "$(shell git --no-pager diff --shortstat 2>/dev/null)" = "" || (git --no-pager diff --no-color && echo "Check git status, there are dirty files" && exit 1)
    10  	@test "$(shell git --no-pager status --porcelain 2>/dev/null | grep "^??")" = "" || (git status --porcelain && echo "Check git status, there are untracked files" && exit 1)
    11  
    12  .PHONY: genny-all
    13  genny-all: genny-map-all genny-list-all genny-arraypool-all
    14  
    15  .PHONY: genny-map-all
    16  genny-map-all: idhashmap-update byteshashmap-update
    17  
    18  .PHONY: idhashmap-update
    19  idhashmap-update:
    20  	cd $(m3x_package_path)/generics/hashmap && cat ./map.go | grep -v nolint | genny -pkg idkey -ast gen "KeyType=ident.ID ValueType=MapValue" > ./idkey/map_gen.go
    21  
    22  .PHONY: byteshashmap-update
    23  byteshashmap-update:
    24  	cd $(m3x_package_path)/generics/hashmap && cat ./map.go | grep -v nolint | genny -pkg byteskey -ast gen "KeyType=[]byte ValueType=MapValue" > ./byteskey/map_gen.go
    25  
    26  # NB(prateek): `target_package` should not have a trailing slash
    27  # Generic targets meant to be re-used by other users
    28  .PHONY: hashmap-gen
    29  hashmap-gen:
    30  	$(eval out_dir=$(gopath_prefix)/$(target_package))
    31  	cd $(m3x_package_path)/generics/hashmap && cat ./map.go | grep -v nolint | genny -pkg $(pkg) -ast gen "KeyType=$(key_type) ValueType=$(value_type)" > "$(out_dir)/map_gen.go"
    32  ifneq ($(rename_type_prefix),)
    33  	make hashmap-gen-rename
    34  endif
    35  
    36  .PHONY: idhashmap-gen
    37  idhashmap-gen:
    38  	$(eval out_dir=$(gopath_prefix)/$(target_package))
    39  	cd $(m3x_package_path)/generics/hashmap/idkey && cat ./map_gen.go | grep -v nolint | genny -pkg $(pkg) -ast gen "MapValue=$(value_type)" > "$(out_dir:\=)/map_gen.go"
    40  	cd $(m3x_package_path)/generics/hashmap/idkey && cat ./new_map.go | grep -v nolint | genny -pkg $(pkg) -ast gen "MapValue=$(value_type)" > "$(out_dir:\=)/new_map_gen.go"
    41  ifneq ($(rename_type_prefix),)
    42  	make hashmap-gen-rename rename_nogen_key="true"
    43  endif
    44  
    45  .PHONY: byteshashmap-gen
    46  byteshashmap-gen:
    47  	$(eval out_dir=$(gopath_prefix)/$(target_package))
    48  	cd $(m3x_package_path)/generics/hashmap/byteskey && cat ./map_gen.go | grep -v nolint | genny -pkg $(pkg) -ast gen "MapValue=$(value_type)" > "$(out_dir:\=)/map_gen.go"
    49  	cd $(m3x_package_path)/generics/hashmap/byteskey && cat ./new_map.go | grep -v nolint | genny -pkg $(pkg) -ast gen "MapValue=$(value_type)" > "$(out_dir:\=)/new_map_gen.go"
    50  ifneq ($(rename_type_prefix),)
    51  	make hashmap-gen-rename rename_nogen_key="true"
    52  endif
    53  
    54  key_type_alias   ?= $(key_type)
    55  value_type_alias ?= $(value_type)
    56  .PHONY: hashmap-gen-rename
    57  hashmap-gen-rename:
    58  	$(eval out_dir=$(gopath_prefix)/$(target_package))
    59  	$(eval temp_outdir=$(out_dir)$(temp_suffix))
    60  	echo $(temp_outdir)
    61  	@if test -d $(temp_outdir); then echo "temp directory $(temp_outdir) exists, failing" ; exit 1 ; fi
    62  	mkdir -p $(temp_outdir)
    63  	! test -f $(out_dir)/new_map_gen.go || mv $(out_dir)/new_map_gen.go $(temp_outdir)/new_map_gen.go
    64  ifeq ($(rename_nogen_key),)
    65  	# allow users to short circuit the generation of key.go if they don't need it.
    66  	echo 'package $(pkg)' > $(temp_outdir)/key.go
    67  	echo '' >> $(temp_outdir)/key.go
    68  	test "$(key_type_alias)" == ""  || echo "type $(key_type_alias) interface{}" >> $(temp_outdir)/key.go
    69  endif
    70  ifeq ($(rename_nogen_value),)
    71  	# Allow users to short circuit the generation of value.go if they don't need it.
    72  	echo 'package $(pkg)' > $(temp_outdir)/value.go
    73  	echo '' >> $(temp_outdir)/value.go
    74  	test "$(value_type_alias)" = "struct*" || echo 'type $(value_type_alias) interface{}' >> $(temp_outdir)/value.go
    75  endif
    76  	mv $(out_dir)/map_gen.go $(temp_outdir)/map_gen.go
    77  
    78  	gofmt -w -r 'Map -> $(rename_type_prefix)Map' $(temp_outdir)/*_gen.go
    79  	sed -i'tmp' 's#^// Map# // $(rename_type_prefix)Map#g' $(temp_outdir)/*_gen.go
    80  
    81  	gofmt -w -r 'MapHash -> $(rename_type_prefix)MapHash' $(temp_outdir)/*_gen.go
    82  	sed -i'tmp' 's#^// MapHash# // $(rename_type_prefix)MapHash#g' $(temp_outdir)/*_gen.go
    83  
    84  	gofmt -w -r 'HashFn -> $(rename_type_prefix)MapHashFn' $(temp_outdir)/*_gen.go
    85  	sed -i'tmp' 's#^// HashFn# // $(rename_type_prefix)MapHashFn#g' $(temp_outdir)/*_gen.go
    86  
    87  	gofmt -w -r 'EqualsFn -> $(rename_type_prefix)MapEqualsFn' $(temp_outdir)/*_gen.go
    88  	sed -i'tmp' 's#^// EqualsFn# // $(rename_type_prefix)MapEqualsFn#g' $(temp_outdir)/*_gen.go
    89  
    90  	gofmt -w -r 'CopyFn -> $(rename_type_prefix)MapCopyFn' $(temp_outdir)/*_gen.go
    91  	sed -i'tmp' 's#^// CopyFn# // $(rename_type_prefix)MapCopyFn#g' $(temp_outdir)/*_gen.go
    92  
    93  	gofmt -w -r 'FinalizeFn -> $(rename_type_prefix)MapFinalizeFn' $(temp_outdir)/*_gen.go
    94  	sed -i'tmp' 's#^// FinalizeFn# // $(rename_type_prefix)MapFinalizeFn#g' $(temp_outdir)/*_gen.go
    95  
    96  	gofmt -w -r 'MapEntry -> $(rename_type_prefix)MapEntry' $(temp_outdir)/*_gen.go
    97  	sed -i'tmp' 's#^// MapEntry# // $(rename_type_prefix)MapEntry#g' $(temp_outdir)/*_gen.go
    98  
    99  	gofmt -w -r 'SetUnsafeOptions -> $(rename_type_prefix)MapSetUnsafeOptions' $(temp_outdir)/*_gen.go
   100  	sed -i'tmp' 's#^// SetUnsafeOptions# // $(rename_type_prefix)MapSetUnsafeOptions#g' $(temp_outdir)/*_gen.go
   101  
   102  	gofmt -w -r 'mapAlloc -> _$(rename_type_prefix)MapAlloc' $(temp_outdir)/*_gen.go
   103  	sed -i'tmp' 's#^// mapAlloc#// _$(rename_type_prefix)MapAlloc#g' $(temp_outdir)/*_gen.go
   104  
   105  	gofmt -w -r 'mapOptions -> _$(rename_type_prefix)MapOptions' $(temp_outdir)/*_gen.go
   106  	sed -i'tmp' 's#^// mapOptions#// _$(rename_type_prefix)MapOptions#g' $(temp_outdir)/*_gen.go
   107  
   108  	gofmt -w -r 'mapKey -> _$(rename_type_prefix)MapKey' $(temp_outdir)/*_gen.go
   109  	sed -i'tmp' 's#^// mapKey#// _$(rename_type_prefix)MapKey#g' $(temp_outdir)/*_gen.go
   110  
   111  	gofmt -w -r 'mapKeyOptions -> _$(rename_type_prefix)MapKeyOptions' $(temp_outdir)/*_gen.go
   112  	sed -i'tmp' 's#^// mapKeyOptions#// _$(rename_type_prefix)MapKeyOptions#g' $(temp_outdir)/*_gen.go
   113  
   114  	[ "$(rename_constructor)" = "" ] || \
   115  	gofmt -w -r 'NewMap -> $(rename_constructor)' $(temp_outdir)/*_gen.go && \
   116  	sed -i'tmp' 's#^// NewMap#// $(rename_constructor)#g' $(temp_outdir)/*_gen.go
   117  	[ "$(rename_constructor_options)" = "" ] || \
   118  	gofmt -w -r 'MapOptions -> $(rename_constructor_options)' $(temp_outdir)/*_gen.go && \
   119  	sed -i'tmp' 's#^// MapOptions#// $(rename_constructor_options)#g' $(temp_outdir)/*_gen.go
   120  
   121  	mv $(temp_outdir)/map_gen.go $(out_dir)/map_gen.go
   122  	! test -f $(temp_outdir)/new_map_gen.go || mv $(temp_outdir)/new_map_gen.go $(out_dir)/new_map_gen.go
   123  	rm -f $(temp_outdir)/key.go
   124  	rm -f $(temp_outdir)/value.go
   125  	rm -f $(temp_outdir)/*.gotmp
   126  	rmdir $(temp_outdir)
   127  
   128  # Generation rule for all generated lists
   129  .PHONY: genny-list-all
   130  genny-list-all:                              \
   131  	genny-list-context-finalizeables
   132  
   133  # List generation rule for context/finalizeablesList
   134  .PHONY: genny-list-context-finalizeables
   135  genny-list-context-finalizeables:
   136  	cd $(m3x_package_path) && make genny-pooled-elem-list-gen \
   137  		pkg=context                                           \
   138  		elem_type=finalizeable                                \
   139  		value_type=finalizeable                               \
   140  		rename_type_prefix=finalizeable                       \
   141  		rename_type_middle=Finalizeable                       \
   142  		rename_gen_types=true                                 \
   143  		target_package=github.com/m3db/m3/src/x/context
   144  	# Rename generated list file
   145  	mv -f $(m3x_package_path)/context/list_gen.go $(m3x_package_path)/context/finalizeable_list_gen.go
   146  
   147  .PHONY: genny-arraypool-all
   148  genny-arraypool-all: genny-arraypool-ident-tags
   149  
   150  # arraypool generation rule for ident/tagsArrayPool
   151  .PHONY: genny-arraypool-ident-tags
   152  genny-arraypool-ident-tags:
   153  	cd $(m3x_package_path) && make genny-arraypool   \
   154  		pkg=ident                                      \
   155  		elem_type=Tag                                  \
   156  		target_package=$(m3x_package)/ident            \
   157  		out_file=tag_arraypool_gen.go                  \
   158  		rename_type_prefix=tag                         \
   159  		rename_type_middle=Tag                         \
   160  		rename_constructor=newTagArrayPool             \
   161  		rename_gen_types=true
   162  
   163  # NB(prateek): `target_package` should not have a trailing slash
   164  # Generic arraypool generation rule
   165  .PHONY: genny-arraypool
   166  genny-arraypool:
   167  	$(eval out_dir=$(gopath_prefix)/$(target_package))
   168  	cat $(m3x_package_path)/generics/arraypool/pool.go | grep -v nolint | genny -pkg $(pkg) -ast gen "elemType=$(elem_type)" > "$(out_dir)/$(out_file)"
   169  ifneq ($(rename_type_prefix),)
   170  	$(eval temp_outdir=$(out_dir)$(temp_suffix))
   171  	@if [ -d $(temp_outdir) ] ; then echo "temp directory $(temp_outdir) exists, failing" ; exit 1 ; fi
   172  	mkdir -p $(temp_outdir)
   173  	mv $(out_dir)/$(out_file) $(temp_outdir)/$(out_file)
   174  	make arraypool-gen-rename out_dir=$(out_dir)
   175  	mv $(temp_outdir)/$(out_file) $(out_dir)/$(out_file)
   176  	rm -f $(temp_outdir)/*.gotmp
   177  	rmdir $(temp_outdir)
   178  endif
   179  
   180  elem_type_alias ?= $(elem_type)
   181  .PHONY: arraypool-gen-rename
   182  arraypool-gen-rename:
   183  	$(eval temp_outdir=$(out_dir)$(temp_suffix))
   184  ifneq ($(rename_gen_types),)
   185  	# Allow users to short circuit the generation of types.go if they don't need it.
   186  	echo 'package $(pkg)' > $(temp_outdir)/types.go
   187  	echo '' >> $(temp_outdir)/types.go
   188  	echo "type $(elem_type_alias) interface{}" >> $(temp_outdir)/types.go
   189  endif
   190  	gofmt -w -r 'elemArrayPool -> $(rename_type_prefix)ArrayPool' $(temp_outdir)/*.go
   191  	gofmt -w -r 'elemArr -> $(rename_type_prefix)Arr' $(temp_outdir)/*.go
   192  	gofmt -w -r 'elemArrPool -> $(rename_type_prefix)ArrPool' $(temp_outdir)/*.go
   193  	gofmt -w -r 'elemArrayPoolOpts -> $(rename_type_prefix)ArrayPoolOpts' $(temp_outdir)/*.go
   194  	gofmt -w -r 'elemFinalizeFn -> $(rename_type_prefix)FinalizeFn' $(temp_outdir)/*.go
   195  	gofmt -w -r 'newElemArrayPool -> $(rename_constructor)' $(temp_outdir)/*.go
   196  	gofmt -w -r 'defaultElemFinalizerFn -> default$(rename_type_middle)FinalizerFn' $(temp_outdir)/*.go
   197  
   198  	# best effort comment rename
   199  	sed -i'tmp' 's#^// elemArr#// $(rename_type_prefix)Arr#g' $(temp_outdir)/*.go
   200  	sed -i'tmp' 's#^// elemFinalizeFn#// $(rename_type_prefix)FinalizeFn#g' $(temp_outdir)/*.go
   201  	sed -i'tmp' 's#^// newElemArrayPool#// $(rename_constructor)#g' $(temp_outdir)/*.go
   202  	sed -i'tmp' 's#^// defaultElemFinalizerFn#// default$(rename_type_middle)FinalizerFn#g' $(temp_outdir)/*.go
   203  ifneq ($(rename_gen_types),)
   204  	rm $(temp_outdir)/types.go
   205  endif
   206  
   207  # NB(prateek): `target_package` should not have a trailing slash
   208  # generic leakcheckpool generation rule
   209  .PHONY: genny-leakcheckpool
   210  genny-leakcheckpool:
   211  	$(eval out_dir=$(gopath_prefix)/$(target_package))
   212  	cat $(m3x_package_path)/generics/leakcheckpool/pool.go | grep -v nolint | genny -pkg $(pkg) -ast gen "elemType=$(elem_type) elemTypePool=$(elem_type_pool)" > "$(out_dir)/$(out_file)"
   213  
   214  .PHONY: genny-pooled-elem-list-gen
   215  genny-pooled-elem-list-gen:
   216  	$(eval out_dir=$(gopath_prefix)/$(target_package))
   217  	cd $(m3x_package_path)/generics/list && cat ./list.go | grep -v nolint | genny -pkg $(pkg) -ast gen "ValueType=$(value_type)" > "$(out_dir)/list_gen.go"
   218  ifneq ($(rename_type_prefix),)
   219  	$(eval temp_outdir=$(out_dir)$(temp_suffix))
   220  	@if [ -d $(temp_outdir) ] ; then echo "temp directory $(temp_outdir) exists, failing" ; exit 1 ; fi
   221  	mkdir -p $(temp_outdir)
   222  	mv $(out_dir)/list_gen.go $(temp_outdir)/list_gen.go
   223  	make list-gen-rename out_dir=$(out_dir)
   224  	mv $(temp_outdir)/list_gen.go $(out_dir)/list_gen.go
   225  	rm -f $(temp_outdir)/*.gotmp
   226  	rmdir $(temp_outdir)
   227  endif
   228  
   229  elem_type_alias ?= $(elem_type)
   230  .PHONY: list-gen-rename
   231  list-gen-rename:
   232  	$(eval temp_outdir=$(out_dir)$(temp_suffix))
   233  ifneq ($(rename_gen_types),)
   234  	# Allow users to short circuit the generation of types.go if they don't need it.
   235  	echo 'package $(pkg)' > $(temp_outdir)/types.go
   236  	echo '' >> $(temp_outdir)/types.go
   237  	echo "type $(elem_type_alias) interface{}" >> $(temp_outdir)/types.go
   238  endif
   239  	gofmt -w -r 'Element -> $(rename_type_prefix)Element' $(temp_outdir)/*.go
   240  	gofmt -w -r 'List -> $(rename_type_prefix)List' $(temp_outdir)/*.go
   241  	gofmt -w -r 'ElementPool -> $(rename_type_prefix)ElementPool' $(temp_outdir)/*.go
   242  	gofmt -w -r 'newElementPool -> new$(rename_type_middle)ElementPool' $(temp_outdir)/*.go
   243  	gofmt -w -r 'newList -> new$(rename_type_middle)List' $(temp_outdir)/*.go
   244  	# best-effort comment fixup
   245  	sed -i'tmp' 's#^// Element#// $(rename_type_prefix)Element#g' $(temp_outdir)/*.go
   246  	sed -i'tmp' 's#^// List#// $(rename_type_prefix)List#g' $(temp_outdir)/*.go
   247  	sed -i'tmp' 's#^// ElementPool#// $(rename_type_prefix)ElementPool#g' $(temp_outdir)/*.go
   248  	sed -i'tmp' 's#^// newElementPool#// new$(rename_type_middle)ElementPool#g' $(temp_outdir)/*.go
   249  	sed -i'tmp' 's#^// newList#// new$(rename_type_middle)List#g' $(temp_outdir)/*.go
   250  ifneq ($(rename_gen_types),)
   251  	rm $(temp_outdir)/types.go
   252  endif