ProjectDefinition.st
changeset 10144 89b932dbdacc
parent 10140 154f52dd6821
child 10146 2033c6cea524
equal deleted inserted replaced
10143:d184df3ed23d 10144:89b932dbdacc
  2522 !
  2522 !
  2523 
  2523 
  2524 generateDependencies:whichArchitecture 
  2524 generateDependencies:whichArchitecture 
  2525     ^ String 
  2525     ^ String 
  2526         streamContents:[:s | 
  2526         streamContents:[:s | 
  2527             |classNames classesLoaded classesSorted classNamesSorted putDependencyForClass archClassNames archClassesLoaded putSingleClassDependencyEntry putDependencyForExtensions|
  2527             |classNames classesPresent classesLoaded classesSorted classNamesSorted putDependencyForClass 
       
  2528              archClassNames archClassesLoaded 
       
  2529              putSingleClassDependencyEntry putDependencyForExtensions|
  2528 
  2530 
  2529             putSingleClassDependencyEntry := [:cls | 
  2531             putSingleClassDependencyEntry := [:cls | 
  2530                     |sclsBaseName|
  2532                     |sclsBaseName|
  2531 
  2533 
  2532                     s nextPutAll:' $(INCLUDE_TOP)'.
  2534                     s nextPutAll:' $(INCLUDE_TOP)'.
  2536                                 topRelativePathTo:sclsBaseName
  2538                                 topRelativePathTo:sclsBaseName
  2537                                 inPackage:cls package
  2539                                 inPackage:cls package
  2538                                 architecture:whichArchitecture).
  2540                                 architecture:whichArchitecture).
  2539                     s nextPutAll:'.$(H)'.
  2541                     s nextPutAll:'.$(H)'.
  2540                 ].
  2542                 ].
       
  2543 
  2541             putDependencyForClass := [:cls | 
  2544             putDependencyForClass := [:cls | 
  2542                     |clsBaseName already|
  2545                     |clsBaseName already|
  2543 
  2546 
  2544                     clsBaseName := cls classFilename asFilename withoutSuffix baseName.
  2547                     clsBaseName := cls classFilename asFilename withoutSuffix baseName.
  2545                     s nextPutAll:'$(OUTDIR)'.
  2548                     s nextPutAll:'$(OUTDIR)'.
  2549                     s nextPutAll:clsBaseName.
  2552                     s nextPutAll:clsBaseName.
  2550                     s nextPutAll:'.$(H)'.
  2553                     s nextPutAll:'.$(H)'.
  2551                     s nextPutAll:': '.
  2554                     s nextPutAll:': '.
  2552                     s nextPutAll:clsBaseName.
  2555                     s nextPutAll:clsBaseName.
  2553                     s nextPutAll:'.st'.
  2556                     s nextPutAll:'.st'.
  2554                     already := Set new.
  2557                     cls isLoaded ifTrue:[
  2555                     cls 
  2558                         already := Set new.
  2556                         allSuperclassesDo:[:scls | 
  2559                         cls 
  2557                             putSingleClassDependencyEntry value:scls.
  2560                             allSuperclassesDo:[:scls | 
  2558                             already add:scls.
  2561                                 putSingleClassDependencyEntry value:scls.
  2559                         ].
  2562                                 already add:scls.
  2560                     cls 
  2563                             ].
  2561                         privateClassesDo:[:eachPrivateClass | 
  2564                         cls 
  2562                             eachPrivateClass 
  2565                             privateClassesDo:[:eachPrivateClass | 
  2563                                 allSuperclassesDo:[:scls | 
  2566                                 eachPrivateClass 
  2564                                     |sclsBaseName|
  2567                                     allSuperclassesDo:[:scls | 
  2565 
  2568                                         |sclsBaseName|
  2566                                     scls ~~ cls ifTrue:[
  2569 
  2567                                         scls isPrivate ifFalse:[
  2570                                         scls ~~ cls ifTrue:[
  2568                                             (already includes:scls) ifFalse:[
  2571                                             scls isPrivate ifFalse:[
  2569                                                 putSingleClassDependencyEntry value:scls.
  2572                                                 (already includes:scls) ifFalse:[
  2570                                                 already add:scls.
  2573                                                     putSingleClassDependencyEntry value:scls.
       
  2574                                                     already add:scls.
       
  2575                                                 ].
  2571                                             ].
  2576                                             ].
  2572                                         ].
  2577                                         ].
  2573                                     ].
  2578                                     ]
  2574                                 ]
  2579                             ].
  2575                         ].
  2580                     ].
  2576                     s nextPutAll:' $(STCHDR)'.
  2581                     s nextPutLine:' $(STCHDR)'.
  2577                     s cr.
       
  2578                 ].
  2582                 ].
       
  2583 
  2579             putDependencyForExtensions := [
  2584             putDependencyForExtensions := [
  2580                     |already|
  2585                     |already|
  2581 
  2586 
  2582                     s nextPutAll:'$(OUTDIR)extensions.$(O): extensions.st'.
  2587                     s nextPutAll:'$(OUTDIR)extensions.$(O): extensions.st'.
  2583                     already := Set new.
  2588                     already := Set new.
  2598                                                     ].
  2603                                                     ].
  2599                                                 ].
  2604                                                 ].
  2600                                         ].
  2605                                         ].
  2601                                     ].
  2606                                     ].
  2602                         ].
  2607                         ].
  2603                     s nextPutAll:' $(STCHDR)'.
  2608                     s nextPutLine:' $(STCHDR)'.
  2604                     s cr.
       
  2605                 ].
  2609                 ].
       
  2610 
  2606             classNames := self compiled_classNames_common.
  2611             classNames := self compiled_classNames_common.
  2607             classesLoaded := classNames 
  2612             classesPresent := classNames 
  2608                         collect:[:className | Smalltalk classNamed:className]
  2613                         collect:[:className | Smalltalk classNamed:className]
  2609                         thenSelect:[:cls | cls notNil and:[cls isLoaded]].
  2614                         thenSelect:[:cls | cls notNil].
       
  2615             classesLoaded := classesPresent 
       
  2616                         select:[:cls | cls isLoaded].
  2610 
  2617 
  2611             classesSorted := Class classesSortedByLoadOrder:classesLoaded.
  2618             classesSorted := Class classesSortedByLoadOrder:classesLoaded.
  2612             classesSorted do:putDependencyForClass.
  2619             classesSorted do:putDependencyForClass.
       
  2620             (classesPresent select:[:cls | cls isLoaded not]) do:putDependencyForClass.
       
  2621 
  2613             self namesAndAttributesIn:(self additionalClassNamesAndAttributes)
  2622             self namesAndAttributesIn:(self additionalClassNamesAndAttributes)
  2614                 do:[:className :attr | 
  2623                 do:[:className :attr | 
  2615                     |cls|
  2624                     |cls|
  2616 
  2625 
  2617                     (attr isEmptyOrNil or:[ (attr includes:#autoload) not ]) ifTrue:[
  2626                     (attr isEmptyOrNil or:[ (attr includes:#autoload) not ]) ifTrue:[
  2636      stx_libbasic3 generateDependencies:#win32
  2645      stx_libbasic3 generateDependencies:#win32
  2637     "
  2646     "
  2638 
  2647 
  2639     "Modified: / 16-08-2006 / 18:52:10 / User"
  2648     "Modified: / 16-08-2006 / 18:52:10 / User"
  2640     "Created: / 14-09-2006 / 12:38:57 / cg"
  2649     "Created: / 14-09-2006 / 12:38:57 / cg"
  2641     "Modified: / 09-10-2006 / 14:23:16 / cg"
  2650     "Modified: / 25-10-2006 / 16:01:13 / cg"
  2642 !
  2651 !
  2643 
  2652 
  2644 generateDependencies_unix
  2653 generateDependencies_unix
  2645     ^ self generateDependencies:#unix
  2654     ^ self generateDependencies:#unix
  2646 
  2655 
  3354 
  3363 
  3355     "Created: / 17-08-2006 / 14:46:28 / cg"
  3364     "Created: / 17-08-2006 / 14:46:28 / cg"
  3356     "Modified: / 23-08-2006 / 13:49:27 / cg"
  3365     "Modified: / 23-08-2006 / 13:49:27 / cg"
  3357 !
  3366 !
  3358 
  3367 
       
  3368 hasAllClassesFullyLoaded
       
  3369     "return true, if all classes are present and loaded"
       
  3370 
       
  3371     ^ self hasAllClassesLoaded:true
       
  3372 
       
  3373     "Created: / 25-10-2006 / 16:08:25 / cg"
       
  3374 !
       
  3375 
  3359 hasAllClassesLoaded
  3376 hasAllClassesLoaded
       
  3377     "return true, if all classes are present (athough, some might be autoloaded)"
       
  3378 
       
  3379     ^ self hasAllClassesLoaded:false
       
  3380 
       
  3381     "Modified: / 25-10-2006 / 16:08:11 / cg"
       
  3382 !
       
  3383 
       
  3384 hasAllClassesLoaded:checkIfFullyLoaded
  3360     |checkLoaded|
  3385     |checkLoaded|
  3361 
  3386 
  3362     checkLoaded := [:eachClassName |
  3387     checkLoaded := [:eachClassName |
  3363             |cls|
  3388             |cls|
  3364 
  3389 
  3365             cls := Smalltalk loadedClassNamed:eachClassName.
  3390             cls := Smalltalk loadedClassNamed:eachClassName.
  3366             (cls isNil "or:[cls isLoaded not]") ifTrue:[
  3391             (cls isNil "or:[cls isLoaded not]") ifTrue:[
  3367                 Transcript showCR:(self name,' missing class: "',eachClassName,'".').
  3392                 Transcript showCR:(self name,' missing class: "',eachClassName,'".').
  3368                 ^ false 
  3393                 ^ false 
  3369             ].
  3394             ].
       
  3395             checkIfFullyLoaded ifTrue:[
       
  3396                 cls isLoaded ifFalse:[
       
  3397                     Transcript showCR:(self name,' unloaded class: "',eachClassName,'".').
       
  3398                     ^ false 
       
  3399                 ]
       
  3400             ].
  3370         ].
  3401         ].
  3371 
  3402 
  3372     (self classNamesForWhich:[:nm :attr | (attr includes:#autoload)
  3403     (self classNamesForWhich:[:nm :attr | (attr includes:#autoload)
  3373                                           or:[attr isEmptyOrNil] ]) do:checkLoaded.
  3404                                           or:[attr isEmptyOrNil] ]) do:checkLoaded.
  3374     (self compiled_classNamesForPlatform:OperatingSystem platformName) do:checkLoaded.
  3405     (self compiled_classNamesForPlatform:OperatingSystem platformName) do:checkLoaded.
  3375 
  3406 
  3376     ^ true.
  3407     ^ true.
  3377 
  3408 
  3378     "Created: / 17-08-2006 / 00:50:01 / cg"
  3409     "Created: / 25-10-2006 / 16:06:05 / cg"
  3379     "Modified: / 25-10-2006 / 00:04:06 / cg"
       
  3380 !
  3410 !
  3381 
  3411 
  3382 hasAllExtensionsLoaded
  3412 hasAllExtensionsLoaded
  3383     self extensionMethodNames pairWiseDo:[:className :selector |
  3413     self extensionMethodNames pairWiseDo:[:className :selector |
  3384         |cls|
  3414         |cls|
  3486 ! !
  3516 ! !
  3487 
  3517 
  3488 !ProjectDefinition class methodsFor:'documentation'!
  3518 !ProjectDefinition class methodsFor:'documentation'!
  3489 
  3519 
  3490 version
  3520 version
  3491     ^ '$Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.111 2006-10-24 22:04:24 cg Exp $'
  3521     ^ '$Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.112 2006-10-25 14:17:49 cg Exp $'
  3492 ! !
  3522 ! !
  3493 
  3523 
  3494 ProjectDefinition initialize!
  3524 ProjectDefinition initialize!