aboutsummaryrefslogblamecommitdiffstats
path: root/lib/diameter/src/app/Makefile
blob: 8985ca491116a62f0f915a750069c45b9642bcd8 (plain) (tree)






































































































































































































                                                                                    
#
# %CopyrightBegin%
#
# Copyright Ericsson AB 2010-2011. All Rights Reserved.
#
# The contents of this file are subject to the Erlang Public License,
# Version 1.1, (the "License"); you may not use this file except in
# compliance with the License. You should have received a copy of the
# Erlang Public License along with this software. If not, it can be
# retrieved online at http://www.erlang.org/.
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
# the License for the specific language governing rights and limitations
# under the License.
#
# %CopyrightEnd%
#
#

ifneq ($(ERL_TOP),)
include $(ERL_TOP)/make/target.mk
EBIN = ../../ebin
include $(ERL_TOP)/make/$(TARGET)/otp.mk
else
include $(DIAMETER_TOP)/make/target.mk
EBIN = ../../ebin
include $(DIAMETER_TOP)/make/$(TARGET)/rules.mk
endif



# ----------------------------------------------------
# Application version
# ----------------------------------------------------

include ../../vsn.mk

VSN=$(DIAMETER_VSN)

# ----------------------------------------------------
# Release directory specification
# ----------------------------------------------------

RELSYSDIR = $(RELEASE_PATH)/lib/diameter-$(VSN)

INCDIR = ../../include

# ----------------------------------------------------
# Target Specs
# ----------------------------------------------------

include modules.mk

SPEC_ERL_FILES = \
	$(SPEC_FILES:%.dia=%.erl)

SPEC_HRL_FILES = \
	$(SPEC_FILES:%.dia=%.hrl)

APP_MODULES = \
	$(MODULES) \
	$(SPEC_FILES:%.dia=%)

TARGET_FILES = \
	$(APP_MODULES:%=$(EBIN)/%.$(EMULATOR)) \
	$(APP_TARGET) \
	$(APPUP_TARGET)

ESCRIPT_FILES = \
	../../bin/diameterc

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

APPUP_FILE   = diameter.appup
APPUP_SRC    = $(APPUP_FILE).src
APPUP_TARGET = $(EBIN)/$(APPUP_FILE)

# ----------------------------------------------------
# FLAGS
# ----------------------------------------------------

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

include diameter.mk

ERL_COMPILE_FLAGS += \
    $(DIAMETER_ERL_COMPILE_FLAGS) \
    -I$(INCDIR)

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

debug:
	@$(MAKE) TYPE=debug opt

opt: $(TARGET_FILES)

clean:
	rm -f $(TARGET_FILES) $(SPEC_ERL_FILES) $(SPEC_HRL_FILES)
	rm -f $(APP_TARGET) $(APPUP_TARGET)
	rm -f errs core *~ diameter_gen_*.forms diameter_gen_*.spec
	rm -f depend.mk

docs:

info:
	@echo ""
	@echo "SPEC_FILES = $(FILES)"
	@echo "MODULES    = $(MODULES)"
	@echo ""
	@echo "EXTERNAL_HRL_FILES = $(EXTERNAL_HRL_FILES)"
	@echo "INTERNAL_HRL_FILES = $(INTERNAL_HRL_FILES)"
	@echo ""
	@echo "EXAMPLE_FILES = $(EXAMPLE_FILES)"
	@echo ""

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

# Generate the app file and then modules into in. This shouldn't know
# about ../{compiler,transport} but good enough for now.
$(APP_TARGET): $(APP_SRC) \
               ../../vsn.mk \
               modules.mk \
               ../compiler/modules.mk \
               ../transport/modules.mk
	sed -e 's;%VSN%;$(VSN);' $< > $@
	M=`echo $(APP_MODULES) | sed -e 's/^ *//' -e 's/ *$$//' -e 'y/ /,/'`; \
	echo "/%APP_MODULES%/s//$$M/;w;q" | tr ';' '\n' \
	| ed -s $@
	$(MAKE) -C ../compiler  $(APP_TARGET) APP_TARGET=$(APP_TARGET)
	$(MAKE) -C ../transport $(APP_TARGET) APP_TARGET=$(APP_TARGET)

$(APPUP_TARGET): $(APPUP_SRC) ../../vsn.mk
	sed -e 's;%VSN%;$(VSN);' $< > $@

compiler:
	$(MAKE) -C ../$@

app: $(APP_TARGET) $(APPUP_TARGET)

# erl/hrl from application spec
diameter_gen_%.erl diameter_gen_%.hrl: diameter_gen_%.dia
	../../bin/diameterc -i $(EBIN) -o $(@D) $<


# ----------------------------------------------------
# Release Target
# ----------------------------------------------------

ifneq ($(ERL_TOP),)
include $(ERL_TOP)/make/otp_release_targets.mk
else
include $(DIAMETER_TOP)/make/release_targets.mk
endif

release_spec: opt
	$(INSTALL_DIR)  $(RELSYSDIR)/bin
	$(INSTALL_DIR)  $(RELSYSDIR)/ebin
	$(INSTALL_DIR)  $(RELSYSDIR)/src/app
	$(INSTALL_DIR)  $(RELSYSDIR)/include
	$(INSTALL_DIR)  $(RELSYSDIR)/examples
	$(INSTALL_SCRIPT) $(ESCRIPT_FILES) $(RELSYSDIR)/bin
	$(INSTALL_DATA) $(TARGET_FILES) $(RELSYSDIR)/ebin
	$(INSTALL_DATA) $(MODULES:%=%.erl) $(SPEC_ERL_FILES) $(RELSYSDIR)/src/app
	$(INSTALL_DATA) $(SPEC_FILES) $(RELSYSDIR)/src/app
	$(INSTALL_DATA) $(INTERNAL_HRL_FILES) $(RELSYSDIR)/src/app
	$(INSTALL_DATA) $(EXTERNAL_HRL_FILES) $(SPEC_HRL_FILES) $(RELSYSDIR)/include
	$(INSTALL_DATA) $(EXAMPLE_FILES) $(RELSYSDIR)/examples

release_docs_spec:

# ----------------------------------------------------
# Dependencies
# ----------------------------------------------------

depend: depend.mk

# Generate dependencies makefile. It's assumed that the compile target
# has already been made since it's currently not smart enough to not
# force a rebuild of those beams dependent on generated hrls, and this
# is a no-no at make release.
depend.mk: depend.sed $(MODULES:%=%.erl) modules.mk Makefile
	(for f in $(MODULES); do \
	     sed -f $< $$f.erl | sed "s@/@/$$f@"; \
	 done) \
	> $@

-include depend.mk

.PRECIOUS: $(SPEC_ERL_FILES) $(SPEC_HRL_FILES)
.PHONY: app clean debug depend info opt compiler release_spec release_docs_spec