diff --git a/CHANGELOG.md b/CHANGELOG.md index 0fd5fbe..8a5c25e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,337 +1,182 @@ # Changelog # +## 17th September 2016 ## + +### General ### + +* Maintainer's birthday! +* Cleaned up the changelog a bit +* Added kore.io +* Removed TODO.md (replaced with issues on NAB repo) +* Cleaned up README.md with markdownlint + ## 10th August 2016 ## -### General ### - -### Added ### - -* Epoxy +* Added Epoxy ## 2nd August 2016 ## -### General ### - -### Added ### - -* argparse +* Added argparse ## 4th June 2016 ## -### General ### - -### Added ### - -* CScout -* liblfds -* Genann +* Added: + * CScout + * liblfds + * Genann ## 13th May 2016 ## -### General ### - * Restored libroxml (licence clarified) - -### Added ### - -* libsixel - -### Removed ### - +* Added libsixel ## 20th April 2016 ## -### General ### - -### Added ### - -* nuklear - -### Removed ### - +* Added nuklear ## 18th April 2016 ## -### General ### - -* Fixing some of the text to be clearer and less redundant -* Putting up clarification regarding C++ - -### Added ### - -* sort -* theft -* vector.h - -### Removed ### - +* Fixed some of the text to be clearer and less redundant +* Put up clarification regarding C++ +* Added: + * sort + * theft + * vector.h ## 9th April 2016 ## -### General ### - - -### Added ### - -* XLSX I/O - -### Removed ### +* Added XLSX I/O ## 2nd April 2016 ## -### General ### - * Cleaned up some dead links - -### Added ### - -* https addresses whenever possible - -### Removed ### - -* adlint (dead link) -* Libudp (dead link) -* SDL (same page links to both SDL and SDL2) +* Changed links to point to https addresses when possible +* Removed: + * adlint (dead link) + * Libudp (dead link) + * SDL (same page links to both SDL and SDL2) ## 14th March 2016 ## -### General ### - -### Added ### - -* Collections-C -* libxo - -### Removed ### +* Added: + * Collections-C + * libxo ## 22nd February 2016 ## -### General ### - -### Added ### - -* giflib -* libgd -* C-Reduce -* cflow -* Hoedown - -### Removed ### +* Added: + * giflib + * libgd + * C-Reduce + * cflow + * Hoedown ## 21st February 2016 ## -### General ### - -* Cleaning up done items on TODO.md. - -### Added ### - -* binn - -### Removed ### +* Cleaned up done items on TODO.md. +* Added binn ## 27th January 2016 ## -### General ### - -### Added ### - -* libquickmail - -### Removed ### - - -## 27th January 2016 ## - -### General ### - -### Added ### - -* TBOX - -### Removed ### - +* Added: + * libquickmail + * TBOX ## 24th January 2016 ## -### General ### - * Added Peers notice - -### Added ### - -* tinyexpr -* minctest -* termbox - -### Removed ### - +* Added: + * tinyexpr + * minctest + * termbox ## 21st January 2016 ## -### General ### - - -### Added ### - -* munit -* squash - -### Removed ### - +* Added: + * munit + * squash ## 17th January 2016 ## -### General ### - - -### Added ### - -* Scalable C - -### Removed ### - +* Added Scalable C ## 14th January 2016 ## -### General ### - * Renamed 'Parallel Programming' section to 'Concurrent and Parallel' - -### Added ### - -* libconcurrent - -### Removed ### - +* Added libconcurrent ## 30th December 2015 ## -### General ### - -### Added ### - -* dlx - -### Removed ### +* Added dlx ## 21st December 2015 ## -### General ### - -### Added ### - -* libcsv -* SGLIB - -### Removed ### +* Added: + * libcsv + * SGLIB ## 16th December 2015 ## -### General ### - -* Tidied up GPL and LGPL license names. -* Finished confirming GPL and LGPL license versions. - -### Removed ### - -### Added ### +* Tidied up GPL and LGPL license names +* Finished confirming GPL and LGPL license versions ## 15th December 2015 ## -### General ### - -### Removed ### - -* ESR's work. - -### Added ### +* Removed all work by ESR. ## 29th October 2015 ## -### General ### - -* Added Web Framework section. - -### Removed ### - -### Added ### - -* balde. -* libcairo. -* libpng. +* Added Web Framework section +* Added: + * balde + * libcairo + * libpng ## 27th October 2015 ## -### General ### - -* Reintroduced PBL. - -### Removed ### - -### Added ### +* Reintroduced PBL ## 23rd October 2015 ## -### General ### - -* Changed Orx link to point to BitBucket repo. -* Changed Allegro link to point to their new site. -* Changed FreeGLUT link to point to their new site. - -### Removed ### - -* ulib. -* Docutils. -* libjpeg. -* mihl. -* T-Rex. -* c2html. -* ezXML. - -### Added ### - -* None. +* Changed Orx link to point to BitBucket repo +* Changed Allegro link to point to their new site +* Changed FreeGLUT link to point to their new site +* Removed: + * ulib + * Docutils + * libjpeg + * mihl + * T-Rex + * c2html + * ezXML ## 22nd October 2015 ## -### General ### - -* Removing reference to Gulag Code if the repo was migrated. - -### Removed ### - -* tcmalloc (now replaced with a link to the gperftools repo). -* msgpackalt (replaced by two better-maintained, non-Gulag-hosted implementations). - -### Added ### - -* mpack. -* cmp. -* BerkeleyDB. +* Removed reference to Gulag Code if the repo was migrated +* Added: + * mpack + * cmp + * BerkeleyDB +* Removed: + * tcmalloc (replaced with a link to the gperftools repo) + * msgpackalt (replaced by two better-maintained, non-Gulag-hosted + implementations) ## 21st October 2015 ## -### General ### - -* Clarified licensing of awesome-c itself (no invariants, no cover). -* Clarified and fixed licenses of the listed works. - -### Removed ### - -* VXD-XML (freedom concerns). -* LibreSSL (freedom concerns). -* Netbeans (nonfree dependencies). -* ZeroMQ (unclear licensing). -* Neon (unclear licensing). -* pblSet (unclear licensing). -* CRlibm (unclear licensing). -* libroxml (unclear licensing). -* SGLIB (unclear licensing). -* libRSVG (unclear licensing). -* Elementary (dead link). - -### Added ### - -* CHANGELOG.md file. -* TODO.md file. +* Clarified licensing of awesome-c itself (no invariants, no cover) +* Clarified and fixed licenses of the listed works +* Added this changelog +* Added todo file +* Removed: + * VXD-XML (freedom concerns) + * LibreSSL (freedom concerns) + * Netbeans (nonfree dependencies) + * ZeroMQ (unclear licensing) + * Neon (unclear licensing) + * pblSet (unclear licensing) + * CRlibm (unclear licensing) + * libroxml (unclear licensing) + * SGLIB (unclear licensing) + * libRSVG (unclear licensing) + * Elementary (dead link) diff --git a/README.md b/README.md index 251934c..ec1cc65 100644 --- a/README.md +++ b/README.md @@ -1,132 +1,175 @@ # Awesome C # -A curated list of C good stuff. This list contains *only* [free software][13] for code, and sellers who aren't evil for physical resources. +A curated list of C good stuff. This list contains *only* [free software][13] +for code, and sellers who aren't evil for physical resources. -This is released under the GNU Free Documentation License, without invariants or a cover - its text is provided in the LICENSE file. +This is released under the GNU Free Documentation License, without invariants or +a cover - its text is provided in the LICENSE file. -This project is part of [Peers][397] - a community for growing our freedom. Support us today! +This project is part of [Peers][397] - a community for growing our +freedom. Support us today! -**An important note:** This project does *not* index anything C++-related; only C stuff is considered. +**An important note:** This project does *not* index anything C++-related; only +pure C stuff is considered. ## Contents ## -- [Build Systems](#build-systems) -- [Compilers](#compilers) -- [Concurrent and Parallel](#concurrent-and-parallel) -- [Crypto](#crypto) -- [Database](#database) -- [Documentation Generation](#documentation-generation) -- [Editors](#editors) -- [Environments](#environments) -- [Frameworks](#frameworks) -- [Game Programming](#game-programming) - - [Engines](#engines) - - [Resources](#resources) -- [Generic Programming](#generic-programming) -- [Graphics](#graphics) -- [Graphical User Interface](#graphical-user-interface) -- [JSON](#json) -- [Learning, Reference and Tutorials](#learning-reference-and-tutorials) - - [Online](#online) - - [Reference](#reference) - - [Beginner](#beginner) - - [Intermediate](#intermediate) - - [Advanced](#advanced) - - [Self-study courses](#self-study-courses) - - [Physical](#physical) - - [Reference](#reference-1) - - [Beginner](#beginner-1) - - [Intermediate](#intermediate-1) - - [Advanced](#advanced-1) -- [Multimedia](#multimedia) -- [Networking and Internet](#networking-and-internet) - - [Web Frameworks](#web-frameworks) -- [Numerical](#numerical) -- [Regex](#regex) -- [Serialization](#serialization) -- [Source Code Collections](#source-code-collections) -- [Standard Libraries](#standard-libraries) -- [String Manipulation](#string-manipulation) -- [Testing](#testing) -- [Text Editor Extensions](#text-editor-extensions) - - [Emacs](#emacs) - - [Vim](#vim) -- [Tools](#tools) -- [Utilities](#utilities) -- [XML](#xml) +* [Build Systems](#build-systems) +* [Compilers](#compilers) +* [Concurrent and Parallel](#concurrent-and-parallel) +* [Crypto](#crypto) +* [Database](#database) +* [Documentation Generation](#documentation-generation) +* [Editors](#editors) +* [Environments](#environments) +* [Frameworks](#frameworks) +* [Game Programming](#game-programming) + * [Engines](#engines) + * [Resources](#resources) +* [Generic Programming](#generic-programming) +* [Graphics](#graphics) +* [Graphical User Interface](#graphical-user-interface) +* [JSON](#json) +* [Learning, Reference and Tutorials](#learning-reference-and-tutorials) + * [Online](#online) + * [Reference](#reference) + * [Beginner](#beginner) + * [Intermediate](#intermediate) + * [Advanced](#advanced) + * [Self-study courses](#self-study-courses) + * [Physical](#physical) + * [Reference](#reference-1) + * [Beginner](#beginner-1) + * [Intermediate](#intermediate-1) + * [Advanced](#advanced-1) +* [Multimedia](#multimedia) +* [Networking and Internet](#networking-and-internet) + * [Web Frameworks](#web-frameworks) +* [Numerical](#numerical) +* [Regex](#regex) +* [Serialization](#serialization) +* [Source Code Collections](#source-code-collections) +* [Standard Libraries](#standard-libraries) +* [String Manipulation](#string-manipulation) +* [Testing](#testing) +* [Text Editor Extensions](#text-editor-extensions) + * [Emacs](#emacs) + * [Vim](#vim) +* [Tools](#tools) +* [Utilities](#utilities) +* [XML](#xml) ## Build Systems ## These are tools to automate the building and testing of projects in C. -* [aimake][97] - A build tool designed to avoid complex configurations. [GNU GPLv3][41] or later. -* [Autoconf][305] - An extensible package of M4 macros that produce shell scripts to automatically configure software source code packages. Part of the Autotools. [GNU GPLv3][41] or later. -* [Automake][306] - A tool for automatically generating ``Makefile.in`` files compliant with the GNU Coding Standards. Requires the use of Autoconf. Part of the Autotools. [GNU GPLv3][41] or later. -* [Jam][334] - A build system, designed to be easier than make. Understands C build rules implicitly. [Jam License][335]. -* [Libtool][172] - A generic library support script. Part of the Autotools. [GNU GPLv3][41] or later. +* [aimake][97] - A build tool designed to avoid complex + configurations. [GNU GPLv3][41] or later. +* [Autoconf][305] - An extensible package of M4 macros that produce shell + scripts to automatically configure software source code packages. Part of the + Autotools. [GNU GPLv3][41] or later. +* [Automake][306] - A tool for automatically generating ``Makefile.in`` files + compliant with the GNU Coding Standards. Requires the use of Autoconf. Part of + the Autotools. [GNU GPLv3][41] or later. +* [Jam][334] - A build system, designed to be easier than make. Understands C + build rules implicitly. [Jam License][335]. +* [Libtool][172] - A generic library support script. Part of the + Autotools. [GNU GPLv3][41] or later. * [Meson][368] - An extremely fast, user-friendly build system. Based on Ninja. [Apache2.0][32]. ## Compilers ## * [Clang][38] - A compiler for LLVM. Supports C11. [NCSA][39]. -* [CompCert][269] - A fully-verified compiler. Supports almost all of C89. [GNU GPLv2.1][8] or later. -* [GCC][40] - Provides a C compiler as part of its compiler set. Supports C11. [GNU GPLv3][41] or later. +* [CompCert][269] - A fully-verified compiler. Supports almost all of + C89. [GNU GPLv2.1][8] or later. +* [GCC][40] - Provides a C compiler as part of its compiler set. Supports + C11. [GNU GPLv3][41] or later. * [PCC][74] - A venerable compiler. Supports C99. [Various licenses][75], all free. -* [TCC][58] - Tiny C Compiler; a small, fast compiler. Supports C99 (except complex types). [GNU LGPLv2.1][15] only. +* [TCC][58] - Tiny C Compiler; a small, fast compiler. Supports C99 (except + complex types). [GNU LGPLv2.1][15] only. ## Concurrent and Parallel ## -* [cchan][243] - A small library for channel constructs for inter-thread communication. Public domain. -* [ck][242] - Concurrency primitives, safe memory reclamation mechanisms and non-blocking data structures. [FreeBSD][24]. -* [libconcurrent][390] - Concurrent programming library, using coroutines, for C11. [zlip][49]. +* [cchan][243] - A small library for channel constructs for inter-thread + communication. Public domain. +* [ck][242] - Concurrency primitives, safe memory reclamation mechanisms and + non-blocking data structures. [FreeBSD][24]. +* [libconcurrent][390] - Concurrent programming library, using coroutines, for + C11. [zlip][49]. * [mill][352] - Go-style concurrency. [X11][353]. * [MPICH][285] - Another implementation of MPI. [MPICH licence][286]. -* [OpenMP][37] - A set of pragmas designed to allow for easy parallelization of code. Standard (licensing not applicable). +* [OpenMP][37] - A set of pragmas designed to allow for easy parallelization of + code. Standard (licensing not applicable). * [OpenMPI][284] - A message passing interface implementation. [3-clause BSD][6]. -* [PETSc][282] - A suite of data structures and routines for scalable parallel solution of scientific applications modelled by partial differential equations. [FreeBSD][24]. -* [pth][180] - A portable implementation for non-preemptive priority-based scheduling for multiple threads of execution. [GNU GPLv3][41] or later. +* [PETSc][282] - A suite of data structures and routines for scalable parallel + solution of scientific applications modelled by partial differential + equations. [FreeBSD][24]. +* [pth][180] - A portable implementation for non-preemptive priority-based + scheduling for multiple threads of execution. [GNU GPLv3][41] or later. * [pthreads][146] - The POSIX thread library. Standard (no license applicable). -* [SLEPc][283] - A software library for the solution of large, sparse eigenvalue problems on parallel computers. [GNU LGPLv3][5] only. -* [TinyCThread][115] - A portable, small implementation of the C11 threads API. [zlib][49]. +* [SLEPc][283] - A software library for the solution of large, sparse eigenvalue + problems on parallel computers. [GNU LGPLv3][5] only. +* [TinyCThread][115] - A portable, small implementation of the C11 threads + API. [zlib][49]. ## Crypto ## -* [GnuTLS][112] - A secure communication library, implementing SSL, TLS and DTLS. [GNU LGPLv2.1][15] or later. -* [libgcrypt][142] - A general-purpose cryptography library, with a range of available ciphers. [GNU LGPLv2.1][15] or later (code), [GNU GPLv2.1][8] or later (manual and tools). -* [OpenSSL][110] - Implementation of the SSL and TLS protocols. Also includes a cryptography library. [Dual Licensed under the OpenSSL License and the SSLeay License][111]. +* [GnuTLS][112] - A secure communication library, implementing SSL, TLS and + DTLS. [GNU LGPLv2.1][15] or later. +* [libgcrypt][142] - A general-purpose cryptography library, with a range of + available ciphers. [GNU LGPLv2.1][15] or later (code), [GNU GPLv2.1][8] or + later (manual and tools). +* [OpenSSL][110] - Implementation of the SSL and TLS protocols. Also includes a + cryptography + library. [Dual Licensed under the OpenSSL License and the SSLeay License][111]. * [libsodium][198] - A modern and easy-to-use crypto library. [Expat][11]. -* [libtomcrypt][299] - A fairly comprehensive, modular and portable cryptographic toolkit. Public domain. +* [libtomcrypt][299] - A fairly comprehensive, modular and portable + cryptographic toolkit. Public domain. * [mbed TLS][291] - Another crypto implementation. [Apache2.0][32]. ## Database ## This lists databases and data stores with C APIs. -* [BerkeleyDB][380] - A library for a high-performance embedded database for key-value data. [GNU AGPLv3][381] only. +* [BerkeleyDB][380] - A library for a high-performance embedded database for + key-value data. [GNU AGPLv3][381] only. * [Hiredis][201] - A minimalistic client library for Redis. [3-clause BSD][6]. * [LMDB][105] - An ultra-fast, ultra-compact key-value embedded data store. [newOpenLDAP][106]. -* [MariaDB][25] - A robust, scalable and reliable SQL server, designed to be a drop-in replacement for MySQL. [3-clause BSD][6]. +* [MariaDB][25] - A robust, scalable and reliable SQL server, designed to be a + drop-in replacement for MySQL. [3-clause BSD][6]. * [mongo-c-driver][233] - A high-performance client library for [MongoDB][234]. [Apache2.0][32]. * [PostgreSQL][121] - A powerful object-relational database system. [PostgreSQL licence][122]. -* [recutils][360] - A set of tools and a library for accessing human-editable, plaintext database files called recfiles. [GNU GPLv3][41] or later. +* [recutils][360] - A set of tools and a library for accessing human-editable, + plaintext database files called recfiles. [GNU GPLv3][41] or later. * [Redis][51] - An advanced key-value store. [3-clause BSD][6]. * [sophia][244] - A modern, embeddable key-value database. [FreeBSD][24]. -* [SQLite][22] - A self-contained, serverless, zero-configuration, transactional SQL database engine. Public domain. -* [UnQLite][23] - A self-contained, serverless, zero-configuration, transactional NoSQL engine. [FreeBSD][24]. +* [SQLite][22] - A self-contained, serverless, zero-configuration, transactional + SQL database engine. Public domain. +* [UnQLite][23] - A self-contained, serverless, zero-configuration, + transactional NoSQL engine. [FreeBSD][24]. ## Documentation Generation ## -* [Cxref][317] - Generates documentation in either LaTeX, HTML, RTF or SGML. [GNU GPLv2.1][8] only. -* [DocOnce][322] - A modestly-tagged markup language that can be used to generate a range of formats. [3-clause BSD][6]. -* [Doxygen][318] - The de-facto standard tool for generating documentation from annotated sources. Can generate a large range of formats. [GNU GPLv2.1][8] only. -* [GTK-Doc][319] - A tool for generating documentation from annotated sources. Has support for the Autotools. [GNU GPLv2.1][15] only (code), [GNU FDL1.1][375] only (documentation). +* [Cxref][317] - Generates documentation in either LaTeX, HTML, RTF or + SGML. [GNU GPLv2.1][8] only. +* [DocOnce][322] - A modestly-tagged markup language that can be used to + generate a range of formats. [3-clause BSD][6]. +* [Doxygen][318] - The de-facto standard tool for generating documentation from + annotated sources. Can generate a large range of formats. [GNU GPLv2.1][8] + only. +* [GTK-Doc][319] - A tool for generating documentation from annotated + sources. Has support for the Autotools. [GNU GPLv2.1][15] only + (code), [GNU FDL1.1][375] only (documentation). ## Editors ## -These are specifically fancier, IDE-type editors. If you want a programmer's text editor, look elsewhere. Besides, whatever choice you make most likely supports C anyway. +These are specifically fancier, IDE-type editors. If you want a programmer's +text editor, look elsewhere. Besides, whatever choice you make most likely +supports C anyway. * [Anjuta DevStudio][42] - The GNOME IDE. [GNU GPLv2.1][15] only. -* [Code::Blocks][249] - An extensible, configurable IDE supporting C. [GNU GPLv3][41] only. +* [Code::Blocks][249] - An extensible, configurable IDE supporting + C. [GNU GPLv3][41] only. * [CodeLite][45] - A cross-platform IDE. [GNU GPLv2.1][8] only. * [Eclipse][258] - An IDE written in Java. [EPL][259]. * [Geany][43] - A very small and fast IDE. [GNU GPLv2.1][8] or later. @@ -134,29 +177,45 @@ These are specifically fancier, IDE-type editors. If you want a programmer's tex ## Environments ## -This is a list of technologies designed to bring Windows into the 21st century with respect to support for C. +This is a list of technologies designed to bring Windows into the 21st century +with respect to support for C. -* [Cygwin][253] - Designed to emulate a POSIX-compatible environment extensively under Windows. [Various licenses, all free][254]. -* [MinGW-w64][287] - A minimalist environment for C development on Windows with 64 bit support. [Various licenses, all free][252]. +* [Cygwin][253] - Designed to emulate a POSIX-compatible environment extensively + under Windows. [Various licenses, all free][254]. +* [MinGW-w64][287] - A minimalist environment for C development on Windows with + 64 bit support. [Various licenses, all free][252]. ## Frameworks ## -This section has big libraries that provide data structures and other stuff you expect of a 'modern' standard library. +This section has big libraries that provide data structures and other stuff you +expect of a 'modern' standard library. -* [APR][78] - Apache Portable Runtime; another library of cross-platform utility functions. [Apache2.0][32]. +* [APR][78] - Apache Portable Runtime; another library of cross-platform utility + functions. [Apache2.0][32]. * [C Algorithms][88] - A collection of common algorithms and data structures. [ISC][61]. -* [Collections-C][406] - A library of generic data structures. [GNU LGPLv3][5] or later. -* [CPL][308] - The Common Pipeline Library; a set of libraries designed to be a comprehensive, efficient and robust software toolkit. [GNU GPLv2.1][8] only. -* [EFL][119] - A large collection of useful data structures and functions. Various licenses, all free. -* [GLib][1] - A library of utility functions and structures, designed to be portable, efficient and powerful. [GNU LGPLv2.1][15] only. +* [Collections-C][406] - A library of generic data structures. [GNU LGPLv3][5] + or later. +* [CPL][308] - The Common Pipeline Library; a set of libraries designed to be a + comprehensive, efficient and robust software toolkit. [GNU GPLv2.1][8] only. +* [EFL][119] - A large collection of useful data structures and + functions. Various licenses, all free. +* [GLib][1] - A library of utility functions and structures, designed to be + portable, efficient and powerful. [GNU LGPLv2.1][15] only. * [GIO][2] - A modern and easy-to-use VFS API. [GNU LGPLv2.1][15] only. * [GObject][3] - An object-oriented system and object model. [GNU LGPLv2.1][15] only. -* [libnih][93] - A lightweight library of functions and structures. [GNU GPLv2.1][8] only. -* [libU][28] - A small library of basic utilities, including memory allocation, string manipulation and logging. [3-clause BSD][6]. -* [PBL][346] - A large library of utilities, featuring data structures, among other things. [GNU LGPLv2.1][15] or later (library), [GNU GPLv2.1][8] or later (test code). -* [qlibc][277] - A simple and powerful library, designed as a replacement for GLib while focusing on being small and light. [qLib license][278] (similar to [FreeBSD][24]). +* [libnih][93] - A lightweight library of functions and + structures. [GNU GPLv2.1][8] only. +* [libU][28] - A small library of basic utilities, including memory allocation, + string manipulation and logging. [3-clause BSD][6]. +* [PBL][346] - A large library of utilities, featuring data structures, among + other things. [GNU LGPLv2.1][15] or later (library), [GNU GPLv2.1][8] or later + (test code). +* [qlibc][277] - A simple and powerful library, designed as a replacement for + GLib while focusing on being small and light. [qLib license][278] (similar + to [FreeBSD][24]). * [stb][114] - A range of single-file libraries. Public domain. -* [TBOX][398] - A multi-platform library with a large number of capabilities. [GNU LGPLv2.1][15] or later. +* [TBOX][398] - A multi-platform library with a large number of + capabilities. [GNU LGPLv2.1][15] or later. ## Game Programming ## @@ -167,7 +226,8 @@ These are provided as examples of C game programming code. * [Corange][101] - A game engine in pure C. [FreeBSD][24]. * [Darkplaces][369] - A modified version of the Quake2 engine. [GNU GPLv2.1][8] only. * [ioquake3][107] - The Quake3 engine, freed at last. [GNU GPLv2.1][8] only. -* [Orx][370] - A portable, lightweight, plugin-based, data-driven, 2D-oriented game engine. [zlib][49]. +* [Orx][370] - A portable, lightweight, plugin-based, data-driven, 2D-oriented + game engine. [zlib][49]. * [Quake][225] - The Quake engine. [GNU GPLv2.1][8] only. * [Quake2][221] - The Quake2 engine. [GNU GPLv2.1][8] only. * [Spearmint][371] - An engine designed for FPS games. [GNU GPLv3][41] or later. @@ -176,38 +236,51 @@ These are provided as examples of C game programming code. These are libraries of all sorts that are useful for game programming. -* [Allegro][48] - A cross-platform, video game development and multimedia library. [zlib][49]. +* [Allegro][48] - A cross-platform, video game development and multimedia + library. [zlib][49]. * [Chipmunk2D][303] - A fast and lightweight 2D game physics library. [Expat][11]. * [CSFML][90] - A binding for [SFML][91]. [zlib][49]. * [Epoxy][414] - A library for handling OpenGL function pointer management. [Expat][11]. -* [FreeGLUT][99] - An alternative to the OpenGL Utility Toolkit. Allows the creation and management of windows with OpenGL contexts. [X11][100]. -* [GLFW][98] - A multi-platform library for creating windows with OpenGL contexts. [zlib][49]. -* [libao][376] - A cross-platform audio library with a wide variety of outputs. [GNU GPLv2.1][8] or later. -* [RetroArch][231] - The reference frontend for [libretro][232]. [GNU GPLv3][41] only. -* [SDL2][50] - A cross-platform library designed to provide low-level access to audio, keyboard, mouse, joystick and graphics hardware via OpenGL. [zlib][49]. +* [FreeGLUT][99] - An alternative to the OpenGL Utility Toolkit. Allows the + creation and management of windows with OpenGL contexts. [X11][100]. +* [GLFW][98] - A multi-platform library for creating windows with OpenGL + contexts. [zlib][49]. +* [libao][376] - A cross-platform audio library with a wide variety of + outputs. [GNU GPLv2.1][8] or later. +* [RetroArch][231] - The reference frontend for [libretro][232]. [GNU GPLv3][41] + only. +* [SDL2][50] - A cross-platform library designed to provide low-level access to + audio, keyboard, mouse, joystick and graphics hardware via OpenGL. [zlib][49]. ## Generic Programming ## -* [klib][76] - Small and lightweight implementations of common algorithms and data structures. [Expat][11]. +* [klib][76] - Small and lightweight implementations of common algorithms and + data structures. [Expat][11]. * [SGLIB][30] - A simple generic library. Any OSI-approved license. ## Graphics ## * [Cairo][384] - A 2D graphics library. [GNU LGPLv2.1][15] only or [MPLv1.1][385]. -* [Cogl][127] - A GPU graphics and utilities API. [Expat][11] (dependent on [3-clause BSD][6] and possibly [LGPLv2.1][15] only libs). +* [Cogl][127] - A GPU graphics and utilities API. [Expat][11] (dependent + on [3-clause BSD][6] and possibly [LGPLv2.1][15] only libs). * [Clutter][126] - A UI library based on OpenGL. [GNU LGPLv2.1][15] only. * [giflib][401] - A library for reading and writing gif images. [Expat][11]. -* [heman][365] - A tiny library of image utilities dealing with height maps, normal maps, distance fields and the like. [Expat][11]. +* [heman][365] - A tiny library of image utilities dealing with height maps, + normal maps, distance fields and the like. [Expat][11]. * [libcaca][366] - An ASCII renderer for terminal-based interfaces. [WTFPLv2][367]. * [libgd][402] - A library for the dynamic creation of images by programmers. [Expat][11]. -* [libimagequant][300] - Small, portable library for high-quality conversion of RGBA images to 8-bit indexed colour images. [FreeBSD][24]. -* [libjpeg-turbo][193] - A faster library for reading and writing JPEG files. [Various licences][194]. +* [libimagequant][300] - Small, portable library for high-quality conversion of + RGBA images to 8-bit indexed colour images. [FreeBSD][24]. +* [libjpeg-turbo][193] - A faster library for reading and writing JPEG + files. [Various licences][194]. * [libpng][382] - The official PNG reference library. [libpng license][383]. * [libsixel][17] - A library implementing the SIXEL protocol, allowing beautiful graphics in your terminal. [Expat][11]. -* [libxmi][174] - A function library for rasterizing 2D vector graphics. [GNU GPLv3][41] or later. +* [libxmi][174] - A function library for rasterizing 2D vector + graphics. [GNU GPLv3][41] or later. * [mozjpeg][200] - An improved JPEG encoder. [3-clause BSD][6]. -* [OpenGL][147] - The industry standard for high-performance graphics, with a native C binding. [Various licenses][148]. +* [OpenGL][147] - The industry standard for high-performance graphics, with a + native C binding. [Various licenses][148]. ## Graphical User Interface ## @@ -217,23 +290,24 @@ These are specifically [widget toolkits][12]. * [IUP][16] - Another cross-platform widget toolkit. [Expat][11]. * [nuklear][408] - A small, C89, single-header widget toolkit. Public domain. * [Tk][19] - A basic widget toolkit. Part of Tcl/Tk. [Tcl/Tk License][20]. -* [XForms Toolkit][21] - A widget toolkit designed for the XWindow system. [GNU LGPLv2.1][15] only. +* [XForms Toolkit][21] - A widget toolkit designed for the XWindow + system. [GNU LGPLv2.1][15] only. ## JSON ## * [Jansson][53] - A library for encoding, decoding and manipulating JSON. [Expat][11]. * [jsmn][120] - A minimalistic JSON parser. [Expat][11]. * [json-c][220] - A library for working with JSON. [Expat][11]. -* [WJElement][77] - Advanced JSON manipulation library, with support for JSON Schema. LGPL, any version. +* [WJElement][77] - Advanced JSON manipulation library, with support for JSON + Schema. LGPL, any version. * [YAJL][60] - A fast streaming JSON parser library. [ISC][61] ## Learning, Reference and Tutorials ## -This is a list of resources for learning C programming in general, or something useful relating to C programming. +This is a list of resources for learning C programming in general, or something +useful relating to C programming. -### Online ### - -#### Reference #### +### Reference resources online ### * [SEI CERT C Coding Standard][266] * [C FAQ - comp.lang.c Frequently Asked Questions][262] @@ -242,18 +316,19 @@ This is a list of resources for learning C programming in general, or something * [GNU C Reference Manual][329] * [Robert Pike's notes on programming in C][273] -#### Beginner #### +### Beginner resources online ### * [A tutorial on pointers][213] * [Building C Projects][208] * [C Programming Wikibook][248] -* [Introduction to 'fun' C][279] +* [Introduction to \`fun' C][279] * [Learning C with GDB][349] -* [POSIX Threads Programming tutorial][263] (a little dated, but most of it is still valid and useful) +* [POSIX Threads Programming tutorial][263] (a little dated, but most of it is + still valid and useful) * [The GNU C Programming Tutorial][212] (online PDF) * [Templating in C][267] -#### Intermediate #### +### Intermediate resources online ### * [8 gdb tricks you should know][206] * [10 C99 tricks][257] @@ -267,7 +342,7 @@ This is a list of resources for learning C programming in general, or something * [What a C programmer should know about memory][271] * [What every C programmer should know about undefined behaviour][275] -#### Advanced #### +### Advanced resources online ### * [Advanced metaprogramming in C][357] * [A quick tutorial on implementing and debugging malloc, free, calloc, and realloc][204] @@ -279,140 +354,202 @@ This is a list of resources for learning C programming in general, or something * [Solving the temporary storage problem of C macros][358] * [Some dark corners of C][210] * [Writing efficient C and C code optimization][33] - -#### Self-study courses #### + +### Online self-study courses ### * [C Programming Language Certified Associate preparation course][211] -### Physical ### - -#### Reference #### +### Reference books ### * [C: A Reference Manual 5E][181] - A full reference book for C99. * [C Pocket Reference][182] - A concise reference book for C99. * [The C Programming Language 2E][7] - The original book on C, by its creators. -#### Beginner #### +### Beginner books ### * [C Primer Plus 6E][184] - A complete tutorial on programming in C11. -* [C Programming: A Modern Approach][64] - An excellent book to learn the basics from C from. +* [C Programming: A Modern Approach][64] - An excellent book to learn the basics + from C from. * [Head First C][102] - A 'head-first' style book for learning C. -#### Intermediate #### +### Intermediate books ### * [21st Century C][35] - A very good *second* programming book on C. -* [Understanding and Using C Pointers][36] - An in-depth resource on pointers in C. +* [Understanding and Using C Pointers][36] - An in-depth resource on pointers in + C. * [ZeroMQ][183] - A book for using ZeroMQ with C. -#### Advanced #### +### Advanced books ### -* [Expert C Programming: Deep C Secrets][55] - An interesting, in-depth and *entertaining* look at the innards of C. +* [Expert C Programming: Deep C Secrets][55] - An interesting, in-depth and + *entertaining* look at the innards of C. ## Multimedia ## -* [FFMPEG][63] - A complete, cross-platform solution to record, convert and stream audio and video. [GNU LGPLv2.1][15] or later, with some parts under [GNU GPLv2.1][8] or later. +* [FFMPEG][63] - A complete, cross-platform solution to record, convert and + stream audio and video. [GNU LGPLv2.1][15] or later, with some parts + under [GNU GPLv2.1][8] or later. * [GStreamer][123] - A framework for audio and visual media. [GNU LGPLv2.1][15] only. -* [lodepng][69] - A simple PNG image decoder and encoder, requiring no other dependencies. [3-clause BSD][6]. +* [lodepng][69] - A simple PNG image decoder and encoder, requiring no other + dependencies. [3-clause BSD][6]. ## Networking and Internet ## * [asnlc][138] - A compiler of ASN.1 specifications into C source code. [FreeBSD][24]. * [czmq][226] - A high-level binding for ZeroMQ. [MPL2.0][227] -* [GNU adns][155] - An advanced, easy-to-use, asynch-capable DNS client library and utilities. [GNU GPLv3][41] or later. -* [GNU SASL][160] - An implementation of the Simple Authentication and Security Layer and a few common SASL mechanism. [GNU GPLv3][41] or later. -* [GnuTLS][112] - A secure communication library, implementing SSL, TLS and DTLS. [GNU LGPLv2.1][15] or later. +* [GNU adns][155] - An advanced, easy-to-use, asynch-capable DNS client library + and utilities. [GNU GPLv3][41] or later. +* [GNU SASL][160] - An implementation of the Simple Authentication and Security + Layer and a few common SASL mechanism. [GNU GPLv3][41] or later. +* [GnuTLS][112] - A secure communication library, implementing SSL, TLS and + DTLS. [GNU LGPLv2.1][15] or later. * [gumbo-parser][196] - An HTML5 parsing library in C99. [Apache2.0][32]. * [http-parser][197] - An HTTP request/response parser. [Expat][11]. * [ldns][339] - A library to simplify DNS programming. [3-clause BSD][6]. -* [libcurl][65] - A client-side URL transfer library, supporting a wide range of formats. [curl license][66] -* [LibEtPan][222] - A mail library providing an efficient network for IMAP, SMTP, POP and NNTP. [3-clause BSD][6]. +* [libcurl][65] - A client-side URL transfer library, supporting a wide range of + formats. [curl license][66]. +* [LibEtPan][222] - A mail library providing an efficient network for IMAP, + SMTP, POP and NNTP. [3-clause BSD][6]. * [libev][144] - Yet another event loop. [FreeBSD][24]. * [libevent][124] - An event loop replacement for network servers. [3-clause BSD][6]. * [libgss][161] - Generic Security Service. [GNU GPLv3][41] or later. -* [libhttpd][166] - A library to add basic web server capabilities to an application or embedded device. [GNU GPL2][41] only. -* [libidn][164] - An implementation of the Stringprep, Punycode and IDNA specifications. [GNU GPLv3][41] or later. -* [libmicrohttpd][165] - A small library that makes it easy to run an HTTP server as part of another application. [GNU LGPLv2.1][15] or later. -* [libquickmail][399] - A library intended to give developers a way to send email from their applications. Supports multiple To/Cc/Bcc recipients and attachments without size limits. [GNU GPLv3][41] or later. -* [libsoup][167] - A GNOME HTTP client/server library. Uses GObject. [GNU LGPLv2.1][15] only. -* [lwan][199] - An experimental, scalable, high-performance HTTP server. [GNU GPLv2.1][8] only. +* [libhttpd][166] - A library to add basic web server capabilities to an + application or embedded device. [GNU GPLv2][41] only. +* [libidn][164] - An implementation of the Stringprep, Punycode and IDNA + specifications. [GNU GPLv3][41] or later. +* [libmicrohttpd][165] - A small library that makes it easy to run an HTTP + server as part of another application. [GNU LGPLv2.1][15] or later. +* [libquickmail][399] - A library intended to give developers a way to send + email from their applications. Supports multiple To/Cc/Bcc recipients and + attachments without size limits. [GNU GPLv3][41] or later. +* [libsoup][167] - A GNOME HTTP client/server library. Uses + GObject. [GNU LGPLv2.1][15] only. +* [lwan][199] - An experimental, scalable, high-performance HTTP + server. [GNU GPLv2.1][8] only. * [mongoose][171] - Embedded web server. [GNU GPLv2.1][8] only. * [nanomsg][139] - A C-based implementation of ZeroMQ. [Expat][11]. * [onion][170] - HTTP server library, designed to be easy to use. [Apache2.0][32]. -* [OpenSSL][110] - Implementation of the SSL and TLS protocols, and also includes a cryptography library. [Dual Licensed under the OpenSSL License and the SSLeay License][111] -* [oSip][179] - A SIP implementation without additional dependencies. [GNU LGPLv2.1][15] or later. -* [s2n][359] - A C99 implementation of the TLS/SSL protocols, designed to be simple, fast and with security as a priority. [Apache2.0][32]. +* [OpenSSL][110] - Implementation of the SSL and TLS protocols, and also + includes a cryptography + library. [Dual Licensed under the OpenSSL License and the SSLeay License][111]. +* [oSip][179] - A SIP implementation without additional + dependencies. [GNU LGPLv2.1][15] or later. +* [s2n][359] - A C99 implementation of the TLS/SSL protocols, designed to be + simple, fast and with security as a priority. [Apache2.0][32]. * [socket99][203] - A C99 wrapper for the BSD sockets API. [ISC][61]. -* [Tox][145] - A communication platform, designed to be a Skype-killer. [GNU GPLv3][41] only. +* [Tox][145] - A communication platform, designed to be a + Skype-killer. [GNU GPLv3][41] only. * [twitc][237] - A mini library for interacting with the Twitter OAuth API. [Expat][11]. ### Web Frameworks ### * [balde][386] - A microframework based on GLib. [GNU LGPLv2.1][15] only. +* [Kore][415] - An easy-to-use web application framework for writing scalable + web APIs in C. [ISC][61]. ## Numerical ## -* [apophenia][188] - A library for statistical and scientific computing. [GNU GPLv2.1][8] only. +* [apophenia][188] - A library for statistical and scientific + computing. [GNU GPLv2.1][8] only. * [ATLAS][137] - Automatically Tuned Linear Algebra Software. [3-clause BSD][6]. -* [BLAS][135] - Basic Linear Algebra Subprograms; a set of routines that provide vector and matrix operations. [BLAS license][136] -* [Cuba][316] - A library for multidimensional numerical integration. [GNU LGPLv3][5] only. -* [FFTW][70] - The Fastest Fourier Transform in the West; a highly-optimized fast Fourier transform routine. [GNU GPLv2.1][8] or later. -* [FLINT][255] - Fast Library for Number Theory; a library supporting arithmetic with numbers, polynomials, power series and matrices, among others. [GNU GPLv2.1][8] or later. -* [GLPK][159] - GNU Linear Programming Kit; a package designed for solving large-scale linear programming, mixed integer programming and other related problems. [GNU GPLv3][41] or later. -* [GMP][79] - GNU Multple Precision Arithmetic Library; a library for arbitrary-precision arithmetic. Dual-licensed [GNU GPLv2.1][8] only and [GNU LGPLv3][5] only. +* [BLAS][135] - Basic Linear Algebra Subprograms; a set of routines that provide + vector and matrix operations. [BLAS license][136]. +* [Cuba][316] - A library for multidimensional numerical + integration. [GNU LGPLv3][5] only. +* [FFTW][70] - The Fastest Fourier Transform in the West; a highly-optimized + fast Fourier transform routine. [GNU GPLv2.1][8] or later. +* [FLINT][255] - Fast Library for Number Theory; a library supporting arithmetic + with numbers, polynomials, power series and matrices, among + others. [GNU GPLv2.1][8] or later. +* [GLPK][159] - GNU Linear Programming Kit; a package designed for solving + large-scale linear programming, mixed integer programming and other related + problems. [GNU GPLv3][41] or later. +* [GMP][79] - GNU Multple Precision Arithmetic Library; a library for + arbitrary-precision arithmetic. Dual-licensed [GNU GPLv2.1][8] only + and [GNU LGPLv3][5] only. * [GNU MPC][175] - A library for complex number arithmetic. [GNU LGPLv3][5] or later. -* [GNU MPFR][176] - A library for arbitrary-precision floating-point arithmetic. [GNU LGPLv3][5] or later (most recent versions), [GNU LGPLv2.1][15] or later (until version 2.4.x). -* [GNU MPRIA][177] - A portable mathematics library for multi-precision rational interval arithmetic. [GNU GPLv3][41] or later. -* [GSL][47] - The GNU Scientific Library; a sophisticated numerical library. [GNU GPLv3][41] only. +* [GNU MPFR][176] - A library for arbitrary-precision floating-point + arithmetic. [GNU LGPLv3][5] or later (most recent + versions), [GNU LGPLv2.1][15] or later (until version 2.4.x). +* [GNU MPRIA][177] - A portable mathematics library for multi-precision rational + interval arithmetic. [GNU GPLv3][41] or later. +* [GSL][47] - The GNU Scientific Library; a sophisticated numerical + library. [GNU GPLv3][41] only. * [KISS FFT][71] - A very simple fast Fourier transform library. [3-clause BSD][6]. * [LAPACKE][133] - An interface to [LAPACK][134]. [3-clause BSD][6]. -* [PARI/GP][256] - A computer algebra system for number theory; includes a compiler to C. [GNU GPLv2.1][8] or later. -* [PETSc][282] - A suite of data structures and routines for scalable parallel solution of scientific applications modelled by partial differential equations. [FreeBSD][24]. -* [SLEPc][283] - A software library for the solution of large, sparse eigenvalue problems on parallel computers. [GNU LGPLv3][5] only. +* [PARI/GP][256] - A computer algebra system for number theory; includes a + compiler to C. [GNU GPLv2.1][8] or later. +* [PETSc][282] - A suite of data structures and routines for scalable parallel + solution of scientific applications modelled by partial differential + equations. [FreeBSD][24]. +* [SLEPc][283] - A software library for the solution of large, sparse eigenvalue + problems on parallel computers. [GNU LGPLv3][5] only. * [Yeppp!][72] - Very fast, SIMD-optimized mathematical library. [3-clause BSD][6]. ## Regex ## -> "Some people, when confronted with a problem, think 'I know, I'll use regular expressions'. Now they have two problems." - Jamie Zawinski. +> "Some people, when confronted with a problem, think 'I know, I'll use regular +> expressions'. Now they have two problems." - Jamie Zawinski. -* [PCRE][83] - An implementation of regexes identical to that of Perl 5. [3-clause BSD][6]. -* [SLRE][80] - Super Light Regular Expression library; a very small implementation of a subset of Perl regex syntax. [GNU GPLv2.1][8] only. +* [PCRE][83] - An implementation of regexes identical to that of + Perl 5. [3-clause BSD][6]. +* [SLRE][80] - Super Light Regular Expression library; a very small + implementation of a subset of Perl regex syntax. [GNU GPLv2.1][8] only. * [TRE][82] - A POSIX-compliant, feature-full regex library. [FreeBSD][24]. ## Serialization ## -* [binn][400] - A binary serialization format, meant to be compact, fast and easy-to-use. [Apache2.0][32]. -* [c-capnproto][130] - An implementation of the Cap'n Proto serialization protocol. [Expat][11]. -* [cmp][377] - An implementation of the [MessagePack][379] serialization protocol. [Expat][11]. +* [binn][400] - A binary serialization format, meant to be compact, fast and + easy-to-use. [Apache2.0][32]. +* [c-capnproto][130] - An implementation of the Cap'n Proto serialization + protocol. [Expat][11]. +* [cmp][377] - An implementation of the [MessagePack][379] serialization + protocol. [Expat][11]. * [libavro][140] - An implementation of the Avro data serialization system. [Apache2.0][32]. -* [mpack][378] - Another implementation of the [MessagePack][379] serialization protocol. [Expat][11]. +* [mpack][378] - Another implementation of the [MessagePack][379] serialization + protocol. [Expat][11]. * [protobuf-c][129] - An implementation of Google Protocol Buffer. [FreeBSD][24]. -* [xdr][131] - External Data Representation; a standard for data serialization. Standard (no license applicable). +* [xdr][131] - External Data Representation; a standard for data + serialization. Standard (no license applicable). ## Source Code Collections ## -This contains collections of small source code. If you want something big and integrated, check the Frameworks section. +This contains collections of small source code. If you want something big and +integrated, check the Frameworks section. -* [CCAN][103] - Modelled after Perl's CPAN, this is a big collection of code that does stuff. The full list is [here][104]. Various licenses, all free. -* [clib][26] - Something of a package manager. Comes with a [bunch of libraries of its own][27]. [Expat][11]. +* [CCAN][103] - Modelled after Perl's CPAN, this is a big collection of code + that does stuff. The full list is [here][104]. Various licenses, all free. +* [clib][26] - Something of a package manager. Comes with + a [bunch of libraries of its own][27]. [Expat][11]. * [gnulib][46] - A collection of common GNU code. Various licenses, all free. -* [libdjb][292] - A collection of libraries doing various things. (Apparently) public domain. +* [libdjb][292] - A collection of libraries doing various things. (Apparently) + public domain. ## Standard Libraries ## This contains standard C libraries. * [Bionic][4] - Google's standard library, developed for Android. [3-clause BSD][6]. -* [dietlibc][9] - A standard library designed for the smallest possible binaries. [GNU GPLv2.1][8] only. -* [glibc][57] - The GNU C Library; an implementation of the standard library. [GNU LGPLv2.1][15] only. -* [musl][10] - A standard library, compatible with POSIX 2008 and C11. Designed for static linking. [Expat][11]. +* [dietlibc][9] - A standard library designed for the smallest possible + binaries. [GNU GPLv2.1][8] only. +* [glibc][57] - The GNU C Library; an implementation of the standard + library. [GNU LGPLv2.1][15] only. +* [musl][10] - A standard library, compatible with POSIX 2008 and C11. Designed + for static linking. [Expat][11]. ## String Manipulation ## -* [bstrlib][116] - The Better String Library. Dual-licensed under [3-clause BSD][6] or [GNU GPLv2.1][8] only. -* [ICU][67] - International Components for Unicode; a library for Unicode support. [ICU license][68]. -* [libunistring][173] - A library for manipulating Unicode strings. [GNU LGPLv3][5] only. -* [libgiconv][163] - A text conversion library. [GNU LGPLv2.1][15] only (library), [GNU GPLv3][41] only (*iconv* program). -* [SDS][29] - Simple Dynamic Strings; a library for handling strings in a simpler way, but one that is compatible with normal C string functions. Available via [clib][26]. [FreeBSD][24]. +* [bstrlib][116] - The Better String Library. Dual-licensed + under [3-clause BSD][6] or [GNU GPLv2.1][8] only. +* [ICU][67] - International Components for Unicode; a library for Unicode + support. [ICU license][68]. +* [libunistring][173] - A library for manipulating Unicode + strings. [GNU LGPLv3][5] only. +* [libgiconv][163] - A text conversion library. [GNU LGPLv2.1][15] only + (library), [GNU GPLv3][41] only (*iconv* program). +* [SDS][29] - Simple Dynamic Strings; a library for handling strings in a + simpler way, but one that is compatible with normal C string + functions. Available via [clib][26]. [FreeBSD][24]. * [shoco][363] - A compressor for small text strings. [Expat][11]. * [smaz][364] - An efficient string compression library. [3-clause BSD][6]. @@ -432,13 +569,17 @@ This contains standard C libraries. ## Text Editor Extensions ## -While practically any decent programmer's text editor supports C, there are some extensions that make it more pleasant. This is categorized by editor. +While practically any decent programmer's text editor supports C, there are some +extensions that make it more pleasant. This is categorized by editor. ### Emacs ### -* [CEDET][250] - Collection of Emacs Development Environment Tools; designed to provide IDE-like features to Emacs. Built-in. [GNU GPLv3][41] or later. -* [Flycheck][149] - Modern syntax checking. For C, it can use either GCC or Clang as a back-end. [GNU GPLv3][41] or later. -* [Yasnippet][150] - A template system, with C templates for common code snippets. [GNU GPLv3][41] or later. +* [CEDET][250] - Collection of Emacs Development Environment Tools; designed to + provide IDE-like features to Emacs. Built-in. [GNU GPLv3][41] or later. +* [Flycheck][149] - Modern syntax checking. For C, it can use either GCC or + Clang as a back-end. [GNU GPLv3][41] or later. +* [Yasnippet][150] - A template system, with C templates for common code + snippets. [GNU GPLv3][41] or later. ### Vim ### @@ -447,12 +588,15 @@ While practically any decent programmer's text editor supports C, there are some ## Tools ## -This is a list of useful programs to help you write and debug C code which are *not* editors, libraries or compilers. +This is a list of useful programs to help you write and debug C code which are +*not* editors, libraries or compilers. -* [Artistic Style][314] - A fast and small automatic source code formatter that supports C. [GNU LGPLv3][5] only. +* [Artistic Style][314] - A fast and small automatic source code formatter that + supports C. [GNU LGPLv3][5] only. * [address-sanitizer][288] - A fast memory error detector. [Apache2.0][32]. * [biicode][304] - A modern dependency manager. [Expat][11]. -* [c][276] - Compile and execute C "scripts" in one go on the command line. Also has shebang support. [Expat][11]. +* [c][276] - Compile and execute C "scripts" in one go on the command line. Also + has shebang support. [Expat][11]. * [C-Reduce][403] - A tool that takes a large C file with a property of interest and automatically produces a much smaller C file that has the same property. Intended to help create minimal bug-demonstrating cases in complex @@ -460,27 +604,49 @@ This is a list of useful programs to help you write and debug C code which are * * [CScout][410] - A source code analyzer and refactoring browser for C programs. [GNU GPLv3][41] only. * [c99sh][113] - Run C files using hash-bang. [FreeBSD][24]. -* [CBMC][309] - C Bounded Model Checker; a tool for verification of array bounds, pointer safety and user-specified assertions. [Original BSD][310]. -* [cdecl][348] - An online service to translate C declarations into English and vice versa. Public domain. -* [cflow][404] - Analyzes a collection of source files and prints a graph charting control flow in the program. [GNU GPLv3][41] or later. -* [cinclude2dot][280] - Graphs include dependencies in a project using Graphviz. Any GNU GPL version (due to underspecification in the file). -* [Complexity][307] - A tool for measuring the complexity of source code. [GNU GPLv3][41] or later. -* [DDD][320] - A graphical front-end for a range of command-line debuggers. [GNU GPLv3][41] or later. -* [fab][323] - A build system that helps build optimally every time. [GNU GPLv3][41] only. +* [CBMC][309] - C Bounded Model Checker; a tool for verification of array + bounds, pointer safety and user-specified assertions. [Original BSD][310]. +* [cdecl][348] - An online service to translate C declarations into English and + vice versa. Public domain. +* [cflow][404] - Analyzes a collection of source files and prints a graph + charting control flow in the program. [GNU GPLv3][41] or later. +* [cinclude2dot][280] - Graphs include dependencies in a project using + Graphviz. Any GNU GPL version (due to underspecification in the file). +* [Complexity][307] - A tool for measuring the complexity of source + code. [GNU GPLv3][41] or later. +* [DDD][320] - A graphical front-end for a range of command-line + debuggers. [GNU GPLv3][41] or later. +* [fab][323] - A build system that helps build optimally every + time. [GNU GPLv3][41] only. * [GDB][87] - The GNU Project debugger. [GNU GPLv3][41] or later. -* [Glade][328] - A RAD tool to enable quick development of GTK+ GUIs. [GNU GPLv2.1][8] only. -* [GMSL][331] - GNU Make Standard Library; a collection of additional functionality for GNU Make. [3-clause BSD][6]. +* [Glade][328] - A RAD tool to enable quick development of GTK+ + GUIs. [GNU GPLv2.1][8] only. +* [GMSL][331] - GNU Make Standard Library; a collection of additional + functionality for GNU Make. [3-clause BSD][6]. * [GNU Global][330] - A source code tagging tool. [GNU GPLv3][41] only. -* [gprof][86] - A performance analysis tool. Part of GNU binutils. [GNU GPLv3][41] or later. -* [Highlight][333] - Converts source code to formatted text with nice highlighting. [GNU GPLv3][41] only. -* [include-what-you-use][289] - Helps find unecessary inclusions and make suggestions for fixing them. Based on LLVM/Clang (and only works with it). [NCSA][39]. -* [indent][315] - Formats C source code automatically to make it easier to read. Also converts from one style of source to another. [GNU GPLv3][41] or later. -* [Make][324] - A tool which controls the generation of executables and other non-source files of a program. [GNU GPLv3][41] or later (link to the GNU implementation). +* [gprof][86] - A performance analysis tool. Part of GNU + binutils. [GNU GPLv3][41] or later. +* [Highlight][333] - Converts source code to formatted text with nice + highlighting. [GNU GPLv3][41] only. +* [include-what-you-use][289] - Helps find unecessary inclusions and make + suggestions for fixing them. Based on LLVM/Clang (and only works with + it). [NCSA][39]. +* [indent][315] - Formats C source code automatically to make it easier to + read. Also converts from one style of source to another. [GNU GPLv3][41] or + later. +* [Make][324] - A tool which controls the generation of executables and other + non-source files of a program. [GNU GPLv3][41] or later (link to the GNU + implementation). * [qo][274] - A build system that works without a separate config file. [Expat][11]. -* [rr][95] - A debugger that records non-deterministic executions to allow for deterministic debugging. [FreeBSD][24]. -* [tup][326] - A very fast, file-based, cross-platform build system. [GNU GPLv2.1][8] only. -* [unifdef][290] - Removes #ifdef and #if directives with their delimited text without touching any other part of the file. [3-clause BSD][6] and [FreeBSD][24]. -* [Valgrind][85] - A range of dynamic analysis tools, including a leak checker. [GNU GPLv2.1][8] only. +* [rr][95] - A debugger that records non-deterministic executions to allow for + deterministic debugging. [FreeBSD][24]. +* [tup][326] - A very fast, file-based, cross-platform build + system. [GNU GPLv2.1][8] only. +* [unifdef][290] - Removes #ifdef and #if directives with their delimited text + without touching any other part of the file. [3-clause BSD][6] + and [FreeBSD][24]. +* [Valgrind][85] - A range of dynamic analysis tools, including a leak + checker. [GNU GPLv2.1][8] only. ## Utilities ## @@ -489,76 +655,119 @@ This is a 'catch-all' category for anything that doesn't fit well anywhere else. * [ApeTagLibs][345] - A library for working with APEv2 tags. [Expat][11]. * [argparse][413] - A command-line argument parsing library, inspired by Python's argparse module. [Expat][11]. -* [bfd][157] - A library for manipulating binary object files. Part of GNU binutils. [GNU GPLv3][41] or later. -* [ccv][195] - C-based/Cached/Core Computer Vision library; modern computer vision. [3-clause BSD][6]. -* [cf4ocl][311] - The C Framework for OpenCL; a cross-platform object-oriented framework for developing and benchmarking [OpenCL][312] projects. [GNU LGPLv3][5] only (library), [GNU GPLv3][41] or later (other code). -* [CommonMark][223] - An implementation of the CommonMark spec. [Variety of licenses, all free][224]. +* [bfd][157] - A library for manipulating binary object files. Part of GNU + binutils. [GNU GPLv3][41] or later. +* [ccv][195] - C-based/Cached/Core Computer Vision library; modern computer + vision. [3-clause BSD][6]. +* [cf4ocl][311] - The C Framework for OpenCL; a cross-platform object-oriented + framework for developing and benchmarking [OpenCL][312] + projects. [GNU LGPLv3][5] only (library), [GNU GPLv3][41] or later (other + code). +* [CommonMark][223] - An implementation of the CommonMark + spec. [Variety of licenses, all free][224]. * [CException][298] - An implementation of exceptions. [Expat][11]. -* [dlx][388] - An implementation of [Knuth's Algorithm X][389], with example solvers. [GNU GPLv3][41] or later. +* [dlx][388] - An implementation of [Knuth's Algorithm X][389], with example + solvers. [GNU GPLv3][41] or later. * [docopt.c][270] - An implementation of a command-line option parser. [Expat][11]. * [dyncall][281] - Another foreign function interface library. [Expat][11]. -* [FANN][325] - Fast Artifical Neural Network library; an implementation of neural networks. [GNU GPLv2.1][8] only. -* [Firm][361] - A library that provides a graph-based intermediate representation, optimizations and assembly code generation suitable for use in compilers. Comes with an example C front-end under the same license. [GNU LGPLv2.1][15] only. +* [FANN][325] - Fast Artifical Neural Network library; an implementation of + neural networks. [GNU GPLv2.1][8] only. +* [Firm][361] - A library that provides a graph-based intermediate + representation, optimizations and assembly code generation suitable for use in + compilers. Comes with an example C front-end under the same + license. [GNU LGPLv2.1][15] only. * [Genann][412] - A simple ANN in C89, without additional dependencies. [zlib][49]. -* [gjrand][327] - A library of random-number generation routines. [GNU GPLv2.1][8] only or [GNU GPLv3][41] only (user's choice). -* [GNU FreeIPMI][158] - An in-band and out-of-band IPMI implementation. [GNU GPLv3][41] only. -* [GNU gperf][351] - A perfect hash function generator, given a list of strings. Outputs C code. [GNU GPLv3][41] or later. -* [GNU Libffcall][162] - A collection of libraries for building foreign function interfaces. [GNU GPLv3][41] or later. -* [gperftools][295] - A collection of utilities for measuring and improving performance. [3-clause BSD][6]. +* [gjrand][327] - A library of random-number generation + routines. [GNU GPLv2.1][8] only or [GNU GPLv3][41] only (user's choice). +* [GNU FreeIPMI][158] - An in-band and out-of-band IPMI + implementation. [GNU GPLv3][41] only. +* [GNU gperf][351] - A perfect hash function generator, given a list of + strings. Outputs C code. [GNU GPLv3][41] or later. +* [GNU Libffcall][162] - A collection of libraries for building foreign function + interfaces. [GNU GPLv3][41] or later. +* [gperftools][295] - A collection of utilities for measuring and improving + performance. [3-clause BSD][6]. * [hammer][356] - Parser combinators for binary formats. [GNU GPLv2.1][8] only. -* [Hans Boehm GC][125] - Garbage collection for C? Don't mind if I do! Various licenses, all free. -* [Hoedown][405] - A fully-standards-compliant, extension-supporting, UTF-8 aware, fast Markdown parser. [Expat][11]. +* [Hans Boehm GC][125] - Garbage collection for C? Don't mind if I do! Various + licenses, all free. +* [Hoedown][405] - A fully-standards-compliant, extension-supporting, UTF-8 + aware, fast Markdown parser. [Expat][11]. * [huffandpuff][214] - A minimal Huffman encoder and decoder. Public domain. * [iniparser][336] - A parser for .ini files. [Expat][11]. -* [jemalloc][293] - A malloc implementation that emphasizes avoidance of fragmentation and scalable concurrency support. [FreeBSD][24]. +* [jemalloc][293] - A malloc implementation that emphasizes avoidance of + fragmentation and scalable concurrency support. [FreeBSD][24]. * [jwHash][350] - A fast hashtable implementation. [Apache2.0][32]. * [kdtree][337] - A simple library for working with KD-trees. [3-clause BSD][6]. -* [Kitsune][355] - An efficient, general-purpose framework for dynamic software updating. [GNU LGPLv3][5] or later. -* [libavl][156] - A library containing a range of self-balancing binary trees. [GNU GPLv3][41] or later. +* [Kitsune][355] - An efficient, general-purpose framework for dynamic software + updating. [GNU LGPLv3][5] or later. +* [libavl][156] - A library containing a range of self-balancing binary + trees. [GNU GPLv3][41] or later. * [libbson][235] - A BSON utility library. [Apache2.0][32]. -* [libCello][96] - A library introducing higher-level programming to C. [3-clause BSD][6]. -* [libcox][373] - A library which permits cross-platform system calls and standard utilities across different operating systems. [FreeBSD][24]. +* [libCello][96] - A library introducing higher-level programming to + C. [3-clause BSD][6]. +* [libcox][373] - A library which permits cross-platform system calls and + standard utilities across different operating systems. [FreeBSD][24]. * [libcsv][387] - A simple, streaming CSV parser. [GNU LGPLv2.1][15] or later. * [libffi][128] - A portable foreign-function interface library. [Expat][11]. * [libgit2][108] - Pure C implementation of Git. [GNU GPL2 only, with a linking exception][109]. * [liblfds][411] - A portable lock-free data structure library. Public domain (more exactly, whatever license you want). -* [libimobiledevice][354] - A cross-platform protocol library to communicate with iThings. [GNU LGPLv2.1][15] or later (library), [GNU GPLv2.1][8] or later (tools). -* [libmpv][348] - A music-playing library. Compile with ``./waf configure --disable-cplayer --enable-libmpv-shared`` to not have the music player. [GNU GPLv2.1][8] or later. -* [libnfc][332] - A platform-independent Near-Field Communication library. [GNU LGPLv3][5] only. -* [libPhenom][31] - An eventing framework for building high-scalability and high-performance systems. [Apache2.0][32]. -* [libsoundio][372] - A library for cross-platform, real-time audio input and output. Has a range of back-ends. [Expat][11]. +* [libimobiledevice][354] - A cross-platform protocol library to communicate + with iThings. [GNU LGPLv2.1][15] or later (library), [GNU GPLv2.1][8] or later + (tools). +* [libmpv][348] - A music-playing library. Compile with ``./waf configure + --disable-cplayer --enable-libmpv-shared`` to not have the music + player. [GNU GPLv2.1][8] or later. +* [libnfc][332] - A platform-independent Near-Field Communication + library. [GNU LGPLv3][5] only. +* [libPhenom][31] - An eventing framework for building high-scalability and + high-performance systems. [Apache2.0][32]. +* [libsoundio][372] - A library for cross-platform, real-time audio input and + output. Has a range of back-ends. [Expat][11]. * [libucl][239] - A universal configuration library parser. [FreeBSD][24]. * [libuv][56] - Cross-platform asynchronous I/O. [Expat][11]. * [libYAML][341] - A YAML 1.1 parser and emitter. [Expat][11]. -* [libxo][407] - Allows an application to generate plain text, XML, JSON and HTML output using a common set of function calls. The application decides at runtime what output style should be produced. [FreeBSD][24]. +* [libxo][407] - Allows an application to generate plain text, XML, JSON and + HTML output using a common set of function calls. The application decides at + runtime what output style should be produced. [FreeBSD][24]. * [lzo][338] - A very fast data compression library. [GNU GPLv2.1][8] or later. * [mpc][238] - A parser combinator library. [FreeBSD][24]. * [ncurses][178] - Coloured terminal UI library. [GNU GPLv3][41] or later. -* [nope.c][209] - An ultra-light software platform for scalable server-side and networking applications (think node.js for C programmers). [GNU GPLv2.1][8] only. +* [nope.c][209] - An ultra-light software platform for scalable server-side and + networking applications (think node.js for C programmers). [GNU GPLv2.1][8] + only. * [pbc][236] - A protocol buffers library. [Expat][11]. * [rabbitmq-c][228] - A client library for [RabbitMQ][229]. [Expat][11]. * [Ragel][54] - A DSL for state machines that compiles to C. [GNU GPLv2.1][8] only. -* [sort][190] - A collection of sorting routines, designed to run at compile-time with a user-defined type. [Expat][11]. -* [squash][393] - A compression abstraction library, complete with some utilities. [Expat][11]. +* [sort][190] - A collection of sorting routines, designed to run at + compile-time with a user-defined type. [Expat][11]. +* [squash][393] - A compression abstraction library, complete with some + utilities. [Expat][11]. * [termbox][396] - A library for writing text-based interfaces. [Expat][11]. -* [tinyexpr][395] - A tiny recursive-descent parser, compiler and evaluation engine for simple mathematical expressions. [3-clause BSD][6]. -* [uthash][117] - A hash table implementation, allowing existing structures to be stored in a hash table easily. [1-clause BSD][118] +* [tinyexpr][395] - A tiny recursive-descent parser, compiler and evaluation + engine for simple mathematical expressions. [3-clause BSD][6]. +* [uthash][117] - A hash table implementation, allowing existing structures to + be stored in a hash table easily. [1-clause BSD][118]. * [vector.h][152] - A header library for typed lists. [Expat][11]. * [Viola][241] - A simplification of libCello. [Expat][11]. -* [XLSX I/O][344] - A cross-platform library for reading and writing .xlsx files. [Expat][11]. -* [zlib][230] - A massively-spiffy yet delicately-unobtrusive compression library. [3-clause BSD][6]. +* [XLSX I/O][344] - A cross-platform library for reading and writing .xlsx + files. [Expat][11]. +* [zlib][230] - A massively-spiffy yet delicately-unobtrusive compression + library. [3-clause BSD][6]. ## XML ## -> "XML is crap. Really. There are no excuses. XML is nasty to parse for humans, and it's a disaster to parse even for computers. There's just no reason for that horrible crap to exist." - Linus Torvalds +> "XML is crap. Really. There are no excuses. XML is nasty to parse for humans, +> and it's a disaster to parse even for computers. There's just no reason for +> that horrible crap to exist." - Linus Torvalds * [Expat][89] - A stream-oriented XML parser. [Expat][11]. * [libroxml][409] - Another XML library. [GNU LGPLv2.1 with static linking exception][217] only. * [libxml2][62] - A standards-compliant, portable XML parser. [Expat][11]. -* [mini-xml][216] - A small XML reading and writing library. No dependencies aside from C standard library. [GNU LGPLv2.1 with static linking exception][217] only. - +* [mini-xml][216] - A small XML reading and writing library. No dependencies + aside from C standard + library. [GNU LGPLv2.1 with static linking exception][217] only. [1]: https://wiki.gnome.org/Projects/GLib [2]: https://developer.gnome.org/gio/ @@ -973,3 +1182,4 @@ This is a 'catch-all' category for anything that doesn't fit well anywhere else. [412]: https://github.com/codeplea/genann [413]: https://github.com/cofyc/argparse [414]: https://github.com/anholt/libepoxy +[415]: https://kore.io/ diff --git a/TODO.md b/TODO.md deleted file mode 100644 index 44b3803..0000000 --- a/TODO.md +++ /dev/null @@ -1,11 +0,0 @@ -# To-do # - -These are not prioritized. - -* Clarify licensing on all unclear works: - * CRlibm - * libRSVG - * Neon - * ZeroMQ -* Incorporate Elementary OS stuff into list. -* Incorporate Scalable C stuff into list.