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

commits at source.squeak.org commits at source.squeak.org
Wed Dec 10 02:03:33 UTC 2014


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

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

Name: CMakeVMMakerSqueak-tty.104
Author: tty
Time: 9 December 2014, 9:04:00.092 pm
UUID: 11491936-7605-416e-9cbf-61f691632ddf
Ancestors: CMakeVMMakerSqueak-tty.103

Started organizing CMakeVMMakerSqueakDeveloperHelp according to topic. 

Added some Help classes for the various topics.

Filed some existing scratch notes into various pages.

=============== Diff against CMakeVMMakerSqueak-tty.103 ===============

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

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

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

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

Item was added:
+ ----- Method: CMakeVMMakerSqueakConfigurationsHelp class>>overview (in category 'pages') -----
+ overview
+ 	^HelpTopic
+ 		title:'Overview'
+ 		contents:
+ ' CMakeVMMakerSqueak Configurations. encapsulate CMake output. 
+ 
+ The CMake encapsulation is eased by storing CMakeTemplates--small wrapper classes that encapsulate CMake constructs.
+ 
+ Configurations Are organized by Platform in specific Class Categories. Example: CMakeVMMakerSqueak-MacOSPowerPC contains all the configurations for that platform.
+ 
+ Configurations should adhere to a naming convention that mirror Eliot Miranda''s Autotools build system layout:
+ [Platform][Language][VM][Memory Model][Foo]Config. 
+ 
+ Examples: 
+ Plan9NewspeakSistaSpurConfig
+ MacOSXSqueakCogSpurConfig
+ Windows32SqueakStackV2JoesPersonalTotallyAweseomeConfig
+ 
+ Configurations can support the available build types: #build, #buildDebug, #buildAssert...etc.
+ Configurations can exclude themselves from being built by Builders.
+ Configurations can exclude themselves from supporting particular buildTypes.
+ 
+ For each buildType, a Configuration encapsulates CMake configuration parameters for that buildType..
+ 
+ 
+ 
+ 
+ '!

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

Item was removed:
- ----- Method: CMakeVMMakerSqueakDeveloperHelp class>>buildersAndConfigs (in category 'pages') -----
- buildersAndConfigs
- 	^HelpTopic
- 		title:'Organization'
- 		contents:
- '
- The CMakeVMMakerSqueak Builders and Configurations are organized to mirror  Eliot''s GNU build system organization.
- 
- The intent is to reduce brain cycles translating from the computer''s directory layout to what you see in CMakeVMMakerSqueak by providing a (nearly) one-to-one correspondence.
- 
- Eliot has named build directories in Cog/ svn (oscogvm directory in this system) by the convention
- build.[OperatingSystem].[VMWordSize].[Processor Architecture]. For  example: build.macosx32x86 
- 
- Under each build.[OperatingSystem].[VMWordSize].[Processor Architecture]  directory are subdirectories for each
- [Language][VM][MemoryManager]. example newspeak.sista.spur.
- 
- The permutations of [Language][VM][MemoryManager] currently are: 
- 
- [newspeak | squeak]. [cog | sista | stack]. [spur | v3] or 2!! x 3!! x 2!!  which is  between 12 and eleventy billion permutations 
- 
- Similarly, in CMakeVMMakerSqueak,  Categories containing Configurations are organized by CMakeVMMakerSqueak-[OperatingSystem][VMWordSize][Processor][etc]
- 
- Configuration classes within a CMakeVMMakerSqueak-[OperatingSystem][VMWordSize][Processor][etc] are Named:
- [[Squeak] | [] ][Language][VM][MemoryManager][etc]Config and correspond with the 12 permutations
- 
- When CMakeVMMakerSqueak generates build or products , it prefaces Eliot''s naming convention with a ''cmake.''
- 
- for example builds take place in:  cmake.build.linux.32.x66/squeak.cog.spur
- and output is placed in cmake.products. for example: oscogvm/cmake.products/squeak.cog.v3.noGL/
- 
- Builders manage Configurations and Builds for a particular [Language][VM][MemoryManager]  category.
- THERE IS A ONE-TO-ONE CORRESPONEDENCE between aConcreteBuilder>configurationsCategory and the Smalltalk Category name. 
- If you change one, you must change the other in order for the Builder to manage that configuration.
- 
- example: SqueakMacOSX32x86Builder configurationsCategory
- 
- 
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakDeveloperHelp class>>igorStasenkoDesign (in category 'pages') -----
- igorStasenkoDesign
- 	^HelpTopic
- 		title:'Design Patterns'
- 		contents:
- 'CMakeVMMakerSqueak extends Igor Stasenko''s pharo work in CMMakeVMMaker. 
- 
- The system employs the Visitor design pattern in two places.
- 
- 1. When a CPlatformConfigForSqueak subclass invokes CMakeVMGeneratorForSqueak>>generate passing itself as the visitor.
- 2. In SqueakCMakeVMMakerAbstractBuilder when Configuration information is cached in a CMakeVMakerConfigurationInfo.
- 
- The CPlatformConfigForSqueak makes heavy use of a Template pattern. This pattern is used extensively in the protocol ''cmake buildType redirects''.
- This is used to force correct implementation of configurations. It also extends the pharo system to support the build types required for the 
- 
- Fairly extensive Tests are written to ensure correct implementation of Configurations.
- 
- '!

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

Item was added:
+ ----- Method: CMakeVMMakerSqueakDeveloperHelp class>>looseEnds (in category 'pages') -----
+ looseEnds
+ 	^HelpTopic
+ 		title:'Loose Ends'
+ 		contents:
+ 'As of 2014.12.09 there are the inevitable loose ends. Some are:
+ 
+ CMake provides a Packaging infrastructure that should be imported here.
+ 
+ Importing and compiling 3''rd party libraries has not been ported or tested.
+ 
+ The Builder facades lacks some query functionality.
+ 
+ The Builder facades may prove to be useless--we may want to throw them away.
+ 
+ Tests needed for testing Plugins
+ 
+ Templates should probably be organized by 
+ cmake --help-command-list
+ cmake --help-module-list
+ cmake --help-property-list
+ cmake --help-variable-list  etc.
+ 
+ '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakDeveloperHelp class>>overview (in category 'pages') -----
- overview
- 	^HelpTopic
- 		title:'Overview'
- 		contents:
- '
- The heart of the package is CMakeGeneratorForSqueak and its two subclasses CMakeVMGeneratorForSqueak and CMakePluginGeneratorForSqueak.
- 
- 
- CMakeVMGeneratorForSqueak collects information from subclasses of CPlatformConfigForSqueak, CMThirdpartyLibrary and InterpreterPlugins and writes it out to CMake files and associated directories. 
- 
- From there, the user invokes cmake and make using a generated build.sh script.
- 
- The programmer directs the flow of the generator by coding a subclass of CPlatformConf, setting it up correctly and asking it to generate itself. 
- 
- The configuration then invokes the CMakeGeneratorForSqueak passing itself as an argument. 
- 
- The VMGeneratator extracts the information and utilizes VMPluginGenerator to generate plugin stuff, the CPlatformConf to generate other stuff and CMThirdPartyLibrary''s to generate other stuff. 
- 
- The end result is a CMake evironment that is set up to correctly build a VM
- 
- Concrete implementations of SqueakCMakeVMMakerAbstractBuilder provide an invokation facade and configuration query capabilities.
- 
- 
- '!

Item was changed:
  ----- Method: CMakeVMMakerSqueakDeveloperHelp class>>pages (in category 'pages') -----
  pages
+ 	^#(CMakeVMMakerSqueakHistoryHelp CMakeVMMakerSqueakOverviewHelp  CMakeVMMakerSqueakConfigurationsHelp CMakeVMMakerSqueakTemplatesHelp CMakeVMMakerSqueakGeneratorsHelp CMakeVMMakerSqueakBuildersHelp configDotCmake looseEnds  plugins pthreads  templates tests  )!
- 	^#(overview prerequisites  terms igorStasenkoDesign  tests buildersAndConfigs plugins pthreads configDotCmake templates vmplugins CMakeVMMakerSqueakBuildersHelp CMakeVMMakerSqueakHowToCreateNewConfigurationHelp)!

Item was removed:
- ----- Method: CMakeVMMakerSqueakDeveloperHelp class>>prerequisites (in category 'pages') -----
- prerequisites
- 	^HelpTopic
- 		title:'Prerequisites'
- 		contents:
- 'The CMakeVMMakerSqueak depends on CMakeVMMaker (a pharo implementation)
- 
- CMake from  http://www.cmake.org/ is required to process the output of this package.
- 
- This package was written using cmake version 2.8.12
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakDeveloperHelp class>>terms (in category 'pages') -----
- terms
- 	^HelpTopic
- 		title:'Terms'
- 		contents:
- '
- AbstractBaseClass:   
- 	Typically the topmost class in a [OS][VMWordSize][Processor][ETC]  class category. Example: CPlatformConfigForSqueak. Most of the configuration action happens at this level and lower.
- 
- Builder:                      
- 	A concrete subclass of SqueakCMakeVMMakerAbstractBuilder. Builders act as a facade for invoking the configurations.They also provide query tools for the configurations that a builder manages. There is a one-to-one correspondence between a Builder''s configurationsCategory and the configurations it manages. example:    SqueakBSDx86Builder configurationsCategory
- 
- buildType:
- 	One of SqueakCMakeVMMakerAbstractBuilder  allBuildTypes 
-                                  
- 
- CMakeLists.txt:
- 	The instructions that CMake uses to build build systems.  One output of a configuration
- 
- Configuration:            
- 	CPlatformConfigForSqueak  and its subclasses. These maintain the definitions that are rendered into CMakeLists.txt files
- 
- 
- Generator:                 
- 	CMakeGeneratorForSqueak and its subclasses
- 
- 
- Redirect Methods:      
- 	Given a method X, it is a redirect method if a call to it redirects to xBuildType based on the state of the configurations buildType  buildType variable.  See CPlatformConfigForSqueak protocol ''cmake buildType redirects''
- 
- 
- 
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakDeveloperHelp class>>vmplugins (in category 'pages') -----
- vmplugins
- 	^HelpTopic
- 		title:'VMPlugins'
- 		contents:'
- 
- TODO CMakeVMMakerSqueak-VMPlugin purpose, configuration and use'!

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

Item was added:
+ ----- Method: CMakeVMMakerSqueakDistroGeneratorHelp class>>bookName (in category 'accessing') -----
+ bookName 
+ 	^'Distro Generator'!

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

Item was added:
+ ----- Method: CMakeVMMakerSqueakDistroGeneratorHelp class>>overview (in category 'pages') -----
+ overview
+ 	^HelpTopic
+ 		title: 'Overview'
+ 		contents:
+ 'Write me'!

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

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

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

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

Item was added:
+ ----- Method: CMakeVMMakerSqueakGeneratorsHelp class>>overview (in category 'pages') -----
+ overview
+ 	^HelpTopic
+ 		title: 'Overview'
+ 		contents:
+ 'Generators Generate.'!

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

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

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

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

Item was added:
+ ----- Method: CMakeVMMakerSqueakHistoryHelp class>>cmakeVMMakerSqueak (in category 'pages') -----
+ cmakeVMMakerSqueak
+ 	^HelpTopic
+ 		title: 'Summary'
+ 		contents:
+ 'CMakeVMMakerSqueak ....
+ 
+ The original version subclassed the various Generators,  Configs and Builders of Igor''s version while providing a small pharo/squeak compatibility layer where required. This philosophy was in place for CMakeVMMakerSqueak-tty.1 to CMakeVMMakerSqueak-tty.26
+ 
+ This approach was abandoned when Eliot Miranda adopted his [Platform][Language][VM][MemoryManager][BuildType]  organization on the basis of simple math.
+ 
+ The build system must support 
+ [N Platforms: Windows Linux Mac BSD Plan9...][2 Languages: Newspeak and Squeak.] x [3. Virtual Machines: Cog, Sista and Stack.] x [2 Memory Managers: V3 and Spur.] x [9 build types build  build.assert.itimerheartbeat  build.debug.itimerheartbeat  build.multithreaded  build.multithreaded.debug  build.assert  build.debug  build.itimerheartbeat  build.multithreaded.assert  ] = N x [2 x 3 x 2 x 9]= Nx 108 distinct Configurations.
+ 
+ 
+ Development started along these lines at CMakeVMMakerSqueak-tty.27.  During this next stretch, I attempted to make CMakeVMMaker and CMakeVMMakerSqueak functionaly equivalent--meaning a pharo user could use the squeak system using pharo idioms. This required some ridiculous contortions exemplified by what I believe is the largest Trait ever attempted. You can see this at  CMakeVMMakerSqueak-tty.32 where I write 
+ 
+ ''Removed old Traits from first port from Pharo and added a new Trait. Installed this trait at the topmost class of the Squeak heirarchy which is inter-twined with the existing pharo hierarchy. Ugly, but not too ugly and supports decision not to fork existing work. This lets me enforce a pseudo-abstract class discipline. 
+ 
+ Probably two more days coding to get this to production."
+ 
+ heh.
+ 
+ The Trait grew, and grew and grew. as I attempted to bolt on Eliot''s requirements onto the side of the Pharo code using a Trait. The result was like that scene in Aliens where the baby Alien attaches itself to the face of the astronaut...
+ 
+ At CMakeVMMakerSqueak-tty.63 I noticed that the Trait would not do. The functionality was OK, but the Package could not be loaded into a Squeak image from the Monticello Repository. This killed that approach.
+ 
+ At CMakeVMMakerSqueak-tty.64 I started over and decided to implement a ''parallel'' system to the pharo code that relied on Igor''s generators to produce the CMake files.
+ 
+ At CMakeVMMakerSqueak-tty.82 Eliot noticed a major problem with the Pharo approach. The config.h file was hard coded. We needed CMake to generate that. At this point I turned to Ian''s code for instruction.  
+ 
+ I studied his code and noted the use of templates and the overall flow of processing. Igor''s processing flow is very close to Ian''s so the processing Architecture of CMakeVMaker was kept in place. I did start the process of  using CMake Templates at this point as I found it much easier.
+ 
+ This process continues until CMakeVMMakerSqueak-tty.99.
+ 
+ At CMakeVMMakerSqueak-tty.99 I ditched the CMakeVMmaker generate methods and went generateByTemplate for all Generators.
+ 
+ 
+ In Summary, the programmatic flow of the system and most design patterns are Igor''s. The emphasises on CMake generation and the use of Templates are Ian''s.
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ '!

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

Item was added:
+ ----- Method: CMakeVMMakerSqueakHistoryHelp class>>overview (in category 'pages') -----
+ overview
+ 	^HelpTopic
+ 		title: 'CMakeVMMakerSqueak'
+ 		contents:
+ 'CMakeVMMaker Squeak is a product of Igor Stasenko''s CMakeVMaker for pharo and Ian Piumurta''s custom CMake configuration files he wrote for the Stack Interpreter on Linux.
+ 
+ Here I present an overview of the design of each historical system and end with a summary of their contributions to this system.
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakHistoryHelp class>>pages (in category 'pages') -----
+ pages
+ 	^#( CMakeVMMakerSqueakHistoryIgorStasenkoHelp CMakeVMMakerSqueakHistoryIanPiumartaHelp cmakeVMMakerSqueak)!

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

Item was added:
+ ----- Method: CMakeVMMakerSqueakHistoryIanPiumartaHelp class>>bookName (in category 'accessing') -----
+ bookName 
+ 	^'Ian Piumarta''s CMake'!

Item was added:
+ ----- Method: CMakeVMMakerSqueakHistoryIanPiumartaHelp class>>ianPiumarta (in category 'pages') -----
+ ianPiumarta 
+ 	^HelpTopic
+ 		title:'Ian Piumurta''s CMake System'
+ 		contents:
+ 'Ian Piumurta wrote a hand-crafted CMake System for the Standard Interpreter.
+ 
+ You can download it here.
+ 
+ It makes heavy use of templates and macros
+ 
+ It is responsible for the switch to CMake Templates from the pharo string concatenation based approach.
+ 
+ Its structure is:
+ 
+ I am confident that the development of this system will/should proceed towards the CMake model Ian created. Specifically in the simplification
+ and refactoring of the generateByTemplate method in xyz
+ 
+ 
+ '!

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

Item was added:
+ ----- Method: CMakeVMMakerSqueakHistoryIanPiumartaHelp class>>overview (in category 'pages') -----
+ overview 
+ 	^HelpTopic
+ 		title:'Overview'
+ 		contents:
+ 'Ian Piumurta wrote a hand-crafted CMake System for the Standard Interpreter.
+ 
+ You can download it here.
+ 
+ It makes heavy use of templates and macros
+ 
+ It is responsible for the switch to CMake Templates from the pharo string concatenation based approach.
+ 
+ Its structure is:
+ 
+ I am confident that the development of this system will/should proceed towards the CMake model Ian created. Specifically in the simplification
+ and refactoring of the generateByTemplate method in xyz
+ 
+ 
+ '!

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

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

Item was added:
+ ----- Method: CMakeVMMakerSqueakHistoryIgorStasenkoHelp class>>bookName (in category 'accessing') -----
+ bookName 
+ 	^'Igor Sasenko''s CMake'!

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

Item was added:
+ ----- Method: CMakeVMMakerSqueakHistoryIgorStasenkoHelp class>>overview (in category 'pages') -----
+ overview 
+ 	^HelpTopic
+ 		title:'Overview'
+ 		contents:
+ 'CMakeVMMakerSqueak extends Igor Stasenko''s pharo work in CMMakeVMMaker. 
+ 
+ The system employs the Visitor design pattern in two places.
+ 
+ 1. When a CPlatformConfigForSqueak subclass invokes CMakeVMGeneratorForSqueak>>generate passing itself as the visitor.
+ 2. In SqueakCMakeVMMakerAbstractBuilder when Configuration information is cached in a CMakeVMakerConfigurationInfo.
+ 
+ The CPlatformConfigForSqueak makes heavy use of a Template pattern. This pattern is used extensively in the protocol ''cmake buildType redirects''.
+ This is used to force correct implementation of configurations. It also extends the pharo system to support the build types required for the 
+ 
+ Fairly extensive Tests are written to ensure correct implementation of Configurations.
+ '!

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

Item was removed:
- CMakeVMMakerSqueakDeveloperHelp subclass: #CMakeVMMakerSqueakHowToCreateNewConfigurationHelp
- 	instanceVariableNames: ''
- 	classVariableNames: ''
- 	poolDictionaries: ''
- 	category: 'CMakeVMMakerSqueak-Help'!
- 
- !CMakeVMMakerSqueakHowToCreateNewConfigurationHelp 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: CMakeVMMakerSqueakHowToCreateNewConfigurationHelp class>>bookName (in category 'accessing') -----
- bookName 
- 	^'Setting up a Configuration. Step By Step.'!

Item was removed:
- ----- Method: CMakeVMMakerSqueakHowToCreateNewConfigurationHelp class>>pages (in category 'accessing') -----
- pages
- 	^#(step1 
- 		step2 
- 		step3 
- 		step4 
- 		step4a 
- 		step4b 
- 		step4c 
- 		step4d 
- 		step4e 
- 		step4f 
- 		step4g 
- 		step4h 
- 		step4i 
- 		step4j 
- 		step4k 
- 		step4l 
- 		step4m
- 		step5 
- )!

Item was removed:
- ----- Method: CMakeVMMakerSqueakHowToCreateNewConfigurationHelp class>>step1 (in category 'pages') -----
- step1
- 	^HelpTopic
- 		title:'Step 1. Choose Your Category'
- 		contents:
- ' CMakeVMMakerSqueak configurations are placed in a Smalltalk category with the naming convention [OS][VMWordSize][Processor]
- 
- You start by choosing the correct Smalltalk Category in which to place your new Configuration.
- 
- Example; If you need a new configuration for Linux for a 32 bit VM on the x86 platform--[Linux][32][x86]--Choose the CMakeVMMakerSqueak-Linux32x86 category.
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakHowToCreateNewConfigurationHelp class>>step2 (in category 'pages') -----
- step2
- 	^HelpTopic
- 		title:'Step 2. Copy Existing Concrete Configuration'
- 		contents:
- 'Now that you have selected your category to place your new Configuration, you need to create your configuration.
- 
- Like Categories, Configurations adhere to a naming convention. It is [language][VM][MemoryManager][etc]Config
- example: squeak.cog.v3.tty  is a configuration for compiling Squeak with a Cog VM with the old V3 memory manager and this is a special configuration for tty.
- 
- The easiest way to create the config is to subclass an existing configuration. In this case I would subclass squeak.cog.v3.
- 
- IMPORTANT: Do not copy a configuration (usually the top one in a category) that has the "	uses: TCPlatformConfigForSqueak"
- line in its definition. While there are technical reasons for this warning, the important one is that it makes coding a pain-in-the-butt.
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakHowToCreateNewConfigurationHelp class>>step3 (in category 'pages') -----
- step3
- 	^HelpTopic
- 		title:'Step 4. Customize the "cmake" protocol'
- 		contents:
- 'TODO
- dirInstall
- 	"the directory of the finished product.. the place where ''make install'' puts stuff.
- 	SystemNavigation default browseMethodsWhoseNamesContain: ''dirInstall''
-       "
- 	^self squeakCogV3 , ''.noGL''
- 
- 
- excludeFromBuild
- 	^false   "build this configuration"
- "	^true"
- 
- executableName
- 	^ self vmCogExecutableName
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakHowToCreateNewConfigurationHelp class>>step4 (in category 'pages') -----
- step4
- 	^HelpTopic
- 		title:'Step 4. Customize the "cmake build type config" protocol'
- 		contents:
- 'When we invoke a Builder with a command like:
- 
- SqueakLinux64x86w32CompatBuilder
- 	configureA: #Linux64x86w32BitSqueakCogV3SlackwareNoGLConfig forBuildType: #buildDebugITimerHeartbeat;
- 	generateSources;
- 	generate.  
- 
- We are telling the Builder to select a Configuration and have that Configuration configure itself to produce CMake output for the buildType: #buildDebugITimerHeartbeat;
- 
- On your configuration the entry point for your configuration is one of:
- 
- configureBuild
- configureBuildAssert
- configureBuildAssertITimerHeartbeat
- configureBuildDebug
- configureBuildDebugITimerHeartbeat                        <----this one is selected by buildType: #buildDebugITimerHeartbeat;
- configureBuildITimerHeartbeat
- configureBuildMultiThreaded
- configureBuildMultiThreadedAssert
- configureBuildMultiThreadedDebug
- 
- Within this method, system state is set up and customizable for many methods in CMakeVMaker CPlatformConfig.
- 
- "setGlobalOptions: aMaker"
- "setGlobalOptionsAfterDetermineSystem: aMaker"
- setupDirectories
- preferredIncludes
- standardIncludes
- compilerFlags
- "extraVMSettings: aMaker"
- internalPlugins
- externalPlugins
- thirdpartyLibs
- "setExtraTargetProperties: aMaker"
- "postBuildActions: aMaker"
- configH
- 
- The methods above that take the : aMaker argument are handled on-the-fly later in the process and are only presented here for informational purposes.
- 
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakHowToCreateNewConfigurationHelp class>>step4a (in category 'pages') -----
- step4a
- 	^HelpTopic
- 		title:'Step 4a. setGlobalOptions'
- 		contents:
- 'TODO: summarize this
- 
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakHowToCreateNewConfigurationHelp class>>step4b (in category 'pages') -----
- step4b
- 	^HelpTopic
- 		title:'Step 4b. setGlobalOptionsAfterDetermineSystem'
- 		contents:
- 'TODO: summarize this
- 
- 
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakHowToCreateNewConfigurationHelp class>>step4c (in category 'pages') -----
- step4c
- 	^HelpTopic
- 		title:'Step 4c. setupDirectories'
- 		contents:
- 'TODO: summarize this
- 
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakHowToCreateNewConfigurationHelp class>>step4d (in category 'pages') -----
- step4d
- 	^HelpTopic
- 		title:'Step 4d. preferredIncludes'
- 		contents:
- 'This is handy when ''make'' cannot find a header.
- 
-  For example, when compiling 
- 
- I got error:
- Scanning dependencies of target UnixOSProcessPlugin
- /..../oscogvm/src/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c:48:26: fatal error: SocketPlugin.h: No such file or directory
- 
- From my topDir (oscogvm) I did  a search and found SocketPlugin.h exits in  ./platforms/Cross/plugins/SocketPlugin/SocketPlugin.h
- 
- in my root config class for my category, I had...
- 
- ''${targetPlatform}/plugins/SocketPlugin''
- 
- I changed it to 
- 
- ''${crossDir}/plugins/SocketPlugin''
- 
- deleted my files in my build directory, re-ran the generate and...
- 
- 
- 
- 	SystemNavigation default browseMethodsWhoseNamesContain: ''preferredIncludes''
-   
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakHowToCreateNewConfigurationHelp class>>step4e (in category 'pages') -----
- step4e
- 	^HelpTopic
- 		title:'Step 4e. standardIncludes'
- 		contents:
- 'TODO: summarize this
- 
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakHowToCreateNewConfigurationHelp class>>step4f (in category 'pages') -----
- step4f
- 	^HelpTopic
- 		title:'Step 4f. compilerFlags'
- 		contents:
- 'TODO: summarize this
- 
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakHowToCreateNewConfigurationHelp class>>step4g (in category 'pages') -----
- step4g
- 	^HelpTopic
- 		title:'Step 4g. extraVMSettings'
- 		contents:
- 'TODO: summarize this
- 
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakHowToCreateNewConfigurationHelp class>>step4h (in category 'pages') -----
- step4h
- 	^HelpTopic
- 		title:'Step4h internalPlugins'
- 		contents:
- 'TODO: summarize this
- 
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakHowToCreateNewConfigurationHelp class>>step4i (in category 'pages') -----
- step4i
- 	^HelpTopic
- 		title:'Step4i externalPlugins'
- 		contents:
- 'TODO: summarize this
- 
- 
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakHowToCreateNewConfigurationHelp class>>step4j (in category 'pages') -----
- step4j
- 	^HelpTopic
- 		title:'Step4j thirdpartyLibs'
- 		contents:
- 'TODO: summarize this
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakHowToCreateNewConfigurationHelp class>>step4k (in category 'pages') -----
- step4k
- 	^HelpTopic
- 		title:'Step4k setExtraTargetProperties:aMaker'
- 		contents:
- 'TODO: summarize this
- 
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakHowToCreateNewConfigurationHelp class>>step4l (in category 'pages') -----
- step4l
- 	^HelpTopic
- 		title:'Step4k postBuildActions: aMaker'
- 		contents:
- 'TODO: summarize this
- 
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakHowToCreateNewConfigurationHelp class>>step4m (in category 'pages') -----
- step4m
- 	^HelpTopic
- 		title:'Step4m configH'
- 		contents:
- ' This is the contents of a config.h file in the build directory.
- It is used only in Unix builds in CMakeVMMaker.
- 
- 
- It is called from the method ''extraVMSettings'' of  CogUnixConfig in CMakeVMMaker when CogUnixConfig sends the message:		self generateConfigH.
- 
- To provide a custom config.h CMakeVMakerSqueak subclasses that message ''self generateConfigH'' and routes the call
- to ''generateConfigH: aBuildType''
- 
- From there, a block is evaluated appropriate for the build type that invokes a ''configHBuildXYZ'' method which can be overridden by you to 
- return a custom config.h. The default is to return the base configH.
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

Item was removed:
- ----- Method: CMakeVMMakerSqueakHowToCreateNewConfigurationHelp class>>step5 (in category 'pages') -----
- step5
- 	^HelpTopic
- 		title:'Step5 set up ''cmake directory'' protocol'
- 		contents:
- 'The cmake directories protocol contains directory names for your platform, build directory 
- 
- See the chapter titled: ''An Explanation of Protocols in TCPaltformConfigForSqueak'' in 
- HelpBrowser openOn:CMakeVMMakerSqueakDeveloperHelp  
- 
- The ones that your Configuration must implement are:
- 
- dirBuildPlatform
- dirBuildLanguageVMMM
- 
- 
- Basically, we are building a directory like this:
- oscogvm/cmake.build.linux32.x86/squeak.cog.v3/build.assert 
- 
- which, when expressed as message names reduces to:
- 
- topDir/dirLinux32x86/squeakCogV3/dirBuildAssert
- 
- which are further reduced to 
- 
- topDir/dirBuildPlatform/dirBuildLanguageVMMM/dirBuildAssert
- 
- It is the two in the middle that you must customize. (dirBuildAssert is dynamically set by a Builder in a script, to be covered later)
- To see how, take a look at the implementors of the two. its quite intuitive once you see it as it is based off our standard naming conventions.
- 
- SystemNavigation default browseMethodsWhoseNamesContain: ''dirBuildPlatform''
- SystemNavigation default browseMethodsWhoseNamesContain: ''dirBuildLanguageVMMM''
- 
- For our purposes in this example, we want:
- 
- 
- dirBuildPlatform
- 	^self dirLinux32x86
- and
- 
- dirBuildLanguageVMMM
- 	^self squeakCogV3
- 
- 
- A Reminder: Consistent Naming Conventions Are Our Friends!!
- 
- '!

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

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

Item was added:
+ ----- Method: CMakeVMMakerSqueakOverviewHelp class>>buildersAndConfigs (in category 'pages') -----
+ buildersAndConfigs
+ 	^HelpTopic
+ 		title:'Organization'
+ 		contents:
+ '
+ The CMakeVMMakerSqueak Builders and Configurations are organized to mirror  Eliot''s GNU build system organization.
+ 
+ The intent is to reduce brain cycles translating from the computer''s directory layout to what you see in CMakeVMMakerSqueak by providing a (nearly) one-to-one correspondence.
+ 
+ Eliot has named build directories in Cog/ svn (oscogvm directory in this system) by the convention
+ build.[OperatingSystem].[VMWordSize].[Processor Architecture]. For  example: build.macosx32x86 
+ 
+ Under each build.[OperatingSystem].[VMWordSize].[Processor Architecture]  directory are subdirectories for each
+ [Language][VM][MemoryManager]. example newspeak.sista.spur.
+ 
+ The permutations of [Language][VM][MemoryManager] currently are: 
+ 
+ [newspeak | squeak]. [cog | sista | stack]. [spur | v3] or 2!! x 3!! x 2!!  which is  between 12 and eleventy billion permutations 
+ 
+ Similarly, in CMakeVMMakerSqueak,  Categories containing Configurations are organized by CMakeVMMakerSqueak-[OperatingSystem][VMWordSize][Processor][etc]
+ 
+ Configuration classes within a CMakeVMMakerSqueak-[OperatingSystem][VMWordSize][Processor][etc] are Named:
+ [[Squeak] | [] ][Language][VM][MemoryManager][etc]Config and correspond with the 12 permutations
+ 
+ When CMakeVMMakerSqueak generates build or products , it prefaces Eliot''s naming convention with a ''cmake.''
+ 
+ for example builds take place in:  cmake.build.linux.32.x66/squeak.cog.spur
+ and output is placed in cmake.products. for example: oscogvm/cmake.products/squeak.cog.v3.noGL/
+ 
+ Builders manage Configurations and Builds for a particular [Language][VM][MemoryManager]  category.
+ THERE IS A ONE-TO-ONE CORRESPONEDENCE between aConcreteBuilder>configurationsCategory and the Smalltalk Category name. 
+ If you change one, you must change the other in order for the Builder to manage that configuration.
+ 
+ example: SqueakMacOSX32x86Builder configurationsCategory
+ 
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakOverviewHelp class>>configDotCmake (in category 'pages') -----
+ configDotCmake
+ 	^HelpTopic
+ 		title:'config.cmake'
+ 		contents:
+ 'The config.cmake file is included in CMakeLists.txt. 
+ 
+ It contains CMake code to generate a config.h file on unix systems.
+ 
+ You can view a Configurations config.cmake with this code:
+ 
+ Transcript clear.
+ Transcript show: ((Linux64x86w32BitSqueakCogV3Config new) configureForBuildType: #build) contentForVmConfigCmake
+ 
+ or print it in place with:
+ 
+ ((Linux64x86w32BitSqueakCogV3Config new) configureForBuildType: #build) contentForVmConfigCmake   
+ 
+ The config.cmake file is generated with the usual Builder expressions.
+ 
+ SqueakLinux64x86w32CompatBuilder
+ 	configureA: #Linux64x86w32BitSqueakCogV3Config forBuildType:#build;
+ 	generate.
+ 
+ 
+ A config.cmake is created from CMake Templates (wrappers) in the CmakeVMMakerSqueak-CMakeTemplates  and CmakeVMMakerSqueak-CMakeCustomTemplates categories.
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakOverviewHelp class>>igorStasenkoDesign (in category 'pages') -----
+ igorStasenkoDesign
+ 	^HelpTopic
+ 		title:'Design Patterns'
+ 		contents:
+ 'CMakeVMMakerSqueak extends Igor Stasenko''s pharo work in CMMakeVMMaker. 
+ 
+ The system employs the Visitor design pattern in two places.
+ 
+ 1. When a CPlatformConfigForSqueak subclass invokes CMakeVMGeneratorForSqueak>>generate passing itself as the visitor.
+ 2. In SqueakCMakeVMMakerAbstractBuilder when Configuration information is cached in a CMakeVMakerConfigurationInfo.
+ 
+ The CPlatformConfigForSqueak makes heavy use of a Template pattern. This pattern is used extensively in the protocol ''cmake buildType redirects''.
+ This is used to force correct implementation of configurations. It also extends the pharo system to support the build types required for the 
+ 
+ Fairly extensive Tests are written to ensure correct implementation of Configurations.
+ 
+ '!

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

Item was added:
+ ----- Method: CMakeVMMakerSqueakOverviewHelp class>>looseEnds (in category 'pages') -----
+ looseEnds
+ 	^HelpTopic
+ 		title:'Loose Ends'
+ 		contents:
+ 'As of 2014.12.09 there are the inevitable loose ends. Some are:
+ 
+ Importing and compiling 3''rd party libraries has not been ported or tested.
+ The Builder facades lacks some query functionality.
+ The Builder facades may prove to be useless--we may want to throw them away.
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakOverviewHelp class>>overview (in category 'pages') -----
+ overview
+ 	^HelpTopic
+ 		title:'Overview'
+ 		contents:
+ 'Repeat after me: "CMAKE DRIVES THE PROCESS."
+ 
+ Keeping the above statement in mind is the key to this package. 
+ 
+ What we are looking for is a CMake system that correctly builds a virtual machine on a given platform. 
+ We then encapsulate that CMake system state in CMakeVMMakerSqueak Configurations. The end user can then reproduce that CMake system on their platform.
+ 
+ Hopefully this package makes the above process predictable and somewhat sane.
+ 
+ Towards that end, this system does the following :
+ 
+ Stores CMake configuration in concrete subclasses of CPlatformConfigForSqueak in a predicatable manner.
+ Provides methods for extracting the CMake configuration from those classes.
+ Provides a (hopefully) newbie friendly Facade for extracting the CMake configuration via Builders (Concrete subclasses of SqueakCMakeVMMakerAbstractBuilder)
+ Provides (for the configuration developer) CMake command wrapper code in subclasses of CMakeTemplate.
+ Proves to be scriptable such that generating the CMake output can be automated (or extracted from a Seaside website).
+ 
+ As the SqueakVM community gains experience with CMake, I expect the quality of the generated CMake output to improve considerably. CMake is a BIG system with LOTS of stuff in it. Storing the knowledge we gain in our Squeak classes should make things a lot easier on us.
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ The heart of the package is CMakeGeneratorForSqueak and its two subclasses CMakeVMGeneratorForSqueak and CMakePluginGeneratorForSqueak.
+ 
+ 
+ CMakeVMGeneratorForSqueak collects information from subclasses of CPlatformConfigForSqueak, CMThirdpartyLibrary and InterpreterPlugins and writes it out to CMake files and associated directories. 
+ 
+ From there, the user invokes cmake and make using a generated build.sh script.
+ 
+ The programmer directs the flow of the generator by coding a subclass of CPlatformConf, setting it up correctly and asking it to generate itself. 
+ 
+ The configuration then invokes the CMakeGeneratorForSqueak passing itself as an argument. 
+ 
+ The VMGeneratator extracts the information and utilizes VMPluginGenerator to generate plugin stuff, the CPlatformConf to generate other stuff and CMThirdPartyLibrary''s to generate other stuff. 
+ 
+ The end result is a CMake evironment that is set up to correctly build a VM
+ 
+ Concrete implementations of SqueakCMakeVMMakerAbstractBuilder provide an invokation facade and configuration query capabilities.
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakOverviewHelp class>>pages (in category 'pages') -----
+ pages
+ 	^#(overview  prerequisites  terms igorStasenkoDesign   buildersAndConfigs     vmplugins  )!

Item was added:
+ ----- Method: CMakeVMMakerSqueakOverviewHelp class>>plugins (in category 'pages') -----
+ plugins
+ 	^HelpTopic
+ 		title:'Plugins'
+ 		contents:'
+ 
+ TODO explain the design and methodology of the ''plugin extra rules'' protocol in
+ 
+ Explain CMakePluginGeneratorSqueak containing the config.cmake files
+ 
+ 
+ provide example of mapping from plugins.int to defaultInternalPlugins
+ 
+ |s|
+ Transcript clear.
+ s:=SortedCollection new.
+ InterpreterPlugin allSubclassesDo:[:p|
+ 	p moduleName = ''B2DPlugin''
+ 		ifTrue:[Transcript show:p name].
+ 	s add: (p moduleName)].
+ 
+ Transcript show: s.
+ 
+ SqueakUnixConfig browse
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakOverviewHelp class>>prerequisites (in category 'pages') -----
+ prerequisites
+ 	^HelpTopic
+ 		title:'Prerequisites'
+ 		contents:
+ 'The CMakeVMMakerSqueak depends on CMakeVMMaker (a pharo implementation)
+ 
+ CMake from  http://www.cmake.org/ is required to process the output of this package.
+ 
+ This package was written using cmake version 2.8.12
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakOverviewHelp class>>pthreads (in category 'pages') -----
+ pthreads
+ 	^HelpTopic
+ 		title:'PThreads'
+ 		contents:'
+ 
+ http://www.mirandabanda.org/files/Cog/VM/VM.r3006/README.3006
+ 
+ N.B. For Squeak/Pharo/Croquet please use the archives whose names begin with
+      Cog or cog.  The archives whose names begin with nsvm or Newspeak are
+      for Newspeak and are missing plugins required by Squeak/Pharo/Croquet.
+      VMs with "mt" or "MT" in the name are multi-threaded VMs which support
+      non-blocking FFI calls.  The archives containing "Spur" or "spur" are
+      VMs using the new Spur object representation and garbage collector and
+      should be used with Spur-format Squeak/Pharo/Croquet or Newspeak images.
+ 
+      There are two variants of the Linux VMs; those ending in "ht" have a
+      heartbeat thread, while those that don''t, use an interval timer for the
+      heartbeat (the Windows and Mac VMs have a threaded heartbeat).  The
+      threaded heartbeat is better (for example, signals from the interval timer
+      interfere with system calls, etc), but to use it one must have a kernel
+      later than 2.6.12 and configure linux to allow the VM to use multiple
+      thread priorities.  To do so, create a file called VM.conf where VM is
+      the name of the vm executable ("squeak" for the Squeak vm, "nsvm" for
+      the Newspeak vm) in /etc/security/limits.d/ with contents:
+ *       hard    rtprio  2
+ *       soft    rtprio  2
+ 
+      e.g.
+ sudo cat >/etc/security/limits.d/squeak.conf <<END
+ *       hard    rtprio  2
+ *       soft    rtprio  2
+ END
+ sudo cp /etc/security/limits.d/squeak.conf /etc/security/limits.d/nsvm.conf
+      Then log out and log back in for the limits to take effect.
+ 
+ 
+ On Slackware linux 14.0  
+ bash$ man limits
+ 
+ From the man page, the O (oh) option is:   O: max real time priority
+ 
+ create a file /etc/limits file and add an entry
+ 
+ tty O100
+ 
+ where tty is the login name, and the O option is set to 100.
+ 
+ Logout and re-login.
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakOverviewHelp class>>templates (in category 'pages') -----
+ templates
+ 	^HelpTopic
+ 		title:'CPlatformConfigForSqueak class templates'
+ 		contents:
+ 'CMakeVMMakerSqueak utilizes wrapper classes on CMake commands to generate CMake output files like CMakeLists.txt.
+ 
+ Currently the 3 class categories produce output as such:
+ 
+ 1. CMakeVMMakerSqueak-CMakeCompositeTemplates output large CMake structures. The essentially wrap both custom and standard CMake templates.
+ 
+ 2. CMakeVMMakerSqueak-CMakeCustomTemplates typically wrap CMake logic constructs like IF(DEFINED foo;
+ 
+ 3. CMakeVMMakerSqueak-CMakeTemplates are wrappers for specific CMake Commands, properties and variables.
+ cmake --help 
+ cmake --help-command-list
+ cmake --help-property-list
+ cmake --help-variable-list
+ 
+ will give you an idea of what is wrapped. As new templates are introduced, they can be re-used easily, minimizing errors.
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakOverviewHelp class>>terms (in category 'pages') -----
+ terms
+ 	^HelpTopic
+ 		title:'Terms'
+ 		contents:
+ '
+ AbstractBaseClass:   
+ 	Typically the topmost class in a [OS][VMWordSize][Processor][ETC]  class category. Example: CPlatformConfigForSqueak. Most of the configuration action happens at this level and lower.
+ 
+ Builder:                      
+ 	A concrete subclass of SqueakCMakeVMMakerAbstractBuilder. Builders act as a facade for invoking the configurations.They also provide query tools for the configurations that a builder manages. There is a one-to-one correspondence between a Builder''s configurationsCategory and the configurations it manages. example:    SqueakBSDx86Builder configurationsCategory
+ 
+ buildType:
+ 	One of SqueakCMakeVMMakerAbstractBuilder  allBuildTypes 
+                                  
+ 
+ CMakeLists.txt:
+ 	The instructions that CMake uses to build build systems.  One output of a configuration
+ 
+ Configuration:            
+ 	CPlatformConfigForSqueak  and its subclasses. These maintain the definitions that are rendered into CMakeLists.txt files
+ 
+ 
+ Generator:                 
+ 	CMakeGeneratorForSqueak and its subclasses
+ 
+ 
+ Redirect Methods:      
+ 	Given a method X, it is a redirect method if a call to it redirects to xBuildType based on the state of the configurations buildType  buildType variable.  See CPlatformConfigForSqueak protocol ''cmake buildType redirects''
+ 
+ 
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakOverviewHelp class>>tests (in category 'pages') -----
+ tests
+ 	^HelpTopic
+ 		title:'Tests'
+ 		contents:
+ '
+ When all tests pass. This does not mean the classes are configured correctly for source,output and build directories.
+ 
+ It does mean nothing structural is preventing that from being implemented.
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakOverviewHelp class>>vmplugins (in category 'pages') -----
+ vmplugins
+ 	^HelpTopic
+ 		title:'VMPlugins'
+ 		contents:'
+ 
+ TODO CMakeVMMakerSqueak-VMPlugin purpose, configuration and use'!

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

Item was added:
+ ----- Method: CMakeVMMakerSqueakPluginGeneratorHelp class>>bookName (in category 'accessing') -----
+ bookName 
+ 	^'Plugin Generator'!

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

Item was added:
+ ----- Method: CMakeVMMakerSqueakPluginGeneratorHelp class>>overview (in category 'pages') -----
+ overview
+ 	^HelpTopic
+ 		title: 'Overview'
+ 		contents:
+ 'Write me'!

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

Item was changed:
+ CMakeVMMakerSqueakHelp subclass: #CMakeVMMakerSqueakStartHereHelp
- CMakeVMMakerSqueakDeveloperHelp subclass: #CMakeVMMakerSqueakStartHereHelp
  	instanceVariableNames: ''
  	classVariableNames: ''
  	poolDictionaries: ''
  	category: 'CMakeVMMakerSqueak-Help'!
  
  !CMakeVMMakerSqueakStartHereHelp commentStamp: 'tty 11/28/2014 10:27' prior: 0!
  A CMakeVMMakerSqueakStartHereHelp provides examples of usage for newbies.
  
  
  !

Item was added:
+ 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 added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>bookName (in category 'accessing') -----
+ bookName 
+ 	^'Step By Step: New Configurations'!

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

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>pages (in category 'accessing') -----
+ pages
+ 	^#(step1 
+ 		step2 
+ 		step3 
+ 		step4 
+ 		step4a 
+ 		step4b 
+ 		step4c 
+ 		step4d 
+ 		step4e 
+ 		step4f 
+ 		step4g 
+ 		step4h 
+ 		step4i 
+ 		step4j 
+ 		step4k 
+ 		step4l 
+ 		step4m
+ 		step5 
+ )!

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step1 (in category 'pages') -----
+ step1
+ 	^HelpTopic
+ 		title:'Step 1. Choose Your Category'
+ 		contents:
+ ' CMakeVMMakerSqueak configurations are placed in a Smalltalk category with the naming convention [OS][VMWordSize][Processor]
+ 
+ You start by choosing the correct Smalltalk Category in which to place your new Configuration.
+ 
+ Example; If you need a new configuration for Linux for a 32 bit VM on the x86 platform--[Linux][32][x86]--Choose the CMakeVMMakerSqueak-Linux32x86 category.
+ 
+ A Reminder: Consistent Naming Conventions Are Our Friends!!
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step2 (in category 'pages') -----
+ step2
+ 	^HelpTopic
+ 		title:'Step 2. Copy Existing Concrete Configuration'
+ 		contents:
+ 'Now that you have selected your category to place your new Configuration, you need to create your configuration.
+ 
+ Like Categories, Configurations adhere to a naming convention. It is [language][VM][MemoryManager][etc]Config
+ example: squeak.cog.v3.tty  is a configuration for compiling Squeak with a Cog VM with the old V3 memory manager and this is a special configuration for tty.
+ 
+ The easiest way to create the config is to subclass an existing configuration. In this case I would subclass squeak.cog.v3.
+ 
+ IMPORTANT: Do not copy a configuration (usually the top one in a category) that has the "	uses: TCPlatformConfigForSqueak"
+ line in its definition. While there are technical reasons for this warning, the important one is that it makes coding a pain-in-the-butt.
+ 
+ 
+ A Reminder: Consistent Naming Conventions Are Our Friends!!
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step3 (in category 'pages') -----
+ step3
+ 	^HelpTopic
+ 		title:'Step 4. Customize the "cmake" protocol'
+ 		contents:
+ 'TODO
+ dirInstall
+ 	"the directory of the finished product.. the place where ''make install'' puts stuff.
+ 	SystemNavigation default browseMethodsWhoseNamesContain: ''dirInstall''
+       "
+ 	^self squeakCogV3 , ''.noGL''
+ 
+ 
+ excludeFromBuild
+ 	^false   "build this configuration"
+ "	^true"
+ 
+ executableName
+ 	^ self vmCogExecutableName
+ A Reminder: Consistent Naming Conventions Are Our Friends!!
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4 (in category 'pages') -----
+ step4
+ 	^HelpTopic
+ 		title:'Step 4. Customize the "cmake build type config" protocol'
+ 		contents:
+ 'When we invoke a Builder with a command like:
+ 
+ SqueakLinux64x86w32CompatBuilder
+ 	configureA: #Linux64x86w32BitSqueakCogV3SlackwareNoGLConfig forBuildType: #buildDebugITimerHeartbeat;
+ 	generateSources;
+ 	generate.  
+ 
+ We are telling the Builder to select a Configuration and have that Configuration configure itself to produce CMake output for the buildType: #buildDebugITimerHeartbeat;
+ 
+ On your configuration the entry point for your configuration is one of:
+ 
+ configureBuild
+ configureBuildAssert
+ configureBuildAssertITimerHeartbeat
+ configureBuildDebug
+ configureBuildDebugITimerHeartbeat                        <----this one is selected by buildType: #buildDebugITimerHeartbeat;
+ configureBuildITimerHeartbeat
+ configureBuildMultiThreaded
+ configureBuildMultiThreadedAssert
+ configureBuildMultiThreadedDebug
+ 
+ Within this method, system state is set up and customizable for many methods in CMakeVMaker CPlatformConfig.
+ 
+ "setGlobalOptions: aMaker"
+ "setGlobalOptionsAfterDetermineSystem: aMaker"
+ setupDirectories
+ preferredIncludes
+ standardIncludes
+ compilerFlags
+ "extraVMSettings: aMaker"
+ internalPlugins
+ externalPlugins
+ thirdpartyLibs
+ "setExtraTargetProperties: aMaker"
+ "postBuildActions: aMaker"
+ configH
+ 
+ The methods above that take the : aMaker argument are handled on-the-fly later in the process and are only presented here for informational purposes.
+ 
+ 
+ 
+ A Reminder: Consistent Naming Conventions Are Our Friends!!
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4a (in category 'pages') -----
+ step4a
+ 	^HelpTopic
+ 		title:'Step 4a. setGlobalOptions'
+ 		contents:
+ 'TODO: summarize this
+ 
+ 
+ 
+ A Reminder: Consistent Naming Conventions Are Our Friends!!
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4b (in category 'pages') -----
+ step4b
+ 	^HelpTopic
+ 		title:'Step 4b. setGlobalOptionsAfterDetermineSystem'
+ 		contents:
+ 'TODO: summarize this
+ 
+ 
+ 
+ 
+ A Reminder: Consistent Naming Conventions Are Our Friends!!
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4c (in category 'pages') -----
+ step4c
+ 	^HelpTopic
+ 		title:'Step 4c. setupDirectories'
+ 		contents:
+ 'TODO: summarize this
+ 
+ 
+ 
+ A Reminder: Consistent Naming Conventions Are Our Friends!!
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4d (in category 'pages') -----
+ step4d
+ 	^HelpTopic
+ 		title:'Step 4d. preferredIncludes'
+ 		contents:
+ 'This is handy when ''make'' cannot find a header.
+ 
+  For example, when compiling 
+ 
+ I got error:
+ Scanning dependencies of target UnixOSProcessPlugin
+ /..../oscogvm/src/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c:48:26: fatal error: SocketPlugin.h: No such file or directory
+ 
+ From my topDir (oscogvm) I did  a search and found SocketPlugin.h exits in  ./platforms/Cross/plugins/SocketPlugin/SocketPlugin.h
+ 
+ in my root config class for my category, I had...
+ 
+ ''${targetPlatform}/plugins/SocketPlugin''
+ 
+ I changed it to 
+ 
+ ''${crossDir}/plugins/SocketPlugin''
+ 
+ deleted my files in my build directory, re-ran the generate and...
+ 
+ 
+ 
+ 	SystemNavigation default browseMethodsWhoseNamesContain: ''preferredIncludes''
+   
+ 
+ A Reminder: Consistent Naming Conventions Are Our Friends!!
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4e (in category 'pages') -----
+ step4e
+ 	^HelpTopic
+ 		title:'Step 4e. standardIncludes'
+ 		contents:
+ 'TODO: summarize this
+ 
+ 
+ 
+ A Reminder: Consistent Naming Conventions Are Our Friends!!
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4f (in category 'pages') -----
+ step4f
+ 	^HelpTopic
+ 		title:'Step 4f. compilerFlags'
+ 		contents:
+ 'TODO: summarize this
+ 
+ 
+ 
+ A Reminder: Consistent Naming Conventions Are Our Friends!!
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4g (in category 'pages') -----
+ step4g
+ 	^HelpTopic
+ 		title:'Step 4g. extraVMSettings'
+ 		contents:
+ 'TODO: summarize this
+ 
+ 
+ 
+ A Reminder: Consistent Naming Conventions Are Our Friends!!
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4h (in category 'pages') -----
+ step4h
+ 	^HelpTopic
+ 		title:'Step4h internalPlugins'
+ 		contents:
+ 'TODO: summarize this
+ 
+ 
+ 
+ A Reminder: Consistent Naming Conventions Are Our Friends!!
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4i (in category 'pages') -----
+ step4i
+ 	^HelpTopic
+ 		title:'Step4i externalPlugins'
+ 		contents:
+ 'TODO: summarize this
+ 
+ 
+ 
+ 
+ A Reminder: Consistent Naming Conventions Are Our Friends!!
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4j (in category 'pages') -----
+ step4j
+ 	^HelpTopic
+ 		title:'Step4j thirdpartyLibs'
+ 		contents:
+ 'TODO: summarize this
+ 
+ 
+ A Reminder: Consistent Naming Conventions Are Our Friends!!
+ 
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4k (in category 'pages') -----
+ step4k
+ 	^HelpTopic
+ 		title:'Step4k setExtraTargetProperties:aMaker'
+ 		contents:
+ 'TODO: summarize this
+ 
+ 
+ 
+ A Reminder: Consistent Naming Conventions Are Our Friends!!
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4l (in category 'pages') -----
+ step4l
+ 	^HelpTopic
+ 		title:'Step4k postBuildActions: aMaker'
+ 		contents:
+ 'TODO: summarize this
+ 
+ 
+ 
+ A Reminder: Consistent Naming Conventions Are Our Friends!!
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step4m (in category 'pages') -----
+ step4m
+ 	^HelpTopic
+ 		title:'Step4m configH'
+ 		contents:
+ ' This is the contents of a config.h file in the build directory.
+ It is used only in Unix builds in CMakeVMMaker.
+ 
+ 
+ It is called from the method ''extraVMSettings'' of  CogUnixConfig in CMakeVMMaker when CogUnixConfig sends the message:		self generateConfigH.
+ 
+ To provide a custom config.h CMakeVMakerSqueak subclasses that message ''self generateConfigH'' and routes the call
+ to ''generateConfigH: aBuildType''
+ 
+ From there, a block is evaluated appropriate for the build type that invokes a ''configHBuildXYZ'' method which can be overridden by you to 
+ return a custom config.h. The default is to return the base configH.
+ 
+ 
+ A Reminder: Consistent Naming Conventions Are Our Friends!!
+ 
+ '!

Item was added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewConfigurationHelp class>>step5 (in category 'pages') -----
+ step5
+ 	^HelpTopic
+ 		title:'Step5 set up ''cmake directory'' protocol'
+ 		contents:
+ 'The cmake directories protocol contains directory names for your platform, build directory 
+ 
+ See the chapter titled: ''An Explanation of Protocols in TCPaltformConfigForSqueak'' in 
+ HelpBrowser openOn:CMakeVMMakerSqueakDeveloperHelp  
+ 
+ The ones that your Configuration must implement are:
+ 
+ dirBuildPlatform
+ dirBuildLanguageVMMM
+ 
+ 
+ Basically, we are building a directory like this:
+ oscogvm/cmake.build.linux32.x86/squeak.cog.v3/build.assert 
+ 
+ which, when expressed as message names reduces to:
+ 
+ topDir/dirLinux32x86/squeakCogV3/dirBuildAssert
+ 
+ which are further reduced to 
+ 
+ topDir/dirBuildPlatform/dirBuildLanguageVMMM/dirBuildAssert
+ 
+ It is the two in the middle that you must customize. (dirBuildAssert is dynamically set by a Builder in a script, to be covered later)
+ To see how, take a look at the implementors of the two. its quite intuitive once you see it as it is based off our standard naming conventions.
+ 
+ SystemNavigation default browseMethodsWhoseNamesContain: ''dirBuildPlatform''
+ SystemNavigation default browseMethodsWhoseNamesContain: ''dirBuildLanguageVMMM''
+ 
+ For our purposes in this example, we want:
+ 
+ 
+ dirBuildPlatform
+ 	^self dirLinux32x86
+ and
+ 
+ dirBuildLanguageVMMM
+ 	^self squeakCogV3
+ 
+ 
+ A Reminder: Consistent Naming Conventions Are Our Friends!!
+ 
+ '!

Item was added:
+ 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 added:
+ ----- Method: CMakeVMMakerSqueakStepByStepNewPlatformHelp class>>bookName (in category 'accessing') -----
+ bookName 
+ 	^'Step By Step: New Platform'!

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

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

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

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

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

Item was added:
+ ----- Method: CMakeVMMakerSqueakTemplatesHelp class>>bookName (in category 'accessing') -----
+ bookName 
+ 	^'CMake Templates'!

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

Item was added:
+ ----- Method: CMakeVMMakerSqueakTemplatesHelp class>>overview (in category 'pages') -----
+ overview
+ 	^HelpTopic
+ 		title: 'Overview'
+ 		contents:
+ 'CMake Templates wrap CMake constructs
+ 
+ Motivation: Ian Piumarta''s template approach is compelling. and the string concatenation approach of CMakeVMMaker was too hard on my feeble mind. 
+ 
+ Most are subclasses of CMakeTemplate.
+ Custom Templates are handy groupings of basic templates.
+ Composite Templates encapsulate odd or large blocks of CMake constructs.
+ 
+ 
+ The templates allow us to think in CMake while coding in Smalltalk.
+ 
+ They are easy to implement as needed.
+ 
+ They are re-usable
+ 
+ CMake constructs can be viewed by invoking ''cmake --help''.
+ 
+ 
+ 
+ So far the most important constructs are:
+ 
+ cmake --help-command-list
+ cmake --help-module-list
+ cmake --help-property-list
+ cmake --help-variable-list
+ 
+ 
+ We will probably have to fine tune the organization as we add to the library of templates.
+ 
+ '!

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

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

Item was added:
+ ----- Method: CMakeVMMakerSqueakVMGeneratorHelp class>>bookName (in category 'accessing') -----
+ bookName 
+ 	^'VM Generator'!

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

Item was added:
+ ----- Method: CMakeVMMakerSqueakVMGeneratorHelp class>>overview (in category 'pages') -----
+ overview
+ 	^HelpTopic
+ 		title: 'Overview'
+ 		contents:
+ 'Write me'!

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



More information about the Vm-dev mailing list