ProjectDefinition.st
changeset 9883 c641767d1483
parent 9880 378bf1f5afa1
child 9887 5c0c2a62ad2d
--- a/ProjectDefinition.st	Thu Sep 14 16:49:12 2006 +0200
+++ b/ProjectDefinition.st	Thu Sep 14 17:06:41 2006 +0200
@@ -1210,7 +1210,7 @@
 !
 
 generateFile:filename
-    self fileNamesToGenerate
+    self basicFileNamesToGenerate
         pairsDo:[:fn :action | 
             filename = fn ifTrue:[
                 ^ self perform:action
@@ -1225,7 +1225,7 @@
     self error:('File "%1" not appropriate (not generated) for this type of project.'
                 bindWith:filename)
 
-    "Modified: / 14-09-2006 / 14:22:08 / cg"
+    "Modified: / 14-09-2006 / 16:16:45 / cg"
 !
 
 generate_abbrev_dot_stc
@@ -1842,13 +1842,13 @@
 !ProjectDefinition class methodsFor:'mappings support'!
 
 generateObjects_make_dot_spec 
-    |pivateClassesOf classes|
+    |pivateClassesOf sorter classes|
 
     classes := self compiled_classes_common.
     pivateClassesOf := IdentityDictionary new.
     classes do:[:each | pivateClassesOf at:each put:(each allPrivateClasses)].
 
-    classes topologicalSort:[:a :b |
+    sorter := [:a :b |
         "/ a must come before b iff:
         "/    b is a subclass of a
         "/    b has a private class which is a subclass of a
@@ -1860,7 +1860,7 @@
         mustComeBefore := (a isSharedPool and:[(b sharedPools includes: a name)]).
         mustComeBefore := mustComeBefore or:[b isSubclassOf:a].
         mustComeBefore ifFalse:[
-            pivateClassesOfB := pivateClassesOf at:b.
+            pivateClassesOfB := pivateClassesOf at:b ifAbsent:[ #() ].
             pivateClassesOfB do:[:eachClassInB |
                 mustComeBefore := mustComeBefore or:[eachClassInB isSubclassOf:a]
             ].
@@ -1868,6 +1868,8 @@
         mustComeBefore
     ].
 
+    classes topologicalSort:sorter.
+
     ^ String streamContents:[:s |
         |putLineForClass sysDepOrNil|
 
@@ -1886,6 +1888,7 @@
             define := OperatingSystem platformDefineForPlatformName:platformID.
             prefix := define copyFrom:('-D' size + 1).
             depClasses := self compiled_classesForArchitecture:platformID.    
+            depClasses topologicalSort:sorter.
             depClasses notEmpty ifTrue:[
                 sysDepOrNil := prefix,'_OBJS'.
                 s nextPutLine:sysDepOrNil,'= \'.
@@ -1918,7 +1921,7 @@
     "
 
     "Created: / 09-08-2006 / 11:24:39 / fm"
-    "Modified: / 14-09-2006 / 14:20:21 / cg"
+    "Modified: / 14-09-2006 / 16:21:46 / cg"
 ! !
 
 !ProjectDefinition class methodsFor:'private'!
@@ -2115,31 +2118,50 @@
 !
 
 searchForProjectsWhichProvideHeaderFiles
-      |myPackageID requiredPackages|
-
-      requiredPackages := Set new.
-      myPackageID := self package.
-
-      self compiled_classesDo:[:includedClass | 
-            includedClass allSuperclassesDo:[:eachSuperClass |
-                ((eachSuperClass package ~= myPackageID)
-                and:[ true "(self moduleOfClass: eachSuperClass) ~= 'stx'" ])
-                    ifTrue:[
-                        eachSuperClass package == Project noProjectID ifFalse:[
-                            requiredPackages add:(eachSuperClass package).
-                        ]
+    |addPackage myPackageID requiredPackages|
+
+    myPackageID := self package.
+    requiredPackages := Set new.
+
+    addPackage :=
+        [:package |
+            (package ~= myPackageID) ifTrue:[
+                true "(package startsWith:'stx:') not" ifTrue:[
+                    package ~= Project noProjectID ifTrue:[
+                        requiredPackages add:package.
                     ]
+                ]
             ]
-      ].
-      ^ requiredPackages
+        ].
+
+    self compiled_classesDo:[:cls | 
+        cls allSuperclassesDo:[:eachSuperClass |
+            addPackage value:(eachSuperClass package)
+        ].
+
+        cls privateClassesDo:[:eachPrivateClass |
+            eachPrivateClass allSuperclassesDo:[:eachSuperClass | 
+                eachSuperClass isPrivate ifFalse:[
+                    addPackage value:(eachSuperClass package)
+                ].
+            ]
+        ].
+    ].
+
+    self extensionMethodNames pairWiseDo:[:className :selector |
+        |cls|
+        ((cls := Smalltalk classNamed:className) notNil and:[cls isLoaded]) ifTrue:[
+            addPackage value:(cls package)
+        ]
+    ].
+    ^ requiredPackages
 
     "
-     self searchForProjectsWhichProvideHeaderFiles
-     DapasX_Datenbasis searchForProjectsWhichProvideHeaderFiles  
+     stx_libtool searchForProjectsWhichProvideHeaderFiles  
     "
 
     "Created: / 09-08-2006 / 16:26:37 / fm"
-    "Modified: / 14-09-2006 / 15:29:52 / cg"
+    "Modified: / 14-09-2006 / 17:06:34 / cg"
 !
 
 searchForSiblingProjects
@@ -2524,7 +2546,7 @@
 !ProjectDefinition class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.57 2006-09-14 14:04:13 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.58 2006-09-14 15:06:41 cg Exp $'
 ! !
 
 ProjectDefinition initialize!