2016-10-28 05:00:58 +03:00
package utils
import (
"os"
2017-03-02 21:24:25 +03:00
"os/exec"
2016-10-28 05:00:58 +03:00
"path/filepath"
"runtime"
"strings"
)
2016-12-30 23:40:48 +03:00
func QT_VERSION ( ) string {
if version := os . Getenv ( "QT_VERSION" ) ; version != "" {
return version
}
2017-01-07 20:26:06 +03:00
2017-04-01 22:03:41 +03:00
if QT_PKG_CONFIG ( ) {
return strings . TrimSpace ( RunCmd ( exec . Command ( "pkg-config" , "--modversion" , "Qt5Core" ) , "cgo.LinuxPkgConfig_modVersion" ) )
}
2017-02-10 20:18:44 +03:00
return "5.8.0"
2016-12-30 23:40:48 +03:00
}
2017-01-07 20:26:06 +03:00
func QT_VERSION_MAJOR ( ) string {
return strings . Join ( strings . Split ( QT_VERSION ( ) , "." ) [ : 2 ] , "." )
}
2016-10-28 05:00:58 +03:00
func QT_DIR ( ) string {
if dir := os . Getenv ( "QT_DIR" ) ; dir != "" {
return filepath . Clean ( dir )
}
if runtime . GOOS == "windows" {
2016-12-30 23:40:48 +03:00
return "C:\\Qt\\Qt" + QT_VERSION ( )
2016-10-28 05:00:58 +03:00
}
2016-12-30 23:40:48 +03:00
return filepath . Join ( os . Getenv ( "HOME" ) , "Qt" + QT_VERSION ( ) )
2016-10-28 05:00:58 +03:00
}
func QT_STUB ( ) bool {
2017-03-11 00:54:09 +03:00
return strings . ToLower ( os . Getenv ( "QT_STUB" ) ) == "true" || QT_MSYS2 ( )
2016-10-28 05:00:58 +03:00
}
2016-12-16 23:59:46 +03:00
2017-01-07 20:26:06 +03:00
func QT_DEBUG ( ) bool {
return strings . ToLower ( os . Getenv ( "QT_DEBUG" ) ) == "true"
}
2017-05-18 01:17:02 +03:00
func QT_DEBUG_QML ( ) bool {
return strings . ToLower ( os . Getenv ( "QT_DEBUG_QML" ) ) == "true"
}
2016-12-16 23:59:46 +03:00
func CheckBuildTarget ( buildTarget string ) {
switch buildTarget {
2017-04-17 20:21:21 +03:00
case "android" , "android-emulator" ,
2017-03-17 23:36:32 +03:00
"ios" , "ios-simulator" ,
"sailfish" , "sailfish-emulator" , "asteroid" ,
"rpi1" , "rpi2" , "rpi3" ,
"windows" , "darwin" , "linux" :
2016-12-16 23:59:46 +03:00
default :
2017-03-17 23:36:32 +03:00
Log . Panicf ( "failed to recognize build target %v" , buildTarget )
2016-12-16 23:59:46 +03:00
}
2017-03-17 23:36:32 +03:00
if buildTarget != runtime . GOOS {
2016-12-16 23:59:46 +03:00
switch {
2017-03-11 00:54:09 +03:00
case QT_MSYS2 ( ) :
2017-03-17 23:36:32 +03:00
Log . Fatalf ( "%v is not supported as a deploy target on %v with MSYS2 -> install the official Qt version instead and try again" , buildTarget , runtime . GOOS )
2016-12-16 23:59:46 +03:00
2017-03-11 00:54:09 +03:00
case QT_HOMEBREW ( ) :
2017-03-17 23:36:32 +03:00
Log . Fatalf ( "%v is not supported as a deploy target on %v with HomeBrew -> install the official Qt version instead and try again" , buildTarget , runtime . GOOS )
2016-12-16 23:59:46 +03:00
2017-03-11 00:54:09 +03:00
case QT_PKG_CONFIG ( ) :
2017-03-17 23:36:32 +03:00
Log . Fatalf ( "%v is not supported as a deploy target on %v with PkgConfig -> install the official Qt version instead and try again" , buildTarget , runtime . GOOS )
2016-12-16 23:59:46 +03:00
}
}
}
2017-02-01 18:38:51 +03:00
2017-03-11 00:54:09 +03:00
func CI ( ) bool {
2017-02-01 18:38:51 +03:00
return strings . ToLower ( os . Getenv ( "CI" ) ) == "true"
}
2017-02-27 00:03:27 +03:00
func QT_QMAKE_DIR ( ) string {
2017-02-27 03:23:27 +03:00
if dir := os . Getenv ( "QT_QMAKE_DIR" ) ; dir != "" {
return filepath . Clean ( dir )
}
return ""
2017-02-27 00:03:27 +03:00
}
2017-02-28 21:27:55 +03:00
func QT_DOCKER ( ) bool {
return strings . ToLower ( os . Getenv ( "QT_DOCKER" ) ) == "true"
}
2017-03-02 21:24:25 +03:00
2017-03-17 23:36:32 +03:00
//TODO: use qmake props
2017-03-02 21:24:25 +03:00
func ToolPath ( tool , target string ) string {
2017-03-16 22:18:32 +03:00
if target == "sailfish" || target == "sailfish-emulator" {
2017-03-02 21:24:25 +03:00
target = runtime . GOOS
}
2017-03-17 23:36:32 +03:00
if dir := QT_QMAKE_DIR ( ) ; dir != "" {
return filepath . Join ( dir , tool )
2017-03-02 21:24:25 +03:00
}
switch target {
case "darwin" :
return filepath . Join ( QT_DARWIN_DIR ( ) , "bin" , tool )
case "windows" :
if runtime . GOOS == target {
2017-03-11 00:54:09 +03:00
if QT_MSYS2 ( ) {
2017-04-30 01:15:23 +03:00
if QT_MSYS2_STATIC ( ) {
return filepath . Join ( QT_MSYS2_DIR ( ) , "qt5-static" , "bin" , tool )
}
2017-03-02 21:24:25 +03:00
return filepath . Join ( QT_MSYS2_DIR ( ) , "bin" , tool )
}
return filepath . Join ( QT_DIR ( ) , QT_VERSION_MAJOR ( ) , "mingw53_32" , "bin" , tool )
}
return filepath . Join ( QT_MXE_DIR ( ) , "usr" , QT_MXE_TRIPLET ( ) , "qt5" , "bin" , tool )
case "linux" :
2017-03-11 00:54:09 +03:00
if QT_PKG_CONFIG ( ) {
2017-03-16 22:18:32 +03:00
return filepath . Join ( strings . TrimSpace ( RunCmd ( exec . Command ( "pkg-config" , "--variable=host_bins" , "Qt5Core" ) , "cgo.LinuxPkgConfig_hostBins" ) ) , tool )
2017-03-02 21:24:25 +03:00
}
return filepath . Join ( QT_DIR ( ) , QT_VERSION_MAJOR ( ) , "gcc_64" , "bin" , tool )
case "ios" , "ios-simulator" :
return filepath . Join ( QT_DIR ( ) , QT_VERSION_MAJOR ( ) , "ios" , "bin" , tool )
case "android" :
return filepath . Join ( QT_DIR ( ) , QT_VERSION_MAJOR ( ) , "android_armv7" , "bin" , tool )
2017-04-17 20:21:21 +03:00
case "android-emulator" :
return filepath . Join ( QT_DIR ( ) , QT_VERSION_MAJOR ( ) , "android_x86" , "bin" , tool )
2017-03-11 22:08:40 +03:00
/ *
case "sailfish" :
return filepath . Join ( os . Getenv ( "HOME" ) , ".config" , "SailfishOS-SDK" , "mer-sdk-tools" , "MerSDK" , "SailfishOS-armv7hl" , tool )
case "sailfish-emulator" :
return filepath . Join ( os . Getenv ( "HOME" ) , ".config" , "SailfishOS-SDK" , "mer-sdk-tools" , "MerSDK" , "SailfishOS-i486" , tool )
* /
2017-03-02 21:24:25 +03:00
case "asteroid" :
case "rp1" , "rpi2" , "rpi3" :
return filepath . Join ( QT_DIR ( ) , QT_VERSION_MAJOR ( ) , target , "bin" , tool )
}
return ""
}
2017-04-11 00:38:26 +03:00
func QT_WEBKIT ( ) bool {
return strings . ToLower ( os . Getenv ( "QT_WEBKIT" ) ) == "true"
}