% Getting the Photran Sources from CVS

\emph{BEFORE YOU BEGIN: Make sure you are running \textbf{Eclipse 3.5} (Galileo)
and a \textbf{Java 5} or later JVM. We recommend the 
\href{http://www.eclipse.org/downloads/packages/eclipse-rcpplug-developers/ganymeder}{Eclipse for RCP/Plug-in Developers Package}.}

\newcounter{running_counter}
\textbf{Part~I.  Check out the CDT 6.0 sources from CVS}

\begin{enumerate}
	\item  In Eclipse, switch to the CVS Repository Exploring perspective.
	\item  Right-click the CVS Repositories view; choose New, Repository Location
	\item  In the dialog box, enter the following information, then click Finish. \\
	\begin{tabular}{ll}
	        Host name:       & dev.eclipse.org \\
	        Repository path: & /cvsroot/tools \\
	        Username:        & anonymous \\
	        Password:        & (no password) \\
	        Connection type: & pserver \\
	\end{tabular}
	\item  In the CVS Repositories view
	       \begin{itemize}
	       \item  Expand ``:pserver:anonymous@dev.eclipse.org:/cvsroot/tools''
	       \item  Then expand ``HEAD''
	       \end{itemize}
	\item  Right-click on ``org.eclipse.cdt''
	\item  Select ``Configure Branches and Versions\ldots''
	\item  Under ``Browse files for tags'', expand ``all'', then expand 	
	       ``org.eclipse.cdt'', then click on the .project file
	\item  Under ``New tags found in the selected files'', click on the Deselect 
	       All button, then check cdt\_6\_0 in the list above it
  \item	 Click Add Checked Tags
	\item	 Click OK
	\item  Now, in the CVS Repositories view
				 \begin{itemize}
				 \item  Expand ``:pserver:anonymous@dev.eclipse.org:/cvsroot/tools''
		     \item  Then expand ``Branches''
				 \item  Then expand ``cdt\_6\_0''
		     \item  Then expand ``org.eclipse.cdt cdt\_6\_0''
		     \item  Then expand ``all''
			  \end{itemize}
	\item  Click on the first entry under ``all''
	       (it should be org.eclipse.cdt), then shift-click on the last entry
	       under ``all'' (it should be org.eclipse.cdt.ui.tests).
	       All of the intervening plug-ins should now be selected.
	       Right-click on any of the selected plug-ins, and select
	       Check Out from the pop-up menu.
	       (Check out will take several minutes.)
	\item  You now have the CDT source code.  Make sure it compiles successfully
	       (lots of warnings, but no errors).
	\setcounter{running_counter}{\value{enumi}}
\end{enumerate}

\vspace{1em}
\textbf{Part~II.  Check out the Photran sources from CVS}
\begin{enumerate}
	\setcounter{enumi}{\value{running_counter}}
	\item Under ``:pserver:anonymous@dev.eclipse.org:/cvsroot/tools,''
	    expand HEAD, then expand
	    org.eclipse.ptp, then expand
	    photran
	\item  Click on the first entry under ``photran''
	       (it should be org.eclipse.photran-dev-docs), then shift-click on the last entry
	       under ``photran'' (it should be org.eclipse.photran.xlf-feature).
	       All of the intervening plug-ins should now be selected.
	       Right-click on any of the selected plug-ins, and select
	       Check Out from the pop-up menu.
	       (Check out will take several minutes.)
	\setcounter{running_counter}{\value{enumi}}
\end{enumerate}
The sources should all compile (albeit with lots of warnings).

\vspace{1em}
\noindent\textbf{Part~III.  Running the test cases}

\begin{enumerate}
	\setcounter{enumi}{\value{running_counter}}
	\item In Package Explorer view, select the \texttt{org.eclipse.photran.core.vpg.tests} project.
	\item Right-click on that project and select Run As $>$ Run Configurations\ldots. A dialog will appear.
	\item In that dialog, create a new \textbf{JUnit Plug-in Test} launch configuration. Call it ``Photran-Tests''.
	\item For the configuration that you have just created, switch to the ``Environment'' tab and create a new variable called ``TESTING'' with a value of 1.
	\item Select ``Run'' to run the tests. To run the tests again, just launch the ``Photran-Tests'' configuration from the Eclipse Run menu.

	\vspace{.5em}
	\noindent\textit{\textbf{Note.} Some JUnit tests for the parser and      
	refactoring engine require closed-source code that is not available in CVS. 
	A warning will appear in the JUnit runner if this code is not available.}
	\setcounter{running_counter}{\value{enumi}}
\end{enumerate}
