==================
0.8.4 / 2024-12-17
==================
  * interceptor: Allow intercepting some orignal 64bit time and offset related remapped functions
  * report: Fix indentation of generated script tags
  * report: Use Viz.js for generating call graph in the browser
  * bitrise: Save built firebuild as a build artifact
  * bitrise: Switch to M2 runner, which is the default anyway
  * contrib: Import heapsort.c from libbsd 0.12.1
  * interceptor: Use custom heapsort() with alloca() instead of qsort() on macOS
  * tests: Refactor running firebuild from the test directory
  * Load libfirebuild from full path on macOS and when testing on Linux
  * Don't pass through and fix up modified LD_LIBRARY_PATH and DYLD_LIBRARY_PATH
  * interceptor: Sort environment variables if they were fixed up by the interceptor
  * ci: Build the package on Ubuntu 24.04, too
  * tests: Work around xcodebuild ... -find gcc preventing caching
  * ci: Stop testing on macos-12 runners
  * ci: Close fds up to 200 in close_fds_exec
  * interceptor: Intercept posix_spawn_file_actions_addtcsetpgrp_np()
  * interceptor: Use last --jobserver-fds / --jobserver-auth option
  * Support GNU Make 4.4's --jobserver-auth=fifo:... jobserver style
  * Consider all programs to be GNU Make jobserver users
  * firebuild: Skip MAKEFLAGS, MFLAGS and CARGO_MAKEFLAGS from the fingerprint
  * interceptor: Add assert()-s to psfa_update_actions and return the earliest possible
  * interceptor: Allow tracking multiple identical posix_spawn_file_actions_t handles
  * interceptor: Serialize psfas array accesses with a mutex
  * interceptor: Drop obsolete, commented out CMakeList part

==================
0.8.3 / 2024-07-21
==================
  * ci: Print error when build version is less than git version
  * Drop references to *_generated.h
  * ci: Make brew overwrite files by default
  * firebuild: Use std::unordered_set for deduplicated strings
  * build: Pass -static-libasan to GCC only
  * FBB: Fix parameter type of some message-specific functions to match the way of calling them
  * test: Test pthreads interception
  * interceptor: Temporarily use global variables on non-Linux platforms
  * Intercept shm_open()
  * Support fcntl(fd, F_GETPATH, ...)
  * interceptor: Refactor disabling interception
  * interceptor: Intercept only the libc entry entry points on OS X
  * supervior: Fix handling OS X SDK provided shared libraries
  * tests: Use 'head' instead of 'ls' where shortcutting matters
  * supervisor: Fix removing fds from kqueue on OS X
  * tests: Fix environment fixup test on OS X
  * tests: Fix du use on OS X in GC test
  * tests: skip popen()-ing static binary when the static binary is not built
  * tests: Fix max entry size test on OS X
  * tests: Use /usr/bin/touch test_wait.c to make it work on OS X, too
  * supervisor: Handle that system(NULL) does not start subprocess on OS X
  * test: Fix testing sendfile() on OS X
  * tests: Post-process output of wc -l to make gc test work on OS X, too
  * tests: Don't create dangling symlinks in gc tests when invalid entries are not tested
  * interceptor: Intercept wait4() instead of wait3() on OS X
  * interceptor: Intercept *_nocancel glibc API function variants
  * interceptor: Fix skipping some intercepted function variants on OS X
  * build: Fix Xcode project generation from CMake files
  * FBB: Ignore -Wshorten-64-to-32 warnings on OS X
  * tests: Fix test_symbols script on OS X
  * ci: Don't update brew packages in brew install automatically on macos
  * ci: Retry brew install with workarounds on MacOS
  * supervisor: Ignore shm_open("apple.shm.notification_center", ...) on OS X
  * interceptor: Intercept many double underscore (__*) symbols on OS X
  * interceptor: Intercept close$NOCANCEL on OS X
  * interceptor: Fix adding wrong guard to some intercepted functions
  * interceptor: Intercept missing __* functions on OS X
  * interceptor: Refactor generate_interceptors to make it less repetitive
  * interceptor: Don't check if *64 variant of already *64 syscalls are intercepted
  * supervisor: Remove fd_ member from FileFD
  * supervisor: Fix typo and indentation
  * supervisor: Refactor pop_expected_child_fds a bit
  * interceptor: Fix send_pre_open() documentation causing Doxygen error
  * supervisor: Improve debugging output of vectors
  * interceptor: Merge tracking interception depth of signal handlers and libc calls
  * interceptor: Allow recursive interception of signal handlers and some libc calls on MacOS, too
  * doc: Add build instructions for macOS
  * supervisor: Stop at first found configuration file
  * supervisor: Look for global config file at CMAKE_INSTALL_FULL_SYSCONFDIR
  * Fix intercepting __mac_syscall()
  * macos: Install hopscotch-map with Homebrew
  * supervisor: Set DYLD_LIBRARY_PATH in firebuild if it is empty
  * readme: Add installation from source instructions on Linux and Mac
  * interceptor: Intercept __opendir2 on macOS
  * supervisor: Always ACK in handle_dlopen()
  * Intercept scandir() variants
  * interceptor: Allow interception inside dlopen() and dlmopen()
  * supervisor: Update cache size and stats on SIG{INT|QUIT|SEGV|TERM}
  * supervisor: Use memcmp() instead of strcmp() where the string lengths are known
  * supervisor: Fix splitting read-only and not read-only locations
  * build: Don't rebuild firebuild.1 man page in every incremental build
  * supervisor: Move member initializations to constants to member definitions
  * test: Test dlopen()
  * Handle when a single dlopen() loads multiple shared libraries
  * supervisor: Ignore dlopen()-ed shared libs which are not present as files on macOS
  * interceptor: Don't skip shared libraries when collecting the ones loaded by dlopen()
  * Fix handling dlopen()
  * supervisor: Fix handling seeked inherited fds
  * ci: Disable library validation on macOS
  * supervisor: Allow shm_open()-ing apple.cfprefs* shared memory
  * Ignore operations on /dev/autofs_nowait
  * supervisor: Fix skipping missing shared libraries on macOS in debug mode, too
  * interceptor: Ignore fcntl()'s F_NOCACHE and F_GETPROTECTIONCLASS commands
  * When open("foo/bar", O_DIRECTORY) returns -1 with ENOTDIR. assume foo/bar to be regular file
  * ci: Fail the macOS test early if SIP is enabled on the runner
  * Intercept kqueue() call on macOS
  * Extend posix_spawn() interception
  * interceptor: Drop unused code left over from simplifying dlopen() interception
  * interceptor: Don't notify the supervisor about dlopen() when RTLD_NOLOAD is set
  * interceptor: Intercept open$NOCANCEL and openat$NOCANCEL on macOS
  * interceptor: Put success condition in parentheses for clarity
  * Intercept mktemp()
  * Debug-print socket()'s domain parameter nicely
  * Ignore connect() in xcodebuild -find ... inside LTO linking
  * supervisor: Factor out file action handling from posix_spawn() handling
  * Handle posix_spawn() with POSIX_SPAWN_SETEXEC attribute on macOS
  * supervisor: Detect rustc when it is executed with its full path, too
  * test: Increase integration test coverage a bit
  * supervisor: Fix unused parameter in handle_kqueue
  * test: Test posix file actions handling
  * supervisor: Add FileName::parent_dir()
  * supervisor: Extend ENOTDIR handling to cover more possible cases
  * Ignore connecting to "/var/run/syslog" UNIX socket on macOS.
  * build: Declare Homebrew dependencies in Brewfile
  * interceptor: Intercept GLibc 2.39's pidfd_spawn() and pidfd_spawnp()
  * ci: Add missing graphviz formula to Brewfile
  * ci: Build .debs faster
  * ci: Don't build dbgsym packages along with .debs
  * ci: Really don't build dbgsym packages along with .debs
  * supervisor: Ignore connect()-ing to the sockets listed in ignore_locations
  * interceptor: Reset rusage timers when reporting rusage to the supervisor
  * supervisor: Factor out options handling to separate class
  * supervisor: Add -q options to suppress info messages
  * Swedish debconf template translation
  * supervisor: Check on macOS that the system allows interception
  * interceptor: Sort loaded shared libraries in scproc_query
  * interceptor: Identify posix_spawn_file_actions_t handles by their full content
  * ci: Set static macos specific enviroment variables for the whole job
  * macos: Use python-jinja2 as brew dependency instead of jinja2-cli
  * build: Configure include and library paths in CMake
  * ci: Use all avaliable processors on GitHub runners
  * ci: Add Bitrise CI configuration
  * ci: Rebuild self from cache with Xcode on Bitrise
  * ci: Build with xcodebuild, too, on macOS
  * ci: Build and test the project on macOS 14, too
  * build: Use jinja2-cli Homebrew formula instead of the just removed python-jinja
  * ci: Detect HOMEBREW_PREFIX instead of mapping it to runner types
  * supervisor: Move pre-opening handling from process_posix_spawn_file_actions() to handle_open()
  * test: Test posix_spawn()-ing a dynamically linked binary, too
  * report: Deduplicate used shared libs
  * supervisor: Don't reopen inherited closed pipe
  * debian: Switch order of autopkgtest tests
  * supervisor: Ignore rustc's --out-dir directory's content
  * interceptor: Fix use-after-free in readlink() interception
  * supervisor: Fix unhandled case in ENOTDIR handling
  * interceptor: Don't set flags to 0 in pipe_request message
  * supervisor: Debug a few more fcntl() commands
  * ci: Upgrade to use actions/checkout@v4 and actions/cache@v4
  * ci: Switch to use firebuild/firebuild-action@v4
  * interceptor: Intercept __send on arm64 Linux
  * interceptor: Fix casting to the right passed size_t type in count_shared_libs_cb
  * test: Fix running integration tests under different locales
  * interceptor: Set exported symbol names with __asm__("<name>")
  * supervisor: Fix building the supervisor with 64bit time and file offset on 32bit systems
  * interceptor: Use 64bit time and file offset function variants via get_ic_orig_*()
  * interceptor: Abort on time64-enabled systems when intercepting 32 bit symbol variants
  * supervisor: Work around Clang ASan falsely detecting leaking config strings
  * supervisor: Don't override SIGSEGV handler when dumping core is allowed
  * supervisor: Don't close blob fd in advance, that would be closed later.
  * supervisor: Refactor closing pre-opened blob fds when applying shortcuts
  * interceptor: Don't intercept __send on arm64 Linux starting with glibc 2.34
  * supervisor: Select passed through environment variables with regular expressions
  * supervisor: Don't intercept sandbox-exec
  * report: Break long lines in Chrome and other browsers with the same engine
  * report: Set size for background darkening with CSS instead of with JavaScript
  * report: Show darkened border around command details

==================
0.8.2 / 2023-08-24
==================
  * Fix the build 32 bit architectures
  * supervisor: Handle inherited fd offset properly
  * ci: Upgrade docker job to run multiple releases on Ubuntu and add Debian
  * test: Fix building and testing test_cmd_clone only on Linux
  * tests: Suppress yes: standard output: Broken pipe error
  * tests: Allow running tests on installed firebuild
  * debian/tests: Add autopkgtest running build time tests on installed firebuild
  * supervisor: Support GLibc 2.38 passing "--" right after "sh -c"
  * debian: Depend on at least the glibc version firebuild is built with

==================
0.8.1 / 2023-08-15
==================
  * artwork: Fix the circle in the logo to be really round
  * interceptor: Factor out some fd read write state handling from templates
  * Report error code when a call reported only once fails
  * interceptor: Treat successful copy_file_range() and sendfile() calls as reads and writes
  * report: Include file name and process potentially writing the file in parallel
  * report: List only directly and not transitively used filed in process details
  * report: Deduplicate used file strings
  * report: Register used files at the shortcut process when generating the report
  * report: Deduplicate process environments
  * supervisor: Run main loop until all interceptor connections and pipes are closed
  * supervisor: Run all cleanup and destructors when FB_EXTRA_DEBUG is defined
  * ci: Run coverage test on Debug build and increase required coverage
  * interceptor: Intercept __vfork for glibc < 2.34
  * supervisor: Show maximum resident set with "-d time"
  * supervisor: Defer clearinf obsolete finalized ExecedProcess data
  * supervisor: Free whole finalized process subtrees when it is safe
  * interceptor: Fix calling handle_exit()
  * supervisor: Track the common ancestor of processes keeping files open for writing
  * supervisor: Track the process exec_point() for files opened for writing
  * interceptor: Perform seccomp() calls in not intercepted processes
  * Use global buffer size for paths
  * supervisor: Don't use alloca() in garbage collection loops

0.8.0 / 2023-04-19
==================
  * portability: Fixes to build on Mac OS X (interception is not functional yet)
  * readme: Mention packages in the Arch Linux (AUR), Debian and Ubuntu archives
  * interceptor: Intercept seccomp() calls and always return with EINVAL error
    Fixes intercepting and caching man commands
  * supervisor: Add default quirk to ignore successful statfs() and fstatfs() calls
    Fixes shortcutting Doxygen
  * tests: Fix building all binaries for valgrind-check target
  * ci: Split running tests with valgrind to a separate job
  * supervisor: Fall back to pread() when mmap() fails when hashing a file
    Fixes shortcutting Java and javadoc again after their behavior changes
  * ci: Use firebuild to speed up firebuild builds on Linux
  * ci: Use latest Clang and scan-build versions
  * supervisor: Cache "sh" again by default and
  * supervisor: Skip caching command when parent sh -c "<command>" can be cached
  * supervisor: Ignore missing configuration settings instead of crashing
  * supervisor: Rename system_locations configuration entry to read_only_locations
  * interceptor: Make relative or absolute unsuccessfully dlopen()-ed paths absolute
  * supervisor: Treat unsuccessfully dlopen()-ed files using absolute filename as missing
    Fixes shortcutting Intel Fortran Compiler (ifort).
  * supervisor: Fix saved bytes accounting
  * supervisor: Verify stored bytes accounting in Debug builds
  * supervisor: Fix invalid stored cache size
  * supervisor: Don't report missing possible debug files when debugging cache during GC
  * ci: Add CodeQL analysis
  * supervisor: Intercept ccache, but set it to run the original compiler
    This allows relying on firebuild's caching by default even when ccache
    is installed.
  * supervisor: Shortcut only ccache and not child gcc/g++/etc. command
  * tests: Don't disable ccache in test helper scripts
    Ccache is now disabled within firebuild by default.
  * Ignore communication with GNU Make's and Cargo's jobserver
    This lets shortcutting processes that read tokens from the jobserver.
  * interceptor: Ignore getcap syscall
    It is used by Python and Node
  * supervisor: Don't store hash of dependency directory listing for rustc
    This allows shortcutting Rust + Cargo builds
  * interceptor: Report getrandom syscalls
  * interceptor: utimensat syscall accepts NULL pathname
  * supervisor: Allow configuring maximal cache entry size with default of 250MB
  * report: Include why shortcutting attempts failed
  * debian: Update short and long package description

0.2.12 / 2023-02-23
==================

  * Handle system(NULL)
  * Detect inherited file backed fds that are not not seeked to the end in the interceptor
  * report: Don't break line inside a single environment variable
  * interceptor: Wide scanf variants return EOF, too, not WEOF
  * interceptor: Fix syscall template to honor rettype and ifdef_guard
  * supervisor: Prevent adding an fd with epoll_ctl() twice to avoid errors and crashes
  * supervisor: Deduplicate dynamically allocated reasons of not shortcutting
  * report: Include more verbose reasons for not not shortcutting
  * report: Don't escape "/" in JSON strings
  * report: Escape used files to not break the JSON format
  * Dutch translation of debconf messages
  * Spanish translation of the debconf template
  * Brazilian Portuguese debconf templates translation

0.2.11 / 2023-01-21
==================

  * debian: Update copyright
  * debian: Initial German debconf translation
  * supervisor: Pass through HOME environment variable
  * tests: Skip testing orphan process handling on WSL
  * tests: Don't test with fakeroot if fakeroot does not work
  * debian: Build-depend on fakeroot (with <!nocheck>)
  * tests: Ignore ENOSYS error from memfd_create, timerfd_create and eventfd
  * tests: open(..., O_TMPFILE) returns EISDIR on WSL1, ignore that
  * supervisor: Fall back to emulating copy_file_range on ENOSYS error
  * supervisor: Fall back to renameat() if renameat2() return ENOSYS or EINVAL
  * interceptor: __gettimeofday64 is added only in Glibc 2.34
  * debian: Don't require node-d3 for building firebuild
  * interceptor: Add #ifdef guards for a few functions not existing in glibc 2.27
  * supervisor: Add minimal renameat2() wrapper when it is missing
  * interceptor: Define gettimeofday() for Glibc < 2.31, too
  * test: Ignore harmless extra symbols appearing with older toolchains
  * interceptor: Ignore new public symbols appearing on Bionic
  * common: Define CLONE_PIDFD and statx() structs and defines when they are missing
  * debian: Armel autopkgtests are slower
  * interceptor: Check and intercept missing __* variants
  * interceptor: Check if *64 syscall variants are intercepted
  * interceptor: Check the *_time64 bit variants of intercepted functions are also intercepted
  * interceptor: Check if *64 bit variants of intercepted functions are also intercepted
  * debian: Bump standards version No changes were needed
  * supervisor: Handle faccessat() with unknown dirfd
  * interceptor: MIPS has > 64 signals, don't assert() on that
  * common: Don't decode SIGSTKFLT in debugging when it is not defined
  * supervisor: Add --option=key=[] option to clear a configuration array
  * readme: bc is a required test dependency
  * interceptor: Intercept clone() with flags == CLONE_VFORK | SIGCHLD as a fork()
  * interceptor: Intercept _Fork calling pthread_atfork handlers directly
  * interceptor: Enable/disable interception of functions with #ifdef guards
  * supervisor: Add LAUNCH_TYPE_POSIX_SPAWN
  * interceptor: Don't check global intercepting_enabled in env_needs_fixup()
  * interceptor: Factor out fixing up and restoring environment to a macro
  * interceptor: Treat fallocate() and posix_fallocate() as pwrites
  * report: Fix typo in the title
  * debian: Show firebuild stats in autopkgtest
