Releases: rizsotto/Bear
Releases · rizsotto/Bear
4.1.1
What's Changed
Features
- New compiler support: MSVC, clang-cl, Intel C/C++ (icx, icpx), NVIDIA HPC SDK (nvc, nvc++, nvfortran), ARM Compiler 6, and IBM Open XL
- Windows improvements: case-insensitive executable matching and slash-prefix flag support (e.g.
/Fo,/Ot) - Environment variable forwarding: data-driven per-compiler environment variable extraction, replacing hardcoded GCC-only handling
- Install script: add
DESTDIRsupport for packaging workflows
Bug Fixes
- fix: canonical path generation on Windows stripping
\\?\prefix (#683) - fix: inconsistent flag inheritance - make all resolution transitive
- fix: replace remaining panics with proper
anyhowerror handling
Performance
- Eliminate temporary
Stringallocations in flag pattern matching - Remove intermediate
Vec<String>fromFlagMatch - Pre-allocate
Veccapacity inparse_argumentsandparse_environment - Replace
Box<dyn Arguments>withArgumentenum (static dispatch)
Code Generation Overhaul
- Extract
bear-codegencrate frombuild.rsflag generation - Add flag dedup and conflict detection during inheritance
- Add colon separator patterns and pass-through flag support
- Add flag terminator support
- Introduce
ResolvedTablewith snapshot, schema validation, and property-based tests
Internal Refactoring
- Decouple intercept layer from semantic compiler recognition
- Extract
EntryFiltertrait andFilteredOutputWriterinto filtering module - Tighten module visibility (
pubtopub(super)and private) - Simplify
CompilerCommandtoCommand, removeOutputCommandwrapper
Documentation
- Updated man page with correct schema version, complete compiler list, and
cc/c++defaults - Cleaned up README
Closed Issues
Full Changelog: 4.1.0...4.1.1
4.1.0
What's Changed
Features
- Shell completions: generate completions for bash, zsh, fish, and elvish
- Compiler executable paths: preserve full compiler executable path in compilation database; resolve bare executable filenames to absolute paths
- Install script: new
scripts/install.shwith build-timeINTERCEPT_LIBDIRvalidation, replacing manual setup - DevContainer: introduce devcontainer for streamlined development environment
Bug Fixes
- fix: inline va_arg extraction in variadic exec shims for i686 compatibility
- fix: preserve co-resident LD_PRELOAD libraries during env doctoring
- fix: restore session env vars in
system()/popen()for older glibc - fix: unify preload restoration for
system()/popen()with exec-family doctoring - fix: recover from poisoned mutex in
popen/pcloseinstead of panicking - fix: replace panic with
TryFromerror for empty Execution arguments - fix: return
fmt::Errorinstead of panicking in ConfigurationDisplayimpl - fix: handle Prefix flags with
=in name in build-time codegen
Robustness & Stability
- Replace multiple
panic!/unwrappaths with proper error handling (thiserror,TryFrom,fmt::Error) - Reimplement
system()/popen()on top ofposix_spawnpfor safer process creation - Add hardened interception tests for environment sabotage scenarios
- Replace
serde_ymlwithserde-saphyrfor YAML parsing
Compiler Recognition Overhaul
- Move compiler flag definitions from Rust source to YAML with build-time code generation
- Replace per-compiler interpreter structs with a generic
FlagBasedInterpreter - Auto-generate recognition patterns and ignored-executable lists from YAML schema
- Match ignored executables by filename instead of full path
Documentation
- Expanded README with usage guidance, platform info, and limitations
- Improved INSTALL with prerequisites, package manager instructions, and verification steps
- Improved CONTRIBUTING with developer workflow and guidelines
Internal Refactoring
- Split
config.rs,infrastructure.rsinto module directories - Split
outputmodule (formats.rs,writers.rs) into focused submodules - Centralize
envptraversal intoenvp_iteriterator; consolidate session context - Replace empty-string sentinels with
Option<String> - Extensive new test coverage across output, compiler interpreter, and interception modules
New Contributors
- @DarthGandalf made their first contribution in #676
Full Changelog: 4.0.4...4.1.0
4.0.4
What's Changed
- fix: add -arch flag to GCC flags to prevent argument loss on macOS ARM by @thisalihassan in #674
- fix: Internal f951 gfortran compiler execution not-excluded #672
- fix: flaky test in tcp module
- fix: compiler wrapper handling bugs, improve test coverage
New Contributors
- @thisalihassan made their first contribution in #674
Full Changelog: 4.0.3...4.0.4
4.0.3
What's Changed
- intercept-preload: Force use lld as the linker by @aokblast in #664 #662
- semantic: Do not require - or _ for versioned compilers by @derekschrock in #663
- semantic: Source files with identical names in separate directories erroneously dropped #667
- intercept: Crash when trying to execute a build script without shebang #666
- intercept: add IPv6 loopback address to fall back to
- intercept: reporting in wrapper mode using the configuration file only
- intercept: preload mode defends against environment variables reset
- intercept: preload library errno handling clean up
New Contributors
- @aokblast made their first contribution in #664
- @derekschrock made their first contribution in #663
Full Changelog: 4.0.2...4.0.3
4.0.2
What's Changed
- docs: update man page by @antonkesy in #653
- build: Add Windows notes for configurable paths by @alvrogd in #655
- bugfix: wrapper mode does not work with configure #656
- bugfix: preload mode does not work with vararg functions #658
- bugfix: semantic interpreter misqualifies compilations #656
New Contributors
- @antonkesy made their first contribution in #653
- @alvrogd made their first contribution in #655
Full Changelog: 4.0.1...4.0.2
4.0.1
What's Changed
- Use correct SPDX identifier for GPL by @DarthGandalf in #651
New Contributors
- @DarthGandalf made their first contribution in #651
Full Changelog: 4.0.0...4.0.1
4.0.0
What's Changed
- Full rewrite in rust language
- using simple TCP, to remove dependency on gRPC
- consuming execution events while intercepting it, to remove delay of the final output creation
- added Windows support
- removed Python dependency for integration tests
- New configuration file format
- the new format allows to specify more than just event filtering details.
3.1.6
Features:
- Add ifort and ifx support (@jgonzac)
- Add ftnfe support (@inaki-amatria)
- Add LLVM's flang support (@ruifm)
- Add xgcc and xg++ support (@wataash)
Bugfixes:
- citnames: allow pre/postfixes to cc & c++ compiler calls (@jan-krieg)
- citnames: Add missing stdlib header (@ruifm )
- cmake: Add
BUILD_ALWAYSto ensureBearSourcerebuilds (@inaki-amatria)