{"id":23567228,"url":"https://github.com/valentindebon/bconf","last_synced_at":"2026-04-16T18:06:28.911Z","repository":{"id":268944138,"uuid":"905874662","full_name":"ValentinDebon/bconf","owner":"ValentinDebon","description":"Yet another build system","archived":false,"fork":false,"pushed_at":"2024-12-19T20:37:53.000Z","size":29,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-12-29T20:16:15.613Z","etag":null,"topics":["build-system","developer-tools","gnu-make","shell"],"latest_commit_sha":null,"homepage":"https://www.heylelos.org/bconf","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ValentinDebon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-19T17:39:31.000Z","updated_at":"2024-12-19T20:37:57.000Z","dependencies_parsed_at":"2024-12-19T21:30:25.258Z","dependency_job_id":"8fa92aa9-dc79-4656-8c74-631004c70c23","html_url":"https://github.com/ValentinDebon/bconf","commit_stats":null,"previous_names":["valentindebon/bconf"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ValentinDebon%2Fbconf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ValentinDebon%2Fbconf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ValentinDebon%2Fbconf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ValentinDebon%2Fbconf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ValentinDebon","download_url":"https://codeload.github.com/ValentinDebon/bconf/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239340504,"owners_count":19622702,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["build-system","developer-tools","gnu-make","shell"],"created_at":"2024-12-26T18:19:29.152Z","updated_at":"2025-11-01T22:30:45.656Z","avatar_url":"https://github.com/ValentinDebon.png","language":"C","readme":"# bconf\n\nBuild configurations, easier.\n**bconf** is a tool which purpose is to make\n_release of a software sources_ easy to create and distribute.\n\nIt generates a `configure` shell script,\nwhich in turn creates a `GNUmakefile` for GNU Make.\nThe generated configure script should be POSIX-compliant\nwhile the configure's generated Makefile targets GNU Make,\nwhich is available on most UNIX-like systems.\n\nIt aims to provide the following functionalities:\n- Makefile-based and flexible build-system during development.\n- Overridable set of rules and recipes for C software and libraries.\n- Sane default set of rules and recipes for 21st century C software and libraries.\n- Source release archive with a _standard_ build method: The infamous `./configure \u0026\u0026 make install`.\n- Mimic the GNU `configure` script behaviour, not exactly, but enough not to traumatize package maintainers.\n- Enhance components installation selection. eg: if a package maintainer only wants headers, or binaries.\n- Support builds on the build machine.\n- Support out of source tree builds.\n- Support cross compilation.\n\n## Why?\n\nbconf is a small project born from the frustration of other alternatives.\n\nAs of the time of writing (2024), the C build ecosystem is still a gigantic mess.\nThe current serious and portable alternatives are autotools, meson or cmake.\n\nGNU autotools are very powerful but extremely difficult to master.\nLearning resources are scarce. And even if you finally tame the beast, you're now\na part of a small group of programmers who are able to maintain these scripts/projects.\nIts main benefit is that generated artifacts are extremely portable,\nand thus building a source code release is always really simple.\n\nCMake is a ninja or Makefile generator frontend. CMake is extremely\nconfigurable. Just like autotools, mastering it requires arcanes behind\nmost humans patience. However, its main issue is lacking the ability to\neasily build a program on the build machine when cross compiling.\n\nMeson is a ninja generator frontend. I won't go into details, but the benefits\nof ninja are only seen on huge projects when you have a stupidly powerful build machine.\nMeson features are as restrictive as its syntax. For simple workflows, where you just\nbuild C files, it is ok, great even, as it is one of the only alternative to support\ncross-compilation transparently. My first issue with meson is that when you stray from\nthe path, creating a custom rule and having no functions in the language to generalize\nand factorize the build infrastructure quickly becomes a pain. My second issue is its\nrun-time dependency on python. Meson versions need specific versions of python on\nthe build machine to work, and we all know how managing python versions goes...\n\nSo basically, I desired the flexibility of *Makefile*s with the portability\nof autotools-generated artifacts. And that's exactly what bconf is,\na configuration script with a small GNU Make infrastructure.\nA small and simple autotools.\n\nNow, bconf is not a silver bullet. It is a way better and simpler\nalternative for small projects and sources you want to distribute.\nIt's not meant to have optimized *Makefile* rules, and if the\nbuild time becomes a problem, you may want to look at alternatives.\nThe goal of bconf is simplicity to use during development,\nsource code releases, and source code configuration/build/install.\n\n## Compiling\n\nbconf being built with bconf, if you build from SCM, you must first\nbootstrap it from the source directory, and generate the configure script.\nYou'll need, lex, yacc and a working C compiler to do so:\n```sh\nmake\n./mkconf\n```\n\nThen, configure the build and remove the bootstrap artifacts.\nYou can now build a clean version of bconf:\n```sh\n./configure\nmake clean\nmake\n```\n\n## Copying\n\nbconf is released under a BSD-3-Clause license, see the\nLICENSE file which should also have been redistributed with the sources.\n\nconfigure.in and GNUmakefile.in templates are also redistributed under the previous license.\nException made for bconf's **generated** configuration/GNUmakefile files, which are redistributed under the CC0 license.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvalentindebon%2Fbconf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvalentindebon%2Fbconf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvalentindebon%2Fbconf/lists"}