]> OCCT Git - occt-wok.git/commitdiff
Initial revision
authorcas <cas@opencascade.com>
Fri, 5 Nov 1999 18:24:35 +0000 (18:24 +0000)
committercas <cas@opencascade.com>
Fri, 5 Nov 1999 18:24:35 +0000 (18:24 +0000)
src/WOKStep/WOKStep_JavaCompile.tcl [new file with mode: 0755]
src/WOKStep/WOKStep_JavaHeader.tcl [new file with mode: 0755]
src/WOKStep/WOKStep_JiniExtract.cdl [new file with mode: 0755]
src/WOKStep/WOKStep_JiniExtract.cxx [new file with mode: 0755]

diff --git a/src/WOKStep/WOKStep_JavaCompile.tcl b/src/WOKStep/WOKStep_JavaCompile.tcl
new file mode 100755 (executable)
index 0000000..8d2423c
--- /dev/null
@@ -0,0 +1,77 @@
+
+proc WOKStep_JavaCompile::AdmFileType {} {
+    
+    return dbadmfile;
+}
+
+proc WOKStep_JavaCompile::OutputDirTypeName {} {
+    return dbtmpdir;
+}
+
+proc WOKStep_JavaCompile::HandleInputFile { ID } {
+    
+    scan $ID "%\[^:\]:%\[^:\]:%\[^:\]"  unit type name
+    
+    if {[file extension $name] == ".java"} {
+       return 1;
+    } 
+    return 0;
+}
+
+proc WOKStep_JavaCompile::ComputeIncludeDir { unit } {
+    
+    set allwb [w_info -A $unit]
+    set unitname [wokinfo -n $unit]
+    set result ""
+    
+    set themax [llength $allwb]
+    
+    for {set i $themax} {[expr $i != 0]} {incr i -1} {
+       set awb [lindex $allwb [expr $i - 1]]
+       if {![wokinfo -x ${awb}:$unitname]} {
+           set pseudounit [lindex [w_info -l $awb] 0]
+           set addinc [wokinfo -p derivated:.. ${awb}:$pseudounit]
+           set result ${addinc}:$result
+       } else {
+           set addinc [wokinfo -p derivated:.. ${awb}:$unitname]
+           set result ${addinc}:$result
+           set addinc [wokinfo -p source:. ${awb}:$unitname]
+           set result ${addinc}:$result
+       }
+    }
+    return $result
+}
+
+proc WOKStep_JavaCompile::Execute { theunit args } {
+    
+    msgprint -i -c "WOKStep_JavaCompile::Execute" "Processing unit : $theunit"
+    msgprint -i -c "WOKStep_JavaCompile::Execute"
+    
+    set unitname [wokinfo -n $theunit]
+    set failed 0
+    set incdir [WOKStep_JavaCompile::ComputeIncludeDir $theunit]
+    wokparam -s%IncludeDir=$incdir
+    set outdir [wokinfo -p derivated:.. $theunit]
+    wokparam -s%OutDir=$outdir
+
+    foreach ID $args {
+       scan $ID "%\[^:\]:%\[^:\]:%\[^:\]"  unit type name
+       set infile [woklocate -p $ID]
+       wokparam -s%Source=$infile
+       set thecommand [wokparam -e JAVA_Compiler]
+       
+       set outfileid [file rootname $name]
+       set outfileid ${outfileid}.class
+       
+       msgprint -i -c "WOKStep_JavaCompile::Execute" "Compiling $name"
+       if {[catch {eval exec [lindex $thecommand 0]} res]} {
+           msgprint -e -c "WOKStep_JavaCompile::Execute" $res
+           set failed 1
+       } else {
+           stepoutputadd $unitname:derivated:$outfileid
+           stepaddexecdepitem $ID $unitname:derivated:$outfileid
+       }
+    }
+    
+    return $failed
+}
diff --git a/src/WOKStep/WOKStep_JavaHeader.tcl b/src/WOKStep/WOKStep_JavaHeader.tcl
new file mode 100755 (executable)
index 0000000..f791b49
--- /dev/null
@@ -0,0 +1,76 @@
+
+proc WOKStep_JavaHeader::AdmFileType {} {
+    
+    return dbadmfile;
+}
+
+proc WOKStep_JavaHeader::OutputDirTypeName {} {
+    return dbtmpdir;
+}
+
+proc WOKStep_JavaHeader::HandleInputFile { ID } {
+
+    scan $ID "%\[^:\]:%\[^:\]:%\[^:\]"  unit type name
+    
+    if {[file extension $name] == ".java"} {
+           return 1;
+    } 
+    return 0;
+}
+
+proc WOKStep_JavaHeader::ComputeIncludeDir { unit } {
+    
+    set allwb [w_info -A $unit]
+    set unitname [wokinfo -n $unit]
+    set result ""
+    
+    set themax [llength $allwb]
+    
+    for {set i $themax} {[expr $i != 0]} {incr i -1} {
+       set awb [lindex $allwb [expr $i - 1]]
+       if {![wokinfo -x ${awb}:$unitname]} {
+           set pseudounit [lindex [w_info -l $awb] 0]
+           set addinc [wokinfo -p derivated:.. ${awb}:$pseudounit]
+           set result ${addinc}:$result
+       } else {
+           set addinc [wokinfo -p derivated:.. ${awb}:$unitname]
+           set result ${addinc}:$result
+       }
+    }
+    return $result
+}
+
+proc WOKStep_JavaHeader::Execute { theunit args } {
+
+    msgprint -i -c "WOKStep_JavaHeader::Execute" "Processing unit : $theunit"
+    msgprint -i -c "WOKStep_JavaHeader::Execute"
+
+    set unitname [wokinfo -n $theunit]
+    set failed 0
+    set incdir [WOKStep_JavaHeader::ComputeIncludeDir $theunit]
+    wokparam -s%IncludeDir=$incdir
+
+    foreach ID $args {
+       scan $ID "%\[^:\]:%\[^:\]:%\[^:\]"  unit type name
+       set infile [woklocate -p $ID]
+       
+       set outfileid [file rootname $name]
+       wokparam -s%Class=${unitname}.$outfileid
+       set outfileid ${unitname}_${outfileid}.h
+       set outfile [wokinfo -p pubinclude:$outfileid $theunit]
+       wokparam -s%OutFile=$outfile
+
+       set thecommand [wokparam -e JAVA_Header]
+       
+       msgprint -i -c "WOKStep_JavaCompile::Execute" "Building header $outfileid"
+       if {[catch {eval exec [lindex $thecommand 0]} res]} {
+           msgprint -e -c "WOKStep_JavaCompile::Execute" $res
+           set failed 1
+       } else {
+           stepoutputadd $unitname:pubinclude:$outfileid
+           stepaddexecdepitem $ID $unitname:pubinclude:$outfileid
+       }
+    }
+    
+    return $failed
+}
diff --git a/src/WOKStep/WOKStep_JiniExtract.cdl b/src/WOKStep/WOKStep_JiniExtract.cdl
new file mode 100755 (executable)
index 0000000..ffd9c90
--- /dev/null
@@ -0,0 +1,47 @@
+-- File:       WOKStep_JiniExtract.cdl
+-- Created:    Thu Jun 27 17:20:15 1996
+-- Author:     Jean GAUTIER
+--             <jga@cobrax.paris1.matra-dtv.fr>
+---Copyright:   Matra Datavision 1996
+
+class JiniExtract from WOKStep 
+inherits Extract from WOKStep
+
+       ---Purpose: 
+
+uses
+    BuildProcess          from WOKMake,
+    InputFile             from WOKMake,
+    HSequenceOfInputFile  from WOKMake,
+    DevUnit               from WOKernel,
+    HSequenceOfFile       from WOKernel,
+    File                  from WOKernel,
+    HSequenceOfEntity     from WOKBuilder,
+    HSequenceOfPath       from WOKUtils,
+    HAsciiString          from TCollection
+is
+
+    Create(abp      : BuildProcess    from WOKMake; 
+          aunit    : DevUnit         from WOKernel; 
+          acode    : HAsciiString    from TCollection;
+          checked, hidden : Boolean  from Standard) 
+       returns mutable JiniExtract from WOKStep;
+
+    HandleInputFile(me; infile : InputFile from WOKMake)
+       returns Boolean from Standard;
+
+    Init(me:mutable)
+       is redefined protected;
+
+    GetInputFlow(me:mutable)
+       is redefined protected;
+
+    OutOfDateEntities(me:mutable) 
+       returns HSequenceOfInputFile from WOKMake
+       is redefined protected;
+
+    Execute(me:mutable; execlist : HSequenceOfInputFile from WOKMake)
+       is redefined ;
+
+end JiniExtract;
diff --git a/src/WOKStep/WOKStep_JiniExtract.cxx b/src/WOKStep/WOKStep_JiniExtract.cxx
new file mode 100755 (executable)
index 0000000..4259b3e
--- /dev/null
@@ -0,0 +1,390 @@
+// Copyright:  Matra-Datavision 1999
+// File:       WOKSteps_JiniExtract.cxx
+// Created:    Mon Mar 22 17:10:16 1999
+// Author:     Arnaud BOUZY
+//             <adn>
+
+#include <Standard_ProgramError.hxx>
+
+#include <WOKTools_Messages.hxx>
+#include <WOKTools_MapIteratorOfMapOfHAsciiString.hxx>
+
+#include <WOKUtils_Shell.hxx>
+#include <WOKUtils_Path.hxx>
+
+#include <MS.hxx>
+
+#include <WOKBuilder_MSJiniExtractor.hxx>
+#include <WOKBuilder_MSActionID.hxx>
+#include <WOKBuilder_MSAction.hxx>
+#include <WOKBuilder_MSchema.hxx>
+#include <WOKBuilder_MSEntity.hxx>
+#include <WOKBuilder_Command.hxx>
+#include <WOKBuilder_MSExtractorIterator.hxx>
+#include <WOKBuilder_HSequenceOfEntity.hxx>
+
+#include <WOKernel_File.hxx>
+#include <WOKernel_Locator.hxx>
+
+#include <WOKMake_InputFile.hxx>
+#include <WOKMake_OutputFile.hxx>
+
+#include <WOKStep_JiniExtract.ixx>
+
+
+//=======================================================================
+//function : WOKStep_JiniExtract
+//purpose  : 
+//=======================================================================
+WOKStep_JiniExtract::WOKStep_JiniExtract(const Handle(WOKMake_BuildProcess)& abp,
+                                            const Handle(WOKernel_DevUnit)& aunit, 
+                                            const Handle(TCollection_HAsciiString)& acode, 
+                                            const Standard_Boolean checked, 
+                                            const Standard_Boolean hidden)
+: WOKStep_Extract(abp, aunit, acode, checked, hidden)
+{
+  Handle(WOKBuilder_MSJiniExtractor) anextractor = new WOKBuilder_MSJiniExtractor(Unit()->Params());
+  anextractor->SetMSchema(WOKBuilder_MSTool::GetMSchema());
+  SetExtractor(anextractor);
+}
+
+
+//=======================================================================
+//function : HandleInputFile
+//purpose  : 
+//=======================================================================
+Standard_Boolean WOKStep_JiniExtract::HandleInputFile(const Handle(WOKMake_InputFile)& infile) const
+{
+   if(!infile->IsPhysic())
+    {
+      if(!strcmp("CPPJini_COMPLETE", infile->ID()->Token(":",2)->ToCString()))
+       {
+         infile->SetDirectFlag(Standard_True);
+         infile->SetBuilderEntity(new WOKBuilder_MSEntity(infile->ID()->Token(":",3)));
+         return Standard_True;
+       }
+      if(!strcmp("CPPJini_INCOMPLETE", infile->ID()->Token(":",2)->ToCString()))
+       {
+         infile->SetDirectFlag(Standard_True);
+         infile->SetBuilderEntity(new WOKBuilder_MSEntity(infile->ID()->Token(":",3)));
+         return Standard_True;
+       }
+      if(!strcmp("CPPJini_SEMICOMPLETE", infile->ID()->Token(":",2)->ToCString()))
+       {
+         infile->SetDirectFlag(Standard_True);
+         infile->SetBuilderEntity(new WOKBuilder_MSEntity(infile->ID()->Token(":",3)));
+         return Standard_True;
+       }
+      
+    }
+  return Standard_False;
+}
+
+//=======================================================================
+//Author   : Jean Gautier (jga)
+//function : Init
+//purpose  : 
+//=======================================================================
+void WOKStep_JiniExtract::Init()
+{
+  Handle(WOKBuilder_MSJiniExtractor) extr = Handle(WOKBuilder_MSJiniExtractor)::DownCast(Extractor());
+
+  if(IsToExecute())
+    {
+      extr->Load();
+      extr->Init(Unit()->Name());
+    }
+}
+
+
+//=======================================================================
+//Author   : Jean Gautier (jga)
+//function : GetInputFlow
+//purpose  : 
+//=======================================================================
+void WOKStep_JiniExtract::GetInputFlow()
+{
+  static Handle(TCollection_HAsciiString) COMP  = new TCollection_HAsciiString("CPPJini_COMPLETE");
+  static Handle(TCollection_HAsciiString) ICOMP = new TCollection_HAsciiString("CPPJini_INCOMPLETE");
+  static Handle(TCollection_HAsciiString) SCOMP = new TCollection_HAsciiString("CPPJini_SEMICOMPLETE");
+
+  Handle(WOKernel_File) NULLFILE;
+  Handle(WOKUtils_Path) NULLPATH;
+  Handle(WOKBuilder_Entity) NULLENT;
+
+  Handle(WOKBuilder_MSJiniExtractor) ext = Handle(WOKBuilder_MSJiniExtractor)::DownCast(Extractor());
+
+  //WOKMake_Step::GetInputFlow();
+    
+  WOKTools_MapIteratorOfMapOfHAsciiString cit(ext->CompleteTypes());
+
+  while(cit.More())
+    {
+      
+      Handle(TCollection_HAsciiString) id = WOKernel_File::FileLocatorName(Unit()->Name(), COMP, cit.Key());
+
+      Handle(WOKMake_InputFile) infile = new WOKMake_InputFile(id, NULLFILE,NULLENT, NULLPATH); 
+
+      infile->SetLocateFlag(Standard_True);
+      infile->SetDirectFlag(Standard_True);
+      infile->SetPhysicFlag(Standard_False);
+
+      if(HandleInputFile(infile))
+       {
+         myinflow.Add(infile->ID(), infile);
+       }
+      cit.Next();
+    }
+
+  WOKTools_MapIteratorOfMapOfHAsciiString iit(ext->IncompleteTypes());
+
+  while(iit.More())
+    {
+      
+      Handle(TCollection_HAsciiString) id = WOKernel_File::FileLocatorName(Unit()->Name(), ICOMP, iit.Key());
+
+      Handle(WOKMake_InputFile) infile = new WOKMake_InputFile(id, NULLFILE,NULLENT, NULLPATH); 
+
+      infile->SetLocateFlag(Standard_True);
+      infile->SetDirectFlag(Standard_True);
+      infile->SetPhysicFlag(Standard_False);
+
+      if(HandleInputFile(infile))
+       {
+         myinflow.Add(infile->ID(), infile);
+       }
+      iit.Next();
+    }
+
+  WOKTools_MapIteratorOfMapOfHAsciiString sit(ext->SemiCompleteTypes());
+  while(sit.More())
+    {
+      
+      Handle(TCollection_HAsciiString) id = WOKernel_File::FileLocatorName(Unit()->Name(), SCOMP, sit.Key());
+
+      Handle(WOKMake_InputFile) infile = new WOKMake_InputFile(id, NULLFILE,NULLENT, NULLPATH); 
+
+      infile->SetLocateFlag(Standard_True);
+      infile->SetDirectFlag(Standard_True);
+      infile->SetPhysicFlag(Standard_False);
+
+      if(HandleInputFile(infile))
+       {
+         myinflow.Add(infile->ID(), infile);
+       }
+      sit.Next();
+    }
+  
+}
+
+//=======================================================================
+//function : OutOfDateEntities
+//purpose  : 
+//=======================================================================
+Handle(WOKMake_HSequenceOfInputFile) WOKStep_JiniExtract::OutOfDateEntities()
+{
+  Handle(WOKMake_HSequenceOfInputFile) result = new WOKMake_HSequenceOfInputFile;
+  Standard_Integer i;
+  
+  LoadDependencies();
+
+  Handle(WOKBuilder_MSchema) ameta = Extractor()->MSchema();
+  
+  for(i=1; i<=myinflow.Extent(); i++)
+    {
+      Handle(WOKMake_InputFile) infile = myinflow(i);
+      Handle(WOKBuilder_MSEntity) anent = Handle(WOKBuilder_MSEntity)::DownCast(infile->BuilderEntity());
+      
+      if(anent.IsNull())
+       {
+         ErrorMsg << "WOKStep_JiniExtract::OutOfDateEntities" 
+                  << infile->ID() << " is not a MS Entity" << endm;
+         SetFailed();
+         return result;
+       }
+      
+      WOKBuilder_MSActionID anid(anent->Name(), Extractor()->ExtractorID());
+      
+      Handle(WOKBuilder_MSAction) anaction = ameta->GetAction(anid);
+      
+      switch(Extractor()->ExtractionStatus(anaction))
+       {
+       case WOKBuilder_OutOfDate:
+         result->Append(infile);
+         break;
+       case WOKBuilder_UpToDate:
+         break;
+       case WOKBuilder_NotDefined:
+         SetFailed();
+         return result;
+        default: break;
+       }
+    }
+  return result;
+}
+
+
+
+//=======================================================================
+//function : Execute
+//purpose  : 
+//=======================================================================
+void WOKStep_JiniExtract::Execute(const Handle(WOKMake_HSequenceOfInputFile)& tobuild)
+{
+  Standard_Integer i,j;
+
+  // Used Types
+  Handle(WOKernel_FileType) sourcetype       = Unit()->GetFileType("source");
+  Handle(WOKernel_FileType) privincludetype  = Unit()->GetFileType("privinclude");
+  Handle(WOKernel_FileType) pubincludetype   = Unit()->GetFileType("pubinclude");
+  Handle(WOKernel_FileType) derivatedtype    = Unit()->GetFileType("derivated");
+  Handle(WOKernel_FileType) englispfiletype  = Unit()->GetFileType("englisp");
+
+  Handle(WOKBuilder_Command) acmd   = new WOKBuilder_Command(new TCollection_HAsciiString("COMMAND"), Unit()->Params());
+  Handle(WOKUtils_Shell)     ashell = Shell();
+
+  ashell->Lock();
+  acmd->SetShell(ashell);
+
+  Handle(WOKernel_File) outfile, basefile;
+  Extractor()->Load();
+  Extractor()->SetOutputDir(OutputDir());
+
+  WOKBuilder_MSExtractorIterator anit(WOKBuilder_MSTool::GetMSchema(), Extractor());
+  
+  for(j=1; j<=tobuild->Length(); j++)
+    {
+      
+      Handle(WOKBuilder_MSEntity)     entity = Handle(WOKBuilder_MSEntity)::DownCast(tobuild->Value(j)->BuilderEntity());
+      Handle(TCollection_HAsciiString) amode = tobuild->Value(j)->ID()->Token(":", 2);
+      
+      switch(anit.Execute(entity, amode->ToCString()))
+       {
+       case WOKBuilder_Success:
+         {
+#ifdef WOK_VERBOSE
+           if(VerboseMsg("WOK_EXTRACT").IsSet())
+             {
+               VerboseMsg("WOK_EXTRACT") << "WOKStep_Extract::Execute" << entity->Name() << " produces : " << endm;
+               for(i=1; i<=anit.Produces()->Length(); i++)
+                 {
+                   VerboseMsg("WOK_EXTRACT") << "WOKStep_Extract::Execute" 
+                                             << "\t\t" << anit.Produces()->Value(i)->Path()->Name() << endm;
+                 }
+             }
+#endif
+         
+           WOKBuilder_MSActionID anid(entity->Name(), WOKBuilder_ClientExtract);
+           Handle(WOKBuilder_MSAction) anaction = Extractor()->MSchema()->GetAction(anid);
+           Handle(WOKBuilder_Entity)   outent;
+
+           Extractor()->MSchema()->ChangeAddAction(anid, Handle(WOKBuilder_Specification)());
+
+           for(i=1; i<=anit.Produces()->Length(); i++)
+             {
+               Standard_Boolean istemplate = Standard_False;
+
+               outent = anit.Produces()->Value(i);
+               switch(outent->Path()->Extension())
+                 {
+                 case WOKUtils_HXXFile:
+                   // a .hxx file is a public include
+                   outfile = new WOKernel_File(outent->Path()->FileName(), Unit(), pubincludetype);
+                   break;
+                 case WOKUtils_IXXFile:
+                 case WOKUtils_JXXFile:
+                 case WOKUtils_DDLFile:
+                   // Private includes
+                   outfile = new WOKernel_File(outent->Path()->FileName(), Unit(), privincludetype);
+                   break;
+                 case WOKUtils_CXXFile:
+                   // Devivated Cxx file
+                   outfile = new WOKernel_File(outent->Path()->FileName(), Unit(), derivatedtype);
+                   break;
+                 case WOKUtils_DATFile:
+                   // Derivated datafile
+                   outfile = new WOKernel_File(outent->Path()->FileName(), Unit(), derivatedtype);
+                   break;
+                 case WOKUtils_LispFile:
+                   // Engine Lisp File
+                   outfile = new WOKernel_File(outent->Path()->FileName(), Unit(), englispfiletype);
+                   break;
+                 case WOKUtils_TemplateFile:
+                   outfile = new WOKernel_File(outent->Path()->FileName(), Unit(), sourcetype);
+                   istemplate = Standard_True;
+                   break;
+                 case WOKUnix_UnknownFile:
+                   if (!strcmp(outent->Path()->ExtensionName()->ToCString(),".java")) {
+                     outfile = new WOKernel_File(outent->Path()->FileName(), Unit(), privincludetype);
+                   }
+                   break;
+                   default: break;
+
+                 }
+             
+               outfile->GetPath();
+               basefile = Locator()->Locate(Unit()->Name(), outfile->TypeName(), outfile->Name());
+             
+               WOKBuilder_BuildStatus astatus = WOKBuilder_Unbuilt;
+                     
+               if(basefile.IsNull())
+                 {
+                   // pas encore de Fichier : Simply Move
+                   astatus = acmd->Move(outent->Path(), outfile->Path());
+                 }
+               else
+                 {
+                   if(!outent->Path()->IsSameFile(basefile->Path()))
+                     {
+                       astatus = acmd->Move(outent->Path(), outfile->Path());
+                     }
+                   //astatus = acmd->ReplaceIfChangedWith(outent->Path(), basefile->Path(), outfile->Path());
+                 }
+             
+               Handle(WOKMake_OutputFile) out;
+
+               switch(astatus)
+                 {
+                 case WOKBuilder_Success:
+                   outent->SetPath(outfile->Path());
+                   out  = new WOKMake_OutputFile(outfile->LocatorName(), outfile, outent, outfile->Path());
+                   out->SetLocateFlag(Standard_True);
+                   out->SetProduction();
+                   if(!istemplate) AddExecDepItem(tobuild->Value(j), out, Standard_True);
+
+                   InfoMsg  << "WOKStep_Extract::Execute" << "File : " << outfile->Path()->Name() << " is modified" << endm;
+                   break;
+                 case WOKBuilder_Unbuilt:
+#ifdef WOK_VERBOSE
+                   VerboseMsg("WOK_EXTRACT")  << "WOKStep_Extract::Execute" 
+                                              << "File : " << outfile->Path()->Name() << " is unchanged" << endm;
+#endif
+                   
+                   outent->SetPath(basefile->Path());
+                   out  = new WOKMake_OutputFile(basefile->LocatorName(), basefile, outent, basefile->Path());
+                   out->SetLocateFlag(Standard_True);
+                   out->SetProduction();
+                   if(!istemplate) AddExecDepItem(tobuild->Value(j), out, Standard_True);
+                   break;
+                 case WOKBuilder_Failed:
+                   SetFailed();
+                   ErrorMsg << "WOKStep_Extract::Execute" << "Failed    : " << outfile->Name() << endm;
+                   break;
+                  default: break;
+                 }
+             }
+         }
+         break;
+       case WOKBuilder_Failed:
+         ErrorMsg << "WOKStep_Extract::Execute" << "Failed    : " << entity->Name() << endm;          
+         break;
+        default: break;
+       }
+    }
+
+  ashell->UnLock();
+
+  if(Status() == WOKMake_Unprocessed) SetSucceeded();
+  return;
+}