include directive paths problem fix
This commit is contained in:
parent
428780009e
commit
f460bc7f1a
2 changed files with 49 additions and 5 deletions
|
@ -14,7 +14,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
u "tools/srcs/common"
|
u "tools/srcs/common"
|
||||||
|
|
||||||
"github.com/AlecAivazis/survey/v2"
|
"gopkg.in/AlecAivazis/survey.v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
// STATES
|
// STATES
|
||||||
|
@ -234,7 +234,7 @@ func RunBuildTool(homeDir string, data *u.Data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
var selectedFiles []string
|
var selectedFiles []string
|
||||||
if err := survey.AskOne(prompt, &selectedFiles); err != nil {
|
if err := survey.AskOne(prompt, &selectedFiles, nil); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -277,6 +277,7 @@ func RunBuildTool(homeDir string, data *u.Data) {
|
||||||
|
|
||||||
// Run make
|
// Run make
|
||||||
runMake(programName, appFolder)
|
runMake(programName, appFolder)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// retFolderCompat modifies its string argument in order to replace its underscore by a dash when
|
// retFolderCompat modifies its string argument in order to replace its underscore by a dash when
|
||||||
|
|
|
@ -12,6 +12,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
u "tools/srcs/common"
|
u "tools/srcs/common"
|
||||||
|
@ -175,6 +176,49 @@ func filterSourcesFiles(sourceFiles []string) []string {
|
||||||
return filterSrcFiles
|
return filterSrcFiles
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// conformIncDirAndCopyFile conforms all the include directives from a C/C++ source file so that no
|
||||||
|
// directive contains a path to a header file but the header file name only (i.e., the last element
|
||||||
|
// of the path). It also copies the content of the source file in the same way as CopyFileContents.
|
||||||
|
//
|
||||||
|
// It returns an error if any, otherwise it returns nil.
|
||||||
|
func conformIncDirAndCopyFile(sourcePath, destPath string) (err error) {
|
||||||
|
|
||||||
|
fileLines, err := u.ReadLinesFile(sourcePath)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find include directives using regexp
|
||||||
|
var re = regexp.MustCompile(`(.*)(#include)(.*)(<|")(.*)(>|")(.*)`)
|
||||||
|
|
||||||
|
for index := range fileLines {
|
||||||
|
for _, match := range re.FindAllStringSubmatch(fileLines[index], -1) {
|
||||||
|
|
||||||
|
// Only interested in include directives containing a path to a header file
|
||||||
|
if !strings.Contains(match[0], "/") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replace the path by its last element
|
||||||
|
for i := 1; i < len(match); i++ {
|
||||||
|
if match[i] == "<" || match[i] == "\"" {
|
||||||
|
match[i+1] = filepath.Base(match[i+1])
|
||||||
|
fileLines[index] = strings.Join(match[1:], "") + "\n"
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write the modified content to a file in the unikernel folder
|
||||||
|
err = u.WriteToFile(destPath, []byte(strings.Join(fileLines, "")))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func processSourceFiles(sourcesPath, appFolder, includeFolder string,
|
func processSourceFiles(sourcesPath, appFolder, includeFolder string,
|
||||||
sourceFiles, includesFiles []string) ([]string, error) {
|
sourceFiles, includesFiles []string) ([]string, error) {
|
||||||
|
|
||||||
|
@ -182,7 +226,6 @@ func processSourceFiles(sourcesPath, appFolder, includeFolder string,
|
||||||
err error) error {
|
err error) error {
|
||||||
|
|
||||||
if !info.IsDir() {
|
if !info.IsDir() {
|
||||||
|
|
||||||
extension := filepath.Ext(info.Name())
|
extension := filepath.Ext(info.Name())
|
||||||
if _, ok := srcLanguages[extension]; ok {
|
if _, ok := srcLanguages[extension]; ok {
|
||||||
// Add source files to sourceFiles list
|
// Add source files to sourceFiles list
|
||||||
|
@ -192,7 +235,7 @@ func processSourceFiles(sourcesPath, appFolder, includeFolder string,
|
||||||
srcLanguages[extension] += 1
|
srcLanguages[extension] += 1
|
||||||
|
|
||||||
// Copy source files to the appFolder
|
// Copy source files to the appFolder
|
||||||
if err = u.CopyFileContents(path, appFolder+info.Name()); err != nil {
|
if err = conformIncDirAndCopyFile(path, appFolder+info.Name()); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
} else if extension == ".h" || extension == ".hpp" || extension == ".hcc" {
|
} else if extension == ".h" || extension == ".hpp" || extension == ".hcc" {
|
||||||
|
@ -200,7 +243,7 @@ func processSourceFiles(sourcesPath, appFolder, includeFolder string,
|
||||||
includesFiles = append(includesFiles, info.Name())
|
includesFiles = append(includesFiles, info.Name())
|
||||||
|
|
||||||
// Copy header files to the INCLUDEFOLDER
|
// Copy header files to the INCLUDEFOLDER
|
||||||
if err = u.CopyFileContents(path, includeFolder+info.Name()); err != nil {
|
if err = conformIncDirAndCopyFile(path, includeFolder+info.Name()); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Add table
Reference in a new issue