Timothy M uploaded a new version of CMakeVMMakerSqueak to project VM Maker: http://source.squeak.org/VMMaker/CMakeVMMakerSqueak-tty.22.mcz
==================== Summary ====================
Name: CMakeVMMakerSqueak-tty.22 Author: tty Time: 26 May 2014, 1:27:42.451 pm UUID: 0a52c2a6-81a2-457d-b772-79c599312bea Ancestors: CMakeVMMakerSqueak-tty.21
Added CMakeVMMakerSqueak-libs tree covering ssl and freetype for SqueakCogMTWindowsConfig.
Observed thirdParty CMakeLists.txt was generated for both.
I cannot test this build on linux.
=============== Diff against CMakeVMMakerSqueak-tty.21 ===============
Item was changed: SystemOrganization addCategory: #CMakeVMMakerSqueak! SystemOrganization addCategory: #'CMakeVMMakerSqueak-Tests'! SystemOrganization addCategory: #'CMakeVMMakerSqueak-Unix'! SystemOrganization addCategory: #'CMakeVMMakerSqueak-Android'! SystemOrganization addCategory: #'CMakeVMMakerSqueak-SunOS'! SystemOrganization addCategory: #'CMakeVMMakerSqueak-FreeBSD'! SystemOrganization addCategory: #'CMakeVMMakerSqueak-Builder'! SystemOrganization addCategory: #'CMakeVMMakerSqueak-MacOS'! SystemOrganization addCategory: #'CMakeVMMakerSqueak-IOS'! SystemOrganization addCategory: #'CMakeVMMakerSqueak-Windows'! + SystemOrganization addCategory: #'CMakeVMMakerSqueak-Libs'!
Item was added: + SqueakCMThirdpartyLibrary subclass: #SqueakCMFreetype2 + instanceVariableNames: '' + classVariableNames: '' + poolDictionaries: '' + category: 'CMakeVMMakerSqueak-Libs'! + + !SqueakCMFreetype2 commentStamp: '<historical>' prior: 0! + This is a configuration for building freetype2 library!
Item was added: + ----- Method: SqueakCMFreetype2 class>>canonicalName (in category 'accessing') ----- + canonicalName + ^ 'freetype2'!
Item was added: + ----- Method: SqueakCMFreetype2>>archiveMD5Sum (in category 'package properties') ----- + archiveMD5Sum + + ^ 'c15f6dc8ed190d67b89ae09aaf7896b4'!
Item was added: + ----- Method: SqueakCMFreetype2>>build (in category 'generating actions') ----- + build + + gen + puts: + ' + add_custom_command(OUTPUT "${ft2config}" + COMMAND ./configure --prefix=''${installPrefix}'' ', self configurationFlags, ' + WORKING_DIRECTORY "${libSourcesDir}" + DEPENDS "${unpackTarget}" + ) + add_custom_command(OUTPUT "${ft2libInstalled}" + COMMAND make + COMMAND make install + WORKING_DIRECTORY "${libSourcesDir}" + DEPENDS "${ft2config}" + COMMENT "Building ${libName}" + ) + ' + !
Item was added: + ----- Method: SqueakCMFreetype2>>copyArtefacts (in category 'generating actions') ----- + copyArtefacts + + self + copy: '${ft2libInstalled}' + to: '${externalModulesDir}/${libraryFileName}'.!
Item was added: + ----- Method: SqueakCMFreetype2>>defineAsTarget (in category 'generating actions') ----- + defineAsTarget + + gen puts: + + ' + add_custom_target(${libName} + DEPENDS ${externalModulesDir}/${libraryFileName} + ) + ' + + !
Item was added: + ----- Method: SqueakCMFreetype2>>defineGlobalTargets (in category 'generating actions') ----- + defineGlobalTargets + | var | + var := self canonicalName , '_LIB'. + vmGen set: var toString: self targetForLinking. + " + define a library as imported one + and make it depend from it's build target + " + vmGen + puts: + ('add_library("{1}" SHARED IMPORTED GLOBAL) + set_target_properties("{1}" PROPERTIES IMPORTED_LOCATION "{1}") + add_dependencies("{1}" "{2}") + ' format: { '${',var, '}' . self buildTarget } + ). + + vmGen cmd: 'add_dependencies' params: + vmGen moduleName , ' ' , self buildTarget!
Item was added: + ----- Method: SqueakCMFreetype2>>downloadURL (in category 'package properties') ----- + downloadURL + ^ 'http://ftp.igh.cnrs.fr/pub/nongnu/freetype/freetype-2.4.9.tar.gz' + !
Item was added: + ----- Method: SqueakCMFreetype2>>includeDir (in category 'accessing') ----- + includeDir + "see setVariables" + + " `<prefix>/include/freetype2' must be in your current inclusion path " + + + ^ '"${thirdpartyDir}/out/include" "${thirdpartyDir}/out/include/freetype2"'!
Item was added: + ----- Method: SqueakCMFreetype2>>libraryFileName (in category 'package properties') ----- + libraryFileName + ^ 'libfreetype.6.dylib'!
Item was added: + ----- Method: SqueakCMFreetype2>>setVariables (in category 'generating actions') ----- + setVariables + super setVariables. + + "add include path" + gen + set: #freetype2_includeDir toString: '${installPrefix}/include'; + set: #libraryFileName to: self libraryFileName; + set: #freetype2_location toString: '${externalModulesDir}/${libraryFileName}'; + set: #ft2config toString: '${libSourcesDir}/builds/unix/config.status'; + set: #ft2libInstalled toString: '${installPrefix}/lib/${libraryFileName}'!
Item was added: + ----- Method: SqueakCMFreetype2>>unpackedDirName (in category 'package properties') ----- + unpackedDirName + + ^ 'freetype-2.4.9'!
Item was added: + SqueakCMThirdpartyLibrary subclass: #SqueakCMOpenSSL + instanceVariableNames: '' + classVariableNames: '' + poolDictionaries: '' + category: 'CMakeVMMakerSqueak-Libs'!
Item was added: + ----- Method: SqueakCMOpenSSL class>>canonicalName (in category 'as yet unclassified') ----- + canonicalName + ^ 'openssl'!
Item was added: + CMThirdpartyLibrary subclass: #SqueakCMThirdpartyLibrary + instanceVariableNames: '' + classVariableNames: '' + poolDictionaries: '' + category: 'CMakeVMMakerSqueak-Libs'! + + !SqueakCMThirdpartyLibrary commentStamp: 'tty 5/26/2014 12:51' prior: 0! + A SqueakCMThirdpartyLibrary is the root library for copies of classes in CMakeVMMaker-Libs. + I replace only the Squeak incompatible methods of my parent + + !
Item was added: + ----- Method: SqueakCMThirdpartyLibrary class>>canonicalName (in category 'as yet unclassified') ----- + canonicalName + "answer the library canonical name, like + 'freetype2' + or 'cairo' + etc. + + Note , this method is used to find the corresponding library + from all subclasses of CMThirdpartyLibrary + " + ^ self subclassResponsibility!
Item was added: + ----- Method: SqueakCMThirdpartyLibrary class>>named:config: (in category 'as yet unclassified') ----- + named: aName config: aCPlatformConfig + + ^ (self allSubclasses detect: [:cls | + cls canonicalName = aName and: [ cls supports: aCPlatformConfig ] ]) + new!
Item was added: + ----- Method: SqueakCMThirdpartyLibrary class>>platformName (in category 'as yet unclassified') ----- + platformName + ^nil!
Item was added: + ----- Method: SqueakCMThirdpartyLibrary class>>supports: (in category 'as yet unclassified') ----- + supports: aConfig + "default implementation" + ^ self platformName = aConfig platformName !
Item was added: + ----- Method: SqueakCMThirdpartyLibrary>>generateFor: (in category 'as yet unclassified') ----- + generateFor: aVMGenerator + + | libDir stream contents | + + vmGen := aVMGenerator. + + gen := CMakeGenerator new + output: (String new writeStream). + + libDir := (aVMGenerator thirdpartyDir / self canonicalName) assureExistence. + + stream := String new writeStream. + + self generate. + + stream nextPutAll: (vmGen config fixLineEndsOf: gen output contents). + + contents := stream contents. + + (self isFile: (libDir / gen outputFileName) fullName hasContents: contents) ifFalse: [ + "contents changed, update the file. Because fucking cmake will force rebuild everything if we change its modification date + without changing its contents" + (FileStream forceNewFileNamed: (libDir / gen outputFileName) pathName) nextPutAll: contents; close. + ]. + + + vmGen addSubdirectory: vmGen thirdpartyDirName , '/' , self canonicalName. + self defineGlobalTargets. + !
Item was added: + SqueakCMFreetype2 subclass: #SqueakCMWin32Freetype2 + instanceVariableNames: '' + classVariableNames: '' + poolDictionaries: '' + category: 'CMakeVMMakerSqueak-Libs'! + + !SqueakCMWin32Freetype2 commentStamp: '<historical>' prior: 0! + Some overrides to make freetype build on windows: + + Two artifacts to copy: + + libfreetype.dll.a + libfreetype-6.dll + + the first one is used at link time with FTPlugin to + designate the exported symbols of .dll as well as .dll file name. + + The second one is ready to use library produced by freetype makefiles. + + We pass + + -march=i686 + + instead of + + -arch i386 + + to freetype configure, because MSYS GCC on windows don't understands the -arch option. + !
Item was added: + ----- Method: SqueakCMWin32Freetype2 class>>platformName (in category 'as yet unclassified') ----- + platformName + ^'win32'!
Item was added: + ----- Method: SqueakCMWin32Freetype2>>copyArtefacts (in category 'generating actions') ----- + copyArtefacts + + gen puts: + 'add_custom_command( + OUTPUT "${externalModulesDir}/${libraryFileName}" + COMMAND cp "${ft2libInstalled}" "${externalModulesDir}" + COMMAND cp "${ft2binInstalled}" "${externalModulesDir}" + DEPENDS "${ft2libInstalled}" + )'!
Item was added: + ----- Method: SqueakCMWin32Freetype2>>defaultConfigurationFlags (in category 'settings') ----- + defaultConfigurationFlags + ^#( + 'CFLAGS=''-march=i686''' + 'LDFLAGS=''-march=i686''')!
Item was added: + ----- Method: SqueakCMWin32Freetype2>>defineGlobalTargets (in category 'generating actions') ----- + defineGlobalTargets + | var | + var := self canonicalName , '_LIB'. + vmGen set: var toString: self targetForLinking. + " + define a library as imported one + and make it depend from it's build target + " + vmGen + puts: + ('add_library("{1}" STATIC IMPORTED GLOBAL) + set_target_properties("{1}" PROPERTIES IMPORTED_LOCATION "{1}") + add_dependencies("{1}" "{2}") + ' format: { '${',var, '}' . self buildTarget } + ). + + vmGen cmd: 'add_dependencies' params: + vmGen moduleName , ' ' , self buildTarget!
Item was added: + ----- Method: SqueakCMWin32Freetype2>>libraryFileName (in category 'package properties') ----- + libraryFileName + ^ 'libfreetype.dll.a'!
Item was added: + ----- Method: SqueakCMWin32Freetype2>>setVariables (in category 'generating actions') ----- + setVariables + super setVariables. + + "add include path" + gen + set: #freetype2_includeDir toString: '${installPrefix}/include'; + set: #libraryFileName to: self libraryFileName; + set: #freetype2_location toString: '${externalModulesDir}/${libraryFileName}'; + set: #ft2config toString: '${libSourcesDir}/builds/unix/config.status'; + set: #ft2libInstalled toString: '${installPrefix}/lib/${libraryFileName}'; + set: #ft2binInstalled toString: '${installPrefix}/bin/libfreetype-6.dll'. + !
Item was added: + SqueakCMOpenSSL subclass: #SqueakCMWin32OpenSSL + instanceVariableNames: '' + classVariableNames: '' + poolDictionaries: '' + category: 'CMakeVMMakerSqueak-Libs'!
Item was added: + ----- Method: SqueakCMWin32OpenSSL class>>platformName (in category 'as yet unclassified') ----- + platformName + ^'win32'!
Item was added: + ----- Method: SqueakCMWin32OpenSSL>>archiveMD5Sum (in category 'as yet unclassified') ----- + archiveMD5Sum + "answer the MD5 checksum (in string) for downloaded library archive + (to check that downloaded file is not corrupt). + + You can take this sum by issuing: + md5 filename + from command line + " + ^ 'ae412727c8c15b67880aef7bd2999b2e'!
Item was added: + ----- Method: SqueakCMWin32OpenSSL>>build (in category 'as yet unclassified') ----- + build + + gen + puts: + ' + add_custom_command(OUTPUT "${libSourcesDir}/Makefile" + COMMAND ./config shared --prefix=''${installPrefix}'' + WORKING_DIRECTORY "${libSourcesDir}" + DEPENDS "${unpackTarget}" + ) + + add_custom_command(OUTPUT "${installPrefix}/bin/libeay32.dll" "${installPrefix}/bin/ssleay32.dll" + COMMAND make + COMMAND make install + WORKING_DIRECTORY "${libSourcesDir}" + DEPENDS "${libSourcesDir}/Makefile" + COMMENT "Building ${libName}" + ) + ' + !
Item was added: + ----- Method: SqueakCMWin32OpenSSL>>configurationFlags (in category 'as yet unclassified') ----- + configurationFlags + ^ 'shared'!
Item was added: + ----- Method: SqueakCMWin32OpenSSL>>copyArtefacts (in category 'as yet unclassified') ----- + copyArtefacts + + self copy: '${installPrefix}/bin/libeay32.dll' to: '${externalModulesDir}/libeay32.dll'. + self copy: '${installPrefix}/bin/ssleay32.dll' to: '${externalModulesDir}/ssleay32.dll'. + " self copy: '${installPrefix}/lib/libssl.dll.a' to: '${externalModulesDir}/libssl.dll.a'. + self copy: '${installPrefix}/lib/libcrypto.dll.a' to: '${externalModulesDir}/libcrypto.dll.a'. + " + " + 'libcrypto.dll.a' 'libssl.dll.a'. + "!
Item was added: + ----- Method: SqueakCMWin32OpenSSL>>defineAsTarget (in category 'as yet unclassified') ----- + defineAsTarget + + gen puts: + 'add_custom_target(', self buildTarget , ' + DEPENDS + "${externalModulesDir}/libeay32.dll" + "${externalModulesDir}/ssleay32.dll" + )' + + "${externalModulesDir}/${libraryFileName}" + !
Item was added: + ----- Method: SqueakCMWin32OpenSSL>>defineGlobalTargets (in category 'as yet unclassified') ----- + defineGlobalTargets + + !
Item was added: + ----- Method: SqueakCMWin32OpenSSL>>downloadURL (in category 'as yet unclassified') ----- + downloadURL + ^'http://www.openssl.org/source/openssl-1.0.1c.tar.gz%27!
Item was added: + ----- Method: SqueakCMWin32OpenSSL>>includeDir (in category 'as yet unclassified') ----- + includeDir + + ^ '"${thirdpartyDir}/out/include"'!
Item was added: + ----- Method: SqueakCMWin32OpenSSL>>libraryFileName (in category 'as yet unclassified') ----- + libraryFileName + ^ 'libssl.dll.a'!
Item was added: + ----- Method: SqueakCMWin32OpenSSL>>setVariables (in category 'as yet unclassified') ----- + setVariables + super setVariables. + + gen + set: #libraryFileName to: self libraryFileName; + set: #libInstalled to: '${installPrefix}/lib/${libraryFileName}'!
Item was added: + ----- Method: SqueakCMWin32OpenSSL>>unpackedDirName (in category 'as yet unclassified') ----- + unpackedDirName + ^ 'openssl-1.0.1c'!
Item was added: + ----- Method: SqueakCogFamilyWindowsConfig>>addThirdpartyLibrary: (in category 'as yet unclassified') ----- + addThirdpartyLibrary: libName + | libs lib | + + libs := self thirdpartyLibs. + + lib := libs + detect: [:each | each canonicalName = libName ] + ifNone: [ nil ]. + + lib ifNil: [ + lib := SqueakCMThirdpartyLibrary named: libName config: self. + "add dependencies first, so thirpartyLibs collection will be naturally dependency sorted" + lib dependencies do: [:dep | self addThirdpartyLibrary: dep ]. + libs add: lib ]. + + ^ lib!
vm-dev@lists.squeakfoundation.org