Skip to content

Releases: rizsotto/Bear

4.1.1

04 Apr 04:23
4.1.1
9fe478d

Choose a tag to compare

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 DESTDIR support 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 anyhow error handling

Performance

  • Eliminate temporary String allocations in flag pattern matching
  • Remove intermediate Vec<String> from FlagMatch
  • Pre-allocate Vec capacity in parse_arguments and parse_environment
  • Replace Box<dyn Arguments> with Argument enum (static dispatch)

Code Generation Overhaul

  • Extract bear-codegen crate from build.rs flag generation
  • Add flag dedup and conflict detection during inheritance
  • Add colon separator patterns and pass-through flag support
  • Add flag terminator support
  • Introduce ResolvedTable with snapshot, schema validation, and property-based tests

Internal Refactoring

  • Decouple intercept layer from semantic compiler recognition
  • Extract EntryFilter trait and FilteredOutputWriter into filtering module
  • Tighten module visibility (pub to pub(super) and private)
  • Simplify CompilerCommand to Command, remove OutputCommand wrapper

Documentation

  • Updated man page with correct schema version, complete compiler list, and cc/c++ defaults
  • Cleaned up README

Closed Issues

  • #683 - bear generates invalid canonical paths
  • #682 - install.sh should also have a DESTDIR variable

Full Changelog: 4.1.0...4.1.1

4.1.0

28 Mar 13:06
4.1.0
ca53f3b

Choose a tag to compare

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.sh with build-time INTERCEPT_LIBDIR validation, 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/pclose instead of panicking
  • fix: replace panic with TryFrom error for empty Execution arguments
  • fix: return fmt::Error instead of panicking in Configuration Display impl
  • fix: handle Prefix flags with = in name in build-time codegen

Robustness & Stability

  • Replace multiple panic!/unwrap paths with proper error handling (thiserror, TryFrom, fmt::Error)
  • Reimplement system()/popen() on top of posix_spawnp for safer process creation
  • Add hardened interception tests for environment sabotage scenarios
  • Replace serde_yml with serde-saphyr for 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.rs into module directories
  • Split output module (formats.rs, writers.rs) into focused submodules
  • Centralize envp traversal into envp_iter iterator; consolidate session context
  • Replace empty-string sentinels with Option<String>
  • Extensive new test coverage across output, compiler interpreter, and interception modules

New Contributors

Full Changelog: 4.0.4...4.1.0

4.0.4

28 Feb 07:08
4.0.4
da19b6f

Choose a tag to compare

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

Full Changelog: 4.0.3...4.0.4

4.0.3

09 Feb 10:30
4.0.3
5601055

Choose a tag to compare

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

Full Changelog: 4.0.2...4.0.3

4.0.2

18 Jan 05:54
4.0.2
42e37c8

Choose a tag to compare

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

Full Changelog: 4.0.1...4.0.2

4.0.1

11 Jan 11:38
4.0.1
ec39e61

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: 4.0.0...4.0.1

4.0.0

03 Jan 12:14
4.0.0
a468bae

Choose a tag to compare

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

23 Mar 08:35

Choose a tag to compare

Features:

Bugfixes:

  • citnames: allow pre/postfixes to cc & c++ compiler calls (@jan-krieg)
  • citnames: Add missing stdlib header (@ruifm )
  • cmake: Add BUILD_ALWAYS to ensure BearSource rebuilds (@inaki-amatria)

3.1.5

26 Sep 14:08

Choose a tag to compare

Bugfixes:

3.1.4

18 May 12:46

Choose a tag to compare

Bugfixes:

  • citnames: Allow for include flag glued to the parameter (#572 , @ljanyst)
  • intercept: gRPC dependency usage fix (#567, #569, @drbeco )