From a0cf812e151ce950a429fa6a60e1abeb2a98e5a2 Mon Sep 17 00:00:00 2001 From: cas Date: Fri, 5 Nov 1999 18:24:35 +0000 Subject: [PATCH] Initial revision --- src/WOKStep/WOKStep_JavaCompile.tcl | 77 ++++++ src/WOKStep/WOKStep_JavaHeader.tcl | 76 ++++++ src/WOKStep/WOKStep_JiniExtract.cdl | 47 ++++ src/WOKStep/WOKStep_JiniExtract.cxx | 390 ++++++++++++++++++++++++++++ 4 files changed, 590 insertions(+) create mode 100755 src/WOKStep/WOKStep_JavaCompile.tcl create mode 100755 src/WOKStep/WOKStep_JavaHeader.tcl create mode 100755 src/WOKStep/WOKStep_JiniExtract.cdl create mode 100755 src/WOKStep/WOKStep_JiniExtract.cxx diff --git a/src/WOKStep/WOKStep_JavaCompile.tcl b/src/WOKStep/WOKStep_JavaCompile.tcl new file mode 100755 index 0000000..8d2423c --- /dev/null +++ b/src/WOKStep/WOKStep_JavaCompile.tcl @@ -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 index 0000000..f791b49 --- /dev/null +++ b/src/WOKStep/WOKStep_JavaHeader.tcl @@ -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 index 0000000..ffd9c90 --- /dev/null +++ b/src/WOKStep/WOKStep_JiniExtract.cdl @@ -0,0 +1,47 @@ +-- File: WOKStep_JiniExtract.cdl +-- Created: Thu Jun 27 17:20:15 1996 +-- Author: Jean GAUTIER +-- +---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 index 0000000..4259b3e --- /dev/null +++ b/src/WOKStep/WOKStep_JiniExtract.cxx @@ -0,0 +1,390 @@ +// Copyright: Matra-Datavision 1999 +// File: WOKSteps_JiniExtract.cxx +// Created: Mon Mar 22 17:10:16 1999 +// Author: Arnaud BOUZY +// + +#include + +#include +#include + +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +#include + + +//======================================================================= +//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; +} -- 2.39.5