Wrapper Mode

I have a project using Makefile; I don’t want to learn HyperMake. But building in container is very appealing to me.

hmake provides a special wrapper mode for legacy projects.

A Simple and Quick Start

echo '#hmake-wrapper gcc:4.9' >HyperMake

Now hmake becomes a wrapper of make

hmake target1 target2

is equivalent to

make target1 target2

but inside a container created from gcc:4.9.

Specification

In wrapper mode, HyperMake may contain one or more lines. The first line has specific format:

#hmake-wrapper IMAGE [BUILD-FROM] [BUILD-ARG1] [BUILD-ARG2] ...

It must start with #hmake-wrapper, and IMAGE is required to specify a docker image.

BUILD-FROM is optional, when present, hmake will create a toolchain target to build toolchain image for rest of other targets. It specifies the location of Dockerfile. And the rest of parameters are interpreted as --build-args for docker build.

If there’s only one line, hmake will invoke make with command line arguments. If there’re more lines:

  • If second line starts with #!, all lines from second line are copied as a script, and hmake invokes this script as build target;
  • If second line doesn’t start with #!, a line #!/bin/sh plus all lines from second line are copied as a script, and hmake executes the script.

Examples

Wraps over make

#hmake-wrapper gcc:4.9

Wraps over a python script

#hmake-wrapper python:2.7
#!/usr/bin/env python
print 'Hello'

Wraps over a shell script

#hmake-wrapper busybox
echo Hello