Add Windows helper to prepend GStreamer bin to PATH

This commit is contained in:
VideoTools CI 2026-01-17 20:33:08 -05:00
parent 8b56e2dbd9
commit c28d86b9bc

View File

@ -0,0 +1,58 @@
//go:build windows
package utils
import (
"os"
"path/filepath"
"strings"
)
// EnsureGStreamerOnPath best-effort prepends common GStreamer bin locations to PATH for the
// current process. It does not modify system-wide PATH. This helps avoid missing-DLL issues
// when users install GStreamer but its bin directory is not on PATH.
func EnsureGStreamerOnPath() {
candidates := []string{}
// If the user set GSTREAMER_1_0_ROOT_X86_64, prefer its bin
if root := os.Getenv("GSTREAMER_1_0_ROOT_X86_64"); root != "" {
candidates = append(candidates, filepath.Join(root, "bin"))
}
// Common installer locations (64-bit)
candidates = append(candidates,
`C:\\gstreamer\\1.0\\msvc_x86_64\\bin`,
`C:\\Program Files\\GStreamer\\1.0\\msvc_x86_64\\bin`,
)
pathVal := os.Getenv("PATH")
parts := []string{}
seen := map[string]bool{}
// Prepend any found candidates that exist
for _, cand := range candidates {
if cand == "" {
continue
}
if _, err := os.Stat(cand); err == nil {
// Only add if not already present (case-insensitive on Windows)
lower := strings.ToLower(cand)
if !seen[lower] {
parts = append(parts, cand)
seen[lower] = true
}
}
}
// Append existing PATH entries, preserving order and deduping case-insensitively
for _, p := range filepath.SplitList(pathVal) {
lower := strings.ToLower(p)
if seen[lower] {
continue
}
parts = append(parts, p)
seen[lower] = true
}
_ = os.Setenv("PATH", strings.Join(parts, string(os.PathListSeparator)))
}