##############################################################################
# Copyright (c) 2000-2018 Ericsson Telecom AB
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v2.0
# which accompanies this distribution, and is available at
# https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
#
# Contributors:
#   Baji, Laszlo
#   Balasko, Jeno
#   Delic, Adam
#   Forstner, Matyas
#   Hanko, Matyas
#   Kovacs, Ferenc
#   Raduly, Csaba
#   Szabados, Kristof
#   Szabo, Bence Janos
#
##############################################################################
TOPDIR := ..
include   ../Makefile.regression

# WARNING! This Makefile can be used with GNU make only.
# Other versions of make may report syntax errors in it.

#
# Do NOT touch this line...
#
.PHONY: all archive check clean distclean dep objects

.SUFFIXES: .d

#
# Set these variables...
#


# Flags for the C++ preprocessor (and makedepend as well):
#CPPFLAGS := -I. $(CPPFLAGS)

# Flags for dependency generation
CXXDEPFLAGS = -MM

# Flags for the C++ compiler:
CXXFLAGS +=

# Flags for the linker:
LDFLAGS +=

ifeq ($(PLATFORM), WIN32)
# Silence linker warnings.
LDFLAGS += -Wl,--enable-auto-import,--enable-runtime-pseudo-reloc
endif

# Flags for the TTCN-3 and ASN.1 compiler:
COMPILER_FLAGS += -L $(RT2_FLAG)
# sort removes duplicates
COMPILER_FLAGS := $(sort $(COMPILER_FLAGS))

# Execution mode: (either ttcn3 or ttcn3-parallel)
TTCN3_LIB = ttcn3$(RT2_SUFFIX)$(DYNAMIC_SUFFIX)

#
# You may change these variables. Add your files if necessary...
#

# TTCN-3 modules of this project:
COMPILE_TIME_TTCN := $(wildcard $(ABS_SRC)/*_SW.ttcn)
RUN_TIME_TTCN     := $(wildcard $(ABS_SRC)/*_OK.ttcn)
# The naming convention is not exactly obvious; _SW stands for semantic warnings
# *_SW.ttcn are the compile-time tests which have lots (1000+) warnings of type
# "Control never reaches this code because of previous effective condition(s)"
#
# *_OK.ttcn are the runtime tests. Ideally, they would be warning-free :)
# But at least there should be no "Control never reaches ..." warnings.
TTCN3_MODULES := $(COMPILE_TIME_TTCN) $(RUN_TIME_TTCN)

# ASN.1 modules of this project:
ASN1_MODULES :=

# C++ source & header files generated by TTCN-3 & ASN.1 compilers:
GENERATED_SOURCES := $(notdir $(TTCN3_MODULES:.ttcn=.cc))
GENERATED_HEADERS := $(notdir $(TTCN3_MODULES:.ttcn=.hh))
ifdef CODE_SPLIT
GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc  _seqof.cc _setof.cc _union.cc))
else ifdef SPLIT_TO_SLICES
POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_))
POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc))
GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES)))
GENERATED_SOURCES += $(GENERATED_SOURCES2)
COMPILER_FLAGS += $(SPLIT_FLAG)
endif

# Source & header files of Test Ports and your other modules:
USER_SOURCES =
USER_HEADERS = $(USER_SOURCES:.cc=.hh)

# Object files of this project that are needed for the executable test suite:
OBJECTS = $(GENERATED_OBJECTS) $(USER_OBJECTS)

GENERATED_OBJECTS = $(GENERATED_SOURCES:.cc=.o)

USER_OBJECTS = $(USER_SOURCES:.cc=.o)

DEPFILES = $(USER_OBJECTS:.o=.d)  $(GENERATED_OBJECTS:.o=.d)

# Other files of the project (Makefile, configuration files, etc.)
# that will be added to the archived source files:
OTHER_FILES = Makefile

# The name of the executable test suite:
TARGET := PreDef$(EXESUFFIX)

#
# Rules for building the executable...
#
all: $(TARGET) ;

objects: $(OBJECTS) ;

$(TARGET): $(OBJECTS)
	$(CXX) $(LDFLAGS) -o $@ $^ \
	-L$(TTCN3_DIR)/lib -l$(TTCN3_LIB) \
	-L$(OPENSSL_DIR)/lib -lcrypto \
	-L$(XMLDIR)/lib $($(PLATFORM)_LIBS) \
	|| $(TTCN3_DIR)/bin/titanver $(OBJECTS)

.cc.o .c.o:
	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) -o $@ $<

.cc.d .c.d:
	@echo Creating dependency file for '$<'; set -e; \
	$(CXX) $(CXXDEPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $< \
	| sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' > $@; \
	[ -s $@ ] || rm -f $@

$(GENERATED_SOURCES) $(GENERATED_HEADERS): compile
	@if [ ! -f $@ ]; then $(RM) compile; $(MAKE) compile; fi

compile: $(TTCN3_MODULES) $(ASN1_MODULES)
	$(TOP_SRC)/../function_test/Semantic_Analyser/cw.pl $(COMPILER_FLAGS) $^ - $?
	touch $@

clean:
	-$(RM) $(TARGET) $(OBJECTS) $(GENERATED_HEADERS) \
	$(GENERATED_SOURCES) compile $(DEPFILES) \
	tags *.log

distclean: clean
	-$(RM) $(DEPFILES)

dep: $(GENERATED_SOURCES) $(USER_SOURCES) ;

ifeq ($(findstring n,$(MAKEFLAGS)),)
ifeq ($(filter clean distclean check compile archive diag,$(MAKECMDGOALS)),)
-include $(DEPFILES)
endif
endif


diag:
	$(TTCN3_DIR)/bin/compiler -v 2>&1
	$(TTCN3_DIR)/bin/mctr_cli -v 2>&1
	$(CXX) -v 2>&1
	@echo TTCN3_DIR=$(TTCN3_DIR)
	@echo OPENSSL_DIR=$(OPENSSL_DIR)
	@echo XMLDIR=$(XMLDIR)
	@echo PLATFORM=$(PLATFORM)

#
# Add your rules here if necessary...
#
run: $(TARGET) PreDef.cfg
	./$^


%.cc: %.ttcn
	mycompiler  $(COMPILER_FLAGS) $^

.PRECIOUS: %.cc
