feenkcom / sparta Goto Github PK
View Code? Open in Web Editor NEWSparta is a canvas on top of Skia.
Home Page: https://gtoolkit.com
License: MIT License
Sparta is a canvas on top of Skia.
Home Page: https://gtoolkit.com
License: MIT License
Links in this list are broken - https://github.com/feenkcom/Sparta#documentation
Probably the SkiaLibrary>>install method should be updated to reflect changes in the resources URL.
Trying to install in a clean Pharo 8 under Windows:
Metacello new
baseline: 'SpartaSkia';
repository: 'github://feenkcom/sparta/src';
load.
and checking in the Transcript with:
SkiaLibrary uniqueInstance detectLibrary: 'libSkia.dll'.
SkiaLibrary install.
Reports:
Downloading https://dl.feenk.com/Skia/windows/development/i386/libSkia.dll to File @ C:\.....\Sparta\pharo-local\gtoolkit-installer\libSkia_i386.dll ...
Progress
2020-08-25 15:50:50 013 Connection Established dl.feenk.com:443 54.93.131.205 760ms
2020-08-25 15:50:50 014 Request Written a ZnRequest(GET /Skia/windows/development/i386/libSkia.dll) 2ms
2020-08-25 15:50:50 015 Response Read a ZnResponse(404 Not Found text/html 178B) 239ms
2020-08-25 15:50:50 016 GET /Skia/windows/development/i386/libSkia.dll 404 178B 241ms Done!
The full error at the end.
It seems that every time bloc is installed into new image, Moz2D deletes/replaces libMoz2D.dll
in the VM's folder.
This fails on Windows, when you have another image opened that uses the same VM, because then Windows will lock the file. You cannot delete locked/used file, so the whole installation fails.
Note that the backend was still set to Moz2D even after the failure and running any bloc-related code resulted in segfault (in case of an error, I would expect that it automatically falls back onto cairo).
AssertionFailure: File @ C:\Users\uhnak\Documents\Pharo\vms\61\libMoz2D.dll must not exist
Unknown error... Please copy the whole text
Pharo 6.0
Latest update: #60528
C:\Users\uhnak\Documents\Pharo\vms\61\Pharo.exe
CoInterpreter VMMaker.oscog-eem.2254 uuid: 4f2c2cce-f4a2-469a-93f1-97ed941df0ad Jul 20 2017
StackToRegisterMappingCogit VMMaker.oscog-eem.2252 uuid: 2f3e9b0e-ecd3-4adf-b092-cce2e2587a5c Jul 20 2017
VM: 201707201942 https://github.com/OpenSmalltalk/opensmalltalk-vm.git $ Date: Thu Jul 20 12:42:21 2017 -0700 $ Plugins: 201707201942 https://github.com/OpenSmalltalk/opensmalltalk-vm.git $
Win32 built on Jul 20 2017 20:21:26 GMT Compiler: 5.4.0
VMMaker versionString VM: 201707201942 https://github.com/OpenSmalltalk/opensmalltalk-vm.git $ Date: Thu Jul 20 12:42:21 2017 -0700 $ Plugins: 201707201942 https://github.com/OpenSmalltalk/opensmalltalk-vm.git $
CoInterpreter VMMaker.oscog-eem.2254 uuid: 4f2c2cce-f4a2-469a-93f1-97ed941df0ad Jul 20 2017
StackToRegisterMappingCogit VMMaker.oscog-eem.2252 uuid: 2f3e9b0e-ecd3-4adf-b092-cce2e2587a5c Jul 20 2017
an OrderedCollection(MozInstallerInstallStep(Object)>>assert:description: MozInstallerInstallStep>>ensureNotExist: MozInstallerInstallStep>>doActionIn: MozInstallerInstallStep(MozInstallerStep)>>runIn: [ aStep runIn: self ] in [ [ aStep runIn: self ]
on: MozInstallerError
do: [ :anError | ^ aStep handleError: anError in: self ] ] in [ :aStep |
[ [ aStep runIn: self ]
on: MozInstallerError
do: [ :anError | ^ aStep handleError: anError in: self ] ]
on: Error
do: [ :anError |
^ aStep
handleError: (MozInstallerUnhandledError new error: anError)
in: self ] ] in MozInstaller>>run BlockClosure>>on:do: [ [ aStep runIn: self ]
on: MozInstallerError
do: [ :anError | ^ aStep handleError: anError in: self ] ] in [ :aStep |
[ [ aStep runIn: self ]
on: MozInstallerError
do: [ :anError | ^ aStep handleError: anError in: self ] ]
on: Error
do: [ :anError |
^ aStep
handleError: (MozInstallerUnhandledError new error: anError)
in: self ] ] in MozInstaller>>run BlockClosure>>on:do: [ :aStep |
[ [ aStep runIn: self ]
on: MozInstallerError
do: [ :anError | ^ aStep handleError: anError in: self ] ]
on: Error
do: [ :anError |
^ aStep
handleError: (MozInstallerUnhandledError new error: anError)
in: self ] ] in MozInstaller>>run OrderedCollection>>do: MozInstaller>>run MozLibraryPlatform class>>install MozLibraryPlatform class>>mozPostLoad [ :each | each method methodClass baseClass perform: each method selector ] in BaselineOfSparta>>postLoadSparta: OrderedCollection>>do: BaselineOfSparta>>postLoadSparta: [ :aLoader | self project configuration perform: selector with: aLoader ] in MetacelloMCVersionSpec(MetacelloSpec)>>doItBlock: BlockClosure>>valueWithPossibleArgs: [ block
valueWithPossibleArgs:
(Array with: aPostloadDirective loader with: aPostloadDirective spec) ] in MetacelloLinearLoadDirective(MetacelloVersionLoadDirective)>>loadPostloadDirective: MetacelloPostLoadDirective(MetacelloPrePostLoadDirective)>>evaluateSupplyingAnswers: MetacelloLinearLoadDirective(MetacelloVersionLoadDirective)>>loadPostloadDirective: MetacelloPostLoadDirective>>loadUsing:gofer: [ :directive | directive loadUsing: aLoaderDirective gofer: aGofer ] in MetacelloLinearLoadDirective(MetacelloVersionLoadDirective)>>loadLinearLoadDirective:gofer: OrderedCollection>>do: MetacelloLinearLoadDirective(MetacelloVersionLoadDirective)>>loadLinearLoadDirective:gofer: MetacelloLinearLoadDirective>>loadUsing:gofer: MetacelloLinearLoadDirective(MetacelloVersionLoadDirective)>>loadWithPolicy: MetacelloLoaderPolicy>>load MetacelloFetchingMCSpecLoader>>doLoad [ fetchLoader doLoad ] in [ | fetchLoader |
fetchLoader := self
fetchRequiredFromArray: (self defaultPackageNamesToLoad: anArray).
MetacelloPlatform current
do: [ fetchLoader doLoad ]
displaying: 'Loading ' , displayString.
Transcript
cr;
show: '...finished ' , self versionNumber printString.
^ fetchLoader ] in MetacelloMCVersion>>doLoadRequiredFromArray: [ :bar |
bar value: 1.
aBlock value.
bar value: 2 ] in IceMetacelloPharoPlatform(MetacelloPharoCommonPlatform)>>do:displaying: BlockClosure>>cull: [ ^ block cull: self ] in [ self prepareForRunning.
CurrentJob value: self during: [ ^ block cull: self ] ] in Job>>run [ activeProcess psValueAt: index put: anObject.
aBlock value ] in CurrentJob(DynamicVariable)>>value:during: BlockClosure>>ensure: CurrentJob(DynamicVariable)>>value:during: CurrentJob class(DynamicVariable class)>>value:during: [ self prepareForRunning.
CurrentJob value: self during: [ ^ block cull: self ] ] in Job>>run BlockClosure>>ensure: Job>>run FDMorphicUIManager(UIManager)>>displayProgress:from:to:during: ByteString(String)>>displayProgressFrom:to:during: IceMetacelloPharoPlatform(MetacelloPharoCommonPlatform)>>do:displaying: [ | fetchLoader |
fetchLoader := self
fetchRequiredFromArray: (self defaultPackageNamesToLoad: anArray).
MetacelloPlatform current
do: [ fetchLoader doLoad ]
displaying: 'Loading ' , displayString.
Transcript
cr;
show: '...finished ' , self versionNumber printString.
^ fetchLoader ] in MetacelloMCVersion>>doLoadRequiredFromArray: BlockClosure>>ensure: MetacelloMCVersion>>doLoadRequiredFromArray: ByteSymbol(String)>>loadRequiredForMetacelloMCVersion: MetacelloMCVersion>>load: [ | version loadedSpec |
self setDefaultsAndValidateProjectSpec.
[ loadedSpec := (self lookupProjectSpecFor: self projectSpec) copy ]
on: MetacelloAllowProjectDowngrade , MetacelloAllowProjectUpgrade
do:
[ :ex | ex handleOnDownGrade: onDownGradeBlock onUpgrade: onUpgradeBlock ].
version := loadedSpec versionForScriptEngine: self.
self
root:
(required isEmpty
ifTrue: [ version load ]
ifFalse: [ version load: required ]) loadDirective.
loadedSpec loads: required.
MetacelloProjectRegistration
registrationForProjectSpec: loadedSpec
ifAbsent: [ :new |
new
loadedInImage: true;
registerProject ]
ifPresent: [ :existing :new |
existing
copyOnWrite: [ :existingCopy |
existingCopy
loadedInImage: true;
merge: new ] ] ] in [ self
handleNotificationsForAction: [ | version loadedSpec |
self setDefaultsAndValidateProjectSpec.
[ loadedSpec := (self lookupProjectSpecFor: self projectSpec) copy ]
on: MetacelloAllowProjectDowngrade , MetacelloAllowProjectUpgrade
do:
[ :ex | ex handleOnDownGrade: onDownGradeBlock onUpgrade: onUpgradeBlock ].
version := loadedSpec versionForScriptEngine: self.
self
root:
(required isEmpty
ifTrue: [ version load ]
ifFalse: [ version load: required ]) loadDirective.
loadedSpec loads: required.
MetacelloProjectRegistration
registrationForProjectSpec: loadedSpec
ifAbsent: [ :new |
new
loadedInImage: true;
registerProject ]
ifPresent: [ :existing :new |
existing
copyOnWrite: [ :existingCopy |
existingCopy
loadedInImage: true;
merge: new ] ] ] ] in MetacelloScriptEngine>>load:onProjectDownGrade:onProjectUpgrade: BlockClosure>>on:do: [ actionBlock
on:
MetacelloLookupProjectSpec , MetacelloLookupProjectSpecForLoad
, MetacelloProjectSpecLoadedNotification
, MetacelloScriptEnsureProjectLoadedForDevelopment
, MetacelloLookupBaselineSpecForEnsureLoad
do:
[ :ex | "lookup and registration handlers need to be innermost set of handlers ...they may throw option notifications" ex handleResolutionFor: self ] ] in [ [ actionBlock
on:
MetacelloLookupProjectSpec , MetacelloLookupProjectSpecForLoad
, MetacelloProjectSpecLoadedNotification
, MetacelloScriptEnsureProjectLoadedForDevelopment
, MetacelloLookupBaselineSpecForEnsureLoad
do:
[ :ex | "lookup and registration handlers need to be innermost set of handlers ...they may throw option notifications" ex handleResolutionFor: self ] ]
on:
MetacelloAllowProjectDowngrade , MetacelloAllowProjectUpgrade
, MetacelloAllowConflictingProjectUpgrade
do:
[ :ex | "option handlers need to be outermost set of handlers ... last line of defense before users are involved" ex handleResolutionFor: self ] ] in [ [ [ actionBlock
on:
MetacelloLookupProjectSpec , MetacelloLookupProjectSpecForLoad
, MetacelloProjectSpecLoadedNotification
, MetacelloScriptEnsureProjectLoadedForDevelopment
, MetacelloLookupBaselineSpecForEnsureLoad
do:
[ :ex | "lookup and registration handlers need to be innermost set of handlers ...they may throw option notifications" ex handleResolutionFor: self ] ]
on:
MetacelloAllowProjectDowngrade , MetacelloAllowProjectUpgrade
, MetacelloAllowConflictingProjectUpgrade
do:
[ :ex | "option handlers need to be outermost set of handlers ... last line of defense before users are involved" ex handleResolutionFor: self ] ]
on: MetacelloAllowLockedProjectChange
do:
[ :ex | "MetacelloAllowLockedProjectChange need to be outermost handler ... since it is signaled from second line of handlers" ex handleResolutionFor: self ] ] in MetacelloScriptEngine>>handleNotificationsForAction: BlockClosure>>on:do: [ [ actionBlock
on:
MetacelloLookupProjectSpec , MetacelloLookupProjectSpecForLoad
, MetacelloProjectSpecLoadedNotification
, MetacelloScriptEnsureProjectLoadedForDevelopment
, MetacelloLookupBaselineSpecForEnsureLoad
do:
[ :ex | "lookup and registration handlers need to be innermost set of handlers ...they may throw option notifications" ex handleResolutionFor: self ] ]
on:
MetacelloAllowProjectDowngrade , MetacelloAllowProjectUpgrade
, MetacelloAllowConflictingProjectUpgrade
do:
[ :ex | "option handlers need to be outermost set of handlers ... last line of defense before users are involved" ex handleResolutionFor: self ] ] in [ [ [ actionBlock
on:
MetacelloLookupProjectSpec , MetacelloLookupProjectSpecForLoad
, MetacelloProjectSpecLoadedNotification
, MetacelloScriptEnsureProjectLoadedForDevelopment
, MetacelloLookupBaselineSpecForEnsureLoad
do:
[ :ex | "lookup and registration handlers need to be innermost set of handlers ...they may throw option notifications" ex handleResolutionFor: self ] ]
on:
MetacelloAllowProjectDowngrade , MetacelloAllowProjectUpgrade
, MetacelloAllowConflictingProjectUpgrade
do:
[ :ex | "option handlers need to be outermost set of handlers ... last line of defense before users are involved" ex handleResolutionFor: self ] ]
on: MetacelloAllowLockedProjectChange
do:
[ :ex | "MetacelloAllowLockedProjectChange need to be outermost handler ... since it is signaled from second line of handlers" ex handleResolutionFor: self ] ] in MetacelloScriptEngine>>handleNotificationsForAction: BlockClosure>>on:do: [ [ [ actionBlock
on:
MetacelloLookupProjectSpec , MetacelloLookupProjectSpecForLoad
, MetacelloProjectSpecLoadedNotification
, MetacelloScriptEnsureProjectLoadedForDevelopment
, MetacelloLookupBaselineSpecForEnsureLoad
do:
[ :ex | "lookup and registration handlers need to be innermost set of handlers ...they may throw option notifications" ex handleResolutionFor: self ] ]
on:
MetacelloAllowProjectDowngrade , MetacelloAllowProjectUpgrade
, MetacelloAllowConflictingProjectUpgrade
do:
[ :ex | "option handlers need to be outermost set of handlers ... last line of defense before users are involved" ex handleResolutionFor: self ] ]
on: MetacelloAllowLockedProjectChange
do:
[ :ex | "MetacelloAllowLockedProjectChange need to be outermost handler ... since it is signaled from second line of handlers" ex handleResolutionFor: self ] ] in MetacelloScriptEngine>>handleNotificationsForAction: BlockClosure>>on:do: MetacelloScriptEngine>>handleNotificationsForAction: [ self
handleNotificationsForAction: [ | version loadedSpec |
self setDefaultsAndValidateProjectSpec.
[ loadedSpec := (self lookupProjectSpecFor: self projectSpec) copy ]
on: MetacelloAllowProjectDowngrade , MetacelloAllowProjectUpgrade
do:
[ :ex | ex handleOnDownGrade: onDownGradeBlock onUpgrade: onUpgradeBlock ].
version := loadedSpec versionForScriptEngine: self.
self
root:
(required isEmpty
ifTrue: [ version load ]
ifFalse: [ version load: required ]) loadDirective.
loadedSpec loads: required.
MetacelloProjectRegistration
registrationForProjectSpec: loadedSpec
ifAbsent: [ :new |
new
loadedInImage: true;
registerProject ]
ifPresent: [ :existing :new |
existing
copyOnWrite: [ :existingCopy |
existingCopy
loadedInImage: true;
merge: new ] ] ] ] in MetacelloScriptEngine>>load:onProjectDownGrade:onProjectUpgrade: BlockClosure>>ensure: MetacelloProjectRegistration class>>copyRegistryRestoreOnErrorWhile: MetacelloScriptEngine>>load:onProjectDownGrade:onProjectUpgrade: MetacelloScriptEngine>>load: [ :projectSpec |
| engine |
engine := MetacelloScriptEngine new
options: self options copy;
projectSpec: projectSpec;
yourself.
engine perform: actionArg key withArguments: actionArg value.
engine root ifNotNil: [ :root | self roots add: root ] ] in MetacelloScriptApiExecutor(MetacelloScriptExecutor)>>execute: [ :projectSpec |
projectSpec
ifNotNil: [ projectSpecBlock
value: (self applyArgsToProjectSpec: projectSpec copy) ] ] in MetacelloScriptApiExecutor>>executeString:do: Array(SequenceableCollection)>>do: MetacelloScriptApiExecutor>>executeString:do: ByteString(String)>>execute:against: MetacelloScriptApiExecutor(MetacelloScriptExecutor)>>execute: Metacello>>execute:args: Metacello>>load: BaselineOfBloc>>postLoadSparta: [ :aLoader | self project configuration perform: selector with: aLoader ] in MetacelloMCBaselineOfProjectSpec(MetacelloSpec)>>doItBlock: BlockClosure>>valueWithPossibleArgs: [ block
valueWithPossibleArgs:
(Array with: aPostloadDirective loader with: aPostloadDirective spec) ] in MetacelloLinearLoadDirective(MetacelloVersionLoadDirective)>>loadPostloadDirective: MetacelloPostLoadDirective(MetacelloPrePostLoadDirective)>>evaluateSupplyingAnswers: MetacelloLinearLoadDirective(MetacelloVersionLoadDirective)>>loadPostloadDirective: MetacelloPostLoadDirective>>loadUsing:gofer: [ :directive | directive loadUsing: aLoaderDirective gofer: aGofer ] in MetacelloLinearLoadDirective(MetacelloVersionLoadDirective)>>loadLinearLoadDirective:gofer: OrderedCollection>>do: MetacelloLinearLoadDirective(MetacelloVersionLoadDirective)>>loadLinearLoadDirective:gofer: MetacelloLinearLoadDirective>>loadUsing:gofer: [ :directive | directive loadUsing: aLoaderDirective gofer: aGofer ] in MetacelloLinearLoadDirective(MetacelloVersionLoadDirective)>>loadLinearLoadDirective:gofer: OrderedCollection>>do: MetacelloLinearLoadDirective(MetacelloVersionLoadDirective)>>loadLinearLoadDirective:gofer: MetacelloLinearLoadDirective>>loadUsing:gofer: [ :directive | directive loadUsing: aLoaderDirective gofer: aGofer ] in MetacelloLinearLoadDirective(MetacelloVersionLoadDirective)>>loadLinearLoadDirective:gofer: OrderedCollection>>do: MetacelloLinearLoadDirective(MetacelloVersionLoadDirective)>>loadLinearLoadDirective:gofer: MetacelloLinearLoadDirective>>loadUsing:gofer: MetacelloLinearLoadDirective(MetacelloVersionLoadDirective)>>loadWithPolicy: MetacelloLoaderPolicy>>load MetacelloFetchingMCSpecLoader>>doLoad [ fetchLoader doLoad ] in [ | fetchLoader |
fetchLoader := self
fetchRequiredFromArray: (self defaultPackageNamesToLoad: anArray).
MetacelloPlatform current
do: [ fetchLoader doLoad ]
displaying: 'Loading ' , displayString.
Transcript
cr;
show: '...finished ' , self versionNumber printString.
^ fetchLoader ] in MetacelloMCVersion>>doLoadRequiredFromArray: [ :bar |
bar value: 1.
aBlock value.
bar value: 2 ] in IceMetacelloPharoPlatform(MetacelloPharoCommonPlatform)>>do:displaying: BlockClosure>>cull: [ ^ block cull: self ] in [ self prepareForRunning.
CurrentJob value: self during: [ ^ block cull: self ] ] in Job>>run [ activeProcess psValueAt: index put: anObject.
aBlock value ] in CurrentJob(DynamicVariable)>>value:during: BlockClosure>>ensure: CurrentJob(DynamicVariable)>>value:during: CurrentJob class(DynamicVariable class)>>value:during: [ self prepareForRunning.
CurrentJob value: self during: [ ^ block cull: self ] ] in Job>>run BlockClosure>>ensure: Job>>run FDMorphicUIManager(UIManager)>>displayProgress:from:to:during: ByteString(String)>>displayProgressFrom:to:during: IceMetacelloPharoPlatform(MetacelloPharoCommonPlatform)>>do:displaying: [ | fetchLoader |
fetchLoader := self
fetchRequiredFromArray: (self defaultPackageNamesToLoad: anArray).
MetacelloPlatform current
do: [ fetchLoader doLoad ]
displaying: 'Loading ' , displayString.
Transcript
cr;
show: '...finished ' , self versionNumber printString.
^ fetchLoader ] in MetacelloMCVersion>>doLoadRequiredFromArray: BlockClosure>>ensure: MetacelloMCVersion>>doLoadRequiredFromArray: MetacelloMCVersion>>load [ | version loadedSpec |
self setDefaultsAndValidateProjectSpec.
[ loadedSpec := (self lookupProjectSpecFor: self projectSpec) copy ]
on: MetacelloAllowProjectDowngrade , MetacelloAllowProjectUpgrade
do:
[ :ex | ex handleOnDownGrade: onDownGradeBlock onUpgrade: onUpgradeBlock ].
version := loadedSpec versionForScriptEngine: self.
self
root:
(required isEmpty
ifTrue: [ version load ]
ifFalse: [ version load: required ]) loadDirective.
loadedSpec loads: required.
MetacelloProjectRegistration
registrationForProjectSpec: loadedSpec
ifAbsent: [ :new |
new
loadedInImage: true;
registerProject ]
ifPresent: [ :existing :new |
existing
copyOnWrite: [ :existingCopy |
existingCopy
loadedInImage: true;
merge: new ] ] ] in [ self
handleNotificationsForAction: [ | version loadedSpec |
self setDefaultsAndValidateProjectSpec.
[ loadedSpec := (self lookupProjectSpecFor: self projectSpec) copy ]
on: MetacelloAllowProjectDowngrade , MetacelloAllowProjectUpgrade
do:
[ :ex | ex handleOnDownGrade: onDownGradeBlock onUpgrade: onUpgradeBlock ].
version := loadedSpec versionForScriptEngine: self.
self
root:
(required isEmpty
ifTrue: [ version load ]
ifFalse: [ version load: required ]) loadDirective.
loadedSpec loads: required.
MetacelloProjectRegistration
registrationForProjectSpec: loadedSpec
ifAbsent: [ :new |
new
loadedInImage: true;
registerProject ]
ifPresent: [ :existing :new |
existing
copyOnWrite: [ :existingCopy |
existingCopy
loadedInImage: true;
merge: new ] ] ] ] in MetacelloScriptEngine>>load:onProjectDownGrade:onProjectUpgrade: BlockClosure>>on:do: [ actionBlock
on:
MetacelloLookupProjectSpec , MetacelloLookupProjectSpecForLoad
, MetacelloProjectSpecLoadedNotification
, MetacelloScriptEnsureProjectLoadedForDevelopment
, MetacelloLookupBaselineSpecForEnsureLoad
do:
[ :ex | "lookup and registration handlers need to be innermost set of handlers ...they may throw option notifications" ex handleResolutionFor: self ] ] in [ [ actionBlock
on:
MetacelloLookupProjectSpec , MetacelloLookupProjectSpecForLoad
, MetacelloProjectSpecLoadedNotification
, MetacelloScriptEnsureProjectLoadedForDevelopment
, MetacelloLookupBaselineSpecForEnsureLoad
do:
[ :ex | "lookup and registration handlers need to be innermost set of handlers ...they may throw option notifications" ex handleResolutionFor: self ] ]
on:
MetacelloAllowProjectDowngrade , MetacelloAllowProjectUpgrade
, MetacelloAllowConflictingProjectUpgrade
do:
[ :ex | "option handlers need to be outermost set of handlers ... last line of defense before users are involved" ex handleResolutionFor: self ] ] in [ [ [ actionBlock
on:
MetacelloLookupProjectSpec , MetacelloLookupProjectSpecForLoad
, MetacelloProjectSpecLoadedNotification
, MetacelloScriptEnsureProjectLoadedForDevelopment
, MetacelloLookupBaselineSpecForEnsureLoad
do:
[ :ex | "lookup and registration handlers need to be innermost set of handlers ...they may throw option notifications" ex handleResolutionFor: self ] ]
on:
MetacelloAllowProjectDowngrade , MetacelloAllowProjectUpgrade
, MetacelloAllowConflictingProjectUpgrade
do:
[ :ex | "option handlers need to be outermost set of handlers ... last line of defense before users are involved" ex handleResolutionFor: self ] ]
on: MetacelloAllowLockedProjectChange
do:
[ :ex | "MetacelloAllowLockedProjectChange need to be outermost handler ... since it is signaled from second line of handlers" ex handleResolutionFor: self ] ] in MetacelloScriptEngine>>handleNotificationsForAction: BlockClosure>>on:do: [ [ actionBlock
on:
MetacelloLookupProjectSpec , MetacelloLookupProjectSpecForLoad
, MetacelloProjectSpecLoadedNotification
, MetacelloScriptEnsureProjectLoadedForDevelopment
, MetacelloLookupBaselineSpecForEnsureLoad
do:
[ :ex | "lookup and registration handlers need to be innermost set of handlers ...they may throw option notifications" ex handleResolutionFor: self ] ]
on:
MetacelloAllowProjectDowngrade , MetacelloAllowProjectUpgrade
, MetacelloAllowConflictingProjectUpgrade
do:
[ :ex | "option handlers need to be outermost set of handlers ... last line of defense before users are involved" ex handleResolutionFor: self ] ] in [ [ [ actionBlock
on:
MetacelloLookupProjectSpec , MetacelloLookupProjectSpecForLoad
, MetacelloProjectSpecLoadedNotification
, MetacelloScriptEnsureProjectLoadedForDevelopment
, MetacelloLookupBaselineSpecForEnsureLoad
do:
[ :ex | "lookup and registration handlers need to be innermost set of handlers ...they may throw option notifications" ex handleResolutionFor: self ] ]
on:
MetacelloAllowProjectDowngrade , MetacelloAllowProjectUpgrade
, MetacelloAllowConflictingProjectUpgrade
do:
[ :ex | "option handlers need to be outermost set of handlers ... last line of defense before users are involved" ex handleResolutionFor: self ] ]
on: MetacelloAllowLockedProjectChange
do:
[ :ex | "MetacelloAllowLockedProjectChange need to be outermost handler ... since it is signaled from second line of handlers" ex handleResolutionFor: self ] ] in MetacelloScriptEngine>>handleNotificationsForAction: BlockClosure>>on:do: [ [ [ actionBlock
on:
MetacelloLookupProjectSpec , MetacelloLookupProjectSpecForLoad
, MetacelloProjectSpecLoadedNotification
, MetacelloScriptEnsureProjectLoadedForDevelopment
, MetacelloLookupBaselineSpecForEnsureLoad
do:
[ :ex | "lookup and registration handlers need to be innermost set of handlers ...they may throw option notifications" ex handleResolutionFor: self ] ]
on:
MetacelloAllowProjectDowngrade , MetacelloAllowProjectUpgrade
, MetacelloAllowConflictingProjectUpgrade
do:
[ :ex | "option handlers need to be outermost set of handlers ... last line of defense before users are involved" ex handleResolutionFor: self ] ]
on: MetacelloAllowLockedProjectChange
do:
[ :ex | "MetacelloAllowLockedProjectChange need to be outermost handler ... since it is signaled from second line of handlers" ex handleResolutionFor: self ] ] in MetacelloScriptEngine>>handleNotificationsForAction: BlockClosure>>on:do: MetacelloScriptEngine>>handleNotificationsForAction: [ self
handleNotificationsForAction: [ | version loadedSpec |
self setDefaultsAndValidateProjectSpec.
[ loadedSpec := (self lookupProjectSpecFor: self projectSpec) copy ]
on: MetacelloAllowProjectDowngrade , MetacelloAllowProjectUpgrade
do:
[ :ex | ex handleOnDownGrade: onDownGradeBlock onUpgrade: onUpgradeBlock ].
version := loadedSpec versionForScriptEngine: self.
self
root:
(required isEmpty
ifTrue: [ version load ]
ifFalse: [ version load: required ]) loadDirective.
loadedSpec loads: required.
MetacelloProjectRegistration
registrationForProjectSpec: loadedSpec
ifAbsent: [ :new |
new
loadedInImage: true;
registerProject ]
ifPresent: [ :existing :new |
existing
copyOnWrite: [ :existingCopy |
existingCopy
loadedInImage: true;
merge: new ] ] ] ] in MetacelloScriptEngine>>load:onProjectDownGrade:onProjectUpgrade: BlockClosure>>ensure: MetacelloProjectRegistration class>>copyRegistryRestoreOnErrorWhile: MetacelloScriptEngine>>load:onProjectDownGrade:onProjectUpgrade: MetacelloScriptEngine>>load: [ :projectSpec |
| engine |
engine := MetacelloScriptEngine new
options: self options copy;
projectSpec: projectSpec;
yourself.
engine perform: actionArg key withArguments: actionArg value.
engine root ifNotNil: [ :root | self roots add: root ] ] in MetacelloScriptApiExecutor(MetacelloScriptExecutor)>>execute: [ :projectSpec |
projectSpec
ifNotNil: [ projectSpecBlock
value: (self applyArgsToProjectSpec: projectSpec copy) ] ] in MetacelloScriptApiExecutor>>executeString:do: Array(SequenceableCollection)>>do: MetacelloScriptApiExecutor>>executeString:do: ByteString(String)>>execute:against: MetacelloScriptApiExecutor(MetacelloScriptExecutor)>>execute: Metacello>>execute:args: Metacello>>load UndefinedObject>>DoIt OpalCompiler>>evaluate RubSmalltalkEditor>>evaluate:andDo: RubSmalltalkEditor>>highlightEvaluateAndDo: [ textMorph textArea editor highlightEvaluateAndDo: ann action.
textMorph shoutStyler style: textMorph text ] in [ textMorph textArea
handleEdit: [ textMorph textArea editor highlightEvaluateAndDo: ann action.
textMorph shoutStyler style: textMorph text ] ] in GLMMorphicPharoScriptRenderer(GLMMorphicPharoCodeRenderer)>>actOnHighlightAndEvaluate: RubEditingArea(RubAbstractTextArea)>>handleEdit: [ textMorph textArea
handleEdit: [ textMorph textArea editor highlightEvaluateAndDo: ann action.
textMorph shoutStyler style: textMorph text ] ] in GLMMorphicPharoScriptRenderer(GLMMorphicPharoCodeRenderer)>>actOnHighlightAndEvaluate: WorldState>>runStepMethodsIn: WorldMorph>>runStepMethods WorldState>>doOneCycleNowFor: WorldState>>doOneCycleFor: WorldMorph>>doOneCycle WorldMorph class>>doOneCycle [ [ WorldMorph doOneCycle.
Processor yield.
false ] whileFalse: [ ] ] in MorphicUIManager>>spawnNewProcess [ self value.
Processor terminateActive ] in BlockClosure>>newProcess)
MozServices class>primShutdownServices
^ self ffiCall: #(void moz2d_services_shutdown())
Does not work if the external module was not found, and stops save/quit
Warning is not allowed in shutdown.
Hello,
I'm on a Debian 10 64 bits (1) and get this message in terminal:
[Skia] Could not init env logger
[Skia] Could not init icu
In the image, I see that skia binary file is detected (SkiaLibrary uniqueInstance unixModuleName asFileReference exists
is true).
But the Skia option is not available in the Pharo System Settings because SkiaLibrary uniqueInstance hasModule
is false.
I looked a bit how GtLibraryInstaller downloads the library, but before digging more I prefer to ask: Is linux 64 bits supported?
(1): uname shows: "4.19.0-13-amd64 #1 SMP Debian 4.19.160-2 (2020-11-28) x86_64 GNU/Linux"
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.