mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-01 15:45:38 +00:00
f73287be87
Signed-off-by: ddkwork
58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
// Package debug provides general debug feature management for Gio, including
|
|
// the ability to toggle debug features using the GIODEBUG environment variable.
|
|
package debug
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
"sync"
|
|
"sync/atomic"
|
|
)
|
|
|
|
const (
|
|
debugVariable = "GIODEBUG"
|
|
textSubsystem = "text"
|
|
silentFeature = "silent"
|
|
)
|
|
|
|
// Text controls whether the text subsystem has debug logging enabled.
|
|
var Text atomic.Bool
|
|
|
|
var parseOnce sync.Once
|
|
|
|
// Parse processes the current value of GIODEBUG. If it is unset, it does nothing.
|
|
// Otherwise it process its value, printing usage info the stderr if the value is
|
|
// not understood. Parse will be automatically invoked when the first application
|
|
// window is created, allowing applications to manipulate GIODEBUG programmatically
|
|
// before it is parsed.
|
|
func Parse() {
|
|
parseOnce.Do(func() {
|
|
val, ok := os.LookupEnv(debugVariable)
|
|
if !ok {
|
|
return
|
|
}
|
|
print := false
|
|
silent := false
|
|
for part := range strings.SplitSeq(val, ",") {
|
|
switch part {
|
|
case textSubsystem:
|
|
Text.Store(true)
|
|
case silentFeature:
|
|
silent = true
|
|
default:
|
|
print = true
|
|
}
|
|
}
|
|
if print && !silent {
|
|
fmt.Fprintf(os.Stderr,
|
|
`Usage of %s:
|
|
A comma-delimited list of debug subsystems to enable. Currently recognized systems:
|
|
|
|
- %s: text debug info including system font resolution
|
|
- %s: silence this usage message even if GIODEBUG contains invalid content
|
|
`, debugVariable, textSubsystem, silentFeature)
|
|
}
|
|
})
|
|
}
|