diff --git a/androidextras/androidextras_android.cpp b/androidextras/androidextras_android.cpp index a11f15aaf..f205540b2 100755 --- a/androidextras/androidextras_android.cpp +++ b/androidextras/androidextras_android.cpp @@ -1,4 +1,4 @@ - +// +build android #define protected public #define private public diff --git a/androidextras/androidextras_android.go b/androidextras/androidextras_android.go index 61d041a5c..c2f32fd21 100755 --- a/androidextras/androidextras_android.go +++ b/androidextras/androidextras_android.go @@ -1,3 +1,5 @@ +// +build android + package androidextras //#include "androidextras_android.h" diff --git a/androidextras/androidextras_android.h b/androidextras/androidextras_android.h index 7c0af9744..698b04ddf 100755 --- a/androidextras/androidextras_android.h +++ b/androidextras/androidextras_android.h @@ -1,4 +1,4 @@ - +// +build android #pragma once diff --git a/internal/binding/parser/class.go b/internal/binding/parser/class.go index 391fda38c..92d8e317a 100755 --- a/internal/binding/parser/class.go +++ b/internal/binding/parser/class.go @@ -311,7 +311,7 @@ func (c *Class) fixBases() { } } - if !found { + if !found && c.Name != "SailfishApp" { fmt.Println("HEADER FILE NOT FOUND:", c.Name, c.Module) } @@ -439,6 +439,11 @@ var LibDeps = map[string][]string{ "DataVisualization": []string{"Core", "Gui"}, "Charts": []string{"Core", "Gui", "Widgets"}, "Quick2DRenderer": []string{"Core"}, + + "Sailfish": []string{"Core"}, + + MOC: make([]string, 0), + "build_ios": []string{"Core", "Gui", "Network", "Sql", "Xml", "DBus", "Nfc", "Script", "Sensors", "Positioning", "Widgets", "Qml", "WebSockets", "XmlPatterns", "Bluetooth", "WebChannel", "Svg", "Multimedia", "Quick", "Help", "Location", "ScriptTools", "MultimediaWidgets", "UiTools", "PrintSupport"}, } func (c *Class) hasFunctionWithName(name string) bool { diff --git a/internal/binding/parser/module.go b/internal/binding/parser/module.go index 95946a8b2..1d0b0ff42 100755 --- a/internal/binding/parser/module.go +++ b/internal/binding/parser/module.go @@ -79,3 +79,76 @@ func (m *Module) removeClasses() { } } } + +func sailfishModule() *Module { + //TODO: should be in Namespace.Functions + return &Module{Project: "QtSailfish", Namespace: &Namespace{Classes: []*Class{&Class{ + Name: "SailfishApp", + Access: "public", + Module: "QtSailfish", + Functions: []*Function{ + &Function{ + Name: "application", + Fullname: "SailfishApp::application", + Access: "public", + Virtual: "non", + Meta: PLAIN, + Static: true, + Output: "QGuiApplication*", + Signature: "()", + Parameters: []*Parameter{ + &Parameter{ + Name: "argc", + Value: "int &", + }, + &Parameter{ + Name: "argv", + Value: "char **", + }, + }}, + &Function{ + Name: "main", + Fullname: "SailfishApp::main", + Access: "public", + Virtual: "non", + Meta: PLAIN, + Static: true, + Output: "int", + Signature: "()", + Parameters: []*Parameter{ + &Parameter{ + Name: "argc", + Value: "int &", + }, + &Parameter{ + Name: "argv", + Value: "char **", + }, + }}, + &Function{ + Name: "createView", + Fullname: "SailfishApp::createView", + Access: "public", + Virtual: "non", + Meta: PLAIN, + Static: true, + Output: "QQuickView*", + Signature: "()", + }, + &Function{ + Name: "pathTo", + Fullname: "SailfishApp::pathTo", + Access: "public", + Virtual: "non", + Meta: PLAIN, + Static: true, + Output: "QUrl", + Signature: "pathTo(const QString &filename)", + Parameters: []*Parameter{ + &Parameter{ + Name: "filename", + Value: "QString &", + }, + }}, + }}}}} +} diff --git a/internal/binding/parser/parser.go b/internal/binding/parser/parser.go index c8deb77b2..d28824268 100755 --- a/internal/binding/parser/parser.go +++ b/internal/binding/parser/parser.go @@ -39,6 +39,12 @@ var ( func GetModule(s string) *Module { + if s == "sailfish" { + var m = sailfishModule() + m.Prepare() + return m + } + var m = new(Module) switch runtime.GOOS { diff --git a/internal/binding/templater/cgo.go b/internal/binding/templater/cgo.go index 8c26012e9..6b90b1eaa 100755 --- a/internal/binding/templater/cgo.go +++ b/internal/binding/templater/cgo.go @@ -21,7 +21,7 @@ func CopyCgo(module string) { return } - if !strings.Contains(module, "droid") { + if !(strings.Contains(module, "droid") || strings.Contains(module, "fish")) { cgoDarwin(module) cgoWindows(module) cgoLinux(module) @@ -32,15 +32,21 @@ func CopyCgo(module string) { } } - switch runtime.GOOS { - case "darwin", "linux": - { - cgoAndroidOnDarwinAndLinux(module) - } + if strings.Contains(module, "fish") { + cgoSailfish(module) + } - case "windows": - { - cgoAndroidOnWindows(module) + if !strings.Contains(module, "fish") { + switch runtime.GOOS { + case "darwin", "linux": + { + cgoAndroidOnDarwinAndLinux(module) + } + + case "windows": + { + cgoAndroidOnWindows(module) + } } } } diff --git a/internal/binding/templater/function_cpp.go b/internal/binding/templater/function_cpp.go index f506d1db0..5666b9b7f 100755 --- a/internal/binding/templater/function_cpp.go +++ b/internal/binding/templater/function_cpp.go @@ -280,6 +280,21 @@ func cppFunctionBody(function *parser.Function) string { case parser.PLAIN, parser.DESTRUCTOR: { + if function.Fullname == "SailfishApp::application" || function.Fullname == "SailfishApp::main" { + return fmt.Sprintf(` QList aList = QByteArray(argv).split('|'); + char *argvs[argc]; + static int argcs = argc; + for (int i = 0; i < argc; i++) + argvs[i] = aList[i].data(); + + return %v(%v);`, + + function.Fullname, + + converter.CppInputParameters(function), + ) + } + return fmt.Sprintf("\t%v%v;", func() string { diff --git a/internal/binding/templater/helper.go b/internal/binding/templater/helper.go index 4083b8a0c..5806c7677 100755 --- a/internal/binding/templater/helper.go +++ b/internal/binding/templater/helper.go @@ -216,6 +216,7 @@ var Build = map[string]bool{ "DataVisualization": false, "Charts": false, "Quick2DRenderer": false, + "Sailfish": false, } var Libs = []string{ @@ -262,6 +263,8 @@ var Libs = []string{ //"DataVisualization", //GPLv3 //"Charts", //GPLv3 //"Quick2DRenderer", //GPLv3 + + "Sailfish", } func GetLibs() []string { @@ -325,6 +328,8 @@ var LibDeps = map[string][]string{ "Charts": []string{"Core", "Gui", "Widgets"}, "Quick2DRenderer": []string{"Core"}, + "Sailfish": []string{"Core"}, + parser.MOC: make([]string, 0), "build_ios": []string{"Core", "Gui", "Network", "Sql", "Xml", "DBus", "Nfc", "Script", "Sensors", "Positioning", "Widgets", "Qml", "WebSockets", "XmlPatterns", "Bluetooth", "WebChannel", "Svg", "Multimedia", "Quick", "Help", "Location", "ScriptTools", "MultimediaWidgets", "UiTools", "PrintSupport"}, } diff --git a/internal/binding/templater/template_cpp.go b/internal/binding/templater/template_cpp.go index 4c203305b..7106ebbf0 100755 --- a/internal/binding/templater/template_cpp.go +++ b/internal/binding/templater/template_cpp.go @@ -315,11 +315,21 @@ func preambleCpp(module string, input []byte) []byte { return "// +build minimal" } - case module == parser.MOC, module == "QtAndroidExtras": + case module == parser.MOC: { return "" } + case module == "QtAndroidExtras": + { + return "// +build android" + } + + case module == "QtSailfish": + { + return "// +build sailfish" + } + default: { return "// +build !minimal" @@ -339,6 +349,11 @@ func preambleCpp(module string, input []byte) []byte { return fmt.Sprintf("%v_android", shortModule(module)) } + case "QtSailfish": + { + return fmt.Sprintf("%v_sailfish", shortModule(module)) + } + default: { return shortModule(module) @@ -356,7 +371,11 @@ func preambleCpp(module string, input []byte) []byte { sort.Stable(sort.StringSlice(classes)) for _, class := range classes { - fmt.Fprintf(bb, "#include <%v>\n", class) + if class == "SailfishApp" { + fmt.Fprintln(bb, "#include ") + } else { + fmt.Fprintf(bb, "#include <%v>\n", class) + } } fmt.Fprint(bb, "\n") diff --git a/internal/binding/templater/template_go.go b/internal/binding/templater/template_go.go index e4ca23d89..7d1e131ce 100755 --- a/internal/binding/templater/template_go.go +++ b/internal/binding/templater/template_go.go @@ -292,7 +292,10 @@ import ( switch { case stub: { - return "// +build !android" + if module == "androidextras" { + return "// +build !android" + } + return "// +build !sailfish" } case Minimal: @@ -300,11 +303,21 @@ import ( return "// +build minimal" } - case module == parser.MOC, module == "androidextras": + case module == parser.MOC: { return "" } + case module == "androidextras": + { + return "// +build android" + } + + case module == "sailfish": + { + return "// +build sailfish" + } + default: { return "// +build !minimal" @@ -335,6 +348,11 @@ import ( return fmt.Sprintf("%v_android", module) } + case "sailfish": + { + return fmt.Sprintf("%v_sailfish", module) + } + default: { return module diff --git a/internal/binding/templater/template_h.go b/internal/binding/templater/template_h.go index 372608a42..26f386d07 100755 --- a/internal/binding/templater/template_h.go +++ b/internal/binding/templater/template_h.go @@ -32,11 +32,21 @@ extern "C" { return "// +build minimal" } - case module == parser.MOC, module == "QtAndroidExtras": + case module == parser.MOC: { return "" } + case module == "QtAndroidExtras": + { + return "// +build android" + } + + case module == "QtSailfish": + { + return "// +build sailfish" + } + default: { return "// +build !minimal" diff --git a/internal/binding/templater/templater.go b/internal/binding/templater/templater.go index 34d1e5697..f0c8c3496 100755 --- a/internal/binding/templater/templater.go +++ b/internal/binding/templater/templater.go @@ -20,6 +20,9 @@ func GenModule(name string) { if name == "AndroidExtras" { suffix = "_android" } + if name == "Sailfish" { + suffix = "_sailfish" + } //cleanup if !Minimal { @@ -46,7 +49,7 @@ func GenModule(name string) { //generate if Minimal { - if name != "AndroidExtras" { + if !(name == "AndroidExtras" || name == "Sailfish") { utils.SaveBytes(utils.GetQtPkgPath(pkgName, pkgName+"-minimal"+suffix+".cpp"), CppTemplate("Qt"+name)) utils.SaveBytes(utils.GetQtPkgPath(pkgName, pkgName+"-minimal"+suffix+".h"), HTemplate("Qt"+name)) } @@ -55,18 +58,15 @@ func GenModule(name string) { utils.SaveBytes(utils.GetQtPkgPath(pkgName, pkgName+suffix+".h"), HTemplate("Qt"+name)) } - if name == "AndroidExtras" { - if !Minimal { - utils.SaveBytes(utils.GetQtPkgPath(pkgName, pkgName+suffix+".go"), GoTemplate("Qt"+name, false)) - } - } - if Minimal { - if name != "AndroidExtras" { - utils.SaveBytes(utils.GetQtPkgPath(pkgName, pkgName+"-minimal.go"), GoTemplate("Qt"+name, name == "AndroidExtras")) + if !(name == "AndroidExtras" || name == "Sailfish") { + utils.SaveBytes(utils.GetQtPkgPath(pkgName, pkgName+"-minimal.go"), GoTemplate("Qt"+name, false)) } } else { - utils.SaveBytes(utils.GetQtPkgPath(pkgName, pkgName+".go"), GoTemplate("Qt"+name, name == "AndroidExtras")) + if name == "AndroidExtras" || name == "Sailfish" { + utils.SaveBytes(utils.GetQtPkgPath(pkgName, pkgName+suffix+".go"), GoTemplate("Qt"+name, false)) + } + utils.SaveBytes(utils.GetQtPkgPath(pkgName, pkgName+".go"), GoTemplate("Qt"+name, name == "AndroidExtras" || name == "Sailfish")) } } } diff --git a/internal/deploy/deploy.go b/internal/deploy/deploy.go index 550bb32f4..899e18bfb 100755 --- a/internal/deploy/deploy.go +++ b/internal/deploy/deploy.go @@ -444,7 +444,7 @@ func build() { sshCommand("2222", "root", "ln", "-s", "/opt/cross/bin/i486-meego-linux-gnu-as", "/opt/cross/libexec/gcc/i486-meego-linux-gnu/4.8.3/as") sshCommand("2222", "root", "ln", "-s", "/opt/cross/bin/i486-meego-linux-gnu-ld", "/opt/cross/libexec/gcc/i486-meego-linux-gnu/4.8.3/ld") - var errBuild = sshCommand("2222", "root", "cd", strings.Replace(strings.Replace(appPath, os.Getenv("GOPATH"), "/media/sf_GOPATH", -1), "\\", "/", -1), "&&", "GOROOT=/media/sf_GOROOT", "GOPATH=/media/sf_GOPATH", "PATH=$PATH:$GOROOT/bin/linux_386", "GOOS=linux", "GOARCH=386", "CGO_ENABLED=1", "CC=/opt/cross/bin/i486-meego-linux-gnu-gcc", "CXX=/opt/cross/bin/i486-meego-linux-gnu-g++", "CPATH=/srv/mer/targets/SailfishOS-i486/usr/include", "LIBRARY_PATH=/srv/mer/targets/SailfishOS-i486/usr/lib:/srv/mer/targets/SailfishOS-i486/lib", "CGO_LDFLAGS=--sysroot=/srv/mer/targets/SailfishOS-i486/", "go", "build", "-ldflags=\"-s -w\"", "-tags=minimal", "-o", "deploy/"+buildTarget+"_minimal/harbour-"+appName) + var errBuild = sshCommand("2222", "root", "cd", strings.Replace(strings.Replace(appPath, os.Getenv("GOPATH"), "/media/sf_GOPATH", -1), "\\", "/", -1), "&&", "GOROOT=/media/sf_GOROOT", "GOPATH=/media/sf_GOPATH", "PATH=$PATH:$GOROOT/bin/linux_386", "GOOS=linux", "GOARCH=386", "CGO_ENABLED=1", "CC=/opt/cross/bin/i486-meego-linux-gnu-gcc", "CXX=/opt/cross/bin/i486-meego-linux-gnu-g++", "CPATH=/srv/mer/targets/SailfishOS-i486/usr/include", "LIBRARY_PATH=/srv/mer/targets/SailfishOS-i486/usr/lib:/srv/mer/targets/SailfishOS-i486/lib", "CGO_LDFLAGS=--sysroot=/srv/mer/targets/SailfishOS-i486/", "go", "build", "-ldflags=\"-s -w\"", "-tags=\"minimal sailfish\"", "-o", "deploy/"+buildTarget+"_minimal/harbour-"+appName) if errBuild != nil { fmt.Println("build.Sailfish", errBuild) cleanup() @@ -455,7 +455,7 @@ func build() { sshCommand("2222", "root", "ln", "-s", "/opt/cross/bin/armv7hl-meego-linux-gnueabi-as", "/opt/cross/libexec/gcc/armv7hl-meego-linux-gnueabi/4.8.3/as") sshCommand("2222", "root", "ln", "-s", "/opt/cross/bin/armv7hl-meego-linux-gnueabi-ld", "/opt/cross/libexec/gcc/armv7hl-meego-linux-gnueabi/4.8.3/ld") - var errBuild = sshCommand("2222", "root", "cd", strings.Replace(strings.Replace(appPath, os.Getenv("GOPATH"), "/media/sf_GOPATH", -1), "\\", "/", -1), "&&", "GOROOT=/media/sf_GOROOT", "GOPATH=/media/sf_GOPATH", "PATH=$PATH:$GOROOT/bin/linux_386", "GOOS=linux", "GOARCH=arm", "GOARM=7", "CGO_ENABLED=1", "CC=/opt/cross/bin/armv7hl-meego-linux-gnueabi-gcc", "CXX=/opt/cross/bin/armv7hl-meego-linux-gnueabi-g++", "CPATH=/srv/mer/targets/SailfishOS-armv7hl/usr/include", "LIBRARY_PATH=/srv/mer/targets/SailfishOS-armv7hl/usr/lib:/srv/mer/targets/SailfishOS-armv7hl/lib", "CGO_LDFLAGS=--sysroot=/srv/mer/targets/SailfishOS-armv7hl/", "go", "build", "-ldflags=\"-s -w\"", "-tags=minimal", "-o", "deploy/"+buildTarget+"_minimal/harbour-"+appName) + var errBuild = sshCommand("2222", "root", "cd", strings.Replace(strings.Replace(appPath, os.Getenv("GOPATH"), "/media/sf_GOPATH", -1), "\\", "/", -1), "&&", "GOROOT=/media/sf_GOROOT", "GOPATH=/media/sf_GOPATH", "PATH=$PATH:$GOROOT/bin/linux_386", "GOOS=linux", "GOARCH=arm", "GOARM=7", "CGO_ENABLED=1", "CC=/opt/cross/bin/armv7hl-meego-linux-gnueabi-gcc", "CXX=/opt/cross/bin/armv7hl-meego-linux-gnueabi-g++", "CPATH=/srv/mer/targets/SailfishOS-armv7hl/usr/include", "LIBRARY_PATH=/srv/mer/targets/SailfishOS-armv7hl/usr/lib:/srv/mer/targets/SailfishOS-armv7hl/lib", "CGO_LDFLAGS=--sysroot=/srv/mer/targets/SailfishOS-armv7hl/", "go", "build", "-ldflags=\"-s -w\"", "-tags=\"minimal sailfish\"", "-o", "deploy/"+buildTarget+"_minimal/harbour-"+appName) if errBuild != nil { fmt.Println("build.Sailfish", errBuild) cleanup() diff --git a/internal/examples/quick/sailfish/sailfish.go b/internal/examples/quick/sailfish/sailfish.go index 1455d7171..6f52930ee 100755 --- a/internal/examples/quick/sailfish/sailfish.go +++ b/internal/examples/quick/sailfish/sailfish.go @@ -6,13 +6,14 @@ import ( "github.com/therecipe/qt/core" "github.com/therecipe/qt/gui" "github.com/therecipe/qt/quick" + "github.com/therecipe/qt/sailfish" ) func main() { - gui.NewQGuiApplication(len(os.Args), os.Args) + sailfish.SailfishApp_Application(len(os.Args), os.Args) //gui.NewQGuiApplication(len(os.Args), os.Args) - var view = quick.NewQQuickView(nil) + var view = sailfish.SailfishApp_CreateView() //quick.NewQQuickView(nil) view.SetSource(core.NewQUrl3("qrc:///qml/sailfish.qml", 0)) view.SetResizeMode(quick.QQuickView__SizeRootObjectToView) view.Show() diff --git a/internal/setup/test.go b/internal/setup/test.go index 4bbc5a2bc..6fc44b03e 100755 --- a/internal/setup/test.go +++ b/internal/setup/test.go @@ -42,6 +42,7 @@ func main() { filepath.Join("uitools", "calculator")} { if (buildTarget == "sailfish" || buildTarget == "sailfish-emulator") && (!strings.Contains(example, "quick") || (example == filepath.Join("quick", "bridge") || example == filepath.Join("quick", "dialog"))) { + } else if !(buildTarget == "sailfish" || buildTarget == "sailfish-emulator") && example == filepath.Join("quick", "sailfish") { } else { var before = time.Now() diff --git a/sailfish/cgo_linux_386.go b/sailfish/cgo_linux_386.go new file mode 100755 index 000000000..9688d49e9 --- /dev/null +++ b/sailfish/cgo_linux_386.go @@ -0,0 +1,15 @@ +// +build !android + +package sailfish + +/* +#cgo CFLAGS: -pipe -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -m32 -msse -msse2 -march=i686 -mfpmath=sse -mtune=generic -fno-omit-frame-pointer -fasynchronous-unwind-tables -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -Wall -W -D_REENTRANT -fPIE +#cgo CXXFLAGS: -pipe -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -m32 -msse -msse2 -march=i686 -mfpmath=sse -mtune=generic -fno-omit-frame-pointer -fasynchronous-unwind-tables -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -Wall -W -D_REENTRANT -fPIE +#cgo CXXFLAGS: -DQT_NO_DEBUG -DQT_CORE_LIB -DQT_SAILFISH_LIB +#cgo CXXFLAGS: -I/srv/mer/targets/SailfishOS-i486/usr/share/qt5/mkspecs/linux-g++ -I/srv/mer/targets/SailfishOS-i486/usr/include -I/srv/mer/targets/SailfishOS-i486/usr/include/sailfishapp -I/srv/mer/targets/SailfishOS-i486/usr/include/mdeclarativecache5 -I/srv/mer/targets/SailfishOS-i486/usr/include/qt5 +#cgo CXXFLAGS: -I/srv/mer/targets/SailfishOS-i486/usr/include/qt5/QtCore -I/srv/mer/targets/SailfishOS-i486/usr/include/qt5/QtSailfish + +#cgo LDFLAGS: -Wl,-O1 -Wl,-rpath-link,/srv/mer/targets/SailfishOS-i486/usr/lib -Wl,-rpath-link,/srv/mer/targets/SailfishOS-i486/lib +#cgo LDFLAGS: -rdynamic -L/srv/mer/targets/SailfishOS-i486/usr/lib -L/srv/mer/targets/SailfishOS-i486/lib -lsailfishapp -lmdeclarativecache5 -lQt5Core -lGLESv2 -lpthread +*/ +import "C" diff --git a/sailfish/cgo_linux_arm.go b/sailfish/cgo_linux_arm.go new file mode 100755 index 000000000..780739ef0 --- /dev/null +++ b/sailfish/cgo_linux_arm.go @@ -0,0 +1,15 @@ +// +build !android + +package sailfish + +/* +#cgo CFLAGS: -pipe -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -fmessage-length=0 -march=armv7-a -mfloat-abi=hard -mfpu=neon -mthumb -Wno-psabi -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -Wall -W -D_REENTRANT -fPIE +#cgo CXXFLAGS: -pipe -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -fmessage-length=0 -march=armv7-a -mfloat-abi=hard -mfpu=neon -mthumb -Wno-psabi -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -Wall -W -D_REENTRANT -fPIE +#cgo CXXFLAGS: -DQT_NO_DEBUG -DQT_CORE_LIB -DQT_SAILFISH_LIB +#cgo CXXFLAGS: -I/srv/mer/targets/SailfishOS-armv7hl/usr/share/qt5/mkspecs/linux-g++ -I/srv/mer/targets/SailfishOS-armv7hl/usr/include -I/srv/mer/targets/SailfishOS-armv7hl/usr/include/sailfishapp -I/srv/mer/targets/SailfishOS-armv7hl/usr/include/mdeclarativecache5 -I/srv/mer/targets/SailfishOS-armv7hl/usr/include/qt5 +#cgo CXXFLAGS: -I/srv/mer/targets/SailfishOS-armv7hl/usr/include/qt5/QtCore -I/srv/mer/targets/SailfishOS-armv7hl/usr/include/qt5/QtSailfish + +#cgo LDFLAGS: -Wl,-O1 -Wl,-rpath-link,/srv/mer/targets/SailfishOS-armv7hl/usr/lib -Wl,-rpath-link,/srv/mer/targets/SailfishOS-armv7hl/lib +#cgo LDFLAGS: -rdynamic -L/srv/mer/targets/SailfishOS-armv7hl/usr/lib -L/srv/mer/targets/SailfishOS-armv7hl/lib -lsailfishapp -lmdeclarativecache5 -lQt5Core -lGLESv2 -lpthread +*/ +import "C" diff --git a/sailfish/sailfish.go b/sailfish/sailfish.go new file mode 100755 index 000000000..50e7e3ac2 --- /dev/null +++ b/sailfish/sailfish.go @@ -0,0 +1,95 @@ +// +build !sailfish + +package sailfish + +//#include "sailfish_sailfish.h" +import "C" +import ( + "github.com/therecipe/qt/core" + "github.com/therecipe/qt/gui" + "github.com/therecipe/qt/quick" + "unsafe" +) + +type SailfishApp struct { + ptr unsafe.Pointer +} + +type SailfishApp_ITF interface { + SailfishApp_PTR() *SailfishApp +} + +func (p *SailfishApp) SailfishApp_PTR() *SailfishApp { + return p +} + +func (p *SailfishApp) Pointer() unsafe.Pointer { + if p != nil { + return p.ptr + } + return nil +} + +func (p *SailfishApp) SetPointer(ptr unsafe.Pointer) { + if p != nil { + p.ptr = ptr + } +} + +func PointerFromSailfishApp(ptr SailfishApp_ITF) unsafe.Pointer { + if ptr != nil { + return ptr.SailfishApp_PTR().Pointer() + } + return nil +} + +func NewSailfishAppFromPointer(ptr unsafe.Pointer) *SailfishApp { + var n = new(SailfishApp) + n.SetPointer(ptr) + return n +} + +func newSailfishAppFromPointer(ptr unsafe.Pointer) *SailfishApp { + var n = NewSailfishAppFromPointer(ptr) + return n +} + +func SailfishApp_Application(argc int, argv []string) *gui.QGuiApplication { + + return nil +} + +func (ptr *SailfishApp) Application(argc int, argv []string) *gui.QGuiApplication { + + return nil +} + +func SailfishApp_Main(argc int, argv []string) int { + + return 0 +} + +func (ptr *SailfishApp) Main(argc int, argv []string) int { + + return 0 +} + +func SailfishApp_CreateView() *quick.QQuickView { + + return nil +} + +func (ptr *SailfishApp) CreateView() *quick.QQuickView { + + return nil +} + +func SailfishApp_PathTo(filename string) *core.QUrl { + + return nil +} + +func (ptr *SailfishApp) PathTo(filename string) *core.QUrl { + + return nil +} diff --git a/sailfish/sailfish_sailfish.cpp b/sailfish/sailfish_sailfish.cpp new file mode 100755 index 000000000..285b5874e --- /dev/null +++ b/sailfish/sailfish_sailfish.cpp @@ -0,0 +1,46 @@ +// +build sailfish + +#define protected public +#define private public + +#include "sailfish_sailfish.h" +#include "_cgo_export.h" + +#include +#include +#include +#include +#include + +void* SailfishApp_SailfishApp_Application(int argc, char* argv) +{ + QList aList = QByteArray(argv).split('|'); + char *argvs[argc]; + static int argcs = argc; + for (int i = 0; i < argc; i++) + argvs[i] = aList[i].data(); + + return SailfishApp::application(argcs, argvs); +} + +int SailfishApp_SailfishApp_Main(int argc, char* argv) +{ + QList aList = QByteArray(argv).split('|'); + char *argvs[argc]; + static int argcs = argc; + for (int i = 0; i < argc; i++) + argvs[i] = aList[i].data(); + + return SailfishApp::main(argcs, argvs); +} + +void* SailfishApp_SailfishApp_CreateView() +{ + return SailfishApp::createView(); +} + +void* SailfishApp_SailfishApp_PathTo(char* filename) +{ + return new QUrl(SailfishApp::pathTo(*(new QString(filename)))); +} + diff --git a/sailfish/sailfish_sailfish.go b/sailfish/sailfish_sailfish.go new file mode 100755 index 000000000..82bdfe9c3 --- /dev/null +++ b/sailfish/sailfish_sailfish.go @@ -0,0 +1,105 @@ +// +build sailfish + +package sailfish + +//#include "sailfish_sailfish.h" +import "C" +import ( + "github.com/therecipe/qt" + "github.com/therecipe/qt/core" + "github.com/therecipe/qt/gui" + "github.com/therecipe/qt/quick" + "strings" + "unsafe" +) + +type SailfishApp struct { + ptr unsafe.Pointer +} + +type SailfishApp_ITF interface { + SailfishApp_PTR() *SailfishApp +} + +func (p *SailfishApp) SailfishApp_PTR() *SailfishApp { + return p +} + +func (p *SailfishApp) Pointer() unsafe.Pointer { + if p != nil { + return p.ptr + } + return nil +} + +func (p *SailfishApp) SetPointer(ptr unsafe.Pointer) { + if p != nil { + p.ptr = ptr + } +} + +func PointerFromSailfishApp(ptr SailfishApp_ITF) unsafe.Pointer { + if ptr != nil { + return ptr.SailfishApp_PTR().Pointer() + } + return nil +} + +func NewSailfishAppFromPointer(ptr unsafe.Pointer) *SailfishApp { + var n = new(SailfishApp) + n.SetPointer(ptr) + return n +} + +func newSailfishAppFromPointer(ptr unsafe.Pointer) *SailfishApp { + var n = NewSailfishAppFromPointer(ptr) + return n +} + +func SailfishApp_Application(argc int, argv []string) *gui.QGuiApplication { + defer qt.Recovering("SailfishApp::application") + + return gui.NewQGuiApplicationFromPointer(C.SailfishApp_SailfishApp_Application(C.int(argc), C.CString(strings.Join(argv, "|")))) +} + +func (ptr *SailfishApp) Application(argc int, argv []string) *gui.QGuiApplication { + defer qt.Recovering("SailfishApp::application") + + return gui.NewQGuiApplicationFromPointer(C.SailfishApp_SailfishApp_Application(C.int(argc), C.CString(strings.Join(argv, "|")))) +} + +func SailfishApp_Main(argc int, argv []string) int { + defer qt.Recovering("SailfishApp::main") + + return int(C.SailfishApp_SailfishApp_Main(C.int(argc), C.CString(strings.Join(argv, "|")))) +} + +func (ptr *SailfishApp) Main(argc int, argv []string) int { + defer qt.Recovering("SailfishApp::main") + + return int(C.SailfishApp_SailfishApp_Main(C.int(argc), C.CString(strings.Join(argv, "|")))) +} + +func SailfishApp_CreateView() *quick.QQuickView { + defer qt.Recovering("SailfishApp::createView") + + return quick.NewQQuickViewFromPointer(C.SailfishApp_SailfishApp_CreateView()) +} + +func (ptr *SailfishApp) CreateView() *quick.QQuickView { + defer qt.Recovering("SailfishApp::createView") + + return quick.NewQQuickViewFromPointer(C.SailfishApp_SailfishApp_CreateView()) +} + +func SailfishApp_PathTo(filename string) *core.QUrl { + defer qt.Recovering("SailfishApp::pathTo") + + return core.NewQUrlFromPointer(C.SailfishApp_SailfishApp_PathTo(C.CString(filename))) +} + +func (ptr *SailfishApp) PathTo(filename string) *core.QUrl { + defer qt.Recovering("SailfishApp::pathTo") + + return core.NewQUrlFromPointer(C.SailfishApp_SailfishApp_PathTo(C.CString(filename))) +} diff --git a/sailfish/sailfish_sailfish.h b/sailfish/sailfish_sailfish.h new file mode 100755 index 000000000..a5e7b9923 --- /dev/null +++ b/sailfish/sailfish_sailfish.h @@ -0,0 +1,21 @@ +// +build sailfish + +#pragma once + +#ifndef GO_QTSAILFISH_H +#define GO_QTSAILFISH_H + +#ifdef __cplusplus +extern "C" { +#endif + +void* SailfishApp_SailfishApp_Application(int argc, char* argv); +int SailfishApp_SailfishApp_Main(int argc, char* argv); +void* SailfishApp_SailfishApp_CreateView(); +void* SailfishApp_SailfishApp_PathTo(char* filename); + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file