Files
compiler-explorer/etc/scripts/ce-properties-wizard
dependabot[bot] f8db7a4b55 Bump pytest from 9.0.2 to 9.0.3 in /etc/scripts/ce-properties-wizard (#8625)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 9.0.2 to
9.0.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pytest-dev/pytest/releases">pytest's
releases</a>.</em></p>
<blockquote>
<h2>9.0.3</h2>
<h1>pytest 9.0.3 (2026-04-07)</h1>
<h2>Bug fixes</h2>
<ul>
<li>
<p><a
href="https://redirect.github.com/pytest-dev/pytest/issues/12444">#12444</a>:
Fixed <code>pytest.approx</code> which now correctly takes into account
<code>~collections.abc.Mapping</code> keys order to compare them.</p>
</li>
<li>
<p><a
href="https://redirect.github.com/pytest-dev/pytest/issues/13634">#13634</a>:
Blocking a <code>conftest.py</code> file using the <code>-p no:</code>
option is now explicitly disallowed.</p>
<p>Previously this resulted in an internal assertion failure during
plugin loading.</p>
<p>Pytest now raises a clear <code>UsageError</code> explaining that
conftest files are not plugins and cannot be disabled via
<code>-p</code>.</p>
</li>
<li>
<p><a
href="https://redirect.github.com/pytest-dev/pytest/issues/13734">#13734</a>:
Fixed crash when a test raises an exceptiongroup with
<code>__tracebackhide__ = True</code>.</p>
</li>
<li>
<p><a
href="https://redirect.github.com/pytest-dev/pytest/issues/14195">#14195</a>:
Fixed an issue where non-string messages passed to <!-- raw HTML omitted
-->unittest.TestCase.subTest()<!-- raw HTML omitted --> were not
printed.</p>
</li>
<li>
<p><a
href="https://redirect.github.com/pytest-dev/pytest/issues/14343">#14343</a>:
Fixed use of insecure temporary directory (CVE-2025-71176).</p>
</li>
</ul>
<h2>Improved documentation</h2>
<ul>
<li><a
href="https://redirect.github.com/pytest-dev/pytest/issues/13388">#13388</a>:
Clarified documentation for <code>-p</code> vs
<code>PYTEST_PLUGINS</code> plugin loading and fixed an incorrect
<code>-p</code> example.</li>
<li><a
href="https://redirect.github.com/pytest-dev/pytest/issues/13731">#13731</a>:
Clarified that capture fixtures (e.g. <code>capsys</code> and
<code>capfd</code>) take precedence over the <code>-s</code> /
<code>--capture=no</code> command-line options in <code>Accessing
captured output from a test function
&lt;accessing-captured-output&gt;</code>.</li>
<li><a
href="https://redirect.github.com/pytest-dev/pytest/issues/14088">#14088</a>:
Clarified that the default <code>pytest_collection</code> hook sets
<code>session.items</code> before it calls
<code>pytest_collection_finish</code>, not after.</li>
<li><a
href="https://redirect.github.com/pytest-dev/pytest/issues/14255">#14255</a>:
TOML integer log levels must be quoted: Updating reference
documentation.</li>
</ul>
<h2>Contributor-facing changes</h2>
<ul>
<li>
<p><a
href="https://redirect.github.com/pytest-dev/pytest/issues/12689">#12689</a>:
The test reports are now published to Codecov from GitHub Actions.
The test statistics is visible <a
href="https://app.codecov.io/gh/pytest-dev/pytest/tests">on the web
interface</a>.</p>
<p>-- by <code>aleguy02</code></p>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="a7d58d7a21"><code>a7d58d7</code></a>
Prepare release version 9.0.3</li>
<li><a
href="089d98199c"><code>089d981</code></a>
Merge pull request <a
href="https://redirect.github.com/pytest-dev/pytest/issues/14366">#14366</a>
from bluetech/revert-14193-backport</li>
<li><a
href="8127eaf4ab"><code>8127eaf</code></a>
Revert &quot;Fix: assertrepr_compare respects dict insertion order (<a
href="https://redirect.github.com/pytest-dev/pytest/issues/14050">#14050</a>)
(<a
href="https://redirect.github.com/pytest-dev/pytest/issues/14193">#14193</a>)&quot;</li>
<li><a
href="99a7e6029e"><code>99a7e60</code></a>
Merge pull request <a
href="https://redirect.github.com/pytest-dev/pytest/issues/14363">#14363</a>
from pytest-dev/patchback/backports/9.0.x/95d8423bd...</li>
<li><a
href="ddee02a578"><code>ddee02a</code></a>
Merge pull request <a
href="https://redirect.github.com/pytest-dev/pytest/issues/14343">#14343</a>
from bluetech/cve-2025-71176-simple</li>
<li><a
href="74eac6916f"><code>74eac69</code></a>
doc: Update training info (<a
href="https://redirect.github.com/pytest-dev/pytest/issues/14298">#14298</a>)
(<a
href="https://redirect.github.com/pytest-dev/pytest/issues/14301">#14301</a>)</li>
<li><a
href="f92dee777c"><code>f92dee7</code></a>
Merge pull request <a
href="https://redirect.github.com/pytest-dev/pytest/issues/14267">#14267</a>
from pytest-dev/patchback/backports/9.0.x/d6fa26c62...</li>
<li><a
href="7ee58acc87"><code>7ee58ac</code></a>
Merge pull request <a
href="https://redirect.github.com/pytest-dev/pytest/issues/12378">#12378</a>
from Pierre-Sassoulas/fix-implicit-str-concat-and-d...</li>
<li><a
href="37da870d37"><code>37da870</code></a>
Merge pull request <a
href="https://redirect.github.com/pytest-dev/pytest/issues/14259">#14259</a>
from mitre88/patch-4 (<a
href="https://redirect.github.com/pytest-dev/pytest/issues/14268">#14268</a>)</li>
<li><a
href="c34bfa3b7a"><code>c34bfa3</code></a>
Add explanation for string context diffs (<a
href="https://redirect.github.com/pytest-dev/pytest/issues/14257">#14257</a>)
(<a
href="https://redirect.github.com/pytest-dev/pytest/issues/14266">#14266</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/pytest-dev/pytest/compare/9.0.2...9.0.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pytest&package-manager=uv&previous-version=9.0.2&new-version=9.0.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/compiler-explorer/compiler-explorer/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-14 20:51:46 -05:00
..

CE Properties Wizard

An interactive command-line tool for adding custom compilers to your local Compiler Explorer installation.

Features

  • Automatic Detection: Detects compiler type and language from the executable path
  • Auto-Discovery: Automatically finds and adds all compilers in your PATH
  • Interactive Mode: Guided prompts for configuration
  • Automation Support: Command-line flags for scripting
  • Group Management: Automatically adds compilers to appropriate groups
  • Validation: Validates generated properties
  • Safe Updates: Only adds/updates, never removes existing configurations

Requirements

The wizard requires Python 3.10+ and uv. The run scripts handle all setup automatically.

Usage

Interactive Mode

Run without arguments for a fully interactive experience:

Linux/macOS:

./run.sh

Windows:

.\run.ps1

Path-First Mode

Provide a compiler path to skip the first prompt:

Linux/macOS:

./run.sh /usr/local/bin/g++-13

Windows:

.\run.ps1 "C:\MinGW\bin\g++.exe"

Automated Mode

Use command-line flags to automate the process:

Linux/macOS:

./run.sh /usr/local/bin/g++-13 --yes

Windows:

.\run.ps1 "C:\MinGW\bin\g++.exe" --yes

Full Automation Example

Linux/macOS:

./run.sh /path/to/compiler \
  --id custom-gcc-13 \
  --name "GCC 13.2.0" \
  --group gcc \
  --options "-std=c++20" \
  --language c++ \
  --yes

Windows:

.\run.ps1 "C:\path\to\compiler.exe" `
  --id custom-gcc-13 `
  --name "GCC 13.2.0" `
  --group gcc `
  --options "-std=c++20" `
  --language c++ `
  --yes

Auto-Discovery

Automatically discover and add all compilers in your PATH:

./auto_discover_compilers.py --dry-run              # Preview what would be found
./auto_discover_compilers.py --languages c++,rust   # Add only C++ and Rust compilers
./auto_discover_compilers.py --yes                  # Add all found compilers automatically

Batch Processing

Add multiple compilers with a simple loop:

Linux/macOS:

for compiler in /opt/compilers/*/bin/*; do
    ./run.sh "$compiler" --yes
done

Windows:

Get-ChildItem "C:\Compilers\*\bin\*.exe" | ForEach-Object {
    .\run.ps1 $_.FullName --yes
}

Command-Line Options

  • COMPILER_PATH: Path to the compiler executable (optional in interactive mode)
  • --id: Compiler ID (auto-generated if not specified)
  • --name: Display name for the compiler
  • --group: Compiler group to add to (e.g., gcc, clang)
  • --options: Default compiler options
  • --language: Programming language (auto-detected if not specified)
  • --yes, -y: Skip confirmation prompts
  • --non-interactive: Run in non-interactive mode with auto-detected values
  • --config-dir: Path to etc/config directory (auto-detected if not specified)
  • --verify-only: Only detect and display compiler information without making changes
  • --list-types: List all supported compiler types and exit
  • --reorganize LANGUAGE: Reorganize an existing properties file for the specified language
  • --validate-discovery: Run discovery validation to verify the compiler is detected (default for local environment)
  • --env ENV: Environment to target (local, amazon, etc.) - defaults to 'local'
  • --sdk-path: Windows SDK base path for MSVC compilers (e.g., D:/efs/compilers/windows-kits-10)

Supported Languages

The wizard currently supports:

Systems Languages:

  • C++, C, CUDA
  • Rust, Zig, V, Odin
  • Carbon, Mojo

Popular Compiled Languages:

  • D (DMD, LDC, GDC)
  • Swift, Nim, Crystal
  • Go, Kotlin, Java

Functional Languages:

  • Haskell (GHC)
  • OCaml, Scala

.NET Languages:

  • C#, F#

Scripting/Dynamic Languages:

  • Python, Ruby, Julia
  • Dart, Elixir, Erlang

Other Languages:

  • Fortran, Pascal, Ada
  • COBOL, Assembly (NASM, GAS, YASM)

Compiler Detection

The wizard attempts to detect compiler type by running version commands:

  • GCC: --version
  • Clang: --version
  • Intel: --version
  • MSVC: /help
  • NVCC: --version
  • Rust: --version
  • Go: version
  • Python: --version

If detection fails, you can manually specify the compiler type.

MSVC Auto-Configuration

When adding MSVC compilers, the wizard automatically configures additional tools:

Demangler Configuration

  • Automatic Detection: Detects undname.exe from the MSVC installation path
  • Architecture Matching: Uses the same architecture as the compiler (x64, x86, arm64)
  • Auto-Configuration: Sets demanglerType=win32 and demangler=<path-to-undname.exe>

Objdumper Configuration

  • LLVM Detection: Automatically detects llvm-objdump.exe if available in the MSVC installation
  • Conditional Setup: Only adds objdumper configuration when llvm-objdump.exe is found
  • Auto-Configuration: Sets objdumperType=llvm and objdumper=<path-to-llvm-objdump.exe>

Windows SDK Integration

  • Interactive Prompt: Prompts for Windows SDK path if auto-detection fails
  • Command-Line Option: Use --sdk-path to specify SDK path non-interactively
  • Include/Library Paths: Automatically configures MSVC include and library paths

Example MSVC Usage

Windows (Interactive):

.\run.ps1 "D:\efs\compilers\msvc-2022-ce\VC\Tools\MSVC\14.34.31933\bin\Hostx64\x64\cl.exe"

Windows (Non-Interactive):

.\run.ps1 "D:\efs\compilers\msvc-2022-ce\VC\Tools\MSVC\14.34.31933\bin\Hostx64\x64\cl.exe" `
  --sdk-path "D:\efs\compilers\windows-kits-10" `
  --non-interactive

The wizard will automatically configure:

  • Demangler: D:/efs/compilers/msvc-2022-ce/VC/Tools/MSVC/14.34.31933/bin/Hostx64/x64/undname.exe
  • Objdumper: D:/efs/compilers/msvc-2022-ce/VC/Tools/Llvm/x64/bin/llvm-objdump.exe (if available)
  • Windows SDK include and library paths

Configuration Files

The wizard modifies <language>.local.properties files in etc/config/. It:

  • Preserves existing content and formatting
  • Creates backup files before modification
  • Adds compilers to groups by default
  • Ensures unique compiler IDs

Examples

Add a custom GCC installation

Linux/macOS:

./run.sh /opt/gcc-13.2.0/bin/g++

Windows:

.\run.ps1 "C:\TDM-GCC-64\bin\g++.exe"

Add a cross-compiler

Linux/macOS:

./run.sh /usr/bin/arm-linux-gnueabihf-g++ \
  --name "ARM GCC 11.2" \
  --group arm-gcc \
  --yes

Windows:

.\run.ps1 "C:\arm-toolchain\bin\arm-none-eabi-g++.exe" `
  --name "ARM GCC 11.2" `
  --group arm-gcc `
  --yes

Add a Python interpreter

Linux/macOS:

./run.sh /usr/local/bin/python3.12 --yes

Windows:

.\run.ps1 "C:\Python312\python.exe" --yes

Verify compiler detection only

Linux/macOS:

./run.sh /usr/bin/g++-13 --verify-only

Windows:

.\run.ps1 "C:\MinGW\bin\g++.exe" --verify-only

List all supported compiler types

Linux/macOS:

./run.sh --list-types

Windows:

.\run.ps1 --list-types

This will output something like:

Detected compiler information:
  Path: /usr/bin/g++-13
  Language: C++
  Compiler Type: gcc
  Version: 13.2.0
  Semver: 13.2.0
  Suggested ID: custom-gcc-13-2-0
  Suggested Name: GCC 13.2.0
  Suggested Group: gcc

Troubleshooting

Compiler not detected

If the wizard can't detect your compiler type, it will prompt you to select one manually.

Permission errors

Ensure you have write permissions to the etc/config directory.

Validation failures

If validation reports errors, check the generated properties file for syntax issues. You can run npm run test:props to validate all property files.

Development

To contribute to the wizard:

  1. Format code: ./run.sh --format
  2. Check formatting: ./run.sh --format --check
  3. Run tests: uv run pytest (after uv sync --all-extras)

The --format flag runs black, ruff, and pytype formatters on the codebase.