boxes/build.html
2017-03-15 22:29:06 +01:00

137 lines
6.7 KiB
HTML

---
layout: markdown
title: Building from Source
---
# Building from Source
Here's how to build your own version of *boxes* using the
[boxes sources](https://github.com/{{ site.github }}){:target="_blank"}.
The boxes development platform is currently MinGW on win32. If you are on a
different platform, please send in your binaries for inclusion among the files to
[download](https://github.com/ascii-boxes/boxes/releases).
Boxes is generally very easy to port, because it uses only a small set of instructions
and is comformant to the ANSI C standard.
Once built and deployed, *boxes* can be
[integrated into your text editor]({{ site.baseurl }}/docs/install.html).
We currently describe integration with vim, emacs, and jed, but
this list may grow as time goes by and people send how-tos.
## Building on Linux / UNIX
Just unzip the [source archive](https://github.com/{{ site.github }}/releases/latest){:target="_blank"}
or [clone the GitHub repo](https://help.github.com/articles/cloning-a-repository/){:target="_blank"}.
Make sure you have your C compiler installed, including
[Flex](https://github.com/westes/flex){:target="_blank"} and
[Bison](http://www.gnu.org/software/bison/){:target="_blank"}.
The location of the system-wide config file is compiled in, so if you don't like it's default location,
you can edit the top level *Makefile* and change the value of `GLOBALCONF` to
whereever you want the system-wide config file to reside. Note that
each user may have his/her own config file in *$HOME/.boxes*.
Also note that the value of `GLOBALCONF` is a full file name. It does
**not** specify a directory into which to copy the config file.
If you are on DEC/OSF, edit *src/regexp/Makefile*, and add `-D_ANSI_C_SOURCE` to the `CFLAGS` definition.
In the top level directory, type `make && make test`. Find the resulting binary in the *src* folder.
In case of problems, check the [compilation faq]({{ site.baseurl }}/docs/faq.html#q5).
That should be all. *Boxes* is built so that this works almost everywhere.
### Deployment
In order to deploy your newly created binary on Linux/UNIX, these steps are recommended:
- Copy *doc/boxes.1* to an appropriate manual page directory.
- Copy *boxes-config* to the location specified in the Makefile
as being the name of the system-wide boxes config file.
Note that the value of `GLOBALCONF` is the name of the file,
and **not** the name of a directory into which to copy the file.
So, the name of the config file is changed from *boxes-config* to just *boxes*.
- Copy *src/boxes* (the binary) to a location which is in your path.
Example (as root):
cp doc/boxes.1 /usr/share/man/man1
cp boxes-config /usr/share/boxes
cp src/boxes /usr/bin
If you want to make your own changes to the config file, copy the system-wide config file
into your home as *$HOME/.boxes*, then modify it. Boxes will use *$HOME/.boxes* if it exists.
<p><br/></p>
## Building on Windows
Boxes was written for UNIX, but it can also run on Windows! Boxes is a 32bit application, but it works on 64bit systems, too. Here's how to build on Windows.
> Special thanks go to Ron Aaron, who provided a specially crafted Makefile for win32 and also created the Windows versions of boxes that have been around to this day.
In order to build *boxes* on Windows, the required win32 executable can be created like this:
1. Install [MinGW32](http://www.mingw.org/){:target="_blank"}
2. Configure MinGW32
3. Open a MinGW shell and run `make win32`
Basically very simple, but there may be a few pitfalls, so we'll go through each step in detail.
### 1. Install MinGW32
1. Download MinGW from [mingw.org](http://www.mingw.org/){:target="_blank"} by pressing the **Download Installer** button in the top right corner of the page. You'll receive a mingw-get-setup.exe.
2. Right-click mingw-get-setup.exe and choose **Run as Administrator** from the pop-up menu.
This brings up the Installation Preferences.
3. Choose `C:\MinGW` as installation directory. This is really important. If for some reason you cannot use this highly recommended directory, choose another one that has a short path, does not contain spaces (!), and does not include a Windows "special path". For example, `C:\MinGW_2`.
4. Select "install support for GUI" (yes, even though *boxes* has no GUI) and install "for all users".
5. Press **Continue** and wait for download of the *Installation Manager*.
6. After the download of the Installation Manager is completed, press **Continue** again.
The Installation Manager opens.
7. Choose **mingw32-base** and **msys-base**. Also, further down, under *MSYS / MinGW Developer Toolkit*, choose **msys-bison** and **msys-flex**.
**Do not** install <tt>mingw-developer-toolkit</tt>, because if on 64bit, this requires tweaking of several environment variables to get gcc to use 32bit libs all around (which may be hard to get right for laymen).
8. In the menu, select *Installation* &rarr; *Apply Changes*.
Something like 104 Packages will be installed, which may take a few minutes.
9. Upon success, select *Installation* &rarr; *Quit* from the menu.
### 2. Configure MinGW32
1. Change into C:\MinGW\msys\1.0\etc.
2. Copy the file *fstab.sample* to a new file called simply *fstab*.
3. Open *fstab* and make sure that the only lines which are not comments are these:
c:/mingw /mingw
d:/path/to/boxes /boxes
Note that the whitespace in this example are tab characters. The d:/path/to/boxes is the path where you placed your clone of the boxes repo. Avoid spaces in its path, too.
4. Add C:\MinGW\bin to your system PATH.
5. Create a "MinGW Shell" shortcut somewhere (I chose my desktop). The shortcut invokes the C:\MinGW\msys\1.0\msys.bat script, which is installed as a component of MSYS; (if you installed to an alternative directory, you should adjust the C:\MinGW prefix accordingly).
An icon file is provided in the same directory, in case you want to set it on the new shortcut.
### 3. Open a MinGW shell and trigger the Windows build
1. Double click your new **MinGW Shell** shortcut icon.
This opens a command window with the correct environment set up for you, including the correct path references, allowing you to run any of the MinGW or MSYS applications within that command window.
2. Within the MinGW shell:
cd /boxes
make clean && make win32
If you want to create an executable with debug information, call `make clean && make win32.debug` instead.
3. boxes.exe is created in /boxes/src.
4. Optionally, run `make test` to check that your executable is working OK.
### 4. Deployment
In order to run boxes on any Windows machine, two files are required:
- boxes.exe
- boxes.cfg
*boxes.cfg* is obtained by simply renaming the *boxes-config* file from the root of the boxes repo into *boxes.cfg*.
Both files should be placed together somewhere on your PATH.