diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2018-02-09 17:28:49 -0500 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2018-02-09 17:29:55 -0500 |
commit | fe95d9386908cd2b199778db38eefdce1d054020 (patch) | |
tree | 4aa5f12ef1c920c832efff93abf162918fba426c /public/build-bash-1.html | |
parent | 208b8bb7a31158fabb444931e957a2b7185bfd9f (diff) | |
parent | 46238db12b6178ce3826665a1fea180dd28b0356 (diff) |
make: Update em-dashes for pandoc > 1.8.2.1
Diffstat (limited to 'public/build-bash-1.html')
-rw-r--r-- | public/build-bash-1.html | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/public/build-bash-1.html b/public/build-bash-1.html index 3c78a6d..f166d6e 100644 --- a/public/build-bash-1.html +++ b/public/build-bash-1.html @@ -12,9 +12,9 @@ <h1 id="building-bash-1.14.7-on-a-modern-system">Building Bash 1.14.7 on a modern system</h1> <p>In a previous revision of my <a href="./bash-arrays.html">Bash arrays post</a>, I wrote:</p> <blockquote> -<p>Bash 1.x won't compile with modern GCC, so I couldn't verify how it behaves.</p> +<p>Bash 1.x won’t compile with modern GCC, so I couldn’t verify how it behaves.</p> </blockquote> -<p>I recall spending a little time fighting with it, but apparently I didn't try very hard: getting Bash 1.14.7 to build on a modern box is mostly just adjusting it to use <code>stdarg</code> instead of the no-longer-implemented <code>varargs</code>. There's also a little fiddling with the pre-autoconf automatic configuration.</p> +<p>I recall spending a little time fighting with it, but apparently I didn’t try very hard: getting Bash 1.14.7 to build on a modern box is mostly just adjusting it to use <code>stdarg</code> instead of the no-longer-implemented <code>varargs</code>. There’s also a little fiddling with the pre-autoconf automatic configuration.</p> <h2 id="stdarg">stdarg</h2> <p>Converting to <code>stdarg</code> is pretty simple: For each variadic function (functions that take a variable number of arguments), follow these steps:</p> <ol type="1"> @@ -24,27 +24,27 @@ <li>Replace <code>va_start (args);</code> with <code>va_start (args, format);</code> in the function bodies.</li> <li>Replace <code>function_name ();</code> with <code>function_name (char *, ...)</code> in header files and/or at the top of C files.</li> </ol> -<p>There's one function that uses the variable name <code>control</code> instead of <code>format</code>.</p> -<p>I've prepared <a href="./bash-1.14.7-gcc4-stdarg.patch">a patch</a> that does this.</p> +<p>There’s one function that uses the variable name <code>control</code> instead of <code>format</code>.</p> +<p>I’ve prepared <a href="./bash-1.14.7-gcc4-stdarg.patch">a patch</a> that does this.</p> <h2 id="configuration">Configuration</h2> -<p>Instead of using autoconf-style tests to test for compiler and platform features, Bash 1 used the file <code>machines.h</code> that had <code>#ifdefs</code> and a huge database of of different operating systems for different platforms. It's gross. And quite likely won't handle your modern operating system.</p> +<p>Instead of using autoconf-style tests to test for compiler and platform features, Bash 1 used the file <code>machines.h</code> that had <code>#ifdefs</code> and a huge database of of different operating systems for different platforms. It’s gross. And quite likely won’t handle your modern operating system.</p> <p>I made these two small changes to <code>machines.h</code> to get it to work correctly on my box:</p> <ol type="1"> <li>Replace <code>#if defined (i386)</code> with <code>#if defined (i386) || defined (__x86_64__)</code>. The purpose of this is obvious.</li> -<li>Add <code>#define USE_TERMCAP_EMULATION</code> to the section for Linux [sic] on i386 (<code># if !defined (done386) && (defined (__linux__) || defined (linux))</code>). What this does is tell it to link against libcurses to use curses termcap emulation, instead of linking against libtermcap (which doesn't exist on modern GNU/Linux systems).</li> +<li>Add <code>#define USE_TERMCAP_EMULATION</code> to the section for Linux [sic] on i386 (<code># if !defined (done386) && (defined (__linux__) || defined (linux))</code>). What this does is tell it to link against libcurses to use curses termcap emulation, instead of linking against libtermcap (which doesn’t exist on modern GNU/Linux systems).</li> </ol> -<p>Again, I've prepared <a href="./bash-1.14.7-machines-config.patch">a patch</a> that does this.</p> +<p>Again, I’ve prepared <a href="./bash-1.14.7-machines-config.patch">a patch</a> that does this.</p> <h2 id="building">Building</h2> <p>With those adjustments, it should build, but with quite a few warnings. Making a couple of changes to <code>CFLAGS</code> should fix that:</p> <pre><code>make CFLAGS='-O -g -Werror -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast -Wno-deprecated-declarations -include stdio.h -include stdlib.h -include string.h -Dexp2=bash_exp2'</code></pre> -<p>That's a doozy! Let's break it down:</p> +<p>That’s a doozy! Let’s break it down:</p> <ul> <li><code>-O -g</code> The default value for CFLAGS (defined in <code>cpp-Makefile</code>)</li> <li><code>-Werror</code> Treat warnings as errors; force us to deal with any issues.</li> <li><code>-Wno-int-to-pointer-cast -Wno-pointer-to-int-cast</code> Allow casting between integers and pointers. Unfortunately, the way this version of Bash was designed requires this.</li> -<li><code>-Wno-deprecated-declarations</code> The <code>getwd</code> function in <code>unistd.h</code> is considered deprecated (use <code>getcwd</code> instead). However, if <code>getcwd</code> is available, Bash uses it's own <code>getwd</code> wrapper around <code>getcwd</code> (implemented in <code>general.c</code>), and only uses the signature from <code>unistd.h</code>, not the actuall implementation from libc.</li> +<li><code>-Wno-deprecated-declarations</code> The <code>getwd</code> function in <code>unistd.h</code> is considered deprecated (use <code>getcwd</code> instead). However, if <code>getcwd</code> is available, Bash uses it’s own <code>getwd</code> wrapper around <code>getcwd</code> (implemented in <code>general.c</code>), and only uses the signature from <code>unistd.h</code>, not the actuall implementation from libc.</li> <li><code>-include stdio.h -include stdlib.h -include string.h</code> Several files are missing these header file includes. If not for <code>-Werror</code>, the default function signature fallbacks would work.</li> -<li><code>-Dexp2=bash_exp2</code> Avoid a conflict between the parser's <code>exp2</code> helper function and <code>math.h</code>'s base-2 exponential function.</li> +<li><code>-Dexp2=bash_exp2</code> Avoid a conflict between the parser’s <code>exp2</code> helper function and <code>math.h</code>’s base-2 exponential function.</li> </ul> <p>Have fun, software archaeologists!</p> |