From 9b472a4a3e9b2be4639f8e242cad3f2960856abc Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 3 Nov 2025 17:18:10 +0100 Subject: [PATCH 1/2] Try to move Unicode loading later in the bootstrap --- .../01-initialization/02-initUnicode.st | 13 ----------- bootstrap/scripts/4-build.sh | 6 +---- .../scripts/generateKernelHermesFiles.st | 2 +- .../BaselineOfPharoBootstrap.class.st | 12 ---------- .../BaselineOfUnifiedFFI.class.st | 22 +++++++++---------- src/Kernel/ManifestKernel.class.st | 5 ----- src/Multilingual-Encodings/Unicode.class.st | 22 +++++++++++++++++-- .../SystemDependenciesTest.class.st | 7 +++--- 8 files changed, 36 insertions(+), 53 deletions(-) delete mode 100644 bootstrap/scripts/01-initialization/02-initUnicode.st diff --git a/bootstrap/scripts/01-initialization/02-initUnicode.st b/bootstrap/scripts/01-initialization/02-initUnicode.st deleted file mode 100644 index 3b138f1dba6..00000000000 --- a/bootstrap/scripts/01-initialization/02-initUnicode.st +++ /dev/null @@ -1,13 +0,0 @@ - -| dataFilePath caseFolding unicodeData| - -unicodeData := CommandLineArguments new arguments last , 'UnicodeData.txt'. -caseFolding := CommandLineArguments new arguments last , 'CaseFolding-8.0.0.txt'. - -Unicode initializeTagConstants. - -Unicode - parseUnicodeDataFrom: (ZnCharacterReadStream on: (File named: unicodeData) readStream encoding: 'utf8'); - parseCaseMappingFrom: (ZnCharacterReadStream on: (File named: caseFolding) readStream encoding: 'utf8'). - -Character characterSet: Unicode. \ No newline at end of file diff --git a/bootstrap/scripts/4-build.sh b/bootstrap/scripts/4-build.sh index bac966d7ec6..f48e2ec2b44 100755 --- a/bootstrap/scripts/4-build.sh +++ b/bootstrap/scripts/4-build.sh @@ -138,7 +138,7 @@ ${VM} "${COMPILER_IMAGE_NAME}.image" # I have to run once the image so the next echo $(date -u) "[Compiler] Adding more Kernel packages" ${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" perform --save BasicHermesTool load: --as-array Clap-Core.hermes Clap-Commands-Pharo.hermes Hermes-Extensions.hermes -${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" loadHermes Math-Operations-Extensions.hermes Debugging-Core.hermes System-NumberPrinting.hermes System-Time.hermes Multilingual-Encodings.hermes ReflectionMirrors-Primitives.hermes NumberParser.hermes --save --no-fail-on-undeclared +${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" loadHermes Math-Operations-Extensions.hermes Debugging-Core.hermes System-NumberPrinting.hermes System-Time.hermes ReflectionMirrors-Primitives.hermes NumberParser.hermes --save --no-fail-on-undeclared # Now that System-Time is loaded, we can initialize the version ${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" perform --save SystemVersion setMajor:minor:patch:suffix:build:commitHash: ${PHARO_MAJOR} ${PHARO_MINOR} ${PHARO_PATCH} ${PHARO_SUFFIX} ${BUILD_NUMBER} ${PHARO_COMMIT_HASH} @@ -154,10 +154,6 @@ echo $(date -u) "[Compiler] Installing compiler through Hermes" ${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" loadHermes UIManager.hermes Debugging-Utils.hermes OpalCompiler-Core.hermes Deprecation.hermes DebugInfo.hermes CodeImport.hermes CodeImport-Commands.hermes --save --no-fail-on-undeclared ${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" eval --save "SystemEnvironment deprecatedAliases: { #SystemDictionary }." # This line should be removed in Pharo 14 since it is for backward compatibility. ${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" st ${BOOTSTRAP_REPOSITORY}/bootstrap/scripts/01-initialization/01-init.st --no-source --save --quit - -echo $(date -u) "[Compiler] Initializing Unicode" -${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" st ${BOOTSTRAP_REPOSITORY}/bootstrap/scripts/01-initialization/02-initUnicode.st --no-source --save --quit "${BOOTSTRAP_REPOSITORY}/resources/unicode/" - ${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" loadHermes Random-Core.hermes System-Hashing.hermes Network-UUID.hermes FileSystem-Path.hermes FileSystem-Core.hermes FileSystem-Disk.hermes --save --no-fail-on-undeclared zip "${COMPILER_IMAGE_NAME}.zip" "${COMPILER_IMAGE_NAME}.image" diff --git a/bootstrap/scripts/generateKernelHermesFiles.st b/bootstrap/scripts/generateKernelHermesFiles.st index 643b152a41b..1bf612cdbe8 100644 --- a/bootstrap/scripts/generateKernelHermesFiles.st +++ b/bootstrap/scripts/generateKernelHermesFiles.st @@ -11,7 +11,7 @@ repository := TonelRepository new Transcript nextPutAll: '[Hermes] - Generating Environment from repository'; cr. -toExport := #BaselineOfPharoBootstrap asClass compilerPackageNames, {'Hermes-Extensions'}, #BaselineOfPharoBootstrap asClass multilingualPackageNames, #BaselineOfPharoBootstrap asClass kernelAdditionalPackagesNames. +toExport := #BaselineOfPharoBootstrap asClass compilerPackageNames, {'Hermes-Extensions'}, #BaselineOfPharoBootstrap asClass kernelAdditionalPackagesNames. packageNames := #BaselineOfPharoBootstrap asClass kernelPackageNames, toExport. environment := repository asRing2EnvironmentWith: packageNames. diff --git a/src/BaselineOfPharoBootstrap/BaselineOfPharoBootstrap.class.st b/src/BaselineOfPharoBootstrap/BaselineOfPharoBootstrap.class.st index d2862b0de44..9f162af3d49 100644 --- a/src/BaselineOfPharoBootstrap/BaselineOfPharoBootstrap.class.st +++ b/src/BaselineOfPharoBootstrap/BaselineOfPharoBootstrap.class.st @@ -36,12 +36,6 @@ BaselineOfPharoBootstrap class >> kernelPackageNames [ ^ self packagesOfGroupNamed: #KernelGroup ] -{ #category : 'accessing' } -BaselineOfPharoBootstrap class >> multilingualPackageNames [ - - ^ self packagesOfGroupNamed: #MultilingualGroup -] - { #category : 'traversing' } BaselineOfPharoBootstrap class >> packagesRecursiveIn: aGroupName [ @@ -99,8 +93,6 @@ BaselineOfPharoBootstrap >> baseline: spec [ spec package: 'Math-Operations-Extensions'. - spec package: 'Multilingual-Encodings'. - spec package: 'Network-UUID'. spec package: 'Transcript-NonInteractive'. @@ -192,9 +184,6 @@ BaselineOfPharoBootstrap >> baseline: spec [ 'System-NumberPrinting'. }. - spec group: 'MultilingualGroup' with: { - 'Multilingual-Encodings' }. - spec group: 'CompilerGroup' with: { 'UIManager'. 'AST-Core'. @@ -218,7 +207,6 @@ BaselineOfPharoBootstrap >> baseline: spec [ spec group: 'ToLoadByHermes' with: { 'AdditionalPackages'. - 'MultilingualGroup'. 'CompilerGroup'. 'FileSystemGroup'. 'Hermes-Extensions'. diff --git a/src/BaselineOfUnifiedFFI/BaselineOfUnifiedFFI.class.st b/src/BaselineOfUnifiedFFI/BaselineOfUnifiedFFI.class.st index 2713f427fec..7a423cd3d7f 100644 --- a/src/BaselineOfUnifiedFFI/BaselineOfUnifiedFFI.class.st +++ b/src/BaselineOfUnifiedFFI/BaselineOfUnifiedFFI.class.st @@ -7,17 +7,17 @@ Class { { #category : 'baseline' } BaselineOfUnifiedFFI >> baseline: spec [ + - spec for: #common do: [ - spec - "unified ffi" - package: 'UnifiedFFI'; - package: 'UnifiedFFI-Tests' with: [ spec requires: #('UnifiedFFI') ]; - package: 'System-OSEnvironments' with: [ spec requires: #('UnifiedFFI') ]. - - spec - group: 'default' with: #('core'); - group: 'minimal' with: #('UnifiedFFI' 'System-OSEnvironments'); - group: 'core' with: #('minimal' 'UnifiedFFI-Tests') ] + spec + package: 'UnifiedFFI'; + package: 'UnifiedFFI-Tests' with: [ spec requires: #( 'UnifiedFFI' ) ]; + package: 'System-OSEnvironments' with: [ spec requires: #( 'UnifiedFFI' ) ]; + package: 'Multilingual-Encodings' with: [ spec requires: #( 'System-OSEnvironments' ) ]. "This package should probably not be here, but it depends on System-OSEnvironments " + + spec + group: 'default' with: #( 'core' ); + group: 'minimal' with: #( 'UnifiedFFI' 'System-OSEnvironments' 'Multilingual-Encodings'); + group: 'core' with: #( 'minimal' 'UnifiedFFI-Tests' ) ] ] diff --git a/src/Kernel/ManifestKernel.class.st b/src/Kernel/ManifestKernel.class.st index eb6844bd885..22c5573569c 100644 --- a/src/Kernel/ManifestKernel.class.st +++ b/src/Kernel/ManifestKernel.class.st @@ -39,8 +39,3 @@ ManifestKernel class >> ruleRBBadMessageRuleV1FalsePositive [ ManifestKernel class >> ruleRBRefersToClassRuleV1FalsePositive [ ^ #(#(#(#RGMethodDefinition #(#'Character class' #allByteCharacters #true)) #'2019-01-28T20:55:28.683846+01:00') ) ] - -{ #category : 'code-critics' } -ManifestKernel class >> ruleReDeadMethodV1FalsePositive [ - ^ #(#(#(#RGMethodDefinition #(#'Character class' #characterSet: #true)) #'2019-01-28T20:56:23.286894+01:00') ) -] diff --git a/src/Multilingual-Encodings/Unicode.class.st b/src/Multilingual-Encodings/Unicode.class.st index 9c2a859165b..a65022745e4 100644 --- a/src/Multilingual-Encodings/Unicode.class.st +++ b/src/Multilingual-Encodings/Unicode.class.st @@ -472,6 +472,7 @@ Unicode class >> initialize [ 2) unicode data 3) case mappings " + "If you are in a full image, you can try the following Zinc scripts to download the file automatically: UIManager default informUserDuring: [ :bar| | result | @@ -489,8 +490,25 @@ Unicode class >> initialize [ self parseCaseMappingFrom: result contents readStream ]. " - EncodedCharSet declareEncodedCharSet: self atIndex: 0+1. - EncodedCharSet declareEncodedCharSet: self atIndex: 256 + EncodedCharSet declareEncodedCharSet: self atIndex: 0 + 1. + EncodedCharSet declareEncodedCharSet: self atIndex: 256. + + self initializeTagConstants. + + Smalltalk os environment + at: #BOOTSTRAP_REPOSITORY + ifPresent: [ :path | + | dataFilePath caseFolding unicodeData | + dataFilePath := path , '/resources/unicode/'. + unicodeData := dataFilePath , 'UnicodeData.txt'. + caseFolding := dataFilePath , 'CaseFolding-8.0.0.txt'. + + self + parseUnicodeDataFrom: (ZnCharacterReadStream on: (File named: unicodeData) readStream encoding: 'utf8'); + parseCaseMappingFrom: (ZnCharacterReadStream on: (File named: caseFolding) readStream encoding: 'utf8'). + + Character characterSet: self ] + ifAbsent: [ Warning signal: 'Cannot initialize Unicode outside the Pharo bootstrap' ] ] { #category : 'class initialization' } diff --git a/src/System-Dependencies-Tests/SystemDependenciesTest.class.st b/src/System-Dependencies-Tests/SystemDependenciesTest.class.st index ba094ae0366..03b2b6695fd 100644 --- a/src/System-Dependencies-Tests/SystemDependenciesTest.class.st +++ b/src/System-Dependencies-Tests/SystemDependenciesTest.class.st @@ -50,7 +50,7 @@ SystemDependenciesTest >> externalDependendiesOf: packagesCollection [ { #category : 'packages' } SystemDependenciesTest >> kernelLayerPackages [ - ^ (BaselineOfPharoBootstrap kernelPackageNames , BaselineOfPharoBootstrap multilingualPackageNames , BaselineOfPharoBootstrap kernelAdditionalPackagesNames) + ^ (BaselineOfPharoBootstrap kernelPackageNames , BaselineOfPharoBootstrap kernelAdditionalPackagesNames) asSet ] @@ -111,7 +111,6 @@ SystemDependenciesTest >> metacelloPackageNames [ ^ BaselineOfPharoBootstrap kernelPackageNames, BaselineOfPharoBootstrap compilerPackageNames, BaselineOfPharoBootstrap fileSystemPackageNames, - BaselineOfPharoBootstrap multilingualPackageNames, BaselineOfPharoBootstrap kernelAdditionalPackagesNames, BaselineOfMonticello corePackageNames, BaselineOfMonticello remoteRepositoriesPackageNames, @@ -224,7 +223,7 @@ SystemDependenciesTest >> testExternalFileSystemDependencies [ | dependencies | dependencies := self externalDependendiesOf: - BaselineOfPharoBootstrap kernelPackageNames , BaselineOfPharoBootstrap multilingualPackageNames + BaselineOfPharoBootstrap kernelPackageNames , BaselineOfPharoBootstrap kernelAdditionalPackagesNames , BaselineOfPharoBootstrap compilerPackageNames , BaselineOfPharoBootstrap fileSystemPackageNames. @@ -244,7 +243,7 @@ If you will break or weaken this test, a puppy will die!!! | dependencies | dependencies := self - externalDependendiesOf: BaselineOfPharoBootstrap kernelPackageNames , BaselineOfPharoBootstrap multilingualPackageNames, BaselineOfPharoBootstrap kernelAdditionalPackagesNames. + externalDependendiesOf: BaselineOfPharoBootstrap kernelPackageNames, BaselineOfPharoBootstrap kernelAdditionalPackagesNames. self assertCollection: dependencies hasSameElements: self knownKernelDependencies ] From b846d3562bd577c9f9b4b681ba6b2b9cea8645b5 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Mon, 3 Nov 2025 18:32:25 +0100 Subject: [PATCH 2/2] Add logs --- src/Multilingual-Encodings/Unicode.class.st | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Multilingual-Encodings/Unicode.class.st b/src/Multilingual-Encodings/Unicode.class.st index a65022745e4..47c430301e2 100644 --- a/src/Multilingual-Encodings/Unicode.class.st +++ b/src/Multilingual-Encodings/Unicode.class.st @@ -500,6 +500,7 @@ Unicode class >> initialize [ ifPresent: [ :path | | dataFilePath caseFolding unicodeData | dataFilePath := path , '/resources/unicode/'. + ('Initializing Unicode with path ', dataFilePath) traceCr. unicodeData := dataFilePath , 'UnicodeData.txt'. caseFolding := dataFilePath , 'CaseFolding-8.0.0.txt'.