Open-Source Wikis

/

curl

/

How to contribute

/

Tooling

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 matrix
  • non-native.yml — cross-compiled targets
  • http3-linux.yml — HTTP/3 variants
  • configure-vs-cmake.yml — drift detection
  • distcheck.yml — release tarball validation
  • codeql.yml — GitHub static analysis
  • fuzz.yml — short fuzz on each PR
  • appveyor.yml and appveyor.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.

Tooling – curl wiki | Factory