#
# Simple make file to generate OpenFlow python files
#
# Fixme:  Would like pylibopenflow to be able to run remotely
# Currently, we have to cd to it's dir and refer back to local

TOP_DIR = ../..
TOOLS_DIR = ..
DOC_DIR = ${TOP_DIR}/doc
TESTS_DIR = ${TOP_DIR}/tests

PYLIBOF_DIR = ${TOOLS_DIR}/pylibopenflow

TARGET_DIR = ${TOP_DIR}/src/python/oftest

# Relative to pyopenflow-pythonize exec location
OF_HEADER = include/openflow.h

# Relative to here
ABS_OF_HEADER = ${PYLIBOF_DIR}/${OF_HEADER}

PYTHONIZE = bin/pyopenflow-pythonize.py
CSTRUCT_GEN_CMD = (cd ${PYLIBOF_DIR} && ${PYTHONIZE} -i ${OF_HEADER} \
	${TARGET_DIR}/cstruct.py)
CSTRUCT_AUX_INFO = ${TARGET_DIR}/class_maps.py

# Dependencies for cstruct.py
CSTRUCT_DEP = ${ABS_OF_HEADER} $(wildcard ${PYLIBOF_DIR}/pylib/*.py)
CSTRUCT_DEP += $(wildcard ${PYLIBOF_DIR}/pylib/of/*.py) 

# Generated and other files
GEN_FILES := $(addprefix ${TARGET_DIR}/,cstruct.py message.py error.py \
	action.py)
# class_maps is generated as a side effect of cstruct....
OTHER_FILES :=  $(addprefix ${TARGET_DIR}/,action_list.py parse.py \
	controller.py dataplane.py class_maps.py)
LINT_SOURCE := ${GEN_FILES} ${OTHER_FILES}
LINT_FILES := $(subst .py,.log,${LINT_SOURCE})
LINT_FILES := $(subst ${TARGET_DIR}/,lint/,${LINT_FILES})

all: ${GEN_FILES}

install: all

# The core OpenFlow libraries generated from openflow.h
${TARGET_DIR}/cstruct.py: ${CSTRUCT_DEP}
	${CSTRUCT_GEN_CMD} > ${CSTRUCT_AUX_INFO}

# General rule like src/message.py comes from scripts/message_gen.py
${TARGET_DIR}/%.py: scripts/%_gen.py ${TARGET_DIR}/cstruct.py
	python $< > $@

# The pylint files
lint/%.log: ${TARGET_DIR}/%.py
	mkdir -p lint
	(cd ${TARGET_DIR} && pylint -e $(notdir $<)) > $@

# Note that lint has issues with scapy syntax
lint: ${LINT_FILES}

${TESTS_DIR}/oft.py:
	ln -s oft $@

# For now. just local source doc generated
doc: ${GEN_FILES} ${OTHER_FILES} ${DOC_DIR}/Doxyfile ${TESTS_DIR}/oft.py
	(cd ${DOC_DIR} && doxygen)

clean:
	rm -rf ${GEN_FILES} ${LINT_FILES} ${DOC_DIR}/html/*

test: all
	(cd tests && python msg_test.py) > tests/msg_test.log

help:
	@echo
	@echo "Makefile for oftest source munger"
	@echo "    Default builds python files and installs in ${TARGET_DIR}"
	@echo "    make local:  Generate files and put in src/"
	@echo
	@echo "Targets:"
	@echo "   all:     Puts generated .py in ${TARGET_DIR}"
	@echo "   lint:    Puts error report in lint/*.log"
	@echo "   doc:     Runs doxygen on generated files in ../../doc"
	@echo "   clean:   Removes generated files"
	@echo
	@echo "Debug info:"
	@echo
	@echo "Files generated GEN_FILES:  ${GEN_FILES}"
	@echo
	@echo "Dependencies for cstruct.py CSTRUCT_DEP:  ${CSTRUCT_DEP}"
	@echo
	@echo "Already created files OTHER_FILES:  ${OTHER_FILES}"
	@echo
	@echo "LINT_FILES:  ${LINT_FILES}"


.PHONY: all local install help doc lint clean test
