# Compiled Object files
*.slo
*.lo
*.o

# Compiled Dynamic libraries
*.so
*.dylib

# Compiled Static libraries
*.lai
*.la
*.a

*.user
*.log
*.suo

bin/
# The snap's commands (snap/snapcraft.yaml), which bin/ would hide.
!/snap/local/bin/
obj/
_ReSharper.*/

hmailserver/source/Server/hMailServer/Debug/
hmailserver/source/Server/hMailServer/hMailServer.h
hmailserver/source/Server/hMailServer/Debug (x64)/*
hmailserver/source/WebAdmin/include_versioncheck.php
hmailserver/source/Server/hMailServer/hMailServer.ncb
hmailserver/source/Server/hMailServer/hMailServer_i.c
hmailserver/source/Server/hMailServer/hMailServer_p.c
hmailserver/source/Server/hMailServer/x64/*
hmailserver/source/Server/hMailServer/Release/*
# Nested project intermediate dir (IntDir) - contains .obj/.pch etc.
hmailserver/source/Server/hMailServer/hMailServer/
hmailserver/source/Server/hMailServer.Minidump/Debug/*
hmailserver/source/Server/hMailServer.Minidump/Release/*
*.vcxproj.filters
*.orig
*.sdf
*.opensdf
*.ipch

hmailserver/test/RegressionTests/TestResult.xml
hmailserver/source/Server/hMailServer.Minidump/x64/*
hmailserver/source/Server/hMailServer.Updater/Release/*
hmailserver/source/Server/hMailServer.Updater/x64/*
# The Windows on ARM build's output (build.ps1 -Platform ARM64, hmailserver/docs/WindowsOnArm.md).
hmailserver/source/Server/hMailServer/ARM64/*
hmailserver/source/Server/hMailServer.Minidump/ARM64/*
hmailserver/source/Server/hMailServer.Updater/ARM64/*
/hmailserver/installation/Output/*
/hmailserver/test/packages/*
/hmailserver/test/RegressionTests/packages/*
/TestResult.xml
# nunit3-console writes its result file into whatever directory it was started
# from, which is not always the repository root.
TestResult.xml
/FullRun.xml
/.claude/*
CLAUDE.md
# Working notes and internal design docs - kept locally, not published.
/AGENTS.md
/CONTROL-PANEL-GAP-ANALYSIS.md
/CONTROL-PANEL-PLAN.md
/IMPLEMENTATION-NOTES.md
/REDESIGN.md
/planupdate.md
/settings.md
/updatedesigncontrolpanal_installer.md
**/.vs/*
.vscode/
/hmailserver/.claude/*

/logs/

/hmailserver/source/Tools/ControlPanel/bin/
/hmailserver/source/Tools/ControlPanel/obj/
/hmailserver/source/Tools/*/publish/
/hmailserver/source/Tools/*/publish-arm64/
/hmailserver/installation/DotNet/

# Code coverage output
/coverage/

# The update feed build/generate-update-feed.py writes for GitLab Pages. The CI
# file's pages job makes it afresh on every run; nothing keeps it in the tree.
/public/
/hmailserver/source/Tools/ControlPanel.Tests/bin/
/hmailserver/source/Tools/ControlPanel.Tests/obj/
/hmailserver/source/Tools/ControlPanel.Core/bin/
/hmailserver/source/Tools/ControlPanel.Core/obj/

.fake

# MSVC #import output. These are regenerated from the type library on every
# build, and the generated text embeds the ABSOLUTE path of the machine that
# produced it - the .tlh #includes its .tli by full path. Committing them put
# one developer's home directory into an AGPL source drop, and broke the build
# anywhere the path did not exist, because MSVC reuses a .tlh it does not judge
# stale and a fresh clone gives the .tlh and the .tlb near-identical mtimes.
*.tlh
*.tli

# Python bytecode. The three .py files under build/ are imported by their own
# dry-run tooling now and then, and the interpreter leaves this behind.
__pycache__/

# Transcripts the libraries/build-*.ps1 dependency builds write next to themselves.
libraries/build-*.log
hmailserver/test/LinuxRegressionTests/bin/
hmailserver/test/LinuxRegressionTests/obj/

# The NuGet bootstrapper the tools' restore downloads into the repository root.
# An 8.7 MB executable that is not ours, matched by no other rule here, and one
# `git add -A` away from being committed - which the binary manifest check would
# then refuse, in the middle of a release.
/.nuget/

# Obsidian, if somebody opens the repository as a vault to read the documents.
# Its workspace files are one machine's window layout and nothing else.
/.obsidian/

# Third-party binaries the build fetches or gathers (build/get-installer-binaries.ps1)
# rather than carrying in git; each is verified against hmailserver/docs/third-party-binaries.json.
/hmailserver/installation/Microsoft.VC145.CRT/
/hmailserver/installation/Extras/7za.exe
/hmailserver/installation/Extras/libmysql.dll
/hmailserver/installation/Extras/plugin/
/hmailserver/installation/SQLCE/
# The ARM64 installer's own: the ARM64 runtime, 7-Zip's ARM64 console and the
# ARM64 .NET Desktop Runtime (get-installer-binaries.ps1 and get-dotnet-runtime.ps1 -Platform ARM64).
/hmailserver/installation/ARM64/
# The MariaDB client's copy, of whichever version: the folder the manifest names, and an
# earlier version's that a checkout keeps when the manifest moves on (the script removes
# nothing; 3.4.9's until 6.3.7), which post-build still uses for a commit whose manifest
# names it. No version is written here, so that Renovate has none to move.
/libraries/mariadb-connector-c-*/
# The ADO 2.8 type libraries the server #imports: Windows' own files, copied
# from %CommonProgramFiles%\System\ado by the same script (disposition "system").
/libraries/msado28/*.tlb

# The COM wrapper the .NET tools compile against: TlbImp output from
# hMailServer.idl, made by build/generate-com-wrapper.ps1 (build.ps1,
# build-tools.ps1 and CI all run it), with the hash of the type library it was
# made from recorded beside it.
/hmailserver/source/Tools/Interop/Interop.hMailServer.dll
/hmailserver/source/Tools/Interop/Interop.hMailServer.dll.source-sha256
# The ARM64 build's, /machine:Agnostic (generate-com-wrapper.ps1 -Platform ARM64).
/hmailserver/source/Tools/Interop/ARM64/

# Keys and credentials, which never go into a commit (SECURITY.md, "Secrets and
# credentials"; CONTRIBUTING.md, "Secrets"): a git add leaves them out, and one that
# is meant to be here takes git add -f, which is the moment to ask whether it is. The
# hooks' secret scan (build/scan-secrets.py) reads what is added either way.
*.pem
*.key
*.pfx
*.p12
*.jks
*.keystore
*.ppk
*.kdbx
id_rsa
id_rsa.*
id_dsa
id_dsa.*
id_ecdsa
id_ecdsa.*
id_ed25519
id_ed25519.*
.env
.env.*
.netrc
_netrc
.npmrc
.pypirc
credentials.json
# But for the throwaway keys the tests and the installer carry on purpose: the TLS
# fixtures the regression suite serves, the Diffie-Hellman parameters the installer
# ships (public by nature), and the OpenPGP and PST fixtures under build/fixtures.
!/hmailserver/test/SSL examples/**
!/hmailserver/installation/Extras/dh2048.pem
!/build/fixtures/**

# What the coverage scripts write: build/coverage-windows.ps1 (OpenCppCoverage)
# and build/ci/linux-coverage.sh (clang source-based coverage).
/coverage-windows/
/linux-coverage/

# What build/ci/cli-packages.py writes where it is run (hmailserver/docs/CommandLinePackages.md):
# the staged package, its sdist and wheel, and a publish job's release tree.
/cli-packages/
/cli-publish/

# What the package builds keep between runs where they are run by hand (deb-local.sh,
# rpm-local.sh): the Boost Debian 12 builds (.cache/boost) and the Boost tarball
# (.cache/boost-tarball, build/ci/packages/fetch-boost.sh). In CI they are the jobs' cache.
/.cache/
# What build/ci/snap-build.sh and snapcraft leave in the checkout.
/snap-build/
/snap/*.snap
/parts/
/stage/
/prime/

# What the security scans write where they are run (build/ci/static-analysis.sh,
# semgrep.sh, dependency-scan.py, GitLab's analyzer): never committed, since a committed
# report would stand in for one a scan did not write (build/ci/security-gate.py refuses
# a tree that carries one).
/security/
/gl-sast-report.json
/semgrep.sarif
