My notes for Makeshift

    builders
        / Properly ‘software builders’.
      \ - A builder is coded all in one file.
      \     - A default copy of the builder is included in the release package.
      \     - The builder itself warns if it needs to be updated owing to change in the default copy.
      \         / Viz. after a new release of the Breccia Web imager has been installed.
      \         - Only a programmer will ever see this, or have to act on it.
      \         - It is updated manually by reference to a public diff.
      \             / E.g. via a URL into a Web copy of the release repository, e.g. on Git Hub.
      \             / Later maybe also as Gentoo users do, by a tool-assisted merger.
      \ - To personalize the builder, I will build from a private branch of the project.
      \     - While I code in the master branch, I build in my private branch.
      \     - My private branch alone has my personalized copy of the builder.
      \     - Building initially entails merging any changes from the master branch and, if necessary,
      \       restarting the builder.
        - The function of software builders is personalized as follows.
            - They use the general path mechanism of the OS.
                / E.g. to locate the JDK.
            - They use conventional locations.
                / E.g. `/tmp/` in the case of the output directory,
                  namely `/tmp/Makeshift/<project-proper-path>`.
            - They use relative file references.
                / E.g. to locate other projects which are dependencies.
            - They take parameters.
                - Via the shell.
                - Via environment variable `BUILD_PARAMETERS`.
        - They put intermediate and end results under `/tmp/Makeshift/<project-proper-path>`.
        - Software builders use:
            • `jpackage`
                : see https://openjdk.java.net/jeps/343
                + Would it be useful, given builder and launcher?
    ‘builder’ vs. ‘building’
        - Term (and project subdirectory) ‘builder’ I use to refer to a project’s proper builder
          together with the building code (internal and external) it depends on and entails.
        - Term (and directory) ‘building’ I apply to building code that builders elsewhere may depend on.
        / E.g. the Java programming project’s proper builder I might store in `Java/builder/`,
          while in `Java/building/` I house a separate project of Java-specific building code.
    target naming
        - Characters ‘-’ and ‘_’ are equivalent in user-given target names.
            ∵ The user description for targets is in source code that necessarily uses ‘_’,
              while ‘-’ is more convenient for users to type in the shell.
        - Targets are defined in the source code as enumeration constants each having a lower-case name.
            ∵ Lower case, while atypical, is more convenient for users to type in the shell.
    testing
        >+ clean && build Makeshift/example/top/ builder custom
        >+ clean && build Makeshift/example/top/ builder
        >+ clean && build Makeshift/example/top/ custom
        >+ clean && build Makeshift/example/mixed_top/ builder custom class_files
        >+ clean && build Makeshift/example/mixed_top/ builder
        >+ clean && build Makeshift/example/mixed_top/ custom
        >+ clean && build Makeshift/example/mixed_top/ class_files
        >+ clean && build Makeshift/example/sub/ builder custom class_files
        >+ clean && build Makeshift/example/sub/ builder
        >+ clean && build Makeshift/example/sub/ class_files
        >+ clean && build Makeshift/example/sub/ custom