added:
authorClaus Gittinger <cg@exept.de>
Sat, 10 Oct 2009 16:26:51 +0200
changeset 2599 e8624fcf3c1b
parent 2598 2bb47a698d59
child 2600 bfde5434dcdd
added: #copySTCDirectoryForBuild #copySTCDirectoryForBuild: #generateDLLsForLinkage changed: #build #generateSourceFilesByFilingOut
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