gov.llnl.babel.backend
Class PackageMakeInfoGenerator

java.lang.Object
  extended by gov.llnl.babel.backend.PackageMakeInfoGenerator
All Implemented Interfaces:
BuildGenerator, ContextAware, FileListener

public class PackageMakeInfoGenerator
extends java.lang.Object
implements FileListener, BuildGenerator, ContextAware

This class is used to generate a makefile at the top of the generated source tree (for an invocation of babel) that tells about the other makefiles/setup.py files in the tree. It thus has to be maintained consistently with Makefile and Setup generators. Gets the database of generated files from the FileManager. It then create makefiles describing the package as generated. It might be nice to expand this into a fully automatic gmake based build generator later.

See Also:
FileManager, MakefileGenerator, SetupGenerator

Constructor Summary
PackageMakeInfoGenerator()
           
 
Method Summary
 void createAll()
          Create all PackageMakeInfos in all the directories registered with the FileManager.
 void createMakefileInDirectory(java.lang.String makefilename, java.lang.String dirname)
          Log that we created a single makefile in a specific directory.
protected  java.lang.String defaultFilename()
          Return the default file name.
protected  java.lang.String defaultPackageFilename()
          Return the default package file name.
 java.util.Set getLanguages()
          Return the set of languages that this build generator serves.
 void newFile(SymbolID id, int type, java.lang.String role, java.lang.String dir, java.lang.String name)
          This method is called for each file created by the FileManager.
protected  void recordMakefile(java.util.Map role2files, java.lang.String dirname)
          Generate the actual make file.
 void setContext(Context context)
          Routine to notify extensions of the context.
protected  void writePackageMakeInfo(java.io.PrintWriter pw, java.lang.String makefilename)
          Generate the package make file.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PackageMakeInfoGenerator

public PackageMakeInfoGenerator()
Method Detail

newFile

public void newFile(SymbolID id,
                    int type,
                    java.lang.String role,
                    java.lang.String dir,
                    java.lang.String name)
This method is called for each file created by the FileManager.

Specified by:
newFile in interface FileListener
Parameters:
id - the file is related to this symbol id.
type - this indicates the type of the symbol. A constant from Type.
role - this describes the role the file plays. For example, the file could be a STUBSRCS file or a IMPLSRCS file. The role strings used are determined by the backend.
dir - the path (relative or absolute) of the directory where the file will be created.
name - the name of the file not including any directory information. The complete name of the file should be dir + name.

createAll

public void createAll()
               throws java.io.IOException
Create all PackageMakeInfos in all the directories registered with the FileManager.

Specified by:
createAll in interface BuildGenerator
Throws:
java.io.IOException - the message contained is the concatenation of all IOExceptions thrown by createMakefileInDirectory
See Also:
FileManager

createMakefileInDirectory

public void createMakefileInDirectory(java.lang.String makefilename,
                                      java.lang.String dirname)
                               throws java.io.IOException
Log that we created a single makefile in a specific directory. This will do nothing if there are no files defined in that directory according to the FileManager class.

Parameters:
makefilename - set makefile name, if null or "", defaults to <make-prefix> + "babel.make"
dirname - directory to look for
Throws:
java.io.IOException - if problems are encountered with the file system.
See Also:
FileManager

recordMakefile

protected void recordMakefile(java.util.Map role2files,
                              java.lang.String dirname)
Generate the actual make file. This method can be overridden for tools other than make provided that whatever files are generated exist in the same directory as the sourcecode.


writePackageMakeInfo

protected void writePackageMakeInfo(java.io.PrintWriter pw,
                                    java.lang.String makefilename)
Generate the package make file. This method can be overridden for tools other than make provided that whatever files are generated exist in the same directory as the sourcecode.


defaultFilename

protected java.lang.String defaultFilename()
Return the default file name. This method can be overridden in derived classes if a different default name is preferred.

Returns:
value of the make file name

defaultPackageFilename

protected java.lang.String defaultPackageFilename()
Return the default package file name. This method can be overridden in derived classes if a different default name is preferred.

Returns:
value of the make file name

getLanguages

public java.util.Set getLanguages()
Description copied from interface: BuildGenerator
Return the set of languages that this build generator serves. Each build generator serves a Set of languages.

Specified by:
getLanguages in interface BuildGenerator
Returns:
a Set of strings. Each string in the set represents a language supported by the build generator.

setContext

public void setContext(Context context)
Description copied from interface: ContextAware
Routine to notify extensions of the context.

Specified by:
setContext in interface ContextAware