CXX ?= g++
CC ?= gcc
FC := gfortran
NODEJS_ENABLED:=1
PYTHON_ENABLED:=0

LOCAL_DIR?=$(HOME)/local
NODE_PREFIX:=$(LOCAL_DIR)
VOWS?=./node_modules/vows/bin/vows
COFFEE?=./node_modules/coffee-script/bin/coffee
LOCAL_LIB_DIR?=$(LOCAL_DIR)/lib /usr/local/lib
LOCAL_INCLUDE_DIR?=$(LOCAL_DIR)/include

MACHINE_NAME:=$(shell uname -n)


-include local.mk
VIRTUALENV ?= $(LOCAL_DIR)/platform_virtualenv
PYTHON ?= $(VIRTUALENV)/bin/python
PIP ?= $(VIRTUALENV)/bin/pip

default: all
.PHONY: default

BUILD   ?= build
ARCH    ?= $(shell uname -m)
OBJ     := $(BUILD)/$(ARCH)/obj
GEN     := $(BUILD)/$(ARCH)/gen
BIN     ?= $(BUILD)/$(ARCH)/bin
TESTS   := $(BUILD)/$(ARCH)/tests
SRC     := .
TMP     ?= $(BUILD)/$(ARCH)/tmp
TEST_TMP := $(TESTS)

JML_BUILD := jml-build
JML_TOP := jml
INCLUDE := -I.

export JML_TOP
export BIN
export BUILD
export TEST_TMP
export TMP

include $(JML_BUILD)/arch/$(ARCH).mk

CXX_VERSION?=$(shell g++ --version | head -n1 | sed 's/.* //g')

CFLAGS += -fno-strict-overflow -msse4.2

ifeq ($(NODEJS_ENABLED), 1)
PKGINCLUDE_PACKAGES = sigc++-2.0 cairomm-1.0
else
PKGINCLUDE_PACKAGES = sigc++-2.0
endif

PKGCONFIG_INCLUDE:=$(shell pkg-config --cflags-only-I $(PKGINCLUDE_PACKAGES))


CXXFLAGS += -Wno-deprecated -Winit-self -fno-omit-frame-pointer -std=c++0x -fno-deduce-init-list -I$(NODE_PREFIX)/include/node -msse3 -Ileveldb/include -Wno-unused-but-set-variable -I$(LOCAL_INCLUDE_DIR) -I$(GEN) $(PKGCONFIG_INCLUDE) -Wno-psabi -D__GXX_EXPERIMENTAL_CXX0X__=1 -Wno-unused-local-typedefs -Wno-unused-variable -DNODEJS_ENABLED=$(NODEJS_ENABLED)
CXXLINKFLAGS += -Wl,--copy-dt-needed-entries -Wl,--no-as-needed -L/usr/local/lib
CFLAGS +=  -Wno-unused-but-set-variable

VALGRINDFLAGS := --suppressions=valgrind.supp --error-exitcode=1 --leak-check=full

$(if $(findstring x4.5,x$(CXX_VERSION)),$(eval CXXFLAGS += -Dnoexcept= -Dnullptr=NULL))

include $(JML_BUILD)/functions.mk
include $(JML_BUILD)/rules.mk
include $(JML_BUILD)/node.mk
include $(JML_BUILD)/python.mk
include $(JML_BUILD)/tcmalloc.mk

SUBDIRS := jml tinyxml2 googleurl leveldb soa rtbkit


PREMAKE := 1

$(eval $(call include_sub_makes,$(SUBDIRS)))


PREMAKE := 0

$(eval $(call include_sub_makes,$(SUBDIRS)))