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