cg@2596: "{ Package: 'stx:libtool2' }" cg@2596: cg@2596: Object subclass:#ProjectBuilder cg@2596: instanceVariableNames:'package projectDefinitionClass sourceCodeManager buildDirectory cg@2598: myWorkingDirectory mySTXTopDirectory myTopDirectory' cg@2596: classVariableNames:'PreviousBuildDirectory' cg@2596: poolDictionaries:'' cg@2596: category:'System-Support-Projects' cg@2596: ! cg@2596: cg@2596: cg@2633: !ProjectBuilder class methodsFor:'accessing'! cg@2633: cg@2633: previousBuildDirectory cg@2633: ^ PreviousBuildDirectory cg@2633: ! cg@2633: cg@2633: previousBuildDirectory:something cg@2633: PreviousBuildDirectory := something. cg@2633: ! ! cg@2633: cg@2596: !ProjectBuilder class methodsFor:'examples'! cg@2596: cg@2622: ! cg@2622: cg@2634: methodsFor:'examples' cg@2596: ! ! cg@2596: cg@2596: !ProjectBuilder methodsFor:'accessing'! cg@2596: cg@2634: x:clients/Demos/foxCalcApplication'. cg@2634: builder build. cg@2634: cg@2634: UserPreferences fileBrowserClass openOnDirectory:builder packageBuildDirectory. cg@2622: ! cg@2622: cg@2634: buildDirectory:something cg@2634: buildDirectory := something. cg@2634: ! cg@2634: cg@2634: uilder build. cg@2634: cg@2634: UserPreferences fileBrowserClass openOnDirectory:builder packageBuildDirectory. cg@2634: ! cg@2634: cg@2634: kageBuildDirectory. cg@2596: ! cg@2596: cg@2622: packageBuildDirectory cg@2622: "the directoray, where the deployable binary is created (xxxSetup.exe)" cg@2622: cg@2622: ^ buildDirectory / (package asPackageId module) / (package asPackageId directory) cg@2596: ! ! cg@2596: cg@2596: !ProjectBuilder methodsFor:'building'! cg@2596: cg@2634: (package asPackageId module) / (package asPackageId directory) cg@2611: ! cg@2611: cg@2611: buildWithOutputTo:stdOut errorTo:stdErr cg@2611: "/ intermediate - this will move into a commonly used utility class cg@2611: "/ (where all the project code support will be collected). cg@2611: cg@2596: |module directory| cg@2596: cg@2596: projectDefinitionClass := ProjectDefinition definitionClassForPackage:package. cg@2596: projectDefinitionClass isNil ifTrue:[ cg@2596: self error:('Missing ProjectDefinition class for "',package asString,'"') cg@2596: ]. cg@2596: cg@2596: "/ ensure that everything is loaded... cg@2596: projectDefinitionClass loadAsAutoloaded:false. cg@2596: projectDefinitionClass loadExtensions. cg@2596: projectDefinitionClass loadAllClassesAsAutoloaded:false. cg@2596: cg@2596: module := package module. cg@2596: directory := package directory. cg@2596: cg@2596: buildDirectory isNil ifTrue:[ cg@2634: buildDirectory := PreviousBuildDirectory ifNil:[ UserPreferences current buildDirectory ]. cg@2634: buildDirectory isNil ifTrue:[ cg@2634: buildDirectory := Filename tempDirectory construct:'stx_build'. cg@2634: ]. cg@2596: ]. cg@2596: buildDirectory := buildDirectory asFilename. cg@2596: cg@2596: "/ self validateBuildDirectoryIsPresent. cg@2596: cg@2596: PreviousBuildDirectory := buildDirectory. cg@2596: cg@2596: "/ UserPreferences current localBuild:true cg@2596: UserPreferences current localBuild ifFalse:[ cg@2596: SourceCodeManager notNil ifTrue:[ cg@2596: sourceCodeManager := SourceCodeManagerUtilities sourceCodeManagerFor:projectDefinitionClass. cg@2596: ] cg@2596: ]. cg@2596: sourceCodeManager := nil. cg@2596: cg@2598: myTopDirectory := cg@2596: Smalltalk packagePath cg@2596: detect:[:aPath | cg@2596: (aPath asFilename / 'stx' / 'include') exists cg@2596: and: [ (aPath asFilename / 'stx' / 'rules') exists ]] cg@2596: ifNone:nil. cg@2598: myTopDirectory isNil ifTrue:[ cg@2598: self error:('Cannot figure out my top directory (where stx/include and stx/rules are)') cg@2596: ]. cg@2598: myTopDirectory := myTopDirectory asFilename. cg@2598: mySTXTopDirectory := myTopDirectory / 'stx'. cg@2613: cg@2596: self setupBuildDirectory. cg@2628: self activityNotification:'Generating stc directory...'. cg@2599: self copySTCDirectoryForBuild. cg@2628: self activityNotification:'Generating source files...'. cg@2596: self generateSourceFiles. cg@2628: self activityNotification:'Generating dlls for linkage...'. cg@2600: self copyDLLsForLinkage. cg@2628: self activityNotification:'Generating support files for linkage...'. cg@2600: self copySupportFilesForLinkage. cg@2600: self copyStartupFilesFromSmalltalk. cg@2596: cg@2628: self activityNotification:'Executing make...'. cg@2611: self makeWithOutputTo:stdOut errorTo:stdErr. cg@2596: ! cg@2596: cg@2634: ...'. cg@2634: self copySupportFilesForLinkage. cg@2634: self copyStartupFilesFromSmalltalk. cg@2614: cg@2634: self activityNotification:'Executing make...'. cg@2634: self makeWithOutputTo:stdOut errorTo:stdErr. cg@2634: ! cg@2634: cg@2634: (packageTargetDir / dllRelativePath) directory recursiveMakeDirectory. cg@2614: (dllSourceDir / dllRelativePath) copyTo:(packageTargetDir / dllRelativePath). cg@2614: ] cg@2614: ]. cg@2600: ! cg@2600: cg@2634: tory:relativepath cg@2614: "/ need rules in stx cg@2614: ((Smalltalk projectDirectoryForPackage:'stx') asFilename construct:relativepath) cg@2614: recursiveCopyTo:(buildDirectory construct:'stx'). cg@2614: ! cg@2614: cg@2634: ification:'copying ',eachFile pathName,'...'. cg@2614: eachFile copyTo:(targetDir construct:eachFile baseName) cg@2614: ] cg@2614: ]. cg@2614: ]. cg@2614: self activityNotification:nil cg@2598: ! cg@2598: cg@2634: tory / module / directory / 'styles' ) exists ifTrue:[ cg@2614: (myTopDirectory / module / directory / 'styles' ) cg@2614: recursiveCopyTo:(buildDirectory / module / directory) cg@2614: ]. cg@2614: ! cg@2614: cg@2634: me ]) ifTrue:[ cg@2614: self activityNotification:'copying ',sourceFile pathName,'...'. cg@2614: sourceFile copyTo:targetFile cg@2614: ]. cg@2614: ]. cg@2614: self activityNotification:nil cg@2599: ! cg@2599: cg@2634: 'host.rc' 'h_win32.rc' cg@2614: ) do:[:fn | cg@2614: (myTopDirectory / 'stx' / 'projects/smalltalk' / fn) cg@2614: copyTo: (buildDirectory / 'stx' / 'projects/smalltalk' / fn) cg@2614: ] cg@2600: ! cg@2600: cg@2634: ry / 'stx' / dllRelativePath) directory recursiveMakeDirectory. cg@2614: (mySTXTopDirectory / dllRelativePath) copyTo:(buildDirectory / 'stx' / dllRelativePath). cg@2614: ] cg@2614: ]. cg@2600: ! cg@2600: cg@2634: ename / ((Smalltalk fileNameForClass:aClass),'.STH'). cg@2614: (file exists not cg@2614: or:[ (oldContents := file contents) ~= newContents ]) ifTrue:[ cg@2614: file contents: newContents. cg@2614: ]. cg@2596: ! cg@2596: cg@2634: self generateSourceFilesByCheckingOutUsing:sourceCodeManager cg@2614: ] ifFalse:[ cg@2614: "/ local build cg@2614: "/ fileout the project cg@2614: self generateSourceFilesByFilingOut cg@2614: ] cg@2596: ! cg@2596: cg@2634: :nil cg@2614: outputTo:Transcript cg@2614: errorTo:Transcript cg@2614: inDirectory:(buildDirectory construct:module) cg@2614: onError:[:status| self error:'cvs update failed']. cg@2614: self halt. cg@2596: ! cg@2596: cg@2634: or:cls in:packageTargetDir cg@2614: ]. cg@2614: ]. cg@2614: self copyResourcesForPackage:eachPackageToFileout. cg@2614: ]. cg@2614: cg@2614: "/ stx_libbasic2 preRequisitesForBuilding#(#'stx:libbasic') cg@2596: ! cg@2596: cg@2634: nil cg@2612: outputTo:stdOut cg@2612: errorTo:stdErr cg@2612: inDirectory:(buildDirectory / module / directory) cg@2612: onError:[:status| self error:'make failed']. cg@2612: ] cg@2611: ! cg@2611: cg@2634: (buildDirectory / 'stx') exists ifFalse:[ cg@2614: (buildDirectory / 'stx') makeDirectory. cg@2614: ]. cg@2596: cg@2614: self copyDirectoryForBuild:'include'. cg@2614: self copyDirectoryForBuild:'rules'. cg@2596: ! ! cg@2596: cg@2596: !ProjectBuilder class methodsFor:'documentation'! cg@2596: cg@2596: version_CVS cg@2596: ^ '$Header$' cg@2596: ! !