Implementation Guidelines - GetPoplog/Seed GitHub Wiki

GetPoplog seeks to provide automation of the build and packaging process using familiar Unix tools. We try to keep our dependencies relatively light and very widely available on all Unixes.

  • /bin/bash is our preferred scripting language.
    • /bin/dash is an acceptable alternative for scripting.
  • GNU Make is our preferred build tool.
    • We hope to move to just in the not-too-distant future.
  • Python3 - any version that is at least 6 months old.
    • Python2 is not acceptable.

Makefile

The makefile should have a standard prelude, shown below:

################################################################################
### Standard Makefile intro
################################################################################

# Important check
MAKEFLAGS+=--warn-undefined-variables

# Causes the commands in a recipe to be issued in the same shell (beware cd commands not executed in a subshell!)
.ONESHELL:
SHELL:=/bin/bash

# When using ONESHELL, we want to exit on error (-e) and error if a command fails in a pipe (-o pipefail)
# When overriding .SHELLFLAGS one must always add a tailing `-c` as this is the default setting of Make.
.SHELLFLAGS:=-e -o pipefail -c

# Invoke the all target when no target is explicitly specified.
.DEFAULT_GOAL:=help

# Delete targets if their recipe exits with a non-zero exit code.
.DELETE_ON_ERROR: