.PHONY: all install clean

F_FRONT = F_Front
CC      = gcc
LIBXML2 = /usr/include/
CFLAGS  = -g -O2 -std=gnu99 -Wall -Wpointer-arith  -DNDEBUG -DBUGFIX -D__XCODEML__ -DYYDEBUG -I$(LIBXML2)/libxml2 -I../../include
LDFLAGS = -L/usr/lib -lxml2 -lm
MKDIR_P = install -m 755 -d
INSTALL = install
BINDIR  = /usr/local/bin
AWK     = mawk
XMODDIR = /usr/local/fincludes
INTRMOD = fincludes/iso_fortran_env.xmod fincludes/iso_c_binding.xmod

OBJECTS = F95-main.o C-expr-mem.o C-exprcode.o F-datatype.o F-ident.o \
	  F95-parser.o F-mem.o F-compile.o F-compile-decl.o F-compile-expr.o \
	  F-opt-expv.o F-output-xcodeml.o F-io-xcodeml.o F-data.o F-datasub.o \
	  F-equiv.o F-varutil.o F-intrinsic.o F-intrinsics-table.o F-OMP.o F-ACC.o F-XMP.o \
	  xcodeml-node.o xcodeml-parse.o xcodeml-util.o xcodeml-type.o \
	  xcodeml-traverse.o xcodeml-output-F.o F-dump.o F-type-attr-tbl.o \
	  module-manager.o hash.o F-input-xmod.o F-module-procedure.o F-second-pass.o
HEADERS = C-OMP.h C-ACC.h C-XMP.h C-expr.h C-exprcode.h F-datatype.h F-front.h F-ident.h \
	  F-input-xmod.h F-intrinsics-types.h F-module-procedure.h F-output-xcodeml.h \
	  F-second-pass.h hash.h module-manager.h xcodeml-module.h xcodeml-node.h xcodeml.h
CREATE_FILES = C-exprcode.h C-exprcode.c

FALSE       = 1
TRUE        = 0
IS_MOD2XMOD = 1
KIND_FORTRAN = gfortran
ifeq ($(IS_MOD2XMOD), $(TRUE))
ifeq ($(KIND_FORTRAN), gfortran)
    CFLAGS+=-D_FC_IS_GFORTRAN
endif
ifeq ($(KIND_FORTRAN), frtpx)
    CFLAGS+=-D_FC_IS_FRTPX
endif
endif

ENABLE_UCHARDET = no
UCHARDET_CFLAGS = -DENABLE_UCHARDET -I/usr/include/
UCHARDET_LDFLAGS = -L/usr/lib64 -luchardet
ifeq ($(ENABLE_UCHARDET), yes)
    CFLAGS+=$(UCHARDET_CFLAGS)
    LDFLAGS+=$(UCHARDET_LDFLAGS)
endif

all: $(F_FRONT) $(INTRMOD)

$(F_FRONT): $(OBJECTS) $(HEADERS)
	$(CC) $(CFLAGS) -o $@ $(OBJECTS) $(LDFLAGS)

F95-parser.o : F95-parser.y F95-lex.c

$(OBJECTS): $(HEADERS)

.c.o:
	$(CC) $(CFLAGS) $< -c

C-exprcode.h: C-exprcode.def C-exprcode.h.awk
	$(AWK) -f C-exprcode.h.awk < C-exprcode.def > C-exprcode.h

C-exprcode.c: C-exprcode.def C-exprcode.c.awk
	$(AWK) -f C-exprcode.c.awk < C-exprcode.def > C-exprcode.c

fincludes/iso_c_binding.xmod: fincludes/iso_c_binding.f90 $(F_FRONT)
	./$(F_FRONT) -module-compile $< > $@

fincludes/iso_fortran_env.xmod: fincludes/iso_fortran_env.f90 $(F_FRONT)
	./$(F_FRONT) -module-compile $< > $@

install: $(F_FRONT)
	$(MKDIR_P) $(DESTDIR)$(BINDIR)
	$(INSTALL) $(F_FRONT) $(DESTDIR)$(BINDIR)
	$(MKDIR_P) $(XMODDIR)
	$(INSTALL) $(INTRMOD) $(XMODDIR)

clean:
	rm -f *.o $(CREATE_FILES) $(F_FRONT)

