ConfigurableFeatures.st
author Claus Gittinger <cg@exept.de>
Tue, 09 Jul 2019 20:55:17 +0200
changeset 24417 03b083548da2
parent 17166 d51ac1087219
child 18120 e3a375d5f6a8
permissions -rw-r--r--
#REFACTORING by exept class: Smalltalk class changed: #recursiveInstallAutoloadedClassesFrom:rememberIn:maxLevels:noAutoload:packageTop:showSplashInLevels: Transcript showCR:(... bindWith:...) -> Transcript showCR:... with:...

"{ Package: 'stx:libbasic' }"

Object subclass:#ConfigurableFeatures
	instanceVariableNames:''
	classVariableNames:'LoadedFeatures'
	poolDictionaries:''
	category:'System-Support'
!

!ConfigurableFeatures class methodsFor:'documentation'!

documentation
"
    being tired of finding '(Smalltalk at:someClass) notNil' all over the place,
    start to concentrate feature queries to this single class, which might get more
    feature methods via extensions.
    Thus, to correctly ask for a feature being present, use:
        ConfigurableFeature includesFeature:featureName
    or
        ConfigurableFeatures knownFeatures
    to ask for a list of features.

    Caveat: just started; more will be moved to this place as time goes by
"
! !

!ConfigurableFeatures class methodsFor:'initialization'!

initialize
    "Invoked at system start or when the class is dynamically loaded."

    "/ please change as required (and remove this comment)

    LoadedFeatures := Dictionary new

    "Modified: / 01-12-2014 / 11:16:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!ConfigurableFeatures class methodsFor:'queries'!

allFeatures
    "a list of features which are present in that smalltalk configuration"

    ^ self knownFeatures select:[:each | self includesFeature:each]

    "
     ConfigurableFeatures allFeatures 
    "

    "Created: / 07-09-2011 / 10:50:31 / cg"
!

includesFeature:featureName
    |querySelector|

    querySelector := ('has',featureName asUppercaseFirst) asSymbol.
    ^ self perform:querySelector ifNotUnderstood:false.

    "
     ConfigurableFeatures includesFeature:#SubversionSupport
    "

    "Created: / 07-09-2011 / 10:49:08 / cg"
!

knownFeatures
    "a list of known features; some of them might not be present in that smalltalk configuration"

    ^ self class methodDictionary keys
        collect:[:each | 
            (each startsWith:'has') ifTrue:[
                (each endsWith:':') ifFalse:[
                    each copyFrom:4
                ]
            ] ifFalse:[
                nil
            ].
        ]
        thenSelect:[:nm | nm notNil]

    "
     ConfigurableFeatures allFeatures
    "

    "Created: / 07-09-2011 / 10:51:26 / cg"
! !

!ConfigurableFeatures class methodsFor:'queries-features'!

hasCVSSupport
    "/ use Smalltalk-at to trick the dependency/prerequisite generator
    ^ (Smalltalk at: #'CVSSourceCodeManager' ifAbsent:nil) notNil

    "
     ConfigurableFeatures hasCVSSupport
    "

    "Created: / 03-01-2012 / 15:36:54 / cg"
!

hasCVSSupportEnabled
    ^ self hasSCMSupportEnabledFor:#'CVSSourceCodeManager'

    "Created: / 03-01-2012 / 15:42:16 / cg"
!

hasDataBaseSourceCodeManagerSupport
    "/ use Smalltalk-at to trick the dependency/prerequisite generator
    ^ (Smalltalk at: #'DataBaseSourceCodeManager' ifAbsent:nil) notNil

    "
     ConfigurableFeatures hasDataBaseSourceCodeManagerSupport
    "

    "Created: / 03-01-2012 / 15:36:03 / cg"
!

hasDataBaseSourceCodeManagerSupportEnabled
    ^ self hasSCMSupportEnabledFor:#'DataBaseSourceCodeManager'

    "Created: / 03-01-2012 / 15:36:12 / cg"
!

hasExternalLookupSupport
    "Return true, if the VM is compiled with external lookup MOP"
%{
#ifdef SUPPORT_EXTERNAL_LOOKUP
    RETURN ( true );
#endif
%}.
    ^false

    "
        ConfigurableFeatures hasExternalLookupSupport
        ConfigurableFeatures includesFeature:#ExternalLookupSupport
    "

    "Created: / 16-04-2012 / 20:00:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

hasFileBasedSourceCodeManagerSupport
    "/ use Smalltalk-at to trick the dependency/prerequisite generator
    ^ (Smalltalk at: #'FileBasedSourceCodeManager' ifAbsent:nil) notNil

    "
     ConfigurableFeatures hasFileBasedSourceCodeManagerSupport
    "

    "Created: / 21-12-2011 / 17:07:21 / cg"
!

hasFileBasedSourceCodeManagerSupportEnabled
    ^ self hasSCMSupportEnabledFor:#'FileBasedSourceCodeManager'

    "Created: / 21-12-2011 / 17:07:08 / cg"
!

hasGitSupport
    "/ use Smalltalk-at to trick the dependency/prerequisite generator
    ^ (Smalltalk at: #'GitSourceCodeManager' ifAbsent:nil) notNil

    "
     ConfigurableFeatures hasGitSupport
    "

    "Created: / 23-07-2012 / 13:37:09 / cg"
!

hasGitSupportEnabled
    ^ self hasSCMSupportEnabledFor:#'GitSourceCodeManager'

    "
     self hasGitSupportEnabled
    "

    "Created: / 23-07-2012 / 13:37:17 / cg"
!

hasMercurialSupport
    "/ use Smalltalk-at to trick the dependency/prerequisite generator
    ^ (Smalltalk at: #'MercurialSourceCodeManager' ifAbsent:nil) notNil

    "
     ConfigurableFeatures hasMercurialSupport
    "

    "Created: / 18-01-2012 / 10:58:07 / cg"
!

hasMercurialSupportEnabled
    ^ self hasSCMSupportEnabledFor:#'MercurialSourceCodeManager'

    "
     self hasMercurialSupportEnabled
    "

    "Created: / 18-01-2012 / 10:58:12 / cg"
!

hasMonticelloSupport
    "/ use Smalltalk-at to trick the dependency/prerequisite generator
    ^ (Smalltalk at: #'MonticelloSourceCodeManager' ifAbsent:nil) notNil

    "
     ConfigurableFeatures hasMonticelloSupport
    "

    "Created: / 03-01-2012 / 15:44:32 / cg"
!

hasMonticelloSupportEnabled
    ^ self hasSCMSupportEnabledFor:#'MonticelloSourceCodeManager'

    "Created: / 03-01-2012 / 15:44:39 / cg"
!

hasPerforceSupport
    "/ use Smalltalk-at to trick the dependency/prerequisite generator
    ^ (Smalltalk at: #'PerforceSourceCodeManager' ifAbsent:nil) notNil

    "
     ConfigurableFeatures hasPerforceSupport
    "

    "Created: / 03-01-2012 / 15:43:42 / cg"
!

hasPerforceSupportEnabled
    ^ self hasSCMSupportEnabledFor:#'PerforceSourceCodeManager'

    "Created: / 03-01-2012 / 15:43:28 / cg"
!

hasRefactoryBrowser
    "Return true, if refactory browser support is available"

    (LoadedFeatures includesKey: #RefactoryBrowser) ifFalse:[ 
        "/ Called for the very first time

        #(
            #'stx:goodies/refactoryBrowser/browser'
            #'stx:goodies/refactoryBrowser/changes'
            #'stx:goodies/refactoryBrowser/helpers'
            #'stx:goodies/refactoryBrowser/lint'
            #'stx:goodies/refactoryBrowser/parser'
            #'stx:goodies/refactoryBrowser/refactoring'
        ) do:[:each | 
            (ProjectDefinition definitionClassForPackage: each) isNil ifTrue:[
                | loaded |

                loaded := [ Smalltalk loadPackage: each ] on: PackageLoadError do:[ false ].
                loaded ifFalse:[ 
                    LoadedFeatures at: #RefactoryBrowser put: false.
                    ^ false.
                ].
            ]
        ].
        LoadedFeatures at: #RefactoryBrowser put: true.
        ^ true
    ].
    ^ LoadedFeatures includesKey: #RefactoryBrowser

    "
    ConfigurableFeatures includesFeature: #RefactoryBrowser    
    "

    "Created: / 01-12-2014 / 11:16:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

hasSCMSupportEnabledFor:aSourceCodeManagerClassName
    |scm|

    "/ use Smalltalk-at to trick the dependency/prerequisite generator
    scm := Smalltalk at:aSourceCodeManagerClassName ifAbsent:nil.

    ^ scm notNil
        and:[ scm isLoaded 
        and:[ scm shownInBrowserMenus ]]

    "Created: / 18-01-2012 / 10:55:58 / cg"
!

hasSubversionSupport
    "/ use Smalltalk-at to trick the dependency/prerequisite generator
    ^ (Smalltalk at: #'SVNSourceCodeManager' ifAbsent:nil) notNil

    "
     ConfigurableFeatures hasSubversionSupport
    "

    "Created: / 07-09-2011 / 10:40:40 / cg"
    "Modified: / 13-03-2012 / 17:19:13 / Jan Vrany <jan.vrany.fit.cvut.cz>"
!

hasSubversionSupportEnabled
    ^ self hasSCMSupportEnabledFor:#'SVNSourceCodeManager'

    "Created: / 07-09-2011 / 10:41:33 / cg"
! !

!ConfigurableFeatures class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/libbasic/ConfigurableFeatures.st,v 1.11 2014-12-01 11:24:54 vrany Exp $'
!

version_CVS
    ^ '$Header: /cvs/stx/stx/libbasic/ConfigurableFeatures.st,v 1.11 2014-12-01 11:24:54 vrany Exp $'
! !


ConfigurableFeatures initialize!