This project contains the source code of the SLURM proxy server. The following
steps are used to set up your build environment so that the executable will be
correctly built and installed. In order to use the server binary, it needs to 
be installed in a fragment that corresponds to the architecture of the machine 
it will be run on. 

1. Make sure the SLURM rms is installed and ensure it work well. 
   That is, SLURM cmd utilities, such as "sinfo/srun/squeue" work as expected.
   For more detailed information about how to build and install SLURM, see
   http://www.llnl.gov/linux/slurm/slurm.html


2. Download PTP 2.1 for your platform. And modify proxy_attr.h using libproxy.patch:
   (1) copy libproxy.patch to $PTPDIR/core/org.eclipse.ptp.proxy
   (2) cd $PTPDIR/core/org.eclipse.ptp.proxy
   (3) patch -p1 < libproxy.patch


3. Build the corresponding "proxy" and "utils" libraries in $PTPDIR/core/org.eclipse.ptp.proxy 
   and $PTPDIR/core/org.eclipse.ptp.utils directory using 'configure', 'make' and 'make install' commands.


4. Use 'configure', 'make' and 'make install' within this directory from
   the command line to build and install the executable.
   NOTE: The 'configure' command MUST require '--with-slurm' option to specify the
   top install directory of SLURM. If such option is missed, the configure process will fail.


5. If any of the automake/autoconf files changes, you should just need to
   run 'autoreconf' and it will automatically regenerate the appropriate files.



