mirror of
https://github.com/thead-yocto-mirror/skia
synced 2026-09-17 20:52:06 +02:00
113 lines
3.2 KiB
Go
113 lines
3.2 KiB
Go
// Copyright 2017 The Wuffs Authors.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// https://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
// commonflags holds flag defaults and usage messages that are common to the
|
|
// Wuffs command line tools.
|
|
//
|
|
// It also holds functions to parse and validate these flag values.
|
|
package commonflags
|
|
|
|
import (
|
|
"fmt"
|
|
"path"
|
|
"strings"
|
|
)
|
|
|
|
const (
|
|
CcompilersDefault = "clang-5.0,gcc"
|
|
CcompilersUsage = `comma-separated list of C compilers`
|
|
|
|
CformatterDefault = "clang-format-5.0"
|
|
CformatterUsage = `C formatter`
|
|
|
|
FocusDefault = ""
|
|
FocusUsage = `comma-separated list of tests or benchmarks (name prefixes) to focus on, e.g. "wuffs_gif_decode"`
|
|
|
|
GenlinenumDefault = false
|
|
GenlinenumUsage = `whether to generate filename:line_number comments`
|
|
|
|
IterscaleDefault = 100
|
|
IterscaleMin = 0
|
|
IterscaleMax = 1000000
|
|
IterscaleUsage = `a scaling factor for the number of iterations per benchmark`
|
|
|
|
MimicDefault = false
|
|
MimicUsage = `whether to compare Wuffs' output with other libraries' output`
|
|
|
|
RepsDefault = 5
|
|
RepsMin = 0
|
|
RepsMax = 1000000
|
|
RepsUsage = `the number of repetitions per benchmark`
|
|
|
|
VersionDefault = "0.0.0"
|
|
VersionUsage = `version string, e.g. "1.2.3-beta.4"`
|
|
)
|
|
|
|
// TODO: do IsAlphaNumericIsh and IsValidUsePath belong in a separate package,
|
|
// such as lang/validate? Perhaps together with token.Unescape?
|
|
|
|
// IsAlphaNumericIsh returns whether s contains only ASCII alpha-numerics and a
|
|
// limited set of punctuation such as commas and slashes, but not containing
|
|
// e.g. spaces, semi-colons, colons or backslashes.
|
|
//
|
|
// The intent is that if s is alpha-numeric-ish, then it should not need
|
|
// escaping when passed to other programs as command line arguments.
|
|
func IsAlphaNumericIsh(s string) bool {
|
|
for i := 0; i < len(s); i++ {
|
|
c := s[i]
|
|
if c == ',' || c == '-' || c == '.' || c == '/' || ('0' <= c && c <= '9') || ('A' <= c && c <= 'Z') ||
|
|
c == '_' || ('a' <= c && c <= 'z') {
|
|
continue
|
|
}
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
func IsValidUsePath(s string) bool {
|
|
return s == path.Clean(s) && s != "" && s[0] != '.' && s[0] != '/'
|
|
}
|
|
|
|
type Version struct {
|
|
Major uint32
|
|
Minor uint16
|
|
Patch uint16
|
|
Extension string
|
|
}
|
|
|
|
func ParseVersion(s string) (v Version, ok bool) {
|
|
if !IsAlphaNumericIsh(s) {
|
|
return Version{}, false
|
|
}
|
|
if i := strings.IndexByte(s, '-'); i >= 0 {
|
|
s, v.Extension = s[:i], s[i+1:]
|
|
}
|
|
if _, err := fmt.Sscanf(s, "%d.%d.%d", &v.Major, &v.Minor, &v.Patch); err != nil {
|
|
return Version{}, false
|
|
}
|
|
return v, true
|
|
}
|
|
|
|
func (v Version) String() string {
|
|
s := fmt.Sprintf("%d.%d.%d", v.Major, v.Minor, v.Patch)
|
|
if v.Extension != "" {
|
|
s += "-" + v.Extension
|
|
}
|
|
return s
|
|
}
|
|
|
|
func (v Version) Uint64() uint64 {
|
|
return (uint64(v.Major) << 32) | (uint64(v.Minor) << 16) | (uint64(v.Patch) << 0)
|
|
}
|