aboutsummaryrefslogtreecommitdiff
path: root/lib/compilers
diff options
context:
space:
mode:
Diffstat (limited to 'lib/compilers')
-rw-r--r--lib/compilers/argument-parsers.ts19
-rw-r--r--lib/compilers/haskell.ts6
2 files changed, 22 insertions, 3 deletions
diff --git a/lib/compilers/argument-parsers.ts b/lib/compilers/argument-parsers.ts
index 414d29880..9593f2376 100644
--- a/lib/compilers/argument-parsers.ts
+++ b/lib/compilers/argument-parsers.ts
@@ -950,3 +950,22 @@ export class FlangParser extends ClangParser {
return possible;
}
}
+
+export class GHCParser extends GCCParser {
+ static override async parse(compiler) {
+ const results = await Promise.all([this.getOptions(compiler, '--help')]);
+ const options = Object.assign({}, ...results);
+ await this.setCompilerSettingsFromOptions(compiler, options);
+ return compiler;
+ }
+
+ static override async getOptions(compiler, helpArg) {
+ const optionFinder1 = /^ {4}(-[\w[\]]+)\s+(.*)/i;
+ const optionFinder2 = /^ {4}(-[\w[\]]+)/;
+ const result = await compiler.execCompilerCached(compiler.compiler.exe, helpArg.split(' '));
+ const options = result.code === 0 ? this.parseLines(result.stdout, optionFinder1, optionFinder2) : {};
+
+ compiler.possibleArguments.populateOptions(options);
+ return options;
+ }
+}
diff --git a/lib/compilers/haskell.ts b/lib/compilers/haskell.ts
index 4446127e7..de5f054d8 100644
--- a/lib/compilers/haskell.ts
+++ b/lib/compilers/haskell.ts
@@ -28,7 +28,7 @@ import type {PreliminaryCompilerInfo} from '../../types/compiler.interfaces.js';
import type {ParseFiltersAndOutputOptions} from '../../types/features/filters.interfaces.js';
import {BaseCompiler} from '../base-compiler.js';
-import {ClangParser} from './argument-parsers.js';
+import {GHCParser} from './argument-parsers.js';
export class HaskellCompiler extends BaseCompiler {
static get key() {
@@ -76,7 +76,7 @@ export class HaskellCompiler extends BaseCompiler {
return [libPathFlag + '.', ...this.getSharedLibraryPaths(libraries).map(path => libPathFlag + path)];
}
- override getArgumentParser() {
- return ClangParser;
+ override getArgumentParser(): any {
+ return GHCParser;
}
}