#!/usr/bin/python

import os
import stat

root = "/home/esp32/V3_1_prerelease/template/build"
addcomponents = open(root + "/addComponents.mk","wb");

def adjustDirs(value):
    value = value.replace("IDF_PATH","ESP_IDF_PATH");
    value = value.replace("BUILD_DIR_BASE","ESP_APP_TEMPLATE_PATH");
    value = value.strip();
    return value

def writeComponentLDFlags(value):
    tokens = value.split(" ");
    for token in tokens:
        if token.find("-l") == 0:
            addcomponents.write("LIBS += " + token.strip() + "\n");
        else:
            addcomponents.write("LDFLAGS += " + adjustDirs(token) + "\n");

def writeComponentIncludes(value):
    tokens = value.split(" ");
    for token in tokens:
        addcomponents.write("INCLUDE += -I" + adjustDirs(token) + "\n");
	
def writeComponentLinkerDeps(value):
    tokens = value.split(" ");
    for token in tokens:
        if token.endswith(".a"):
            addcomponents.write("LIBS += " + adjustDirs(token) + "\n");
        elif token.endswith(".ld"):
            addcomponents.write("LIBS += -T" + adjustDirs(token) + "\n");

def handleLine(line):
    token = line.split(" += ");
    if len(token[1]) > 2:
        if token[0] == "COMPONENT_LDFLAGS":
            writeComponentLDFlags(token[1]); 
        elif token[0] == "COMPONENT_INCLUDES":
            writeComponentIncludes(token[1]);
        elif token[0] == "COMPONENT_LINKER_DEPS":
            writeComponentLinkerDeps(token[1]);

def handleComponentMake(dir, file):
    text_file = open(os.path.join(dir,file),"r");
    lines = text_file.readlines();
    for line in lines:
        if line.find("+=") >=0:
            handleLine(line);
    return
	
dirs = os.listdir(root)

for subdir in sorted(dirs):
    dir = os.path.join(root,subdir);
    if os.path.isdir(dir):
        files = os.listdir(dir);
        for file in files:
            if file.endswith(".mk"):
                addcomponents.write("# component: " + subdir + "\n");
                handleComponentMake(dir,file);
addcomponents.close();
