mirror of
https://github.com/bluszcz/cutego.git
synced 2024-09-28 21:25:16 +03:00
9d559bd895
Signed-off-by: Ángel <angelo.fly1@gmail.com>
137 lines
3.7 KiB
Go
137 lines
3.7 KiB
Go
package utils
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"regexp"
|
|
"runtime"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
func JDK_DIR() string {
|
|
if dir, ok := os.LookupEnv("JDK_DIR"); ok {
|
|
return filepath.Clean(dir)
|
|
}
|
|
if dir, ok := os.LookupEnv("JAVA_HOME"); ok {
|
|
return filepath.Clean(dir)
|
|
}
|
|
|
|
for _, l := range strings.Split(RunCmd(exec.Command("java", "-XshowSettings:properties", "-version"), "deploy.jdk"), "\n") {
|
|
l = strings.TrimSpace(l)
|
|
if strings.HasPrefix(l, "java.home") {
|
|
return strings.Split(l, " = ")[1]
|
|
}
|
|
}
|
|
|
|
return filepath.Join(os.Getenv("HOME"), "jdk")
|
|
}
|
|
|
|
func ANDROID_SDK_DIR() string {
|
|
if dir, ok := os.LookupEnv("ANDROID_SDK_DIR"); ok {
|
|
return filepath.Clean(dir)
|
|
}
|
|
if dir, ok := os.LookupEnv("ANDROID_SDK_ROOT"); ok {
|
|
return filepath.Clean(dir)
|
|
}
|
|
switch runtime.GOOS {
|
|
case "windows":
|
|
return windowsSystemDrive() + "\\android-sdk-windows"
|
|
case "darwin":
|
|
return filepath.Join(os.Getenv("HOME"), "android-sdk-macosx")
|
|
default:
|
|
return filepath.Join(os.Getenv("HOME"), "android-sdk-linux")
|
|
}
|
|
}
|
|
|
|
func ANDROID_NDK_DIR() string {
|
|
if dir, ok := os.LookupEnv("ANDROID_NDK_DIR"); ok {
|
|
return filepath.Clean(dir)
|
|
}
|
|
if dir, ok := os.LookupEnv("ANDROID_NDK_ROOT"); ok {
|
|
return filepath.Clean(dir)
|
|
}
|
|
if runtime.GOOS == "windows" {
|
|
return windowsSystemDrive() + "\\android-ndk-r18b"
|
|
}
|
|
return filepath.Join(os.Getenv("HOME"), "android-ndk-r18b")
|
|
}
|
|
|
|
func ANDROID_NDK_MAJOR_VERSION() int {
|
|
|
|
var (
|
|
propsRegex = regexp.MustCompile(`[#].*\\n|\\s+\\n|\\S+[=]|.*\n`)
|
|
pairRegex = regexp.MustCompile(`\s+=\s+`)
|
|
)
|
|
|
|
source := filepath.Join(ANDROID_NDK_DIR(), "source.properties")
|
|
props, err := ioutil.ReadFile(source)
|
|
if err != nil {
|
|
fields := logrus.Fields{"_func": "ANDROID_NDK_MAJOR_VERSION", "source": source}
|
|
Log.WithError(err).WithFields(fields).Error("Failed to read source.properties file of Android NDK")
|
|
os.Exit(1)
|
|
}
|
|
|
|
var version_string string
|
|
pairs := propsRegex.FindAll(props, -1)
|
|
for _, pair := range pairs {
|
|
str_pair := strings.TrimSpace(string(pair))
|
|
if strings.HasPrefix(str_pair, "Pkg.Revision") {
|
|
if aux := pairRegex.Split(str_pair, -1); len(aux) == 2 {
|
|
version_string = aux[1]
|
|
break
|
|
} else {
|
|
fields := logrus.Fields{"_func": "ANDROID_NDK_MAJOR_VERSION", "property_pair": str_pair}
|
|
Log.WithError(err).WithFields(fields).Error("Failed to proccess source.properties file of Android NDK")
|
|
os.Exit(1)
|
|
}
|
|
}
|
|
}
|
|
|
|
rawVersion := strings.Split(version_string, ".")
|
|
major, err := strconv.Atoi(rawVersion[0])
|
|
if err != nil {
|
|
fields := logrus.Fields{"_func": "ANDROID_NDK_MAJOR_VERSION", "major_version": rawVersion[0]}
|
|
Log.WithError(err).WithFields(fields).Error("Failed to parse major version of Android NDK")
|
|
os.Exit(1)
|
|
}
|
|
return major
|
|
}
|
|
|
|
// ANDROID_NDK_REQUIRE_NOSTDLIBPP_LDFLAG returns true if the -nostdlib++ flag is required by Android NDK and false otherwise
|
|
func ANDROID_NDK_REQUIRE_NOSTDLIBPP_LDFLAG() bool {
|
|
if ANDROID_NDK_MAJOR_VERSION() > 19 {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
// ANDROID_NDK_NOSTDLIBPP_LDFLAG return -nostdlib++ or empty string if that flag is no required by Android NDK
|
|
func ANDROID_NDK_NOSTDLIBPP_LDFLAG() string {
|
|
if ANDROID_NDK_MAJOR_VERSION() > 19 {
|
|
return "-nostdlib++"
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// ANDROID_NDK_PLATFORM returns the Android API level to use in the building process
|
|
func ANDROID_NDK_PLATFORM() string {
|
|
|
|
// default value as set in cmd.go BuildEnv function
|
|
if QT_FELGO() {
|
|
return "android-16"
|
|
}
|
|
// if env var exists and is not empty use env var of the system
|
|
if value, exist := os.LookupEnv("ANDROID_NDK_PLATFORM"); exist && value != "" {
|
|
return value
|
|
}
|
|
|
|
// default value as recommended in https://wiki.qt.io/Qt_for_Android_known_issues
|
|
// to workaround problems with arm64 android builds
|
|
return "android-21"
|
|
}
|