github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/pingcap/tidb/Makefile (about)

     1  ### Makefile for tidb
     2  
     3  # Ensure GOPATH is set before running build process.
     4  ifeq "$(GOPATH)" ""
     5    $(error Please set the environment variable GOPATH before running `make`)
     6  endif
     7  
     8  path_to_add := $(addsuffix /bin,$(subst :,/bin:,$(GOPATH)))
     9  export PATH := $(path_to_add):$(PATH)
    10  
    11  # Check the version of make and set env varirables/commands accordingly.
    12  version_list := $(subst ., ,$(MAKE_VERSION))
    13  major_version := $(firstword $(version_list))
    14  old_versions := 0 1 2 3
    15  ifeq "$(major_version)" "$(filter $(major_version),$(old_versions))"
    16    # Old version of `make` installed. It fails to search golex/goyacc
    17    # by using the modified `PATH`, so we specify these commands with full path.
    18    GOLEX   = $$(which golex)
    19    GOYACC  = $$(which goyacc)
    20    GOLINT  = $$(which golint)
    21  else
    22    # After version 4, `make` could follow modified `PATH` to find
    23    # golex/goyacc correctly.
    24    GOLEX   := golex
    25    GOYACC  := goyacc
    26    GOLINT  := golint
    27  endif
    28  
    29  GO        := GO15VENDOREXPERIMENT="1" go
    30  ARCH      := "`uname -s`"
    31  LINUX     := "Linux"
    32  MAC       := "Darwin"
    33  PACKAGES  := $$(go list ./...| grep -vE 'vendor')
    34  
    35  LDFLAGS += -X "github.com/pingcap/tidb/util/printer.TiDBBuildTS=$(shell date -u '+%Y-%m-%d %I:%M:%S')"
    36  LDFLAGS += -X "github.com/pingcap/tidb/util/printer.TiDBGitHash=$(shell git rev-parse HEAD)"
    37  
    38  TARGET = ""
    39  
    40  .PHONY: all build install update parser clean todo test gotest interpreter server
    41  
    42  all: parser build test check
    43  
    44  build:
    45  	rm -rf vendor && ln -s _vendor/vendor vendor
    46  	$(GO) build
    47  	rm -rf vendor
    48  
    49  install:
    50  	rm -rf vendor && ln -s _vendor/vendor vendor
    51  	$(GO) install ./...
    52  	rm -rf vendor
    53  
    54  TEMP_FILE = temp_parser_file
    55  
    56  parser:
    57  	go get github.com/qiuyesuifeng/goyacc
    58  	go get github.com/qiuyesuifeng/golex
    59  	$(GOYACC) -o /dev/null -xegen $(TEMP_FILE) parser/parser.y
    60  	$(GOYACC) -o parser/parser.go -xe $(TEMP_FILE) parser/parser.y 2>&1 | egrep "(shift|reduce)/reduce" | awk '{print} END {if (NR > 0) {print "Find conflict in parser.y. Please check y.output for more information."; system("rm -f $(TEMP_FILE)"); exit 1;}}'
    61  	rm -f $(TEMP_FILE)
    62  	rm -f y.output
    63  
    64  	@if [ $(ARCH) = $(LINUX) ]; \
    65  	then \
    66  		sed -i -e 's|//line.*||' -e 's/yyEofCode/yyEOFCode/' parser/parser.go; \
    67  	elif [ $(ARCH) = $(MAC) ]; \
    68  	then \
    69  		/usr/bin/sed -i "" 's|//line.*||' parser/parser.go; \
    70  		/usr/bin/sed -i "" 's/yyEofCode/yyEOFCode/' parser/parser.go; \
    71  	fi
    72  
    73  	$(GOLEX) -o parser/scanner.go parser/scanner.l
    74  	@awk 'BEGIN{print "// Code generated by goyacc"} {print $0}' parser/parser.go > tmp_parser.go && mv tmp_parser.go parser/parser.go;
    75  	@awk 'BEGIN{print "// Code generated by goyacc"} {print $0}' parser/scanner.go > tmp_scanner.go && mv tmp_scanner.go parser/scanner.go;
    76  
    77  check:
    78  	bash gitcookie.sh
    79  	go get github.com/golang/lint/golint
    80  
    81  	@echo "vet"
    82  	@ go tool vet . 2>&1 | grep -vE 'vendor|parser/scanner.*unreachable code' | awk '{print} END{if(NR>0) {exit 1}}'
    83  	@echo "vet --shadow"
    84  	@ go tool vet --shadow . 2>&1 | grep -vE 'vendor|parser/parser.go|parser/scanner.go' | awk '{print} END{if(NR>0) {exit 1}}'
    85  	@echo "golint"
    86  	@ $(GOLINT) ./... 2>&1 | grep -vE 'vendor|LastInsertId|NewLexer|\.pb\.go' | awk '{print} END{if(NR>0) {exit 1}}'
    87  	@echo "gofmt (simplify)"
    88  	@ gofmt -s -l . 2>&1 | grep -vE 'vendor|parser/parser.go|parser/scanner.go' | awk '{print} END{if(NR>0) {exit 1}}'
    89  
    90  errcheck:
    91  	go get github.com/kisielk/errcheck
    92  	errcheck -blank $(PACKAGES)
    93  
    94  clean:
    95  	$(GO) clean -i ./...
    96  	rm -rf *.out
    97  
    98  todo:
    99  	@grep -n ^[[:space:]]*_[[:space:]]*=[[:space:]][[:alpha:]][[:alnum:]]* */*.go parser/scanner.l parser/parser.y || true
   100  	@grep -n TODO */*.go parser/scanner.l parser/parser.y || true
   101  	@grep -n BUG */*.go parser/scanner.l parser/parser.y || true
   102  	@grep -n println */*.go parser/scanner.l parser/parser.y || true
   103  
   104  test: gotest
   105  
   106  gotest:
   107  	rm -rf vendor && ln -s _vendor/vendor vendor
   108  	$(GO) test -cover $(PACKAGES)
   109  	rm -rf vendor
   110  
   111  race:
   112  	rm -rf vendor && ln -s _vendor/vendor vendor
   113  	$(GO) test --race -cover $(PACKAGES)
   114  	rm -rf vendor
   115  
   116  ddl_test:
   117  	rm -rf vendor && ln -s _vendor/vendor vendor
   118  	$(GO) test ./ddl/... -skip_ddl=false
   119  	rm -rf vendor
   120  
   121  ddl_race_test:
   122  	rm -rf vendor && ln -s _vendor/vendor vendor
   123  	$(GO) test --race ./ddl/... -skip_ddl=false
   124  	rm -rf vendor
   125  
   126  tikv_integration_test:
   127  	rm -rf vendor && ln -s _vendor/vendor vendor
   128  	$(GO) test ./store/tikv/. -with-tikv=true
   129  	rm -rf vendor
   130  
   131  interpreter:
   132  	rm -rf vendor && ln -s _vendor/vendor vendor
   133  	@cd interpreter && $(GO) build -ldflags '$(LDFLAGS)'
   134  	rm -rf vendor
   135  
   136  server:
   137  ifeq ($(TARGET), "")
   138  	rm -rf vendor && ln -s _vendor/vendor vendor
   139  	@cd tidb-server && $(GO) build -ldflags '$(LDFLAGS)'
   140  	rm -rf vendor
   141  else
   142  	rm -rf vendor && ln -s _vendor/vendor vendor
   143  	@cd tidb-server && $(GO) build -ldflags '$(LDFLAGS)' -o '$(TARGET)'
   144  	rm -rf vendor
   145  endif