// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package main

// deps_generator.go implements the main function of the deps generator.
// The deps generator generates .d files. The syntax is that which is used to
// specify dependencies in makefiles.

import (
	"log"
	"os"
	"path"
	"path/filepath"

	"mojom/generators/common"
)

func main() {
	log.SetFlags(0)
	config := common.GetCliConfig(os.Args)
	common.GenerateOutput(WriteDepsFile, config)
}

// WriteDepsFile writes a .d file for the specified file.
func WriteDepsFile(fileName string, config common.GeneratorConfig) {
	writer := common.OutputWriterByFilePath(fileName, config, ".d")
	dFileName := fileName[:len(fileName)-len(filepath.Ext(fileName))] + ".d"
	writer.WriteString(path.Base(dFileName))
	writer.WriteString(" : ")

	imports := GetTransitiveClosure(fileName, config)
	for _, imported := range imports {
		writer.WriteString(imported)
		writer.WriteString(" ")
	}
	writer.WriteString("\n")
}

// GetTransitiveClosure gets the list of transitive imports starting with
// rootFile. rootFile itself is not included.
// The imports are specified as paths relative to the directory in which
// rootFile is found.
func GetTransitiveClosure(rootFile string, config common.GeneratorConfig) (result []string) {
	fileGraph := config.FileGraph()
	toVisit := []string{rootFile}
	rootFileDir := path.Dir(rootFile)

	for len(toVisit) > 0 {
		curFileName := toVisit[len(toVisit)-1]
		toVisit = toVisit[1:len(toVisit)]

		curFile := fileGraph.Files[curFileName]
		rel, err := filepath.Rel(rootFileDir, curFileName)
		if err != nil {
			log.Fatalln(err.Error())
		}
		result = append(result, rel)

		if curFile.Imports != nil {
			for _, importFileName := range *curFile.Imports {
				toVisit = append(toVisit, importFileName)
			}
		}
	}
	return
}
