gogio: support explicit version codes through a fourth version field

As suggested in review, explicitly specifying the version code with
-version major.minor.patch.versioncode provides more flexibility than
the a version code implied from the major, minor, patch fields.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2024-01-28 11:46:16 -05:00
parent a24a395e5f
commit aa41850405
4 changed files with 7 additions and 14 deletions
+1 -1
View File
@@ -450,7 +450,7 @@ func exeAndroid(tmpDir string, tools *androidTools, bi *buildInfo, extraJars, pe
`<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="{{.AppID}}"
android:versionCode="{{.Version.Version32}}"
android:versionCode="{{.Version.VersionCode}}"
android:versionName="{{.Version}}">
<uses-sdk android:minSdkVersion="{{.MinSDK}}" android:targetSdkVersion="{{.TargetSDK}}" />
{{range .Permissions}} <uses-permission android:name="{{.}}"/>
+4 -11
View File
@@ -33,8 +33,8 @@ type buildInfo struct {
}
type Semver struct {
Major uint16
Minor, Patch uint8
Major, Minor, Patch int
VersionCode uint32
}
func newBuildInfo(pkgPath string) (*buildInfo, error) {
@@ -83,19 +83,12 @@ func UppercaseName(name string) string {
}
func (s Semver) String() string {
return fmt.Sprintf("%d.%d.%d", s.Major, s.Minor, s.Patch)
}
// Version32 returns a 32-bit integer version packed as such:
//
// major<<16 | minor<<8 | patch
func (s Semver) Version32() uint32 {
return uint32(s.Major)<<16 | uint32(s.Minor)<<8 | uint32(s.Patch)
return fmt.Sprintf("%d.%d.%d.%d", s.Major, s.Minor, s.Patch, s.VersionCode)
}
func parseSemver(v string) (Semver, error) {
var sv Semver
_, err := fmt.Sscanf(v, "%d.%d.%d", &sv.Major, &sv.Minor, &sv.Patch)
_, err := fmt.Sscanf(v, "%d.%d.%d.%d", &sv.Major, &sv.Minor, &sv.Patch, &sv.VersionCode)
if err != nil {
return Semver{}, fmt.Errorf("invalid semver: %q", v)
}
+1 -1
View File
@@ -377,7 +377,7 @@ func buildInfoPlist(bi *buildInfo) string {
<key>DTXcodeBuild</key>
<string>10G8</string>
</dict>
</plist>`, appName, bi.appID, appName, bi.version, bi.version.Version32(), platform, minIOSVersion, supportPlatform, platform)
</plist>`, appName, bi.appID, appName, bi.version, bi.version.VersionCode, platform, minIOSVersion, supportPlatform, platform)
}
func iosPlatformFor(target string) string {
+1 -1
View File
@@ -28,7 +28,7 @@ var (
destPath = flag.String("o", "", "output file or directory.\nFor -target ios or tvos, use the .app suffix to target simulators.")
appID = flag.String("appid", "", "app identifier (for -buildmode=exe)")
name = flag.String("name", "", "app name (for -buildmode=exe)")
version = flag.String("version", "1.0.0", "semver app version (for -buildmode=exe) on the form major.minor.patch")
version = flag.String("version", "1.0.0.1", "semver app version (for -buildmode=exe) on the form major.minor.patch.versioncode")
printCommands = flag.Bool("x", false, "print the commands")
keepWorkdir = flag.Bool("work", false, "print the name of the temporary work directory and do not delete it when exiting.")
linkMode = flag.String("linkmode", "", "set the -linkmode flag of the go tool")