[Vm-dev] VM Maker: CMakeVMMakerSqueak-tty.122.mcz

commits at source.squeak.org commits at source.squeak.org
Mon May 30 22:25:56 UTC 2016


Timothy M uploaded a new version of CMakeVMMakerSqueak to project VM Maker:
http://source.squeak.org/VMMaker/CMakeVMMakerSqueak-tty.122.mcz

==================== Summary ====================

Name: CMakeVMMakerSqueak-tty.122
Author: tty
Time: 30 May 2016, 5:31:28.428568 pm
UUID: 1336e30e-abd6-4280-ab25-98ad217cb8b7
Ancestors: CMakeVMMakerSqueak-tty.121

Continued work on a refactored Help for the system.

Builders tests are broken. Need to fix.

In light of the Configuration step-by-step tutorial, I would like to consider tests for each step too.

Next up is verifying the New Configuration Tutorial works as advertised as I use it to create a Linux64x64 squeak.cog.spur configuration.

I am awaiting morphic bug fix before doing that.

I will start the decoupling from the pharo code soon.

=============== Diff against CMakeVMMakerSqueak-tty.121 ===============

Item was changed:
  ----- Method: CMakeVMGeneratorForSqueak>>generateByTemplate (in category 'code generation') -----
  generateByTemplate
+ 	"The bulk of CMake generation happens here.
+ 	
+ 	See CPlatformConfigForSqueak>>initialize for CMake output. that occurs prior to this method. (This may change on refactoring)
+ 
+ 	Think Seaside renderOn composition.
+ 	"
- 	"attempt to move way from string based writing to  template based. Think Seaside renderOn composition"
  	| extPlugins intPlugins |
  	self flag: 'tty'. "refactor so that the cascade reflects CMake terminilogy"
  	output := String new writeStream.
  	config templates: OrderedCollection new. 
  	config 
  		setGlobalOptions: self;    
  		cmakePrefixPath;
  		cmakeIncludePath;
  		cmakeLibraryPath;
  		cmakeIncludeModules;
  		cmakeCFlags;          
  		cmakeAddDefinitions;
  		cmakeWriteDirectoriesDotCmake:  self;
  		cmakeIncludeDirectories:  self;   "<---"
  		preferredIncludes;                      "<---why 3  of em?"
  		standardIncludes;                       "<---"
  		setGlobalOptionsAfterDetermineSystem: self;    
  		extraVMSettings: self;                "<--catch-all method. os/platform specific"
  		setCoreSources: self;
  		setPlatformSources: self;
  		setCrossSources: self;
  		setExtraSources;
  		cmakeSetSourceFilesProperties;
  		cmakeListAppend:'LINKLIBS' elements: (config externalLibs);
  		cmakeAddExecutableNameOptionSource: self;
  	      setExecutableOutputPath;
  		addVMPlugins: self.
  	config templates do: [:each | self puts: each content].
  	config templates: OrderedCollection new. 
  	extPlugins := self generatePluginConfigs: config internalPlugins internal: true.
  	 intPlugins := self generatePluginConfigs: config externalPlugins internal: false.
  	self processThirdpartyLibraries.                       "<--unused in Pharo code? What exactly does this do?"
  	self processPlugins:  intPlugins, extPlugins.
  	self config templates	addLast:((CMakeCommand new) command:'target_link_libraries' params:(self moduleName , ' ${LINKLIBS}')).
  "	self cmd: 'target_link_libraries'
  		params: self moduleName , ' ${LINKLIBS}'."
  	config postBuildActions: self..
  	config templates do: [:each | self puts: each content].
  	self saveFile.
  	self generateBuildScript!

Item was changed:
  ----- Method: CMakeVMMakerSqueakBuildersHelp class>>overview (in category 'pages') -----
  overview
  	^HelpTopic
  		title: 'Overview'
  		contents:
+ 'Builders are a facade interfact to CMakeVMmakerSqueak Configurations.
- 'A CMakeVMakerSqueak Builder is both a ''query'' tool and a ''build'' tool.
  
+ A CMakeVMakerSqueak Builder is both a ''query'' tool and a ''build'' tool.
- Builders provide a facade to CMakeVMmakerSqueak Configurations.
  
+ 
  With a  Builder, you can 
  	query its configurationsCategory''s Configurations
  	invoke a Configuration to generate CMake files or... 
  	invoke a Configuration to generateSources which...
  	invokes VMMaker.oscog to generate source
  
  Builders are concrete instances of the Abstract Base Class:SqueakCMakeVMMakerAbstractBuilder
  Browse its class comment an heirarchy to get a feel for it.
  
  HelpBrowser openOn: SqueakCMakeVMMakerAbstractBuilder
  SqueakCMakeVMMakerAbstractBuilder  browseHierarchy.
  
  Information on creating your own is available via HelpBrowser openOn: CMakeVMMakerSqueakDeveloperHelp
- TODO: Fix above sentence to point to something useful.
  
+ 
  '!

Item was changed:
  ----- Method: CMakeVMMakerSqueakBuildersHelp class>>pages (in category 'accessing') -----
  pages
+ 	^#(overview queryingBuilders buildTypes  generatingCMakeBuilds CMakeVMMakerSqueakTutorialNewBuilderHelp)
- 	^#(overview queryingBuilders buildTypes  generatingCMakeBuilds)
  	
  "#(overview queryingBuilders buildTypes  generatingCMakeBuilds scratch)"!

Item was removed:
- ----- Method: CMakeVMMakerSqueakCommonConfigTest>>testDirSource (in category 'as yet unclassified') -----
- testDirSource
- 	"for each builder, make sure all its configurations provide a dirSource "
- 	#(#SqueakMacintoshConfig #SqueakUnixConfig #SqueakWindowsConfig) 
- 		do:[:each | 
- 			(Smalltalk at:each) 
- 				allSubclassesDo:[:configuration | | o |
- 					configuration isAbstractBaseClass not
- 						ifTrue:[	o:= configuration basicNew.
- 								o excludeFromBuild not
- 									ifTrue:[self assert:(o  dirSource isString)]]]]
- 
- 
- 
- 
- 
- 
- 
- !

Item was removed:
- ----- Method: CMakeVMMakerSqueakCommonConfigTest>>testPlatformSources (in category 'as yet unclassified') -----
- testPlatformSources
- 	#(#SqueakMacintoshConfig #SqueakUnixConfig #SqueakWindowsConfig) 
- 		do:[:each | 
- 			(Smalltalk at:each) 
- 				allSubclassesDo:[:configuration | | o |
- 					o:= configuration basicNew.
- 					(o excludeFromBuild not) | (configuration isAbstractBaseClass)
- 						ifTrue:[self assert:(o  platformSources isArray)]]]
- 
- 
- 
- 
- 
- 
- 
- !

Item was changed:
  ----- Method: CMakeVMMakerSqueakConfigurationsHelp class>>pages (in category 'accessing') -----
  pages
+ 	^#(overview )
- "	#(overview CMakeVMMakerSqueakStepByStepNewConfigurationHelp CMakeVMMakerSqueakStepByStepNewPlatformHelp)"
- 	^#(overview CMakeVMMakerSqueakStepByStepNewConfigurationHelp)
  !

Item was changed:
  ----- Method: CMakeVMMakerSqueakDesignPatternsHelp class>>overview (in category 'pages') -----
  overview
  	^HelpTopic
  		title: 'Overview'
  		contents:
  'CMakeVMMakerSqueak makes heavy use of several design patterns.
  
  They include:
  
- Visitor Pattern.
  Method Redirect Pattern*.
+ Visitor Pattern.
  
  
  *N.B. tty. It might have a different name, I just named it that for reasons that will be apparent.
  
  '!

Item was changed:
  ----- Method: CMakeVMMakerSqueakDeveloperHelp class>>pages (in category 'pages') -----
  pages
+ 	^#( CMakeVMMakerSqueakOverviewHelp  CMakeVMMakerSqueakBuildersHelp   CMakeVMMakerSqueakConfigurationsHelp    CMakeVMMakerSqueakGeneratorsHelp CMakeVMMakerSqueakTemplatesHelp CMakeVMMakerSqueakDesignPatternsHelp CMakeVMMakerSqueakHistoryHelp )
- 	^#( CMakeVMMakerSqueakOverviewHelp  CMakeVMMakerSqueakBuildersHelp   CMakeVMMakerSqueakConfigurationsHelp   CMakeVMMakerSqueakGeneratorsHelp CMakeVMMakerSqueakTemplatesHelp CMakeVMMakerSqueakDesignPatternsHelp CMakeVMMakerSqueakHistoryHelp )
  	
+ !
- 		
- 	"#(CMakeVMMakerSqueakHistoryHelp CMakeVMMakerSqueakConfigurationsHelp CMakeVMMakerSqueakOverviewHelp   CMakeVMMakerSqueakGeneratorsHelp CMakeVMMakerSqueakTemplatesHelp  CMakeVMMakerSqueakBuildersHelp CMakeVMMakerSqueakDesignPatternsHelp  configDotCmake looseEnds  plugins pthreads  templates tests  )"!

Item was removed:
- CMakeVMMakerSqueakHelp subclass: #CMakeVMMakerSqueakExampleWorkflowHelp
- 	instanceVariableNames: ''
- 	classVariableNames: ''
- 	poolDictionaries: ''
- 	category: 'CMakeVMMakerSqueak-Help'!
- 
- !CMakeVMMakerSqueakExampleWorkflowHelp commentStamp: 'tty 2/28/2015 13:25' prior: 0!
- A CMakeVMMakerSqueakTerseGuideHelp provides a simple walkthrough of a build using the CMakeVMMaker package.
- 
- 
- !

Item was removed:
- ----- Method: CMakeVMMakerSqueakExampleWorkflowHelp class>>bookName (in category 'accessing') -----
- bookName
- 	^'Example Workflow: End User'!

Item was removed:
- ----- Method: CMakeVMMakerSqueakExampleWorkflowHelp class>>configureAndGenerate (in category 'pages') -----
- configureAndGenerate
- 	^HelpTopic
- 		title: 'Configure and Generate'
- 		contents:
- ' The final step is to instruct the Configuration to configure itself for an available buildType , enable/disable debugging trace messages and generate the output.
- 
- SqueakLinux64x86w32CompatBuilder 
- 	configureA: #Linux32x86SqueakCogV3Config forBuildType: #build;   
- 	enableMessageTracking: true;
- 	generateByTemplate.
- 
- Running the above cascade provides no feedback to the user. If all went well, there should be a CMake build tree as discussed on the next page.
- 
- 
- 
- '
- 
- 
- !

Item was removed:
- ----- Method: CMakeVMMakerSqueakExampleWorkflowHelp class>>examiningOutput (in category 'pages') -----
- examiningOutput
- 	"This method was automatically generated. Edit it using:"
- 	"a HelpBrowser edit: #examiningOutput"
- 	^HelpTopic
- 		title: 'Examining Output'
- 		contents: 
- 'TODO: tty fix apperent but in build directory as it is outputing to DO THIS NEXT /cmake.build.linux64x86w32BitCompatibility/squeak.cog.v3/build/ 
- and not cmake.build.linux32_64x86
- 
- Examining the output requires two queries (both intuitive, via the intention revealing names of the Builder and Configuration)
- 
- First, we ask the builder where it has its Configurations put their output:
- 
- SqueakLinux64x86w32CompatBuilder buildDirectory 
- -->  ''cmake.build.linux32_64x86''
- 
- 
- The Linux32x86SqueakCogV3Config writes itself to a directory that matches its [cmake.Platform]/[Language].[VM].[MemoryModel]/[BuildType]
- 
- On my system that is:
- 
- ~./..../cogVMMaker/oscogvm/cmake.[Platform]/[Language].[VM].[MemoryModel]/build
- i.e.
- ~./..../cogVMMaker/oscogvm/cmake.build.linux32_64x86/squeak.cog.v3/build
- 
- I open a terminal and navigate to that directory:
- 
- cd ~./..../cogVMMaker/oscogvm/cmake.build.linux32_64x86/squeak.cog.v3/build
- 
- and list the contents 
- 
- bash-4.2$ ls
- ADPCMCodecPlugin      LICENSE.txt            SurfacePlugin
- AsynchFilePlugin      LargeIntegers          Utils.cmake
- B2DPlugin             LocalePlugin           ZipPlugin
- BMPReadWriterPlugin   MIDIPlugin             build.cmake
- BitBltPlugin          Matrix2x3Plugin        build.sh
- CMakeLists.txt        MiscPrimitivePlugin    config.cmake
- CroquetPlugin         Mpeg3Plugin            config.in
- DSAPrims              PLUGINS.txt            directories.cmake
- DropPlugin            Plugins.cmake          sqNamedPrims.h
- FFTPlugin             SecurityPlugin         testDoubleWordAlignment.c
- FileCopyPlugin        SerialPlugin           testDoubleWordOrder.c
- FilePlugin            SocketPlugin           testLanginfoCodeset.c
- FloatArrayPlugin      SoundCodecPrims        vm-display-X11
- FloatMathPlugin       SoundGenerationPlugin  vm-display-null
- JoystickTabletPlugin  SoundPlugin            vm-sound-ALSA
- Klatt                 StarSqueakPlugin       vm-sound-null
- ....
- 
- 
- (NOTE TODO tty: build a query to have a configuration return its build directory path.)
- 
- !!' readStream nextChunkText!

Item was removed:
- ----- Method: CMakeVMMakerSqueakExampleWorkflowHelp class>>invokeCMake (in category 'pages') -----
- invokeCMake
- 	^HelpTopic
- 		title: 'Invoke cmake'
- 		contents:
- 'The next step is to tell CMake to create the native build files.
- 
- On linux the commands are:
- 
- cmake .                    <----N.B. note the ''dot'' after the cmake
- make
- 
- As a convenience, the commands are duplicated in a generated ''build.sh'' file .  (I have had some wierd issues with running it directly, so I just run the commands therein)
- bash-4.2$ cat build.sh 
- #!!/usr/bin/env bash
- export CC=gcc
- export CXX=g++
- cmake .
- make
- 
- 
- When CMakeVMMakerSqueak is ported to different platforms, then the ''make'' command could be replaced by a different native build system command.
- 
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakExampleWorkflowHelp class>>overview (in category 'pages') -----
- overview
- 	^HelpTopic
- 		title: 'Overview'
- 		contents:
- 'On a given Platform, a platform specific Builder configures a platform specific Configuration for a buildType and instructs it to  write its CMake output to that Configuration''s build directory.
- 
- This terse example shows a typicall use-case of the tools.
- 
- In this terse example, I want to build a Cog VM for Squeak with the V3 memory model. on a SlackwareLinux64 with 32 bit Compatability libs platform.  
- 
- To do this, I ...
- 
- 1. Select the Builder for my platform.  
- 2. Query the Builder
- 3  Select a Configuration
- 4 Instruct  the Configuration (via the Builder) to configure itself for a builtType
- 5. Instruct the Configuration (via the Builder) to enable message tracking (useful for debugging output)
- 6. Instruct the Configuration (via the Builder) to generate its CMake output.
- 7 
- 8 Invoke the native build system.
- 9. Test the generated VM.
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakExampleWorkflowHelp class>>pages (in category 'accessing') -----
- pages
- 	^#(overview selectBuilder queryBuilder selectConfiguration configureAndGenerate examiningOutput invokeCMake testDrive)!

Item was removed:
- ----- Method: CMakeVMMakerSqueakExampleWorkflowHelp class>>priority (in category 'pages') -----
- priority
- 
- 	^ 3!

Item was removed:
- ----- Method: CMakeVMMakerSqueakExampleWorkflowHelp class>>queryBuilder (in category 'pages') -----
- queryBuilder
- 	^HelpTopic
- 		title: 'Query the Builder'
- 		contents:
- 'I can query the Builder for information on available Configurations and BuildTypes
- 
- SqueakLinux64x86w32CompatBuilder 
- 	availableBuildConfigurations.
- 
- SqueakLinux64x86w32CompatBuilder 
- 	allBuildTypes.
- 
- SqueakLinux64x86w32CompatBuilder 
- 	availableBuildTypesFor:(SqueakLinux64x86w32CompatBuilder availableBuildConfigurations at:1).
- 
- SqueakLinux64x86w32CompatBuilder 
- 	buildDirectory.
- 
- The ''queries'' protocol of the SqueakCMakeVMMakerAbstractBuilder contains additional queries.
- 
- SqueakCMakeVMMakerAbstractBuilder class browse.
- '
- 
- 
- !

Item was removed:
- ----- Method: CMakeVMMakerSqueakExampleWorkflowHelp class>>selectBuilder (in category 'pages') -----
- selectBuilder
- 	^HelpTopic
- 		title: 'Select a Builder'
- 		contents:
- 'I select the appropriate Builder from the CMakeVMMakerSqueak-Builder category for my platform; in my case it is the SqueakLinux64x86w32CompatBuilder.
- 
- 
- SqueakLinux64x86w32CompatBuilder browseHierarchy.
- 
- SqueakCMakeVMMakerAbstractBuilder browseHierarchy.
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakExampleWorkflowHelp class>>selectConfiguration (in category 'pages') -----
- selectConfiguration
- 	^HelpTopic
- 		title: 'Select a Configuration'
- 		contents:
- 'The Configuration Linux64x86w32BitSqueakCogV3Config is available for my platform. (i.e. a developer has done the work of encapsulating the custom CMake for us).
- 
- As stated before, I can view what Configurations are available for a platform by asking the platform Builder what it has available:
- 
- SqueakLinux64x86w32CompatBuilder 
- 	availableBuildConfigurations.
- 
- As of this writing the Linux64x86w32BitSqueakCogV3Config is available and I decide to use it.
- 
- Note that the class name of the Configuration is intention-revealing. It is a Configuration for the Linux 64 platform with 32 Bit compatibility libs that encapsulates the CMake required to build the Squeak Cog V3 virtual machine. From this convention, The organization of configurations is straight-forward:
- 
- CPlatformConfigForSqueak  browseHierarchy
- 
- Linux64x86w32BitSqueakCogV3Config browseHierarchy
- '
- 
- 
- !

Item was removed:
- ----- Method: CMakeVMMakerSqueakExampleWorkflowHelp class>>testDrive (in category 'pages') -----
- testDrive
- 	^HelpTopic
- 		title: 'Test Driving the VM'
- 		contents:
- 'The Cog svn tree contains a directory named ''products'' where it stores its make output.
- 
- The CMakeVMMakerSqueak system mirrors that with a cmake.products directory that is created at the same level.
- 
- 
- The newly generated VM is stored in a subdirectory of ''cmake.products" that mimics the [Language][VM][MemoryModel] naming convention of the Configuration
- 
- Since I built a #Linux32x86SqueakCogV3Config the cog vm is placed in the cmake.products/squeak.cog.v3  directory.
- 
- TODO: Add a message name showing where this is customized.
- '!

Item was changed:
  ----- Method: CMakeVMMakerSqueakHelp class>>pages (in category 'accessing') -----
  pages
+ 	^#( CMakeVMMakerSqueakStartHereHelp  CMakeVMMakerSqueakDeveloperHelp CMakeVMMakerSqueakTutorialsHelp )!
- 	^#( CMakeVMMakerSqueakStartHereHelp CMakeVMMakerSqueakExampleWorkflowHelp CMakeVMMakerSqueakDeveloperHelp )!

Item was changed:
  ----- Method: CMakeVMMakerSqueakStartHereHelp class>>nextSteps (in category 'pages') -----
  nextSteps
  	^HelpTopic
  		title: 'Next Steps'
  		contents:
+ 'The Help Topic entitled "Developer Guide" will explain the design of and how to add and modify the components of the CMakeVMMakerSqueak system.
- 'The  Help Topic entitled "Example Workflow: End User" will walk you through an example workflow as executed on a GNU Linux system with the standard development tools. Macintosh and Windows dev tools will differ (N.B. tty The primary difference is that they have not been written yet (:  ).
  
+ The Tutorials Help Topic contains some useful tutorials
  
- The Help Topic entitled "Developer Guide" will explain the design of and how to add and modify the components of the CMakeVMMakerSqueak system.
  
- 
  '!

Item was changed:
  ----- Method: CMakeVMMakerSqueakStartHereHelp class>>overview (in category 'pages') -----
  overview
  	^HelpTopic
  		title: 'Overview'
  		contents:
  'CMakeVMMakerSqueak is a collection of tools for generating CMake files. The high-level workflow is:
  
  1. Instruct  CMakeVMMakerSqueak to generate CMake build directories and CMake configuration files.
  
  2. Invoke the  ''cmake'' command at the top level of the generated cmake build tree
   
  3. CMake configures and outputs the build system files for that platform.
  
  4. The user invokes the native build system.
  
  5. The native build system compiles a VM. 
  
+ The ''Tutorial: End User'' page in this Help book provides an example of the above workflow with minimal explanation.
- The ''Example Workflow: End User'' page in this Help book provides an example of the above workflow with minimal explanation.
  
  
+ For in-depth explanations of the system(s), tools and how to use and extend them, see the ''CMakeVMMaker Developer Guide'''!
- In-depth explanations of the system(s), tools and how to use them, see the ''CMakeVMMaker Developer Guide'''!

Item was changed:
  ----- Method: CMakeVMMakerSqueakStartHereHelp class>>pages (in category 'accessing') -----
  pages
+ 	^#(overview requirements nextSteps )!
- 	^#(overview requirements nextSteps)!

Item was removed:
- CMakeVMMakerSqueakConfigurationsHelp subclass: #CMakeVMMakerSqueakStepByStepNewConfigurationHelp
- 	instanceVariableNames: ''
- 	classVariableNames: ''
- 	poolDictionaries: ''
- 	category: 'CMakeVMMakerSqueak-Help'!
- 
- !CMakeVMMakerSqueakStepByStepNewConfigurationHelp commentStamp: 'tty 6/16/2014 12:19' prior: 0!
- A CMakeVMMakerSqueakNewConfigurationStepByStepHelp itemizes the steps needed to create a new build configuration.
- 
- HelpBrowser openOn: CMakeVMMakerSqueakNewConfigurationStepByStepHelp!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>aNoteOnFoo (in category 'pages') -----
- aNoteOnFoo
- 	^HelpTopic
- 		title:'A Note On FOO'
- 		contents:
- 'Since we have customized plugins, now is a good time to introduce the FOO in [PLATFORM][Language][VM][Memory Manager][BuildType][foo] 
- 
- The purpose of FOO is to accomadate personal plugins that ''just work'' for an odd-ball platform or odd set of plugins or some obscure operating system..
- 
- Some examples will suffice to convey the purpose of FOO. (below I encase [FOO] for clarity)
- 
- Linux64x86w32BitSqueakCogV3[WithoutGL]Config
- 
- SqueakBSD32x86[TTYsConfigurationFromHell]Config
- 
- Linux32x86SqueakCogV3[BillyBobVeryOwn]Config
- 
- Linux32x86SqueakCogV3[withoutIA32BOCHSPLugin]Config
- 
- you get the idea. 
- 
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>addVMPlugins (in category 'pages') -----
- addVMPlugins
- 	^HelpTopic
- 		title:'addVMPlugins'
- 		contents:
- 'addVMPlugins depends on custom configuration provided in our Configuration; the method depends on three other methods as described below 
- 
- VMPlugins are similar to built-in plugins yet are critical for running squeak on particular systems. 
- 
- The CMake configuration data needed for building them is encapsulated in sublcasses of CMakeVMPlugin.
- 
- CMakeVMPlugin browseHierarchy
- 
- You see that they are predominantly display and sound drivers.
- 
- The process of customization ''starts'' in the initialze method of CPlatformConfigForSqueak
- 
- ToolSet browse: CPlatformConfigForSqueak selector: #initialize
- 
- In CPlatformConfigForSqueak>>initializeVMDrivers an OrderedCollection of CMakeVMPlugin subclasses are initialzed and stored. This collection is the universe of possible vm plugins.
- 
- In our custom Configuration, we need a subset of that universe.  The CPlatformConfigForSqueak>>customizeVMDrivers forces this with a ''self subclassResponsibility''
- 
- In our  new Configuration we have this method already as we copied from an existing Configuration
- 
- ToolSet browse: Linux64x86w32BitConfigUsrLib selector: #customizeVMPlugins
- 
- We see that the code selects specific vm plugin templates from the universe of available ones and then customizes each one.
- 
- Taking Linux64x86w32BitConfigUsrLib>>customizeCMakeVMDisplayNull as an example...
- 
- ToolSet browse: Linux64x86w32BitConfigUsrLib selector: #customizeCMakeVMDisplayNull
- 
- We see that we set the sources, compiler definitions, flags, external libraries, linker flags and include directories needed to compile the vm plugin here.
- 
- So, if we have trouble with a vm plugin, we need to look in its customzeCMakeVMXYZ  method and fix it there.
- 
- These configurations are extracted from our Configuration and written out to that vm plugins directory and placed in its CMakeLists.txt file.
- 
- Here is an example of the CMakeLists.txt file for the vm-display-null plugin
- 
- bash-4.2$ cat oscogvm/cmake.build.linux64x86w32BitCompatibility/squeak.cog.v3/build/vm-display-null/CMakeLists.txt 
- # This is automatically generated file using Linux64x86w32BitSqueakCogSpurConfig on 1 May 2016 8:40:02.153261 am
-   project (vm-display-null)
-   cmake_minimum_required(VERSION 2.8.12)
-   include (/home/wm/usr/src/smalltalk/CMake.oscog/cogspurVMMaker/oscogvm/cmake.build.linux64x86w32BitCompatibility/squeak.cog.v3/build/directories.cmake)
-   add_definitions(-DNDEBUG -DDEBUGVM=0  -DLSB_FIRST=1 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -DCOGMTVM=0)
-   add_definitions(-w -m32 -msse2 -O1)
-   add_definitions(-fPIC -DPIC)
-   set(sources ${targetPlatform}/vm-display-null/sqUnixDisplayNull)
-   add_library(vm-display-null  SHARED   ${sources})
-   include_directories(  ${crossDir}/plugins/FilePlugin ${targetPlatform}/plugins/B3DAcceleratorPlugin ${crossDir}/plugins/B3DAcceleratorPlugin)
-   set(LIBRARY_OUTPUT_PATH "/home/wm/usr/src/smalltalk/CMake.oscog/cogspurVMMaker/oscogvm/cmake.products/squeak.cog.v3")
-   target_link_libraries(vm-display-null  ${LINKLIBS})
-   set_target_properties(vm-display-null PROPERTIES PREFIX ""  SUFFIX ""  LINK_FLAGS "-w -m32 -msse2 -O1")
- 
- 
- To modify the above output, we modify our Configuration''s customizeCMakeVMXyz methods . 
- To add or remove a vm-plugin from our configuration, we edit the customizeVMPlugins method.
- To expand the universe of available vm plugins, we modify the CMakeConfigForSqueak >>initializeVMDrivers method.
- 
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>bookName (in category 'accessing') -----
- bookName 
- 	^'Example Workflow: New Configuration'!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>cPlatformConfigForSqueak (in category 'pages') -----
- cPlatformConfigForSqueak
- 	"This method was automatically generated. Edit it using:"
- 	"a HelpBrowser edit: #cPlatformConfigForSqueak"
- 	^HelpTopic
- 		title: 'CPlatformConfigForSqueak'
- 		contents: 
- 'CPlatformConfigForSqueak browse
- 
- CPlatformConfForSqueak encapsulates data and methods/behaviors  that span computer platforms. 
- 
- The immediate children of CPlatformConfigForSqueak
- 
- SqueakMacintoshConfig 
- SqueakUnixConfig
- SqueakWindowsConfig
- 
- begin the specialization required for the Macintiosh , Unix and Windows machines. Adding a new platform, say VAX, is as easy as
- CPlatformConfigForSqueak subclass:#SqueakVAXConfig and configure its relevant data/methods for that platform.
- 
- An example of Configuration customization at the platform level is in the executableType method.
- 
- SystemNavigation default browseMethodsWhoseNamesContain: ''executableType''
- 
- Here, we see that CPlatformConfForSqueak requires that a subclass implement it. The other subclasses may impliment it with an appropriate return value.
- 
- Configurations are further refined as we proceed down the heirarchy. 
- 
- SqueakMacOSX32x86Config browseHierarchy
- 
- Here we see a (stub) configuration for Mac OSX32 on the x86 processor. 
- 
- Our new Linux64x86w32BitSqueakCogSpurConfig configuration fits into its expected place under the Unix hierarchy.
- 
- Linux64x86w32BitSqueakCogSpurConfig browseHierarchy
- 
- The key and art of customizing our Linux64x86w32BitSqueakCogSpurConfig is to customize our Configuration at the appropriate level. 
- Higher levels should provide existing, appropriate configuration. Our job is to then implement and customize at the finest level of customization.
- 
- To understand the how and why of customizing a Configuration, we turn to the heavily implemented design pattern I call the "Method Redirect Pattern".
- 
- We cover that next.
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- N.B. The ''Squeak'' prefix is unfortunate as it violates the naming convention. It is a holdover from initial attempts with the Pharo CMakeVMMaker code base.
- I will attempt to remember to rename these after the Pharo dependency is removed.
- 
- 
- 
- 
- 
- 
- 
- 
- 
- CPlatformConfigForSqueak is a child of CPlatformConfig, the root Configuration in Pharo''''s CMakeVMMaker. 
- 
- This is temporary as I have decided to de-couple CMakeVMMakerSqueak from CMakeVMMaker.
- 
- 
- ToolSet browseMessageCategory:''cmake'' inClass: CPlatformConfigForSqueak!!' readStream nextChunkText!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>cmakeAddDefinitions (in category 'pages') -----
- cmakeAddDefinitions
- 	^HelpTopic
- 		title:'cmakeAddDefinitions'
- 		contents:
- 'SystemNavigation browseAllImplementorsOf: #cmakeAddDefinitions
- 
- We see that the CPlatformConfigForSqueak routes the method based on the buildType #build via the Method Redirect pattern to cmakeAddDefinitionsBuild
- 
- SystemNavigation browseAllImplementorsOf: #cmakeAddDefinitionsBuild
- 
- We see that our Linux64x86w32BitSqueakCogSpurConfig already implements it due to our copying of an existing configuration.
- 
- We need to modify this for our Configuration. The current method (minus commented out elements) reads as:
- 
- 	definitions:=#(
- 	 ''-DNDEBUG''          
-  	 ''-DDEBUGVM=0''
- 	 '' -DLSB_FIRST=1''
- 	 ''-D_GNU_SOURCE''
-  	 ''-D_FILE_OFFSET_BITS=64''
-  	 ''-DCOGMTVM=0'') . 
- 
- Like the cmakeCFlags method, we look at the mvm file 
- 
- cat ~/.../Cog/build.linux32x86/squeak.cog.spur/build/mvm
- 
- And see the 
- 3.4.*)  OPT=''-g -O1 -fwrapv -DNDEBUG -DDEBUGVM=o'';;
- *)              OPT=''-g -O2 -DNDEBUG -DDEBUGVM=0'';;
- 
- lines and the 
- 
- CFLAGS=''$OPT -msse2 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -DCOGMTVM=0'' \
- 
- Based on these mvm file details, I modify the method to read as such:
- 
- 	definitions:=#(
- 	 ''-DNDEBUG''          
-  	 ''-DDEBUGVM=0''
- 	 ''-D_GNU_SOURCE''
-  	 ''-D_FILE_OFFSET_BITS=64''
-  	 ''-DCOGMTVM=0'') .
- 
- To match the directives specified in the mvm file
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>cmakeAddExecutableNameOptionSource (in category 'pages') -----
- cmakeAddExecutableNameOptionSource
- 	^HelpTopic
- 		title:'cmakeAddExecutableNameOptionSource:'
- 		contents:
- 'SystemNavigation browseAllImplementorsOf: #cmakeAddExecutableNameOptionSource:
- 
- We see this is a top-level method implemented only by CPlatformConfigForSqueak
- 
- The method creates a new CMakeAddExecutableNameOptionSource template 
- 
- CMakeAddExecutableNameOptionSource browse
- 
- and the class comment says it "Add an executable to the project using the specified source files."
- 
- To get a sense of the CMake output print the following:
- 
- ((CMakeAddExecutableNameOptionSource new)
- 			executableName: ''cog''
- 			optionalproperty: ''''
- 			sources: (OrderedCollection with: ''${coreSources} ${crossVMSources} ${platformVMSources} ${extraSources}'')) content
- 
- In looking at this, the exectuableName worries me.  I am not sure that ''cog'' is what we want.
- 
- Looking at it...
- SystemNavigation browseAllImplementorsOf: #executableName
- 
- it is something we can customize or code if we need.
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>cmakeCFlags (in category 'pages') -----
- cmakeCFlags
- 	^HelpTopic
- 		title:'cmakeCFlags'
- 		contents:
- 'SystemNavigation browseAllImplementorsOf: #cmakeCFlags
- 
- We see that  CPlatformConfigForSqueak implements it
- 
- The method comment reads in part:
- 
- ''self deprecated: this catchall method has been split into dedicated methods: cmakePrefixPath cmakeIncludePath 	cmakeLibraryPath	cmakeIncludeModules;    cmakeCFlags;      ...''
- 
- 
- And that this method will be refactored out of existence ''soon''.
- 
- Looking at it, we see that the method  implements the Method Redirect pattern 
- 
- Since we have configured for buildType: #build, the Method Redirect Pattern will invoke the  cmakeCFlagsBuild method.
- 
- So we look at the implementors of it..
- 
- SystemNavigation browseAllImplementorsOf: #cmakeCFlagsBuild
- 
- Here we see that our new Linux64x86w32BitSqueakCogSpurConfig configuration implements it (since we copied an existing Configuration that implemented it)
- 
- We now have something to customize.
- 
- We look at the line: cflags:= String streamContents: [:stream | (self compilerFlags) asStringOn: stream delimiter: '' '' ]. 
- 
- and see that our ''self compilerFlags'' method is used.
- 
- SystemNavigation browseAllImplementorsOf: #compilerFlags
- 
- These are flags to pass to the compiler. Take a look at the mwm file in the GNU config
- 
- cat ~/.../Cog/build.linux32x86/squeak.cog.spur/build/mvm
- 
- We see an OPT variable being populated...
- 
- 
- 	OPT=''-g -O1 -fwrapv -DNDEBUG -DDEBUGVM=0'';;
- 	OPT=''-g -O2 -DNDEBUG -DDEBUGVM=0'';;
- esac
- 
- And later in the file we see the CFLAGS variable being populated with the $OPT variable and some other flags.
- 
- 	CC=''gcc -m32'' \
- 	CXX=''g++ -m32'' \
- 	CFLAGS=''$OPT -msse2 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -DCOGMTVM=0'' \
- 	LIBS=''-lpthread -luuid'' \
- 	LDFLAGS=-Wl,-z,now
- 
- That CFLAGS variable is what we are mimicing here. with some caveats...
- 
- The pharo code just dumped all that stuff into one method, whereas I split them up.
- 
- We are ommitting the Compiler defines like -D_GNU_SOURCE  as we will be setting those in cmakeAddDefinitions.
- 
- My current compilerFlags (minus commented out elements) method reads like this:
- 
- compilerFlags
- 	^#(	''-w''
- 		''-m32''
- 		''-msse2''
- 		''-O1'') 
- 
- 
- checking my compiler version 
- bash-4.2$ gcc --version
- gcc (GCC) 4.8.2
- Copyright (C) 2013 Free Software Foundation, Inc.
- This is free software; see the source for copying conditions.  There is NO
- warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- 
- I see I need some options from the    OPT=''-g -O1 -fwrapv -DNDEBUG -DDEBUGVM=0'' line
-  line 
- 
- 
- Mimicing the mvm file, I modify it to read as such:
- 
- compilerFlags
- 	^#(''-g''
- 	     ''-O1''
- 	     ''-fwrapv''
- 	     ''-m32''
- 	     ''-msse2''
- 	) 
- 
- In doing this, I am congizant that I may have to return to this method as I fiddle around getting this configuration correct.
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>cmakeIncludeDirectories (in category 'pages') -----
- cmakeIncludeDirectories
- 	^HelpTopic
- 		title:'cmakeIncludeDirectories'
- 		contents:
- 'SystemNavigation browseAllImplementorsOf: #cmakeIncludeDirectories:
- 
- We see that the sole implementor of the method is the top level configuration CPlatformConfigForSqueak
- 
- The method creates an instance of the CMakeTemplate CMakeIncludeDirectories
- 
- CMakeIncludeDirectories browse
- 
- where the class comment tells us that it tells CMake to add extra ''include'' directories to the build.
- 
- Currently a variable placeholder is hard-coded in CMakeVMGeneratorForSqueak>>includeDirs
- You can print the following to see them:
- (CMakeVMGeneratorForSqueak new) includeDirs
- 
- And the generated CMake by printing the following:
- 
- ((CMakeIncludeDirectories new) dirs: (OrderedCollection with: (CMakeVMGeneratorForSqueak new) includeDirs)) content 
- 
- What you see when you print it are variable placeholders that CMake will populate with the value of CMake variables  ${crossDir}
- , ${srcVMDir} and ${targetPlatform} that we will be defining or have already been defined in our configuration.
- 
- This is truly a global method and would only change if Eliot changed the layout of the underlying build structure.
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>cmakeIncludeModules (in category 'pages') -----
- cmakeIncludeModules
- 	^HelpTopic
- 		title:'cmakeIncludeModules'
- 		contents:
- 'CMake allows the user to include custom CMake library files (modules).  
- This construct allows the developer to include those modules.
- 
- cmakeIncludeModules implements the Method Redirect pattern.
- 
- ToolSet browse: CPlatformConfigForSqueak selector: #cmakeIncludeModules
- 
- Since the configuration is configured for buildType: #build the method redirect pattern will redirect to
- 
- SystemNavigation browseAllImplementorsOf: #cmakeIncludeModulesBuild.
- 
- We see in CPlatformConfigForSqueak that a sublcass must implement it via ''self subclassResponsibility''.
- 
- We see that (as of this writing) the SqueakUnixConfig handles the method by including some custom modules
- Utils.cmake
- Plugins.cmake
- TestBigEndian
- CheckIncludeFile
- CheckLibraryExists
- CheckTypeSize
- CheckFunctionExists
- CheckVariableExists
- CheckStructHasMember
- FindPkgConfig
- 
- These Module wrap CMake constructs and can be thought of as CMake ''include files''. and they are implemented high in the Configuration platform hierarchy.
- 
- Our new Configuration need not override anything here.
- 
- Let''s move on...'!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>cmakeIncludePath (in category 'pages') -----
- cmakeIncludePath
- 	^HelpTopic
- 		title:'cmakeIncludePath'
- 		contents:
- 'cmakeIncludePath implements the Method Redirect pattern.
- 
- ToolSet browse: CPlatformConfigForSqueak selector: #cmakeIncludePath
- 
- Since the configuration is configured for buildType: #build the method redirect pattern will redirect to
- 
- SystemNavigation browseAllImplementorsOf: #cmakeIncludePathBuild
- 
- We see in CPlatformConfigForSqueak that a sublcass must implement it via ''self subclassResponsibility''.
- 
- We see that (as of this writing) the SqueakUnixConfig handles the method, but only for debug messages.
- 
- There is a possibility a  sub-platform will have include files in a non-standard directories and a specific Configuration
- will have to implement this to generate appropriate CMake output. 
- 
- At this moment, we conclude we don''t need to. 
- 
- Since I am writing this help in tandem with generating a new Configuration, there is the possibility I am wrong and that I will need this.
- 
- Since I don''t know for a fact that it is, I leave it alone for now.'!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>cmakeLibraryPath (in category 'pages') -----
- cmakeLibraryPath
- 	^HelpTopic
- 		title:'cmakeLibraryPath'
- 		contents:
- 'cmakeLibraryPath implements the Method Redirect pattern.
- 
- ToolSet browse: CPlatformConfigForSqueak selector: #cmakeLibraryPath
- 
- Since the configuration is configured for buildType: #build the method redirect pattern will redirect to
- 
- SystemNavigation browseAllImplementorsOf: #cmakeLibraryPathBuild.
- 
- We see in CPlatformConfigForSqueak that a sublcass must implement it via ''self subclassResponsibility''.
- 
- We see that (as of this writing) the SqueakUnixConfig handles the method, but only for debug messages.
- 
- There is a possibility a  sub-platform will have libraries in a non-standard directories and a specific Configuration
- will have to implement this to generate appropriate CMake output. 
- 
- At this moment, we conclude we don''t need to. 
- 
- Since I am writing this help in tandem with generating a new Configuration, there is the possibility I am wrong and that I will need this.
- 
- Since I don''t know for a fact that it is, I leave it alone for now.
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>cmakeListAppend: (in category 'pages') -----
- cmakeListAppend:LINKLIBSelements
- 	^HelpTopic
- 		title:'cmakeListAppend:LINKLIBSelements'
- 		contents:
- '
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>cmakeListAppendLINKLIBSelements (in category 'pages') -----
- cmakeListAppendLINKLIBSelements
- 	^HelpTopic
- 		title:'cmakeListAppendLINKLIBSelements'
- 		contents:
- 'SystemNavigation browseAllImplementorsOf: #cmakeListAppend:elements:
- 
- We see this is a top-level method.
- 
- The method creates a new CMakeListAppend which according to the class comment ''I handle the APPEND functionality for the cmake list commmand.''.
- 
- Here we are appending libraries to link to the list LINKLIBS.
- 
- You can get a sense of the CMake output by evaluating.
- 
- ((CMakeListAppend new) list:''LINKLIBS'' elements:#((''-L/usr/lib'' ''-L/usr/lib/X11'' ''uuid'' ''ssl'' ''crypto'' ''m'' ''dl'' ''pthread'' ''SM'' ''ICE'' ''GL'' ''X11'' ''nsl''))) content
- 
- The list of libraries is available via the configurations ''externalLibs'' method. 
- 
- SystemNavigation browseAllImplementorsOf: #externalLibs
- 
- Which we see implements the Method Redirect pattern.
- 
- Since this is a #build buildType we look in 
- 
- SystemNavigation browseAllImplementorsOf: #externalLibsBuild 
- 
- And we see the CPlatformConfigForSqueak subclasses responsibility and that our new Linux64x86w32BitSqueakCogSpurConfig implements it as
- 
- externalLibsBuild
- 	^self externalLibraries asOrderedCollection.
- 
- which is contained in its parent as
- 
- externalLibraries
- 	^#(
- 		     ''-L/usr/lib''
- 		     ''-L/usr/lib/X11''
- 		......
- 		etc...
- 	)
- 		
- 		
- So, we see the ability to specify what libraries we want to link against in our configuration.
- 
- Where to do this in the Configuration heirarchy is a matter of judgement.
- 
- We will leave this one alone, bearing in mind that if we have a library linking problem, we have an idea where to look for it.		
- 	
- 
- 
- 
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>cmakePrefixPath (in category 'pages') -----
- cmakePrefixPath
- 	^HelpTopic
- 		title:'cmakePrefixPath'
- 		contents:
- 'ToolSet browse: CPlatformConfigForSqueak selector: #cmakePrefixPath
- 
- cmakePrefixPath implements the Method Redirect pattern.
- 
- Since the configuration is configured for buildType: #build the method redirect pattern will redirect to
- 
- SystemNavigation browseAllImplementorsOf: #cmakePrefixPathBuild
- 
- We see in CPlatformConfigForSqueak that a sublcass must implement it via ''self subclassResponsibility''.
- 
- We see that (as of this writing) the SqueakUnixConfig handles the method.
- 
- We reason that this method generates  platform specific CMake output and our lower-level Configuration need not override it.
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>cmakeSetSourceFilesProperties (in category 'pages') -----
- cmakeSetSourceFilesProperties
- 	^HelpTopic
- 		title:'cmakeSetSourceFilesProperties'
- 		contents:
- 'SystemNavigation browseAllImplementorsOf: #cmakeSetSourceFilesProperties
- 
- SystemNavigation browseAllImplementorsOf: #cmakeSetSourceFilesPropertiesBuild
- 
- We see that the CPlatformConfigForSqueak subclasses responsibility (scroll down past the method comment)
- 
- We also see that our new Linux64x86w32BitSqueakCogSpurConfig Configuration implements it.
- 
- I suspect this method will be refactored upwards. It appears to be passing distinct compiler flags to the cogit.c and sqUnixHeartbeat.c.
- 
- 
- Let''s leave this one alone.
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>cmakeWriteDirectoriesDotCmake (in category 'pages') -----
- cmakeWriteDirectoriesDotCmake
- 	^HelpTopic
- 		title:'cmakeWriteDirectoriesDotCmake'
- 		contents:
- 'SystemNavigation browseAllImplementorsOf: #cmakeWriteDirectoriesDotCmake:
- 
- Here we see that the CPlatformConfigForSqueak forces subclasses to implement this .
- 
- This method sets some CMake variables to platform specific values and writes them to a file named ''directories.cmake''
- 
- Here is the directories.cmake file contents on my platform
- 
- bash-4.2$ cat directories.cmake 
-   set(topDir "/home/tty/usr/src/smalltalk/CMake.oscog/cogspurVMMaker/oscogvm")
-   set(buildDir "/home/tty/usr/src/smalltalk/CMake.oscog/cogspurVMMaker/oscogvm/cmake.build.linux64x86w32BitCompatibility/squeak.cog.v3/build")
-   set(thirdpartyDir "${buildDir}/thirdParty")
-   set(platformsDir "/home/tty/usr/src/smalltalk/CMake.oscog/cogspurVMMaker/oscogvm/platforms")
-   set(srcDir "/home/tty/usr/src/smalltalk/CMake.oscog/cogspurVMMaker/oscogvm/src")
-   set(srcPluginsDir "${srcDir}/plugins")
-   set(srcVMDir "${srcDir}/vm")
-   set(platformName "unix")
-   set(targetPlatform "${platformsDir}/${platformName}")
-   set(crossDir "${platformsDir}/Cross")
-   set(platformVMDir "${targetPlatform}/vm}")
-   set(outputDir "/home/tty/usr/src/smalltalk/CMake.oscog/cogspurVMMaker/oscogvm/cmake.products/squeak.cog.v3")
-   set(externalModulesDir "${outputDir}")
- 
- EOF
- 
- The file contains CMake ''set'' commands that bind a variable to a value. 
- 
- In this application, CMake commands are encapsulated as objects and the CMake Set command is no exception:
- 
- CMakeSet browse
- 
- Taking the set(platformName,"unix") command as an example, we see the rationale for sublcassing this construct to the platform specific subclasses.
- 
- 
- There is nothing for us to do here, HOWEVER, we will be customizing some variables that compose this. For example:
- set(srcDir "some path to a source directory") can take any of the below directory names:
- 
- nsspur64src
- nsspursrc
- nsspurstack64src
- nsspurstacksrc
- nssrc
- spur64src
- spursistasrc
- spursrc
- spurstack64src
- spurstacksrc
- src
- stacksrc
- 
- 
- 
- 
- 
- 
- 
- 
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>cogitClass (in category 'pages') -----
- cogitClass
- 	^HelpTopic
- 		title:'cogitClass'
- 		contents:
- '
- write me.
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>compilingLinkingSetup (in category 'pages') -----
- compilingLinkingSetup
- 	^HelpTopic
- 		title:'Compiling and Linking Setup'
- 		contents:
- 'In your concrete configuration''s ''compiling'' protocol contains the methods that you must customize for your Configuration
- 
- cmakeAddDefinitionsBuild
- cmakeCFlagsBuild
- externalLibsBuild
- linkerFlags
- 
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>configGenerateByTemplate (in category 'pages') -----
- configGenerateByTemplate
- 	^HelpTopic
- 		title:'config generate by template'
- 		contents:
- '
- write me: generate by template is in several places. including the unix config and the vm and plugin generators
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>configureAbstractBaseClass (in category 'pages') -----
- configureAbstractBaseClass
- 	^HelpTopic
- 		title:'Configure Abstract Base Class'
- 		contents:
- 'Abstract Base Classes contain configuration information for a specific platform.
- 
- Let''s start from the top and work are way down. evaluate:
- 
- CPlatformConfigForSqueak browseHierarchy
- 
- CPlatformConfigForSqueak is a fairly involved class, but focusing on the protocol ''cmake directory'' for now, we see a bunch of dirFOO methods.
- 
- selectinng: 
- 
- CPlatformConfigForSqueak >>dirLinux32x86
- 	^''cmake.build.linux32x86'' 
- 
- We see the top-level directory for our new platform specific build. 
- 
- The next level down in our hierarchy is SqueakUnixConfig which contains configuration info specific to Unix platforms. An example being: 
- 
- SqueakUnixConfig>>platformName
- 	^self unixPlatformName
- 
- 
- The next level down is our Abstract Base Class for our specific variant of Unix--specifically Linux32x86Config.
- 
- The methods in this class contain system wide configuratin information for this Platform. On a mature platform tree, this class''s configuration should be rock-solid. However, as of 2014.12.09, the Abstract Base Class has not been configured correctly and I must set it up here. 
- 
- Setting it up is not difficult and an existing Abstract Base Class can provide a good starting point. However, a familiarity with the design patterns of the Configurations is helpful (particularly the Redirect Method pattern)
- 
- HelpBrowser openOn: CMakeVMMakerSqueakDesignPatternsHelp
- 
- 
- 
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>createTheConfiguration (in category 'pages') -----
- createTheConfiguration
- 	^HelpTopic
- 		title:'Create the Configuration'
- 		contents:
- 'Our new Concrete Configuration must be created as a subclass of our Platform''s Abstract Base Class.
- 
- SInce I am creating a Squeak Cog Spur config for the CMakeVMMakerSqueak-Linux64X86-32BitCompatibility Platform I choose the name:
- 
- Linux64x86w32BitSqueakCogSpurConfig.
- 
- (For a discussion on naming conventions evaluate:
- HelpBrowser openOn: CMakeVMMakerSqueakOverviewHelp
- )
- 
- To create it, I must subclass the Abstract Base Class for my Platform like so:
- 
- Linux64x86w32BitConfigUsrLib subclass: #Linux64x86w32BitSqueakCogSpurConfig
- 	instanceVariableNames: ''
- 	classVariableNames: ''
- 	poolDictionaries: ''
- 	category: ''CMakeVMMakerSqueak-Linux64X86-32BitCompatibility''
- 
- However, being lazy, I am going to copy an existing Configuration that is similar to what I want. 
- 
- Today I choose Linux64x86w32BitSqueakCogV3Config from the  CMakeVMMakerSqueak-Linux64X86-32BitCompatibility Platform category
- 
- I copy the class and then change its name, parent and class category to get:
- 
- Linux64x86w32BitConfigUsrLib subclass: #Linux64x86w32BitSqueakCogSpurConfig
- 	instanceVariableNames: ''
- 	classVariableNames: ''
- 	poolDictionaries: ''
- 	category: ''CMakeVMMakerSqueak-Linux64X86-32BitCompatibility''
- 
- 
- I then query by Builder to see if it sees the new Configuration in the platform:
- 
- SqueakLinux64x86w32CompatBuilder configurationsCategory
- -->  ''CMakeVMMakerSqueak-Linux64X86-32BitCompatibility''
- 
- SqueakLinux64x86w32CompatBuilder  availableBuildConfigurations  
- -->  a SortedCollection(#Linux64x86w32BitSqueakCogSpurConfig #Linux64x86w32BitSqueakCogV3Config)
-    "Here we see our new Configuration is visible to the Builder"
- 
- SqueakLinux64x86w32CompatBuilder  unAvailableBuildConfigurations
- -->  a SortedCollection(#Linux64x86w32BitConfigUsrLib #Linux64x86w32BitConfigUsrLib32)  "Our Abstract Base Classes are not available to be built"
- 
- SqueakLinux64x86w32CompatBuilder availableBuildTypesFor: #Linux64x86w32BitSqueakCogSpurConfig
- --> an OrderedCollection(#build #buildAssert) "The Configuration I copied has two Build Types coded and available."
- 
- 
- SqueakLinux64x86w32CompatBuilder  sourceDirectoryFor:#Linux64x86w32BitSqueakCogSpurConfig
- -->  "src"                                                        "Where the vm source code is located (we will be changing this)"
- 
- My new configuration is correctly named and in the correct place. 
- 
- At this point I re-run all my Tests.
- TestRunner open
-  For me, all tests pass.
- 
- In the next topic we cover how to hide our new Configuration from a builder. 
- 
- '
- !

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>customizePlugins (in category 'pages') -----
- customizePlugins
- 	^HelpTopic
- 		title:'customize Plugins'
- 		contents:
- 'We can customize which plugins we want on our configuration by overriding our platform''s defaultExternalPlugins and defaultInternalPlugins methods.
- 
- The default set can be further customized according to buildType if desired via the externalPlugins[BuildType] and internalPlugins[BuildType] redirect pattern
- 
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>customizeVMDrivers (in category 'pages') -----
- customizeVMDrivers
- 	^HelpTopic
- 		title:'Specify VM Drivers'
- 		contents:
- 'The SqueakUnixConfig contains the unverisal list of VM Drivers for *nix.
- 
- In our concrete Configuration, we need to specify which ones we want for out build.
- 
- We do this by overloading the SqueakUnixConfig>>customizeVMDrivers method.
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>dirBuildLanguageVMMM (in category 'pages') -----
- dirBuildLanguageVMMM
- 	^HelpTopic
- 		title:'Specify dirBuildLanguageVMMM'
- 		contents:
- '
- SystemNavigation new browseAllImplementorsOf: #dirBuildLanguageVMMM localTo:CPlatformConfigForSqueak.
- 
- We scroll down to our Linux64x86w32BitSqueakCogSpurConfig which we copied from the existing Linux64x86w32BitSqueakCogV3Config.
- 
- Looking at the dirBuildLanguageVMMM it initially reads (due to the copying of the existing class)
- 
- dirBuildLanguageVMMM
- 	^self squeakCogV3
- 
- Since this is a configuration for Squeak Cog Spur, I modify the method to return
- 
- dirBuildLanguageVMMM
- 	^self squeakCogSpur
- 
- 
- As a sanity check, I verify that the method squeakCogSpur exists...
- 
- SystemNavigation new browseAllImplementorsOf: #squeakCogSpur
- 
- And we see the method exists and will return the sting ''squeak.cog.spur''.
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>dirSource (in category 'pages') -----
- dirSource
- 	^HelpTopic
- 		title:'Specify Source Directory'
- 		contents:
- '
- Eliot''s VMMaker.oscog package outputs c-source code to varios directories depending ont he vm type.
- 
- SystemNavigation new browseAllImplementorsOf: #dirSource localTo:CPlatformConfigForSqueak.
- 
- Evaluating the above, we see that the CPlatformConfigForSqueak lists the available source directories.
- 
- The string values for these things are hard-coded in CPlatformConfigForSqueak in the ''cmake source names'' category.
- 
- ToolSet browse: CPlatformConfigForSqueak category: ''cmake source names''
- 
- For our Linux64x86w32BitSqueakCogSpurConfig we choose ''spursrc'' as our dirSource return value
- 
- dirSource
- 	^self spursrc
- 
- which you can test here.
- 
- (Linux64x86w32BitSqueakCogSpurConfig basicNew) dirSource
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>excludingConfigFromBuilds (in category 'pages') -----
- excludingConfigFromBuilds
- 	^HelpTopic
- 		title:'Excluding a Config From Builds'
- 		contents:
- 'Configurations can hide themselves from , or make themselves visible to Builders via their ''excludeFromBuild'' method.
- 
- excludeFromBuild
- 	^false   "build this configuration"
- "	^true     do not build this configuration"   
- 
- In our case, the Builder shows us that Linux32x86SqueakCogSpurConfig is capable of being built (I had copied an existing, working Configuration):
- 
- SqueakLinux64x86w32CompatBuilder availableBuildConfigurations
- --> a SortedCollection(#Linux64x86w32BitSqueakCogSpurConfig #Linux64x86w32BitSqueakCogV3Config)
- 
- 
- To exclude it, override (or alter) the Configurations ''excludeFromBuild'' method
- 
- Linux64x86w32BitSqueakCogSpurConfig >>excludeFromBuild
- 	"over-ride to exclude yourself from a build"
- 	^true
- 
- And the Configuration is hidden from the Builder...
- 
- SqueakLinux64x86w32CompatBuilder availableBuildConfigurations
- -->  a SortedCollection(#Linux64x86w32BitSqueakCogV3Config)
- 
- 
- However, since I am developing locally, I need it to be visible to the Builder , so I set it as so:
- 
- Linux64x86w32BitSqueakCogSpurConfig >>excludeFromBuild
- 	"over-ride to exclude yourself from a build"
- 	^false
- 
- And my Builder can see it again...
- 
- SqueakLinux64x86w32CompatBuilder availableBuildConfigurations  
- -->  a SortedCollection(#Linux64x86w32BitSqueakCogSpurConfig #Linux64x86w32BitSqueakCogV3Config)
- 
- 
- N.B. tty. My opinion is that this is a weak way of doing this, but I have not thought through how to do this elegantly. 
- This functionality is included with an eye towards easing automated builds for all platforms and configurations.'!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>extraVMSettings (in category 'pages') -----
- extraVMSettings
- 	^HelpTopic
- 		title:'extraVMSettings'
- 		contents:
- 'SystemNavigation browseAllImplementorsOf: #extraVMSettings:
- 
- 
- In the CPlatformConfigForSqueak>>extraVMSettings: aMaker, we see the Method Redirect Pattern employed. Since this is for buildType #build, the method will re-route to self extraVMSettingsBuild:
- 
- SystemNavigation browseAllImplementorsOf: #extraVMSettingsBuild:
- 
- We see the CPLatformConfigForSqueak forces a subclass to implement it and the SqueakUnixConfig implements it.
- 
- In SqueakUnixConfig a CMakeAddCustomCommandOutput is created and initialized. 
- 
- CMakeAddCustomCommandOutput browse
- 
- The class comment says that: ''Add a custom build rule to the generated build system.''
- 
- 
- If you  look in the file  Cog/platforms/unix/config/verstamp you see that this is (looks like) the definition/implemenation of the command CMake 
- will invoke.
- 
- 
- Currently this is a platform level method. Honestly, I have no idea why it is there. (:
- 
- For our purposes, there is nothing we need to do.
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>firstCMakeGeneration (in category 'pages') -----
- firstCMakeGeneration
- 	"This method was automatically generated. Edit it using:"
- 	"a HelpBrowser edit: #firstCMakeGeneration"
- 	^HelpTopic
- 		title: 'First CMake Generation'
- 		contents: 
- 'For didactic purposes I am going to do a sanity check and generate CMake code from the configuration for the first time. 
- 
- If you are not familiar with the CMakeVMMakerSqueak naming conventions, please evaluate:
- HelpBrowser openOn: CMakeVMMakerSqueakOverviewHelp
- 
- On my system a copy of the Cog svn tree is located under my current working Squeak directory in the folder ''oscogvm".
- 
- It looks like this:
- 
- bash-4.2$ ls --width=1 ~/usr/src/smalltalk/CMake.oscog/cogspurVMMaker/oscogvm/
- README
- build
- build.linux32ARM
- build.linux32x86
- build.linux64x64
- build.macos32x86
- build.macos64x64
- build.win32x86
- history
- mkNamedPrims.sh
- nsspur64src
- nsspursrc
- nsspurstack64src
- nsspurstacksrc
- nssrc
- platforms
- processors
- products
- scripts
- sources
- spur64src
- spursistasrc
- spursrc
- spurstack64src
- spurstacksrc
- src
- stacksrc
- 
- What I want to do is see if my configuration will write its output to an appropriate CMake subfolder.
- 
- To do this,  I ask the Builder to configure my new configuration for a buildType and output its contents. I do so by evaluating:
- 
-  SqueakLinux64x86w32CompatBuilder 
- 	configureA: #Linux32x86SqueakCogSpurConfig forBuildType:#build; 
- 	enableMessageTracking: true;
- 	generateByTemplate.
- 
- 
- and look again 
- bash-4.2$ ls --width=1 usr/src/smalltalk/CMake.oscog/cogspurVMMaker/oscogvm/
- CHANGES
- LICENSE
- README
- build
- build.linux32ARM
- build.linux32x86
- build.linux64x64
- build.macos32x86
- build.macos64x64
- build.win32x86
- cmake.build.linux64x86w32BitCompatibility  <--Here is the directory created by my configuration. 
- history
- ....
- 
- Above we see that a new cmake.build.linux64x86w32BitCompatibility   directory has been created. Let''s look at its contents
- 
-  tree -d  ~/usr/src/smalltalk/CMake.oscog/cogspurVMMaker/oscogvm/cmake.build.linux64x86w32BitCompatibility/
- `-- squeak.cog.v3                                               <--We will be changing this later as we want a squeak.cog.spur directory, not a V3 directory
-     `-- build                                                         <--our build type is #build
-         |-- ADPCMCodecPlugin
-         |-- AsynchFilePlugin
-         |-- B2DPlugin
-         |-- BMPReadWriterPlugin
-         |-- BitBltPlugin
-         |-- CroquetPlugin
-         |-- DSAPrims
-         |-- DropPlugin
-         |-- FFTPlugin
-         |-- FileCopyPlugin
-         |-- FilePlugin
-         |-- FloatArrayPlugin
-         |-- FloatMathPlugin
-         |-- JoystickTabletPlugin
-         |-- Klatt
-         |-- LargeIntegers
-         |-- LocalePlugin
-         |-- MIDIPlugin
-         |-- Matrix2x3Plugin
-         |-- MiscPrimitivePlugin
-         |-- Mpeg3Plugin
-         |-- SecurityPlugin
-         |-- SerialPlugin
-         |-- SocketPlugin
-         |-- SoundCodecPrims
-         |-- SoundGenerationPlugin
-         |-- SoundPlugin
-         |-- StarSqueakPlugin
-         |-- SurfacePlugin
-         |-- ZipPlugin
-         |-- vm-display-X11
-         |-- vm-display-null
-         |-- vm-sound-ALSA
-         `-- vm-sound-null
- 
- ...etc
- We see that the configuration has output a CMake build tree and we have done a sanity check. 
- 
- Next we take stock of what we have accomplished and preview the remaining tasks.
- 
- !!' readStream nextChunkText!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>forTheImpatient (in category 'pages') -----
- forTheImpatient
- 	^HelpTopic
- 		title:'For the impatient'
- 		contents:
- 'Here is the TL;DR synopsis of the methods* I implemented or overrode in creating the Linux64x86w32BitSqueakCogSpurConfig.
- 
- A step-by-step exposition begins on  the next page.
- 
- dirBuildLanguageVMMM
- specifyProductDirectories
- cmakeCFlags  
- cmakeAddDefinitions
- cmakeIncludePath
- cmakeLibraryPath
- compilerFlags
- cmakeAddDefinitions
- preferredIncludes
- setGlobalOptionsAfterDetermineSystem:
- cmakeSetSourceFilesProperties
- externalLibs
- cmakeAddExecutableNameOptionSource:
- customizeVMPlugins
- specifyingPlugins
- 
- 
- *If the method uses the Method Redirect Pattern then (in most instances) the method to modify will be for the buildType. ie. ''methodnameBuildType''
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>generatePluginConfigs (in category 'pages') -----
- generatePluginConfigs
- 	^HelpTopic
- 		title:'generatePluginConfigs'
- 		contents:
- 'This method iterates over a collection of InterpreterPlugin subclasses and asks each class to populate itself with some basic information and write out its own CMakeLists.txt in a directory named after the plugin name.
- 
- The processing is a bit complicated, but the setup is easy.
- 
- The collections of  plugin classes are stored in our Configuration. We cover that next in Specifying Plugins'!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>identifyBuilder (in category 'pages') -----
- identifyBuilder
- 	^HelpTopic
- 		title:'Identify Builder'
- 		contents:
- 'My new Configuration will be managed by a Builder.
- 
- Builders are located in the CMakeVMMakerSqueak-Builder class category.
- 
- Builders are subclasses of SqueakCMakeVMMakerAbstractBuilder.
- SqueakCMakeVMMakerAbstractBuilder browseHierarchy
- 
- Builders are named according to the Platform they manage.
- 
- (For a discussion on naming conventions evaluate:
- HelpBrowser openOn: CMakeVMMakerSqueakOverviewHelp
- )
- 
- Builders manage configurations for one Platform in one  class category.
- 
- 
- My platform is Linux Linux64x86 with 32 bit compatability libs stored in /usr/lib (other linux use /usr/lib32 for this.)
- 
- I suspect that the  SqueakLinux64x86w32CompatBuilder as the Builder that will manage my new configuration.
- 
- I confirm this by sending it the ''configurationsCategory'' message as shown below:
- 
- SqueakLinux64x86w32CompatBuilder configurationsCategory 
- -->''CMakeVMMakerSqueak-Linux64X86-32BitCompatibility''                    <---this is the correct class category for my Platform.
- 
- This is correct Builder for my new Configuration. 
- 
- I can query  the Builder for some more information:
- 
- SqueakLinux64x86w32CompatBuilder  availableBuildConfigurations
-   a SortedCollection(#Linux64x86w32BitSqueakCogV3Config)   <--A Cog V3 configuration exists. 
- 
- SqueakLinux64x86w32CompatBuilder  unAvailableBuildConfigurations 
- --> a SortedCollection(#Linux64x86w32BitConfigUsrLib #Linux64x86w32BitConfigUsrLib32)
-  <--these are platform specific Abstract Base Classes. Abstract Base Classes cannot be built, hence they are unavailable.
- 
- SqueakLinux64x86w32CompatBuilder  buildDirectory 
- -->''cmake.build.linux64x86w32BitCompatibility''                     <--this matches my platform
- 
- We will be using the SqueakLinux64x86w32CompatBuilder in tandem with Tests during Configuration development.'
- 
- !

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>identifyPlatform (in category 'pages') -----
- identifyPlatform
- 	^HelpTopic
- 		title:'Identify Platform'
- 		contents:
- 'My target platform is 64 bit Linux on X86 with 32 bit compatibility libraries stored in /usr/lib.
- 
- I identify my Platform in the existing CMakeVMMakerSqueak-xyz class categories.  
- 
- 
- If I wanted a configuration for MacOSX32x86, I would place my configuration in CMakeVMMakerSqueak-MacOSX32x86.
- If SunOSx3x86 then CMakeVMMakerSqueak-SunOS32x86.
- etc.
- 
- For a discussion on naming conventions evaluate:
- HelpBrowser openOn: CMakeVMMakerSqueakOverviewHelp
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>identifyPlatformAbstractBaseClass (in category 'pages') -----
- identifyPlatformAbstractBaseClass
- 	^HelpTopic
- 		title:'Identify Abstract Base Class '
- 		contents:
- 'My new configuration must be a subclass of my Platform''s Abstract Base Class. 
- 
- A Platform Abstract Base Class encapsulates common platform information. 
- 
- In CMakeVMMakerSqueak-Linux64X86-32BitCompatibility class category I see two Abstract Base Classes (typically there is only one). They are:
- 
- Linux64x86w32BitConfigUsrLib 
- Linux64x86w32BitConfigUsrLib32
- 
- The Suffixes ''UsrLib'' and ''UsrLib32'' refer to the location of the 32 bit compatablity libs. 
- On my system they are in /usr/lib,  so I choose  Linux64x86w32BitConfigUsrLib as my Abstract Base Class
- 
- Examples of Abstract Base Classes in other class categories  include:
- 
- CMakeVMMakerSqueak-BSD32x86                                -> SqueakBSD32x86Config
- CMakeVMMakerSqueak-IA32-Bochs                               -> SqueakIA32BochsConfig
- CMakeVMMakerSqueak-IOS                                           -> SqueakIOSConfig
- CMakeVMMakerSqueak-IOS                                           -> SqueakIOSConfig
- CMakeVMMakerSqueak-Linux32ARMv6                          -> Linux32ARMv6Config
- CMakeVMMakerSqueak-Linux64x64                              -> Linux64x64Config
- CMakeVMMakerSqueak-MacOSPowerPC                        -> SqueakMacOSXPowerPCConfig
- CMakeVMMakerSqueak-MacOSX32x86                          -> SqueakMacOSX32x86Config
- CMakeVMMakerSqueak-SunOS32x86                            -> SqueakSunOS32x86Config
- CMakeVMMakerSqueak-Win32x86                                 -> SqueakWin32x86Config
- 
- I can identify the Abstract Base Class in several ways
- 
- 1. It is a  topmost class in the class heirarchy for that platform/class category
- 2. It is named after its platform
- 3. It answers #true to the message isAbstractBaseClass
- Linux64x86w32BitConfigUsrLib  isAbstractBaseClass 
- --> true
- 
- In this workflow example I ideduce that the  AbstractBaseClass for my Platform is Linux64x86w32BitConfigUsrLib'!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>key (in category 'accessing') -----
- key
- 	^'CMakeVMMakerSqueakStepByStepNewConfigurationHelp'!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>methodRedirectPattern (in category 'pages') -----
- methodRedirectPattern
- 	^HelpTopic
- 		title:'Review of Method Redirect Pattern'
- 		contents:
- 'The CPlatformConfigForSqueak provides methods that must be implemented at some level in the CPlatformConfigForSqueak hierarchy. 
- The design pattern is heavily used and you can get a sense of its scope by evaluating:
- 
- ToolSet browseMessageCategory: ''cmake buildType redirects''  inClass:CPlatformConfigForSqueak
- 
- The naming of the redirect methods follows a consistent pattern.
- 
- fooBuild;
- fooBuildAssert
- fooBuildAssertITimerHeartbeat
- fooBuildDebug
- fooBuildDebugITimerHeartbeat
- fooBuildITimerHeartbeat
- fooBuildMultiThreaded
- fooBuildMultiThreadedAssert
- fooBuildMultiThreadedDebug
- fooNoBuildType
- 
- Where the suffix to ''foo'' denotes a specific buildType out of the available pool specified here:
- 
- SqueakCMakeVMMakerAbstractBuilder allBuildTypes
- 
- 
- The CPlatformConfigForSqueak either (rarely) implements or  requires that at least one of these methods are implemented as such:
- 
- fooBuild
- 	 self subclassResponsibility
- 
- 
- At the same time, it does not require that all of them be implemented. It accomplishes this by defaulting to  the ''fooBuild'' method:
- 
- fooBuildAssertITimerHeartbeat
-   ^ self fooBuild
- 
- You can see the ''foo'' pattern here in the ''cmakeAddDefinitions'' method
- 
- SystemNavigation new browseAllImplementorsOf: #cmakeAddDefinitionsBuildMultiThreadedAssert localTo: CPlatformConfigForSqueak.
- 
- Most buildTypes are redirected to a default implementation. This default implementation is implemented at an appropriate level in the CPlatformConfigHeirarchy 
- 
- There are some redirect methods that are appropriate to CPlatformConfigForSqueak; for example:
- 
- SystemNavigation new browseAllImplementorsOf: #setGlobalOptionsBuild: localTo: CPlatformConfigForSqueak.   
- 
- Most methods are implemented lower in the hierarchy.
- 
- When we implement a Configuration, we are implementing and or overriding methods in CMakePlatformConfigForSqueak that are appropriate for our buildType. 
- 
- The Method Redirect Pattern is covered in detail in an existing Help topic.
- 
- HelpBrowser openOn: CMakeVMMakerSqueakDesignPatternsHelp
- 
- Invocation of the Method Redirect Pattern occurs in the VMGenerator. We cover that next.
- 
- '
- 
- !

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>overview (in category 'pages') -----
- overview
- 	^HelpTopic
- 		title:'Overview'
- 		contents:
- 'This Help Topic presents the workflow the author used in creating the  Squeak, Cog, Spur CMake configuration for a 64 bit Slackware 14.1 system.with 32 bit compatability libs in /usr/lib
- 
- Although some details will be different, the steps involved should be the same for any platform.'!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>pages (in category 'accessing') -----
- pages
- 
- "platformSources...cogitClass...src vs vmsrc"
- 	^#(
- platformSources
- cogitClass	
- vmsrc
- configGenerateByTemplate
- 	overview 
- tests 
- identifyPlatform 
- identifyPlatformAbstractBaseClass
- identifyBuilder
- createTheConfiguration
- excludingConfigFromBuilds
- setAvailableBuildTypes
- firstCMakeGeneration
- tackingStockOne
- cPlatformConfigForSqueak
- methodRedirectPattern
- theVMGenerator
- tackingStockTwo
- forTheImpatient
- specifyDirectories
- setGlobalOptions
- cmakePrefixPath
- cmakeIncludePath
- cmakeLibraryPath
- cmakeIncludeModules
- cmakeCFlags
- cmakeAddDefinitions
- cmakeWriteDirectoriesDotCmake
- cmakeIncludeDirectories
- preferredIncludes
- standardIncludes
- setGlobalOptionsAfterDetermineSystem
- extraVMSettings
- setCoreSources
- setPlatformSources
- setCrossSources
- setExtraSources
- cmakeSetSourceFilesProperties
- cmakeListAppendLINKLIBSelements
- cmakeAddExecutableNameOptionSource
- setExecutableOutputPath
- addVMPlugins
- generatePluginConfigs
- specifyPlugins
- 
- processThirdpartyLibraries
- processPlugins
- postBuildActions
- 
- setConfigurationDirectory
- compilingLinkingSetup
- customizeVMDrivers
- 
- aNoteOnFoo
- )
- 
- !

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>platformSources (in category 'pages') -----
- platformSources
- 	^HelpTopic
- 		title:'platformSources'
- 		contents:
- 'write me
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>postBuildActions (in category 'pages') -----
- postBuildActions
- 	^HelpTopic
- 		title:'postBuildActions:'
- 		contents:
- 'postBuildActions: implements the Method Redirect pattern.
- 
- ToolSet browse: CPlatformConfigForSqueak selector: #postBuildActions:
- 
- Since the configuration is configured for buildType: #build the method redirect pattern will redirect to
- 
- SystemNavigation browseAllImplementorsOf: #postBuildActionsBuild:
- 
- We see in CPlatformConfigForSqueak that a sublcass must implement it via ''self subclassResponsibility''.
- 
- The platform Config SqueakUnixConfig implements this. It can be over-ridden or extended as needed.
- 
- We have nothing new to do here.
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>preferredIncludes (in category 'pages') -----
- preferredIncludes
- 	^HelpTopic
- 		title:'preferredIncludes'
- 		contents:
- 'SystemNavigation browseAllImplementorsOf: #preferredIncludes
- 
- CPlatformConfig browseHierarchy
- 
- As of CMakeVMMakerSqueak-tty.114 the method is a legacy method from the pharo CPlatformConfig. It is expect it (and this help page!!) will go away on a refactoring pass when the dependency on the pharo package is removed.
- 
- 
- In the CPlatformConfigForSqueak>>preferredIncludes, we see the Method Redirect Pattern employed. Since this is for buildType #build, the method will re-route to self preferredIncludesBuild.
- 
- SystemNavigation browseAllImplementorsOf: #preferredIncludesBuild
- 
- We see that #preferredIncludesBuild  is subclassed and implemented below the the platform level and down at the architecture/library location, one level above our new configuration.
- 
- Linux64x86w32BitConfigUsrLib browseHierarchy
- 
- The method itself creates a CMakeIncludeDirectories CMake template 
- 
- CMakeIncludeDirectories browse
- 
- The class comment tells us that we can add custom include directories for CMake to use.
- 
- The CMake template class initializes itself with some default data, which you can print out here:
- 
- (CMakeIncludeDirectories new) content
- 
- Since this is handled for us one level above our new configuration, we will leave this one untouched.  If it turns out that we need to include some other directories, we can override the method.'!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>processPlugins (in category 'pages') -----
- processPlugins
- ^HelpTopic
- 		title:'Process Plugins'
- 		contents:
- 'SystemNavigation browseAllImplementorsOf: #processPlugins:
- 
- This method is inhereted from the pharo code. I do not fully understand the reasoning behind it. I expect it will be refactored or rewritten.
- See the method comment in 
- SystemNavigation browseAllImplementorsOf: #initializeConfigDotCmakeFiles
- 
- Presently it does (at least) three things.
- 
- First, it adds plugin information to the master CMakeLists.txt file typically the add_subdirectory(''PluginName'') cmake command.
- 
- Second, it adds plugin information to the master CMakeLists.txt file from the CMakePluginGeneratorForSqueak>>configDotSomePluginName group of methods
- 
- 
- SystemNavigation browseAllImplementorsOf: #configDotFilePlugin
- 
- 
- Third it generates the sqNamedPrims.h file reproduced below.
- 
- bash-4.2$ cat sqNamedPrims.h 
- /* This is automatically generated file using CVMMaker on 9 May 2016 2:26:20.906098 pm */
- extern sqExport vm_exports[];
- extern sqExport os_exports[];
- extern sqExport ADPCMCodecPlugin_exports [];
- extern sqExport AsynchFilePlugin_exports [];
- extern sqExport B2DPlugin_exports [];
- extern sqExport BitBltPlugin_exports [];
- extern sqExport BMPReadWriterPlugin_exports [];
- extern sqExport CroquetPlugin_exports [];
- extern sqExport ZipPlugin_exports [];
- extern sqExport DropPlugin_exports [];
- extern sqExport DSAPrims_exports [];
- extern sqExport FFTPlugin_exports [];
- extern sqExport FileCopyPlugin_exports [];
- extern sqExport FilePlugin_exports [];
- extern sqExport FloatArrayPlugin_exports [];
- extern sqExport FloatMathPlugin_exports [];
- extern sqExport JoystickTabletPlugin_exports [];
- extern sqExport Klatt_exports [];
- extern sqExport LargeIntegers_exports [];
- extern sqExport Matrix2x3Plugin_exports [];
- extern sqExport MIDIPlugin_exports [];
- extern sqExport MiscPrimitivePlugin_exports [];
- extern sqExport Mpeg3Plugin_exports [];
- extern sqExport SecurityPlugin_exports [];
- extern sqExport SerialPlugin_exports [];
- extern sqExport SocketPlugin_exports [];
- extern sqExport SoundCodecPrims_exports [];
- extern sqExport SoundPlugin_exports [];
- extern sqExport StarSqueakPlugin_exports [];
- extern sqExport SurfacePlugin_exports [];
- extern sqExport LocalePlugin_exports [];
- 
- sqExport *pluginExports[] = {
-         vm_exports,
-         os_exports,
- ADPCMCodecPlugin_exports,
- AsynchFilePlugin_exports,
- B2DPlugin_exports,
- BitBltPlugin_exports,
- BMPReadWriterPlugin_exports,
- CroquetPlugin_exports,
- ZipPlugin_exports,
- DropPlugin_exports,
- DSAPrims_exports,
- FFTPlugin_exports,
- FileCopyPlugin_exports,
- FilePlugin_exports,
- FloatArrayPlugin_exports,
- FloatMathPlugin_exports,
- JoystickTabletPlugin_exports,
- Klatt_exports,
- LargeIntegers_exports,
- Matrix2x3Plugin_exports,
- MIDIPlugin_exports,
- MiscPrimitivePlugin_exports,
- Mpeg3Plugin_exports,
- SecurityPlugin_exports,
- SerialPlugin_exports,
- SocketPlugin_exports,
- SoundCodecPrims_exports,
- SoundPlugin_exports,
- StarSqueakPlugin_exports,
- SurfacePlugin_exports,
- LocalePlugin_exports,
- NULL
- 
- 
- 
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>processThirdpartyLibraries (in category 'pages') -----
- processThirdpartyLibraries
- 	^HelpTopic
- 		title:'Process Third Party Libraries'
- 		contents:
- 'SystemNavigation browseAllImplementorsOf: #processThirdpartyLibraries
- 
- I have no idea what this does. It exists in the pharo codebase. 
- 
- If I do figure out its utility, then the processing architecture will be similar or identical to the Plugin processing.
- 
- i.e. Libraries will be represented by objects which will have the responsibility of generating ''stuff''.
- 
- 
- 
- .'!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>setAvailableBuildTypes (in category 'pages') -----
- setAvailableBuildTypes
- 	^HelpTopic
- 		title:'Setting Available Build Types'
- 		contents:
- 'Configurations  inform Builders what BuildTypes they support. via the availableBuildTypes method
- 
- Here is my Builder asking my new Configuration what build types it supports (remember, this Configuration was copied, so it has been configured already)
- 
- SqueakLinux64x86w32CompatBuilder availableBuildTypesFor: #Linux64x86w32BitSqueakCogSpurConfig
- -->  an OrderedCollection(#build #buildAssert)
- 
- 
- In our Abstract Base Class (Which, you recall cannot be built )for our Platform, we default to no build types.
- 
- Linux64x86w32BitConfigUsrLib>>availableBuildTypes
-  	 ^SqueakCMakeVMMakerAbstractBuilder  default  noBuildTypes
- 
- 
- To get an idea of what buildTypes are available system wide evaluate
- SqueakCMakeVMMakerAbstractBuilder  default  allBuildTypes 
- -->an OrderedCollection(#build #buildAssert #buildAssertITimerHeartbeat #buildDebug #buildDebugITimerHeartbeat #buildITimerHeartbeat #buildMultiThreaded #buildMultiThreadedAssert #buildMultiThreadedDebug #buildNone)
- 
- 
- To set the available build types for a Concrete Configurations we override the AbstactBaseClass''s method and SUBTRACT OUT what we do not want. Like so:
- 
- Since I am starting simple, I want my configuration to build a vanilla build. To do this I remove all but #build buildType like so
- 
- Linux64x86w32BitSqueakCogSpurConfig >> availableBuildTypes 
- 	^SqueakCMakeVMMakerAbstractBuilder  default  allBuildTypes copyWithoutAll: #( #buildAssert #buildAssertITimerHeartbeat #buildDebug #buildDebugITimerHeartbeat #buildITimerHeartbeat #buildMultiThreaded #buildMultiThreadedAssert #buildMultiThreadedDebug #buildNone)
- 
- 
- As I code more build types in my configuration, I subtract out 
- 
- Linux32x86SqueakCogV3Config >> availableBuildTypes 
- 	^SqueakCMakeVMMakerAbstractBuilder  default  allBuildTypes copyWithoutAll: #(  #buildMultiThreadedDebug #buildNone)
- 
- With the result that my Builder shows the removed items as Available Build Types:
- 
- SqueakLinux32x86Builder availableBuildTypesFor: #Linux32x86SqueakCogV3Config 
- --> an OrderedCollection(#build #buildAssert #buildAssertITimerHeartbeat #buildDebug #buildDebugITimerHeartbeat #buildITimerHeartbeat #buildMultiThreaded #buildMultiThreadedAssert)
- 
- Since I will only be developing the #build buildType for now, I put it as so:
- 
- Linux32x86SqueakCogV3Config>>availableBuildTypes 
- 	^SqueakCMakeVMMakerAbstractBuilder  default  allBuildTypes copyWithoutAll: #( #buildAssert #buildAssertITimerHeartbeat #buildDebug #buildDebugITimerHeartbeat #buildITimerHeartbeat #buildMultiThreaded #buildMultiThreadedAssert #buildMultiThreadedDebug #buildNone)
- 
- 
- and verify it is correct:
- 
- SqueakLinux32x86Builder availableBuildTypesFor: #Linux32x86SqueakCogV3Config 
- -->an OrderedCollection(#build)
- 
- 
- *N.B. tty. In my opinion, this is a weak design on my part. as it relies on the developer to set it up. If there is an elegant way to do this , I am for it.
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>setConfigurationDirectory (in category 'pages') -----
- setConfigurationDirectory
- 	^HelpTopic
- 		title:'Set Configuration Directory'
- 		contents:
- '
- Need the squeak.cog.spur directory here.
- 
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>setCoreSources (in category 'pages') -----
- setCoreSources
- 	^HelpTopic
- 		title:'setCoreSources'
- 		contents:
- 'SystemNavigation browseAllImplementorsOf: #setCoreSources:
- 
- We see that this is a top-level Configuration method that writes a CMake Set(foo, bar) construct.
- 
- There is nothing for us to do here.'
- 
- 
- !

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>setCrossSources (in category 'pages') -----
- setCrossSources
- 	^HelpTopic
- 		title:'setCrossSources'
- 		contents:
- 'SystemNavigation browseAllImplementorsOf: #setCrossSources:
- 
- We see that this is a top-level Configuration method that writes a CMake Set(foo, bar) construct.
- 
- There is nothing for us to do here.'
- !

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>setExecutableOutputPath (in category 'pages') -----
- setExecutableOutputPath
- 	"This method was automatically generated. Edit it using:"
- 	"a HelpBrowser edit: #setExecutableOutputPath"
- 	^HelpTopic
- 		title: 'setExecutableOutputPath'
- 		contents: 
- 'SystemNavigation browseAllImplementorsOf: #setExecutableOutputPath
- 
-  We see that this is implemtented in CPlatformConfigForSqueak.
- 
- It creates a CMakeSet object and sets the ''EXECUTABLE_OUTPUT_PATH'' variable to self outputDir
- 
- SystemNavigation browseAllImplementorsOf: #outputDir
- 
- Which redirects to 
- 
- (CPlatformConfigForSqueak basicNew) outputDirName
- 
- The #outputDir method is a legacy method from the pharo code. It should be factored out after the dependency on the pharo code is removed.!!' readStream nextChunkText!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>setExtraSources (in category 'pages') -----
- setExtraSources
- 	^HelpTopic
- 		title:'setExtraSources'
- 		contents:
- 'SystemNavigation browseAllImplementorsOf: #setExtraSources
- 
- We see that this is a top-level Configuration method that writes a CMake Set(foo, bar) construct.
- 
- There is nothing for us to do here.
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>setGlobalOptions (in category 'pages') -----
- setGlobalOptions
- 	^HelpTopic
- 		title:'setGlobalOptions: self'
- 		contents:
- 'For this method there is nothing to do. Here is why.
- 
- Let''s start by seeing what classes implement the method
- 
- SystemNavigation browseAllImplementorsOf: #setGlobalOptions:
- 
- We see that  CPlatformConfigForSqueak implements it (The other classes are from the pharo package. These will go way after the dependency on the pharo code is factored out).
- 
- Looking at it, we see that the method  implements the Method Redirect pattern 
- 
- Since we have configured for buildType: #build, the Method Redirect Pattern will invoke the  setGlobalOptionsBuild: aMaker method.
- 
- So we look at the implementors of it..
- 
- SystemNavigation browseAllImplementorsOf: #setGlobalOptionsBuild:
- 
- We see only CPlatformConfigForSqueak implements the method. Reading the method comments, we see that it generates CMakeLists.txt commands that span all platforms. 
- 
- No subclasses of CPlatformConfigForSqueak override it.
- 
- There is nothing for us to override here. Let''s move on.
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>setGlobalOptionsAfterDetermineSystem (in category 'pages') -----
- setGlobalOptionsAfterDetermineSystem
- 	^HelpTopic
- 		title:'setGlobalOptionsAfterDetermineSystem'
- 		contents:
- 'SystemNavigation browseAllImplementorsOf: #setGlobalOptionsAfterDetermineSystem:
- 
- 
- In the CPlatformConfigForSqueak>>setGlobalOptionsAfterDetermineSystem: aMaker, we see the Method Redirect Pattern employed. Since this is for buildType #build, the method will re-route to self setGlobalOptionsAfterDetermineSystemBuild
- 
- SystemNavigation browseAllImplementorsOf: #setGlobalOptionsAfterDetermineSystemBuild:
- 
- We see the CPLatformConfigForSqueak forces a subclass to implement it and the SqueakUnixConfig implements it.
- 
- In SqueakUnixConfig a CMakeSet is created and initialized. You can see the resultant output by printing the below expression:
- 
- ((CMakeSet new) variable:''CMAKE_C_COMPILER'' value:''gcc'') content
- 
- Currently this is a platform level method, however, we can envision it being set lower when ''gcc'' is not the default compiler.
- 
- For our purposes, there is nothing we need to do.
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>setPlatformSources (in category 'pages') -----
- setPlatformSources
- 	^HelpTopic
- 		title:'setPlatformSources'
- 		contents:'
- SystemNavigation browseAllImplementorsOf: #setPlatformSources:
- 
- We see that this is a top-level Configuration method that writes a CMake Set(foo, bar) construct.
- 
- There is nothing for us to do here.'
- !

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>specifyDirectories (in category 'pages') -----
- specifyDirectories
- 	^HelpTopic
- 		title:'Specify Directories'
- 		contents:
- 'Our new Configuration must correctly name two directory trees.
- 
- The first is  the cmake.build.* directory tree where the generated CMake output is placed.
- The second is the cmake.products/* directory tree where the compiled vm is placed.
- 
- 
- Correctly naming these is a courtesy you should extend as the system grows*.
- 
- 
- For this particular Configuration, we want a cmake.build.* directory that looks like this:
- 
- oscogvm/cmake.products/cmake.build.linux64x86w32BitCompatibility/squeak.cog.spur
- 
- 
- and we want a cmake.products/* directory that looks like this:
- 
- oscogvm/cmake.products/cmake.build.linux64x86w32BitCompatibility/squeak.cog.spur/build
- 
- 
- Each directory in those trees is accessible viathe the CPlatformConfigForSqueak in the ''cmake directory'' category.
- 
- ToolSet browseClass: CPlatformConfigForSqueak category: ''cmake directory''.
- 
- There are two method variants.
- 
- The first variant is hardcoded in the method itself. For example the platform directories are stored as...
- 
- dirLinux32Armv6
- 	^''cmake.build.linux32armv6''
- 
- or, for our configuration
- 
- dirLinux64x86w32BitCompatibility
- 	^''cmake.build.linux64x86w32BitCompatibility''
- 	
- The second variant accesses the  name of a buildType directory via the SqueakCMakeVMMakerAbstractBuilder (do a printIt or doIt).
- 
- dirBuild
- 	^SqueakCMakeVMMakerAbstractBuilder default buildTypeAndDirectoryInfo at: #build	
- 
- 
- 
- Each part of the directory tree is contained/accessible via these methods. It is our job to select the corect ones for our purposes.
- 
- Here is an example of mapping this output directory path
- ''oscogvm/cmake.products/cmake.build.linux64x86w32BitCompatibility/squeak.cog.spur/build''
- 
- to the methods that output each part.
- 
- |c|
- c:=(CPlatformConfigForSqueak basicNew). 
- (c oscogvm), ''/'', (c dirOutput), ''/'', (c dirLinux64x86w32BitCompatibility), ''/'', (c squeakCogSpur), ''/'', (c dirBuild)
- 
- 
- The methods corresponding to each of the above directory names are:
- 
- topDir
- dirOutput
- dirBuildPlatform
- dirBuildLanguageVMMM
- buildType (not a method,this is a private instance variable in the configuration)
- 
- The first two, topDir and dirOutput are contained in CPlatformConfigForSqueak
- dirBuildPlatform is contained at the platform level
- 
- SystemNavigation new browseAllImplementorsOf: #dirBuildPlatform localTo:CPlatformConfigForSqueak.
- 
- dirBuildLangaugeVMMM is at the specific Configuration level
- SystemNavigation new browseAllImplementorsOf: #dirBuildLanguageVMMM localTo:CPlatformConfigForSqueak.
- 
- buildType is set when we configure the Configuration for a particular buildType and is stored in the SqueakCMakeVMMakerAbstractBuilder at its initialization.
- 
- SystemNavigation new browseAllImplementorsOf: #initializeBuildTypeAndDirectoryInfo
- 
- It is this values that the CPlatformConfigForSqueak access via dirBuild, dirBuildAssert etc...
- SystemNavigation new browseAllImplementorsOf: #dirBuild
- 
- 
- Similarly, the build directory tree 
- ''oscogvm/cmake.build.linux64x86w32BitCompatibility/squeak.cog.spur/build/''
- 
- has methods corresponding to each of the above directory names. they are:
- 
- topDir
- dirBuildPlatform
- dirBuildLanguageVMMM
- buildType (not a method,this is a private instance variable in the configuration)
- 
- It follows then, that for our Configuration we need to make the method dirBuildLanguageVMMM return ''squeak.cog.spur''.
- 
- We cover that  in the next Help page.
- 
- 
- *The naming convention is straightforward and convered in the ''Naming Convetions'' page of the Developer Guide Overview Help.
- 
- 
- (HelpBrowser openOn: CMakeVMMakerSqueakOverviewHelp) model
- showTopicThat: [:topic | topic key = #namingConventions].
- 
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>specifyPlugins (in category 'pages') -----
- specifyPlugins
- 	^HelpTopic
- 		title:'Specify Plugins'
- 		contents:
- 'We can specify which plugins we want on our configuration by overriding our platform''s defaultExternalPlugins and defaultInternalPlugins methods.
- 
- The default set can be further customized according to buildType if desired via the externalPlugins[BuildType] and internalPlugins[BuildType] redirect pattern
- 
- We will cover only the internalPlugins scenario here. The methodology is exactly the same for externalPlugins.
- 
- Let''s look first at the defaultInternalPlugins
- 
- SystemNavigation browseAllImplementorsOf: #defaultInternalPlugins
- 
- Looking at the Linux64x86w32BitConfigUsrLib we see that it just returns a default collection of class names. 
- 
- The defaultInternalPlugins message is  typically sent from the internalPlugins[buildType] method.
- 
- SystemNavigation browseAllImplementorsOf: #internalPlugins
- 
- Here we see that CPlatformConfigForSqueak implements the message redirect pattern.
- 
- SystemNavigation browseAllImplementorsOf: #internalPluginsBuild
- 
- In CPlatformConfigForSqueak >> internalPluginsBuild forces subclasses to implement the method.
- 
- Looking at 
- 
- SystemNavigation browseAllImplementorsOf: #internalPluginsBuildMultiThreadedDebug
- we see the default is to return the default list provided in internalPluginsBuild.
- 
- This enables configurations to customize their plugins with a good degree of granularity should we want to change the plugins we use based on buildType while keeping things simple in the default case.
- 
- To summarize, a Configuration specifies what plugins it wants to build (either internal or external) by modifying or overriding the list of Plugin class names stored in defaultInternalPlugins or defaultExternalPlugins by overriding the internalPlugins[buildType] method or externalPlugins[buildType] method
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>standardIncludes (in category 'pages') -----
- standardIncludes
- 	^HelpTopic
- 		title:'standardIncludes'
- 		contents:
- 'As of CMakeVMMakerSqueak-tty.114 the method is a legacy method from the pharo CPlatformConfig. It is expect it (and this help page!!) will go away on a refactoring pass when the dependency on the pharo package is removed.
- 
- 
- SystemNavigation browseAllImplementorsOf: #standardIncludes
- 
- CPlatformConfig browseHierarchy
- 
- In the CPlatformConfigForSqueak>>standardIncludes, we see the Method Redirect Pattern employed. Since this is for buildType #build, the method will re-route to self standardIncludesBuild.
- 
- SystemNavigation browseAllImplementorsOf: #standardIncludesBuild
- 
- The SqueakUnixConfig just writes some debug messages. 
- 
- There is nothing for us to do here.'!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>tackingStockOne (in category 'pages') -----
- tackingStockOne
- 	^HelpTopic
- 		title:'Taking Stock'
- 		contents:
- 'Let''s take stock of where we are.
- 
- At this point, we have 
- 1. Created a Configuration for a specific platform, language, VM and memory model .
- 2. Invoked the appropriate  Builder for that Configuration asking it to ...
- 	2.a configure itself for a specific BuildType and 
- 	2.b asked it to ouput its content to a specific directory.
- 3. Confirmed that the Configuration outputs its data.
- 
- The remainder of our task is customizing our Configuration so that the generated data correctly builds as the intention revealing name of the Configuration implies. I.e. we expect a Linux64x86w32BitSqueakCogSpurConfig, when configured for the buildType  #build to generate CMake (and other) files that in fact, creates a release version of a squeak.cog.spur vm that runs on Linux64 with 32 bit compat libs stored in /usr/lib.
- 
- Before we dive into customizing our new Configuration,  we step back to gain some perspective so that if there are problems, you know where to look. 
- 
- We will start by a quick summary of..
- 
- 1. The root Configuration class CPlatformConfigForSqueak
- 2. The ''method redirect''  design pattern.
- 3. The CMakeVMGeneratorForSqueak class
- 
- 
- After that, we will take stock again and proceed with the customization of our example Linux64x86w32BitSqueakCogSpurConfig 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>tackingStockTwo (in category 'pages') -----
- tackingStockTwo
- 	^HelpTopic
- 		title:'Taking Stock II'
- 		contents:
- 'To recap, at this point, we have 
- 1. Created a Configuration for a specific platform, language, VM and memory model .
- 2. Invoked the appropriate  Builder for that Configuration asking it to ...
- 	2.a configure itself for a specific BuildType and 
- 	2.b asked it to ouput its content to a specific directory.
- 3. Confirmed that the Configuration outputs its data.
- 
- We know that
- 
- Configuration is performed at the highest appropriate Configuration with fine-tuning at the lower Configuration levels.
- The Method Redirect Pattern is implemented in CPlatformConfigForSqueak. It is boilerplate code.
- A specific Configuration may override a Method Redirect method for a particular build type to provide custom output
- The CMakeVMGeneratorForSqueak takes our Configuration as input via the Visitor pattern and  executes the Method Redirect methods in a predictable way based on the Configurations buidType..
- 
- 
- The remainder of this Example Workflow will be the customization of the Linux64x86w32BitSqueakCogSpurConfig and generating a working build.
- 
- To do this by taking each statement in the CMakeVMGeneratorForSqueak>>generateByTemplate cascade in turn.
- 
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>tests (in category 'pages') -----
- tests
- 	^HelpTopic
- 		title:'Tests'
- 		contents:
- 'We start with Tests.
- 
- The Tests are in class category CMakeVMMakerSqueak-Tests.
- 
- They are:
- 
- CMakeVMMakerSqueakBuildersTest
- CMakeVMMakerSqueakCommonConfigTest
- CMakeVMMakerSqueakMacintoshConfigTest
- CMakeVMMakerSqueakRedirectMethodsTest
- CMakeVMMakerSqueakRedirectMethodsWithArgTest
- CMakeVMMakerSqueakUnixConfigTest
- CMakeVMMakerSqueakWindowsConfigTest
- 
- As of 2014.12.09 all tests pass. 
- 
- As we create the Configuration these tests will be an important check on our work and we will return to them often.'!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>theVMGenerator (in category 'pages') -----
- theVMGenerator
- 	^HelpTopic
- 		title:'The CMakeVMGeneratorForSqueak class'
- 		contents:
- 'Before we move onto setting the most common directives and flags in the Concrete Configuration, lets take a quick look at the class and  method that actually generates the CMake files for us. 
- 
- CMakeVMGeneratorForSqueak browseHierarchy
- 
- 
- CMakeVMGeneratorForSqueak implements the Visitor Design pattern. It takes as input a Configuration and it operates on that Configuration in a methodical manner.
- 
- The CMakeVMGeneratorForSqueak has in instance variable named ''config''. This variable is our Configuration.
- 
- The methodical operation on the Configuration occur in its generateByTemplate method.
- 
- To see this, look at the generateByTemplate method and the long cascade that starts with:
- 
- 	config 
- 		setGlobalOptions: self;    
- 		cmakePrefixPath;
- 		cmakeIncludePath;.....
- 
- 
- Here you see the generator iterating over the CPlatformConfigForSqueak Method Redirect methods.
- 
- SystemNavigation new browseAllImplementorsOf: #cmakeIncludePath localTo: CPlatformConfigForSqueak.
- 
- Here you see that based on the Configurations buildType, the appropriate Redirect Method out of 
- cmakeIncludePathBuild
- cmakeIncludePathBuildAssert
- cmakeIncludePathBuildAssertITimerHeartbeat
- cmakeIncludePathBuildDebug
- cmakeIncludePathBuildDebugITimerHeartbeat
- cmakeIncludePathBuildITimerHeartbeat
- cmakeIncludePathBuildMultiThreaded
- cmakeIncludePathBuildMultiThreadedAssert
- cmakeIncludePathBuildMultiThreadedDebug
- cmakeIncludePathNoBuildType
- 
- is executed.
- 
- 
- For debugging and troubleshooting you new Configuration, CMakeVMGeneratorForSqueak>>generateByTemplate enables you to step through CMake generation in an entirely predictable way.
- 
- Let''s recap next.
- '
- 
- !

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>vmsrc (in category 'pages') -----
- vmsrc
- 	^HelpTopic
- 		title:'vmsrc'
- 		contents:
- '
- write me.
- '!

Item was removed:
- CMakeVMMakerSqueakConfigurationsHelp subclass: #CMakeVMMakerSqueakStepByStepNewPlatformHelp
- 	instanceVariableNames: ''
- 	classVariableNames: ''
- 	poolDictionaries: ''
- 	category: 'CMakeVMMakerSqueak-Help'!
- 
- !CMakeVMMakerSqueakStepByStepNewPlatformHelp commentStamp: '<historical>' prior: 0!
- A CMakeVMMakerSqueakNewConfigurationStepByStepHelp itemizes the steps needed to create a new build configuration.
- 
- HelpBrowser openOn: CMakeVMMakerSqueakNewConfigurationStepByStepHelp!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewPlatformHelp class>>bookName (in category 'accessing') -----
- bookName 
- 	^'Example Workflow: New Platform'!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewPlatformHelp class>>key (in category 'accessing') -----
- key
- 	^'CMakeVMMakerSqueakStepByStepNewPlatformHelp'!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewPlatformHelp class>>overview (in category 'pages') -----
- overview
- 	^HelpTopic
- 		title:'Overview'
- 		contents:
- ' Write me.
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewPlatformHelp class>>pages (in category 'accessing') -----
- pages
- 	^#(overview step1)!

Item was removed:
- ----- Method: CMakeVMMakerSqueakStepByStepNewPlatformHelp class>>step1 (in category 'pages') -----
- step1
- 	^HelpTopic
- 		title:'Step 1. '
- 		contents:
- ' Write me
- '!

Item was added:
+ CMakeVMMakerSqueakTutorialsHelp subclass: #CMakeVMMakerSqueakTutorialEndUserHelp
+ 	instanceVariableNames: ''
+ 	classVariableNames: ''
+ 	poolDictionaries: ''
+ 	category: 'CMakeVMMakerSqueak-Help'!
+ 
+ !CMakeVMMakerSqueakTutorialEndUserHelp commentStamp: 'tty 2/28/2015 13:25' prior: 0!
+ A CMakeVMMakerSqueakTerseGuideHelp provides a simple walkthrough of a build using the CMakeVMMaker package.
+ 
+ 
+ !

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialEndUserHelp class>>bookName (in category 'accessing') -----
+ bookName
+ 	^'Tutorial: End User'!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialEndUserHelp class>>configureAndGenerate (in category 'pages') -----
+ configureAndGenerate
+ 	^HelpTopic
+ 		title: 'Configure and Generate'
+ 		contents:
+ ' The final step is to instruct the Configuration to configure itself for an available buildType , enable/disable debugging trace messages and generate the output.
+ 
+ SqueakLinux64x86w32CompatBuilder 
+ 	configureA: #Linux32x86SqueakCogV3Config forBuildType: #build;   
+ 	enableMessageTracking: true;
+ 	generateByTemplate.
+ 
+ Running the above cascade provides no feedback to the user. If all went well, there should be a CMake build tree as discussed on the next page.
+ 
+ 
+ 
+ '
+ 
+ 
+ !

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialEndUserHelp class>>examiningOutput (in category 'pages') -----
+ examiningOutput
+ 	"This method was automatically generated. Edit it using:"
+ 	"a HelpBrowser edit: #examiningOutput"
+ 	^HelpTopic
+ 		title: 'Examining Output'
+ 		contents: 
+ 'TODO: tty fix apperent but in build directory as it is outputing to DO THIS NEXT /cmake.build.linux64x86w32BitCompatibility/squeak.cog.v3/build/ 
+ and not cmake.build.linux32_64x86
+ 
+ Examining the output requires two queries (both intuitive, via the intention revealing names of the Builder and Configuration)
+ 
+ First, we ask the builder where it has its Configurations put their output:
+ 
+ SqueakLinux64x86w32CompatBuilder buildDirectory 
+ -->  ''cmake.build.linux32_64x86''
+ 
+ 
+ The Linux32x86SqueakCogV3Config writes itself to a directory that matches its [cmake.Platform]/[Language].[VM].[MemoryModel]/[BuildType]
+ 
+ On my system that is:
+ 
+ ~./..../cogVMMaker/oscogvm/cmake.[Platform]/[Language].[VM].[MemoryModel]/build
+ i.e.
+ ~./..../cogVMMaker/oscogvm/cmake.build.linux32_64x86/squeak.cog.v3/build
+ 
+ I open a terminal and navigate to that directory:
+ 
+ cd ~./..../cogVMMaker/oscogvm/cmake.build.linux32_64x86/squeak.cog.v3/build
+ 
+ and list the contents 
+ 
+ bash-4.2$ ls
+ ADPCMCodecPlugin      LICENSE.txt            SurfacePlugin
+ AsynchFilePlugin      LargeIntegers          Utils.cmake
+ B2DPlugin             LocalePlugin           ZipPlugin
+ BMPReadWriterPlugin   MIDIPlugin             build.cmake
+ BitBltPlugin          Matrix2x3Plugin        build.sh
+ CMakeLists.txt        MiscPrimitivePlugin    config.cmake
+ CroquetPlugin         Mpeg3Plugin            config.in
+ DSAPrims              PLUGINS.txt            directories.cmake
+ DropPlugin            Plugins.cmake          sqNamedPrims.h
+ FFTPlugin             SecurityPlugin         testDoubleWordAlignment.c
+ FileCopyPlugin        SerialPlugin           testDoubleWordOrder.c
+ FilePlugin            SocketPlugin           testLanginfoCodeset.c
+ FloatArrayPlugin      SoundCodecPrims        vm-display-X11
+ FloatMathPlugin       SoundGenerationPlugin  vm-display-null
+ JoystickTabletPlugin  SoundPlugin            vm-sound-ALSA
+ Klatt                 StarSqueakPlugin       vm-sound-null
+ ....
+ 
+ 
+ (NOTE TODO tty: build a query to have a configuration return its build directory path.)
+ 
+ !!' readStream nextChunkText!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialEndUserHelp class>>invokeCMake (in category 'pages') -----
+ invokeCMake
+ 	^HelpTopic
+ 		title: 'Invoke cmake'
+ 		contents:
+ 'The next step is to tell CMake to create the native build files.
+ 
+ On linux the commands are:
+ 
+ cmake .                    <----N.B. note the ''dot'' after the cmake
+ make
+ 
+ As a convenience, the commands are duplicated in a generated ''build.sh'' file .  (I have had some wierd issues with running it directly, so I just run the commands therein)
+ bash-4.2$ cat build.sh 
+ #!!/usr/bin/env bash
+ export CC=gcc
+ export CXX=g++
+ cmake .
+ make
+ 
+ 
+ When CMakeVMMakerSqueak is ported to different platforms, then the ''make'' command could be replaced by a different native build system command.
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialEndUserHelp class>>overview (in category 'pages') -----
+ overview
+ 	^HelpTopic
+ 		title: 'Overview'
+ 		contents:
+ 'This tutorial covers how to generate a CMake build tree using an existing Builder and an existing Configuration. If you need a new Builder or Configuration see the Developer Guide.
+ 
+ On a given Platform, a platform specific Builder configures a platform specific Configuration for a buildType and instructs it to  write its CMake output to that Configuration''s build directory.
+ 
+ This terse example shows a typicall use-case of the tools.
+ 
+ In this terse example, I want to build a Cog VM for Squeak with the V3 memory model. on a SlackwareLinux64 with 32 bit Compatability libs platform.  
+ 
+ To do this, I ...
+ 
+ 1. Select the Builder for my platform.  
+ 2. Query the Builder
+ 3  Select a Configuration
+ 4 Instruct  the Configuration (via the Builder) to configure itself for a builtType
+ 5. Instruct the Configuration (via the Builder) to enable message tracking (useful for debugging output)
+ 6. Instruct the Configuration (via the Builder) to generate its CMake output.
+ 7 
+ 8 Invoke the native build system.
+ 9. Test the generated VM.
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialEndUserHelp class>>pages (in category 'accessing') -----
+ pages
+ 	^#(overview selectBuilder queryBuilder selectConfiguration configureAndGenerate examiningOutput invokeCMake testDrive)!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialEndUserHelp class>>priority (in category 'pages') -----
+ priority
+ 
+ 	^ 3!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialEndUserHelp class>>queryBuilder (in category 'pages') -----
+ queryBuilder
+ 	^HelpTopic
+ 		title: 'Query the Builder'
+ 		contents:
+ 'I can query the Builder for information on available Configurations and BuildTypes
+ 
+ SqueakLinux64x86w32CompatBuilder 
+ 	availableBuildConfigurations.
+ 
+ SqueakLinux64x86w32CompatBuilder 
+ 	allBuildTypes.
+ 
+ SqueakLinux64x86w32CompatBuilder 
+ 	availableBuildTypesFor:(SqueakLinux64x86w32CompatBuilder availableBuildConfigurations at:1).
+ 
+ SqueakLinux64x86w32CompatBuilder 
+ 	buildDirectory.
+ 
+ The ''queries'' protocol of the SqueakCMakeVMMakerAbstractBuilder contains additional queries.
+ 
+ SqueakCMakeVMMakerAbstractBuilder class browse.
+ '
+ 
+ 
+ !

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialEndUserHelp class>>selectBuilder (in category 'pages') -----
+ selectBuilder
+ 	^HelpTopic
+ 		title: 'Select a Builder'
+ 		contents:
+ 'I select the appropriate Builder from the CMakeVMMakerSqueak-Builder category for my platform; in my case it is the SqueakLinux64x86w32CompatBuilder.
+ 
+ 
+ SqueakLinux64x86w32CompatBuilder browseHierarchy.
+ 
+ SqueakCMakeVMMakerAbstractBuilder browseHierarchy.
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialEndUserHelp class>>selectConfiguration (in category 'pages') -----
+ selectConfiguration
+ 	^HelpTopic
+ 		title: 'Select a Configuration'
+ 		contents:
+ 'The Configuration Linux64x86w32BitSqueakCogV3Config is available for my platform. (i.e. a developer has done the work of encapsulating the custom CMake for us).
+ 
+ As stated before, I can view what Configurations are available for a platform by asking the platform Builder what it has available:
+ 
+ SqueakLinux64x86w32CompatBuilder 
+ 	availableBuildConfigurations.
+ 
+ As of this writing the Linux64x86w32BitSqueakCogV3Config is available and I decide to use it.
+ 
+ Note that the class name of the Configuration is intention-revealing. It is a Configuration for the Linux 64 platform with 32 Bit compatibility libs that encapsulates the CMake required to build the Squeak Cog V3 virtual machine. From this convention, The organization of configurations is straight-forward:
+ 
+ CPlatformConfigForSqueak  browseHierarchy
+ 
+ Linux64x86w32BitSqueakCogV3Config browseHierarchy
+ '
+ 
+ 
+ !

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialEndUserHelp class>>testDrive (in category 'pages') -----
+ testDrive
+ 	^HelpTopic
+ 		title: 'Test Driving the VM'
+ 		contents:
+ 'The Cog svn tree contains a directory named ''products'' where it stores its make output.
+ 
+ The CMakeVMMakerSqueak system mirrors that with a cmake.products directory that is created at the same level.
+ 
+ 
+ The newly generated VM is stored in a subdirectory of ''cmake.products" that mimics the [Language][VM][MemoryModel] naming convention of the Configuration
+ 
+ Since I built a #Linux32x86SqueakCogV3Config the cog vm is placed in the cmake.products/squeak.cog.v3  directory.
+ 
+ TODO: Add a message name showing where this is customized.
+ '!

Item was added:
+ CMakeVMMakerSqueakTutorialsHelp subclass: #CMakeVMMakerSqueakTutorialNewBuilderHelp
+ 	instanceVariableNames: ''
+ 	classVariableNames: ''
+ 	poolDictionaries: ''
+ 	category: 'CMakeVMMakerSqueak-Help'!
+ 
+ !CMakeVMMakerSqueakTutorialNewBuilderHelp commentStamp: '<historical>' prior: 0!
+ A CMakeVMMakerSqueakNewConfigurationStepByStepHelp itemizes the steps needed to create a new build configuration.
+ 
+ HelpBrowser openOn: CMakeVMMakerSqueakNewConfigurationStepByStepHelp!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewBuilderHelp class>>bookName (in category 'accessing') -----
+ bookName 
+ 	^'Tutorial: New Builder'!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewBuilderHelp class>>key (in category 'accessing') -----
+ key
+ 	^'CMakeVMMakerSqueakTutorialNewBuilderHelp'!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewBuilderHelp class>>overview (in category 'pages') -----
+ overview
+ 	^HelpTopic
+ 		title:'Overview'
+ 		contents:
+ 'WRITE ME
+ 
+ 
+ 
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewBuilderHelp class>>pages (in category 'accessing') -----
+ pages
+ 
+ 	^#(	overview )
+ 
+ !

Item was added:
+ CMakeVMMakerSqueakTutorialsHelp subclass: #CMakeVMMakerSqueakTutorialNewConfigurationHelp
+ 	instanceVariableNames: ''
+ 	classVariableNames: ''
+ 	poolDictionaries: ''
+ 	category: 'CMakeVMMakerSqueak-Help'!
+ 
+ !CMakeVMMakerSqueakTutorialNewConfigurationHelp commentStamp: 'tty 6/16/2014 12:19' prior: 0!
+ A CMakeVMMakerSqueakNewConfigurationStepByStepHelp itemizes the steps needed to create a new build configuration.
+ 
+ HelpBrowser openOn: CMakeVMMakerSqueakNewConfigurationStepByStepHelp!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>addVMPlugins (in category 'pages') -----
+ addVMPlugins
+ 	^HelpTopic
+ 		title:'addVMPlugins'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ addVMPlugins depends on custom configuration provided in our Configuration; the method depends on three other methods as described below 
+ 
+ VMPlugins are similar to built-in plugins yet are critical for running squeak on particular systems. 
+ 
+ The CMake configuration data needed for building them is encapsulated in sublcasses of CMakeVMPlugin.
+ 
+ CMakeVMPlugin browseHierarchy
+ 
+ You see that they are predominantly display and sound drivers.
+ 
+ The process of customization ''starts'' in the initialze method of CPlatformConfigForSqueak
+ 
+ ToolSet browse: CPlatformConfigForSqueak selector: #initialize
+ 
+ In CPlatformConfigForSqueak>>initializeVMDrivers an OrderedCollection of CMakeVMPlugin subclasses are initialzed and stored. This collection is the universe of possible vm plugins.
+ 
+ In our custom Configuration, we need a subset of that universe.  The CPlatformConfigForSqueak>>customizeVMDrivers forces this with a ''self subclassResponsibility''
+ 
+ In our  new Configuration we have this method already as we copied from an existing Configuration
+ 
+ ToolSet browse: Linux64x86w32BitConfigUsrLib selector: #customizeVMPlugins
+ 
+ We see that the code selects specific vm plugin templates from the universe of available ones and then customizes each one.
+ 
+ Taking Linux64x86w32BitConfigUsrLib>>customizeCMakeVMDisplayNull as an example...
+ 
+ ToolSet browse: Linux64x86w32BitConfigUsrLib selector: #customizeCMakeVMDisplayNull
+ 
+ We see that we set the sources, compiler definitions, flags, external libraries, linker flags and include directories needed to compile the vm plugin here.
+ 
+ So, if we have trouble with a vm plugin, we need to look in its customzeCMakeVMXYZ  method and fix it there.
+ 
+ These configurations are extracted from our Configuration and written out to that vm plugins directory and placed in its CMakeLists.txt file.
+ 
+ Here is an example of the CMakeLists.txt file for the vm-display-null plugin
+ 
+ bash-4.2$ cat oscogvm/cmake.build.linux64x86w32BitCompatibility/squeak.cog.v3/build/vm-display-null/CMakeLists.txt 
+ # This is automatically generated file using Linux64x86w32BitSqueakCogSpurConfig on 1 May 2016 8:40:02.153261 am
+   project (vm-display-null)
+   cmake_minimum_required(VERSION 2.8.12)
+   include (/home/wm/usr/src/smalltalk/CMake.oscog/cogspurVMMaker/oscogvm/cmake.build.linux64x86w32BitCompatibility/squeak.cog.v3/build/directories.cmake)
+   add_definitions(-DNDEBUG -DDEBUGVM=0  -DLSB_FIRST=1 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -DCOGMTVM=0)
+   add_definitions(-w -m32 -msse2 -O1)
+   add_definitions(-fPIC -DPIC)
+   set(sources ${targetPlatform}/vm-display-null/sqUnixDisplayNull)
+   add_library(vm-display-null  SHARED   ${sources})
+   include_directories(  ${crossDir}/plugins/FilePlugin ${targetPlatform}/plugins/B3DAcceleratorPlugin ${crossDir}/plugins/B3DAcceleratorPlugin)
+   set(LIBRARY_OUTPUT_PATH "/home/wm/usr/src/smalltalk/CMake.oscog/cogspurVMMaker/oscogvm/cmake.products/squeak.cog.v3")
+   target_link_libraries(vm-display-null  ${LINKLIBS})
+   set_target_properties(vm-display-null PROPERTIES PREFIX ""  SUFFIX ""  LINK_FLAGS "-w -m32 -msse2 -O1")
+ 
+ 
+ To modify the above output, we modify our Configuration''s customizeCMakeVMXyz methods . 
+ To add or remove a vm-plugin from our configuration, we edit the customizeVMPlugins method.
+ To expand the universe of available vm plugins, we modify the CMakeConfigForSqueak >>initializeVMDrivers method.
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>bookName (in category 'accessing') -----
+ bookName 
+ 	^'Tutorial: New Configuration'!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>builderConfigurationInteraction (in category 'pages') -----
+ builderConfigurationInteraction
+ 	^HelpTopic
+ 		title:'Builder Configuration Interaction'
+ 		contents:
+ 'Within the broad terms of this tutorial, you are here: 
+ 4. Interaction of the Builder and your Configuration
+ 
+ I can query  the Builder for  information about its Configurations:
+ 
+ SqueakLinux64x86w32CompatBuilder  availableBuildConfigurations
+   a SortedCollection(#Linux64x86w32BitSqueakCogV3Config)   <--A Cog V3 configuration exists. 
+ 
+ SqueakLinux64x86w32CompatBuilder  unAvailableBuildConfigurations 
+ --> a SortedCollection(#Linux64x86w32BitConfigUsrLib #Linux64x86w32BitConfigUsrLib32)
+ These two Configurations are platform specific Abstract Base Classes. Abstract Base Classes cannot be built, hence they are unavailable.
+ 
+ The Bulder can query Configurations about input and output directory paths it uses and/or creates:
+ 
+ SqueakLinux64x86w32CompatBuilder  buildDirectory 
+ -->''cmake.build.linux64x86w32BitCompatibility''                     <--this matches my platform
+ 
+ '
+ 
+ !

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>cPlatformConfigForSqueak (in category 'pages') -----
+ cPlatformConfigForSqueak
+ 	"This method was automatically generated. Edit it using:"
+ 	"a HelpBrowser edit: #cPlatformConfigForSqueak"
+ 	^HelpTopic
+ 		title: 'CPlatformConfigForSqueak'
+ 		contents: 
+ 'Within the broad outline of this tutorial, you are here: 
+ 7. Some high level classes and concepts
+ 	7.a  CPlatformConfigForSqueak
+ 
+ CPlatformConfForSqueak encapsulates CMake constructs.
+ CPlatformConfForSqueak encapsulates CMake constructs that are common to all computer platforms. 
+ 
+ Its child classes progressively specialized CMake constructs.
+ 
+ 
+ CPlatformConfigForSqueak browseHierarchy
+ 
+ The immediate children of CPlatformConfigForSqueak
+ 
+ SqueakMacintoshConfig 
+ SqueakUnixConfig
+ SqueakWindowsConfig
+ 
+ begin the specialization required for the Macintiosh , Unix and Windows machines. Adding a new platform, say VAX, is as easy as
+ CPlatformConfigForSqueak subclass:#SqueakVAXConfig and configure its relevant data/methods for that platform.
+ 
+ An example of Configuration customization at the platform level is in the executableType method.
+ 
+ SystemNavigation default browseMethodsWhoseNamesContain: ''executableType''
+ 
+ Here, we see that CPlatformConfForSqueak requires that a subclass implement it. The other subclasses may impliment it with an appropriate return value.
+ 
+ Configurations are further refined as we proceed down the heirarchy. 
+ 
+ SqueakMacOSX32x86Config browseHierarchy
+ 
+ Here we see a (stub) configuration for Mac OSX32 on the x86 processor. 
+ 
+ Our new Linux64x86w32BitSqueakCogSpurConfig configuration fits into its expected place under the Unix hierarchy.
+ 
+ Linux64x86w32BitSqueakCogSpurConfig browseHierarchy
+ 
+ The key and art of customizing our Linux64x86w32BitSqueakCogSpurConfig is to customize our Configuration at the appropriate level. 
+ Higher levels should provide existing, appropriate configuration. Our job is to then implement and customize at the finest level of customization.
+ 
+ To understand the how and why of customizing a Configuration, we turn to the heavily implemented design pattern I call the "Method Redirect Pattern".
+ 
+ We cover that next.
+ 
+ 
+ N.B. The ''Squeak'' prefix is unfortunate as it violates the naming convention. It is a holdover from initial attempts with the Pharo CMakeVMMaker code base.
+ I will attempt to remember to rename these after the Pharo dependency is removed.
+ 
+ 
+ 
+ CPlatformConfigForSqueak is a child of CPlatformConfig, the root Configuration in Pharo''''s CMakeVMMaker. 
+ 
+ This is temporary as I have decided to de-couple CMakeVMMakerSqueak from CMakeVMMaker.
+ 
+ ToolSet browseMessageCategory:''cmake'' inClass: CPlatformConfigForSqueak!!' readStream nextChunkText!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>cPlatformConfigForSqueakInitialize (in category 'pages') -----
+ cPlatformConfigForSqueakInitialize
+ 	^HelpTopic
+ 		title: 'Configuration Initialization'
+ 		contents: 
+ 'Within the broad outline of this tutorial, you are here: 
+ 	8. Customizing your Configuration.
+ 
+ 
+ 	ToolSet browse: CPlatformConfigForSqueak selector: #initialize
+ 	
+ The relevant section is..
+ 
+ 	self 
+ 		initializePlatformSources;
+ 		initializeVMPlugins;
+ 		customizeVMPlugins.
+ 			
+ We will take each in turn.	
+ '
+ 
+ 
+ !

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>cmakeAddDefinitions (in category 'pages') -----
+ cmakeAddDefinitions
+ 	^HelpTopic
+ 		title:'cmakeAddDefinitions'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ 
+ SystemNavigation browseAllImplementorsOf: #cmakeAddDefinitions
+ 
+ We see that the CPlatformConfigForSqueak routes the method based on the buildType #build via the Method Redirect pattern to cmakeAddDefinitionsBuild
+ 
+ SystemNavigation browseAllImplementorsOf: #cmakeAddDefinitionsBuild
+ 
+ We see that our Linux64x86w32BitSqueakCogSpurConfig already implements it due to our copying of an existing configuration.
+ 
+ We need to modify this for our Configuration. The current method (minus commented out elements) reads as:
+ 
+ 	definitions:=#(
+ 	 ''-DNDEBUG''          
+  	 ''-DDEBUGVM=0''
+ 	 '' -DLSB_FIRST=1''
+ 	 ''-D_GNU_SOURCE''
+  	 ''-D_FILE_OFFSET_BITS=64''
+  	 ''-DCOGMTVM=0'') . 
+ 
+ Like the cmakeCFlags method, we look at the mvm file 
+ 
+ cat ~/.../Cog/build.linux32x86/squeak.cog.spur/build/mvm
+ 
+ And see the 
+ 3.4.*)  OPT=''-g -O1 -fwrapv -DNDEBUG -DDEBUGVM=o'';;
+ *)              OPT=''-g -O2 -DNDEBUG -DDEBUGVM=0'';;
+ 
+ lines and the 
+ 
+ CFLAGS=''$OPT -msse2 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -DCOGMTVM=0'' \
+ 
+ Based on these mvm file details, I modify the method to read as such:
+ 
+ 	definitions:=#(
+ 	 ''-DNDEBUG''          
+  	 ''-DDEBUGVM=0''
+ 	 ''-D_GNU_SOURCE''
+  	 ''-D_FILE_OFFSET_BITS=64''
+  	 ''-DCOGMTVM=0'') .
+ 
+ To match the directives specified in the mvm file
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>cmakeAddExecutableNameOptionSource (in category 'pages') -----
+ cmakeAddExecutableNameOptionSource
+ 	^HelpTopic
+ 		title:'cmakeAddExecutableNameOptionSource:'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ SystemNavigation browseAllImplementorsOf: #cmakeAddExecutableNameOptionSource:
+ 
+ We see this is a top-level method implemented only by CPlatformConfigForSqueak
+ 
+ The method creates a new CMakeAddExecutableNameOptionSource template 
+ 
+ CMakeAddExecutableNameOptionSource browse
+ 
+ and the class comment says it "Add an executable to the project using the specified source files."
+ 
+ To get a sense of the CMake output print the following:
+ 
+ ((CMakeAddExecutableNameOptionSource new)
+ 			executableName: ''cog''
+ 			optionalproperty: ''''
+ 			sources: (OrderedCollection with: ''${coreSources} ${crossVMSources} ${platformVMSources} ${extraSources}'')) content
+ 
+ In looking at this, the exectuableName worries me.  I am not sure that ''cog'' is what we want.
+ 
+ Looking at it...
+ SystemNavigation browseAllImplementorsOf: #executableName
+ 
+ it is something we can customize or code if we need.
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>cmakeCFlags (in category 'pages') -----
+ cmakeCFlags
+ 	^HelpTopic
+ 		title:'cmakeCFlags'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ 
+ SystemNavigation browseAllImplementorsOf: #cmakeCFlags
+ 
+ We see that  CPlatformConfigForSqueak implements it
+ 
+ The method comment reads in part:
+ 
+ ''self deprecated: this catchall method has been split into dedicated methods: cmakePrefixPath cmakeIncludePath 	cmakeLibraryPath	cmakeIncludeModules;    cmakeCFlags;      ...''
+ 
+ 
+ And that this method will be refactored out of existence ''soon''.
+ 
+ Looking at it, we see that the method  implements the Method Redirect pattern 
+ 
+ Since we have configured for buildType: #build, the Method Redirect Pattern will invoke the  cmakeCFlagsBuild method.
+ 
+ So we look at the implementors of it..
+ 
+ SystemNavigation browseAllImplementorsOf: #cmakeCFlagsBuild
+ 
+ Here we see that our new Linux64x86w32BitSqueakCogSpurConfig configuration implements it (since we copied an existing Configuration that implemented it)
+ 
+ We now have something to customize.
+ 
+ We look at the line: cflags:= String streamContents: [:stream | (self compilerFlags) asStringOn: stream delimiter: '' '' ]. 
+ 
+ and see that our ''self compilerFlags'' method is used.
+ 
+ SystemNavigation browseAllImplementorsOf: #compilerFlags
+ 
+ These are flags to pass to the compiler. Take a look at the mwm file in the GNU config
+ 
+ cat ~/.../Cog/build.linux32x86/squeak.cog.spur/build/mvm
+ 
+ We see an OPT variable being populated...
+ 
+ 
+ 	OPT=''-g -O1 -fwrapv -DNDEBUG -DDEBUGVM=0'';;
+ 	OPT=''-g -O2 -DNDEBUG -DDEBUGVM=0'';;
+ esac
+ 
+ And later in the file we see the CFLAGS variable being populated with the $OPT variable and some other flags.
+ 
+ 	CC=''gcc -m32'' \
+ 	CXX=''g++ -m32'' \
+ 	CFLAGS=''$OPT -msse2 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -DCOGMTVM=0'' \
+ 	LIBS=''-lpthread -luuid'' \
+ 	LDFLAGS=-Wl,-z,now
+ 
+ That CFLAGS variable is what we are mimicing here. with some caveats...
+ 
+ The pharo code just dumped all that stuff into one method, whereas I split them up.
+ 
+ We are ommitting the Compiler defines like -D_GNU_SOURCE  as we will be setting those in cmakeAddDefinitions.
+ 
+ My current compilerFlags (minus commented out elements) method reads like this:
+ 
+ compilerFlags
+ 	^#(	''-w''
+ 		''-m32''
+ 		''-msse2''
+ 		''-O1'') 
+ 
+ 
+ checking my compiler version 
+ bash-4.2$ gcc --version
+ gcc (GCC) 4.8.2
+ Copyright (C) 2013 Free Software Foundation, Inc.
+ This is free software; see the source for copying conditions.  There is NO
+ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ 
+ I see I need some options from the    OPT=''-g -O1 -fwrapv -DNDEBUG -DDEBUGVM=0'' line
+  line 
+ 
+ 
+ Mimicing the mvm file, I modify it to read as such:
+ 
+ compilerFlags
+ 	^#(''-g''
+ 	     ''-O1''
+ 	     ''-fwrapv''
+ 	     ''-m32''
+ 	     ''-msse2''
+ 	) 
+ 
+ In doing this, I am congizant that I may have to return to this method as I fiddle around getting this configuration correct.
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>cmakeIncludeDirectories (in category 'pages') -----
+ cmakeIncludeDirectories
+ 	^HelpTopic
+ 		title:'cmakeIncludeDirectories'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ 
+ SystemNavigation browseAllImplementorsOf: #cmakeIncludeDirectories:
+ 
+ We see that the sole implementor of the method is the top level configuration CPlatformConfigForSqueak
+ 
+ The method creates an instance of the CMakeTemplate CMakeIncludeDirectories
+ 
+ CMakeIncludeDirectories browse
+ 
+ where the class comment tells us that it tells CMake to add extra ''include'' directories to the build.
+ 
+ Currently a variable placeholder is hard-coded in CMakeVMGeneratorForSqueak>>includeDirs
+ You can print the following to see them:
+ (CMakeVMGeneratorForSqueak new) includeDirs
+ 
+ And the generated CMake by printing the following:
+ 
+ ((CMakeIncludeDirectories new) dirs: (OrderedCollection with: (CMakeVMGeneratorForSqueak new) includeDirs)) content 
+ 
+ What you see when you print it are variable placeholders that CMake will populate with the value of CMake variables  ${crossDir}
+ , ${srcVMDir} and ${targetPlatform} that we will be defining or have already been defined in our configuration.
+ 
+ This is truly a global method and would only change if Eliot changed the layout of the underlying build structure.
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>cmakeIncludeModules (in category 'pages') -----
+ cmakeIncludeModules
+ 	^HelpTopic
+ 		title:'cmakeIncludeModules'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ 
+ CMake allows the user to include custom CMake library files (modules).  
+ This construct allows the developer to include those modules.
+ 
+ cmakeIncludeModules implements the Method Redirect pattern.
+ 
+ ToolSet browse: CPlatformConfigForSqueak selector: #cmakeIncludeModules
+ 
+ Since the configuration is configured for buildType: #build the method redirect pattern will redirect to
+ 
+ SystemNavigation browseAllImplementorsOf: #cmakeIncludeModulesBuild.
+ 
+ We see in CPlatformConfigForSqueak that a sublcass must implement it via ''self subclassResponsibility''.
+ 
+ We see that (as of this writing) the SqueakUnixConfig handles the method by including some custom modules
+ Utils.cmake
+ Plugins.cmake
+ TestBigEndian
+ CheckIncludeFile
+ CheckLibraryExists
+ CheckTypeSize
+ CheckFunctionExists
+ CheckVariableExists
+ CheckStructHasMember
+ FindPkgConfig
+ 
+ These Module wrap CMake constructs and can be thought of as CMake ''include files''. and they are implemented high in the Configuration platform hierarchy.
+ 
+ Our new Configuration need not override anything here.
+ 
+ Let''s move on...'!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>cmakeIncludePath (in category 'pages') -----
+ cmakeIncludePath
+ 	^HelpTopic
+ 		title:'cmakeIncludePath'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ 
+ cmakeIncludePath implements the Method Redirect pattern.
+ 
+ ToolSet browse: CPlatformConfigForSqueak selector: #cmakeIncludePath
+ 
+ Since the configuration is configured for buildType: #build the method redirect pattern will redirect to
+ 
+ SystemNavigation browseAllImplementorsOf: #cmakeIncludePathBuild
+ 
+ We see in CPlatformConfigForSqueak that a sublcass must implement it via ''self subclassResponsibility''.
+ 
+ We see that (as of this writing) the SqueakUnixConfig handles the method, but only for debug messages.
+ 
+ There is a possibility a  sub-platform will have include files in a non-standard directories and a specific Configuration
+ will have to implement this to generate appropriate CMake output. 
+ 
+ At this moment, we conclude we don''t need to. 
+ 
+ Since I am writing this help in tandem with generating a new Configuration, there is the possibility I am wrong and that I will need this.
+ 
+ Since I don''t know for a fact that it is, I leave it alone for now.'!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>cmakeLibraryPath (in category 'pages') -----
+ cmakeLibraryPath
+ 	^HelpTopic
+ 		title:'cmakeLibraryPath'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ cmakeLibraryPath implements the Method Redirect pattern.
+ 
+ ToolSet browse: CPlatformConfigForSqueak selector: #cmakeLibraryPath
+ 
+ Since the configuration is configured for buildType: #build the method redirect pattern will redirect to
+ 
+ SystemNavigation browseAllImplementorsOf: #cmakeLibraryPathBuild.
+ 
+ We see in CPlatformConfigForSqueak that a sublcass must implement it via ''self subclassResponsibility''.
+ 
+ We see that (as of this writing) the SqueakUnixConfig handles the method, but only for debug messages.
+ 
+ There is a possibility a  sub-platform will have libraries in a non-standard directories and a specific Configuration
+ will have to implement this to generate appropriate CMake output. 
+ 
+ At this moment, we conclude we don''t need to. 
+ 
+ Since I am writing this help in tandem with generating a new Configuration, there is the possibility I am wrong and that I will need this.
+ 
+ Since I don''t know for a fact that it is, I leave it alone for now.
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>cmakeListAppend: (in category 'pages') -----
+ cmakeListAppend:LINKLIBSelements
+ 	^HelpTopic
+ 		title:'cmakeListAppend:LINKLIBSelements'
+ 		contents:
+ '
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>cmakeListAppendLINKLIBSelements (in category 'pages') -----
+ cmakeListAppendLINKLIBSelements
+ 	^HelpTopic
+ 		title:'cmakeListAppendLINKLIBSelements'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ SystemNavigation browseAllImplementorsOf: #cmakeListAppend:elements:
+ 
+ We see this is a top-level method.
+ 
+ The method creates a new CMakeListAppend which according to the class comment ''I handle the APPEND functionality for the cmake list commmand.''.
+ 
+ Here we are appending libraries to link to the list LINKLIBS.
+ 
+ You can get a sense of the CMake output by evaluating.
+ 
+ ((CMakeListAppend new) list:''LINKLIBS'' elements:#((''-L/usr/lib'' ''-L/usr/lib/X11'' ''uuid'' ''ssl'' ''crypto'' ''m'' ''dl'' ''pthread'' ''SM'' ''ICE'' ''GL'' ''X11'' ''nsl''))) content
+ 
+ The list of libraries is available via the configurations ''externalLibs'' method. 
+ 
+ SystemNavigation browseAllImplementorsOf: #externalLibs
+ 
+ Which we see implements the Method Redirect pattern.
+ 
+ Since this is a #build buildType we look in 
+ 
+ SystemNavigation browseAllImplementorsOf: #externalLibsBuild 
+ 
+ And we see the CPlatformConfigForSqueak subclasses responsibility and that our new Linux64x86w32BitSqueakCogSpurConfig implements it as
+ 
+ externalLibsBuild
+ 	^self externalLibraries asOrderedCollection.
+ 
+ which is contained in its parent as
+ 
+ externalLibraries
+ 	^#(
+ 		     ''-L/usr/lib''
+ 		     ''-L/usr/lib/X11''
+ 		......
+ 		etc...
+ 	)
+ 		
+ 		
+ So, we see the ability to specify what libraries we want to link against in our configuration.
+ 
+ Where to do this in the Configuration heirarchy is a matter of judgement.
+ 
+ We will leave this one alone, bearing in mind that if we have a library linking problem, we have an idea where to look for it.		
+ 	'!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>cmakePrefixPath (in category 'pages') -----
+ cmakePrefixPath
+ 	^HelpTopic
+ 		title:'cmakePrefixPath'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ ToolSet browse: CPlatformConfigForSqueak selector: #cmakePrefixPath
+ 
+ cmakePrefixPath implements the Method Redirect pattern.
+ 
+ Since the configuration is configured for buildType: #build the method redirect pattern will redirect to
+ 
+ SystemNavigation browseAllImplementorsOf: #cmakePrefixPathBuild
+ 
+ We see in CPlatformConfigForSqueak that a sublcass must implement it via ''self subclassResponsibility''.
+ 
+ We see that (as of this writing) the SqueakUnixConfig handles the method.
+ 
+ We reason that this method generates  platform specific CMake output and our lower-level Configuration need not override it.
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>cmakeSetSourceFilesProperties (in category 'pages') -----
+ cmakeSetSourceFilesProperties
+ 	^HelpTopic
+ 		title:'cmakeSetSourceFilesProperties'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ This is a legacy method from the pharo system. I expect it to be refactored.
+ 
+ SystemNavigation browseAllImplementorsOf: #cmakeSetSourceFilesProperties
+ 
+ Here we see the Method Redirect Pattern
+ 
+ SystemNavigation browseAllImplementorsOf: #cmakeSetSourceFilesPropertiesBuild
+ 
+ We see that the CPlatformConfigForSqueak subclasses responsibility (scroll down past the method comment)
+ 
+ We also see that our new Linux64x86w32BitSqueakCogSpurConfig Configuration implements it.
+ 
+ I suspect this method will be refactored upwards. It appears to be passing distinct compiler flags to the cogit.c and sqUnixHeartbeat.c.
+ 
+ Let''s leave this one alone.
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>cmakeWriteDirectoriesDotCmake (in category 'pages') -----
+ cmakeWriteDirectoriesDotCmake
+ 	^HelpTopic
+ 		title:'cmakeWriteDirectoriesDotCmake'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ 
+ SystemNavigation browseAllImplementorsOf: #cmakeWriteDirectoriesDotCmake:
+ 
+ Here we see that the CPlatformConfigForSqueak forces subclasses to implement this .
+ 
+ This method sets some CMake variables to platform specific values and writes them to a file named ''directories.cmake''
+ 
+ Here is the directories.cmake file contents on my platform
+ 
+ bash-4.2$ cat directories.cmake 
+   set(topDir "/home/tty/usr/src/smalltalk/CMake.oscog/cogspurVMMaker/oscogvm")
+   set(buildDir "/home/tty/usr/src/smalltalk/CMake.oscog/cogspurVMMaker/oscogvm/cmake.build.linux64x86w32BitCompatibility/squeak.cog.v3/build")
+   set(thirdpartyDir "${buildDir}/thirdParty")
+   set(platformsDir "/home/tty/usr/src/smalltalk/CMake.oscog/cogspurVMMaker/oscogvm/platforms")
+   set(srcDir "/home/tty/usr/src/smalltalk/CMake.oscog/cogspurVMMaker/oscogvm/src")
+   set(srcPluginsDir "${srcDir}/plugins")
+   set(srcVMDir "${srcDir}/vm")
+   set(platformName "unix")
+   set(targetPlatform "${platformsDir}/${platformName}")
+   set(crossDir "${platformsDir}/Cross")
+   set(platformVMDir "${targetPlatform}/vm}")
+   set(outputDir "/home/tty/usr/src/smalltalk/CMake.oscog/cogspurVMMaker/oscogvm/cmake.products/squeak.cog.v3")
+   set(externalModulesDir "${outputDir}")
+ 
+ EOF
+ 
+ The file contains CMake ''set'' commands that bind a variable to a value. 
+ 
+ In this application, CMake commands are encapsulated as objects and the CMake Set command is no exception:
+ 
+ CMakeSet browse
+ 
+ Taking the set(platformName,"unix") command as an example, we see the rationale for sublcassing this construct to the platform specific subclasses.
+ 
+ 
+ There is nothing for us to do here, HOWEVER, we will be customizing some variables that compose this. For example:
+ set(srcDir "some path to a source directory") can take any of the below directory names:
+ 
+ nsspur64src
+ nsspursrc
+ nsspurstack64src
+ nsspurstacksrc
+ nssrc
+ spur64src
+ spursistasrc
+ spursrc
+ spurstack64src
+ spurstacksrc
+ src
+ stacksrc
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>compilingLinkingSetup (in category 'pages') -----
+ compilingLinkingSetup
+ 	^HelpTopic
+ 		title:'Compiling and Linking Setup'
+ 		contents:
+ 'In your concrete configuration''s ''compiling'' protocol contains the methods that you must customize for your Configuration
+ 
+ cmakeAddDefinitionsBuild
+ cmakeCFlagsBuild
+ externalLibsBuild
+ linkerFlags
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>configGenerateByTemplate (in category 'pages') -----
+ configGenerateByTemplate
+ 	^HelpTopic
+ 		title:'Config Generate By Template'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ A Configuration starts generating CMakeOutput when a Builder sends it the #generateByTemplate message.
+ 
+ ToolSet browse: SqueakCMakeVMMakerAbstractBuilder selector:#generateByTemplate
+  see the ''ifFalse:[config genrateByTemplate]] '' line.
+ 
+ SystemNavigation browseAllImplementorsOf: #generateByTemplate
+ 
+ Looking at the SqueakUnixConfig>>generateByTemplate we see the Configuration writes some CMake supporting files via some method calls
+ 
+ 		generatePluginsList;                                      
+ 		generateLicense;                                          
+ 		generateUtilsCmake;                                       
+ 		generatePluginsCmake;                                   
+ 		generateVmBuildCmake;                                  
+ 		generateVmConfigCmake;                               
+ 		generateVmConfigIn;                                  
+ 		generateTestDoubleWordAlignmentC;             
+ 		generateTestDoubleWordOrderC;
+ 		generateTestLanginfoCodesetC.
+ 
+ Each of the above writes a file to the build directory.  The contents of which are hard-coded on the class side of the CPlatformConfigForSqueak
+ 
+ For example the class method CPlatformConfigForSqueak>utilsCMake has some CMake Macros Ian wrote.
+ 
+ ToolSet browse: (CPlatformConfigForSqueak class) selector: #utilsCMake
+ 
+ This is high level stuff. It will probably be refactored once the CMake system matures.
+ 
+ For now, its enough to know it exists.
+ 
+ Looking at the SqueakWindowsConfig and SqueakMacintoshConfig in their generateByTemplate method, these calls do not (presently) exist.
+ 
+ ToolSet browse: SqueakWindowsConfig  selector: #generateByTemplate
+ ToolSet browse: SqueakMacintoshConfig  selector: #generateByTemplate
+ 
+ While you probably will not be modifying this, this IS part of customizating a Configuration should you need these things
+ 
+ '
+ !

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>configureAbstractBaseClass (in category 'pages') -----
+ configureAbstractBaseClass
+ 	^HelpTopic
+ 		title:'Configure Abstract Base Class'
+ 		contents:
+ 'Abstract Base Classes contain configuration information for a specific platform.
+ 
+ Let''s start from the top and work are way down. evaluate:
+ 
+ CPlatformConfigForSqueak browseHierarchy
+ 
+ CPlatformConfigForSqueak is a fairly involved class, but focusing on the protocol ''cmake directory'' for now, we see a bunch of dirFOO methods.
+ 
+ selectinng: 
+ 
+ CPlatformConfigForSqueak >>dirLinux32x86
+ 	^''cmake.build.linux32x86'' 
+ 
+ We see the top-level directory for our new platform specific build. 
+ 
+ The next level down in our hierarchy is SqueakUnixConfig which contains configuration info specific to Unix platforms. An example being: 
+ 
+ SqueakUnixConfig>>platformName
+ 	^self unixPlatformName
+ 
+ 
+ The next level down is our Abstract Base Class for our specific variant of Unix--specifically Linux32x86Config.
+ 
+ The methods in this class contain system wide configuratin information for this Platform. On a mature platform tree, this class''s configuration should be rock-solid. However, as of 2014.12.09, the Abstract Base Class has not been configured correctly and I must set it up here. 
+ 
+ Setting it up is not difficult and an existing Abstract Base Class can provide a good starting point. However, a familiarity with the design patterns of the Configurations is helpful (particularly the Redirect Method pattern)
+ 
+ HelpBrowser openOn: CMakeVMMakerSqueakDesignPatternsHelp
+ 
+ 
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>createTheConfiguration (in category 'pages') -----
+ createTheConfiguration
+ 	^HelpTopic
+ 		title:'Create the Configuration'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 4. Create your Configuration
+ 
+ Our new Concrete Configuration must be created as a subclass of our Platform''s Abstract Base Class.
+ 
+ SInce I am creating a Squeak Cog Spur config for the CMakeVMMakerSqueak-Linux64X86-32BitCompatibility Platform I choose the name:
+ 
+ Linux64x86w32BitSqueakCogSpurConfig.
+ 
+ (For a discussion on naming conventions evaluate:
+ HelpBrowser openOn: CMakeVMMakerSqueakOverviewHelp
+ )
+ 
+ To create it, I must subclass the Abstract Base Class for my Platform like so:
+ 
+ Linux64x86w32BitConfigUsrLib subclass: #Linux64x86w32BitSqueakCogSpurConfig
+ 	instanceVariableNames: ''
+ 	classVariableNames: ''
+ 	poolDictionaries: ''
+ 	category: ''CMakeVMMakerSqueak-Linux64X86-32BitCompatibility''
+ 
+ However, being lazy, I am going to copy an existing Configuration that is similar to what I want. 
+ 
+ Today I choose Linux64x86w32BitSqueakCogV3Config from the  CMakeVMMakerSqueak-Linux64X86-32BitCompatibility Platform category
+ 
+ I copy the class and then change its name, parent and class category to get:
+ 
+ Linux64x86w32BitConfigUsrLib subclass: #Linux64x86w32BitSqueakCogSpurConfig
+ 	instanceVariableNames: ''
+ 	classVariableNames: ''
+ 	poolDictionaries: ''
+ 	category: ''CMakeVMMakerSqueak-Linux64X86-32BitCompatibility''
+ 
+ 
+ I then query by Builder to see if it sees the new Configuration in the platform:
+ 
+ SqueakLinux64x86w32CompatBuilder configurationsCategory
+ -->  ''CMakeVMMakerSqueak-Linux64X86-32BitCompatibility''
+ 
+ SqueakLinux64x86w32CompatBuilder  availableBuildConfigurations  
+ -->  a SortedCollection(#Linux64x86w32BitSqueakCogSpurConfig #Linux64x86w32BitSqueakCogV3Config)
+    "Here we see our new Configuration is visible to the Builder"
+ 
+ SqueakLinux64x86w32CompatBuilder  unAvailableBuildConfigurations
+ -->  a SortedCollection(#Linux64x86w32BitConfigUsrLib #Linux64x86w32BitConfigUsrLib32)  "Our Abstract Base Classes are not available to be built"
+ 
+ SqueakLinux64x86w32CompatBuilder availableBuildTypesFor: #Linux64x86w32BitSqueakCogSpurConfig
+ --> an OrderedCollection(#build #buildAssert) "The Configuration I copied has two Build Types coded and available."
+ 
+ 
+ SqueakLinux64x86w32CompatBuilder  sourceDirectoryFor:#Linux64x86w32BitSqueakCogSpurConfig
+ -->  "src"                                                        "Where the vm source code is located (we will be changing this)"
+ 
+ My new configuration is correctly named and in the correct place. 
+ 
+ At this point I re-run all my Tests.
+ TestRunner open
+  For me, all tests pass.
+ 
+ In the next topic we cover how to hide our new Configuration from a builder. 
+ 
+ '
+ !

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>customizePlatformSources (in category 'pages') -----
+ customizePlatformSources
+ 	"This method was automatically generated. Edit it using:"
+ 	"a HelpBrowser edit: #customizePlatformSources"
+ 	^HelpTopic
+ 		title: 'Customize Platform Sources'
+ 		contents: 
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ In the previous topic we saw where the universe of possible platform sources was populated in the initializePlatformSources method of our platform level Configuration.
+ 
+ What we need to do now is have our custom Configuration return a subset of that that universe.
+ 
+ This is done in the setPlatformSources method.
+ 
+ ToolSet browse: CPlatformConfigForSqueak selector: #setPlatformSources:
+ 
+ Here we see the Method Redirect Pattern. Since I am building my Configuration for the buildType build, I must override that method
+ 
+ SystemNavigation browseAllImplementorsOf: #setPlatformSourcesBuild:
+ 
+ Here we see that the Linux64x86w32BitSqueakCogV3Config selects a subset of the available platform sources that it needs to build itself.
+ The super call at the end of the method invokes Linux64x86w32BitSqueakCogV3Config>>setPlatformSourcesBuild:aMaker which writes the actual CMake output.
+ 
+ If you compare the 
+ 
+ Linux64x86w32BitSqueakCogV3Config>>setPlatformSourcesBuild: aMaker method
+ 
+  to
+ 
+ the Linux64x86w32BitSqueakCogSpurConfig>>setPlatformSourcesBuild: aMaker 
+ 
+ you will see that the latter has an additional source file 	''sqUnixSpurMemory.c'' . 
+ 	
+ That difference is a good example of what customizing platform sources means. 
+ 
+ !!' readStream nextChunkText!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>customizePlugins (in category 'pages') -----
+ customizePlugins
+ 	^HelpTopic
+ 		title:'customize Plugins'
+ 		contents:
+ 'We can customize which plugins we want on our configuration by overriding our platform''s defaultExternalPlugins and defaultInternalPlugins methods.
+ 
+ The default set can be further customized according to buildType if desired via the externalPlugins[BuildType] and internalPlugins[BuildType] redirect pattern
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>customizeVMPlugins (in category 'pages') -----
+ customizeVMPlugins
+ 	^HelpTopic
+ 		title:'Customize VM Plugins'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ As we saw in the previous page the CPlatformConfigForSqueak maintains a list of the available VM plugins in the form of ''data-bucket'' objects.
+ 
+ Since every configuration does not use every VM plugin, our configuration can  customize that master list.
+ 
+ It can do this in one of two ways.
+ 
+ First,  We can do this by overloading the SqueakUnixConfig>>customizeVMPlugins method.. 
+ SystemNavigation browseAllImplementorsOf: #customizeVMPlugins
+ This customization occures before the buildType has been set in the Configuration. 
+ So this selection will be used regardless of buildType  unless.......
+ 
+ 
+ 
+ Second, we override the addVMPlugins[buildType] : aMaker method in our Configuration and set our vmplugins variable there similar to how we do it in this method.
+ SystemNavigation browseAllImplementorsOf: #addVMPluginsBuild:
+ 
+ 
+ It is my opinion that the selecting vm plugins based on buildType will not happen and that that those selected at the initialization change will be the default.
+ 
+ 
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>dirBuildLanguageVMMM (in category 'pages') -----
+ dirBuildLanguageVMMM
+ 	^HelpTopic
+ 		title:'Specify dirBuildLanguageVMMM'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ SystemNavigation new browseAllImplementorsOf: #dirBuildLanguageVMMM localTo:CPlatformConfigForSqueak.
+ 
+ We scroll down to our Linux64x86w32BitSqueakCogSpurConfig which we copied from the existing Linux64x86w32BitSqueakCogV3Config.
+ 
+ Looking at the dirBuildLanguageVMMM it initially reads (due to the copying of the existing class)
+ 
+ dirBuildLanguageVMMM
+ 	^self squeakCogV3
+ 
+ Since this is a configuration for Squeak Cog Spur, I modify the method to return
+ 
+ dirBuildLanguageVMMM
+ 	^self squeakCogSpur
+ 
+ 
+ As a sanity check, I verify that the method squeakCogSpur exists...
+ 
+ SystemNavigation new browseAllImplementorsOf: #squeakCogSpur
+ 
+ And we see the method exists and will return the string ''squeak.cog.spur''.
+ 
+ (CPlatformConfigForSqueak basicNew) squeakCogSpur
+ 
+ 
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>dirSource (in category 'pages') -----
+ dirSource
+ 	^HelpTopic
+ 		title:'Specify Source Directory'
+ 		contents:
+ '
+ Eliot''s VMMaker.oscog package outputs c-source code to varios directories depending ont he vm type.
+ 
+ SystemNavigation new browseAllImplementorsOf: #dirSource localTo:CPlatformConfigForSqueak.
+ 
+ Evaluating the above, we see that the CPlatformConfigForSqueak lists the available source directories.
+ 
+ The string values for these things are hard-coded in CPlatformConfigForSqueak in the ''cmake source names'' category.
+ 
+ ToolSet browse: CPlatformConfigForSqueak category: ''cmake source names''
+ 
+ For our Linux64x86w32BitSqueakCogSpurConfig we choose ''spursrc'' as our dirSource return value
+ 
+ dirSource
+ 	^self spursrc
+ 
+ which you can test here.
+ 
+ (Linux64x86w32BitSqueakCogSpurConfig basicNew) dirSource
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>excludingConfigFromBuilds (in category 'pages') -----
+ excludingConfigFromBuilds
+ 	^HelpTopic
+ 		title:'Excluding a Config From Builds'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 5. Interaction of the Builder and your Configuration
+ 
+ Configurations can hide themselves from , or make themselves visible to Builders via their ''excludeFromBuild'' method.
+ 
+ excludeFromBuild
+ 	^false   "build this configuration"
+ "	^true     do not build this configuration"   
+ 
+ In our case, the Builder shows us that Linux32x86SqueakCogSpurConfig is capable of being built (I had copied an existing, working Configuration):
+ 
+ SqueakLinux64x86w32CompatBuilder availableBuildConfigurations
+ --> a SortedCollection(#Linux64x86w32BitSqueakCogSpurConfig #Linux64x86w32BitSqueakCogV3Config)
+ 
+ 
+ To exclude it, override (or alter) the Configurations ''excludeFromBuild'' method
+ 
+ Linux64x86w32BitSqueakCogSpurConfig >>excludeFromBuild
+ 	"over-ride to exclude yourself from a build"
+ 	^true
+ 
+ And the Configuration is hidden from the Builder...
+ 
+ SqueakLinux64x86w32CompatBuilder availableBuildConfigurations
+ -->  a SortedCollection(#Linux64x86w32BitSqueakCogV3Config)
+ 
+ 
+ However, since I am developing locally, I need it to be visible to the Builder , so I set it as so:
+ 
+ Linux64x86w32BitSqueakCogSpurConfig >>excludeFromBuild
+ 	"over-ride to exclude yourself from a build"
+ 	^false
+ 
+ And my Builder can see it again...
+ 
+ SqueakLinux64x86w32CompatBuilder availableBuildConfigurations  
+ -->  a SortedCollection(#Linux64x86w32BitSqueakCogSpurConfig #Linux64x86w32BitSqueakCogV3Config)
+ 
+ 
+ N.B. tty. My opinion is that this is a weak way of doing this, but I have not thought through how to do this elegantly. 
+ This functionality is included with an eye towards easing automated builds for all platforms and configurations.'!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>extraVMSettings (in category 'pages') -----
+ extraVMSettings
+ 	^HelpTopic
+ 		title:'extraVMSettings'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ SystemNavigation browseAllImplementorsOf: #extraVMSettings:
+ 
+ 
+ In the CPlatformConfigForSqueak>>extraVMSettings: aMaker, we see the Method Redirect Pattern employed. Since this is for buildType #build, the method will re-route to self extraVMSettingsBuild:
+ 
+ SystemNavigation browseAllImplementorsOf: #extraVMSettingsBuild:
+ 
+ We see the CPLatformConfigForSqueak forces a subclass to implement it and the SqueakUnixConfig implements it.
+ 
+ In SqueakUnixConfig a CMakeAddCustomCommandOutput is created and initialized. 
+ 
+ CMakeAddCustomCommandOutput browse
+ 
+ The class comment says that: ''Add a custom build rule to the generated build system.''
+ 
+ 
+ If you  look in the file  Cog/platforms/unix/config/verstamp you see that this is (looks like) the definition/implemenation of the command CMake 
+ will invoke.
+ 
+ 
+ Currently this is a platform level method. Honestly, I have no idea why it is there. (:
+ 
+ For our purposes, there is nothing we need to do.
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>fin (in category 'pages') -----
+ fin
+ 	^HelpTopic
+ 		title:'fin'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 
+ done!!
+ 
+ To recap you have covered:
+ 
+ 1. Tests
+ 2. Where to place your new Configuration
+ 3. What Builder to use
+ 4. Create your Configuration
+ 5. Interaction of the Builder and your Configuration
+ 6. Generating a proof-of-concept CMake build tree.
+ 7. Some high level classes and concepts
+   7.a  CPlatformConfigForSqueak
+   7b. The Method Redirect Pattern (a broadly used design pattern in the system)
+   7c. The CMakeVMGeneratorForSqueak 
+ 8. Customizing your Configuration.
+ 
+ 
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>firstCMakeGeneration (in category 'pages') -----
+ firstCMakeGeneration
+ 	"This method was automatically generated. Edit it using:"
+ 	"a HelpBrowser edit: #firstCMakeGeneration"
+ 	^HelpTopic
+ 		title: 'First CMake Generation'
+ 		contents: 
+ 'Within the broad outline of this tutorial, you are here: 
+ 6. Generating a proof-of-concept CMake build tree.
+ 
+ For didactic purposes I am going to do a sanity check and generate CMake code from the configuration for the first time. 
+ 
+ If you are not familiar with the CMakeVMMakerSqueak naming conventions, please evaluate:
+ HelpBrowser openOn: CMakeVMMakerSqueakOverviewHelp
+ 
+ On my system a copy of the Cog svn tree is located under my current working Squeak directory in the folder ''oscogvm".
+ 
+ It looks like this:
+ 
+ bash-4.2$ ls --width=1 ~/usr/src/smalltalk/CMake.oscog/cogspurVMMaker/oscogvm/
+ README
+ build
+ build.linux32ARM
+ build.linux32x86
+ build.linux64x64
+ build.macos32x86
+ build.macos64x64
+ build.win32x86
+ history
+ mkNamedPrims.sh
+ nsspur64src
+ nsspursrc
+ nsspurstack64src
+ nsspurstacksrc
+ nssrc
+ platforms
+ processors
+ products
+ scripts
+ sources
+ spur64src
+ spursistasrc
+ spursrc
+ spurstack64src
+ spurstacksrc
+ src
+ stacksrc
+ 
+ What I want to do is see if my configuration will write its output to an appropriate CMake subfolder.
+ 
+ To do this,  I ask the Builder to configure my new configuration for a buildType and output its contents. I do so by evaluating:
+ 
+  SqueakLinux64x86w32CompatBuilder 
+ 	configureA: #Linux32x86SqueakCogSpurConfig forBuildType:#build; 
+ 	enableMessageTracking: true;
+ 	generateByTemplate.
+ 
+ 
+ and look again 
+ bash-4.2$ ls --width=1 usr/src/smalltalk/CMake.oscog/cogspurVMMaker/oscogvm/
+ CHANGES
+ LICENSE
+ README
+ build
+ build.linux32ARM
+ build.linux32x86
+ build.linux64x64
+ build.macos32x86
+ build.macos64x64
+ build.win32x86
+ cmake.build.linux64x86w32BitCompatibility  <--Here is the directory created by my configuration. 
+ history
+ ....
+ 
+ Above we see that a new cmake.build.linux64x86w32BitCompatibility   directory has been created. Let''s look at its contents
+ 
+  tree -d  ~/usr/src/smalltalk/CMake.oscog/cogspurVMMaker/oscogvm/cmake.build.linux64x86w32BitCompatibility/
+ `-- squeak.cog.v3                                               <--We will be changing this later as we want a squeak.cog.spur directory, not a V3 directory
+     `-- build                                                         <--our build type is #build
+         |-- ADPCMCodecPlugin
+         |-- AsynchFilePlugin
+         |-- B2DPlugin
+         |-- BMPReadWriterPlugin
+         |-- BitBltPlugin
+         |-- CroquetPlugin
+         |-- DSAPrims
+         |-- DropPlugin
+         |-- FFTPlugin
+         |-- FileCopyPlugin
+         |-- FilePlugin
+         |-- FloatArrayPlugin
+         |-- FloatMathPlugin
+         |-- JoystickTabletPlugin
+         |-- Klatt
+         |-- LargeIntegers
+         |-- LocalePlugin
+         |-- MIDIPlugin
+         |-- Matrix2x3Plugin
+         |-- MiscPrimitivePlugin
+         |-- Mpeg3Plugin
+         |-- SecurityPlugin
+         |-- SerialPlugin
+         |-- SocketPlugin
+         |-- SoundCodecPrims
+         |-- SoundGenerationPlugin
+         |-- SoundPlugin
+         |-- StarSqueakPlugin
+         |-- SurfacePlugin
+         |-- ZipPlugin
+         |-- vm-display-X11
+         |-- vm-display-null
+         |-- vm-sound-ALSA
+         `-- vm-sound-null
+ 
+ ...etc
+ We see that the configuration has output a CMake build tree and we have done a sanity check. 
+ 
+ Next we take stock of what we have accomplished and preview the remaining tasks.
+ 
+ !!' readStream nextChunkText!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>generateBuildScript (in category 'pages') -----
+ generateBuildScript
+ 	^HelpTopic
+ 		title:'Generate Build Script'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ ToolSet browse: CPlatformConfigForSqueak selector: buildScript
+ 
+ This generates a bash shell script that can be used in place of manuallinvoking cmake and make.
+ 
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>generatePluginConfigs (in category 'pages') -----
+ generatePluginConfigs
+ 	^HelpTopic
+ 		title:'generatePluginConfigs'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ This method iterates over a collection of InterpreterPlugin subclasses and asks each class to populate itself with some basic information and write out its own CMakeLists.txt in a directory named after the plugin name.
+ 
+ The processing is a bit complicated, but the setup is easy.
+ 
+ The collections of  plugin classes are stored in our Configuration. We cover that next in Specifying Plugins'!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>identifyBuilder (in category 'pages') -----
+ identifyBuilder
+ 	^HelpTopic
+ 		title:'Identify Builder'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 3. What Builder to use
+ 
+ My new Configuration will be managed by a Builder.
+ 
+ Builders are located in the CMakeVMMakerSqueak-Builder class category.
+ 
+ Builders are subclasses of SqueakCMakeVMMakerAbstractBuilder.
+ SqueakCMakeVMMakerAbstractBuilder browseHierarchy
+ 
+ Builders are named according to the Platform they manage.
+ 
+ (For a discussion on naming conventions evaluate:
+ HelpBrowser openOn: CMakeVMMakerSqueakOverviewHelp
+ )
+ 
+ Builders manage configurations for one Platform in one  class category.
+ 
+ 
+ My platform is Linux Linux64x86 with 32 bit compatability libs stored in /usr/lib (other linux use /usr/lib32 for this.)
+ 
+ I suspect that the  SqueakLinux64x86w32CompatBuilder as the Builder that will manage my new configuration.
+ 
+ I confirm this by sending it the ''configurationsCategory'' message as shown below:
+ 
+ SqueakLinux64x86w32CompatBuilder configurationsCategory 
+ -->''CMakeVMMakerSqueak-Linux64X86-32BitCompatibility''                    <---this is the correct class category for my Platform.
+ 
+ This is correct Builder for my new Configuration. 
+ 
+ I can query  the Builder for some more information:
+ 
+ SqueakLinux64x86w32CompatBuilder  availableBuildConfigurations
+   a SortedCollection(#Linux64x86w32BitSqueakCogV3Config)   <--A Cog V3 configuration exists. 
+ 
+ SqueakLinux64x86w32CompatBuilder  unAvailableBuildConfigurations 
+ --> a SortedCollection(#Linux64x86w32BitConfigUsrLib #Linux64x86w32BitConfigUsrLib32)
+  <--these are platform specific Abstract Base Classes. Abstract Base Classes cannot be built, hence they are unavailable.
+ 
+ SqueakLinux64x86w32CompatBuilder  buildDirectory 
+ -->''cmake.build.linux64x86w32BitCompatibility''                     <--this matches my platform
+ 
+ We will be using the SqueakLinux64x86w32CompatBuilder in tandem with Tests during Configuration development.'
+ 
+ !

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>identifyPlatform (in category 'pages') -----
+ identifyPlatform
+ 	^HelpTopic
+ 		title:'Identify Platform'
+ 		contents:
+ ' Within the broad outline of this tutorial, you are here: 
+ 2. Where to place your new Configuration
+ 
+ My target platform is 64 bit Linux on X86 with 32 bit compatibility libraries stored in /usr/lib.
+ 
+ I identify my Platform in the existing CMakeVMMakerSqueak-xyz class categories.  
+ 
+ If I wanted a configuration for MacOSX32x86, I would place my configuration in CMakeVMMakerSqueak-MacOSX32x86.
+ If SunOSx3x86 then CMakeVMMakerSqueak-SunOS32x86.
+ etc.
+ 
+ For a discussion on naming conventions evaluate:
+ HelpBrowser openOn: CMakeVMMakerSqueakOverviewHelp
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>identifyPlatformAbstractBaseClass (in category 'pages') -----
+ identifyPlatformAbstractBaseClass
+ 	^HelpTopic
+ 		title:'Identify Abstract Base Class '
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 2. Where to place your new Configuration
+ 
+ My new configuration must be a subclass of my Platform''s Abstract Base Class. 
+ 
+ A Platform Abstract Base Class encapsulates common platform information. 
+ 
+ In CMakeVMMakerSqueak-Linux64X86-32BitCompatibility class category I see two Abstract Base Classes (typically there is only one). They are:
+ 
+ Linux64x86w32BitConfigUsrLib 
+ Linux64x86w32BitConfigUsrLib32
+ 
+ The Suffixes ''UsrLib'' and ''UsrLib32'' refer to the location of the 32 bit compatablity libs. 
+ On my system they are in /usr/lib,  so I choose  Linux64x86w32BitConfigUsrLib as my Abstract Base Class
+ 
+ Examples of Abstract Base Classes in other class categories  include:
+ 
+ CMakeVMMakerSqueak-BSD32x86                                -> SqueakBSD32x86Config
+ CMakeVMMakerSqueak-IA32-Bochs                               -> SqueakIA32BochsConfig
+ CMakeVMMakerSqueak-IOS                                           -> SqueakIOSConfig
+ CMakeVMMakerSqueak-IOS                                           -> SqueakIOSConfig
+ CMakeVMMakerSqueak-Linux32ARMv6                          -> Linux32ARMv6Config
+ CMakeVMMakerSqueak-Linux64x64                              -> Linux64x64Config
+ CMakeVMMakerSqueak-MacOSPowerPC                        -> SqueakMacOSXPowerPCConfig
+ CMakeVMMakerSqueak-MacOSX32x86                          -> SqueakMacOSX32x86Config
+ CMakeVMMakerSqueak-SunOS32x86                            -> SqueakSunOS32x86Config
+ CMakeVMMakerSqueak-Win32x86                                 -> SqueakWin32x86Config
+ 
+ I can identify the Abstract Base Class in several ways
+ 
+ 1. It is a  topmost class in the class heirarchy for that platform/class category
+ 2. It is named after its platform
+ 3. It answers #true to the message isAbstractBaseClass
+ Linux64x86w32BitConfigUsrLib  isAbstractBaseClass 
+ --> true
+ 
+ In this workflow example I ideduce that the  AbstractBaseClass for my Platform is Linux64x86w32BitConfigUsrLib'!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>initializePlatformSources (in category 'pages') -----
+ initializePlatformSources
+ 	^HelpTopic
+ 		title:'Initialize Platform Sources'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+   8. Customizing your Configuration.
+ 
+ Platform Sources are platform dependent source files in the Cog development tree..
+ To build the VM, CMake needs to know their names. 
+ 
+ They reside in subdirectories of Cog/platforms
+ 
+ bash-4.2$ ls -1 Cog/platforms/
+ Cross
+ Mac OS
+ Plan9
+ RiscOS
+ iOS
+ unix
+ win32
+ 
+ On the unix platform the VM depends on some platform sources they are stored in the platforms/unix/vm directory..
+ 
+ bash-4.2$ ls -1 Cog/platforms/unix/vm/*.[ch]
+ Cog/platforms/unix/vm/SqDisplay.h
+ Cog/platforms/unix/vm/SqModule.h
+ Cog/platforms/unix/vm/SqSound.h
+ Cog/platforms/unix/vm/aio.c
+ Cog/platforms/unix/vm/debug.c
+ Cog/platforms/unix/vm/debug.h
+ Cog/platforms/unix/vm/dlfcn-dyld.c
+ Cog/platforms/unix/vm/feedback.h
+ Cog/platforms/unix/vm/glibc.h
+ Cog/platforms/unix/vm/mac-alias.c
+ Cog/platforms/unix/vm/osExports.c
+ Cog/platforms/unix/vm/sqConfig.h
+ Cog/platforms/unix/vm/sqGnu.h
+ Cog/platforms/unix/vm/sqPlatformSpecific.h
+ Cog/platforms/unix/vm/sqUnixCharConv.c
+ Cog/platforms/unix/vm/sqUnixCharConv.h
+ Cog/platforms/unix/vm/sqUnixEvent.c
+ Cog/platforms/unix/vm/sqUnixExternalPrims.c
+ Cog/platforms/unix/vm/sqUnixGL.h
+ Cog/platforms/unix/vm/sqUnixGlobals.h
+ Cog/platforms/unix/vm/sqUnixHeartbeat.c
+ Cog/platforms/unix/vm/sqUnixITimerHeartbeat.c
+ Cog/platforms/unix/vm/sqUnixITimerTickerHeartbeat.c
+ Cog/platforms/unix/vm/sqUnixMain.c
+ Cog/platforms/unix/vm/sqUnixMain.h
+ Cog/platforms/unix/vm/sqUnixMemory.c
+ Cog/platforms/unix/vm/sqUnixSpurMemory.c
+ Cog/platforms/unix/vm/sqUnixThreads.c
+ Cog/platforms/unix/vm/sqUnixVMProfile.c
+ Cog/platforms/unix/vm/sqUnixWindow.h
+ Cog/platforms/unix/vm/sqaio.h
+ Cog/platforms/unix/vm/sunos.h
+ 
+ A subset of these must be customized in our Configuration. 
+ In the initializePlatformSources step, the universe of possible sources is hard coded by hand*
+ 
+ If you look at the system level configurations you can see the files listed 
+ SystemNavigation  browseAllImplementorsOf: #initializePlatformSources  
+ 
+ 
+ There are different sources for the Windows and Mac platforms which I do not cover here. As of 20160530 the Dos and Mac code has not been developed beyond what I inherited from the Pharo code..
+ 
+ *This has already bitten me. The sqUnixSpurMemory was added as I was developing this system and was not originally in my list of initialized files. I had to debug the problem and then add it by hand.
+ 
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>initializeVMPlugins (in category 'pages') -----
+ initializeVMPlugins
+ 	^HelpTopic
+ 		title:'Initialize VM Plugins'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+   8. Customizing your Configuration.
+ 
+ VM Pluings are a type of plugin that is unique to Unix.  Their directories exist in the Cog/Platforms/unix directory
+ Shown here:
+ 
+ bash-4.2$ ls  -1d  Cog/platforms/unix/vm-*
+ Cog/platforms/unix/vm-display-Quartz
+ Cog/platforms/unix/vm-display-X11
+ Cog/platforms/unix/vm-display-custom
+ Cog/platforms/unix/vm-display-fbdev
+ Cog/platforms/unix/vm-display-null
+ Cog/platforms/unix/vm-sound-ALSA
+ Cog/platforms/unix/vm-sound-MacOSX
+ Cog/platforms/unix/vm-sound-NAS
+ Cog/platforms/unix/vm-sound-OSS
+ Cog/platforms/unix/vm-sound-Sun
+ Cog/platforms/unix/vm-sound-custom
+ Cog/platforms/unix/vm-sound-null
+ Cog/platforms/unix/vm-sound-pulse
+ 
+ 
+ 
+ ToolSet browse: CPlatformConfigForSqueak selector: #initializeVMPlugins
+ 
+ is a hard-coded list of these VM Plugins but expressed as a list of encapsulating objects.
+ These objects are just data buckets for carrying information that will be used to build them.
+ 
+ CMakeVMPlugin browseHierarchy
+ 
+ On initialization, the CPlatformConfgiForSqueak stores them in its vmplugins instance variable where we will customize them later.
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>key (in category 'accessing') -----
+ key
+ 	^'CMakeVMMakerSqueakStepByStepNewConfigurationHelp'!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>methodRedirectPattern (in category 'pages') -----
+ methodRedirectPattern
+ 	^HelpTopic
+ 		title:'Review of Method Redirect Pattern'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 7. Some high level classes and concepts
+ 	7b. The Method Redirect Pattern (a broadly used design pattern in the system)
+ 
+ The CPlatformConfigForSqueak provides methods that must be implemented at some level in the CPlatformConfigForSqueak hierarchy. 
+ The design pattern is heavily used and you can get a sense of its scope by evaluating:
+ 
+ ToolSet browseMessageCategory: ''cmake buildType redirects''  inClass:CPlatformConfigForSqueak
+ 
+ The naming of the redirect methods follows a consistent pattern.
+ 
+ fooBuild;
+ fooBuildAssert
+ fooBuildAssertITimerHeartbeat
+ fooBuildDebug
+ fooBuildDebugITimerHeartbeat
+ fooBuildITimerHeartbeat
+ fooBuildMultiThreaded
+ fooBuildMultiThreadedAssert
+ fooBuildMultiThreadedDebug
+ fooNoBuildType
+ 
+ Where the suffix to ''foo'' denotes a specific buildType out of the available pool specified here:
+ 
+ SqueakCMakeVMMakerAbstractBuilder allBuildTypes
+ 
+ 
+ The CPlatformConfigForSqueak either (rarely) implements or  requires that at least one of these methods are implemented as such:
+ 
+ fooBuild
+ 	 self subclassResponsibility
+ 
+ 
+ At the same time, it does not require that all of them be implemented. It accomplishes this by defaulting to  the ''fooBuild'' method:
+ 
+ fooBuildAssertITimerHeartbeat
+   ^ self fooBuild
+ 
+ You can see the ''foo'' pattern here in the ''cmakeAddDefinitions'' method
+ 
+ SystemNavigation new browseAllImplementorsOf: #cmakeAddDefinitionsBuildMultiThreadedAssert localTo: CPlatformConfigForSqueak.
+ 
+ Most buildTypes are redirected to a default implementation. This default implementation is implemented at an appropriate level in the CPlatformConfigHeirarchy 
+ 
+ There are some redirect methods that are appropriate to CPlatformConfigForSqueak; for example:
+ 
+ SystemNavigation new browseAllImplementorsOf: #setGlobalOptionsBuild: localTo: CPlatformConfigForSqueak.   
+ 
+ Most methods are implemented lower in the hierarchy.
+ 
+ When we implement a Configuration, we are implementing and or overriding methods in CMakePlatformConfigForSqueak that are appropriate for our buildType. 
+ 
+ The Method Redirect Pattern is covered in detail in an existing Help topic.
+ 
+ HelpBrowser openOn: CMakeVMMakerSqueakDesignPatternsHelp
+ 
+ Invocation of the Method Redirect Pattern occurs in the VMGenerator. We cover that next.
+ 
+ '
+ 
+ !

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>overview (in category 'pages') -----
+ overview
+ 	"This method was automatically generated. Edit it using:"
+ 	"a HelpBrowser edit: #overview"
+ 	^HelpTopic
+ 		title: 'Overview'
+ 		contents: 
+ 'This Help Topic presents the workflow the author used in creating the  Squeak, Cog, Spur CMake configuration for a 64 bit Slackware 14.1 system.with 32 bit compatability libs in /usr/lib
+ 
+ The broad outline of this tutorial covers
+ 
+ 1. Tests
+ 2. Where to place your new Configuration
+ 3. What Builder to use
+ 4. Create your Configuration
+ 5. Interaction of the Builder and your Configuration
+ 6. Generating a proof-of-concept CMake build tree.
+ 7. Some high level classes and concepts
+   7.a  CPlatformConfigForSqueak
+   7b. The Method Redirect Pattern (a broadly used design pattern in the system)
+   7c. The CMakeVMGeneratorForSqueak 
+ 8. Customizing your Configuration.
+ 
+ 
+ Although some details will be different, the steps involved should be the same for any platform.
+ 
+ 
+ 
+ 
+ 
+ !!' readStream nextChunkText!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>pages (in category 'accessing') -----
+ pages
+ 
+ "platformSources...cogitClass...src vs vmsrc"
+ 	^#(
+ overview 
+ tests 
+ identifyPlatform 
+ identifyPlatformAbstractBaseClass
+ identifyBuilder
+ createTheConfiguration
+ excludingConfigFromBuilds
+ setAvailableBuildTypes
+ firstCMakeGeneration
+ tackingStockOne
+ cPlatformConfigForSqueak
+ methodRedirectPattern
+ theVMGenerator
+ tackingStockTwo
+ cPlatformConfigForSqueakInitialize
+ initializePlatformSources
+ customizePlatformSources
+ initializeVMPlugins
+ customizeVMPlugins
+ configGenerateByTemplate
+ specifyCogitClass
+ 
+ vmsrc
+ 
+ specifyDirectories
+ dirBuildLanguageVMMM
+ setGlobalOptions
+ cmakePrefixPath
+ cmakeIncludePath
+ cmakeLibraryPath
+ cmakeIncludeModules
+ cmakeCFlags
+ cmakeAddDefinitions
+ cmakeWriteDirectoriesDotCmake
+ cmakeIncludeDirectories
+ preferredIncludes
+ standardIncludes
+ setGlobalOptionsAfterDetermineSystem
+ extraVMSettings
+ setCoreSources
+ setPlatformSources
+ setCrossSources
+ setExtraSources
+ cmakeSetSourceFilesProperties
+ cmakeListAppendLINKLIBSelements
+ cmakeAddExecutableNameOptionSource
+ setExecutableOutputPath
+ addVMPlugins
+ generatePluginConfigs
+ specifyPlugins
+ processThirdpartyLibraries
+ processPlugins
+ postBuildActions
+ generateBuildScript
+ fin
+ )
+ 
+ !

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>postBuildActions (in category 'pages') -----
+ postBuildActions
+ 	^HelpTopic
+ 		title:'postBuildActions:'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ postBuildActions: implements the Method Redirect pattern.
+ 
+ ToolSet browse: CPlatformConfigForSqueak selector: #postBuildActions:
+ 
+ Since the configuration is configured for buildType: #build the method redirect pattern will redirect to
+ 
+ SystemNavigation browseAllImplementorsOf: #postBuildActionsBuild:
+ 
+ We see in CPlatformConfigForSqueak that a sublcass must implement it via ''self subclassResponsibility''.
+ 
+ The platform Config SqueakUnixConfig implements this. It can be over-ridden or extended as needed.
+ 
+ We have nothing new to do here.
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>preferredIncludes (in category 'pages') -----
+ preferredIncludes
+ 	^HelpTopic
+ 		title:'preferredIncludes'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ SystemNavigation browseAllImplementorsOf: #preferredIncludes
+ 
+ CPlatformConfig browseHierarchy
+ 
+ As of CMakeVMMakerSqueak-tty.114 the method is a legacy method from the pharo CPlatformConfig. It is expect it (and this help page!!) will go away on a refactoring pass when the dependency on the pharo package is removed.
+ 
+ 
+ In the CPlatformConfigForSqueak>>preferredIncludes, we see the Method Redirect Pattern employed. Since this is for buildType #build, the method will re-route to self preferredIncludesBuild.
+ 
+ SystemNavigation browseAllImplementorsOf: #preferredIncludesBuild
+ 
+ We see that #preferredIncludesBuild  is subclassed and implemented below the the platform level and down at the architecture/library location, one level above our new configuration.
+ 
+ Linux64x86w32BitConfigUsrLib browseHierarchy
+ 
+ The method itself creates a CMakeIncludeDirectories CMake template 
+ 
+ CMakeIncludeDirectories browse
+ 
+ The class comment tells us that we can add custom include directories for CMake to use.
+ 
+ The CMake template class initializes itself with some default data, which you can print out here:
+ 
+ (CMakeIncludeDirectories new) content
+ 
+ Since this is handled for us one level above our new configuration, we will leave this one untouched.  If it turns out that we need to include some other directories, we can override the method.'!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>processPlugins (in category 'pages') -----
+ processPlugins
+ ^HelpTopic
+ 		title:'Process Plugins'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ SystemNavigation browseAllImplementorsOf: #processPlugins:
+ 
+ This method is inhereted from the pharo code. I do not fully understand the reasoning behind it. I expect it will be refactored or rewritten.
+ See the method comment in 
+ 
+ SystemNavigation browseAllImplementorsOf: #initializeConfigDotCmakeFiles
+ 
+ Presently it does (at least) three things.
+ 
+ First, it adds plugin information to the master CMakeLists.txt file typically the add_subdirectory(''PluginName'') cmake command.
+ 
+ Second, it adds plugin information to the master CMakeLists.txt file from the CMakePluginGeneratorForSqueak>>configDotSomePluginName group of methods
+ 
+ 
+ SystemNavigation browseAllImplementorsOf: #configDotFilePlugin
+ 
+ 
+ Third it generates the sqNamedPrims.h file reproduced below.
+ 
+ bash-4.2$ cat sqNamedPrims.h 
+ /* This is automatically generated file using CVMMaker on 9 May 2016 2:26:20.906098 pm */
+ extern sqExport vm_exports[];
+ extern sqExport os_exports[];
+ extern sqExport ADPCMCodecPlugin_exports [];
+ extern sqExport AsynchFilePlugin_exports [];
+ extern sqExport B2DPlugin_exports [];
+ extern sqExport BitBltPlugin_exports [];
+ extern sqExport BMPReadWriterPlugin_exports [];
+ extern sqExport CroquetPlugin_exports [];
+ extern sqExport ZipPlugin_exports [];
+ extern sqExport DropPlugin_exports [];
+ extern sqExport DSAPrims_exports [];
+ extern sqExport FFTPlugin_exports [];
+ extern sqExport FileCopyPlugin_exports [];
+ extern sqExport FilePlugin_exports [];
+ extern sqExport FloatArrayPlugin_exports [];
+ extern sqExport FloatMathPlugin_exports [];
+ extern sqExport JoystickTabletPlugin_exports [];
+ extern sqExport Klatt_exports [];
+ extern sqExport LargeIntegers_exports [];
+ extern sqExport Matrix2x3Plugin_exports [];
+ extern sqExport MIDIPlugin_exports [];
+ extern sqExport MiscPrimitivePlugin_exports [];
+ extern sqExport Mpeg3Plugin_exports [];
+ extern sqExport SecurityPlugin_exports [];
+ extern sqExport SerialPlugin_exports [];
+ extern sqExport SocketPlugin_exports [];
+ extern sqExport SoundCodecPrims_exports [];
+ extern sqExport SoundPlugin_exports [];
+ extern sqExport StarSqueakPlugin_exports [];
+ extern sqExport SurfacePlugin_exports [];
+ extern sqExport LocalePlugin_exports [];
+ 
+ sqExport *pluginExports[] = {
+         vm_exports,
+         os_exports,
+ ADPCMCodecPlugin_exports,
+ AsynchFilePlugin_exports,
+ B2DPlugin_exports,
+ BitBltPlugin_exports,
+ BMPReadWriterPlugin_exports,
+ CroquetPlugin_exports,
+ ZipPlugin_exports,
+ DropPlugin_exports,
+ DSAPrims_exports,
+ FFTPlugin_exports,
+ FileCopyPlugin_exports,
+ FilePlugin_exports,
+ FloatArrayPlugin_exports,
+ FloatMathPlugin_exports,
+ JoystickTabletPlugin_exports,
+ Klatt_exports,
+ LargeIntegers_exports,
+ Matrix2x3Plugin_exports,
+ MIDIPlugin_exports,
+ MiscPrimitivePlugin_exports,
+ Mpeg3Plugin_exports,
+ SecurityPlugin_exports,
+ SerialPlugin_exports,
+ SocketPlugin_exports,
+ SoundCodecPrims_exports,
+ SoundPlugin_exports,
+ StarSqueakPlugin_exports,
+ SurfacePlugin_exports,
+ LocalePlugin_exports,
+ NULL
+ 
+ 
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>processThirdpartyLibraries (in category 'pages') -----
+ processThirdpartyLibraries
+ 	^HelpTopic
+ 		title:'Process Third Party Libraries'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ SystemNavigation browseAllImplementorsOf: #processThirdpartyLibraries
+ 
+ I have no idea what this does. It exists in the pharo codebase. 
+ 
+ If I do figure out its utility, then the processing architecture will be similar or identical to the Plugin processing.
+ 
+ i.e. Libraries will be represented by objects which will have the responsibility of generating ''stuff''.
+ 
+ 
+ 
+ .'!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>setAvailableBuildTypes (in category 'pages') -----
+ setAvailableBuildTypes
+ 	^HelpTopic
+ 		title:'Setting Available Build Types'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 5. Interaction of the Builder and your Configuration
+ 
+ Configurations  inform Builders what BuildTypes they support. via the availableBuildTypes method
+ 
+ Here is my Builder asking my new Configuration what build types it supports (remember, this Configuration was copied, so it has been configured already)
+ 
+ SqueakLinux64x86w32CompatBuilder availableBuildTypesFor: #Linux64x86w32BitSqueakCogSpurConfig
+ -->  an OrderedCollection(#build #buildAssert)
+ 
+ 
+ In our Abstract Base Class (Which, you recall cannot be built )for our Platform, we default to no build types.
+ 
+ Linux64x86w32BitConfigUsrLib>>availableBuildTypes
+  	 ^SqueakCMakeVMMakerAbstractBuilder  default  noBuildTypes
+ 
+ 
+ To get an idea of what buildTypes are available system wide evaluate
+ SqueakCMakeVMMakerAbstractBuilder  default  allBuildTypes 
+ -->an OrderedCollection(#build #buildAssert #buildAssertITimerHeartbeat #buildDebug #buildDebugITimerHeartbeat #buildITimerHeartbeat #buildMultiThreaded #buildMultiThreadedAssert #buildMultiThreadedDebug #buildNone)
+ 
+ 
+ To set the available build types for a Concrete Configurations we override the AbstactBaseClass''s method and SUBTRACT OUT what we do not want. Like so:
+ 
+ Since I am starting simple, I want my configuration to build a vanilla build. To do this I remove all but #build buildType like so
+ 
+ Linux64x86w32BitSqueakCogSpurConfig >> availableBuildTypes 
+ 	^SqueakCMakeVMMakerAbstractBuilder  default  allBuildTypes copyWithoutAll: #( #buildAssert #buildAssertITimerHeartbeat #buildDebug #buildDebugITimerHeartbeat #buildITimerHeartbeat #buildMultiThreaded #buildMultiThreadedAssert #buildMultiThreadedDebug #buildNone)
+ 
+ 
+ As I code more build types in my configuration, I subtract out 
+ 
+ Linux32x86SqueakCogV3Config >> availableBuildTypes 
+ 	^SqueakCMakeVMMakerAbstractBuilder  default  allBuildTypes copyWithoutAll: #(  #buildMultiThreadedDebug #buildNone)
+ 
+ With the result that my Builder shows the removed items as Available Build Types:
+ 
+ SqueakLinux32x86Builder availableBuildTypesFor: #Linux32x86SqueakCogV3Config 
+ --> an OrderedCollection(#build #buildAssert #buildAssertITimerHeartbeat #buildDebug #buildDebugITimerHeartbeat #buildITimerHeartbeat #buildMultiThreaded #buildMultiThreadedAssert)
+ 
+ Since I will only be developing the #build buildType for now, I put it as so:
+ 
+ Linux32x86SqueakCogV3Config>>availableBuildTypes 
+ 	^SqueakCMakeVMMakerAbstractBuilder  default  allBuildTypes copyWithoutAll: #( #buildAssert #buildAssertITimerHeartbeat #buildDebug #buildDebugITimerHeartbeat #buildITimerHeartbeat #buildMultiThreaded #buildMultiThreadedAssert #buildMultiThreadedDebug #buildNone)
+ 
+ 
+ and verify it is correct:
+ 
+ SqueakLinux32x86Builder availableBuildTypesFor: #Linux32x86SqueakCogV3Config 
+ -->an OrderedCollection(#build)
+ 
+ 
+ *N.B. tty. In my opinion, this is a weak design on my part. as it relies on the developer to set it up. If there is an elegant way to do this , I am for it.
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>setConfigurationDirectory (in category 'pages') -----
+ setConfigurationDirectory
+ 	^HelpTopic
+ 		title:'Set Configuration Directory'
+ 		contents:
+ '
+ Need the squeak.cog.spur directory here.
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>setCoreSources (in category 'pages') -----
+ setCoreSources
+ 	^HelpTopic
+ 		title:'setCoreSources'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ SystemNavigation browseAllImplementorsOf: #setCoreSources:
+ 
+ The ''self coreSources'' message is a Method Redirect Pattern. 
+ 
+ ToolSet browse: CPlatformConfigForSqueak selector:#coreSources
+ 
+ SystemNavigation browseAllImplementorsOf: #coreSourcesBuild
+ 
+ Here we see a hard-coded list returned (this will probably be refactored on a refactoring pass)
+ 
+ The  ''${srcVMDir}'' is a variable placeholder in CMake. It contains a path name that resolves to where those files listed above exist.
+ 
+ We set that in (FIX ME AND IDENTIFY PRECISIELY WHERE srcVMDir gets its value)
+ 
+ '
+ 
+ 
+ !

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>setCrossSources (in category 'pages') -----
+ setCrossSources
+ 	^HelpTopic
+ 		title:'setCrossSources'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ SystemNavigation browseAllImplementorsOf: #setCrossSources:
+ 
+ We see that this is a top-level Configuration method that writes a CMake Set(foo, bar) construct.
+ 
+ crossSources is another hard-coded list of source files
+ 
+ ToolSet browse: SqueakUnixConfig selector: #crossSources
+ 
+ This list of sources is in the Cog subversion build tree under:
+ 
+ bash-4.2$ ls -1 Cog/platforms/Cross/vm/*.c
+ oscogvm/platforms/Cross/vm/sqExternalSemaphores.c
+ oscogvm/platforms/Cross/vm/sqHeapMap.c
+ oscogvm/platforms/Cross/vm/sqNamedPrims.c
+ oscogvm/platforms/Cross/vm/sqTicker.c
+ oscogvm/platforms/Cross/vm/sqVirtualMachine.c
+ 
+ The ''${crossDir}'' is a variable placeholder that CMake will populate. The variable value is held in our configuration 
+ It will resolve to "oscogvm/platforms/Cross/vm''
+ 
+ What this is doing is creating a list of paths to files.
+ 
+ If any Cross platform files are ever added, we will have to modify the #crossSources return value.
+ 
+ 
+ 
+ '
+ !

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>setExecutableOutputPath (in category 'pages') -----
+ setExecutableOutputPath
+ 	"This method was automatically generated. Edit it using:"
+ 	"a HelpBrowser edit: #setExecutableOutputPath"
+ 	^HelpTopic
+ 		title: 'setExecutableOutputPath'
+ 		contents: 
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ SystemNavigation browseAllImplementorsOf: #setExecutableOutputPath
+ 
+  We see that this is implemtented in CPlatformConfigForSqueak.
+ 
+ It creates a CMakeSet object and sets the ''EXECUTABLE_OUTPUT_PATH'' variable to self outputDir
+ 
+ SystemNavigation browseAllImplementorsOf: #outputDir
+ 
+ Which redirects to 
+ 
+ (CPlatformConfigForSqueak basicNew) outputDirName
+ 
+ The #outputDir method is a legacy method from the pharo code. It should be factored out after the dependency on the pharo code is removed.!!' readStream nextChunkText!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>setExtraSources (in category 'pages') -----
+ setExtraSources
+ 	^HelpTopic
+ 		title:'setExtraSources'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ SystemNavigation browseAllImplementorsOf: #setExtraSources
+ 
+ We see that this is a top-level Configuration method that writes a CMake Set(foo, bar) construct.
+ 
+ You can see the CMake generated by evaluating
+ 
+ ((CMakeSet new) variable:''extraSources'' value:((SqueakUnixConfig basicNew) extraSources)) content
+ 
+ The #extraSources method contains some hard coded values (expect refactoring)
+ 
+ SystemNavigation browseAllImplementorsOf: #extraSources
+ 
+ ToolSet browse: SqueakUnixConfig selector: #extraSources
+ 
+ If we needed to we could add or remove these in our Configuration.
+ 
+ For us, there is nothing to do here.
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>setGlobalOptions (in category 'pages') -----
+ setGlobalOptions
+ 	^HelpTopic
+ 		title:'setGlobalOptions: self'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ For this method there is nothing to do. Here is why.
+ 
+ Let''s start by seeing what classes implement the method
+ 
+ SystemNavigation browseAllImplementorsOf: #setGlobalOptions:
+ 
+ We see that  CPlatformConfigForSqueak implements it (The other classes are from the pharo package. These will go way after the dependency on the pharo code is factored out).
+ 
+ Looking at it, we see that the method  implements the Method Redirect pattern 
+ 
+ Since we have configured for buildType: #build, the Method Redirect Pattern will invoke the  setGlobalOptionsBuild: aMaker method.
+ 
+ So we look at the implementors of it..
+ 
+ SystemNavigation browseAllImplementorsOf: #setGlobalOptionsBuild:
+ 
+ We see only CPlatformConfigForSqueak implements the method. Reading the method comments, we see that it generates CMakeLists.txt commands that span all platforms. 
+ 
+ No subclasses of CPlatformConfigForSqueak override it.
+ 
+ There is nothing for us to override here. Let''s move on.
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>setGlobalOptionsAfterDetermineSystem (in category 'pages') -----
+ setGlobalOptionsAfterDetermineSystem
+ 	^HelpTopic
+ 		title:'setGlobalOptionsAfterDetermineSystem'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ SystemNavigation browseAllImplementorsOf: #setGlobalOptionsAfterDetermineSystem:
+ 
+ 
+ In the CPlatformConfigForSqueak>>setGlobalOptionsAfterDetermineSystem: aMaker, we see the Method Redirect Pattern employed. Since this is for buildType #build, the method will re-route to self setGlobalOptionsAfterDetermineSystemBuild
+ 
+ SystemNavigation browseAllImplementorsOf: #setGlobalOptionsAfterDetermineSystemBuild:
+ 
+ We see the CPLatformConfigForSqueak forces a subclass to implement it and the SqueakUnixConfig implements it.
+ 
+ In SqueakUnixConfig a CMakeSet is created and initialized. You can see the resultant output by printing the below expression:
+ 
+ ((CMakeSet new) variable:''CMAKE_C_COMPILER'' value:''gcc'') content
+ 
+ Currently this is a platform level method, however, we can envision it being set lower when ''gcc'' is not the default compiler.
+ 
+ For our purposes, there is nothing we need to do.
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>setPlatformSources (in category 'pages') -----
+ setPlatformSources
+ 	^HelpTopic
+ 		title:'setPlatformSources'
+ 		contents:'
+ Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ SystemNavigation browseAllImplementorsOf: #setPlatformSources:
+ 
+ We see the Method Redirect Pattern.
+ 
+ SystemNavigation browseAllImplementorsOf: #setPlatformSourcesBuild:
+ 
+ Looking at Linux64x86w32BitSqueakCogSpurConfig>>setPlatformSourceBuild: aMaker 
+ 
+ we see work we did earlier in this tutorial. 
+ 
+ If you recall, on Configuration initialization the platformSources variable was populated with the names of source files in Cog/platforms/unix/vm
+ 
+ Here we must return a subset of that data.
+ 
+ .'
+ !

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>specifyCogitClass (in category 'pages') -----
+ specifyCogitClass
+ 	^HelpTopic
+ 		title:'Specify Cogit Class'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ Depending on the type of vm we are building, we must specify the cogit class	
+ 
+ ToolSet browse: CPlatformConfigForSqueak selector: #cogitClass
+ 
+ The types we can return are
+ 
+ 	^SimpleStackBasedCogit
+ 	^ StackToRegisterMappingCogit 
+ 	^SistaStackToRegisterMappingCogit
+ 
+ These are subclasses of Cogit.
+ Cogit browseHierarchy
+ 
+ Since we are building a Cog VM we need the StackToRegisterMappingCogit.
+ 
+ (I need to get with Eliot to specify this exactly)
+ 
+ For our purposes in this tutorial, we have our Linux64x86w32BitSqueakCogSpurConfig>>cogitClass return StackToRegisterMappingCogit.
+ 
+ ToolSet browse: Linux64x86w32BitSqueakCogSpurConfig selector: #cogitClass
+ 
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>specifyDirectories (in category 'pages') -----
+ specifyDirectories
+ 	^HelpTopic
+ 		title:'Specify Directories'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ Our new Configuration must correctly name two directory trees.
+ 
+ The first is  the cmake.build.* directory tree where the generated CMake output is placed.
+ The second is the cmake.products/* directory tree where the compiled vm is placed.
+ 
+ 
+ Correctly naming these is a courtesy you should extend as the system grows*.
+ 
+ 
+ For this particular Configuration, we want a cmake.build.* directory that looks like this:
+ 
+ oscogvm/cmake.products/cmake.build.linux64x86w32BitCompatibility/squeak.cog.spur
+ 
+ 
+ and we want a cmake.products/* directory that looks like this:
+ 
+ oscogvm/cmake.products/cmake.build.linux64x86w32BitCompatibility/squeak.cog.spur/build
+ 
+ 
+ Each directory in those trees is accessible viathe the CPlatformConfigForSqueak in the ''cmake directory'' category.
+ 
+ ToolSet browseClass: CPlatformConfigForSqueak category: ''cmake directory''.
+ 
+ There are two method variants.
+ 
+ The first variant is hardcoded in the method itself. For example the platform directories are stored as...
+ 
+ dirLinux32Armv6
+ 	^''cmake.build.linux32armv6''
+ 
+ or, for our configuration
+ 
+ dirLinux64x86w32BitCompatibility
+ 	^''cmake.build.linux64x86w32BitCompatibility''
+ 	
+ The second variant accesses the  name of a buildType directory via the SqueakCMakeVMMakerAbstractBuilder (do a printIt or doIt).
+ 
+ dirBuild
+ 	^SqueakCMakeVMMakerAbstractBuilder default buildTypeAndDirectoryInfo at: #build	
+ 
+ 
+ 
+ Each part of the directory tree is contained/accessible via these methods. It is our job to select the corect ones for our purposes.
+ 
+ Here is an example of mapping this output directory path
+ ''oscogvm/cmake.products/cmake.build.linux64x86w32BitCompatibility/squeak.cog.spur/build''
+ 
+ to the methods that output each part.
+ 
+ |c|
+ c:=(CPlatformConfigForSqueak basicNew). 
+ (c oscogvm), ''/'', (c dirOutput), ''/'', (c dirLinux64x86w32BitCompatibility), ''/'', (c squeakCogSpur), ''/'', (c dirBuild)
+ 
+ 
+ The methods corresponding to each of the above directory names are:
+ 
+ topDir
+ dirOutput
+ dirBuildPlatform
+ dirBuildLanguageVMMM
+ buildType (not a method,this is a private instance variable in the configuration)
+ 
+ The first two, topDir and dirOutput are contained in CPlatformConfigForSqueak
+ dirBuildPlatform is contained at the platform level
+ 
+ SystemNavigation new browseAllImplementorsOf: #dirBuildPlatform localTo:CPlatformConfigForSqueak.
+ 
+ dirBuildLangaugeVMMM is at the specific Configuration level
+ SystemNavigation new browseAllImplementorsOf: #dirBuildLanguageVMMM localTo:CPlatformConfigForSqueak.
+ 
+ buildType is set when we configure the Configuration for a particular buildType and is stored in the SqueakCMakeVMMakerAbstractBuilder at its initialization.
+ 
+ SystemNavigation new browseAllImplementorsOf: #initializeBuildTypeAndDirectoryInfo
+ 
+ It is this values that the CPlatformConfigForSqueak access via dirBuild, dirBuildAssert etc...
+ SystemNavigation new browseAllImplementorsOf: #dirBuild
+ 
+ 
+ Similarly, the build directory tree 
+ ''oscogvm/cmake.build.linux64x86w32BitCompatibility/squeak.cog.spur/build/''
+ 
+ has methods corresponding to each of the above directory names. they are:
+ 
+ topDir
+ dirBuildPlatform
+ dirBuildLanguageVMMM
+ buildType (not a method,this is a private instance variable in the configuration)
+ 
+ It follows then, that for our Configuration we need to make the method dirBuildLanguageVMMM return ''squeak.cog.spur''.
+ 
+ We cover that  in the next Help page.
+ 
+ 
+ *The naming convention is straightforward and convered in the ''Naming Convetions'' page of the Developer Guide Overview Help.
+ 
+ 
+ (HelpBrowser openOn: CMakeVMMakerSqueakOverviewHelp) model
+ showTopicThat: [:topic | topic key = #namingConventions].
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>specifyPlugins (in category 'pages') -----
+ specifyPlugins
+ 	^HelpTopic
+ 		title:'Specify Plugins'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ We can specify which plugins we want on our configuration by overriding our platform''s defaultExternalPlugins and defaultInternalPlugins methods.
+ 
+ The default set can be further customized according to buildType if desired via the externalPlugins[BuildType] and internalPlugins[BuildType] redirect pattern
+ 
+ We will cover only the internalPlugins scenario here. The methodology is exactly the same for externalPlugins.
+ 
+ Let''s look first at the defaultInternalPlugins
+ 
+ SystemNavigation browseAllImplementorsOf: #defaultInternalPlugins
+ 
+ Looking at the Linux64x86w32BitConfigUsrLib we see that it just returns a default collection of class names. 
+ 
+ The defaultInternalPlugins message is  typically sent from the internalPlugins[buildType] method.
+ 
+ SystemNavigation browseAllImplementorsOf: #internalPlugins
+ 
+ Here we see that CPlatformConfigForSqueak implements the message redirect pattern.
+ 
+ SystemNavigation browseAllImplementorsOf: #internalPluginsBuild
+ 
+ In CPlatformConfigForSqueak >> internalPluginsBuild forces subclasses to implement the method.
+ 
+ Looking at 
+ 
+ SystemNavigation browseAllImplementorsOf: #internalPluginsBuildMultiThreadedDebug
+ we see the default is to return the default list provided in internalPluginsBuild.
+ 
+ This enables configurations to customize their plugins with a good degree of granularity should we want to change the plugins we use based on buildType while keeping things simple in the default case.
+ 
+ To summarize, a Configuration specifies what plugins it wants to build (either internal or external) by modifying or overriding the list of Plugin class names stored in defaultInternalPlugins or defaultExternalPlugins by overriding the internalPlugins[buildType] method or externalPlugins[buildType] method
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>standardIncludes (in category 'pages') -----
+ standardIncludes
+ 	^HelpTopic
+ 		title:'standardIncludes'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ 
+ As of CMakeVMMakerSqueak-tty.114 the method is a legacy method from the pharo CPlatformConfig. It is expect it (and this help page!!) will go away on a refactoring pass when the dependency on the pharo package is removed.
+ 
+ 
+ SystemNavigation browseAllImplementorsOf: #standardIncludes
+ 
+ CPlatformConfig browseHierarchy
+ 
+ In the CPlatformConfigForSqueak>>standardIncludes, we see the Method Redirect Pattern employed. Since this is for buildType #build, the method will re-route to self standardIncludesBuild.
+ 
+ SystemNavigation browseAllImplementorsOf: #standardIncludesBuild
+ 
+ The SqueakUnixConfig just writes some debug messages. 
+ 
+ There is nothing for us to do here.'!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>tackingStockOne (in category 'pages') -----
+ tackingStockOne
+ 	^HelpTopic
+ 		title:'Taking Stock'
+ 		contents:
+ 'Let''s take stock of where we are.
+ 
+ At this point, we have 
+ 1. Created a Configuration for a specific platform, language, VM and memory model .
+ 2. Invoked the appropriate  Builder for that Configuration asking it to ...
+ 	2.a configure itself for a specific BuildType and 
+ 	2.b asked it to ouput its content to a specific directory.
+ 3. Confirmed that the Configuration outputs its data.
+ 
+ Within the broad outline of this tutorial, you have covered the following
+ 1. Tests
+ 2. Where to place your new Configuration
+ 3. What Builder to use
+ 4. Create your Configuration
+ 5. Interaction of the Builder and your Configuration
+ 6. Generating a proof-of-concept CMake build tree.
+ 
+ 
+ The remainder of our task is customizing our Configuration so that the generated data correctly builds as the intention revealing name of the Configuration implies. I.e. we expect a Linux64x86w32BitSqueakCogSpurConfig, when configured for the buildType  #build to generate CMake (and other) files that in fact, creates a release version of a squeak.cog.spur vm that runs on Linux64 with 32 bit compat libs stored in /usr/lib.
+ 
+ Before we dive into customizing our new Configuration,  we step back to gain some perspective so that if there are problems, you know where to look. 
+ 
+ We will start by a quick summary of..
+ 
+ 1. The root Configuration class CPlatformConfigForSqueak
+ 2. The ''method redirect''  design pattern.
+ 3. The CMakeVMGeneratorForSqueak class
+ 
+ 
+ After that, we will take stock again and proceed with the customization of our example Linux64x86w32BitSqueakCogSpurConfig 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>tackingStockTwo (in category 'pages') -----
+ tackingStockTwo
+ 	^HelpTopic
+ 		title:'Taking Stock II'
+ 		contents:
+ 'Within the broad outline of this tutorial, you have covered the following: 
+ 1. Tests
+ 2. Where to place your new Configuration
+ 3. What Builder to use
+ 4. Create your Configuration
+ 5. Interaction of the Builder and your Configuration
+ 6. Generating a proof-of-concept CMake build tree.
+ 7. Some high level classes and concepts
+   7.a  CPlatformConfigForSqueak
+   7b. The Method Redirect Pattern (a broadly used design pattern in the system)
+   7c. The CMakeVMGeneratorForSqueak 
+ 
+ 
+ The remainder of this Example Workflow will be the customization of the Linux64x86w32BitSqueakCogSpurConfig and generating a working build.
+ 
+ To do this by 
+ 
+ Examining the CPlatformConfigForSqueak>>initialize process
+ Working through each statement in the CMakeVMGeneratorForSqueak>>generateByTemplate cascade in turn.
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>tests (in category 'pages') -----
+ tests
+ 	"This method was automatically generated. Edit it using:"
+ 	"a HelpBrowser edit: #tests"
+ 	^HelpTopic
+ 		title: 'Tests'
+ 		contents: 
+ 'Within the broad outline of this tutorial, you are here: 
+ 1. Tests.
+ 
+ The Tests are in class category CMakeVMMakerSqueak-Tests.
+ 
+ They are:
+ 
+ CMakeVMMakerSqueakBuildersTest
+ CMakeVMMakerSqueakCommonConfigTest
+ CMakeVMMakerSqueakMacintoshConfigTest
+ CMakeVMMakerSqueakRedirectMethodsTest
+ CMakeVMMakerSqueakRedirectMethodsWithArgTest
+ CMakeVMMakerSqueakUnixConfigTest
+ CMakeVMMakerSqueakWindowsConfigTest
+ 
+ As of 2014.12.09 all tests pass. 
+ 
+ As we create the Configuration these tests will be an important check on our work and we will return to them often.!!' readStream nextChunkText!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>theVMGenerator (in category 'pages') -----
+ theVMGenerator
+ 	^HelpTopic
+ 		title:'The CMakeVMGeneratorForSqueak class'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 7. Some high level classes and concepts
+ 	7c. The CMakeVMGeneratorForSqueak 
+ 
+ Before we move onto setting the most common directives and flags in the Concrete Configuration, lets take a quick look at the class and  method that actually generates the CMake files for us. 
+ 
+ CMakeVMGeneratorForSqueak browseHierarchy
+ 
+ CMakeVMGeneratorForSqueak implements the Visitor Design pattern. It takes as input a Configuration and it operates on that Configuration in a methodical manner.
+ 
+ The CMakeVMGeneratorForSqueak has in instance variable named ''config''. This variable is our Configuration.
+ 
+ The methodical operation and generation of CMake output occurs in two places.
+ 
+ 1. In the Configuration>>initialize method
+ 	ToolSet browse: CPlatformConfigForSqueak selector: #initialize
+ 2. In the  CMakeVMGeneratorForSqueak>>generateByTemplate method.
+ 	ToolSet browse: CMakeVMGeneratorForSqueak selector: #generateByTemplate
+ 
+ The long cascade that starts with :
+ 
+ 	config 
+ 		setGlobalOptions: self;    
+ 		cmakePrefixPath;
+ 		cmakeIncludePath;.....
+ 
+ is the bulk of the CMake generation.
+ 
+ Here you see the CMakeVMGeneratorForSqueak iterating over the CPlatformConfigForSqueak Method Redirect methods.
+ 
+ Taking the ''cmakeIncludePath'' method for example...
+ SystemNavigation new browseAllImplementorsOf: #cmakeIncludePath localTo: CPlatformConfigForSqueak.
+ 
+ you see that based on the Configurations buildType, the appropriate Redirect Method out of :
+ 
+ cmakeIncludePathBuild
+ cmakeIncludePathBuildAssert
+ cmakeIncludePathBuildAssertITimerHeartbeat
+ cmakeIncludePathBuildDebug
+ cmakeIncludePathBuildDebugITimerHeartbeat
+ cmakeIncludePathBuildITimerHeartbeat
+ cmakeIncludePathBuildMultiThreaded
+ cmakeIncludePathBuildMultiThreadedAssert
+ cmakeIncludePathBuildMultiThreadedDebug
+ cmakeIncludePathNoBuildType
+ 
+ will be executed based on the Configurations buildType (which you set with your Builder earlier)
+ 
+ 
+ For debugging and troubleshooting you new Configuration, CMakeVMGeneratorForSqueak>>generateByTemplate enables you to step through CMake generation in an entirely predictable way.
+ 
+ Let''s recap next.
+ '
+ 
+ !

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialNewConfigurationHelp class>>vmsrc (in category 'pages') -----
+ vmsrc
+ 	^HelpTopic
+ 		title:'vmsrc'
+ 		contents:
+ 'Within the broad outline of this tutorial, you are here: 
+ 8. Customizing your Configuration.
+ 
+ 
+ write me.
+ '!

Item was added:
+ CMakeVMMakerSqueakHelp subclass: #CMakeVMMakerSqueakTutorialsHelp
+ 	instanceVariableNames: ''
+ 	classVariableNames: ''
+ 	poolDictionaries: ''
+ 	category: 'CMakeVMMakerSqueak-Help'!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialsHelp class>>bookName (in category 'accessing') -----
+ bookName 
+ 	^'Tutorials'!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialsHelp class>>key (in category 'accessing') -----
+ key
+ 	^'CMakeVMMakerSqueakTutorialsHelp'!

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialsHelp class>>pages (in category 'pages') -----
+ pages
+ 	^#( CMakeVMMakerSqueakTutorialEndUserHelp CMakeVMMakerSqueakTutorialNewConfigurationHelp CMakeVMMakerSqueakTutorialNewBuilderHelp)
+ 	
+ !

Item was added:
+ ----- Method: CMakeVMMakerSqueakTutorialsHelp class>>priority (in category 'accessing') -----
+ priority
+ 
+ 	^ 2!

Item was removed:
- ----- Method: CMakeVMMakerSqueakUnixConfigTest>>testAddVMDrivers (in category 'as yet unclassified') -----
- testAddVMDrivers
- 	self flag:'tty'. "Is the self shouldnt sufficient?"
- 	#( #SqueakUnixConfig ) 
- 		do:[:each | 
- 			(Smalltalk at:each) 
- 				allSubclassesDo:[:configuration | | o buildTypes vmGenerator|
- 					o:= configuration basicNew.
- 					o enabledebugmessages:true.
- 					o templates: OrderedCollection new. 
- 					(o excludeFromBuild not) & (configuration isAbstractBaseClass not)
- 						ifTrue:[
- 							buildTypes:=o availableBuildTypes copyWithoutAll:#(#buildNone).
- 							buildTypes do:[:buildType |
- 								o configureForBuildType: buildType.
- 								o initialize.
- 								vmGenerator:=CMakeVMGeneratorForSqueak new.
- 								vmGenerator config: o.
- 								vmGenerator output:(String new writeStream).
- 								self shouldnt: [o addVMPlugins: vmGenerator] raise: Error]]]].
- !

Item was added:
+ CMakeVMPlugin subclass: #CMakeVMSoundPulse
+ 	instanceVariableNames: ''
+ 	classVariableNames: ''
+ 	poolDictionaries: ''
+ 	category: 'CMakeVMMakerSqueak-VMPlugins'!
+ 
+ !CMakeVMSoundPulse commentStamp: 'tty 5/30/2016 11:56' prior: 0!
+ A CMakeVMSoundPulse is a data-bucket that holds configration information!

Item was added:
+ ----- Method: CMakeVMSoundPulse>>initialize (in category 'initialize-release') -----
+ initialize
+ 	super initialize.
+ 	module :='vm-sound-pulse'!

Item was removed:
- ----- Method: CPlatformConfigForSqueak>>addVMDrivers: (in category 'cmake buildType redirects') -----
- addVMDrivers: aMaker
- 	"CMakeVMMaker compat"
- 	self deprecated:'CMakeVMMaker holdover from pharo. use addVMPlugins: aMaker'.
- 	^self addVMPlugins: aMaker
- !

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>addVMPlugins: (in category 'cmake buildType redirects') -----
  addVMPlugins: aMaker
  	"Route this message send to the message appropriate for my buildType "
  	|d |
  	d:= SqueakCMakeVMMakerAbstractBuilder default buildTypeAndDirectoryInfo copy.
  	d 
  		at: #build put: [self addVMPluginsBuild: aMaker];
  		at: #buildAssert  put: [self addVMPluginsBuildAssert: aMaker];
  		at: #buildAssertITimerHeartbeat  put: [self addVMPluginsBuildAssertITimerHeartbeat: aMaker];
              at:#buildDebug  put: [self addVMPluginsBuildDebug: aMaker];   
  		at: #buildDebugITimerHeartbeat  put: [self addVMPluginsBuildDebugITimerHeartbeat: aMaker ];
  		at: #buildITimerHeartbeat  put: [self addVMPluginsBuildITimerHeartbeat: aMaker];
  		at: #buildMultiThreaded  put: [self addVMPluginsBuildMultiThreaded: aMaker ];
  		at: #buildMultiThreadedAssert  put: [self addVMPluginsBuildMultiThreadedAssert: aMaker];
  		at: #buildMultiThreadedDebug   put: [self addVMPluginsBuildMultiThreadedDebug: aMaker ];
  		at: #buildNone put:[self addVMPluginsNoBuildType:  aMaker].
  	^(d at: buildType) value
  !

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>customizeVMPlugins (in category 'initialize-release') -----
  customizeVMPlugins
+ 	"This customization happens on CPlatformForSqueak>>initialization BEFORE the buildType has been set. 
+ 	
+ 	The initial customization will probably be the general case.
+ 	
+ 	HOWEVER, should a subclass of me want further granularity of included vm plugins based on buildType.
+ 	
+ 	simply override the 
+ 	
+ 		SqueakUnixConfig>>addVMPlugins[BuildType]: aMaker method
+ 	
+ 	and modify/limit the vmplugins variable there before the CMake configuration is written out.
+ 	
+ 	"
- 	self flag:'tty'. "is this needed on all platforms? consider moving down"
  	self subclassResponsibility!

Item was changed:
  ----- Method: CPlatformConfigForSqueak>>initialize (in category 'initialize-release') -----
  initialize
  	enabledebugmessages := false.
+ 	buildType:=cogDir:=templates:=platformSources:=vmplugins:=nil. 
  	self 
  		initializePlatformSources;
+ 		initializeVMPlugins;
- 		initializeVMDrivers;
  		customizeVMPlugins.
  		!

Item was removed:
- ----- Method: CPlatformConfigForSqueak>>initializeVMDrivers (in category 'initialize-release') -----
- initializeVMDrivers
- 	vmplugins := OrderedCollection new.
- 	vmplugins 
- 		addLast:(CMakeVMDisplayCustom new);
- 		addLast:(CMakeVMDisplayFbdev new);
- 		addLast:(CMakeVMDisplayNull new);
- 		addLast:(CMakeVMDisplayQuartz new);
- 		addLast:(CMakeVMDisplayX11 new);
- 		addLast:(CMakeVMSoundALSA new);
- 		addLast:(CMakeVMSoundCustom new);
- 		addLast:(CMakeVMSoundMacOSX new);
- 		addLast:(CMakeVMSoundNAS new);
- 		addLast:(CMakeVMSoundNull new);
- 		addLast:(CMakeVMSoundOSS new);
- 		addLast:(CMakeVMSoundSun new).
- !

Item was added:
+ ----- Method: CPlatformConfigForSqueak>>initializeVMPlugins (in category 'initialize-release') -----
+ initializeVMPlugins
+ 	vmplugins := OrderedCollection new.
+ 	vmplugins 
+ 		addLast:(CMakeVMDisplayCustom new);
+ 		addLast:(CMakeVMDisplayFbdev new);
+ 		addLast:(CMakeVMDisplayNull new);
+ 		addLast:(CMakeVMDisplayQuartz new);
+ 		addLast:(CMakeVMDisplayX11 new);
+ 		addLast:(CMakeVMSoundALSA new);
+ 		addLast:(CMakeVMSoundCustom new);
+ 		addLast:(CMakeVMSoundMacOSX new);
+ 		addLast:(CMakeVMSoundNAS new);
+ 		addLast:(CMakeVMSoundNull new);
+ 		addLast:(CMakeVMSoundOSS new);
+ 		addLast:(CMakeVMSoundPulse new);		
+ 		addLast:(CMakeVMSoundSun new).
+ !

Item was removed:
- ----- Method: CPlatformConfigForSqueak>>platformSources (in category 'source files') -----
- platformSources
- 
- "	
- 	SystemNavigation default browseMethodsWhoseNamesContain: 'platformSources'
- 
- ^#( platform specific array)
- "
- 
- 	self subclassResponsibility!

Item was removed:
- ----- Method: CPlatformConfigForSqueak>>vmDrivers (in category 'plugins') -----
- vmDrivers
- "SystemNavigation default browseMethodsWhoseNamesContain: 'vmDrivers'
- "
- 	self subclassResponsibility!

Item was removed:
- ----- Method: Linux32ARMv6Config>>addVMPluginsBuild: (in category 'cmake buildType redirects') -----
- addVMPluginsBuild: aMaker
- 	|temp o|
- 	self flag:'tty'. "I am writing sub-directory CMakeLists.txt here. Should I also write the config.cmake files?"
- 	enabledebugmessages
- 		ifTrue: [templates  "this message will go to the top level CMakeLists.txt file"
- 				addLast: (CMakeMessage new message: self class name , 'addVMPluginsBuild: aMaker')].
- 	vmplugins do:[ :vmp |                    
- 		o := String new writeStream.   "each VMPlugin gets its own CMakeLists.txt file in its own directory"
- 		temp := OrderedCollection new.	
- 		temp
- 			addAllLast:((CMakePluginVm new)    "this is the CMakeCompositTemplate"
- 					config: self 
- 					definitions: (vmp compilerdefinitions)
- 					module: (vmp module)
- 					sources: (vmp sources)
- 					includedirectories: (vmp includedirectories)).
- 		temp do: [:each |  o nextPutAll: (each content); cr].
- 	((self buildDir) directoryExists: (vmp module))
- 		ifFalse:[	(self buildDir) createDirectory: (vmp module)].
- 		self write: (o contents) toFile: vmp module , FileDirectory slash , aMaker outputFileName.
- 		templates   "this will go to the top level CMakeLists.txt file"
- 			addLast: ((CMakeAddSubDirectory new) sourcedir: (vmp module)) 
- 	].
- 
- 
- 
- 
- 
- 
- 
- 
- 
- !

Item was removed:
- ----- Method: Linux32ARMv6Config>>customizeCMakeVMDisplayNull (in category 'plugins') -----
- customizeCMakeVMDisplayNull
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMDisplayNull = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #('${targetPlatform}/vm-display-null/sqUnixDisplayNull') ;
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: #();
- 		linkerflags: (self linkerFlags);
- 		includedirectories:(OrderedCollection 
- 										with:'${crossDir}/plugins/FilePlugin' 
- 										with: '${targetPlatform}/plugins/B3DAcceleratorPlugin'  
-  									     with: '${crossDir}/plugins/B3DAcceleratorPlugin').
- 	self flag:'tty'. "I don't think includedirectories is correct. revisit"
- 
- 
- 
- 
- 
- 
- !

Item was removed:
- ----- Method: Linux32ARMv6Config>>customizeCMakeVMDisplayX11 (in category 'plugins') -----
- customizeCMakeVMDisplayX11
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMDisplayX11 = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #( '${targetPlatform}/vm-display-X11/sqUnixX11' '${targetPlatform}/vm-display-X11/sqUnixMozilla' );
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: (self externalLibraries);
- 		linkerflags: (self linkerFlags);
- 		includedirectories:(OrderedCollection 
- 										with:'${crossDir}/plugins/FilePlugin' 
- 										with: '${targetPlatform}/plugins/B3DAcceleratorPlugin'  
-  									     with: '${crossDir}/plugins/B3DAcceleratorPlugin').
- !

Item was removed:
- ----- Method: Linux32ARMv6Config>>customizeCMakeVMSoundALSA (in category 'plugins') -----
- customizeCMakeVMSoundALSA
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMSoundALSA = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #( '${targetPlatform}/vm-sound-ALSA/sqUnixSoundALSA' );
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: (self externalLibraries);
- 		linkerflags: (self linkerFlags);
- 		includedirectories: #().
- 	!

Item was removed:
- ----- Method: Linux32ARMv6Config>>customizeCMakeVMSoundNull (in category 'plugins') -----
- customizeCMakeVMSoundNull
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMSoundNull = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #( '${targetPlatform}/vm-sound-null/sqUnixSoundNull' );
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: (self externalLibraries);
- 		linkerflags: (self linkerFlags);
- 		includedirectories:#()
- 
- !

Item was removed:
- ----- Method: Linux32ARMv6Config>>customizeVMPlugins (in category 'plugins') -----
- customizeVMPlugins
- 	|mysubset iwantonly|
- 	"trim the vmdrivers ordered collection of CMakeVMDriver subclasses to only those I want. then customize them for use on this OS/platform"
- "	iwantonly :=	 #(#CMakeVMDisplayNull  #CMakeVMDisplayX11  #CMakeVMSoundALSA  #CMakeVMSoundNull ).
- 	mysubset := vmplugins select: [:vmd | 0 < (iwantonly occurrencesOf: (vmd class name) asSymbol)]. 
- 	vmplugins := mysubset.
- 	self 
- 		customizeCMakeVMDisplayNull;
- 		customizeCMakeVMDisplayX11;
- 		customizeCMakeVMSoundALSA;
- 		customizeCMakeVMSoundNull."!

Item was removed:
- ----- Method: Linux32x86Config>>addVMPluginsBuild: (in category 'cmake buildType redirects') -----
- addVMPluginsBuild: aMaker
- 	|temp o|
- 	self flag:'tty'. "I am writing sub-directory CMakeLists.txt here. Should I also write the config.cmake files?"
- 	enabledebugmessages
- 		ifTrue: [templates  "this message will go to the top level CMakeLists.txt file"
- 				addLast: (CMakeMessage new message: self class name , 'addVMPluginsBuild: aMaker')].
- 	vmplugins do:[ :vmp |                    
- 		o := String new writeStream.   "each VMPlugin gets its own CMakeLists.txt file in its own directory"
- 		temp := OrderedCollection new.	
- 		temp
- 			addAllLast:((CMakePluginVm new)    "this is the CMakeCompositTemplate"
- 					config: self 
- 					definitions: (vmp compilerdefinitions)
- 					module: (vmp module)
- 					sources: (vmp sources)
- 					includedirectories: (vmp includedirectories)).
- 		temp do: [:each |  o nextPutAll: (each content); cr].
- 	((self buildDir) directoryExists: (vmp module))
- 		ifFalse:[	(self buildDir) createDirectory: (vmp module)].
- 		self write: (o contents) toFile: vmp module , FileDirectory slash , aMaker outputFileName.
- 		templates   "this will go to the top level CMakeLists.txt file"
- 			addLast: ((CMakeAddSubDirectory new) sourcedir: (vmp module)) 
- 	].
- 
- 
- 
- 
- 
- 
- 
- 
- 
- !

Item was removed:
- ----- Method: Linux32x86Config>>customizeCMakeVMDisplayNull (in category 'plugins') -----
- customizeCMakeVMDisplayNull
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMDisplayNull = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #('${targetPlatform}/vm-display-null/sqUnixDisplayNull') ;
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: #();
- 		linkerflags: (self linkerFlags);
- 		includedirectories:(OrderedCollection 
- 										with:'${crossDir}/plugins/FilePlugin' 
- 										with: '${targetPlatform}/plugins/B3DAcceleratorPlugin'  
-  									     with: '${crossDir}/plugins/B3DAcceleratorPlugin').
- 	self flag:'tty'. "I don't think includedirectories is correct. revisit"
- 
- 
- 
- 
- 
- 
- !

Item was removed:
- ----- Method: Linux32x86Config>>customizeCMakeVMDisplayX11 (in category 'plugins') -----
- customizeCMakeVMDisplayX11
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMDisplayX11 = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #( '${targetPlatform}/vm-display-X11/sqUnixX11' '${targetPlatform}/vm-display-X11/sqUnixMozilla' );
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: (self externalLibraries);
- 		linkerflags: (self linkerFlags);
- 		includedirectories:(OrderedCollection 
- 										with:'${crossDir}/plugins/FilePlugin' 
- 										with: '${targetPlatform}/plugins/B3DAcceleratorPlugin'  
-  									     with: '${crossDir}/plugins/B3DAcceleratorPlugin').
- !

Item was removed:
- ----- Method: Linux32x86Config>>customizeCMakeVMSoundALSA (in category 'plugins') -----
- customizeCMakeVMSoundALSA
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMSoundALSA = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #( '${targetPlatform}/vm-sound-ALSA/sqUnixSoundALSA' );
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: (self externalLibraries);
- 		linkerflags: (self linkerFlags);
- 		includedirectories: #().
- 	!

Item was removed:
- ----- Method: Linux32x86Config>>customizeCMakeVMSoundNull (in category 'plugins') -----
- customizeCMakeVMSoundNull
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMSoundNull = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #( '${targetPlatform}/vm-sound-null/sqUnixSoundNull' );
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: (self externalLibraries);
- 		linkerflags: (self linkerFlags);
- 		includedirectories:#()
- 
- !

Item was removed:
- ----- Method: Linux32x86Config>>customizeVMPlugins (in category 'plugins') -----
- customizeVMPlugins
- 	|mysubset iwantonly|
- 	"trim the vmdrivers ordered collection of CMakeVMDriver subclasses to only those I want. then customize them for use on this OS/platform"
- 	iwantonly :=	 #(#CMakeVMDisplayNull  #CMakeVMDisplayX11  #CMakeVMSoundALSA  #CMakeVMSoundNull ).
- 	mysubset := vmplugins select: [:vmd | 0 < (iwantonly occurrencesOf: (vmd class name) asSymbol)]. 
- 	vmplugins := mysubset.
- 	self 
- 		customizeCMakeVMDisplayNull;
- 		customizeCMakeVMDisplayX11;
- 		customizeCMakeVMSoundALSA;
- 		customizeCMakeVMSoundNull.
- 
- 
- 
- !

Item was removed:
- ----- Method: Linux64x64Config>>addVMPluginsBuild: (in category 'cmake buildType redirects') -----
- addVMPluginsBuild: aMaker
- 	|temp o|
- 	self flag:'tty'. "I am writing sub-directory CMakeLists.txt here. Should I also write the config.cmake files?"
- 	enabledebugmessages
- 		ifTrue: [templates  "this message will go to the top level CMakeLists.txt file"
- 				addLast: (CMakeMessage new message: self class name , 'addVMPluginsBuild: aMaker')].
- 	vmplugins do:[ :vmp |                    
- 		o := String new writeStream.   "each VMPlugin gets its own CMakeLists.txt file in its own directory"
- 		temp := OrderedCollection new.	
- 		temp
- 			addAllLast:((CMakePluginVm new)    "this is the CMakeCompositTemplate"
- 					config: self 
- 					definitions: (vmp compilerdefinitions)
- 					module: (vmp module)
- 					sources: (vmp sources)
- 					includedirectories: (vmp includedirectories)).
- 		temp do: [:each |  o nextPutAll: (each content); cr].
- 	((self buildDir) directoryExists: (vmp module))
- 		ifFalse:[	(self buildDir) createDirectory: (vmp module)].
- 		self write: (o contents) toFile: vmp module , FileDirectory slash , aMaker outputFileName.
- 		templates   "this will go to the top level CMakeLists.txt file"
- 			addLast: ((CMakeAddSubDirectory new) sourcedir: (vmp module)) 
- 	].
- 
- 
- 
- 
- 
- 
- 
- 
- 
- !

Item was removed:
- ----- Method: Linux64x64Config>>customizeCMakeVMDisplayNull (in category 'plugins') -----
- customizeCMakeVMDisplayNull
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMDisplayNull = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #('${targetPlatform}/vm-display-null/sqUnixDisplayNull') ;
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: #();
- 		linkerflags: (self linkerFlags);
- 		includedirectories:(OrderedCollection 
- 										with:'${crossDir}/plugins/FilePlugin' 
- 										with: '${targetPlatform}/plugins/B3DAcceleratorPlugin'  
-  									     with: '${crossDir}/plugins/B3DAcceleratorPlugin').
- 	self flag:'tty'. "I don't think includedirectories is correct. revisit"
- 
- 
- 
- 
- 
- 
- !

Item was removed:
- ----- Method: Linux64x64Config>>customizeCMakeVMDisplayX11 (in category 'plugins') -----
- customizeCMakeVMDisplayX11
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMDisplayX11 = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #( '${targetPlatform}/vm-display-X11/sqUnixX11' '${targetPlatform}/vm-display-X11/sqUnixMozilla' );
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: (self externalLibraries);
- 		linkerflags: (self linkerFlags);
- 		includedirectories:(OrderedCollection 
- 										with:'${crossDir}/plugins/FilePlugin' 
- 										with: '${targetPlatform}/plugins/B3DAcceleratorPlugin'  
-  									     with: '${crossDir}/plugins/B3DAcceleratorPlugin').
- !

Item was removed:
- ----- Method: Linux64x64Config>>customizeCMakeVMSoundALSA (in category 'plugins') -----
- customizeCMakeVMSoundALSA
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMSoundALSA = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #( '${targetPlatform}/vm-sound-ALSA/sqUnixSoundALSA' );
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: (self externalLibraries);
- 		linkerflags: (self linkerFlags);
- 		includedirectories: #().
- 	!

Item was removed:
- ----- Method: Linux64x64Config>>customizeCMakeVMSoundNull (in category 'plugins') -----
- customizeCMakeVMSoundNull
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMSoundNull = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #( '${targetPlatform}/vm-sound-null/sqUnixSoundNull' );
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: (self externalLibraries);
- 		linkerflags: (self linkerFlags);
- 		includedirectories:#()
- 
- !

Item was removed:
- ----- Method: Linux64x64Config>>customizeVMPlugins (in category 'plugins') -----
- customizeVMPlugins
- 	|mysubset iwantonly|
- 	"trim the vmdrivers ordered collection of CMakeVMDriver subclasses to only those I want. then customize them for use on this OS/platform"
- 	iwantonly :=	 #(#CMakeVMDisplayNull  #CMakeVMDisplayX11  #CMakeVMSoundALSA  #CMakeVMSoundNull ).
- 	mysubset := vmplugins select: [:vmd | 0 < (iwantonly occurrencesOf: (vmd class name) asSymbol)]. 
- 	vmplugins := mysubset.
- 	self 
- 		customizeCMakeVMDisplayNull;
- 		customizeCMakeVMDisplayX11;
- 		customizeCMakeVMSoundALSA;
- 		customizeCMakeVMSoundNull.
- 
- 
- 
- !

Item was removed:
- ----- Method: Linux64x86w32BitConfigUsrLib>>addVMPluginsBuild: (in category 'cmake buildType redirects') -----
- addVMPluginsBuild: aMaker
- 	|temp o|
- 	self flag:'tty'. "I am writing sub-directory CMakeLists.txt here. Should I also write the config.cmake files?"
- 	enabledebugmessages
- 		ifTrue: [templates  "this message will go to the top level CMakeLists.txt file"
- 				addLast: (CMakeMessage new message: self class name , 'addVMPluginsBuild: aMaker')].
- 	vmplugins do:[ :vmp |                    
- 		o := String new writeStream.   "each VMPlugin gets its own CMakeLists.txt file in its own directory"
- 		temp := OrderedCollection new.	
- 		temp
- 			addAllLast:((CMakePluginVm new)    "this is the CMakeCompositTemplate"
- 					config: self 
- 					definitions: (vmp compilerdefinitions)
- 					module: (vmp module)
- 					sources: (vmp sources)
- 					includedirectories: (vmp includedirectories)).
- 		temp do: [:each |  o nextPutAll: (each content); cr].
- 	((self buildDir) directoryExists: (vmp module))
- 		ifFalse:[	(self buildDir) createDirectory: (vmp module)].
- 		self write: (o contents) toFile: vmp module , FileDirectory slash , aMaker outputFileName.
- 		templates   "this will go to the top level CMakeLists.txt file"
- 			addLast: ((CMakeAddSubDirectory new) sourcedir: (vmp module)) 
- 	].
- 
- 
- 
- 
- 
- 
- 
- 
- 
- !

Item was removed:
- ----- Method: Linux64x86w32BitConfigUsrLib>>customizeCMakeVMDisplayNull (in category 'plugins') -----
- customizeCMakeVMDisplayNull
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMDisplayNull = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #('${targetPlatform}/vm-display-null/sqUnixDisplayNull') ;
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: #();
- 		linkerflags: (self linkerFlags);
- 		includedirectories:(OrderedCollection 
- 										with:'${crossDir}/plugins/FilePlugin' 
- 										with: '${targetPlatform}/plugins/B3DAcceleratorPlugin'  
-  									     with: '${crossDir}/plugins/B3DAcceleratorPlugin').
- 	self flag:'tty'. "I don't think includedirectories is correct. revisit"
- 
- 
- 
- 
- 
- 
- !

Item was removed:
- ----- Method: Linux64x86w32BitConfigUsrLib>>customizeCMakeVMDisplayX11 (in category 'plugins') -----
- customizeCMakeVMDisplayX11
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMDisplayX11 = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #( '${targetPlatform}/vm-display-X11/sqUnixX11' '${targetPlatform}/vm-display-X11/sqUnixMozilla' );
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: (self externalLibraries);
- 		linkerflags: (self linkerFlags);
- 		includedirectories:(OrderedCollection 
- 										with:'${crossDir}/plugins/FilePlugin' 
- 										with: '${targetPlatform}/plugins/B3DAcceleratorPlugin'  
-  									     with: '${crossDir}/plugins/B3DAcceleratorPlugin').
- !

Item was removed:
- ----- Method: Linux64x86w32BitConfigUsrLib>>customizeCMakeVMSoundALSA (in category 'plugins') -----
- customizeCMakeVMSoundALSA
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMSoundALSA = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #( '${targetPlatform}/vm-sound-ALSA/sqUnixSoundALSA' );
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: (self externalLibraries);
- 		linkerflags: (self linkerFlags);
- 		includedirectories: #().
- 	!

Item was removed:
- ----- Method: Linux64x86w32BitConfigUsrLib>>customizeCMakeVMSoundNull (in category 'plugins') -----
- customizeCMakeVMSoundNull
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMSoundNull = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #( '${targetPlatform}/vm-sound-null/sqUnixSoundNull' );
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: (self externalLibraries);
- 		linkerflags: (self linkerFlags);
- 		includedirectories:#()
- 
- !

Item was removed:
- ----- Method: Linux64x86w32BitConfigUsrLib>>customizeVMPlugins (in category 'plugins') -----
- customizeVMPlugins
- 	|mysubset iwantonly|
- 	self flag: 'tty: consider pushing up to platform level on refactor'.
- 	"trim the vmdrivers ordered collection of CMakeVMDriver subclasses to only those I want. then customize them for use on this OS/platform"
- 	iwantonly :=	 #(#CMakeVMDisplayNull  #CMakeVMDisplayX11  #CMakeVMSoundALSA  #CMakeVMSoundNull ).
- 	mysubset := vmplugins select: [:vmd | 0 < (iwantonly occurrencesOf: (vmd class name) asSymbol)]. 
- 	vmplugins := mysubset.
- 	self 
- 		customizeCMakeVMDisplayNull;
- 		customizeCMakeVMDisplayX11;
- 		customizeCMakeVMSoundALSA;
- 		customizeCMakeVMSoundNull.
- 
- 
- 
- !

Item was removed:
- ----- Method: Linux64x86w32BitConfigUsrLib32>>addVMPluginsBuild: (in category 'cmake buildType redirects') -----
- addVMPluginsBuild: aMaker
- 	|temp o|
- 	self flag:'tty'. "I am writing sub-directory CMakeLists.txt here. Should I also write the config.cmake files?"
- 	enabledebugmessages
- 		ifTrue: [templates  "this message will go to the top level CMakeLists.txt file"
- 				addLast: (CMakeMessage new message: self class name , 'addVMPluginsBuild: aMaker')].
- 	vmplugins do:[ :vmp |                    
- 		o := String new writeStream.   "each VMPlugin gets its own CMakeLists.txt file in its own directory"
- 		temp := OrderedCollection new.	
- 		temp
- 			addAllLast:((CMakePluginVm new)    "this is the CMakeCompositTemplate"
- 					config: self 
- 					definitions: (vmp compilerdefinitions)
- 					module: (vmp module)
- 					sources: (vmp sources)
- 					includedirectories: (vmp includedirectories)).
- 		temp do: [:each |  o nextPutAll: (each content); cr].
- 	((self buildDir) directoryExists: (vmp module))
- 		ifFalse:[	(self buildDir) createDirectory: (vmp module)].
- 		self write: (o contents) toFile: vmp module , FileDirectory slash , aMaker outputFileName.
- 		templates   "this will go to the top level CMakeLists.txt file"
- 			addLast: ((CMakeAddSubDirectory new) sourcedir: (vmp module)) 
- 	].
- 
- 
- 
- 
- 
- 
- 
- 
- 
- !

Item was removed:
- ----- Method: Linux64x86w32BitConfigUsrLib32>>customizeCMakeVMDisplayNull (in category 'plugins') -----
- customizeCMakeVMDisplayNull
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMDisplayNull = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #('${targetPlatform}/vm-display-null/sqUnixDisplayNull') ;
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: #();
- 		linkerflags: (self linkerFlags);
- 		includedirectories:(OrderedCollection 
- 										with:'${crossDir}/plugins/FilePlugin' 
- 										with: '${targetPlatform}/plugins/B3DAcceleratorPlugin'  
-  									     with: '${crossDir}/plugins/B3DAcceleratorPlugin').
- 	self flag:'tty'. "I don't think includedirectories is correct. revisit"
- 
- 
- 
- 
- 
- 
- !

Item was removed:
- ----- Method: Linux64x86w32BitConfigUsrLib32>>customizeCMakeVMDisplayX11 (in category 'plugins') -----
- customizeCMakeVMDisplayX11
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMDisplayX11 = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #( '${targetPlatform}/vm-display-X11/sqUnixX11' '${targetPlatform}/vm-display-X11/sqUnixMozilla' );
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: (self externalLibraries);
- 		linkerflags: (self linkerFlags);
- 		includedirectories:(OrderedCollection 
- 										with:'${crossDir}/plugins/FilePlugin' 
- 										with: '${targetPlatform}/plugins/B3DAcceleratorPlugin'  
-  									     with: '${crossDir}/plugins/B3DAcceleratorPlugin').
- !

Item was removed:
- ----- Method: Linux64x86w32BitConfigUsrLib32>>customizeCMakeVMSoundALSA (in category 'plugins') -----
- customizeCMakeVMSoundALSA
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMSoundALSA = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #( '${targetPlatform}/vm-sound-ALSA/sqUnixSoundALSA' );
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: (self externalLibraries);
- 		linkerflags: (self linkerFlags);
- 		includedirectories: #().
- 	!

Item was removed:
- ----- Method: Linux64x86w32BitConfigUsrLib32>>customizeCMakeVMSoundNull (in category 'plugins') -----
- customizeCMakeVMSoundNull
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMSoundNull = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #( '${targetPlatform}/vm-sound-null/sqUnixSoundNull' );
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: (self externalLibraries);
- 		linkerflags: (self linkerFlags);
- 		includedirectories:#()
- 
- !

Item was removed:
- ----- Method: Linux64x86w32BitConfigUsrLib32>>customizeVMPlugins (in category 'plugins') -----
- customizeVMPlugins
- 	|mysubset iwantonly|
- 	"trim the vmdrivers ordered collection of CMakeVMDriver subclasses to only those I want. then customize them for use on this OS/platform"
- 	iwantonly :=	 #(#CMakeVMDisplayNull  #CMakeVMDisplayX11  #CMakeVMSoundALSA  #CMakeVMSoundNull ).
- 	mysubset := vmplugins select: [:vmd | 0 < (iwantonly occurrencesOf: (vmd class name) asSymbol)]. 
- 	vmplugins := mysubset.
- 	self 
- 		customizeCMakeVMDisplayNull;
- 		customizeCMakeVMDisplayX11;
- 		customizeCMakeVMSoundALSA;
- 		customizeCMakeVMSoundNull.
- 
- 
- 
- !

Item was removed:
- ----- Method: SqueakBSD32x86Config>>addVMPluginsBuild: (in category 'cmake buildType redirects') -----
- addVMPluginsBuild: aMaker
- 	|temp o|
- 	self flag:'tty'. "I am writing sub-directory CMakeLists.txt here. Should I also write the config.cmake files?"
- 	enabledebugmessages
- 		ifTrue: [templates  "this message will go to the top level CMakeLists.txt file"
- 				addLast: (CMakeMessage new message: self class name , 'addVMPluginsBuild: aMaker')].
- 	vmplugins do:[ :vmp |                    
- 		o := String new writeStream.   "each VMPlugin gets its own CMakeLists.txt file in its own directory"
- 		temp := OrderedCollection new.	
- 		temp
- 			addAllLast:((CMakePluginVm new)    "this is the CMakeCompositTemplate"
- 					config: self 
- 					definitions: (vmp compilerdefinitions)
- 					module: (vmp module)
- 					sources: (vmp sources)
- 					includedirectories: (vmp includedirectories)).
- 		temp do: [:each |  o nextPutAll: (each content); cr].
- 	((self buildDir) directoryExists: (vmp module))
- 		ifFalse:[	(self buildDir) createDirectory: (vmp module)].
- 		self write: (o contents) toFile: vmp module , FileDirectory slash , aMaker outputFileName.
- 		templates   "this will go to the top level CMakeLists.txt file"
- 			addLast: ((CMakeAddSubDirectory new) sourcedir: (vmp module)) 
- 	].
- 
- 
- 
- 
- 
- 
- 
- 
- 
- !

Item was removed:
- ----- Method: SqueakBSD32x86Config>>customizeCMakeVMDisplayNull (in category 'plugins') -----
- customizeCMakeVMDisplayNull
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMDisplayNull = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #('${targetPlatform}/vm-display-null/sqUnixDisplayNull') ;
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: #();
- 		linkerflags: (self linkerFlags);
- 		includedirectories:(OrderedCollection 
- 										with:'${crossDir}/plugins/FilePlugin' 
- 										with: '${targetPlatform}/plugins/B3DAcceleratorPlugin'  
-  									     with: '${crossDir}/plugins/B3DAcceleratorPlugin').
- 	self flag:'tty'. "I don't think includedirectories is correct. revisit"
- 
- 
- 
- 
- 
- 
- !

Item was removed:
- ----- Method: SqueakBSD32x86Config>>customizeCMakeVMDisplayX11 (in category 'plugins') -----
- customizeCMakeVMDisplayX11
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMDisplayX11 = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #( '${targetPlatform}/vm-display-X11/sqUnixX11' '${targetPlatform}/vm-display-X11/sqUnixMozilla' );
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: (self externalLibraries);
- 		linkerflags: (self linkerFlags);
- 		includedirectories:(OrderedCollection 
- 										with:'${crossDir}/plugins/FilePlugin' 
- 										with: '${targetPlatform}/plugins/B3DAcceleratorPlugin'  
-  									     with: '${crossDir}/plugins/B3DAcceleratorPlugin').
- !

Item was removed:
- ----- Method: SqueakBSD32x86Config>>customizeCMakeVMSoundALSA (in category 'plugins') -----
- customizeCMakeVMSoundALSA
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMSoundALSA = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #( '${targetPlatform}/vm-sound-ALSA/sqUnixSoundALSA' );
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: (self externalLibraries);
- 		linkerflags: (self linkerFlags);
- 		includedirectories: #().
- 	!

Item was removed:
- ----- Method: SqueakBSD32x86Config>>customizeCMakeVMSoundNull (in category 'plugins') -----
- customizeCMakeVMSoundNull
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMSoundNull = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #( '${targetPlatform}/vm-sound-null/sqUnixSoundNull' );
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: (self externalLibraries);
- 		linkerflags: (self linkerFlags);
- 		includedirectories:#()
- 
- !

Item was removed:
- ----- Method: SqueakBSD32x86Config>>customizeVMPlugins (in category 'plugins') -----
- customizeVMPlugins
- 	|mysubset iwantonly|
- 	"trim the vmdrivers ordered collection of CMakeVMDriver subclasses to only those I want. then customize them for use on this OS/platform"
- 	iwantonly :=	 #(#CMakeVMDisplayNull  #CMakeVMDisplayX11  #CMakeVMSoundALSA  #CMakeVMSoundNull ).
- 	mysubset := vmplugins select: [:vmd | 0 < (iwantonly occurrencesOf: (vmd class name) asSymbol)]. 
- 	vmplugins := mysubset.
- 	self 
- 		customizeCMakeVMDisplayNull;
- 		customizeCMakeVMDisplayX11;
- 		customizeCMakeVMSoundALSA;
- 		customizeCMakeVMSoundNull.
- 
- 
- 
- !

Item was changed:
  ----- Method: SqueakCMakeVMMakerAbstractBuilder>>generateByTemplate (in category 'building') -----
  generateByTemplate
  	self flag:'tty'. "If we ever script builds, this inform must by bypassed"
+ 	(config isKindOf: CPlatformConfigForSqueak)
- 	(config isKindOf: CPlatformConfig)
  		ifTrue:[
  			(config excludeFromBuild)
  				ifTrue:[self inform: '', config class, ' >>"excludeFromBuild" answers #true. Most likely because it is under development']
  				ifFalse: [config generateByTemplate]]
  		!

Item was changed:
  ----- Method: SqueakIA32BochsConfig>>customizeVMPlugins (in category 'plugins') -----
  customizeVMPlugins
  	"do nothing,. only used on linux?"!

Item was removed:
- ----- Method: SqueakIOSConfig>>addVMPluginsBuild: (in category 'cmake buildType redirects') -----
- addVMPluginsBuild: aMaker
- 	|temp o|
- 	self flag:'tty'. "I am writing sub-directory CMakeLists.txt here. Should I also write the config.cmake files?"
- 	enabledebugmessages
- 		ifTrue: [templates  "this message will go to the top level CMakeLists.txt file"
- 				addLast: (CMakeMessage new message: self class name , 'addVMPluginsBuild: aMaker')].
- 	vmplugins do:[ :vmp |                    
- 		o := String new writeStream.   "each VMPlugin gets its own CMakeLists.txt file in its own directory"
- 		temp := OrderedCollection new.	
- 		temp
- 			addAllLast:((CMakePluginVm new)    "this is the CMakeCompositTemplate"
- 					config: self 
- 					definitions: (vmp compilerdefinitions)
- 					module: (vmp module)
- 					sources: (vmp sources)
- 					includedirectories: (vmp includedirectories)).
- 		temp do: [:each |  o nextPutAll: (each content); cr].
- 	((self buildDir) directoryExists: (vmp module))
- 		ifFalse:[	(self buildDir) createDirectory: (vmp module)].
- 		self write: (o contents) toFile: vmp module , FileDirectory slash , aMaker outputFileName.
- 		templates   "this will go to the top level CMakeLists.txt file"
- 			addLast: ((CMakeAddSubDirectory new) sourcedir: (vmp module)) 
- 	].
- 
- 
- 
- 
- 
- 
- 
- 
- 
- !

Item was removed:
- ----- Method: SqueakIOSConfig>>customizeCMakeVMDisplayNull (in category 'plugins') -----
- customizeCMakeVMDisplayNull
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMDisplayNull = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #('${targetPlatform}/vm-display-null/sqUnixDisplayNull') ;
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: #();
- 		linkerflags: (self linkerFlags);
- 		includedirectories:(OrderedCollection 
- 										with:'${crossDir}/plugins/FilePlugin' 
- 										with: '${targetPlatform}/plugins/B3DAcceleratorPlugin'  
-  									     with: '${crossDir}/plugins/B3DAcceleratorPlugin').
- 	self flag:'tty'. "I don't think includedirectories is correct. revisit"
- 
- 
- 
- 
- 
- 
- !

Item was removed:
- ----- Method: SqueakIOSConfig>>customizeCMakeVMDisplayX11 (in category 'plugins') -----
- customizeCMakeVMDisplayX11
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMDisplayX11 = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #( '${targetPlatform}/vm-display-X11/sqUnixX11' '${targetPlatform}/vm-display-X11/sqUnixMozilla' );
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: (self externalLibraries);
- 		linkerflags: (self linkerFlags);
- 		includedirectories:(OrderedCollection 
- 										with:'${crossDir}/plugins/FilePlugin' 
- 										with: '${targetPlatform}/plugins/B3DAcceleratorPlugin'  
-  									     with: '${crossDir}/plugins/B3DAcceleratorPlugin').
- !

Item was removed:
- ----- Method: SqueakIOSConfig>>customizeCMakeVMSoundALSA (in category 'plugins') -----
- customizeCMakeVMSoundALSA
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMSoundALSA = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #( '${targetPlatform}/vm-sound-ALSA/sqUnixSoundALSA' );
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: (self externalLibraries);
- 		linkerflags: (self linkerFlags);
- 		includedirectories: #().
- 	!

Item was removed:
- ----- Method: SqueakIOSConfig>>customizeCMakeVMSoundNull (in category 'plugins') -----
- customizeCMakeVMSoundNull
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMSoundNull = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #( '${targetPlatform}/vm-sound-null/sqUnixSoundNull' );
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: (self externalLibraries);
- 		linkerflags: (self linkerFlags);
- 		includedirectories:#()
- 
- !

Item was removed:
- ----- Method: SqueakIOSConfig>>customizeVMPlugins (in category 'plugins') -----
- customizeVMPlugins
- 	|mysubset iwantonly|
- 	"trim the vmdrivers ordered collection of CMakeVMDriver subclasses to only those I want. then customize them for use on this OS/platform"
- 	iwantonly :=	 #(#CMakeVMDisplayNull  #CMakeVMDisplayX11  #CMakeVMSoundALSA  #CMakeVMSoundNull ).
- 	mysubset := vmplugins select: [:vmd | 0 < (iwantonly occurrencesOf: (vmd class name) asSymbol)]. 
- 	vmplugins := mysubset.
- 	self 
- 		customizeCMakeVMDisplayNull;
- 		customizeCMakeVMDisplayX11;
- 		customizeCMakeVMSoundALSA;
- 		customizeCMakeVMSoundNull.
- 
- 
- 
- !

Item was changed:
  ----- Method: SqueakMacintoshConfig>>addVMPluginsBuild: (in category 'cmake buildType redirects') -----
  addVMPluginsBuild: aMaker
+ 	"do nothing. "!
- 	"do nothing. Unless Mac uses this, then push me down"!

Item was removed:
- ----- Method: SqueakMacintoshConfig>>customizeVMDrivers (in category 'initialize-release') -----
- customizeVMDrivers
- 	"
- 	SystemNavigation default browseMethodsWhoseNamesContain:'customizeVMDrivers'
- 	
- 	force platform level or lower customization of vm-display-X11 vm-sound-ALSA, etc. 
- 	The configurations can select what subset they want using something like this.
- 
- 	|subset iwantonly|
- 	iwantonly :=	 #(#CMakeVMDisplayNull  #CMakeVMDisplayX11  #CMakeVMSoundALSA  #CMakeVMSoundNull ).
- 	subset := vmdrivers select: [:vmd | 0 < (iwantonly occurrencesOf: (vmd class name) asSymbol)]. 
- 	vmdrivers := subset.
- 
- 	self 
- 		customizeCMakeVMDisplayNull;
- 		customizeCMakeVMDisplayX11;
- 		customizeCMakeVMSoundALSA;
- 		customizeCMakeVMSoundNull
- 
- 
- "
- 	self flag:'tty'. "revisit this design strategy"
- 	self subclassResponsibility!

Item was changed:
  ----- Method: SqueakMacintoshConfig>>customizeVMPlugins (in category 'plugins') -----
  customizeVMPlugins
  	"do nothing,. only used on linux?"!

Item was added:
+ ----- Method: SqueakMacintoshConfig>>generateByTemplate (in category 'source generation') -----
+ generateByTemplate
+ 	"You can write out supporting CMake output here. See this method in SqueakUnixConfig for example"
+ 	^ CMakeVMGeneratorForSqueak generateByTemplate: self !

Item was removed:
- ----- Method: SqueakSunOS32x86Config>>addVMPluginsBuild: (in category 'cmake buildType redirects') -----
- addVMPluginsBuild: aMaker
- 	|temp o|
- 	self flag:'tty'. "I am writing sub-directory CMakeLists.txt here. Should I also write the config.cmake files?"
- 	enabledebugmessages
- 		ifTrue: [templates  "this message will go to the top level CMakeLists.txt file"
- 				addLast: (CMakeMessage new message: self class name , 'addVMPluginsBuild: aMaker')].
- 	vmplugins do:[ :vmp |                    
- 		o := String new writeStream.   "each VMPlugin gets its own CMakeLists.txt file in its own directory"
- 		temp := OrderedCollection new.	
- 		temp
- 			addAllLast:((CMakePluginVm new)    "this is the CMakeCompositTemplate"
- 					config: self 
- 					definitions: (vmp compilerdefinitions)
- 					module: (vmp module)
- 					sources: (vmp sources)
- 					includedirectories: (vmp includedirectories)).
- 		temp do: [:each |  o nextPutAll: (each content); cr].
- 	((self buildDir) directoryExists: (vmp module))
- 		ifFalse:[	(self buildDir) createDirectory: (vmp module)].
- 		self write: (o contents) toFile: vmp module , FileDirectory slash , aMaker outputFileName.
- 		templates   "this will go to the top level CMakeLists.txt file"
- 			addLast: ((CMakeAddSubDirectory new) sourcedir: (vmp module)) 
- 	].
- 
- 
- 
- 
- 
- 
- 
- 
- 
- !

Item was removed:
- ----- Method: SqueakSunOS32x86Config>>customizeCMakeVMDisplayNull (in category 'plugins') -----
- customizeCMakeVMDisplayNull
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMDisplayNull = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #('${targetPlatform}/vm-display-null/sqUnixDisplayNull') ;
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: #();
- 		linkerflags: (self linkerFlags);
- 		includedirectories:(OrderedCollection 
- 										with:'${crossDir}/plugins/FilePlugin' 
- 										with: '${targetPlatform}/plugins/B3DAcceleratorPlugin'  
-  									     with: '${crossDir}/plugins/B3DAcceleratorPlugin').
- 	self flag:'tty'. "I don't think includedirectories is correct. revisit"
- 
- 
- 
- 
- 
- 
- !

Item was removed:
- ----- Method: SqueakSunOS32x86Config>>customizeCMakeVMDisplayX11 (in category 'plugins') -----
- customizeCMakeVMDisplayX11
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMDisplayX11 = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #( '${targetPlatform}/vm-display-X11/sqUnixX11' '${targetPlatform}/vm-display-X11/sqUnixMozilla' );
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: (self externalLibraries);
- 		linkerflags: (self linkerFlags);
- 		includedirectories:(OrderedCollection 
- 										with:'${crossDir}/plugins/FilePlugin' 
- 										with: '${targetPlatform}/plugins/B3DAcceleratorPlugin'  
-  									     with: '${crossDir}/plugins/B3DAcceleratorPlugin').
- !

Item was removed:
- ----- Method: SqueakSunOS32x86Config>>customizeCMakeVMSoundALSA (in category 'plugins') -----
- customizeCMakeVMSoundALSA
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMSoundALSA = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #( '${targetPlatform}/vm-sound-ALSA/sqUnixSoundALSA' );
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: (self externalLibraries);
- 		linkerflags: (self linkerFlags);
- 		includedirectories: #().
- 	!

Item was removed:
- ----- Method: SqueakSunOS32x86Config>>customizeCMakeVMSoundNull (in category 'plugins') -----
- customizeCMakeVMSoundNull
- 	|module|
- 	module := vmplugins detect: [:vmd | #CMakeVMSoundNull = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
- 	module 
- 		sources: #( '${targetPlatform}/vm-sound-null/sqUnixSoundNull' );
- 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
- 		compilerflags: (self compilerFlags);
- 		externallibraries: (self externalLibraries);
- 		linkerflags: (self linkerFlags);
- 		includedirectories:#()
- 
- !

Item was removed:
- ----- Method: SqueakSunOS32x86Config>>customizeVMPlugins (in category 'plugins') -----
- customizeVMPlugins
- 	|mysubset iwantonly|
- 	"trim the vmdrivers ordered collection of CMakeVMDriver subclasses to only those I want. then customize them for use on this OS/platform"
- 	iwantonly :=	 #(#CMakeVMDisplayNull  #CMakeVMDisplayX11  #CMakeVMSoundALSA  #CMakeVMSoundNull ).
- 	mysubset := vmplugins select: [:vmd | 0 < (iwantonly occurrencesOf: (vmd class name) asSymbol)]. 
- 	vmplugins := mysubset.
- 	self 
- 		customizeCMakeVMDisplayNull;
- 		customizeCMakeVMDisplayX11;
- 		customizeCMakeVMSoundALSA;
- 		customizeCMakeVMSoundNull.
- 
- 
- 
- !

Item was added:
+ ----- Method: SqueakUnixConfig>>addVMPluginsBuild: (in category 'cmake buildType redirects') -----
+ addVMPluginsBuild: aMaker
+ "instance variable vmplugins was populated in CPlatformConfigForSqueak>>initialize then customized by >>customizeVMPlugins
+ That initial customization will probably be the general case. 
+ 
+ However, a subclass of me, may want further granularity on included vm plugins based on buildType. 
+ Simply override me (or my addVMPlugins[buildType] cousins) and extract the subset of vmplugins you want to generate.
+ 
+ see the ''hack'' section below.
+ "
+ 
+ 	|temp o|
+ 	self flag:'tty'. "I am writing sub-directory CMakeLists.txt here. Should I also write the config.cmake files?"
+ 	enabledebugmessages
+ 		ifTrue: [templates  "this message will go to the top level CMakeLists.txt file"
+ 				addLast: (CMakeMessage new message: self class name , 'addVMPluginsBuild: aMaker')].
+ 			
+ 	"
+ 	hack := the subset of vmplugins that I want for this particular buildType. 
+ 	hack do:[:vmp| .....	 
+ 	"
+ 	vmplugins do:[ :vmp |                    
+ 		o := String new writeStream.   "each VMPlugin gets its own CMakeLists.txt file in its own directory"
+ 		temp := OrderedCollection new.	
+ 		temp
+ 			addAllLast:((CMakePluginVm new)    "this is the CMakeCompositTemplate"
+ 					config: self 
+ 					definitions: (vmp compilerdefinitions)
+ 					module: (vmp module)
+ 					sources: (vmp sources)
+ 					includedirectories: (vmp includedirectories)).
+ 		temp do: [:each |  o nextPutAll: (each content); cr].
+ 	((self buildDir) directoryExists: (vmp module))
+ 		ifFalse:[	(self buildDir) createDirectory: (vmp module)].
+ 		self write: (o contents) toFile: vmp module , FileDirectory slash , aMaker outputFileName.
+ 		templates   "this will go to the top level CMakeLists.txt file"
+ 			addLast: ((CMakeAddSubDirectory new) sourcedir: (vmp module)) 
+ 	].
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ !

Item was added:
+ ----- Method: SqueakUnixConfig>>customizeCMakeVMDisplayNull (in category 'initialize-release') -----
+ customizeCMakeVMDisplayNull
+ 	|module|
+ 	module := vmplugins detect: [:vmd | #CMakeVMDisplayNull = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
+ 	module 
+ 		sources: #('${targetPlatform}/vm-display-null/sqUnixDisplayNull') ;
+ 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
+ 		compilerflags: (self compilerFlags);
+ 		externallibraries: #();
+ 		linkerflags: (self linkerFlags);
+ 		includedirectories:(OrderedCollection 
+ 										with:'${crossDir}/plugins/FilePlugin' 
+ 										with: '${targetPlatform}/plugins/B3DAcceleratorPlugin'  
+  									     with: '${crossDir}/plugins/B3DAcceleratorPlugin').
+ 	self flag:'tty'. "I don't think includedirectories is correct. revisit"
+ 
+ 
+ 
+ 
+ 
+ 
+ !

Item was added:
+ ----- Method: SqueakUnixConfig>>customizeCMakeVMDisplayX11 (in category 'initialize-release') -----
+ customizeCMakeVMDisplayX11
+ 	|module|
+ 	module := vmplugins detect: [:vmd | #CMakeVMDisplayX11 = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
+ 	module 
+ 		sources: #( '${targetPlatform}/vm-display-X11/sqUnixX11' '${targetPlatform}/vm-display-X11/sqUnixMozilla' );
+ 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
+ 		compilerflags: (self compilerFlags);
+ 		externallibraries: (self externalLibraries);
+ 		linkerflags: (self linkerFlags);
+ 		includedirectories:(OrderedCollection 
+ 										with:'${crossDir}/plugins/FilePlugin' 
+ 										with: '${targetPlatform}/plugins/B3DAcceleratorPlugin'  
+  									     with: '${crossDir}/plugins/B3DAcceleratorPlugin').
+ !

Item was added:
+ ----- Method: SqueakUnixConfig>>customizeCMakeVMSoundALSA (in category 'initialize-release') -----
+ customizeCMakeVMSoundALSA
+ 	|module|
+ 	module := vmplugins detect: [:vmd | #CMakeVMSoundALSA = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
+ 	module 
+ 		sources: #( '${targetPlatform}/vm-sound-ALSA/sqUnixSoundALSA' );
+ 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
+ 		compilerflags: (self compilerFlags);
+ 		externallibraries: (self externalLibraries);
+ 		linkerflags: (self linkerFlags);
+ 		includedirectories: #().
+ 	!

Item was added:
+ ----- Method: SqueakUnixConfig>>customizeCMakeVMSoundNull (in category 'initialize-release') -----
+ customizeCMakeVMSoundNull
+ 	|module|
+ 	module := vmplugins detect: [:vmd | #CMakeVMSoundNull = ((vmd class name) asSymbol)] ifNone:[nil].  "error handling?"
+ 	module 
+ 		sources: #( '${targetPlatform}/vm-sound-null/sqUnixSoundNull' );
+ 		compilerdefinitions:(OrderedCollection with: '-fPIC' with: '-DPIC');
+ 		compilerflags: (self compilerFlags);
+ 		externallibraries: (self externalLibraries);
+ 		linkerflags: (self linkerFlags);
+ 		includedirectories:#()
+ 
+ !

Item was removed:
- ----- Method: SqueakUnixConfig>>customizeVMDrivers (in category 'initialize-release') -----
- customizeVMDrivers
- 	"
- 	SystemNavigation default browseMethodsWhoseNamesContain:'customizeVMDrivers'
- 
- 	force platform level or lower customization of vm-display-X11 vm-sound-ALSA, etc. 
- 	The configurations can select what subset they want using something like this.
- 
- 	|subset iwantonly|
- 	iwantonly :=	 #(#CMakeVMDisplayNull  #CMakeVMDisplayX11  #CMakeVMSoundALSA  #CMakeVMSoundNull ).
- 	subset := vmdrivers select: [:vmd | 0 < (iwantonly occurrencesOf: (vmd class name) asSymbol)]. 
- 	vmdrivers := subset.
- 
- 	self 
- 		customizeCMakeVMDisplayNull;
- 		customizeCMakeVMDisplayX11;
- 		customizeCMakeVMSoundALSA;
- 		customizeCMakeVMSoundNull
- 
- 
- "
- 	self flag:'tty'. "revisit this design strategy"
- 	self subclassResponsibility!

Item was added:
+ ----- Method: SqueakUnixConfig>>customizeVMPlugins (in category 'initialize-release') -----
+ customizeVMPlugins
+ 	"override me if you want a different subset of vm plugins at initialization time.
+ 	for customization of plugins used based on buildType, override an addVMPlugins[buildType]: aMaker  method and 
+ 	modify that method for whatever subset of plugins you want to use.
+ 	
+ 	I doubt if buildType plugin selection will be used much. The list created at initialization will probably be sufficient.
+ 	"
+ 	|mysubset iwantonly|
+ 	iwantonly :=	 #(#CMakeVMDisplayNull  #CMakeVMDisplayX11  #CMakeVMSoundALSA  #CMakeVMSoundNull ).
+ 	mysubset := vmplugins select: [:vmd | 0 < (iwantonly occurrencesOf: (vmd class name) asSymbol)]. 
+ 	vmplugins := mysubset.
+ 	self 
+ 		customizeCMakeVMDisplayNull;
+ 		customizeCMakeVMDisplayX11;
+ 		customizeCMakeVMSoundALSA;
+ 		customizeCMakeVMSoundNull.
+ 		
+ self flag:'tty: complete the customizeVMPlugin stack'.		
+ "The following need to be thought through then written:
+ 
+ customizeCMakeVMDisplayCustom
+ customizeCMakeVMDisplayFbdev
+ customizeCMakeVMDisplayQuartz
+ customizeCMakeVMSoundCustom
+ customizeCMakeVMSoundMacOSX
+ customizeCMakeVMSoundNAS
+ customizeCMakeVMSoundOSS
+ customizeCMakeVMSoundPulse
+ customizeCMakeVMSoundSun
+ 
+ "
+ 
+ 
+ !

Item was changed:
  ----- Method: SqueakUnixConfig>>initializePlatformSources (in category 'source files') -----
  initializePlatformSources
+ "  This list of files is taken directly from the Cog build tree.	
+ 	
+ 	 ls -1 Cog/platforms/unix/vm/*.c
+ 
+ 	Your configuration will need a subset of these based on buildType
- "	Your configuration will need a subset of these based on buildType
  	SystemNavigation browseAllImplementorsOf: #setPlatformSourcesBuild:
+ 
  	"
  
  	platformSources:= #(
  	'aio.c'
  	'debug.c'
  	'dlfcn-dyld.c'
  	'mac-alias.c' 
  	'osExports.c'
  	'sqUnixCharConv.c'
  	'sqUnixEvent.c' 
  	'sqUnixExternalPrims.c'
+ 	'sqUnixHeartbeat.c'
  	'sqUnixITimerHeartbeat.c'
  	'sqUnixITimerTickerHeartbeat.c'
- 	'sqUnixHeartbeat.c'
  	'sqUnixMain.c'
  	'sqUnixMemory.c'
  	'sqUnixSpurMemory.c'	
  	'sqUnixThreads.c'
  	'sqUnixVMProfile.c'
  	)
  
  
  
  !

Item was removed:
- ----- Method: SqueakUnixConfig>>vmDrivers (in category 'plugins') -----
- vmDrivers
- "SystemNavigation default browseMethodsWhoseNamesContain: 'vmDrivers'
- "
- 	^#(
- 'vm-display-Quartz' 
- 'vm-display-X11'  
- 'vm-display-custom'  
- 'vm-display-fbdev'  
- 'vm-display-null'  
- 'vm-sound-ALSA'  
- 'vm-sound-MacOSX'  
- 'vm-sound-NAS'  
- 'vm-sound-OSS'  
- 'vm-sound-Sun'  
- 'vm-sound-custom'
- 'vm-sound-null'
- )
- !

Item was added:
+ ----- Method: SqueakWindowsConfig>>addVMPluginsBuild: (in category 'cmake buildType redirects') -----
+ addVMPluginsBuild: aMaker
+ 	"do nothing. "!

Item was removed:
- ----- Method: SqueakWindowsConfig>>customizeVMDrivers (in category 'initialize-release') -----
- customizeVMDrivers
- 	"
- 	SystemNavigation default browseMethodsWhoseNamesContain:'customizeVMDrivers'
- 
- 	force platform level or lower customization of vm-display-X11 vm-sound-ALSA, etc. 
- 	The configurations can select what subset they want using something like this.
- 
- 	|subset iwantonly|
- 	iwantonly :=	 #(#CMakeVMDisplayNull  #CMakeVMDisplayX11  #CMakeVMSoundALSA  #CMakeVMSoundNull ).
- 	subset := vmdrivers select: [:vmd | 0 < (iwantonly occurrencesOf: (vmd class name) asSymbol)]. 
- 	vmdrivers := subset.
- 
- 	self 
- 		customizeCMakeVMDisplayNull;
- 		customizeCMakeVMDisplayX11;
- 		customizeCMakeVMSoundALSA;
- 		customizeCMakeVMSoundNull
- 
- 
- 
- "
- 	self flag:'tty'. "revisit this design strategy"
- 	self subclassResponsibility!

Item was changed:
  ----- Method: SqueakWindowsConfig>>customizeVMPlugins (in category 'plugins') -----
  customizeVMPlugins
  	"do nothing,. only used on linux?"!

Item was added:
+ ----- Method: SqueakWindowsConfig>>generateByTemplate (in category 'source generation') -----
+ generateByTemplate
+ 	"You can write out supporting CMake output here. See this method in SqueakUnixConfig for example"
+ 	^ CMakeVMGeneratorForSqueak generateByTemplate: self !



More information about the Vm-dev mailing list