Mercurial > ~dholland > hg > ag > index.cgi
diff doc/devel/make.txt @ 0:13d2b8934445
Import AnaGram (near-)release tree into Mercurial.
author | David A. Holland |
---|---|
date | Sat, 22 Dec 2007 17:52:45 -0500 |
parents | |
children | 12171da8943f |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/devel/make.txt Sat Dec 22 17:52:45 2007 -0500 @@ -0,0 +1,83 @@ +Things you should do when developing: + + - Configure with --enable-maintainer-mode. (See install.txt.) + + - Set up both a native and a Windows build tree. + + - Create a directory "bin" under the top level of the source tree, + and copy a known working version of agcl there. (See below.) + +Useful make targets and options: + + all Compile everything. + rules Update the make rules. + agfiles Generate AG output from syntax files. + agclean Remove AG output files. + clean Remove object files and executables. + distclean Remove all compiler-generated material. + install Install everything. + + SAFE=1 Compile with "safe" AnaGram (see below) + UNSAFE=1 Compile with "unsafe" AnaGram (see below) + +If you add a file to the build, rerun "make rules" in the affected +build directories. If you add a whole directory, you need to rerun the +configure script to generate the new makefile. You can do this in an +existing build directory by running "./config.status", which remembers +the options you gave to configure. + +Dependency tracking for header files is automatic. + +If you want to remove a header file from the build, the easiest way is +to make sure it isn't used (e.g., by putting an #error in it and +building) before actually deleting it. Otherwise you may need to blow +away the depend files (depend.mk and *.u or *.d) to keep make from +complaining that it doesn't exist. + +Bootstrapping notes: + +AnaGram is partly written using itself. This creates the potential for +various kinds of problems. + +The distribution archives ship with up-to-date versions of the +generated code; if you aren't developing, you should be able to just +use those and everything should be ok. + +If you *are* developing, the following precautions are taken: + + - By default, the build runs $(TOP)/bin/agcl, which you should + update by hand as you see fit. + + - If you set SAFE (e.g., make SAFE=1) the build system will run + $(TOP)/bin/safe-agcl instead, the idea being that you can be + be very conservative about updating this and use it as a + fallback if you manage to delete or break $(TOP)/bin/agcl. + + - If you set UNSAFE (e.g., make UNSAFE=1) the build system will + run the most recent native agcl right out of the build tree. + Use with due caution. + + - The AG-generated code used in the build is kept in CVS, so + if all else fails you can revert to a clean version that way. + Be sure to revert matching .cpp and .h files, or the build + will fail. + +Note that $(TOP)/bin is neither created nor populated by default; +if developing you should set it up yourself with a suitable agcl +executable. + +Also note that if you are developing you should always configure with +--enable-maintainer-mode, and this *requires* $(TOP)/bin/agcl to exist +in order to test-compile the examples. This also creates a minor +bootstrap problem: if you don't already have an agcl to place in +$(TOP)/bin, you have to compile one. The easiest way is as follows: + + path-to-source/configure native + make rules + make + mkdir path-to-source/bin + cp anagram/run/agcl path-to-source/bin/agcl + ./config.status --enable-maintainer-mode + make rules + make +