curl/curl
Tooling
The scripts and tools that come with the source.
Style and lint
| Tool | Purpose |
|---|---|
scripts/checksrc.pl |
C-style enforcement (column width, brace placement, banned APIs). Run via make checksrc. |
scripts/checksrc-all.pl |
Recursive checksrc over the whole tree |
scripts/spacecheck.pl |
Tabs and trailing whitespace detection |
scripts/badwords + scripts/badwords.txt |
Catches words/phrases that should not appear in docs (e.g. AI clichés, deprecated terms) |
.clang-tidy.yml |
Configuration for clang-tidy used by .github/workflows/codeql.yml-adjacent jobs |
scripts/cmakelint.sh |
Lints CMakeLists.txt files |
scripts/perlcheck.sh |
Runs perlcritic against the harness Perl scripts |
scripts/pythonlint.sh |
Runs flake8 against test scripts |
CI runs all of these in .github/workflows/checksrc.yml and .github/workflows/checkdocs.yml.
Documentation toolchain
Man pages and the curl website are generated from markdown sources under docs/cmdline-opts/ and docs/libcurl/opts/. The format is "curldown" — restricted Markdown described in docs/CURLDOWN.md.
| Tool | Purpose |
|---|---|
scripts/managen |
Generates the curl.1 and libcurl-*.3 nroff sources |
scripts/cd2nroff |
Converts a single curldown file to nroff |
scripts/nroff2cd |
Reverse of cd2nroff (used to migrate old man pages, kept for testing) |
scripts/cd2cd |
Round-trip canonicaliser |
scripts/cdall |
Render every .md under docs/ |
scripts/mdlinkcheck |
Validates links in markdown docs |
make invokes the relevant scripts as part of building docs/.
Release tooling
| Tool | Purpose |
|---|---|
scripts/maketgz |
Builds the release tarball |
scripts/dmaketgz |
Docker-wrapped tarball build |
scripts/release-notes.pl |
Auto-generates the running RELEASE-NOTES from git log |
scripts/contrithanks.sh |
Updates docs/THANKS from git history |
scripts/contributors.sh |
Lists contributors in human-readable form |
scripts/verify-release |
Re-runs distcheck style validation on a built tarball |
scripts/release-tools.sh |
Cron entry-point for the release workflow |
docs/RELEASE-PROCEDURE.md |
The maintainer's runbook |
Build helpers
| Tool | Purpose |
|---|---|
scripts/mk-ca-bundle.pl |
Generate a curl-friendly CA bundle from Mozilla's NSS source |
scripts/mk-unity.pl |
Build "unity" amalgamation files (used by some CI variants) |
lib/optiontable.pl |
Generates lib/easyoptions.c from the option list |
src/mkhelp.pl |
Generates src/tool_hugehelp.c (built-in --manual text) |
src/mk-file-embed.pl |
Embeds files into the curl tool binary |
Test helpers
| Tool | Purpose |
|---|---|
tests/runtests.pl |
The main test driver |
tests/testcurl.pl |
The classic autobuild harness |
tests/memanalyze.pl |
Parses CURL_MEMDEBUG= logs |
tests/runner.pm |
Test runner state machine |
tests/server/ |
A dozen small protocol servers (sws.c, ftpd.c, ...) used as test fixtures |
tests/secureserver.pl |
TLS wrapper for the in-tree HTTP/FTP servers |
tests/sshserver.pl |
Sets up an OpenSSH instance with an isolated configuration |
tests/devtest.pl |
Quick "is the harness alive?" check |
tests/valgrind.pm + valgrind.supp |
Valgrind hooks |
CI configuration
All CI files live under .github/workflows/. The most important:
linux.yml,macos.yml,windows.yml— the platform matrixnon-native.yml— cross-compiled targetshttp3-linux.yml— HTTP/3 variantsconfigure-vs-cmake.yml— drift detectiondistcheck.yml— release tarball validationcodeql.yml— GitHub static analysisfuzz.yml— short fuzz on each PRappveyor.ymlandappveyor.sh— Windows-specific complementary CI.circleci/— additional CI provider
See docs/tests/CI.md for the project's own description of what runs where.
Editor settings
The repo ships .editorconfig, .clang-tidy.yml, and .dir-locals.el for Emacs. Most editors auto-pick the right indentation if you respect .editorconfig (2-space indent, no tabs, 79-column ruler).
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.