Configuring and Compiling AIR 5.x
UNIX configuration and compilation instructions:
	- 
		
		- In the main AIR directory, type './configure'.
 
		- This will execute a shell script that should automatically create three files. The first
		of these will be in the main AIR directory and is called 'Makefile'. The other two will be in the
		src/ subdirectory and are called 'Makefile' and 'config.h'.
 
		- If ./configure fails, it should print out some insight into the problem that you may be
		able to fix. Alternatively, you might consider some of the workarounds listed below
 
		- If you troubleshoot ./configure, you sometimes need to remove ./configure.cache to get
		./configure to forget results of earlier runs
 
		- Caution To Developers: the Makefiles that are generated do not contain the level
		of dependency information needed for efficient software development. For example, changes to a 
		subroutine in the src subdirectory will not cause all main programs that use that subroutine
		to be rebuilt without any unnecessary rebuilds of other routines. Developers should consider
		building a shared library from the src directory subroutines and linking to this shared
		library as a strategy for shifting such dependencies to runtime.
 
		
	 
	
	- 
		
		- In the src/ subdirectory, edit the 'config.h' file to meet any site specific preferences.
 
		- Any text editor can be used (be sure to save any changes as plain text), configuration details are provided below.
 
		
	 
	- 
		
		- Optionally, review and edit the two files called 'Makefile'
 
		- Experts may elect to override default optimization levels, etc.
 
		
	 
	- 
		
		- In the main AIR directory, type 'make all'.
 
		- This should compile the code
 
		
	 
	- 
		
		- If you want the compiled programs moved to the bin subdirectory, type 'make install'
		in the main AIR directory
 
		- If you ultimately want the programs somewhere else entirely, it is much easier to copy
		them from /bin, so type 'make install' to move them to /bin first
 
		
	 
	
		- Before rebuilding AIR (e.g., after changing something in src/config.h) you must type
		'make clean' in the main AIR directory before typing 'make all' again
 
		- 'make clean' removes all of the compiled libraries and programs so that new, internally
		consistent versions can be built
 
		
	 
	
		- To start over from the beginning at any point, type 'make distclean' in the main AIR
		directory and return to step 1
 
		- 'make distclean' removes all of the compiled libraries and programs as well as the
		configuration information and Makefiles
 
		
	 
Workarounds:
	- 
		
		- If the ./configure script fails and you cannot get it to run correctly, you can simply
		create a file called src/config.h and copy any configuration lines that you feel are 
		appropriate into it (an empty file called src/config.h is acceptable if you want to use
		all the default configurations in the AIR.h file)
 
		- In this case, you will need to execute the MAKE.com file as described next rather than
		running 'make'
 
		
	 
	- If the command 'make all' fails, (e.g., if you don't have the executable called 'make'),
	you can type 'sh MAKE.com' or 'sh MAKE.com bin' (the latter command will install the programs
	in the bin subdirectory) from the main AIR directory to compile the code.
 
	
	- It is also possible to configure AIR manually in the AIR.h file as in
	older versions of AIR, but this should not generally be necessary.
 
Please note that different PC compilers have different requirements and only general recommendations
are provided here.
	- In the src subdirectory, copy the file 'config_PC.h' to 'config.h'
 
	- Edit the 'config.h' file to meet any site specific preferences
 
		- Any plain text editor can be used, configuration details are provided below.
 
		
	 
	- 
		
		- In the main AIR directory, edit the files AIRmain.h and HEADERmain.h, removing the
		lines with UNIX style forward slashes and uncommenting the
		lines with the PC style backslashes
 
		- After modification, AIRmain.h should read: #include "src\\AIR.h"
 
		- After modification, HEADERmain.h should read: #include "src\\HEADER.h"
 
		- There should not be any spaces or tabs before '#include' in either of these files
 
		
	 
	- 
		
		- Using your PC C compiler, compile all of the files in the src subdirctory into a library
 
		- Consult your C compiler documentation for details
 
		
	 
	- 
		
		- Using your PC C compiler, compile each of the programs in the main AIR directory. For 
		example, compile the file 'alignlinear.c' to generate the executable file 'alignlinear.exe'. 
		You will need to link in the library compiled in the previous step.
 
		- Consult your C compiler documentation for details
 
		- Note that the files src/AIR.h, src/config.h and src/HEADER.h are required when compiling
		each of the programs in the main directory.
 
		
	 
The following lines shown in green can be included or altered in config.h to provide site specific information:
Omitting these lines causes their default values (defined in the AIR.h file) to be used.
	- #define AIR_CONFIG_AUTO_BYTESWAP 0
 
	- If non-zero, AIR will attempt to detect image files (.hdr and .img), .air file, .warp files 
	and .vector files that need to be byte swapped because they were generated on a different
	machine. If your machine does not conform to the IEEE Standard for Binary Floating Point
	Arithmetic (ISO/IEEE Std 754-1985), you should set this value to zero because conformance with
	this standard is assumed when byte swapping. For the same reason, only data generated by 
	machines that conform to this standard can be properly byte swapped for use by AIR.
 
	
	- #define AIR_CONFIG_OUTBITS 16
 
   
	- The only supported values are 8 and 16. If you choose 8, data
	will be represented internally and saved as 8 bits/pixel. If you
	choose 16, data will be represented internally and saved as 16
	bits/pixel. (Either way, you will be able to read in 8 or 16 bit
	data, this variable only controls output data). If you are not
	sure what to do here, the issue of 8 and 16 bit data is discussed
	elsewhere at length.
 
	
   - #define AIR_CONFIG_REP16 3
 
   
   - This variable is irrelevant if you have OUTBITS set to 8. The
   acceptable values are 1, 2 and 3. The variable controls the format
   of 16 bit data saved to disk by the AIR package. If you are not
   sure what to do here, the issue of 16 bit data types is discussed
   elsewhere at length.
 
	- #define AIR_CONFIG_THRESHOLD1 7000
 
	- #define AIR_CONFIG_THRESHOLD2 7000
 
	
	
	- AIR_CONFIG_THRESHOLD1 and AIR_CONFIG_THRESHOLD2
	control the default pixel value thresholds used by the
	registration programs. If you have set AIR_CONFIG_OUTBITS to 8, only the
	first set of thresholds is used. If you have set AIR_CONFIG_OUTBITS to 16,
	only the second set is used. The thresholds should be values that
	will typically separate brain (suprathreshold) from nonbrain
	(subthreshold). The values used in the AIR distribution are not
	particularly likely to be useful in your laboratory. Look at some data to
	make a reasonable guess, and bear in mind that these thresholds
	are easily overridden on a per use basis.
 
	
	- #define AIR_CONFIG_VERBOSITY 0
 
	- If non-zero, this allows some non-essential information to be printed to
	the screen when AIR programs are run
 
	- #define AIR_CONFIG_PIX_SIZE_ERR .0001
 
   - The variable decides how fussy the AIR package is about
	deciding that pixel sizes are identical. If you plan to round off
	pixel sizes only to the nearest .1 mm (not recommended), you need to make this value
	.1. If you like to type everything out to 15 decimal places, you
	can make the AIR package equally compulsive.
 
The following lines may already appear in config.h as generated by ./configure or as copied
from config_PC.h. Adding them (if not already present) or altering their pre-existing values could
render AIR uncompilable on your machine, so make changes with caution and make back up copies first
	- #define AIR_CONFIG_GROUPS 0
 
	- 
		This controls the inclusion of a non-ANSI subroutine that checks for a user's membership in
		secondary groups when testing whether file reading or writing is expected to succeed.
		A non-zero value should only be used on platforms that support membership in multiple 
		groups and that support the non-ANSI C subroutine getgroups(). Compilation of src/fprobr.c and
		src/fprobw.c will fail if getgroups() is not supported and this configuration variable
		is non-zero.
	
 
	- #define AIR_CONFIG_REQ_PERMS 0
 
	- 
		This controls whether AIR uses two C functions that are not part of the ANSI C
		standard, but that provide useful functionality if available. The non-ANSI functions
		stat() and lstat() make it possible to access UNIX file permissions. By using these
		functions, AIR can inform a user of specific reasons that a program failed (e.g., that
		the user lack write permission in the directory where data is supposed to be saved). 
		Some non-UNIX C compilers also implement stat() and/or lstat() (even though the underlying
		operating system may not support all of the informative functionality). If stat()
		and/or lstat() are available, it is recommended that you use them. However, if they are
		not available, compilation will probably fail unless you set this value to 0. Possible
		configuration values are:
		
			- 0. AIR makes not use of stat() or lstat().
 
			- 1. AIR will use stat(), but not lstat().
 
			- 2. stat() and lstat() will be used.
 
		
	 
	- #define AIR_CONFIG_PIPES 0
 
	- 
		This controls whether AIR will use a non-ANSI C function needed for safe on-the-fly 
		decompression of image files. If non-zero, AIR will use the function popen() to
		pipe data from a decompression program into AIR. If your compiler does not support
		popen, you should set this value to zero. If this value is zero, you do not need
		to worry about AIR_CONFIG_DECOMPRESS, AIR_CONFIG_COMPRESSED_SUFFIX or 
		AIR_CONFIG_DECOMPRESS_COMMAND because they have no effect in the absence of popen().
	
 
	- #define AIR_CONFIG_DECOMPRESS 0
 
	- 
		This parameter is only relevant if AIR_CONFIG_PIPES is non-zero. If this value is
		set to zero, code to decompress images on-the-fly is disabled.
	
 
	- #if AIR_CONFIG_DECOMPRESS
 
	- #define AIR_CONFIG_COMPRESSED_SUFFIX ".gz"
 
	- 
		This parameter is only relevant if AIR_CONFIG_PIPES and AIR_CONFIG_DECOMPRESS are both
		non-zero. This suffix identifies compressed header or image files. For example, if the
		value is ".gz", files ending with .hdr.gz will be recognized by AIR as compressed header
		files and files ending with .img.gz will be recognized as compressed image files. If you
		use the UNIX compress routine, you would need to change the suffix to ".Z".
	
 
	- #define AIR_CONFIG_DECOMPRESS_COMMAND "gunzip -c "
 
	- 
		This parameter is only relevant if AIR_CONFIG_PIPES and AIR_CONFIG_DECOMPRESS are both
		non-zero. This must identify a command that is able to decompress files ending with
		AIR_CONFIG_COMPRESSED_SUFFIX when followed by a file name ending in this suffix. In 
		addition, the command must output to a pipe. 
	
 
	- 
		If the decompression program is not on a user's search path, AIR may fail to find the
		command. In this case, you can give a fully qualified path for the decompression program
		(e.g., "/usr/local/bin/gunzip -c ").
	
 
	- 
		Note that a trailing space after the command is required.
	
 
Modified: July 21, 2002
© 2001-2002 Roger P. Woods,
M.D.(rwoods@ucla.edu)