Skip to content

Commit

Permalink
Use Bash as shell in Makefile (#345)
Browse files Browse the repository at this point in the history
This issue has been bugging me for a while and I was finally triggered
enough to do something about it. If one runs make on macOS then "echo"
ignores the "-n" flag which suppresses newline output. Then instead
of a nice output:

    link soter_static                   [OK]
    link themis_static                  [OK]
    link soter_shared                   [OK]
    link themis_shared                  [OK]
    0.10.0

one sees the following monstrosity:

    -n link
    soter_static                   [OK]
    -n link
    themis_static                  [OK]
    -n link
    soter_shared                   [OK]
    -n link
    themis_shared                  [OK]
    0.10.0

This is caused by multitude of factors. First of all, GNU make uses
/bin/sh by default to execute shell commands. This can be overridden
by setting the SHELL make variable (*environment* variable is ignored).

Usually on UNIX systems /bin/sh is a symlink or a drop-in replacement
to some 'maximally portable POSIX shell' which resembles the original
Bourne shell. On macOS /bin/sh is renamed Bash binary. I believe
some other UNIX systems do so as well. When Bash is invoked as "sh"
it enables Bourne shell compatibility mode:

    If bash is invoked with the name sh, it tries to mimic the startup
    behavior of historical versions of sh as closely as possible, while
    conforming to the POSIX standard as well.
                                                       -- man 1 bash

"echo" is normally a shell built-in (so that the shell does not execute
actual /bin/echo all the time), so its options are determined by the
shell and its compatibility mode. The "-n" option is supported by Bash
and by most of echo binaries, but not by Bourne shell's echo builtin.

So, set SHELL to Bash in order to have nice behavior of the "echo"
builtin. A more correct way would be to disable the builtin and make
sure that the shell runs /bin/echo, but that's much harder to do.
This can be offensive towards POSIX compatibility purists, but if they
run Themis builds on a system where Bash is not available they can
comment out that line and get their /bin/sh back. While we're gonna
enjoy nice progress reports with correct newlines.
  • Loading branch information
ilammy authored and vixentael committed Nov 26, 2018
1 parent 161e544 commit 0761eb4
Showing 1 changed file with 1 addition and 0 deletions.
1 change: 1 addition & 0 deletions Makefile
Expand Up @@ -15,6 +15,7 @@
#

#CC = clang
SHELL = /bin/bash
SRC_PATH = src
ifneq ($(BUILD_PATH),)
BIN_PATH = $(BUILD_PATH)
Expand Down

0 comments on commit 0761eb4

Please sign in to comment.