    [NAME]
    ALL.tool.standard.daomake.project

    [TITLE]
    Project File

    [DESCRIPTION]

    A DaoMake project file is a regular Dao script file that configure the project using
    some dedicated types and methods. The following is simple DaoMake project file (say
    myproject.dao),

       1  project = DaoMake::Project( "MyProject" )
       2
       3  project_objs = project.AddObjects( { "myfile1.c", "myfile2.c" } )
       4  project_exe  = project.AddExecutable( "myexe", project_objs )

    To generate Makefile for this project, simply run the following in the same directory as
    the project file,

       1  $$ daomake --platform PLATFORM myproject.dao

    where PLATFORM can be one of the followings:
      *  linux
      *  macosx
      *  freebsd
      *  mingw
      *  minix
      *  haiku
    If the project file is not passed as a command line argument to DaoMake, it will assume
    it is a file named makefile.dao.

    DaoMake provides a number of types, methods and global variables for configuring
    projects. The most important ones are: Project, Target and Objects, which are all
    subtypes of the compiling unit type Unit.

     0.1   DaoMake::Project

      *  Project(name:string)=>Project
      *  AddObjects(self:Project,sources:list<string>,headers:list<string>={})=>Objects
      *  AddExecutable(self:Project,name:string,objs:Objects,...:Objects)=>Target
      *  AddSharedLibrary(self:Project,name:string,objs:Objects,...:Objects)=>Target
      *  AddStaticLibrary(self:Project,name:string,objs:Objects,...:Objects)=>Target
      *  AddCommand(self:Project,name:string,command:string,...:string)=>Target
      *  AddDirectory(self:Project,name:string,path:string,...:string)=>Target
      *  Install(self:Project,dest:string,target:Target,...:Target)
      *  Install(self:Project,dest:string,file:string,...:string)
      *  Install(self:Project,dest:string,headers:list<string>)
      *  SourcePath(self:Project)=>string
      *  BinaryPath(self:Project)=>string
      *  AddVariable(self:Project,name:string,value:string)
      *  ExportLibrary(self:Project,name:string,cflag:string,lflag:string,shlib='',stlib='')
      *  ExportPath(self:Project,name:string,path:string)
      *  GetPath(self:Project,name:string)=>string
      *  GenerateFinder(self:Project,bl:enum<FALSE,TRUE>=$TRUE)

     0.2   DaoMake::Target

      *  Name(self:Target)=>string
      *  AddObjects(self:Target,objects:Objects,...:Objects)
      *  AddCommand(self:Target,command:string,...:string)
      *  AddTest(self:Target,test:string,...:string)
      *  AddDependency(self:Target,target:Target,...:Target)
      *  EnableDynamicExporting(self:Target,bl:enum<FALSE,TRUE>=$TRUE)
      *  EnableDynamicLinking(self:Target,bl:enum<FALSE,TRUE>=$TRUE)
      *  SetTargetPath(self:Target,path:string)
      *  Install(self:Target,dest:string)

     0.3   DaoMake::Objects

      *  AddHeaders(file:string,...:string)
      *  AddSources(file:string,...:string)

     0.4   DaoMake::Objects

      *  AddDefinition(self:Unit,name:string,value='')
      *  AddIncludePath(self:Unit,path:string,...:string)
      *  AddLinkingPath(self:Unit,path:string,...:string)
      *  AddCompilingFlag(self:Unit,flag:string,...:string)
      *  AddLinkingFlag(self:Unit,flag:string,...:string)
      *  AddRpath(self:Unit,flag:string,...:string)
      *  UseImportLibrary(self:Unit,pro:Project,...:string)
      *  UseSharedLibrary(self:Unit,pro:Project,...:string)
      *  UseStaticLibrary(self:Unit,pro:Project,...:string)
      *  MakeDefinitions(self:Unit)=>string
      *  MakeIncludePaths(self:Unit)=>string
      *  MakeLinkingPaths(self:Unit)=>string
      *  MakeCompilingFlags(self:Unit)=>string
      *  MakeLinkingFlags(self:Unit)=>string

     0.5   DaoMake Methods

      *  FindPackage(name:string,opt:enum<OPTIONAL,REQUIRED>=$OPTIONAL)=>Project
      *  FindFile(file:string,hints:list<string>={})=>string
      *  Option(name:string,value:enum<OFF,ON>)=>enum<OFF,ON>
      *  Option(name:string,value='')=>string
      *  Shell(command:string)=>string
      *  SourcePath()=>string
      *  BinaryPath()=>string
      *  MakeRpath(path:string,...:string)=>string
      *  BuildMode()=>enum<RELEASE,DEBUG,PROFILE>
      *  SetTestTool(test:string,log_option='--log')
      *  IsFile(path:string)=>int
      *  IsDir(path:string)=>int
      *  Platform()=>string
      *  IsUnix()=>int
      *  IsLinux()=>int
      *  IsMacOSX()=>int
      *  IsBSD()=>int
      *  IsFreeBSD()=>int
      *  IsMinix()=>int
      *  IsBeOS()=>int
      *  IsHaiku()=>int
      *  IsWin32()=>int
      *  IsMinGW()=>int

     0.6   DaoMake Globals

      *  DaoMake::Settings
      *  DaoMake::Compilers
      *  DaoMake::Linkers
      *  DaoMake::Includes