iInitial commit. - bitreich-style - Style guide for programmers. Err bitreich.org 70
hgit clone git://bitreich.org/bitreich-style URL:git://bitreich.org/bitreich-style bitreich.org 70
1Log /scm/bitreich-style/log.gph bitreich.org 70
1Files /scm/bitreich-style/files.gph bitreich.org 70
1Refs /scm/bitreich-style/refs.gph bitreich.org 70
1Tags /scm/bitreich-style/tag bitreich.org 70
1README /scm/bitreich-style/file/README.md.gph bitreich.org 70
1LICENSE /scm/bitreich-style/file/LICENSE.gph bitreich.org 70
i--- Err bitreich.org 70
1commit 040830cabbba670cfbac39d214fe274d7c10b88d /scm/bitreich-style/commit/040830cabbba670cfbac39d214fe274d7c10b88d.gph bitreich.org 70
hAuthor: Christoph Lohmann <20h@r-36.net> URL:mailto:20h@r-36.net bitreich.org 70
iDate: Wed, 10 Jun 2020 14:26:06 +0200 Err bitreich.org 70
i Err bitreich.org 70
iInitial commit. Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i A LICENSE | 16 ++++++++++++++++ Err bitreich.org 70
i A Principles.md | 58 ++++++++++++++++++++++++++++++ Err bitreich.org 70
i A README.md | 23 +++++++++++++++++++++++ Err bitreich.org 70
i A c/makefile-guideline.txt | 272 +++++++++++++++++++++++++++++++ Err bitreich.org 70
i Err bitreich.org 70
i4 files changed, 369 insertions(+), 0 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/LICENSE b/LICENSE /scm/bitreich-style/file/LICENSE.gph bitreich.org 70
i@@ -0,0 +1,16 @@ Err bitreich.org 70
i+ISC License Err bitreich.org 70
i+ Err bitreich.org 70
i+Copyright (c) 2020 Christoph Lohmann <20h@r-36.net> Err bitreich.org 70
i+Copyright (c) 2020 Hiltjo Posthuma <hiltjo@codemadness.org> Err bitreich.org 70
i+ Err bitreich.org 70
i+Permission to use, copy, modify, and/or distribute this software for any Err bitreich.org 70
i+purpose with or without fee is hereby granted, provided that the above Err bitreich.org 70
i+copyright notice and this permission notice appear in all copies. Err bitreich.org 70
i+ Err bitreich.org 70
i+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES Err bitreich.org 70
i+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF Err bitreich.org 70
i+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR Err bitreich.org 70
i+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES Err bitreich.org 70
i+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN Err bitreich.org 70
i+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF Err bitreich.org 70
i+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Err bitreich.org 70
1diff --git a/Principles.md b/Principles.md /scm/bitreich-style/file/Principles.md.gph bitreich.org 70
i@@ -0,0 +1,58 @@ Err bitreich.org 70
i+# Principles Err bitreich.org 70
i+ Err bitreich.org 70
i+Please first see the Bitreich Manifesto at Err bitreich.org 70
i+ Err bitreich.org 70
i+ gopher://bitreich.org/0/documents/bitreich-manifesto.md Err bitreich.org 70
i+ Err bitreich.org 70
i+ Err bitreich.org 70
i+## KISP – Keep It Simple Perfect Err bitreich.org 70
i+ Err bitreich.org 70
i+* Make a project do one thing well. Err bitreich.org 70
i+* A project can be done, does not need change just because. Err bitreich.org 70
i+ Err bitreich.org 70
i+## Commandline Interfaces Err bitreich.org 70
i+ Err bitreich.org 70
i+* Always add a commandline interface so advanced users can script your Err bitreich.org 70
i+application and thus have more fun using it. Err bitreich.org 70
i+ Err bitreich.org 70
i+## When Possible Use GPLv3 Err bitreich.org 70
i+ Err bitreich.org 70
i+* Use which license you like, but think of the future, when people might Err bitreich.org 70
i+use your software in war or other inhumane things. A life of open source Err bitreich.org 70
i+is not just about the CV and getting a Google job with a small home, bad Err bitreich.org 70
i+sex in marriage and a dog. Err bitreich.org 70
i+ Err bitreich.org 70
i+## Users are Programmers Err bitreich.org 70
i+ Err bitreich.org 70
i+* First think of the programmers who might want to change your Err bitreich.org 70
i+application, help you, find bugs you have not spotted because you made Err bitreich.org 70
i+the application. Make this as simple as possible to contribute. Err bitreich.org 70
i+* Some ugly website which requires Gigabytes of RAM and big hardware is Err bitreich.org 70
i+not a simple access and will only make your own brain in the long run Err bitreich.org 70
i+fluid. Err bitreich.org 70
i+* Always add a Makefile using common methodologies and commands so Err bitreich.org 70
i+people can easily build your software. Do not make a build framework for Err bitreich.org 70
i+every new project. Make(1) knows most things needed, you may not have Err bitreich.org 70
i+read the documentation properly. Err bitreich.org 70
i+ Err bitreich.org 70
i+## Straightforward Documentation Err bitreich.org 70
i+ Err bitreich.org 70
i+* When compiling software you realize, that people are using all kind of Err bitreich.org 70
i+bloated tools to generate documentation. Please do not be like that. Err bitreich.org 70
i+Think of all the people having to compile this to get your application. Err bitreich.org 70
i+Use what is more descriptive and easy to use: Man pages, a text or the Err bitreich.org 70
i+source. Err bitreich.org 70
i+ Err bitreich.org 70
i+## Applications Can Be Done Err bitreich.org 70
i+ Err bitreich.org 70
i+* If your application does what it should do, but suddenly you have a Err bitreich.org 70
i+new big idea, make a new project, do not push the old one. There are old Err bitreich.org 70
i+users who do not think the same as you. Err bitreich.org 70
i+ Err bitreich.org 70
i+## Freedom Of Language Err bitreich.org 70
i+ Err bitreich.org 70
i+* Use whatever language you like. Err bitreich.org 70
i+* Think of the dependencies. If you use slow to compile languages, you Err bitreich.org 70
i+will waste hours of lifetime of others. Do not be an asshole to those Err bitreich.org 70
i+people. Err bitreich.org 70
i+ Err bitreich.org 70
1diff --git a/README.md b/README.md /scm/bitreich-style/file/README.md.gph bitreich.org 70
i@@ -0,0 +1,23 @@ Err bitreich.org 70
i+# Bitreich Style Err bitreich.org 70
i+ Err bitreich.org 70
i+## Description Err bitreich.org 70
i+ Err bitreich.org 70
i+This repository's purpose is to document style, simple tutorials on how Err bitreich.org 70
i+to start projects, hints for new developers on how packagers or other Err bitreich.org 70
i+developers think. Overall it is to make open source a nicer place, which Err bitreich.org 70
i+does not get ugly over time or slower due to people just adding what Err bitreich.org 70
i+they found on stackoverflow over eachother because they never learned Err bitreich.org 70
i+the basics. Err bitreich.org 70
i+ Err bitreich.org 70
i+## Bugs / Hints Err bitreich.org 70
i+ Err bitreich.org 70
i+Send bugs / hints to Err bitreich.org 70
i+ Err bitreich.org 70
i+ Christoph Lohmann <20h@r-36.net> Err bitreich.org 70
i+ Err bitreich.org 70
i+or on #bitreich-en on Freenode. Err bitreich.org 70
i+ Err bitreich.org 70
i+ Err bitreich.org 70
i+ Err bitreich.org 70
i+Have fun! Err bitreich.org 70
i+ Err bitreich.org 70
1diff --git a/c/makefile-guideline.txt b/c/makefile-guideline.txt /scm/bitreich-style/file/c/makefile-guideline.txt.gph bitreich.org 70
i@@ -0,0 +1,272 @@ Err bitreich.org 70
i+Title: Guidelins for writing simple portable Makefiles Err bitreich.org 70
i+ Err bitreich.org 70
i+ Err bitreich.org 70
i+This page describes some guidelines and good practises for writing simple Err bitreich.org 70
i+portable POSIX Makefiles. It assumes a basic level of understanding in writing Err bitreich.org 70
i+Makefiles already. It will focus on projects that use the C programming Err bitreich.org 70
i+language. Err bitreich.org 70
i+ Err bitreich.org 70
i+make is used because it has been around for a long time, it is available on Err bitreich.org 70
i+many systems, it is a POSIX standard and it has proven to work well for most Err bitreich.org 70
i+projects. Err bitreich.org 70
i+ Err bitreich.org 70
i+ Err bitreich.org 70
i+Targets Err bitreich.org 70
i+------- Err bitreich.org 70
i+ Err bitreich.org 70
i+The following targets should be defined in the Makefile: Err bitreich.org 70
i+ Err bitreich.org 70
i+* all or the "default": build the project. Err bitreich.org 70
i+* clean: clean files used by compilation, such as: object files, compiled Err bitreich.org 70
i+ binaries. Err bitreich.org 70
i+* install: install the build project. Err bitreich.org 70
i+* uninstall (optional): uninstall the project. Err bitreich.org 70
i+* dist (optional): create a source tarball of the project intended as Err bitreich.org 70
i+ redistribution for source packages. Err bitreich.org 70
i+* tests (optional): run unit tests. Err bitreich.org 70
i+ Err bitreich.org 70
i+ Err bitreich.org 70
i+Portability Err bitreich.org 70
i+----------- Err bitreich.org 70
i+ Err bitreich.org 70
i+Do not use GNUisms in Makefiles. Testing with different make implementations Err bitreich.org 70
i+like BSD make which mostly respect POSIX is very useful. Use POSIX Makefile Err bitreich.org 70
i+rules: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html Err bitreich.org 70
i+ Err bitreich.org 70
i+ Err bitreich.org 70
i+Variables Err bitreich.org 70
i+--------- Err bitreich.org 70
i+ Err bitreich.org 70
i+It is recommended to respect the following commonly-used variables. Err bitreich.org 70
i+ Err bitreich.org 70
i+* $DESTDIR: for the install targets make use of the $DESTDIR variable. This Err bitreich.org 70
i+ make it simpler to install the package to an other location and make binary Err bitreich.org 70
i+ packages. It is the prefix destination directory to install to (before $PREFIX). Err bitreich.org 70
i+ It should be unset by default. Err bitreich.org 70
i+ Err bitreich.org 70
i+* $PREFIX: this specifies the prefix location to install to, it should be Err bitreich.org 70
i+ "/usr/local" by default since this is most commonly used for ports. Err bitreich.org 70
i+ Err bitreich.org 70
i+* $MANPREFIX or $MANDIR: Err bitreich.org 70
i+ * Distributions can use different locations for man pages for ports or in general. Err bitreich.org 70
i+ * Some distributions package documentation in a separate package (project-doc). Err bitreich.org 70
i+ Err bitreich.org 70
i+Specifying compiler and linker flags: Err bitreich.org 70
i+ Err bitreich.org 70
i+* $CC, $CFLAGS, $LDFLAGS, $CPPFLAGS: make sure to respect the default set flags Err bitreich.org 70
i+ as specified in POSIX: https://pubs.opengroup.org/onlinepubs/9699919799/ Err bitreich.org 70
i+ under the section "Default rules". This make it easier for the ports build system Err bitreich.org 70
i+ to use the set variables and not having to patch the Makefile in some way. Err bitreich.org 70
i+* $CFLAGS: do not hard-code optimization flags like (-O2) or diagnostic flags such as Err bitreich.org 70
i+ -Wall, -Wextra, -pedantic. Of course do not specify unportable compiler flags. Err bitreich.org 70
i+* $LDFLAGS: do not hard-code linker flags like -s (symbol stripping) or -g, -static Err bitreich.org 70
i+ or such flags. Err bitreich.org 70
i+* Libraries: using separate variables for compile and link per library (for Err bitreich.org 70
i+ example libpng, libjpeg) can be useful for building in ports. Err bitreich.org 70
i+ For example a variable LIBPNG_CFLAGS, LIBPNG_LDFLAGS for the header files or Err bitreich.org 70
i+ library location. Err bitreich.org 70
i+ Err bitreich.org 70
i+ Err bitreich.org 70
i+Considerations Err bitreich.org 70
i+-------------- Err bitreich.org 70
i+ Err bitreich.org 70
i+* It is not recommended to suppress compilation output with the @ prefix (for Err bitreich.org 70
i+ example to make output look nicer aligned). The verbose output is very useful Err bitreich.org 70
i+ for debugging and suppressing it only adds debugging abstractions. Err bitreich.org 70
i+ Err bitreich.org 70
i+* Try to use a single-file Makefile for atleast small projects. If needed some Err bitreich.org 70
i+ configuration could be included from the Makefile: config.mk. Keep in mind Err bitreich.org 70
i+ reducing abstractions will increase readability and debugability. Package Err bitreich.org 70
i+ maintainers/porters do not want to have to relearn a new system for each Err bitreich.org 70
i+ software package. Err bitreich.org 70
i+ Err bitreich.org 70
i+* As specified above different systems can use different locations for certain Err bitreich.org 70
i+ things like man pages, X11 header files and libraries and ports installation. Err bitreich.org 70
i+ Err bitreich.org 70
i+ Examples: Err bitreich.org 70
i+ * X11: commonly uses /usr/X11R6 on BSD-like platforms. Err bitreich.org 70
i+ * Man page directories: on OpenBSD: /usr/local/man. Err bitreich.org 70
i+ Err bitreich.org 70
i+Testing on many different systems is useful! For example: Linux, OpenBSD, NetBSD. Err bitreich.org 70
i+ Err bitreich.org 70
i+ Err bitreich.org 70
i+Examples Err bitreich.org 70
i+-------- Err bitreich.org 70
i+ Err bitreich.org 70
i+Below is an example of a project json2tsv Makefile. It is line-numbered and Err bitreich.org 70
i+below are some added remarks why things are done the way they are. Err bitreich.org 70
i+ Err bitreich.org 70
i+ 1 .POSIX: Err bitreich.org 70
i+ Err bitreich.org 70
i+Specify POSIX compatibility: "To receive exactly the behavior described in this Err bitreich.org 70
i+section, the user shall ensure that a portable makefile shall: Include the Err bitreich.org 70
i+special target .POSIX" Err bitreich.org 70
i+ Err bitreich.org 70
i+ 2 Err bitreich.org 70
i+ 3 NAME = json2tsv Err bitreich.org 70
i+ 4 VERSION = 0.5 Err bitreich.org 70
i+ 5 Err bitreich.org 70
i+ Err bitreich.org 70
i+Define a name and version variable of the project which can be reused, for Err bitreich.org 70
i+example for the dist tarball. Err bitreich.org 70
i+ Err bitreich.org 70
i+ 6 # paths Err bitreich.org 70
i+ 7 PREFIX = /usr/local Err bitreich.org 70
i+ 8 MANPREFIX = ${PREFIX}/man Err bitreich.org 70
i+ 9 DOCPREFIX = ${PREFIX}/share/doc/${NAME} Err bitreich.org 70
i+ 10 Err bitreich.org 70
i+ Err bitreich.org 70
i+Specify default sane paths. Err bitreich.org 70
i+ Err bitreich.org 70
i+ 11 RANLIB = ranlib Err bitreich.org 70
i+ 12 Err bitreich.org 70
i+ Err bitreich.org 70
i+This variable is not specified by default in POSIX. It is commonly "ranlib", Err bitreich.org 70
i+but can be overwritten. Err bitreich.org 70
i+ Err bitreich.org 70
i+ 13 BIN = ${NAME} Err bitreich.org 70
i+ Err bitreich.org 70
i+In this case it's simple: the binary is the program name. Err bitreich.org 70
i+ Err bitreich.org 70
i+ 14 SRC = ${BIN:=.c} Err bitreich.org 70
i+ Err bitreich.org 70
i+C source files, so just json2tsv.c here. Err bitreich.org 70
i+ Err bitreich.org 70
i+ 15 HDR = json.h Err bitreich.org 70
i+ Err bitreich.org 70
i+Header files. Err bitreich.org 70
i+ Err bitreich.org 70
i+ 16 MAN1 = ${BIN:=.1} Err bitreich.org 70
i+ Err bitreich.org 70
i+Man section 1 pages. Err bitreich.org 70
i+ Err bitreich.org 70
i+ 17 DOC = \ Err bitreich.org 70
i+ 18 LICENSE\ Err bitreich.org 70
i+ 19 README Err bitreich.org 70
i+ 20 Err bitreich.org 70
i+ Err bitreich.org 70
i+Other documentation and license files. Err bitreich.org 70
i+ Err bitreich.org 70
i+ 21 LIBJSON = libjson.a Err bitreich.org 70
i+ 22 LIBJSONSRC = json.c Err bitreich.org 70
i+ 23 LIBJSONOBJ = ${LIBJSONSRC:.c=.o} Err bitreich.org 70
i+ 24 Err bitreich.org 70
i+ 25 LIB = ${LIBJSON} Err bitreich.org 70
i+ 26 Err bitreich.org 70
i+ Err bitreich.org 70
i+Build the json.c file as a local reusable linkable library (libjson.a). Err bitreich.org 70
i+ Err bitreich.org 70
i+ 27 all: ${BIN} Err bitreich.org 70
i+ 28 Err bitreich.org 70
i+ Err bitreich.org 70
i+The default build rule: build the binary. Err bitreich.org 70
i+ Err bitreich.org 70
i+ 29 ${BIN}: ${LIB} ${@:=.o} Err bitreich.org 70
i+ 30 Err bitreich.org 70
i+ Err bitreich.org 70
i+The binary depends on the own libjson library and object files. Err bitreich.org 70
i+ Err bitreich.org 70
i+ 31 OBJ = ${SRC:.c=.o} ${LIBJSONOBJ} Err bitreich.org 70
i+ 32 Err bitreich.org 70
i+ Err bitreich.org 70
i+The object files are all C source-code substituted to from .c to .o and the Err bitreich.org 70
i+local libjson library files, so: json2tsv.o json.o Err bitreich.org 70
i+ Err bitreich.org 70
i+ 33 ${OBJ}: ${HDR} Err bitreich.org 70
i+ 34 Err bitreich.org 70
i+ Err bitreich.org 70
i+Ensure the object files are recompiled if the header file contents change. Err bitreich.org 70
i+ Err bitreich.org 70
i+ 35 .o: Err bitreich.org 70
i+ 36 ${CC} ${LDFLAGS} -o $@ $< ${LIB} Err bitreich.org 70
i+ Err bitreich.org 70
i+Linking, use the system specified LDFLAGS. Err bitreich.org 70
i+ Err bitreich.org 70
i+ 37 Err bitreich.org 70
i+ 38 .c.o: Err bitreich.org 70
i+ 39 ${CC} ${CFLAGS} ${CPPFLAGS} -o $@ -c $< Err bitreich.org 70
i+ Err bitreich.org 70
i+Compiling, use the system specified CFLAGS and CPPFLAGS. Err bitreich.org 70
i+ Err bitreich.org 70
i+ 40 Err bitreich.org 70
i+ 41 ${LIBJSON}: ${LIBJSONOBJ} Err bitreich.org 70
i+ 42 ${AR} rc $@ $? Err bitreich.org 70
i+ 43 ${RANLIB} $@ Err bitreich.org 70
i+ 44 Err bitreich.org 70
i+ Err bitreich.org 70
i+Create an archive of the libjson object files. Note that ar -s is an extension Err bitreich.org 70
i+so ranlib is called as a separate command. It is also useful to be specified Err bitreich.org 70
i+separately for cross-compiling. Err bitreich.org 70
i+ Err bitreich.org 70
i+ 45 dist: Err bitreich.org 70
i+ 46 rm -rf "${NAME}-${VERSION}" Err bitreich.org 70
i+ 47 mkdir -p "${NAME}-${VERSION}" Err bitreich.org 70
i+ 48 cp -f ${MAN1} ${DOC} ${HDR} \ Err bitreich.org 70
i+ 49 ${SRC} ${LIBJSONSRC} Makefile "${NAME}-${VERSION}" Err bitreich.org 70
i+ Err bitreich.org 70
i+Use the -f (force) options for rm to make sure to not return an error in-case Err bitreich.org 70
i+of failure. For cp it ensures to overwrite the file even if it is busy. For Err bitreich.org 70
i+mkdir the -p flag is used to create all intermediary directories and to not Err bitreich.org 70
i+return an error if the directory already exists. Err bitreich.org 70
i+ Err bitreich.org 70
i+ 50 # make tarball Err bitreich.org 70
i+ 51 tar -cf - "${NAME}-${VERSION}" | gzip -c > "${NAME}-${VERSION}.tar.gz" Err bitreich.org 70
i+ Err bitreich.org 70
i+Make a tarball. gzip from stdin is used for portability (tar -z is non-POSIX). Err bitreich.org 70
i+https://pubs.opengroup.org/onlinepubs/007908799/xcu/tar.html Err bitreich.org 70
i+ Err bitreich.org 70
i+ 52 rm -rf "${NAME}-${VERSION}" Err bitreich.org 70
i+ 53 Err bitreich.org 70
i+ Err bitreich.org 70
i+ 54 clean: Err bitreich.org 70
i+ 55 rm -f ${BIN} ${OBJ} ${LIB} Err bitreich.org 70
i+ Err bitreich.org 70
i+Remove the binary, object files and the local archive library (.a) file. Err bitreich.org 70
i+ Err bitreich.org 70
i+ 56 Err bitreich.org 70
i+ 57 install: all Err bitreich.org 70
i+ 58 # installing executable files. Err bitreich.org 70
i+ 59 mkdir -p "${DESTDIR}${PREFIX}/bin" Err bitreich.org 70
i+ 60 cp -f ${BIN} "${DESTDIR}${PREFIX}/bin" Err bitreich.org 70
i+ Err bitreich.org 70
i+For cp it ensures to overwrite the file even if it is installed already and Err bitreich.org 70
i+busy as a process. Err bitreich.org 70
i+ Err bitreich.org 70
i+ 61 for f in ${BIN}; do chmod 755 "${DESTDIR}${PREFIX}/bin/$$f"; done Err bitreich.org 70
i+ 62 # installing example files. Err bitreich.org 70
i+ 63 mkdir -p "${DESTDIR}${DOCPREFIX}" Err bitreich.org 70
i+ 64 cp -f README "${DESTDIR}${DOCPREFIX}" Err bitreich.org 70
i+ 65 # installing manual pages for general commands: section 1. Err bitreich.org 70
i+ 66 mkdir -p "${DESTDIR}${MANPREFIX}/man1" Err bitreich.org 70
i+ 67 cp -f ${MAN1} "${DESTDIR}${MANPREFIX}/man1" Err bitreich.org 70
i+ 68 for m in ${MAN1}; do chmod 644 "${DESTDIR}${MANPREFIX}/man1/$$m"; done Err bitreich.org 70
i+ 69 Err bitreich.org 70
i+ Err bitreich.org 70
i+Explicitly sets permissions for executable files and for documentation. Err bitreich.org 70
i+ Err bitreich.org 70
i+ 70 uninstall: Err bitreich.org 70
i+ 71 # removing executable files. Err bitreich.org 70
i+ 72 for f in ${BIN}; do rm -f "${DESTDIR}${PREFIX}/bin/$$f"; done Err bitreich.org 70
i+ 73 # removing example files. Err bitreich.org 70
i+ 74 rm -f "${DESTDIR}${DOCPREFIX}/README" Err bitreich.org 70
i+ Err bitreich.org 70
i+ 75 -rmdir "${DESTDIR}${DOCPREFIX}" Err bitreich.org 70
i+ Err bitreich.org 70
i+Try to remove the doc directory, but if it is shared by other packages and Err bitreich.org 70
i+rmdir returns an error code then that is ok and make still proceeds. Err bitreich.org 70
i+ Err bitreich.org 70
i+ 76 # removing manual pages. Err bitreich.org 70
i+ 77 for m in ${MAN1}; do rm -f "${DESTDIR}${MANPREFIX}/man1/$$m"; done Err bitreich.org 70
i+ 78 Err bitreich.org 70
i+ 79 .PHONY: all clean dist install uninstall Err bitreich.org 70
i+ Err bitreich.org 70
i+ Err bitreich.org 70
i+ Err bitreich.org 70
i+ Err bitreich.org 70
i+TODO Err bitreich.org 70
i+ Err bitreich.org 70
i+References: Err bitreich.org 70
i+- https://www.gnu.org/prep/standards/standards.html#DESTDIR Err bitreich.org 70
i+- https://nullprogram.com/blog/2017/08/20/ Err bitreich.org 70
i+ Err bitreich.org 70
i+- https://www.openbsd.org/faq/ports/ Err bitreich.org 70
.
Response:
text/plain