# ----------------------------------------------------
# Copyright (C) 1997, Ericsson Telecommunications
# Author: Lars Thorsen
# ----------------------------------------------------

AUTOCONF := $(ERL_TOP)/erts/autoconf
TARGET := $(shell $(AUTOCONF)/config.guess)

#ifeq ($(TYPE),debug)
ERL_COMPILE_FLAGS += -W
#endif

include $(ERL_TOP)/internal_tools/make/$(TARGET)/otp.mk

# ----------------------------------------------------
# Application version
# ----------------------------------------------------
include ../vsn.mk
VSN=$(MNESIA_SESSION_VSN)

# ----------------------------------------------------
# Release directory specification
# ----------------------------------------------------
RELEASE_PATH= ../../release/$(TARGET)
RELSYSDIR = $(RELEASE_PATH)/lib/mnesia_session-$(VSN)

INCLUDE_DIR= ../include

# ----------------------------------------------------
# Target Specs
# ----------------------------------------------------
IDL_FILES = \
	mnesia_corba_session.idl \
	mnesia_session.idl

NORMAL_MODULES= \
	mnesia_connector_impl \
	mnesia_corba_connector_impl \
	mnesia_session_impl \
	mnesia_session_lib \
	mnesia_session_sup \
	mnesia_session_top_sup 

GEN_GS_MODULES = \
	mnesia_connector \
	mnesia_session \
	oe_mnesia_session

GEN_CORBA_MODULES =  \
	mnesia_CheckpointDef \
	mnesia_SystemInfo \
	mnesia_TableDef \
	mnesia_TableInfo \
	mnesia_corba_connector \
	mnesia_corba_session \
	oe_mnesia_corba_session 

GEN_MODULES= \
	$(GEN_GS_MODULES) \
	$(GEN_CORBA_MODULES) 

GEN_ERL_FILES = \
	$(GEN_MODULES:%=%.erl) 

MODULES = \
	$(GEN_MODULES) \
	$(NORMAL_MODULES) 

ERL_FILES= \
	$(MODULES:%=%.erl) 

NORMAL_HRL_FILES=

GEN_GS_HRL_FILES = \
	oe_mnesia_session.hrl \
	mnesia_session.hrl \
	mnesia_connector.hrl

GEN_CORBA_HRL_FILES = \
	oe_mnesia_corba_session.hrl \
	mnesia_corba_session.hrl \
	mnesia_corba_connector.hrl

GEN_CORBA_FILES = \
	$(GEN_CORBA_HRL_FILES) \
	$(GEN_CORBA_MODULES:%=%.erl) 

GEN_GS_FILES = \
	$(GEN_GS_HRL_FILES) \
	$(GEN_GS_MODULES:%=%.erl) 

GEN_HRL_FILES= \
	$(GEN_GS_HRL_FILES) \
	$(GEN_CORBA_HRL_FILES)

HRL_FILES= \
	$(NORMAL_HRL_FILES) \
	$(GEN_HRL_FILES)

NORMAL_TARGET_EBIN_FILES= \
	$(NORMAL_MODULES:%=$(EBIN)/%.$(EMULATOR))

TARGET_EBIN_FILES= \
	$(MODULES:%=$(EBIN)/%.$(EMULATOR)) \
	$(APP_TARGET)

APP_FILE= mnesia_session.app

APP_SRC= $(APP_FILE).src
APP_TARGET= $(EBIN)/$(APP_FILE)

# ----------------------------------------------------
# FLAGS
# ----------------------------------------------------
# Mnesia_session is included just to fool the code loader to find the
# include library used in include_lib(...)
ERL_FLAGS +=  \
		-pa $(ERL_TOP)/lib/mnesia_session/ebin \
		-pa $(ERL_TOP)/lib/orber/ebin \
		-I $(INCLUDE_DIR) \
		-I $(ERL_TOP)/lib/ic/include


ERL_COMPILE_FLAGS += \
	+'{parse_transform, sys_pre_attributes}' \
	+'{attribute, insert, vsn, "mnesia_session_$(MNESIA_SESSION_VSN)"}'

ERL_ROOTDIR:= $(shell grep '^ROOTDIR' `which erl` | sed 's/ROOTDIR=//')

IDL_COMPILE_FLAGS += \
	-I $(ERL_ROOTDIR)/usr/include 

# ----------------------------------------------------
# Targets
# ----------------------------------------------------

opt: $(TARGET_EBIN_FILES)

debug:
	@${MAKE} TYPE=debug

clean:
	rm -f $(TARGET_EBIN_FILES)
	rm -f $(GEN_CORBA_FILES)
	rm -f $(GEN_GS_FILES)
	rm -f $(INCLUDE_DIR)/mnesia.hrl
	rm -f core

docs:

$(EBIN)/mnesia_session_impl.$(EMULATOR): $(INCLUDE_DIR)/mnesia.hrl

$(GEN_CORBA_FILES) : mnesia_corba_session.idl 
	$(ERLC) $(ERL_FLAGS) $(IDL_COMPILE_FLAGS) \
	+'{preproc_cmd, "gcc -x c++ -E -D_CORBA_"}' \
	+'{{impl, "mnesia_corba_session"}, "mnesia_session_impl"}' \
	mnesia_corba_session.idl
	mv mnesia.hrl $(INCLUDE_DIR)

$(GEN_GS_FILES): mnesia_session.idl
	$(ERLC) $(ERL_FLAGS)  $(IDL_COMPILE_FLAGS) \
	+'{preproc_cmd, "gcc -x c++ -E"}' \
	+'{be, erl_genserv}' \
	mnesia_session.idl
	mv mnesia.hrl $(INCLUDE_DIR)

# ----------------------------------------------------
# Special Build Targets
# ----------------------------------------------------

$(APP_TARGET): $(APP_SRC)
	sed -e 's;%VSN%;$(VSN);' $(APP_SRC) > $(APP_TARGET)

# ----------------------------------------------------
# Release Target
# ---------------------------------------------------- 
include $(ERL_TOP)/internal_tools/make/otp_release_targets.mk

release_spec: opt
	$(INSTALL_DIR) $(RELSYSDIR)
	$(INSTALL_DIR) $(RELSYSDIR)/src
	$(INSTALL_DIR) $(RELSYSDIR)/ebin
	$(INSTALL_DIR) $(RELSYSDIR)/include
	$(INSTALL_DATA) $(ERL_FILES) $(RELSYSDIR)/src
	$(INSTALL_DATA) $(HRL_FILES) $(RELSYSDIR)/src
	$(INSTALL_DATA) $(TARGET_EBIN_FILES) $(RELSYSDIR)/ebin
	$(INSTALL_DATA) $(IDL_FILES) $(RELSYSDIR)/include
	$(INSTALL_DATA) $(INCLUDE_DIR)/mnesia.hrl $(RELSYSDIR)/include

release_docs_spec:

release_src_spec: opt
	$(INSTALL_DIR) $(RELSYSDIR)
	$(INSTALL_DIR) $(RELSYSDIR)/src
	$(INSTALL_DIR) $(RELSYSDIR)/ebin
	$(INSTALL_DIR) $(RELSYSDIR)/include
	$(INSTALL_DATA) $(ERL_FILES) $(RELSYSDIR)/src
	$(INSTALL_DATA) $(HRL_FILES) $(RELSYSDIR)/src
	$(INSTALL_DATA) $(IDL_FILES) $(RELSYSDIR)/include
	$(INSTALL_DATA) $(IDL_FILES) $(RELSYSDIR)/src
	$(INSTALL_DATA) $(INCLUDE_DIR)/mnesia.hrl $(RELSYSDIR)/include
	$(INSTALL_DATA) mnesia_session.app.src Makefile $(RELSYSDIR)/src
	$(INSTALL_DATA) ../Makefile ../vsn.mk $(RELSYSDIR)
