@ -2,10 +2,16 @@
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				Compiling DFHack
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				################
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				You don't need to compile DFHack unless you're developing plugins or working on the core.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				DFHack builds are available for all supported platforms; see `installing`   for
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				installation instructions. If you are a DFHack end-user, modder, or plan on
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				writing scripts (not plugins), it is generally recommended (and easier) to use
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				these builds instead of compiling DFHack from source.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				For users, modders, and authors of scripts it's better to download
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				and `install the latest release instead <installing>`  .
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				However, if you are looking to develop plugins, work on the DFHack core, make
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				complex changes to DF-structures, or anything else that requires compiling
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				DFHack from source, this document will walk you through the build process. Note
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				that some steps may be unconventional compared to other projects, so be sure to
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				pay close attention if this is your first time compiling DFHack.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				..  contents :: 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				   :depth:  2 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -14,35 +20,60 @@ and `install the latest release instead <installing>`.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				How to get the code
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				===================
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				DFHack doesn't have any kind of system of code snapshots in place, so you will have to
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				get code from the GitHub repository using Git.  How to get Git is described under
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				the instructions for each platform.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				To get the latest release code (master branch)::
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				DFHack uses Git for source control; instructions for installing Git can be found
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				in the platform-specific sections below. The code is hosted on
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				`GitHub  <https://github.com/DFHack/dfhack> `_ , and can be downloaded with::
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    git clone --recursive https://github.com/DFHack/dfhack
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    cd dfhack
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				If your version of Git does not support the `` --recursive ``  flag, you will need to omit it and run
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				`` git submodule update --init ``  after entering the dfhack directory.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				If your version of Git does not support the `` --recursive ``  flag, you will need
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				to omit it and run `` git submodule update --init ``  after entering the dfhack
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				directory.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				To get the latest development code (develop branch), clone as above and then::
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				This will check out the code on the default branch of the GitHub repo, currently
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				`` develop `` , which may be unstable. If you want code for the latest stable
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				release, you can check out the `` master ``  branch instead::
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  git checkout develop
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  git checkout master 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  git submodule update
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				Generally, you should only need to clone DFHack once.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				**Important note regarding submodule update after pulling or changing branches** :
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				You must run `` git submodule update ``  every time you change branches, such as
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				when switching between the master and develop branches or vice versa. You also
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				must run it after pulling any changes to submodules from the DFHack repo. If a
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				submodule only exists on the newer branch, or if a commit you just pulled
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				contains a new submodule, you need to run `` git submodule update --init `` .
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				Failure to do this may result in a variety of errors, including `` fatal: <path> 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				does not exist``  when using Git, errors when building DFHack, and  ` ` not a known 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				DF version``  when starting DF. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				In general, a single DFHack clone is suitable for development - most Git
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				operations such as switching branches can be done on an existing clone. If you
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				find yourself cloning DFHack frequently as part of your development process, or
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				getting stuck on anything else Git-related, feel free to reach out to us for
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				assistance.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				..  admonition ::  A note on submodules
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  DFHack uses submodules extensively to manage its subprojects (including the
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  `` scripts ``  folder and DF-structures in `` library/xml `` ). Failing to keep
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  submodules in sync when switching between branches can result in build errors
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  or scripts that don't work. In general, you should always update submodules
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  whenever you switch between branches in the main DFHack repo with
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  `` git submodule update `` . (If you are working on bleeding-edge DFHack and
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  have checked out the master branch of some submodules, running `` git pull `` 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  in those submodules is also an option.)
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  Rarely, we add or remove submodules. If there are any changes to the existence
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  of submodules when you switch between branches, you should run
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  `` git submodule update --init ``  instead (adding `` --init ``  to the above
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  command).
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  Some common errors that can arise when failing to update submodules include:
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  * `` fatal: <some path> does not exist ``  when performing Git operations
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  * Build errors, particularly referring to structures in the `` df:: ``  namespace
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    or the `` library/include/df ``  folder
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  * `` Not a known DF version ``  when starting DF
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  * `` Run 'git submodule update --init' ``  when running CMake
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  Submodules are a particularly confusing feature of Git. The
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  `Git Book  <https://git-scm.com/book/en/v2/Git-Tools-Submodules> `_  has a
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  thorough explanation of them (as well as of many other aspects of Git) and
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  is a recommended resource if you run into any issues. Other DFHack developers
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  are also able to help with any submodule-related (or Git-related) issues
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  you may encounter.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				**More notes** :
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -51,18 +82,21 @@ DF version`` when starting DF.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				Contributing to DFHack
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				======================
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				If you want to get involved with the development, create an account on
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				GitHub, make a clone there and then use that as your remote repository instead.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				We'd love that; join us on IRC_ (#dfhack channel on freenode) for discussion,
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				and whenever you need help.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				To contribute to DFHack on GitHub, you will need a GitHub account. Only some
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				DFHack developers can push directly to the DFHack repositories; we recommend
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				making a fork of whatever repos you are interested in contributing to, making
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				changes there, and submitting pull requests.  `GitHub's pull request tutorial
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				<https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/proposing-changes-to-your-work-with-pull-requests> `_
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				is a good resource for getting started with pull requests (some things to note:
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				our work mainly happens on the `` develop ``  branch, and you will need to use
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				your own fork, assuming that you don't have write access to the DFHack repos).
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				..  _IRC:  https://webchat.freenode.net/?channels=dfhack
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				Most development-related discussion happens on IRC or in individual GitHub
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				issues and pull requests, but there are also other ways to reach out - see
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				`support`   for details.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				(Note: for submodule issues, please see the above instructions first!)
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				For lots more details on contributing to DFHack, including pull requests, code format,
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				and more, please see `contributing-code`  .
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				For more details on contributing to DFHack, including pull requests, code
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				format, and more, please see `contributing-code`  .
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				Build settings
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -78,7 +112,8 @@ Generator
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				The `` Ninja ``  CMake build generator is the prefered build method on Linux and
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				macOS, instead of `` Unix Makefiles `` , which is the default. You can select Ninja
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				by passing `` -G Ninja ``  to CMake. Incremental builds using Unix Makefiles can be
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				much slower than Ninja builds.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				much slower than Ninja builds. Note that you will probably need to install
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				Ninja; see the platform-specific sections for details.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				::
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -133,6 +168,9 @@ your build folder or by running ``ccmake`` (or another CMake GUI). Most
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				DFHack-specific settings begin with `` BUILD_ ``  and control which parts of DFHack
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				are built.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				..  _compile-linux: 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				Linux
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				=====
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				On Linux, DFHack acts as a library that shadows parts of the SDL API using LD_PRELOAD.
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -144,13 +182,18 @@ DFHack is meant to be installed into an existing DF folder, so get one ready.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				We assume that any Linux platform will have `` git ``  available (though it may
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				need to be installed with your package manager.)
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				To build DFHack you need GCC version 4.8 or later. GCC 4.8 is easiest to work
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				with due to avoiding libstdc++ issues (see below), but any version from 4.8
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				onwards (including 5.x) will work.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				To build DFHack, you need GCC 4.8 or newer. GCC 4.8 has the benefit of avoiding
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				`libstdc++ compatibility issues <linux-incompatible-libstdcxx>`  , but can be hard
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				to obtain on modern distributions, and working around these issues is done
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				automatically by the `` dfhack ``  launcher script. As long as your system-provided
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				GCC is new enough, it should work. Note that extremely new GCC versions may not
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				have been used to build DFHack yet, so if you run into issues with these, please
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				let us know (e.g. by opening a GitHub issue).
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				Before you can build anything, you'll also need `` cmake `` . It is advisable to
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				also get `` ccmake ``  on distributions that split the cmake package into multiple
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				parts.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				parts. As mentioned above, `` ninja ``  is recommended (many distributions call
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				this package `` ninja-build `` ).
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				You will need pthread; most systems should have this already. Note that older
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				CMake versions may have trouble detecting pthread, so if you run into
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -226,37 +269,42 @@ This will show a curses-based interface that lets you set all of the
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				extra options. You can also use a cmake-friendly IDE like KDevelop 4
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				or the cmake-gui program.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				..  _linux-incompatible-libstdcxx: 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				Incompatible libstdc++
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				~~~~~~~~~~~~~~~~~~~~~~
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				When compiling dfhack yourself, it builds against your system libstdc++. When
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				Dwarf Fortress runs, it uses a libstdc++ shipped with the binary, which comes
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				from GCC 4.8 and is incompatible with code compiled with newer GCC versions. If
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				you compile DFHack with a GCC version newer than 4.8, you will see an error
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				message such as::
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				When compiling DFHack yourself, it builds against your system libstdc++. When
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				Dwarf Fortress runs, it uses a libstdc++ shipped in the `` libs ``  folder, which
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				comes from GCC 4.8 and is incompatible with code compiled with newer GCC
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				versions. As of DFHack 0.42.05-alpha1, the `` dfhack ``  launcher script attempts
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				to fix this by automatically removing the DF-provided libstdc++ on startup.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				In rare cases, this may fail and cause errors such as::
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				   ./libs/Dwarf_Fortress: /pathToDF/libs/libstdc++.so.6: version
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				       `GLIBCXX_3.4.18' not found (required by ./hack/libdfhack.so)
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				To fix this you can compile with GCC 4.8 or remove  the libstdc++ shipped with
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				The easiest way to fix this is generally removing  the libstdc++ shipped with
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				DF, which causes DF to use your system libstdc++ instead::
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    cd /path/to/DF/
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    rm libs/libstdc++.so.6
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				Note that distributing binaries compiled with newer GCC versions requires end-
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				users to delete libstdc++ themselves and have a libstdc++ on their system from
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				the same GCC version or newer. For this reason, distributing anything compiled
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				with GCC versions newer than 4.8 is discouraged. In the future we may start
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				bundling a later libstdc++ as part of the DFHack package, so as to enable
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				compilation-for-distribution with a GCC newer than 4.8.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				Mac OS X
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				========
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				DFHack functions similarly on OS X and Linux, and the majority of the
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				information above regarding the build process (cmake and ninja) applies here
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				Note that distributing binaries compiled with newer GCC versions may result in
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				the opposite compatibily issue: users with *older*  GCC versions may encounter
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				similar errors. This is why DFHack distributes both GCC 4.8 and GCC 7 builds. If
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				you are planning on distributing binaries to other users, we recommend using an
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				older GCC (but still at least 4.8) version if possible.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				..  _compile-macos: 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				macOS
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				=====
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				DFHack functions similarly on macOS and Linux, and the majority of the
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				information above regarding the build process (CMake and Ninja) applies here
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				as well.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				DFHack can officially be built on OS X  with GCC 4.8 or 7. Anything newer than 7
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				DFHack can officially be built on macOS only  with GCC 4.8 or 7. Anything newer than 7
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				will require you to perform extra steps to get DFHack to run (see `osx-new-gcc-notes`  ),
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				and your build will likely not be redistributable.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -309,7 +357,7 @@ Dependencies and system set-up
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    cleaner, quicker, and smarter. For example, installing MacPort's GCC will
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    install more than twice as many dependencies as Homebrew's will, and all in
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    both 32-bit and 64-bit variants. Homebrew also doesn't require constant use
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    of sudo.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    of ``  sudo``  .
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    Using `Homebrew  <http://brew.sh/> `_  (recommended)::
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -378,9 +426,9 @@ Building
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    export CC=gcc-7
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    export CXX=g++-7
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  etc. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  (adjust as needed for different GCC installations) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				* Build dfh ack::
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				* Build DFH ack::
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    mkdir build-osx
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    cd build-osx
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -390,6 +438,7 @@ Building
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  <path to DF> should be a path to a copy of Dwarf Fortress, of the appropriate
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  version for the DFHack you are building.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				..  _compile-windows: 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				Windows
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -682,9 +731,9 @@ It may be installed in a directory such as ``~/.local/bin/``, so after pip
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				install, find `` sphinx-build ``  and ensure its directory is in your local `` $PATH `` .
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				Mac OS X 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				-------- 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				OS X  has Python 2.7 installed by default, but it does not have the pip package manager.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				macOS 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				-----
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				mac OS has Python 2.7 installed by default, but it does not have the pip package manager.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				You can install Homebrew's Python 3, which includes pip, and then install the
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				latest Sphinx using pip::
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -696,11 +745,11 @@ Alternatively, you can simply install Sphinx 1.3.x directly from Homebrew::
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  brew install sphinx-doc
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				This will install Sphinx for OS X 's system Python 2.7, without needing pip.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				This will install Sphinx for mac OS's system Python 2.7, without needing pip.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				Either method works; if you plan to use Python for other purposes, it might best
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				to install Homebrew's Python 3 so that you have the latest Python as well as pip.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				If not, just installing sphinx-doc for OS X 's system Python 2.7 is fine.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				If not, just installing sphinx-doc for mac OS's system Python 2.7 is fine.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				Windows
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -767,7 +816,7 @@ files alphabetically, so all the files you need should be next to each other.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				It is recommended that you create a build folder and run CMake to verify that
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				you have downloaded everything at this point, assuming your download machine has
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				CMake installed. This involves running a "generate" batch script on Windows, or
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				a command starting with `` cmake .. -G Ninja ``  on Linux and OS X , following the
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				a command starting with `` cmake .. -G Ninja ``  on Linux and mac OS, following the
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				instructions in the sections above. CMake should automatically locate files that
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				you placed in `` CMake/downloads `` , and use them instead of attempting to
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				download them.