
1. unpack the source tarball and cd to the resulting dir

2. # autoconf  
   this reads configure.in and generates the ./configure script

3. # ./configure 
   this probes your system and then, for each "file" named
   in the AC_OUTPUT() macro near the end of configure.in,
   read "file".in and generate "file". Variables named @somevariable@
   will be substituted with literal values.

4. step (3) produces several files. These files are generated by
   configure from their respective .in file in the same directory.
   You should have a read of these generated files and diff them
   against their respective .in files to see what was substituted
   by configure.

   src/include/builddefs
   	common definitions for the build environment. This is included
	by all Makefiles, in conjunction with src/include/buildrules.
	Note that most autoconf/configure build environments generate
	Makefile (from Makefile.in) in every src dir. Instead, we
	generate builddefs, and then include it in every Makefile.

   src/include/platform_defs.h 
   	header containing conditional macros defining the C run-time
	environment discovered by the configure script.

5. read some or all of the GNU tool chain documentation
   GNU make :
       http://www.delorie.com/gnu/docs/make/make_toc.html
   autoconf :
    	http://www.delorie.com/gnu/docs/autoconf/autoconf_toc.html
   libtool :
    	http://www.delorie.com/gnu/docs/libtool/libtool_toc.html
   gcc/g++ :
    	http://www.delorie.com/gnu/docs/gcc/gcc_toc.html

6. Makefiles and build environment
   First have a look at some Makefiles

   	example using SUBDIRS :  xfsprogs/Makefile
        example static library:  xfsprogs/libxfs/Makefile
        example command       :  xfsprogs/bmap/Makefile

   All Makefiles must define TOPDIR as the root of the project. This
   allows other stuff to be found relative to $(TOPDIR).

   All Makefiles should have the following structure, which is
   much like commondefs and commonrules in the IRIX build environment, e.g.

   # ----------------------------------------------------------------------
   # TOPDIR must point to the root of the project
   # The builddefs file defines lots of things. Read it.
   TOPDIR = ..
   include $(TOPDIR)/include/builddefs

   # first rule should always be "default"
   default : sometarget
   	commands to build targets, if necessary

   # $(BUILDRULES) is defined in builddefs and includes rules for
   # descending subdirs, building targets and installation rules
   include $(BUILDRULES)

   install : default
   	$(INSTALL) sometargets somewhere
   # ----------------------------------------------------------------------

7. packaging

   # ./Makepkgs
   this script generates all of the packages supported - each has a
   subdirectory below xfsprogs/build where knowledge specific to
   each package type is maintained.

   The script produces logs of each stage of the build (this info is
   also echoed to the screen when the "verbose" option is provided):

	xfsprogs/Logs/configure	- `autoconf; ./configure' output
	xfsprogs/Logs/default	- `make default' output
	xfsprogs/Logs/dist	- `make build dist' output

   On successful completion, the script echoes the names of packages
   successfully generated.
