@wzwjustdoit/dsh-plugin-git-bash 0.0.0-stage → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +154 -2
  3. package/client.js +736 -0
  4. package/cordis.patch.yml +27 -0
  5. package/lib/agents.d.ts +5 -0
  6. package/lib/agents.d.ts.map +1 -0
  7. package/lib/agents.js +56 -0
  8. package/lib/agents.js.map +1 -0
  9. package/lib/discovery.d.ts +21 -0
  10. package/lib/discovery.d.ts.map +1 -0
  11. package/lib/discovery.js +122 -0
  12. package/lib/discovery.js.map +1 -0
  13. package/lib/index.d.ts +55 -0
  14. package/lib/index.d.ts.map +1 -0
  15. package/lib/index.js +369 -0
  16. package/lib/index.js.map +1 -0
  17. package/native/CMakeLists.txt +58 -0
  18. package/native/bin/win32-x64/msys-token-guard-hook.dll +0 -0
  19. package/native/bin/win32-x64/msys-token-guard.exe +0 -0
  20. package/native/msys-token-guard-hook.cpp +470 -0
  21. package/native/msys-token-guard.cpp +671 -0
  22. package/native/vendor/detours/LICENSE.md +23 -0
  23. package/native/vendor/detours/README.dsh.md +13 -0
  24. package/native/vendor/detours/creatwth.cpp +1577 -0
  25. package/native/vendor/detours/detours.cpp +2364 -0
  26. package/native/vendor/detours/detours.h +1059 -0
  27. package/native/vendor/detours/detver.h +27 -0
  28. package/native/vendor/detours/disasm.cpp +4236 -0
  29. package/native/vendor/detours/image.cpp +2251 -0
  30. package/native/vendor/detours/modules.cpp +929 -0
  31. package/native/vendor/detours/uimports.cpp +269 -0
  32. package/package.json +120 -4
  33. package/scripts/build-native.mjs +35 -0
  34. package/scripts/dsh.desktop.startup/README.md +27 -0
  35. package/scripts/dsh.desktop.startup/dsh.desktop.startup.gitbash.bat +28 -0
  36. package/scripts/dsh.desktop.startup/dsh.desktop.startup.gitbash.sh +46 -0
  37. package/scripts/dsh.desktop.startup/dsh.desktop.startup.gitbash.vbs +0 -0
  38. package/scripts/dsh.web.startup/README.md +33 -0
  39. package/scripts/dsh.web.startup/dsh.web.startup.gitbash.bat +28 -0
  40. package/scripts/dsh.web.startup/dsh.web.startup.gitbash.sh +48 -0
  41. package/scripts/dsh.web.startup/dsh.web.startup.gitbash.vbs +0 -0
package/lib/index.js ADDED
@@ -0,0 +1,369 @@
1
+ import { LocalBashExecutor } from "@deepseek-ai/dsh-bash-local";
2
+ import { SandboxUnavailableError } from "@deepseek-ai/dsh-sandbox";
3
+ import z from "@deepseek-ai/schemastery";
4
+ import { spawnSync } from "node:child_process";
5
+ import { accessSync, constants, statSync } from "node:fs";
6
+ import { dirname, resolve } from "node:path";
7
+ import { fileURLToPath } from "node:url";
8
+ import { GIT_BASH_PATH_CONFINED_ENV, configuredGitBashPath, resolveGitBashPath } from "./discovery.js";
9
+ export { GIT_BASH_PATH_CONFINED_ENV, GIT_BASH_PATH_ENV, configuredGitBashPath, gitBashCandidates, resolveGitBashPath, } from "./discovery.js";
10
+ const PACKAGE_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), "..");
11
+ const GUARD_EXECUTABLE = resolve(PACKAGE_ROOT, "native", "bin", "win32-x64", "msys-token-guard.exe");
12
+ const GUARD_HOOK = resolve(PACKAGE_ROOT, "native", "bin", "win32-x64", "msys-token-guard-hook.dll");
13
+ const EXECUTABLE_SPAWN_CODES = new Set(["EACCES", "ENOENT"]);
14
+ const GIT_BASH_EXECUTABLE_PATTERN = /^(?:[A-Z]:[\\/]|\\\\[^\\/]+[\\/][^\\/]+[\\/]|%[^%]+%[\\/])(?:.*[\\/])?bash\.exe$/i;
15
+ const GUARD_FAILURE_RULE = {
16
+ allowedExitCodes: [125],
17
+ fatalSignatures: ["msys-token-guard:"],
18
+ };
19
+ // The guard's child-token setup fails when the restricted DACL (inherited from
20
+ // the server token's default DACL) offers no usable ordinary SID to the guard.
21
+ const SERVER_DACL_FAILURE_SIGNATURE = "openprocesstoken(child default dacl)";
22
+ // DSH derives every restricted token from the server's own process token, and
23
+ // the restricted DACL starts as a copy of the server's default DACL. Servers
24
+ // started outside MSYS2 can carry a DACL without the user SID, which blocks
25
+ // the guard's workspace-write child-token setup (exit 125). Run the guard
26
+ // helper once per server process to stamp the standard DACL shape — the same
27
+ // normalization starting `dsh web` from Git Bash gets for free.
28
+ function normalizeServerDefaultDacl() {
29
+ if (process.platform !== "win32" || process.arch !== "x64")
30
+ return false;
31
+ let result;
32
+ try {
33
+ result = spawnSync(GUARD_EXECUTABLE, ["--normalize-server-dacl"], {
34
+ timeout: 10_000,
35
+ windowsHide: true,
36
+ });
37
+ }
38
+ catch {
39
+ return false;
40
+ }
41
+ return result.status === 0;
42
+ }
43
+ const LOCAL_BASH_CONFIG = LocalBashExecutor.Config;
44
+ // Keep the field schema permissive enough to render a recovery card for a
45
+ // legacy bad value; resolveConfiguredExecutable enforces it on new writes and use.
46
+ //
47
+ // Extend the base schema with `set` rather than `z.intersect`: intersect rebuilds
48
+ // the object and drops the inherited `volatile` metadata, which the host needs to
49
+ // parse a live config section (otherwise the first command fails with
50
+ // "config.timeoutMs.get is not a function").
51
+ export const Config = LOCAL_BASH_CONFIG
52
+ .set("executable", z.string()
53
+ .default("")
54
+ .role("path")
55
+ .description("Absolute path to Git for Windows bash.exe; blank uses automatic discovery."))
56
+ .set("confinedExecutable", z.string()
57
+ .default("")
58
+ .role("path")
59
+ .description("Absolute path to the bash.exe used by read-only / workspace-write; must be a"
60
+ + " different Git installation than `executable`. Blank falls back to"
61
+ + " DSH_GIT_BASH_PATH_CONFINED, then to `executable`."));
62
+ function checkExecutableShape(executable) {
63
+ if (!GIT_BASH_EXECUTABLE_PATTERN.test(executable)) {
64
+ throw new TypeError("git-bash: executable must be an absolute Windows path ending in bash.exe");
65
+ }
66
+ }
67
+ function resolveConfiguredExecutable(config) {
68
+ const executable = config.executable?.trim();
69
+ if (!executable)
70
+ return undefined;
71
+ checkExecutableShape(executable);
72
+ return resolveGitBashPath(executable);
73
+ }
74
+ /**
75
+ * The `bash.exe` for the confined modes, or `undefined` to fall back to
76
+ * {@link resolveConfiguredExecutable} / auto-discovery. Order: the
77
+ * `confinedExecutable` field, then {@link GIT_BASH_PATH_CONFINED_ENV}.
78
+ */
79
+ function resolveConfinedExecutable(config) {
80
+ const configured = config.confinedExecutable?.trim();
81
+ if (configured) {
82
+ checkExecutableShape(configured);
83
+ return resolveGitBashPath(configured);
84
+ }
85
+ return configuredGitBashPath(GIT_BASH_PATH_CONFINED_ENV);
86
+ }
87
+ function checkedCompositionConfig(config) {
88
+ // Blank configuration intentionally defers auto-discovery so the host still
89
+ // composes when Git for Windows is not installed yet.
90
+ resolveConfiguredExecutable(config);
91
+ resolveConfinedExecutable(config);
92
+ return config;
93
+ }
94
+ function isUsableWorkdir(path) {
95
+ try {
96
+ if (!statSync(path).isDirectory())
97
+ return false;
98
+ accessSync(path, constants.X_OK);
99
+ return true;
100
+ }
101
+ catch {
102
+ return false;
103
+ }
104
+ }
105
+ function isRunnerSpawnFailure(error, runnerProgram, workdir) {
106
+ if (runnerProgram === undefined || !isUsableWorkdir(workdir))
107
+ return false;
108
+ if (typeof error !== "object" || error === null)
109
+ return false;
110
+ const { code, path, syscall } = error;
111
+ if (typeof code !== "string" || !EXECUTABLE_SPAWN_CODES.has(code))
112
+ return false;
113
+ if (typeof syscall !== "string")
114
+ return false;
115
+ const exactSyscall = "spawn " + runnerProgram;
116
+ if (path === undefined)
117
+ return syscall === exactSyscall;
118
+ if (typeof path !== "string" || path.length === 0 || path !== runnerProgram)
119
+ return false;
120
+ return syscall === "spawn" || syscall === exactSyscall;
121
+ }
122
+ function matchesSignature(exitCode, stderr, signatures) {
123
+ if (exitCode === null || exitCode === 0)
124
+ return false;
125
+ const lowered = stderr.toLowerCase();
126
+ return signatures.some((signature) => lowered.includes(signature.toLowerCase()));
127
+ }
128
+ function classifyDenial(result, signatures) {
129
+ return matchesSignature(result.exitCode, result.stderr.text, signatures);
130
+ }
131
+ // Turn the guard's bare DACL failure line into an actionable message: the
132
+ // automatic normalization ran (or was skipped) and the server still serves
133
+ // restricted tokens without ordinary user coverage.
134
+ export function describeGuardFailure(detail) {
135
+ if (!detail.toLowerCase().includes(SERVER_DACL_FAILURE_SIGNATURE))
136
+ return detail;
137
+ return detail + " (git-bash: the DSH server process token's default DACL lacks the user SID,"
138
+ + " so the guard cannot prepare the restricted child token. Start `dsh web` from Git Bash"
139
+ + " so MSYS2 restores the standard DACL shape, and see"
140
+ + " https://github.com/wzwjustdoit/dsh-git-bash/issues/4)";
141
+ }
142
+ function classifyRunnerFailure(exitCode, stderr, rules) {
143
+ if (exitCode === null || exitCode === 0)
144
+ return undefined;
145
+ const lines = stderr.split(/\r?\n/);
146
+ for (const rule of rules) {
147
+ if (rule.allowedExitCodes !== undefined && !rule.allowedExitCodes.includes(exitCode)) {
148
+ continue;
149
+ }
150
+ const informationalLines = new Set((rule.informationalLines ?? []).map((line) => line.toLowerCase()));
151
+ const fatalSignatures = rule.fatalSignatures
152
+ .filter((signature) => signature.trim().length > 0)
153
+ .map((signature) => signature.toLowerCase());
154
+ for (const line of lines) {
155
+ const lowered = line.toLowerCase();
156
+ if (informationalLines.has(lowered))
157
+ continue;
158
+ if (fatalSignatures.some((signature) => lowered.includes(signature))) {
159
+ return { detail: line };
160
+ }
161
+ }
162
+ }
163
+ return undefined;
164
+ }
165
+ function assertNativeGuard(mode) {
166
+ if (process.platform !== "win32" || process.arch !== "x64") {
167
+ throw new SandboxUnavailableError(mode, "Git Bash restricted mode requires win32-x64, received " +
168
+ process.platform + "-" + process.arch);
169
+ }
170
+ for (const artifact of [GUARD_EXECUTABLE, GUARD_HOOK]) {
171
+ try {
172
+ if (!statSync(artifact).isFile())
173
+ throw new Error("not a file");
174
+ accessSync(artifact, constants.R_OK);
175
+ }
176
+ catch (error) {
177
+ throw new SandboxUnavailableError(mode, "Git Bash native guard artifact is unavailable: " + artifact + " (" + String(error) + ")");
178
+ }
179
+ }
180
+ }
181
+ // DSH shell executor backed by Git for Windows Bash.
182
+ //
183
+ // The host interface is `execute(spec)`: a subclass replaces the public
184
+ // command's `bash -c` argv at the execution boundary through `executeArgv`,
185
+ // and stamps settlement facts in `onProcessDone`. There is no separate
186
+ // foreground/background entry point to override — "foreground" is decided by
187
+ // whether the caller awaits the returned handle's `result()`.
188
+ export class GitBashExecutor extends LocalBashExecutor {
189
+ static inject = ["subprocess", "sandbox", "sandboxPolicy"];
190
+ // The extended schema adds `executable`; the static-side cast keeps this
191
+ // subclass assignable to the host's base class, while the runtime schema the
192
+ // host actually parses stays the intersected one.
193
+ static Config = Config;
194
+ executableCache = new Map();
195
+ mode;
196
+ processFacts = new Map();
197
+ constructor(ctx, config) {
198
+ // The host owns shell settings; this executor only resolves and validates
199
+ // its composition config (including the executable-aware extension).
200
+ super(ctx, checkedCompositionConfig(config));
201
+ this.mode = ctx.sandboxPolicy.defaultMode;
202
+ }
203
+ /**
204
+ * The bash.exe for one file-effect mode. `danger-full-access` uses the
205
+ * unconfined installation (`executable` / {@link GIT_BASH_PATH_ENV}); the
206
+ * confined modes prefer their dedicated installation (`confinedExecutable` /
207
+ * {@link GIT_BASH_PATH_CONFINED_ENV}) so their MSYS shared object is created
208
+ * fresh by the Low-integrity child rather than inherited as a Medium object.
209
+ * @param mode - the resolved policy mode for this execution.
210
+ */
211
+ executableFor(mode) {
212
+ const config = this.config;
213
+ const confined = mode !== "danger-full-access";
214
+ const configured = (confined ? config.confinedExecutable : config.executable)?.trim() ?? "";
215
+ const cached = this.executableCache.get(mode);
216
+ if (cached?.configured === configured)
217
+ return cached.resolved;
218
+ const resolved = (confined ? resolveConfinedExecutable(config) : resolveConfiguredExecutable(config))
219
+ ?? resolveGitBashPath();
220
+ this.executableCache.set(mode, { configured, resolved });
221
+ return resolved;
222
+ }
223
+ /** The unconfined-mode bash.exe; kept as the public property existing tests and callers read. */
224
+ get executable() {
225
+ return this.executableFor("danger-full-access");
226
+ }
227
+ get sandboxMode() {
228
+ return this.mode;
229
+ }
230
+ resolve(request) {
231
+ const resolved = super.resolve(request);
232
+ return {
233
+ ...resolved,
234
+ env: {
235
+ ...(resolved.env ?? {}),
236
+ // Keep Git/MSYS2 Bash in the workspace directory instead of
237
+ // changing to $HOME on login-shell startup.
238
+ CHERE_INVOKING: "1",
239
+ },
240
+ sandboxPolicy: request.sandboxPolicy ?? this.ctx.sandboxPolicy.resolve(),
241
+ };
242
+ }
243
+ argv(mode, command) {
244
+ return [this.executableFor(mode), "--login", "-c", command];
245
+ }
246
+ guardedArgv(command, mode) {
247
+ assertNativeGuard(mode);
248
+ return [GUARD_EXECUTABLE, "--", ...this.argv(mode, command)];
249
+ }
250
+ policy(spec) {
251
+ if (!spec.sandboxPolicy) {
252
+ throw new Error("git-bash: resolved execution is missing sandbox policy");
253
+ }
254
+ return spec.sandboxPolicy;
255
+ }
256
+ async confine(command, policy, signal) {
257
+ this.ensureServerDaclNormalized();
258
+ // `ctx.sandbox.confine` is async; await it before spreading so the
259
+ // runner-failure rules extend the resolved wrap rather than a promise.
260
+ const confined = await this.ctx.sandbox.confine(this.guardedArgv(command, policy.mode), policy, signal);
261
+ return {
262
+ ...confined,
263
+ runnerFailureRules: [...confined.runnerFailureRules, GUARD_FAILURE_RULE],
264
+ };
265
+ }
266
+ serverDaclNormalized = false;
267
+ ensureServerDaclNormalized() {
268
+ if (this.serverDaclNormalized)
269
+ return;
270
+ this.serverDaclNormalized = true;
271
+ normalizeServerDefaultDacl();
272
+ }
273
+ async execute(spec) {
274
+ const policy = this.policy(spec);
275
+ const { mode } = policy;
276
+ if (mode === "danger-full-access") {
277
+ // Unconfined, but still the configured Git Bash. The host base class
278
+ // hardcodes `["bash", "-c", …]` (a PATH lookup), which would silently
279
+ // ignore `executable` and DSH_GIT_BASH_PATH; route through the same
280
+ // argv the confined branch builds so all three modes share one
281
+ // resolution chain.
282
+ const execution = await this.executeArgv(spec, this.argv(mode, spec.command));
283
+ return GitBashExecutor.decorateResult(execution, (result) => ({
284
+ ...result,
285
+ sandbox: { mode, denied: false },
286
+ }));
287
+ }
288
+ let confined;
289
+ const execution = await this.executeArgv(spec, async (signal) => {
290
+ const prepared = await this.confine(spec.command, { ...policy, mode }, signal);
291
+ signal.throwIfAborted();
292
+ confined = prepared;
293
+ return prepared.argv;
294
+ }, (process) => {
295
+ const facts = confined;
296
+ if (facts === undefined)
297
+ return;
298
+ this.processFacts.set(process, {
299
+ mode,
300
+ enforcement: facts.enforcement,
301
+ denialSignatures: facts.denialSignatures,
302
+ runnerFailureRules: facts.runnerFailureRules,
303
+ runnerProgram: facts.argv[0],
304
+ workdir: spec.workdir,
305
+ });
306
+ });
307
+ return GitBashExecutor.decorateResult(execution, (result) => {
308
+ if (confined === undefined) {
309
+ return { ...result, sandbox: { mode, denied: false } };
310
+ }
311
+ const runnerFailure = classifyRunnerFailure(result.exitCode, result.stderr.text, confined.runnerFailureRules);
312
+ if (runnerFailure !== undefined) {
313
+ throw new SandboxUnavailableError(mode, describeGuardFailure(runnerFailure.detail));
314
+ }
315
+ return {
316
+ ...result,
317
+ sandbox: {
318
+ mode,
319
+ denied: classifyDenial(result, confined.denialSignatures),
320
+ enforcement: confined.enforcement,
321
+ },
322
+ };
323
+ }, (error) => {
324
+ if (spec.signal?.aborted === true)
325
+ spec.signal.throwIfAborted();
326
+ if (confined !== undefined && isRunnerSpawnFailure(error, confined.argv[0], spec.workdir)) {
327
+ throw new SandboxUnavailableError(mode, String(error));
328
+ }
329
+ throw error;
330
+ });
331
+ }
332
+ /**
333
+ * Decorate the handle's foreground projection in place, memoized once. The
334
+ * handle keeps its identity (never wrapped in a second object) because the
335
+ * per-process facts and `onProcessDone` key on the exact instance.
336
+ */
337
+ static decorateResult(execution, map, mapError) {
338
+ const base = execution.result.bind(execution);
339
+ let decorated;
340
+ execution.result = () => {
341
+ decorated ??= mapError === undefined ? base().then(map) : base().then(map, mapError);
342
+ return decorated;
343
+ };
344
+ return execution;
345
+ }
346
+ /**
347
+ * Stamp per-process sandbox facts before `done` settles. Full-access
348
+ * processes carry no facts; provider rejections are classified as runner
349
+ * failures rather than denials.
350
+ */
351
+ onProcessDone(proc, stderr, providerRejected, providerError) {
352
+ const facts = this.processFacts.get(proc);
353
+ if (facts !== undefined) {
354
+ this.processFacts.delete(proc);
355
+ const runnerFailed = providerRejected
356
+ ? isRunnerSpawnFailure(providerError, facts.runnerProgram, facts.workdir)
357
+ : classifyRunnerFailure(proc.exitCode, stderr, facts.runnerFailureRules) !== undefined;
358
+ proc.sandbox = {
359
+ mode: facts.mode,
360
+ denied: !runnerFailed && matchesSignature(proc.exitCode, stderr, facts.denialSignatures),
361
+ enforcement: facts.enforcement,
362
+ ...(runnerFailed ? { runnerFailed } : {}),
363
+ };
364
+ }
365
+ super.onProcessDone(proc, stderr, providerRejected, providerError);
366
+ }
367
+ }
368
+ export default GitBashExecutor;
369
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ cmake_minimum_required(VERSION 3.25)
2
+ project(dsh_msys_token_guard LANGUAGES CXX)
3
+
4
+ set(DETOURS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/vendor/detours")
5
+ add_library(detours STATIC
6
+ "${DETOURS_DIR}/detours.cpp"
7
+ "${DETOURS_DIR}/modules.cpp"
8
+ "${DETOURS_DIR}/disasm.cpp"
9
+ "${DETOURS_DIR}/image.cpp"
10
+ "${DETOURS_DIR}/creatwth.cpp"
11
+ )
12
+ target_include_directories(detours PUBLIC "${DETOURS_DIR}")
13
+ target_compile_definitions(detours PRIVATE WIN32_LEAN_AND_MEAN _WIN32_WINNT=0x0A00)
14
+ set_target_properties(detours PROPERTIES
15
+ MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>"
16
+ )
17
+
18
+ add_executable(msys-token-guard msys-token-guard.cpp)
19
+ add_library(msys-token-guard-hook SHARED msys-token-guard-hook.cpp)
20
+
21
+ foreach(target IN ITEMS msys-token-guard msys-token-guard-hook)
22
+ target_compile_features(${target} PRIVATE cxx_std_20)
23
+ target_compile_definitions(${target} PRIVATE UNICODE _UNICODE)
24
+ target_link_libraries(${target} PRIVATE detours advapi32)
25
+ set_target_properties(${target} PROPERTIES
26
+ MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>"
27
+ RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin/win32-x64"
28
+ RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_SOURCE_DIR}/bin/win32-x64"
29
+ RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/bin/win32-x64"
30
+ RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_CURRENT_SOURCE_DIR}/bin/win32-x64"
31
+ RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_CURRENT_SOURCE_DIR}/bin/win32-x64"
32
+ )
33
+ endforeach()
34
+
35
+ if(MSVC)
36
+ target_compile_options(detours PRIVATE
37
+ /W4 /WX /GS /guard:cf /sdl /utf-8 /Zc:inline /Zc:preprocessor
38
+ )
39
+ foreach(target IN ITEMS msys-token-guard msys-token-guard-hook)
40
+ target_compile_options(${target} PRIVATE
41
+ /W4 /WX /permissive- /EHsc /GS /guard:cf /sdl /utf-8
42
+ /Zc:__cplusplus /Zc:inline /Zc:preprocessor
43
+ )
44
+ target_link_options(${target} PRIVATE
45
+ /DYNAMICBASE /NXCOMPAT /guard:cf /CETCOMPAT /OPT:REF /OPT:ICF /Brepro
46
+ )
47
+ endforeach()
48
+ target_link_options(msys-token-guard PRIVATE
49
+ "/MANIFESTUAC:level='asInvoker' uiAccess='false'"
50
+ )
51
+ target_link_options(msys-token-guard-hook PRIVATE
52
+ "/EXPORT:DetourFinishHelperProcess,@1,NONAME"
53
+ )
54
+ else()
55
+ foreach(target IN ITEMS detours msys-token-guard msys-token-guard-hook)
56
+ target_compile_options(${target} PRIVATE -Wall -Wextra -Wpedantic -Werror)
57
+ endforeach()
58
+ endif()