cutego/internal/binding/parser/parser.go
therecipe 5746a84fb2 support for Qt 5.12
* use clang for android builds
* official windows builds are 64 bit now
2018-12-17 01:52:29 +01:00

124 lines
4.9 KiB
Go

package parser
import (
"encoding/xml"
"fmt"
"path/filepath"
"strings"
"sync"
"github.com/sirupsen/logrus"
"github.com/therecipe/qt/internal/utils"
)
var State = &struct {
ClassMap map[string]*Class
GoClassMap map[string]*Class
MocImports map[string]struct{}
Minimal bool //TODO:
Target string
}{
ClassMap: make(map[string]*Class),
GoClassMap: make(map[string]*Class),
MocImports: make(map[string]struct{}),
}
func LoadModules() {
libs := GetLibs()
modules := make([]*Module, len(libs))
modulesMutex := new(sync.Mutex)
wg := new(sync.WaitGroup)
wg.Add(len(GetLibs()))
for i, m := range libs {
go func(i int, m string) {
mod := LoadModule(m)
modulesMutex.Lock()
modules[i] = mod
modulesMutex.Unlock()
wg.Done()
}(i, m)
}
wg.Wait()
for _, m := range modules {
if m != nil {
m.Prepare()
}
}
}
func LoadModule(m string) *Module {
var (
logName = "parser.LoadModule"
logFields = logrus.Fields{"module": m}
)
utils.Log.WithFields(logFields).Debug(logName)
if m == "Sailfish" {
return sailfishModule()
}
if utils.QT_API_NUM(utils.QT_VERSION()) >= 5120 && m == "QuickControls2" {
m = "QuickControls"
}
module := new(Module)
var err error
switch {
case utils.QT_WEBKIT() && m == "WebKit":
err = xml.Unmarshal([]byte(utils.LoadOptional(filepath.Join(utils.MustGoPath(), "src", "github.com", "therecipe", "qt", "internal", "binding", "files", "docs", "5.8.0", fmt.Sprintf("qt%v.index", strings.ToLower(m))))), &module)
case utils.QT_MXE():
err = xml.Unmarshal([]byte(utils.LoadOptional(filepath.Join(utils.MustGoPath(), "src", "github.com", "therecipe", "qt", "internal", "binding", "files", "docs", utils.QT_API("5.12.0"), fmt.Sprintf("qt%v.index", strings.ToLower(m))))), &module)
case utils.QT_HOMEBREW():
err = xml.Unmarshal([]byte(utils.LoadOptional(filepath.Join(utils.MustGoPath(), "src", "github.com", "therecipe", "qt", "internal", "binding", "files", "docs", utils.QT_API("5.12.0"), fmt.Sprintf("qt%v.index", strings.ToLower(m))))), &module)
case utils.QT_MACPORTS(), utils.QT_NIX():
err = xml.Unmarshal([]byte(utils.LoadOptional(filepath.Join(utils.MustGoPath(), "src", "github.com", "therecipe", "qt", "internal", "binding", "files", "docs", utils.QT_API("5.11.1"), fmt.Sprintf("qt%v.index", strings.ToLower(m))))), &module)
case utils.QT_MSYS2():
err = xml.Unmarshal([]byte(utils.LoadOptional(filepath.Join(utils.MustGoPath(), "src", "github.com", "therecipe", "qt", "internal", "binding", "files", "docs", utils.QT_API("5.12.0"), fmt.Sprintf("qt%v.index", strings.ToLower(m))))), &module)
case utils.QT_UBPORTS_VERSION() == "xenial":
err = xml.Unmarshal([]byte(utils.LoadOptional(filepath.Join(utils.MustGoPath(), "src", "github.com", "therecipe", "qt", "internal", "binding", "files", "docs", utils.QT_API("5.9.0"), fmt.Sprintf("qt%v.index", strings.ToLower(m))))), &module)
case utils.QT_SAILFISH():
err = xml.Unmarshal([]byte(utils.LoadOptional(filepath.Join(utils.MustGoPath(), "src", "github.com", "therecipe", "qt", "internal", "binding", "files", "docs", utils.QT_API("5.6.3"), fmt.Sprintf("qt%v.index", strings.ToLower(m))))), &module)
case utils.QT_RPI():
err = xml.Unmarshal([]byte(utils.LoadOptional(filepath.Join(utils.MustGoPath(), "src", "github.com", "therecipe", "qt", "internal", "binding", "files", "docs", utils.QT_API("5.7.0"), fmt.Sprintf("qt%v.index", strings.ToLower(m))))), &module)
case utils.QT_PKG_CONFIG():
if utils.QT_API("") != "" {
err = xml.Unmarshal([]byte(utils.LoadOptional(filepath.Join(utils.MustGoPath(), "src", "github.com", "therecipe", "qt", "internal", "binding", "files", "docs", utils.QT_API(utils.QT_VERSION()), fmt.Sprintf("qt%v.index", strings.ToLower(m))))), &module)
} else {
err = xml.Unmarshal([]byte(utils.LoadOptional(filepath.Join(utils.QT_DOC_DIR(), fmt.Sprintf("qt%v", strings.ToLower(m)), fmt.Sprintf("qt%v.index", strings.ToLower(m))))), &module)
}
default:
if utils.QT_API("") != "" {
err = xml.Unmarshal([]byte(utils.LoadOptional(filepath.Join(utils.MustGoPath(), "src", "github.com", "therecipe", "qt", "internal", "binding", "files", "docs", utils.QT_API(utils.QT_VERSION()), fmt.Sprintf("qt%v.index", strings.ToLower(m))))), &module)
} else {
path := filepath.Join(utils.QT_DIR(), "Docs", fmt.Sprintf("Qt-%v", utils.QT_VERSION_MAJOR()), fmt.Sprintf("qt%v", strings.ToLower(m)), fmt.Sprintf("qt%v.index", strings.ToLower(m)))
if !utils.ExistsDir(filepath.Join(utils.QT_DIR(), "Docs", fmt.Sprintf("Qt-%v", utils.QT_VERSION_MAJOR()))) {
path = filepath.Join(utils.QT_DIR(), "Docs", fmt.Sprintf("Qt-%v", utils.QT_VERSION()), fmt.Sprintf("qt%v", strings.ToLower(m)), fmt.Sprintf("qt%v.index", strings.ToLower(m)))
}
err = xml.Unmarshal([]byte(utils.Load(path)), &module)
}
}
if err != nil {
if m != "DataVisualization" && m != "Charts" {
utils.Log.WithFields(logFields).WithError(err).Warn(logName)
} else {
utils.Log.WithFields(logFields).WithError(err).Debug(logName)
}
return nil
}
return module
}