build.sh: use exit not return. bash will print a warning message if
return is not used within a subroutine.
Merge remote-tracking branch 'original/master'
It turns out the string copy code in wpp/wbpp "collapses" the OPT_STRING
into a string by strcpy()'ing s->data over the struct. The programmer
who wrote that apparently assumed an implementation that copies
byte-for-byte, which might be true of many older C runtimes, but in
Linux, fails to account for GCC/GLIBC's use of DWORD or QWORD sized word
copies. When the copy unit is not a byte, string corruption can result
when the source and dest pointers overlap. Symptoms of this bug was that
the Watcom compiler could not compile itself properly because the
makefile referred to "xobjs/wcexcept.obj" which was then corrupted to
"xobjexcept.opt.obj". The bwpp tool would write it as
xobjexcept.opt.obj, and then builder and wmake would see that
xobjs/wcexcept.obj was not built and throw an error. This corruption was
generally invisible unless you ran that part of the build under
something that monitored file I/O, like "strace" in Linux which would
show the original and corrupted file names in use.

To be honest, I think the way the linker handles OPT_STRING is goddamn
messy, but that's for another commit.
Merge pull request #105 from joncampbell123/master

build.sh needs to use exit not return. reduceToOneString() in wpp needs to use memmove() not strcpy() to "collapse" the string without string corruption. This would also explain why I kept getting weird compile errors with xobjs/wcexcept.obj when compiling