Project.st
author Claus Gittinger <cg@exept.de>
Tue, 14 Nov 1995 20:02:34 +0100
changeset 544 d78012b20769
parent 530 07d0bce293c9
child 617 427245e28240
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
89
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
     1
"
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
     2
 COPYRIGHT (c) 1993 by Claus Gittinger
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
     3
	      All Rights Reserved
89
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
     4
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
     5
 This software is furnished under a license and may be used
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
     6
 only in accordance with the terms of that license and with the
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
     8
 be provided or otherwise made available to, or used by, any
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
     9
 other person.  No title to or ownership of the software is
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    10
 hereby transferred.
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    11
"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    12
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    13
'From Smalltalk/X, Version:2.10.4 on 5-feb-1995 at 11:58:37 pm'!
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    14
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    15
Object subclass:#Project
315
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
    16
	 instanceVariableNames:'name changeSet views directoryName properties packageName'
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
    17
	 classVariableNames:'CurrentProject SystemProject NextSequential'
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
    18
	 poolDictionaries:''
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
    19
	 category:'System-Support'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    20
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    21
89
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    22
!Project class methodsFor:'documentation'!
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    23
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    24
copyright
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    25
"
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    26
 COPYRIGHT (c) 1993 by Claus Gittinger
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
    27
	      All Rights Reserved
89
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    28
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    29
 This software is furnished under a license and may be used
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    30
 only in accordance with the terms of that license and with the
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    31
 inclusion of the above copyright notice.   This software may not
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    32
 be provided or otherwise made available to, or used by, any
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    33
 other person.  No title to or ownership of the software is
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    34
 hereby transferred.
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    35
"
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    36
!
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    37
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    38
version
530
07d0bce293c9 uff - version methods changed to return stings
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
    39
    ^ '$Header: /cvs/stx/stx/libbasic/Project.st,v 1.28 1995-11-11 15:26:10 cg Exp $'
89
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    40
!
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    41
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    42
documentation
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    43
"
338
claus
parents: 336
diff changeset
    44
    this class is still under construction (especially the build features are unfinished).
235
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
    45
    Currently, all it does is keep track of per-project views 
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
    46
    (to hide or show them), define the directory when filing-out,
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
    47
    and define packageName for new classes and methods.
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
    48
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
    49
    Future: 
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
    50
	- keep track of per-project changes
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
    51
	- allow speficiation of the type of the project (application, library, etc)
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
    52
	- allow building of whatever the target (as defined by the type) is
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
    53
	  (this will allow build of class libs and apps by clicking a button)
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
    54
	- allow removal of project specific classes, methods etc.
89
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    55
"
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    56
! !
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    57
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    58
!Project class methodsFor:'initialization'!
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    59
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    60
initialize
338
claus
parents: 336
diff changeset
    61
    SystemProject isNil ifTrue:[
315
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
    62
	NextSequential := 1.
338
claus
parents: 336
diff changeset
    63
	SystemProject := self new name:'default'.
claus
parents: 336
diff changeset
    64
	SystemProject packageName:'private'.
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    65
	"
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    66
	 the SystemProject does not keep a record if changes,
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    67
	 but instead depends on the changes file - recording anything there.
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    68
	"
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    69
	SystemProject changeSet:nil.
338
claus
parents: 336
diff changeset
    70
    ].
claus
parents: 336
diff changeset
    71
claus
parents: 336
diff changeset
    72
    CurrentProject := SystemProject.
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    73
315
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
    74
    "
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
    75
     Project initialize
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
    76
    "
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    77
! !
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    78
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    79
!Project class methodsFor:'instance creation'!
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    80
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    81
new
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    82
    ^ self basicNew initialize
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    83
! !
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    84
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    85
!Project class methodsFor:'accessing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    86
a27a279701f8 Initial revision
claus
parents:
diff changeset
    87
current
10
claus
parents: 2
diff changeset
    88
    "return the currently active project"
claus
parents: 2
diff changeset
    89
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    90
    ^ CurrentProject
a27a279701f8 Initial revision
claus
parents:
diff changeset
    91
362
claus
parents: 356
diff changeset
    92
    "
claus
parents: 356
diff changeset
    93
     Project current
claus
parents: 356
diff changeset
    94
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    95
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    96
a27a279701f8 Initial revision
claus
parents:
diff changeset
    97
current:aProject
10
claus
parents: 2
diff changeset
    98
    "set the currently active project"
claus
parents: 2
diff changeset
    99
315
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   100
    CurrentProject := aProject.
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   101
    self changed:#currentProject
334
claus
parents: 330
diff changeset
   102
!
claus
parents: 330
diff changeset
   103
336
claus
parents: 334
diff changeset
   104
defaultProject
claus
parents: 334
diff changeset
   105
    "return the SystemDefault project"
claus
parents: 334
diff changeset
   106
claus
parents: 334
diff changeset
   107
    ^ SystemProject.
claus
parents: 334
diff changeset
   108
!
claus
parents: 334
diff changeset
   109
334
claus
parents: 330
diff changeset
   110
setDefaultProject
claus
parents: 330
diff changeset
   111
    "set the currently active project to be the SystemDEfault project"
claus
parents: 330
diff changeset
   112
claus
parents: 330
diff changeset
   113
    self current:SystemProject.
362
claus
parents: 356
diff changeset
   114
!
claus
parents: 356
diff changeset
   115
claus
parents: 356
diff changeset
   116
currentPackageName
369
claus
parents: 362
diff changeset
   117
    CurrentProject notNil ifTrue:[
claus
parents: 362
diff changeset
   118
	^ CurrentProject packageName
claus
parents: 362
diff changeset
   119
    ].
claus
parents: 362
diff changeset
   120
    ^ 'no package' 
362
claus
parents: 356
diff changeset
   121
claus
parents: 356
diff changeset
   122
    "
claus
parents: 356
diff changeset
   123
     Project currentPackageName
claus
parents: 356
diff changeset
   124
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   125
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   126
149
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   127
!Project class methodsFor:'changes management'!
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   128
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   129
addMethodChange:aMethod in:aClass
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   130
    "add a change for a method to the current project"
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   131
235
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   132
    |p c|
149
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   133
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   134
    p := CurrentProject.
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   135
    (p notNil 
235
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   136
    and:[(c := p changeSet) notNil]) ifTrue:[
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   137
	c addMethodChange:aMethod in:aClass 
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   138
    ]
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   139
!
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   140
149
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   141
currentProjectDirectory
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   142
    "return the name of the directory to use for fileOut.
235
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   143
     The returned name already includes a file-separator at the end, 
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   144
     so the filename can be concatenated to it."
149
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   145
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   146
    |p dirName|
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   147
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   148
    p := CurrentProject.
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   149
    p notNil ifTrue:[
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   150
	dirName := p directory  
149
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   151
    ] ifFalse:[
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   152
	dirName := '.'
149
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   153
    ].
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   154
    ^ dirName , Filename separator asString
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   155
!
149
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   156
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   157
addMethodCategoryChange:aMethod category:newCategory in:aClass
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   158
    |p c|
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   159
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   160
    p := CurrentProject.
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   161
    (p notNil 
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   162
    and:[(c := p changeSet) notNil]) ifTrue:[
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   163
	c addMethodCategoryChange:aMethod category:newCategory in:aClass 
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   164
    ]
414
claus
parents: 384
diff changeset
   165
!
claus
parents: 384
diff changeset
   166
claus
parents: 384
diff changeset
   167
addMethodPrivacyChange:aMethod in:aClass
claus
parents: 384
diff changeset
   168
    |p c|
claus
parents: 384
diff changeset
   169
claus
parents: 384
diff changeset
   170
    p := CurrentProject.
claus
parents: 384
diff changeset
   171
    (p notNil 
claus
parents: 384
diff changeset
   172
    and:[(c := p changeSet) notNil]) ifTrue:[
claus
parents: 384
diff changeset
   173
	c addMethodPrivacyChange:aMethod in:aClass 
claus
parents: 384
diff changeset
   174
    ]
claus
parents: 384
diff changeset
   175
claus
parents: 384
diff changeset
   176
    "Modified: 27.8.1995 / 22:48:17 / claus"
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   177
! !
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   178
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   179
!Project methodsFor:'accessing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   180
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   181
packageName
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   182
    ^ packageName
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   183
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   184
a27a279701f8 Initial revision
claus
parents:
diff changeset
   185
changeSet
a27a279701f8 Initial revision
claus
parents:
diff changeset
   186
    ^ changeSet
a27a279701f8 Initial revision
claus
parents:
diff changeset
   187
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   188
a27a279701f8 Initial revision
claus
parents:
diff changeset
   189
name
a27a279701f8 Initial revision
claus
parents:
diff changeset
   190
    ^ name
a27a279701f8 Initial revision
claus
parents:
diff changeset
   191
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   192
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   193
views
330
claus
parents: 318
diff changeset
   194
    ^ views asArray
235
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   195
!
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   196
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   197
name:aString
315
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   198
    name := aString.
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   199
    self == CurrentProject ifTrue:[
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   200
	Project changed:#name
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   201
    ]
2
claus
parents: 1
diff changeset
   202
!
claus
parents: 1
diff changeset
   203
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   204
views:aSetOfViews
330
claus
parents: 318
diff changeset
   205
    views := WeakIdentitySet withAll:aSetOfViews
73
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   206
!
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   207
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   208
changeSet:aChangeSet
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   209
    changeSet := aChangeSet
73
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   210
!
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   211
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   212
packageName:aStringOrSymbol
315
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   213
    packageName := aStringOrSymbol asSymbol.
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   214
    self == CurrentProject ifTrue:[
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   215
	Project changed:#package
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   216
    ]
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   217
!
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   218
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   219
directory
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   220
    directoryName isNil ifTrue:[^ '.'].
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   221
    ^ directoryName
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   222
!
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   223
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   224
directory:aDirectoryName
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   225
    directoryName := aDirectoryName.
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   226
    self == CurrentProject ifTrue:[
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   227
	Project changed:#directory 
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   228
    ]
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   229
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   230
356
claus
parents: 338
diff changeset
   231
!Project methodsFor:'queries'!
claus
parents: 338
diff changeset
   232
claus
parents: 338
diff changeset
   233
classes
claus
parents: 338
diff changeset
   234
    "return a collection of classes belonging to that project"
claus
parents: 338
diff changeset
   235
claus
parents: 338
diff changeset
   236
    |classes|
claus
parents: 338
diff changeset
   237
claus
parents: 338
diff changeset
   238
    properties notNil ifTrue:[classes := properties at:#classes ifAbsent:nil].
claus
parents: 338
diff changeset
   239
    classes isNil ifTrue:[
claus
parents: 338
diff changeset
   240
	classes := OrderedCollection new.
claus
parents: 338
diff changeset
   241
	Smalltalk allClassesDo:[:aClass | aClass package = packageName ifTrue:[classes add:aClass]].
claus
parents: 338
diff changeset
   242
	classes isEmpty ifTrue:[^ nil].
claus
parents: 338
diff changeset
   243
    ].
claus
parents: 338
diff changeset
   244
    ^ classes
claus
parents: 338
diff changeset
   245
claus
parents: 338
diff changeset
   246
!
claus
parents: 338
diff changeset
   247
claus
parents: 338
diff changeset
   248
individualMethods
claus
parents: 338
diff changeset
   249
    "return a collection of individual methods belonging to that project,
claus
parents: 338
diff changeset
   250
     only methods are returned which are not contained in the
claus
parents: 338
diff changeset
   251
     projects class set."
claus
parents: 338
diff changeset
   252
claus
parents: 338
diff changeset
   253
    |classes methods|
claus
parents: 338
diff changeset
   254
375
claus
parents: 370
diff changeset
   255
    classes := self classes.
claus
parents: 370
diff changeset
   256
    classes notNil ifTrue:[
claus
parents: 370
diff changeset
   257
	classes := classes asIdentitySet.
claus
parents: 370
diff changeset
   258
    ] ifFalse:[
claus
parents: 370
diff changeset
   259
	classes := #()
claus
parents: 370
diff changeset
   260
    ].
356
claus
parents: 338
diff changeset
   261
claus
parents: 338
diff changeset
   262
    methods := IdentitySet new.
claus
parents: 338
diff changeset
   263
    Smalltalk allBehaviorsDo:[:cls |
claus
parents: 338
diff changeset
   264
	(classes isNil or:[(classes includes:cls) not]) ifTrue:[
claus
parents: 338
diff changeset
   265
	    cls methodArray do:[:m |
claus
parents: 338
diff changeset
   266
		m package = packageName ifTrue:[
claus
parents: 338
diff changeset
   267
		    methods add:m
claus
parents: 338
diff changeset
   268
		]
claus
parents: 338
diff changeset
   269
	    ].
claus
parents: 338
diff changeset
   270
	    cls class methodArray do:[:m |
claus
parents: 338
diff changeset
   271
		m package = packageName ifTrue:[
claus
parents: 338
diff changeset
   272
		    methods add:m
claus
parents: 338
diff changeset
   273
		]
claus
parents: 338
diff changeset
   274
	    ].
claus
parents: 338
diff changeset
   275
	]
claus
parents: 338
diff changeset
   276
    ].
claus
parents: 338
diff changeset
   277
    ^ methods asArray
claus
parents: 338
diff changeset
   278
claus
parents: 338
diff changeset
   279
    "
claus
parents: 338
diff changeset
   280
     Project current classes
claus
parents: 338
diff changeset
   281
     Project current individualMethods
claus
parents: 338
diff changeset
   282
    "
claus
parents: 338
diff changeset
   283
! !
claus
parents: 338
diff changeset
   284
10
claus
parents: 2
diff changeset
   285
!Project methodsFor:'views'!
claus
parents: 2
diff changeset
   286
claus
parents: 2
diff changeset
   287
addView:aView
235
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   288
    views notNil ifTrue:[views add:aView]
10
claus
parents: 2
diff changeset
   289
!
claus
parents: 2
diff changeset
   290
claus
parents: 2
diff changeset
   291
removeView:aView
235
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   292
    views notNil ifTrue:[views remove:aView ifAbsent:[]]
10
claus
parents: 2
diff changeset
   293
!
claus
parents: 2
diff changeset
   294
claus
parents: 2
diff changeset
   295
showViews
235
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   296
    views notNil ifTrue:[
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   297
	views do:[:aView |
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   298
	    aView notNil ifTrue:[aView rerealize]
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   299
	]
10
claus
parents: 2
diff changeset
   300
    ].
claus
parents: 2
diff changeset
   301
!
claus
parents: 2
diff changeset
   302
claus
parents: 2
diff changeset
   303
hideViews
235
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   304
    "hide all views of this project"
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   305
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   306
    views notNil ifTrue:[
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   307
	views do:[:aView |
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   308
	    aView notNil ifTrue:[aView unrealize]
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   309
	]
10
claus
parents: 2
diff changeset
   310
    ].
338
claus
parents: 336
diff changeset
   311
!
claus
parents: 336
diff changeset
   312
claus
parents: 336
diff changeset
   313
destroyViews
claus
parents: 336
diff changeset
   314
    "destroy all views of this project"
claus
parents: 336
diff changeset
   315
claus
parents: 336
diff changeset
   316
    views notNil ifTrue:[
claus
parents: 336
diff changeset
   317
	views do:[:aView |
claus
parents: 336
diff changeset
   318
	    aView notNil ifTrue:[aView destroy]
claus
parents: 336
diff changeset
   319
	]
claus
parents: 336
diff changeset
   320
    ].
10
claus
parents: 2
diff changeset
   321
! !
claus
parents: 2
diff changeset
   322
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   323
!Project methodsFor:'initialization'!
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   324
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   325
initialize
338
claus
parents: 336
diff changeset
   326
    |numString|
claus
parents: 336
diff changeset
   327
330
claus
parents: 318
diff changeset
   328
    views := WeakIdentitySet new.
338
claus
parents: 336
diff changeset
   329
    numString := NextSequential printString.
315
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   330
    NextSequential := NextSequential + 1.
338
claus
parents: 336
diff changeset
   331
claus
parents: 336
diff changeset
   332
    name := 'new Project-' , numString.
claus
parents: 336
diff changeset
   333
    packageName := 'private-' , numString.
356
claus
parents: 338
diff changeset
   334
    "/ changeSet := ChangeSet new.
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   335
    self directory:'.'
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   336
! !
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   337
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   338
!Project methodsFor:'properties'!
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   339
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   340
properties
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   341
    ^ properties
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   342
!
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   343
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   344
properties:p
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   345
    properties := p
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   346
!
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   347
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   348
type
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   349
    "return the type of project"
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   350
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   351
    ^ properties at:#type ifAbsent:[#application]
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   352
!
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   353
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   354
type:aSymbol
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   355
    "set the projects type"
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   356
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   357
    (#(application library smalltalk) includes:aSymbol) ifFalse:[
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   358
	self warn:'invalid project type'.
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   359
	^ self
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   360
    ].
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   361
    properties at:#type put:aSymbol
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   362
! !
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   363
2
claus
parents: 1
diff changeset
   364
!Project methodsFor:'maintenance'!
claus
parents: 1
diff changeset
   365
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   366
buildProject
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   367
    OperatingSystem executeCommand:('cd ' , self directory , ' ; make')
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   368
!
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   369
2
claus
parents: 1
diff changeset
   370
createProjectFiles
claus
parents: 1
diff changeset
   371
    "actually, creates all files to do a make in the project directory"
claus
parents: 1
diff changeset
   372
356
claus
parents: 338
diff changeset
   373
    directoryName asFilename exists ifFalse:[
claus
parents: 338
diff changeset
   374
	(self confirm:'create new projectDirectory: ' , directoryName) 
claus
parents: 338
diff changeset
   375
	    ifFalse:[^ self].
claus
parents: 338
diff changeset
   376
	OperatingSystem recursiveCreateDirectory:directoryName.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   377
    ].
2
claus
parents: 1
diff changeset
   378
    self createMakefile.
claus
parents: 1
diff changeset
   379
    self createSourcefiles.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   380
    self createProtoMakefile.
2
claus
parents: 1
diff changeset
   381
!
claus
parents: 1
diff changeset
   382
362
claus
parents: 356
diff changeset
   383
findTopFrom:directoryName
claus
parents: 356
diff changeset
   384
    "returns the relative path from directoryName to the TOP
claus
parents: 356
diff changeset
   385
     directory."
claus
parents: 356
diff changeset
   386
claus
parents: 356
diff changeset
   387
    |topName relParent foundTop|
claus
parents: 356
diff changeset
   388
claus
parents: 356
diff changeset
   389
    "/ find TOP
claus
parents: 356
diff changeset
   390
    relParent := '..'.
claus
parents: 356
diff changeset
   391
    foundTop := false.
claus
parents: 356
diff changeset
   392
    [foundTop] whileFalse:[
claus
parents: 356
diff changeset
   393
	topName := directoryName , '/' , relParent.
claus
parents: 356
diff changeset
   394
	topName asFilename pathName = '/' ifTrue:[
claus
parents: 356
diff changeset
   395
	    self warn:'could not find TOP; assume absoulte path to TOP'.
claus
parents: 356
diff changeset
   396
	    topName := '/usr/local/lib/smalltalk'.
claus
parents: 356
diff changeset
   397
	    foundTop := true.
claus
parents: 356
diff changeset
   398
	] ifFalse:[
claus
parents: 356
diff changeset
   399
	    (topName , '/configurations') asFilename exists ifTrue:[
claus
parents: 356
diff changeset
   400
		(topName , '/include') asFilename exists ifTrue:[
claus
parents: 356
diff changeset
   401
		    foundTop := true.
claus
parents: 356
diff changeset
   402
		    topName := relParent.
claus
parents: 356
diff changeset
   403
		]
claus
parents: 356
diff changeset
   404
	    ].
claus
parents: 356
diff changeset
   405
	    foundTop ifFalse:[
claus
parents: 356
diff changeset
   406
		relParent := relParent , '/..'.
claus
parents: 356
diff changeset
   407
	    ]        
claus
parents: 356
diff changeset
   408
	]
claus
parents: 356
diff changeset
   409
    ].
claus
parents: 356
diff changeset
   410
    ^ topName
claus
parents: 356
diff changeset
   411
!
claus
parents: 356
diff changeset
   412
2
claus
parents: 1
diff changeset
   413
createSourcefiles
235
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   414
    "creates all Smalltalk-source files in the project directory"
2
claus
parents: 1
diff changeset
   415
356
claus
parents: 338
diff changeset
   416
    |classes methods methodClasses dir stream|
2
claus
parents: 1
diff changeset
   417
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   418
    dir := FileDirectory directoryNamed:self directory.
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   419
    Transcript showCr:'creating sources in ' , dir pathName , ' ...'; endEntry.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   420
235
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   421
    classes := self classes.
362
claus
parents: 356
diff changeset
   422
    classes isNil ifTrue:[
claus
parents: 356
diff changeset
   423
	self warn:'no classes in current project'
claus
parents: 356
diff changeset
   424
    ].
claus
parents: 356
diff changeset
   425
235
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   426
    classes notNil ifTrue:[
315
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   427
	classes do:[:aClass |
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   428
	    aClass isLoaded ifFalse:[
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   429
		aClass autoload.
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   430
	    ].
362
claus
parents: 356
diff changeset
   431
	].
claus
parents: 356
diff changeset
   432
	classes := classes topologicalSort:[:a :b | a isSubclassOf:b].
claus
parents: 356
diff changeset
   433
claus
parents: 356
diff changeset
   434
	classes do:[:aClass |
claus
parents: 356
diff changeset
   435
	    Transcript show:' ... '; showCr:aClass name, '.st'; endEntry.
315
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   436
	    aClass fileOutIn:dir
7683685383d6 *** empty log message ***
claus
parents: 236
diff changeset
   437
	]
2
claus
parents: 1
diff changeset
   438
    ].
356
claus
parents: 338
diff changeset
   439
claus
parents: 338
diff changeset
   440
    methods := self individualMethods.
claus
parents: 338
diff changeset
   441
    methods notNil ifTrue:[
claus
parents: 338
diff changeset
   442
	methods := methods asIdentitySet.
claus
parents: 338
diff changeset
   443
	"
claus
parents: 338
diff changeset
   444
	 get classes ...
claus
parents: 338
diff changeset
   445
	"
claus
parents: 338
diff changeset
   446
	methodClasses := IdentitySet new.
claus
parents: 338
diff changeset
   447
	methods do:[:m | 
claus
parents: 338
diff changeset
   448
			|mCls|
claus
parents: 338
diff changeset
   449
claus
parents: 338
diff changeset
   450
			mCls := m who at:1.
claus
parents: 338
diff changeset
   451
			mCls isMeta ifTrue:[
claus
parents: 338
diff changeset
   452
			    mCls := mCls soleInstance.
claus
parents: 338
diff changeset
   453
			].
claus
parents: 338
diff changeset
   454
			methodClasses add:mCls].
claus
parents: 338
diff changeset
   455
	"
claus
parents: 338
diff changeset
   456
	 fileOut by class
claus
parents: 338
diff changeset
   457
	"
claus
parents: 338
diff changeset
   458
	methodClasses do:[:cls |
362
claus
parents: 356
diff changeset
   459
	    stream := (self directory asFilename construct:(cls name , '.chg')) writeStream.
356
claus
parents: 338
diff changeset
   460
362
claus
parents: 356
diff changeset
   461
	    Transcript show:' ... '; showCr:cls name, '.chg'; endEntry.
356
claus
parents: 338
diff changeset
   462
	    methods do:[:m |
claus
parents: 338
diff changeset
   463
		|mCls|
claus
parents: 338
diff changeset
   464
claus
parents: 338
diff changeset
   465
		mCls := m who at:1.
claus
parents: 338
diff changeset
   466
		(mCls == cls or:[mCls == cls class]) ifTrue:[
362
claus
parents: 356
diff changeset
   467
		    mCls fileOutMethod:m on:stream.
claus
parents: 356
diff changeset
   468
		].
claus
parents: 356
diff changeset
   469
		stream cr.
356
claus
parents: 338
diff changeset
   470
	    ].
claus
parents: 338
diff changeset
   471
	    stream close.
claus
parents: 338
diff changeset
   472
	].
claus
parents: 338
diff changeset
   473
    ].
2
claus
parents: 1
diff changeset
   474
!
claus
parents: 1
diff changeset
   475
claus
parents: 1
diff changeset
   476
createMakefile
claus
parents: 1
diff changeset
   477
    "creates an initial makefile, which will recreate a correct
claus
parents: 1
diff changeset
   478
     Makefile, then compile all"
claus
parents: 1
diff changeset
   479
362
claus
parents: 356
diff changeset
   480
    |d f out in topName|
2
claus
parents: 1
diff changeset
   481
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   482
    Transcript showCr:'creating Makefile'.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   483
356
claus
parents: 338
diff changeset
   484
    d := directoryName asFilename.
2
claus
parents: 1
diff changeset
   485
    f := d construct:'Makefile'.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   486
    f exists ifTrue:[
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   487
	f renameTo:(d construct:'Makefile.bak')
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   488
    ].
2
claus
parents: 1
diff changeset
   489
    out := f writeStream.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   490
    out isNil ifTrue:[
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   491
	self warn:'cannot create Makefile'.
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   492
	^ self
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   493
    ].
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   494
    in := Smalltalk systemFileStreamFor:'rules/stdHeader'.
2
claus
parents: 1
diff changeset
   495
    out nextPutAll:in contents asString.
claus
parents: 1
diff changeset
   496
    in close.
362
claus
parents: 356
diff changeset
   497
claus
parents: 356
diff changeset
   498
    topName := self findTopFrom:directoryName.
claus
parents: 356
diff changeset
   499
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   500
    out nextPutAll:'#TOP=/usr/local/lib/smalltalk'; cr.
362
claus
parents: 356
diff changeset
   501
    out nextPutAll:'TOP=' , topName; cr.
2
claus
parents: 1
diff changeset
   502
    out nextPutAll:'target:'; cr.
claus
parents: 1
diff changeset
   503
    out tab; nextPutAll:'touch Make.proto'; cr.
claus
parents: 1
diff changeset
   504
    out tab; nextPutAll:'$(MAKE) Makefile'; cr.
claus
parents: 1
diff changeset
   505
    out tab; nextPutAll:'make'; cr; cr.
claus
parents: 1
diff changeset
   506
362
claus
parents: 356
diff changeset
   507
    in := Smalltalk systemFileStreamFor:'configurations/COMMON/defines'.
claus
parents: 356
diff changeset
   508
    out nextPutAll:in contents asString.
claus
parents: 356
diff changeset
   509
    in close.
claus
parents: 356
diff changeset
   510
claus
parents: 356
diff changeset
   511
    in := Smalltalk systemFileStreamFor:'configurations/vendorConf'.
claus
parents: 356
diff changeset
   512
    out nextPutAll:in contents asString.
claus
parents: 356
diff changeset
   513
    in close.
claus
parents: 356
diff changeset
   514
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   515
    in := Smalltalk systemFileStreamFor:'configurations/myConf'.
2
claus
parents: 1
diff changeset
   516
    out nextPutAll:in contents asString.
claus
parents: 1
diff changeset
   517
    in close.
362
claus
parents: 356
diff changeset
   518
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   519
    in := Smalltalk systemFileStreamFor:'rules/stdRules'.
2
claus
parents: 1
diff changeset
   520
    out nextPutAll:in contents asString.
claus
parents: 1
diff changeset
   521
    in close.
claus
parents: 1
diff changeset
   522
    out close
claus
parents: 1
diff changeset
   523
!
claus
parents: 1
diff changeset
   524
claus
parents: 1
diff changeset
   525
createProtoMakefile
claus
parents: 1
diff changeset
   526
    "creates a Make.proto file"
claus
parents: 1
diff changeset
   527
362
claus
parents: 356
diff changeset
   528
    |d f s type appName libName startUpClass startUpSelector
claus
parents: 356
diff changeset
   529
     topName classes|
2
claus
parents: 1
diff changeset
   530
362
claus
parents: 356
diff changeset
   531
    topName := self findTopFrom:directoryName.
2
claus
parents: 1
diff changeset
   532
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   533
    Transcript showCr:'creating Make.proto'.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   534
356
claus
parents: 338
diff changeset
   535
    d := directoryName asFilename.
2
claus
parents: 1
diff changeset
   536
    f := d construct:'Make.proto'.
claus
parents: 1
diff changeset
   537
    f exists ifTrue:[
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   538
	f renameTo:(d construct:'Make.proto.bak')
2
claus
parents: 1
diff changeset
   539
    ].
claus
parents: 1
diff changeset
   540
    s := f writeStream.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   541
    s isNil ifTrue:[
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   542
	self warn:'cannot create prototype Makefile'.
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   543
	^ self
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   544
    ].
2
claus
parents: 1
diff changeset
   545
    s nextPutAll:'#
362
claus
parents: 356
diff changeset
   546
# ' , Smalltalk timeStamp , '
claus
parents: 356
diff changeset
   547
#
235
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   548
# created by Smalltalks Project support
2
claus
parents: 1
diff changeset
   549
#
362
claus
parents: 356
diff changeset
   550
claus
parents: 356
diff changeset
   551
claus
parents: 356
diff changeset
   552
# the next line defines the path to the TOP directory,
claus
parents: 356
diff changeset
   553
# (where the directories "configurations" and "include" are found)
claus
parents: 356
diff changeset
   554
#
claus
parents: 356
diff changeset
   555
#TOP=/usr/local/lib/smalltalk
claus
parents: 356
diff changeset
   556
TOP=' , topName ,'
claus
parents: 356
diff changeset
   557
claus
parents: 356
diff changeset
   558
#
claus
parents: 356
diff changeset
   559
# add any subdirectories that have to be visited by make
claus
parents: 356
diff changeset
   560
#
claus
parents: 356
diff changeset
   561
SUBDIRS=
claus
parents: 356
diff changeset
   562
claus
parents: 356
diff changeset
   563
#
claus
parents: 356
diff changeset
   564
# do not change
claus
parents: 356
diff changeset
   565
#
2
claus
parents: 1
diff changeset
   566
SHELL=/bin/sh
claus
parents: 1
diff changeset
   567
362
claus
parents: 356
diff changeset
   568
'.
claus
parents: 356
diff changeset
   569
claus
parents: 356
diff changeset
   570
    s nextPutAll:'#
claus
parents: 356
diff changeset
   571
# set the stc options
claus
parents: 356
diff changeset
   572
#
claus
parents: 356
diff changeset
   573
STCOPT=$(DEFAULT_STCOPT)
claus
parents: 356
diff changeset
   574
# STCOPT=+optspace2
claus
parents: 356
diff changeset
   575
# STCOPT=+optspace2 -warnNonStandard
claus
parents: 356
diff changeset
   576
claus
parents: 356
diff changeset
   577
#
claus
parents: 356
diff changeset
   578
# and packageName option
claus
parents: 356
diff changeset
   579
#
claus
parents: 356
diff changeset
   580
STCLOCALOPT=''-Pprivate-classes-(libapp)''
2
claus
parents: 1
diff changeset
   581
claus
parents: 1
diff changeset
   582
'.
claus
parents: 1
diff changeset
   583
356
claus
parents: 338
diff changeset
   584
    type := #library.
claus
parents: 338
diff changeset
   585
    appName := 'app'.
claus
parents: 338
diff changeset
   586
    libName := 'lib'.
claus
parents: 338
diff changeset
   587
    startUpClass := 'Smalltalk'.
claus
parents: 338
diff changeset
   588
    startUpSelector := 'start'.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   589
356
claus
parents: 338
diff changeset
   590
    properties notNil ifTrue:[
claus
parents: 338
diff changeset
   591
	type := properties at:#projectType ifAbsent:type.
claus
parents: 338
diff changeset
   592
	appName := properties at:#applicationName ifAbsent:appName.
claus
parents: 338
diff changeset
   593
	startUpClass := properties at:#startupClass ifAbsent:startUpClass.
claus
parents: 338
diff changeset
   594
	startUpSelector := properties at:#startupSelector ifAbsent:startUpSelector.
claus
parents: 338
diff changeset
   595
    ].
claus
parents: 338
diff changeset
   596
362
claus
parents: 356
diff changeset
   597
    s nextPutAll:'#
claus
parents: 356
diff changeset
   598
# define the name of the library to create
claus
parents: 356
diff changeset
   599
#
claus
parents: 356
diff changeset
   600
'.
claus
parents: 356
diff changeset
   601
    s nextPutAll:'LIBNAME=lib' , appName; cr; cr.
claus
parents: 356
diff changeset
   602
claus
parents: 356
diff changeset
   603
    s nextPutAll:'#
claus
parents: 356
diff changeset
   604
# the target rule:
claus
parents: 356
diff changeset
   605
#
claus
parents: 356
diff changeset
   606
all::   abbrev.stc objs genClassList $(OBJTARGET)
claus
parents: 356
diff changeset
   607
claus
parents: 356
diff changeset
   608
'.
2
claus
parents: 1
diff changeset
   609
claus
parents: 1
diff changeset
   610
    type == #executable ifTrue:[
362
claus
parents: 356
diff changeset
   611
	s nextPutAll:'PROGS = ' , appName; cr.
claus
parents: 356
diff changeset
   612
	s nextPutAll:('STARTUP_CLASS=' , startUpClass); cr.
claus
parents: 356
diff changeset
   613
	s nextPutAll:'STARTUP_SELECTOR="' , startUpSelector; nextPutAll:'"'; cr.
2
claus
parents: 1
diff changeset
   614
    ].
claus
parents: 1
diff changeset
   615
362
claus
parents: 356
diff changeset
   616
    s nextPutAll:'#
claus
parents: 356
diff changeset
   617
# define the object files that are to be created
claus
parents: 356
diff changeset
   618
#
claus
parents: 356
diff changeset
   619
'.
2
claus
parents: 1
diff changeset
   620
    s nextPutAll:'OBJS='.
claus
parents: 1
diff changeset
   621
362
claus
parents: 356
diff changeset
   622
    (classes := self classes) notNil ifTrue:[
claus
parents: 356
diff changeset
   623
	classes do:[:aClass |
claus
parents: 356
diff changeset
   624
	    |abbrev|
claus
parents: 356
diff changeset
   625
claus
parents: 356
diff changeset
   626
	    s nextPutAll:' \'. s cr.
claus
parents: 356
diff changeset
   627
	    abbrev := Smalltalk fileNameForClass:aClass name.
claus
parents: 356
diff changeset
   628
	    s nextPutAll:'  '; nextPutAll:abbrev; nextPutAll:'.o'.
claus
parents: 356
diff changeset
   629
	].
2
claus
parents: 1
diff changeset
   630
    ].
claus
parents: 1
diff changeset
   631
    s cr; cr.
claus
parents: 1
diff changeset
   632
362
claus
parents: 356
diff changeset
   633
    s nextPutAll:'#
claus
parents: 356
diff changeset
   634
# dependencies:
claus
parents: 356
diff changeset
   635
#
claus
parents: 356
diff changeset
   636
I=$(TOP)/include
claus
parents: 356
diff changeset
   637
RT_STUFF=$(I)/Object.H $(I)/stc.h $(I)/stcIntern.h
claus
parents: 356
diff changeset
   638
claus
parents: 356
diff changeset
   639
'.
claus
parents: 356
diff changeset
   640
    classes notNil ifTrue:[
claus
parents: 356
diff changeset
   641
	classes do:[:aClass |
claus
parents: 356
diff changeset
   642
	    |abbrev|
claus
parents: 356
diff changeset
   643
claus
parents: 356
diff changeset
   644
	    abbrev := Smalltalk fileNameForClass:aClass name.
claus
parents: 356
diff changeset
   645
	    s nextPutAll:abbrev; nextPutAll:'.o: '.
claus
parents: 356
diff changeset
   646
	    s nextPutAll:abbrev; nextPutAll:'.st '.
claus
parents: 356
diff changeset
   647
	    aClass allSuperclassesDo:[:superClass|
claus
parents: 356
diff changeset
   648
		s nextPutAll:'$(I)/'.
claus
parents: 356
diff changeset
   649
		s nextPutAll:(Smalltalk fileNameForClass:superClass name) , '.H '.
claus
parents: 356
diff changeset
   650
	    ].
claus
parents: 356
diff changeset
   651
	    s nextPutAll:'$(RT_STUFF)';  cr.
claus
parents: 356
diff changeset
   652
	].
claus
parents: 356
diff changeset
   653
    ].
claus
parents: 356
diff changeset
   654
    s cr; cr.
2
claus
parents: 1
diff changeset
   655
claus
parents: 1
diff changeset
   656
    type == #executable ifTrue:[
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   657
	s nextPutAll:'all:: $(PROGS)'; cr.
2
claus
parents: 1
diff changeset
   658
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   659
	s nextPutAll:appName.
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   660
	s nextPutAll:':: main.o classList.o $(OBJS)'; cr.
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   661
	s tab;      nextPutAll:'$(LD) $(ST_LDFLAG) $(LDFLAGS) -o ';
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   662
		    nextPutAll:appName;
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   663
		    nextPutAll:' \'; cr.
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   664
	s tab; tab; nextPutAll:'$(CRT0) main.$(O) classList.$(O) $(OBJS) $(EXTRA_OBJ) $(LIBOBJS) \'; cr.
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   665
	s tab; tab; nextPutAll:'$(LIBRUNDIR)/hidata.o $(LIBRUN) \'; cr.
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   666
	s tab; tab; nextPutAll:'$(MATHLIB) $(EXTRALIBS) -lXext $(SYSLIBS) $(OTHERLIBS) $(CRTN)'; cr.
2
claus
parents: 1
diff changeset
   667
    ].
claus
parents: 1
diff changeset
   668
claus
parents: 1
diff changeset
   669
    s close
claus
parents: 1
diff changeset
   670
! !
claus
parents: 1
diff changeset
   671
claus
parents: 1
diff changeset
   672
!Project methodsFor:'specifications'!
claus
parents: 1
diff changeset
   673
claus
parents: 1
diff changeset
   674
readSpec
claus
parents: 1
diff changeset
   675
    |s chunk fileName|
claus
parents: 1
diff changeset
   676
claus
parents: 1
diff changeset
   677
    fileName := (properties at:#directoryName) asFilename construct:'.project'.
claus
parents: 1
diff changeset
   678
    s := fileName readStream.
claus
parents: 1
diff changeset
   679
    s isNil ifTrue:[^ self].
claus
parents: 1
diff changeset
   680
    [s atEnd] whileFalse:[
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   681
	chunk := s nextChunk.
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   682
	Compiler evaluate:chunk receiver:properties notifying:nil
2
claus
parents: 1
diff changeset
   683
    ].
claus
parents: 1
diff changeset
   684
    s close.
claus
parents: 1
diff changeset
   685
claus
parents: 1
diff changeset
   686
    "(Project new directory:'../projects/Clock') readSpec"
claus
parents: 1
diff changeset
   687
!
claus
parents: 1
diff changeset
   688
claus
parents: 1
diff changeset
   689
saveSpec
claus
parents: 1
diff changeset
   690
    |f d s|
claus
parents: 1
diff changeset
   691
claus
parents: 1
diff changeset
   692
    d := (properties at:#directoryName) asFilename.
claus
parents: 1
diff changeset
   693
    d exists ifFalse:[
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   694
	self error:'directory does not exist'.
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   695
	^ self
2
claus
parents: 1
diff changeset
   696
    ].
claus
parents: 1
diff changeset
   697
    f := d construct:'.project'.
claus
parents: 1
diff changeset
   698
    s := f writeStream.
claus
parents: 1
diff changeset
   699
    s isNil ifTrue:[^ self].
claus
parents: 1
diff changeset
   700
    properties associationsDo:[:aProp |
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   701
	(aProp == #directoryName) ifFalse:[
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   702
	    s nextChunkPut:('self at:' , aProp key storeString, 
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   703
			       ' put:' , aProp value storeString).
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   704
	    s cr
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   705
	]
2
claus
parents: 1
diff changeset
   706
    ].
claus
parents: 1
diff changeset
   707
    s close
claus
parents: 1
diff changeset
   708
claus
parents: 1
diff changeset
   709
    "((Project new directory:'../projects/Clock') readSpec
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   710
	 directory:'../projects/xxx') saveSpec"
2
claus
parents: 1
diff changeset
   711
! !
claus
parents: 1
diff changeset
   712
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   713
Project initialize!