[Vm-dev] VM Maker: CMakeVMMakerSqueak-tty.119.mcz
commits at source.squeak.org
commits at source.squeak.org
Sun May 29 12:51:32 UTC 2016
Timothy M uploaded a new version of CMakeVMMakerSqueak to project VM Maker:
http://source.squeak.org/VMMaker/CMakeVMMakerSqueak-tty.119.mcz
==================== Summary ====================
Name: CMakeVMMakerSqueak-tty.119
Author: tty
Time: 22 May 2016, 3:09:10.602694 pm
UUID: fb6b7f67-d708-4b3e-b726-5552e935addb
Ancestors: CMakeVMMakerSqueak-tty.118
differentiated between oscogvm/src and the various oscogvm/[where the vm lives actually lives.]
CMake generates output. However linking step in compile fails. Still need to redo tests for this change
=============== Diff against CMakeVMMakerSqueak-tty.118 ===============
Item was changed:
----- 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
+ (HelpBrowser openOn: CMakeVMMakerSqueakOverviewHelp) model
+ showTopicThat: [:topic | topic key = #namingConventions].
+
+
'!
Item was changed:
CPlatformConfig subclass: #CPlatformConfigForSqueak
+ instanceVariableNames: 'buildType cogDir generateBuild generateBuildAssert generateBuildAssertITimerHeartbeat generateBuildDebug generateBuildDebugITimerHeartbeat generateBuildDebugMultiThreaded generateBuildIHeartbeatTimer generateBuildMultiThreaded generateBuildMultiThreadedAssert generateBuildMultiThreadedDebug templates enabledebugmessages vmplugins'
- instanceVariableNames: 'buildType generateBuild generateBuildAssert generateBuildAssertITimerHeartbeat generateBuildDebug generateBuildDebugITimerHeartbeat generateBuildDebugMultiThreaded generateBuildIHeartbeatTimer generateBuildMultiThreaded generateBuildMultiThreadedAssert generateBuildMultiThreadedDebug templates enabledebugmessages vmplugins'
classVariableNames: ''
poolDictionaries: ''
category: 'CMakeVMMakerSqueak'!
CPlatformConfigForSqueak class
instanceVariableNames: 'isAbstractBaseClass'!
!CPlatformConfigForSqueak commentStamp: 'tty 12/8/2014 11:28' prior: 0!
A CPlatformConfigForSqueak acts as a compatability layer for Squeak and an Abstract Base Class for extended functionality required for the Squeak CMakeVMMaker use-case.
I make (very) heavy use of a specific design pattern for configuring myself and remaining compatible with pharo's CMakeVMMaker.
The entry point for that pattern is my method 'configureForBuildType: aSymbol' . Each method send in there detects my buildType and routes the send
to the approriate method for that buildType.
Subclasses of me 'must' configure themselves for each build type per that pattern.
However this can be very easy by just returning the base configuration.
Tests are written to verify that this support infrastructure is in place.
I have two important methods.
excludeFromBuild and isAbstractBaseClass.
excludeFromBuild
is used to exclude a configuration from being built by a Builder.
is used to exclude a configuration from Testing.
isAbstractBaseClass
is used by configurations that exclude themselves from being built by a Builder BUT need to be included in Testing.
excludeFromBuild | isAbstractBaseClass | should build | should test
T T NO YES
T F NO NO
F T YES YES
F F YES YES
The use-case is as follows.
An abstract base class contains a lot of functionality that must be implemented and tested for the system to work, but it is not meant to be compiled.
concrete classes of that AbstractBase class can exclude themselves from being built by builders and by doing so are not tested.
However, once a concrete configuration is enabled to be built, it must pass all tests.
Linux32x86Config is an example of an AbstractBase class that must pass all testing, but is not buildable.
Its subclass Linux32x86SqueakCogV3Config needs testing, but a developer can toggle 'exclude from build' to hide it from Builders or make it available to them.
Tests make the decision on what configurations to test. Here are some examples.
(o excludeFromBuild not) & (configuration isAbstractBaseClass not) this is a concrete [Lang][VM][MemoryManager][etc] configuration that will be built. No platform classes considered
(o excludeFromBuild) & (configuration isAbstractBaseClass not) This is a concrete [Lang][VM][MemoryManager][etc] configuration that will be NOT built.
(o excludeFromBuild not) | (configuration isAbstractBaseClass) concrete implementation may depend on its [OS][VMWordSize][Processor] AbstractBaseClass for platform level methods.
example: Linux32x86Config ccBuild has the '-m32' compiler flag that is common to all builds on that platform
(o excludeFromBuild not) & (configuration isAbstractBaseClass) Not allowed. [OS][VMWordSize][Processor] AbstractBaseClasses should not be built. This is a useful test in its own right.
(o excludeFromBuild) & (configuration isAbstractBaseClass) These are the AbstractBaseClasses. An AbstractBaseClass should always be excluded from a build
HelpBrowser openOn: CMakeVMMakerSqueakDeveloperHelp
tty.!
CPlatformConfigForSqueak class
instanceVariableNames: 'isAbstractBaseClass'!
Item was changed:
+ ----- Method: CPlatformConfigForSqueak>>buildDir (in category 'cmake directory') -----
- ----- Method: CPlatformConfigForSqueak>>buildDir (in category 'squeak compatability') -----
buildDir
^ buildDir ifNil: [ buildDir := ( self topDir / self buildDirName) assureExistence].!
Item was changed:
+ ----- Method: CPlatformConfigForSqueak>>buildDirName (in category 'cmake directory') -----
- ----- Method: CPlatformConfigForSqueak>>buildDirName (in category 'squeak compatability') -----
buildDirName
buildType isNil
ifTrue:[^self dirBuildPlatform, FileDirectory slash, self dirBuildLanguageVMMM, FileDirectory slash, 'build']
ifFalse:[^self dirBuildPlatform, FileDirectory slash, self dirBuildLanguageVMMM, FileDirectory slash, buildType asString]!
Item was added:
+ ----- Method: CPlatformConfigForSqueak>>cogDir (in category 'cmake directory') -----
+ cogDir
+ " topDir=oscogvm
+ dirSource=[nsspur64src | nsspursrc |nsspurstack64src |nsspurstacksrc |spur64src |spursistasrc |spursrc | spurstack64src |spurstacksrc | src |stacksr] Configurations customize this
+ srcDir=oscogvm/dirSource
+ cogDir=oscogvm/src (needed by CMake for access to plugins source in oscogvm/src/plugins)
+ "
+ ^ cogDir ifNil: [ cogDir := (self src) ]
+
+ !
Item was changed:
+ ----- Method: CPlatformConfigForSqueak>>customizeVMPlugins (in category 'initialize-release') -----
- ----- Method: CPlatformConfigForSqueak>>customizeVMPlugins (in category 'plugins') -----
customizeVMPlugins
self flag:'tty'. "is this needed on all platforms? consider moving down"
self subclassResponsibility!
Item was changed:
----- Method: CPlatformConfigForSqueak>>dirSource (in category 'cmake directory') -----
dirSource
+ "
+ dirSource=[nsspur64src | nsspursrc | nsspurstack64src |nsspurstacksrc |spur64src |spursistasrc |spursrc | spurstack64src |spurstacksrc | src |stacksr] Configurations must customize this
+ srcDir=oscogvm/dirSource
+ cogDir=oscogvm/src (needed by CMake for access to plugins source in oscogvm/src/plugins)
- "Have your custom Configuration return the directory where the source files are. As of 2016.05.15 they are:
- nsspur64src
- nsspursrc
- nsspurstack64src
- nsspurstacksrc
- spur64src
- spursistasrc
- spursrc
- spurstack64src
- spurstacksrc
- src (cog.v3 lives here)
- stacksrc"
+
+ "
+
+
self subclassResponsibility
!
Item was changed:
+ ----- Method: CPlatformConfigForSqueak>>nsspur64src (in category 'cmake directory') -----
- ----- Method: CPlatformConfigForSqueak>>nsspur64src (in category 'cmake source names') -----
nsspur64src
+ ^ (self topDir directoryNamed: 'nsspur64src')!
- ^ 'nsspur64src'!
Item was changed:
+ ----- Method: CPlatformConfigForSqueak>>nsspursrc (in category 'cmake directory') -----
- ----- Method: CPlatformConfigForSqueak>>nsspursrc (in category 'cmake source names') -----
nsspursrc
+ ^ (self topDir directoryNamed: 'nsspursrc')!
- ^ 'nsspursrc'!
Item was changed:
+ ----- Method: CPlatformConfigForSqueak>>nsspurstack64src (in category 'cmake directory') -----
- ----- Method: CPlatformConfigForSqueak>>nsspurstack64src (in category 'cmake source names') -----
nsspurstack64src
+ ^ (self topDir directoryNamed: 'nsspurstack64src')!
- ^ 'nsspurstack64src'!
Item was changed:
+ ----- Method: CPlatformConfigForSqueak>>nsspurstacksrc (in category 'cmake directory') -----
- ----- Method: CPlatformConfigForSqueak>>nsspurstacksrc (in category 'cmake source names') -----
nsspurstacksrc
+ ^ (self topDir directoryNamed: 'nsspurstacksrc')!
- ^ 'nsspurstacksrc'!
Item was changed:
+ ----- Method: CPlatformConfigForSqueak>>outputDir (in category 'cmake directory') -----
- ----- Method: CPlatformConfigForSqueak>>outputDir (in category 'squeak compatability') -----
outputDir
"the directory where built binaries will be stored"
^ outputDir ifNil: [ outputDir := (self topDir / self dirOutput / self dirBuildPlatform / self dirBuildLanguageVMMM / (buildType asString)) ]
!
Item was changed:
+ ----- Method: CPlatformConfigForSqueak>>spur64src (in category 'cmake directory') -----
- ----- Method: CPlatformConfigForSqueak>>spur64src (in category 'cmake source names') -----
spur64src
+ ^ (self topDir directoryNamed: 'spur64src')!
- ^ 'spur64src'!
Item was changed:
+ ----- Method: CPlatformConfigForSqueak>>spursistasrc (in category 'cmake directory') -----
- ----- Method: CPlatformConfigForSqueak>>spursistasrc (in category 'cmake source names') -----
spursistasrc
+ ^ (self topDir directoryNamed: 'spursistasrc')!
- ^ 'spursistasrc'!
Item was changed:
+ ----- Method: CPlatformConfigForSqueak>>spursrc (in category 'cmake directory') -----
- ----- Method: CPlatformConfigForSqueak>>spursrc (in category 'cmake source names') -----
spursrc
+ ^ (self topDir directoryNamed: 'spursrc')!
- ^ 'spursrc'!
Item was changed:
+ ----- Method: CPlatformConfigForSqueak>>spurstack64src (in category 'cmake directory') -----
- ----- Method: CPlatformConfigForSqueak>>spurstack64src (in category 'cmake source names') -----
spurstack64src
+ ^ (self topDir directoryNamed: 'spurstack64src')!
- ^ 'spurstack64src'!
Item was changed:
+ ----- Method: CPlatformConfigForSqueak>>spurstacksrc (in category 'cmake directory') -----
- ----- Method: CPlatformConfigForSqueak>>spurstacksrc (in category 'cmake source names') -----
spurstacksrc
+ ^ (self topDir directoryNamed: 'spurstacksrc')!
- ^ 'spurstacksrc'!
Item was changed:
+ ----- Method: CPlatformConfigForSqueak>>src (in category 'cmake directory') -----
- ----- Method: CPlatformConfigForSqueak>>src (in category 'cmake source names') -----
src
"where cog lives"
+
+ ^ (self topDir directoryNamed: 'src')!
- ^ 'src'!
Item was changed:
+ ----- Method: CPlatformConfigForSqueak>>srcDir (in category 'cmake directory') -----
- ----- Method: CPlatformConfigForSqueak>>srcDir (in category 'squeak compatability') -----
srcDir
+ "pharo legacy naming convention. used in some cmake scripts like 'directories.cmake'
+
+ topDir=oscogvm
+ dirSource=[nsspur64src | nsspursrc |nsspurstack64src |nsspurstacksrc |spur64src |spursistasrc |spursrc | spurstack64src |spurstacksrc | src |stacksr] Configurations customize this
+ srcDir=oscogvm/dirSource
+ cogDir=oscogvm/src (needed by CMake for access to plugins source in oscogvm/src/plugins)
+ "
+
+ ^ self dirSource
+ !
- self flag:'tty: srcDir is a pharo thing. Factor this out in favor of the dirSource for consistency'.
- ^ srcDir ifNil: [ srcDir := (self topDir directoryNamed: (self dirSource) )]!
Item was changed:
+ ----- Method: CPlatformConfigForSqueak>>stacksrc (in category 'cmake directory') -----
- ----- Method: CPlatformConfigForSqueak>>stacksrc (in category 'cmake source names') -----
stacksrc
+ ^ (self topDir directoryNamed: 'stacksrc' )
+ !
- ^ 'stacksrc'!
Item was changed:
+ ----- Method: CPlatformConfigForSqueak>>topDir (in category 'cmake directory') -----
- ----- Method: CPlatformConfigForSqueak>>topDir (in category 'squeak compatability') -----
topDir
+ " topDir=oscogvm
+ dirSource=[nsspur64src | nsspursrc |nsspurstack64src |nsspurstacksrc |spur64src |spursistasrc |spursrc | spurstack64src |spurstacksrc | src |stacksr] Configurations customize this
+ srcDir=oscogvm/dirSource
+ cogDir=oscogvm/src (needed by CMake for access to plugins source in oscogvm/src/plugins)
+ "
^ topDir ifNil: [ topDir := FileDirectory default directoryNamed: self oscogvm ]
!
Item was changed:
----- Method: SqueakMacintoshConfig>>cmakeWriteDirectoriesDotCmake: (in category 'cmake') -----
cmakeWriteDirectoriesDotCmake: aMaker
|temp o|
"We could put these inline, but other components include the directories.cmake file. So, we continue that convention"
o := String new writeStream.
temp := OrderedCollection new.
temp
addLast: ((CMakeSet new) variable: 'topDir' quotedValue: (self topDir fullName));
addLast: ((CMakeSet new) variable: 'buildDir' quotedValue: (self buildDir ifNil: ['${topDir}/build'] ifNotNil: [self buildDir fullName]));
addLast: ((CMakeSet new) variable: 'thirdpartyDir' quotedValue: '${buildDir}/thirdParty');
addLast: ((CMakeSet new) variable: 'platformsDir' quotedValue: (self platformsDir));
+ addLast: ((CMakeSet new) variable: 'srcDir' quotedValue: (self dirSource pathName)); "where the vm source directory lives"
+ addLast: ((CMakeSet new) variable: 'cogDir' quotedValue: (self cogDir pathName)); "oscogvm/src for historical reasons"
+ addLast: ((CMakeSet new) variable: 'srcPluginsDir' quotedValue: (pluginsDir ifNil: [ '${cogDir}/plugins' ])); "plugin source directory only in oscogvm/src/plugins"
- addLast: ((CMakeSet new) variable: 'srcDir' quotedValue: (self srcDir pathName));
- addLast: ((CMakeSet new) variable: 'srcPluginsDir' quotedValue: (pluginsDir ifNil: [ '${srcDir}/plugins' ]));
addLast: ((CMakeSet new) variable: 'srcVMDir' quotedValue: '${srcDir}/vm');
addLast: ((CMakeSet new) variable: 'platformName' quotedValue: (self platformName));
addLast: ((CMakeSet new) variable: 'targetPlatform' quotedValue: '${platformsDir}/${platformName}');
addLast: ((CMakeSet new) variable: 'crossDir' quotedValue: '${platformsDir}/Cross');
addLast: ((CMakeSet new) variable: 'platformVMDir' quotedValue: '${targetPlatform}/vm}');
addLast: ((CMakeSet new) variable: 'outputDir' quotedValue: (self outputDir fullName));
addLast: ((CMakeSet new) variable: 'externalModulesDir' quotedValue: (self externalModulesDir)).
temp do: [:each | o nextPutAll: (each content); cr].
self write: (o contents) toFile: 'directories.cmake'.
(enabledebugmessages)
ifTrue:[
templates
addLast:((CMakeMessage new) message: (self class name), ' setDirectories: aMaker' )
].
templates addLast: ((CMakeInclude new) file: 'directories.cmake').
!
Item was changed:
----- Method: SqueakUnixConfig>>cmakeWriteDirectoriesDotCmake: (in category 'cmake') -----
cmakeWriteDirectoriesDotCmake: aMaker
|temp o|
"We could put these inline, but other components include the directories.cmake file. So, we continue that convention"
- self flag: 'tty, aMaker never used'.
o := String new writeStream.
temp := OrderedCollection new.
temp
addLast: ((CMakeSet new) variable: 'topDir' quotedValue: (self topDir fullName));
addLast: ((CMakeSet new) variable: 'buildDir' quotedValue: (self buildDir ifNil: ['${topDir}/build'] ifNotNil: [self buildDir fullName]));
addLast: ((CMakeSet new) variable: 'thirdpartyDir' quotedValue: '${buildDir}/thirdParty');
addLast: ((CMakeSet new) variable: 'platformsDir' quotedValue: (self platformsDir));
+ addLast: ((CMakeSet new) variable: 'srcDir' quotedValue: (self dirSource pathName)); "where the vm source directory lives"
+ addLast: ((CMakeSet new) variable: 'cogDir' quotedValue: (self cogDir pathName)); "oscogvm/src for historical reasons"
+ addLast: ((CMakeSet new) variable: 'srcPluginsDir' quotedValue: (pluginsDir ifNil: [ '${cogDir}/plugins' ])); "plugin source directory only in oscogvm/src/plugins"
- addLast: ((CMakeSet new) variable: 'srcDir' quotedValue: (self srcDir pathName));
- addLast: ((CMakeSet new) variable: 'srcPluginsDir' quotedValue: (pluginsDir ifNil: [ '${srcDir}/plugins' ]));
addLast: ((CMakeSet new) variable: 'srcVMDir' quotedValue: '${srcDir}/vm');
addLast: ((CMakeSet new) variable: 'platformName' quotedValue: (self platformName));
addLast: ((CMakeSet new) variable: 'targetPlatform' quotedValue: '${platformsDir}/${platformName}');
addLast: ((CMakeSet new) variable: 'crossDir' quotedValue: '${platformsDir}/Cross');
addLast: ((CMakeSet new) variable: 'platformVMDir' quotedValue: '${targetPlatform}/vm}');
addLast: ((CMakeSet new) variable: 'outputDir' quotedValue: (self outputDir fullName));
addLast: ((CMakeSet new) variable: 'externalModulesDir' quotedValue: (self externalModulesDir)).
temp do: [:each | o nextPutAll: (each content); cr].
self write: (o contents) toFile: 'directories.cmake'.
(enabledebugmessages)
ifTrue:[
templates
addLast:((CMakeMessage new) message: (self class name), ' setDirectories: aMaker' )
].
templates addLast: ((CMakeInclude new) file: 'directories.cmake').
!
Item was changed:
----- Method: SqueakWindowsConfig>>cmakeWriteDirectoriesDotCmake: (in category 'cmake') -----
cmakeWriteDirectoriesDotCmake: aMaker
|temp o|
"We could put these inline, but other components include the directories.cmake file. So, we continue that convention"
o := String new writeStream.
temp := OrderedCollection new.
temp
addLast: ((CMakeSet new) variable: 'topDir' quotedValue: (self topDir fullName));
addLast: ((CMakeSet new) variable: 'buildDir' quotedValue: (self buildDir ifNil: ['${topDir}/build'] ifNotNil: [self buildDir fullName]));
addLast: ((CMakeSet new) variable: 'thirdpartyDir' quotedValue: '${buildDir}/thirdParty');
addLast: ((CMakeSet new) variable: 'platformsDir' quotedValue: (self platformsDir));
+ addLast: ((CMakeSet new) variable: 'srcDir' quotedValue: (self dirSource pathName)); "where the vm source directory lives"
+ addLast: ((CMakeSet new) variable: 'cogDir' quotedValue: (self cogDir pathName)); "oscogvm/src for historical reasons"
+ addLast: ((CMakeSet new) variable: 'srcPluginsDir' quotedValue: (pluginsDir ifNil: [ '${cogDir}/plugins' ])); "plugin source directory only in oscogvm/src/plugins"
- addLast: ((CMakeSet new) variable: 'srcDir' quotedValue: (self srcDir pathName));
- addLast: ((CMakeSet new) variable: 'srcPluginsDir' quotedValue: (pluginsDir ifNil: [ '${srcDir}/plugins' ]));
addLast: ((CMakeSet new) variable: 'srcVMDir' quotedValue: '${srcDir}/vm');
addLast: ((CMakeSet new) variable: 'platformName' quotedValue: (self platformName));
addLast: ((CMakeSet new) variable: 'targetPlatform' quotedValue: '${platformsDir}/${platformName}');
addLast: ((CMakeSet new) variable: 'crossDir' quotedValue: '${platformsDir}/Cross');
addLast: ((CMakeSet new) variable: 'platformVMDir' quotedValue: '${targetPlatform}/vm}');
addLast: ((CMakeSet new) variable: 'outputDir' quotedValue: (self outputDir fullName));
addLast: ((CMakeSet new) variable: 'externalModulesDir' quotedValue: (self externalModulesDir)).
temp do: [:each | o nextPutAll: (each content); cr].
self write: (o contents) toFile: 'directories.cmake'.
(enabledebugmessages)
ifTrue:[
templates
addLast:((CMakeMessage new) message: (self class name), ' setDirectories: aMaker' )
].
templates addLast: ((CMakeInclude new) file: 'directories.cmake').
!
More information about the Vm-dev
mailing list