# HG changeset patch # User Claus Gittinger # Date 1255184811 -7200 # Node ID e8624fcf3c1bb221c14aa35d7e7da7de6f568f0d # Parent 2bb47a698d59a5ea471d4ca554cf7d86cb91e989 added: #copySTCDirectoryForBuild #copySTCDirectoryForBuild: #generateDLLsForLinkage changed: #build #generateSourceFilesByFilingOut diff -r 2bb47a698d59 -r e8624fcf3c1b ProjectBuilder.st --- a/ProjectBuilder.st Sat Oct 10 15:10:56 2009 +0200 +++ b/ProjectBuilder.st Sat Oct 10 16:26:51 2009 +0200 @@ -81,15 +81,18 @@ mySTXTopDirectory := myTopDirectory / 'stx'. self setupBuildDirectory. +self halt. + self copySTCDirectoryForBuild. self generateSourceFiles. + self generateDLLsForLinkage. self halt. OperatingSystem - executeCommand:(ParserFlags makeCommand) + executeCommand:(ParserFlags makeCommand,' exe') inputFrom:nil outputTo:Transcript errorTo:Transcript - inDirectory:((buildDirectory construct:module) construct:directory) + inDirectory:(buildDirectory / module / directory) onError:[:status| self error:'make failed']. "Created: / 09-08-2006 / 18:37:19 / fm" @@ -123,6 +126,32 @@ self activityNotification:nil ! +copySTCDirectoryForBuild + |targetDir stc files| + + targetDir := buildDirectory / 'stx' / 'stc'. + targetDir exists ifFalse:[ targetDir makeDirectory ]. + + stc := OperatingSystem isMSWINDOWSlike + ifTrue:[ 'stc.exe' ] + ifFalse:[ 'stc' ]. + + files := #( ) copyWith:stc. + + files do:[:eachFile | + |sourceFile targetFile| + + sourceFile := mySTXTopDirectory / 'stc' / eachFile. + targetFile := targetDir / eachFile. + (targetFile exists not + or:[ targetFile modificationTime < sourceFile modificationTime ]) ifTrue:[ + self activityNotification:'copying ',sourceFile pathName,'...'. + sourceFile copyTo:targetFile + ]. + ]. + self activityNotification:nil +! + createHeaderFileFor:aClass in:packageTargetDir |instVarList classInstVarList classVarList bindings superclassFilename template file newContents oldContents| @@ -185,6 +214,47 @@ ]. ! +generateDLLsForLinkage + |targetBuildDir| + + targetBuildDir := buildDirectory / package module / package directory. + + "/ generate header files... + (projectDefinitionClass allPreRequisites) + do:[:eachPackageToFileout | + |packageId packageDef packageModule packageDirectory packageTargetDir + dllSource dllSourceDir libraryName dllRelativePath| + + packageId := eachPackageToFileout asPackageId. + packageModule := packageId module. + packageDirectory := packageId directory. + packageTargetDir := (buildDirectory / packageModule / packageDirectory) recursiveMakeDirectory. + + packageDef := packageId projectDefinitionClass. + libraryName := packageDef libraryName. + + "/ mhmh - take them from my tree or from the projects/smalltalk execution directory ?? + dllSourceDir := myTopDirectory / packageModule / packageDirectory. + OperatingSystem isMSWINDOWSlike ifTrue:[ +"/ dllRelativePath := 'objvc','/',(libraryName,'.dll'). +"/ (dllSourceDir / dllRelativePath) exists + false ifFalse:[ + dllRelativePath := 'objbc','/',(libraryName,'.dll'). + ] + ] ifFalse:[ + dllRelativePath := libraryName,'.so'. + ]. + ((dllSourceDir / dllRelativePath) exists + and:[ (dllSourceDir / dllRelativePath) fileSize = (packageTargetDir / dllRelativePath) fileSize + and:[ (dllSourceDir / dllRelativePath) modificationTime < (packageTargetDir / dllRelativePath) modificationTime + "/ and:[ (dllSourceDir / dllRelativePath) sameContentsAs:(packageTargetDir / dllRelativePath) ] + ]]) ifFalse:[ + (packageTargetDir / dllRelativePath) directory recursiveMakeDirectory. + (dllSourceDir / dllRelativePath) copyTo:(packageTargetDir / dllRelativePath). + ] + ]. +! + generateSourceFiles sourceCodeManager notNil ifTrue:[ "/ check out / generate files there @@ -238,8 +308,6 @@ ! generateSourceFilesByFilingOut - |targetDir prerequisitePackages| - "/ local build "/ fileout the project @@ -247,7 +315,7 @@ (buildDirectory / package module) makeDirectory. ]. - "/ file out the package(s) + "/ file out the package(s) which are to be built ((Array with:package)) do:[:eachPackageToFileout | |packageId packageModule packageDirectory packageTargetDir packageDef| @@ -276,8 +344,17 @@ "/ cls fileOutIn:packageTargetDir "/ ] "/ ]. + + projectDefinitionClass forEachFileNameAndGeneratedContentsDo:[:fileName :fileContents | + ((packageTargetDir / fileName) exists + and:[ (packageTargetDir / fileName) contents = fileContents ]) ifFalse:[ + (packageTargetDir / fileName) contents:fileContents. + ]. + ]. +self halt. ]. - "/ generate header files... + + "/ generate header files in prerequisite packages... (projectDefinitionClass allPreRequisites) do:[:eachPackageToFileout | |packageId packageDef packageModule packageDirectory packageTargetDir| @@ -298,44 +375,9 @@ self createHeaderFileFor:cls in:packageTargetDir ]. ]. - -"/ (Smalltalk allClassesInPackage:eachPackageToFileout) do:[:cls | -"/ cls isPrivate ifFalse:[ -"/ cls isLoaded ifTrue:[ -"/ self createHeaderFileFor:cls in:packageTargetDir -"/ ] -"/ ] -"/ ]. ]. -"/ "/ copy h-files preRequisite packages -"/ prerequisitePackages := projectDefinitionClass preRequisitesForBuilding. -"/ prerequisitePackages do:[:eachPackage | -"/ |relativeDir sourceDir| -"/ -"/ relativeDir := eachPackage asPackageId pathRelativeToTopDirectory. -"/ sourceDir := Smalltalk packageDirectoryForPackageId:eachPackage. -"/ targetDir := buildDirectory construct:relativeDir. -"/ targetDir recursiveMakeDirectory. -"/ sourceDir directoryContentsAsFilenamesDo:[:eachSourceFilename | -"/ ((eachSourceFilename suffix asLowercase = 'h') -"/ or:[ eachSourceFilename suffix asLowercase = 'sth' ]) ifTrue:[ -"/ eachSourceFilename copyTo:targetDir. -"/ ]. -"/ ]. -"/ ]. - "/ stx_libbasic2 preRequisitesForBuilding#(#'stx:libbasic') -"/ "/ generate support files there -"/ targetDir := ((buildDirectory construct:module) construct:directory) recursiveMakeDirectory. -"/ #('bmake.bat' 'Make.spec' 'Make.proto' 'libInit.cc' 'abbrev.stc' -"/ 'bc.mak' -"/ ) do:[:f | -"/ |contents| -"/ -"/ contents := projectDefinitionClass generateFile:f. -"/ (targetDir construct:f) contents:contents. -"/ ]. ! setupBuildDirectory