influxdb/Makefile.in

399 lines
12 KiB
Makefile

SHELL = /bin/bash
ifeq ($(TMPDIR),)
TMPDIR=/tmp
endif
export TMPDIR
PROTOC = @PROTOC@
GO = @GO@
GOFMT = @GOFMT@
GOROOT = @GOROOT@
AUTORECONF = @AUTORECONF@
LRT_LDFLAG = @LRT_LDFLAG@
# or 386, arm
arch = amd64
CGO_ENABLED = 1
ifneq ($(GOROOT),)
export GOROOT
endif
cflags =
ifeq ($(arch),386)
cflags = -m32
else
ifeq ($(arch),arm)
cflags = -fpic
endif
endif
ifneq ($(arch),)
GOARCH = $(arch)
endif
ifneq ($(CROSS_COMPILE),)
export CXX=$(CROSS_COMPILE)-g++
export CC=$(CROSS_COMPILE)-gcc
export AS=$(CROSS_COMPILE)-as
export AR=$(CROSS_COMPILE)-ar
export NM=$(CROSS_COMPILE)-nm
export LD=$(CROSS_COMPILE)-ld
export OBJDUMP=$(CROSS_COMPILE)-objdump
export OBJCOPY=$(CROSS_COMPILE)-objcopy
export RANLIB=$(CROSS_COMPILE)-ranlib
export STRIP=$(CROSS_COMPILE)-strip
export CXX_FOR_TARGET=$(CROSS_COMPILE)-g++
export CC_FOR_TARGET=$(CROSS_COMPILE)-gcc
GO_BUILD_OPTIONS += -ldflags="-extld=$(CC)"
cross_flags = --host=$(arch)
endif
export GOARCH
export CGO_ENABLED
.PHONY: all valgrind parser package replace_version_string build binary_package dependencies clean
all: | parser valgrind build test integration_test
parser:
$(MAKE) -C parser
root := $(shell pwd)/../../../..
ifeq ($(GOPATH),)
GOPATH := $(root)
export GOPATH
endif
uname_S = $(shell sh -c "uname -s 2>/dev/null || echo not")
valgrind:
ifeq ($(uname_S),Linux)
$(MAKE) -C parser valgrind
endif
# packages
packages_base = admin api/http api/graphite cluster common configuration \
checkers coordinator datastore engine parser protocol wal
build_packages = $(addprefix github.com/influxdb/influxdb/,$(packages_base))
test_packages =
ifneq ($(packages),)
test_packages = $(addprefix github.com/influxdb/influxdb/,$(packages))
else
test_packages = $(build_packages)
endif
# Storage engines libraries
# snappy variables
snappy_version = 1.1.0
snappy_dir = ${TMPDIR}/snappy.influxdb.$(arch)
snappy_file = snappy-$(snappy_version).tar.gz
snappy_deps = $(snappy_dir)/.libs/libsnappy.a
# leveldb variables
leveldb_version = 1.15.0
leveldb_dir = ${TMPDIR}/leveldb.influxdb.$(arch)
leveldb_file = leveldb-$(leveldb_version).tar.gz
leveldb_deps = $(leveldb_dir)/libleveldb.a
cpp_47 = $(shell g++ -dumpversion | gawk '{print $$1>=4.7?"1":"0"}')
rocksdb = yes
ifneq ($(cpp_47),1)
rocksdb = no
endif
ifeq ($(rocksdb),yes)
# rocksdb variables
rocksdb_version = d916593eadfa838001b2d2991ae182cf5f0ac01e
rocksdb_dir = ${TMPDIR}/rocksdb.influxdb.$(arch)
rocksdb_file = $(rocksdb_version).tar.gz
rocksdb_deps = $(rocksdb_dir)/librocksdb.a
endif
# hyperleveldb variables
hyperleveldb_version = v1.0.3
hyperleveldb_dir = ${TMPDIR}/hyperleveldb.influxdb.$(arch)
hyperleveldb_file = $(hyperleveldb_version).tar.gz
hyperleveldb_deps = $(hyperleveldb_dir)/.libs/libhyperleveldb.a
profile=off
ifneq ($(profile),off)
GO_BUILD_TAGS += profile
endif
# levigo flags
ifeq ($(uname_S),Linux)
storage_engines += $(hyperleveldb_deps)
GO_BUILD_TAGS += hyperleveldb
ifeq ($(rocksdb),yes)
GO_BUILD_TAGS += rocksdb
storage_engines += $(rocksdb_deps)
CGO_CFLAGS += -I$(rocksdb_dir)/include
CGO_LDFLAGS += -L$(rocksdb_dir) -lrocksdb $(LRT_LDFLAG)
endif
CGO_CFLAGS += -I$(leveldb_dir)/include -I$(hyperleveldb_dir)/include
CGO_LDFLAGS += -L$(leveldb_dir) -L$(hyperleveldb_dir)/.libs -L$(snappy_dir)/.libs -lleveldb -lhyperleveldb -lsnappy
CPPLIB = $(shell g++ $(cflags) --print-file-name=libstdc++.a)
CGO_LDFLAGS += -lm -lz -lbz2 $(CPPLIB)
export CGO_CFLAGS
export CGO_LDFLAGS
else
CGO_LDFLAGS += -lleveldb -lsnappy -lstdc++
export CGO_LDFLAGS
endif
ifneq ($(GO_BUILD_TAGS),)
GO_BUILD_OPTIONS += -tags '$(GO_BUILD_TAGS)'
endif
race = off
ifneq ($(race),off)
GO_BUILD_OPTIONS += -race
endif
ifneq ($(uname_S),Linux)
PYTHONPATH ?= /usr/local/lib/python2.7/site-packages/
export PYTHONPATH
endif
$(snappy_deps):
ifeq ($(uname_S),Linux)
rm -rf $(snappy_dir)
mkdir -p $(snappy_dir)
bash -c "cd $(snappy_dir); \
wget https://snappy.googlecode.com/files/$(snappy_file); \
tar --strip-components=1 -xvzf $(snappy_file); \
CFLAGS='$(cflags)' CXXFLAGS='$(cflags)' ./configure --enable-shared=no $(cross_flags); \
$(MAKE)"
endif
$(leveldb_deps): $(snappy_deps)
ifeq ($(uname_S),Linux)
rm -rf $(leveldb_dir)
mkdir -p $(leveldb_dir)
bash -c "cd $(leveldb_dir); \
wget https://leveldb.googlecode.com/files/$(leveldb_file); \
tar --strip-components=1 -xvzf $(leveldb_file); \
CFLAGS='-I$(snappy_dir) $(cflags)' CXXFLAGS='-I$(snappy_dir) $(cflags)' LDFLAGS='-L$(snappy_dir)/.libs' $(MAKE) libleveldb.a"
endif
$(rocksdb_deps): $(snappy_deps)
ifeq ($(uname_S),Linux)
rm -rf $(rocksdb_dir)
mkdir -p $(rocksdb_dir)
bash -c "cd $(rocksdb_dir); \
wget -O $(rocksdb_file) https://github.com/facebook/rocksdb/archive/$(rocksdb_file); \
tar --strip-components=1 -xvzf $(rocksdb_file); \
CFLAGS='-I$(snappy_dir) $(cflags)' CXXFLAGS='-I$(snappy_dir) $(cflags)' LDFLAGS='-L$(snappy_dir)/.libs $(LRT_LDFLAG)' $(MAKE) librocksdb.a"
endif
$(hyperleveldb_deps): $(snappy_deps)
ifeq ($(uname_S),Linux)
rm -rf $(hyperleveldb_dir)
mkdir -p $(hyperleveldb_dir)
bash -c "cd $(hyperleveldb_dir); \
wget https://github.com/influxdb/HyperLevelDB/archive/$(hyperleveldb_file) -O $(hyperleveldb_file); \
tar --strip-components=1 -xvzf $(hyperleveldb_file); \
$(AUTORECONF) -i; \
CXXFLAGS='-I$(snappy_dir) $(cflags)' CFLAGS='-I$(snappy_dir) $(cflags)' LDFLAGS='-L$(snappy_dir)/.libs' ./configure --enable-shared=no; \
$(MAKE) V=1"
endif
proto_dependency = code.google.com/p/goprotobuf/protoc-gen-go
dependencies = code.google.com/p/go.crypto/bcrypt \
code.google.com/p/goprotobuf/proto \
code.google.com/p/log4go \
github.com/bmizerany/pat \
github.com/fitstar/falcore \
github.com/fitstar/falcore/filter \
github.com/gorilla/mux \
github.com/influxdb/influxdb/_vendor/raft \
github.com/influxdb/go-cache \
github.com/BurntSushi/toml \
code.google.com/p/gogoprotobuf/proto \
github.com/influxdb/gomdb \
code.google.com/p/go.tools/cmd/vet \
github.com/jmhodges/levigo \
github.com/influxdb/rocksdb \
github.com/influxdb/hyperleveldb-go
dependencies_paths := $(addprefix $(root)/src/,$(dependencies))
$(dependencies_paths):
for i in $(dependencies); do $(GO) get -d $$i; done
storage_engines += $(leveldb_deps)
dependencies: $(storage_engines) $(dependencies_paths)
test_dependencies: dependencies
$(GO) get launchpad.net/gocheck
$(root)/bin/protoc-gen-go:
$(GO) get $(proto_dependency)
protobuf: $(root)/bin/protoc-gen-go
rm -f protocol/*.pb.go
PATH=$(root)/bin:$$PATH $(PROTOC) --go_out=. protocol/*.proto
build: | dependencies protobuf parser build_version_string
# TODO: build all packages, otherwise we won't know
# if there's an error
$(GO) build -o influxdb $(GO_BUILD_OPTIONS) github.com/influxdb/influxdb/daemon
$(GO) build -o benchmark-storage $(GO_BUILD_OPTIONS) github.com/influxdb/influxdb/tools/benchmark-storage
$(GO) build -o benchmark-tool github.com/influxdb/influxdb/tools/benchmark
clean:
git status --ignored | grep src\/ | grep -v Makefile | xargs rm -rf
rm -rf ${TMPDIR}/influxdb
rm -rf ${TMPDIR}/admin.influxdb
rm -rf $(snappy_dir)
rm -rf $(leveldb_dir)
rm -rf $(hyperleveldb_dir)
rm -rf $(rocksdb_dir)
$(MAKE) -C parser clean
only =
verbose = off
ifneq ($(only),)
GOTEST_OPTS = -gocheck.f '$(only)'
endif
ifneq ($(verbose),off)
GOTEST_OPTS += -v -gocheck.v -gocheck.vv
endif
version=
ifeq ($(version),)
version = "dev"
endif
timeout = 20m
GOTEST_OPTS += -test.timeout=$(timeout)
bench:
$(GO) test github.com/influxdb/influxdb/coordinator -test.bench=. -test.benchmem
test: test_dependencies parser protobuf
$(GO) test $(test_packages) $(GOTEST_OPTS)
coverage: test_dependencies
for i in $(build_packages); do $(GO) test -coverprofile ${TMPDIR}/influxdb.$${i/\//}.coverage $$i $(GOTEST_OPTS); \
$(GO) tool cover -html=${TMPDIR}/influxdb.$${i/\//}.coverage; done
integration_test: test_dependencies build
$(GO) test github.com/influxdb/influxdb/integration $(GOTEST_OPTS)
package_version=$(subst -,_,$(version))
admin_dir = ${TMPDIR}/admin.influxdb
source_package = packages/influxdb-$(version).src.tar.gz
binary_package = packages/influxdb-$(version).$(arch).tar.gz
ifeq ($(arch),386)
rpm_package = packages/influxdb-$(package_version)-1.i686.rpm
debian_package = packages/influxdb_$(version)_i686.deb
deb_args = -a i686
rpm_args = setarch i686
else ifeq ($(arch),arm)
rpm_package = packages/influxdb-$(package_version)-1.armel.rpm
debian_package = packages/influxdb_$(version)_armel.deb
else
rpm_package = packages/influxdb-$(package_version)-1.x86_64.rpm
debian_package = packages/influxdb_$(version)_amd64.deb
endif
files = $(binary_package) $(debian_package) $(rpm_package) $(source_package)
sha1 = $(shell sh -c "git rev-list --max-count=1 --abbrev-commit HEAD")
build_version_string:
@echo "package main" > daemon/version.go
@echo "const version = \"$(version)\"" >> daemon/version.go
@echo "const gitSha = \"$(sha1)\"" >> daemon/version.go
package_version_string: build_version_string
sed -i.bak -e "s/REPLACE_VERSION/$(version)/" scripts/post_install.sh
$(admin_dir)/build:
rm -rf $(admin_dir)
rvm 1.9.3 do rvm gemset create influxdb
git clone https://github.com/influxdb/influxdb-admin.git $(admin_dir)
rvm 1.9.3@influxdb do bash -c "pushd $(admin_dir); bundle install; middleman build; popd"
$(rpm_package): $(admin_dir)/build build
rm -rf out_rpm
mkdir -p out_rpm/opt/influxdb/versions/$(version)
cp -r build/* out_rpm/opt/influxdb/versions/$(version)
rvm 1.9.3@influxdb do bash -c "pushd out_rpm; $(rpm_args) fpm -s dir -t rpm --after-install ../scripts/post_install.sh -n influxdb -v $(version) .; popd"
mv out_rpm/$(shell basename $(rpm_package)) packages/
$(debian_package): $(admin_dir)/build build
rm -rf out_rpm
mkdir -p out_rpm/opt/influxdb/versions/$(version)
cp -r build/* out_rpm/opt/influxdb/versions/$(version)
rvm 1.9.3@influxdb do bash -c "pushd out_rpm; fpm -s dir -t deb $(deb_args) --after-install ../scripts/post_install.sh -n influxdb -v $(version) .; popd"
mv out_rpm/$(shell basename $(debian_package)) packages/
$(source_package): dependencies
rm -rf $(levigo_dependency)
$(GO) get -d $(levigo_dependency)
rm -f influxdb
rm -f benchmark-tool
git ls-files --others | egrep -v 'github|launchpad|code.google|version.go' > ${TMPDIR}/influxdb.ignored
echo "pkg/*" >> ${TMPDIR}/influxdb.ignored
echo "packages/*" >> ${TMPDIR}/influxdb.ignored
echo "build/*" >> ${TMPDIR}/influxdb.ignored
echo "out_rpm/*" >> ${TMPDIR}/influxdb.ignored
rm -rf admin-ui
cp -R $(admin_dir)/build admin-ui
tar -czf $(source_package) --exclude-vcs -X ${TMPDIR}/influxdb.ignored *
rm -rf ${TMPDIR}/influxdb
mkdir ${TMPDIR}/influxdb
tar -xzf $(source_package) -C ${TMPDIR}/influxdb
rm $(source_package)
bash -c "pushd ${TMPDIR}/; tar -czf `basename $(source_package)` influxdb; popd"
mv ${TMPDIR}/$(shell basename $(source_package)) $(source_package)
rm -rf $(levigo_dependency)
rm -rf admin-ui
$(binary_package): $(admin_dir)/build build packages
rm -rf build
mkdir build
mv influxdb build/
mv benchmark-tool build/influxdb-benchmark
cp tools/benchmark/benchmark_config.sample.toml build/benchmark_config.toml
mkdir build/admin
cp -R $(admin_dir)/build/* build/admin/
cp -R scripts/ build/
cp config.sample.toml build/config.toml
sed -i 's/.\/admin/\/opt\/influxdb\/current\/admin/g' build/config.toml
sed -i 's/influxdb.log/\/opt\/influxdb\/shared\/log.txt/g' build/config.toml
sed -i 's:${TMPDIR}/influxdb/development/db:/opt/influxdb/shared/data/db:g' build/config.toml
sed -i 's:${TMPDIR}/influxdb/development/raft:/opt/influxdb/shared/data/raft:g' build/config.toml
sed -i 's:${TMPDIR}/influxdb/development/wal:/opt/influxdb/shared/data/wal:g' build/config.toml
rm -f build/scripts/post_install.sh.bak
tar -czf $(binary_package) build/*
binary_package: $(binary_package)
packages:
mkdir $@
flymake:
for i in $(packages); do $(GO) build $$i; done
flymake_test:
for i in $(packages); do $(GO) test -c $$i; done
package: | packages build package_version_string $(files)
mv -f scripts/post_install.sh.bak scripts/post_install.sh
check:
./.hooks/pre-commit
vet:
git ls-files | grep '.go$$' | while read i; do $(GO) vet $$i 2>&1; done | grep -v exit\ status | grep -v pb.go | grep -v Error\ call
format:
git ls-files | grep '.go$$' | xargs $(GOFMT) -w -s