added:
#copySTCDirectoryForBuild
#copySTCDirectoryForBuild:
#generateDLLsForLinkage
changed:
#build
#generateSourceFilesByFilingOut
--- 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