Project.st
author claus
Mon, 06 Feb 1995 01:22:02 +0100
changeset 236 fa6d1f330010
parent 235 d8e62525bfdf
child 315 7683685383d6
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
235
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
    16
	 instanceVariableNames:'name changeSet views properties packageName'
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
    17
	 classVariableNames:'CurrentProject SystemProject'
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
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    26
$Header: /cvs/stx/stx/libbasic/Project.st,v 1.13 1995-02-06 00:22:02 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
"
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    47
$Header: /cvs/stx/stx/libbasic/Project.st,v 1.13 1995-02-06 00:22:02 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
"
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    53
    this class is still under construction.
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
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    70
    CurrentProject isNil ifTrue:[
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    71
	CurrentProject := SystemProject := self new name:'System'.
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    72
	"
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    73
	 the SystemProject does not keep a record if changes,
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    74
	 but instead depends on the changes file - recording anything there.
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    75
	"
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    76
	SystemProject changeSet:nil.
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 initialize"
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    80
! !
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    81
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    82
!Project class methodsFor:'instance creation'!
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    83
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    84
new
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    85
    ^ self basicNew initialize
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    86
! !
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
    87
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    88
!Project class methodsFor:'accessing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    89
a27a279701f8 Initial revision
claus
parents:
diff changeset
    90
current
10
claus
parents: 2
diff changeset
    91
    "return the currently active project"
claus
parents: 2
diff changeset
    92
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    93
    ^ CurrentProject
a27a279701f8 Initial revision
claus
parents:
diff changeset
    94
a27a279701f8 Initial revision
claus
parents:
diff changeset
    95
    "Project current"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    96
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    97
a27a279701f8 Initial revision
claus
parents:
diff changeset
    98
current:aProject
10
claus
parents: 2
diff changeset
    99
    "set the currently active project"
claus
parents: 2
diff changeset
   100
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   101
    CurrentProject := aProject
a27a279701f8 Initial revision
claus
parents:
diff changeset
   102
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   103
149
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   104
!Project class methodsFor:'changes management'!
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   105
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   106
addMethodChange:aMethod in:aClass
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   107
    "add a change for a method to the current project"
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   108
235
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   109
    |p c|
149
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   110
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   111
    p := CurrentProject.
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   112
    (p notNil 
235
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   113
    and:[(c := p changeSet) notNil]) ifTrue:[
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   114
	c addMethodChange:aMethod in:aClass 
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   115
    ]
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   116
!
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   117
149
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   118
currentProjectDirectory
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   119
    "return the name of the directory to use for fileOut.
235
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   120
     The returned name already includes a file-separator at the end, 
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   121
     so the filename can be concatenated to it."
149
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   122
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   123
    |p dirName|
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   124
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   125
    p := CurrentProject.
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   126
    p notNil ifTrue:[
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   127
	dirName := p directory  
149
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   128
    ] ifFalse:[
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   129
	dirName := '.'
149
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   130
    ].
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   131
    ^ dirName , Filename separator asString
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   132
!
149
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   133
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   134
addMethodCategoryChange:aMethod category:newCategory in:aClass
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   135
    |p c|
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   136
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   137
    p := CurrentProject.
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   138
    (p notNil 
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   139
    and:[(c := p changeSet) notNil]) ifTrue:[
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   140
	c addMethodCategoryChange:aMethod category:newCategory in:aClass 
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   141
    ]
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   142
! !
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   143
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   144
!Project methodsFor:'accessing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   145
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   146
packageName
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   147
    ^ packageName
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   148
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   149
a27a279701f8 Initial revision
claus
parents:
diff changeset
   150
changeSet
a27a279701f8 Initial revision
claus
parents:
diff changeset
   151
    ^ changeSet
a27a279701f8 Initial revision
claus
parents:
diff changeset
   152
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   153
a27a279701f8 Initial revision
claus
parents:
diff changeset
   154
name
a27a279701f8 Initial revision
claus
parents:
diff changeset
   155
    ^ name
a27a279701f8 Initial revision
claus
parents:
diff changeset
   156
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   157
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   158
views
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   159
    ^ views
235
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   160
!
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   161
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   162
classes
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   163
    "return a collection of classes belonging to that project"
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   164
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   165
    |classes|
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   166
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   167
    classes := properties at:#classes ifAbsent:nil.
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   168
    classes isNil ifTrue:[
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   169
	classes := OrderedCollection new.
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   170
	Smalltalk allClassesDo:[:aClass | aClass package = packageName ifTrue:[classes add:aClass]].
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   171
	classes isEmpty ifTrue:[^ nil].
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   172
    ].
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   173
    ^ classes
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   174
73
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   175
!
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   176
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   177
name:aString
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   178
    name := aString
2
claus
parents: 1
diff changeset
   179
!
claus
parents: 1
diff changeset
   180
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   181
views:aSetOfViews
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   182
    views := aSetOfViews
73
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   183
!
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   184
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   185
changeSet:aChangeSet
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   186
    changeSet := aChangeSet
73
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   187
!
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   188
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   189
packageName:aStringOrSymbol
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   190
    packageName := aStringOrSymbol asSymbol
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   191
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   192
10
claus
parents: 2
diff changeset
   193
!Project methodsFor:'views'!
claus
parents: 2
diff changeset
   194
claus
parents: 2
diff changeset
   195
addView:aView
235
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   196
    views notNil ifTrue:[views add:aView]
10
claus
parents: 2
diff changeset
   197
!
claus
parents: 2
diff changeset
   198
claus
parents: 2
diff changeset
   199
removeView:aView
235
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   200
    views notNil ifTrue:[views remove:aView ifAbsent:[]]
10
claus
parents: 2
diff changeset
   201
!
claus
parents: 2
diff changeset
   202
claus
parents: 2
diff changeset
   203
showViews
235
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   204
    views notNil ifTrue:[
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   205
	views do:[:aView |
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   206
	    aView notNil ifTrue:[aView rerealize]
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   207
	]
10
claus
parents: 2
diff changeset
   208
    ].
claus
parents: 2
diff changeset
   209
!
claus
parents: 2
diff changeset
   210
claus
parents: 2
diff changeset
   211
hideViews
235
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   212
    "hide all views of this project"
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   213
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   214
    views notNil ifTrue:[
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   215
	views do:[:aView |
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   216
	    aView notNil ifTrue:[aView unrealize]
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   217
	]
10
claus
parents: 2
diff changeset
   218
    ].
claus
parents: 2
diff changeset
   219
! !
claus
parents: 2
diff changeset
   220
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   221
!Project methodsFor:'initialization'!
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   222
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   223
initialize
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   224
    views := (OrderedCollection new).
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   225
    name := 'a new Project'.
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   226
    packageName := 'private'.
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   227
    changeSet := ChangeSet new.
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   228
    self directory:'.'
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   229
! !
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   230
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   231
!Project methodsFor:'properties'!
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   232
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   233
directory
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   234
    ^ properties at:#directoryName ifAbsent:['.']
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   235
!
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   237
directory:aDirectoryName
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   238
    properties isNil ifTrue:[
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   239
	properties := Dictionary new
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   240
    ].
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   241
    properties at:#directoryName put:aDirectoryName
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   242
!
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   243
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   244
properties
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   245
    ^ properties
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   246
!
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   247
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   248
properties:p
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   249
    properties := p
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   250
!
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   251
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   252
type
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   253
    "return the type of project"
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   254
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   255
    ^ properties at:#type ifAbsent:[#application]
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   256
!
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   257
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   258
type:aSymbol
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   259
    "set the projects type"
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   260
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   261
    (#(application library smalltalk) includes:aSymbol) ifFalse:[
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   262
	self warn:'invalid project type'.
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   263
	^ self
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   264
    ].
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   265
    properties at:#type put:aSymbol
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   266
! !
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   267
2
claus
parents: 1
diff changeset
   268
!Project methodsFor:'maintenance'!
claus
parents: 1
diff changeset
   269
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   270
buildProject
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   271
    OperatingSystem executeCommand:('cd ' , self directory , ' ; make')
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   272
!
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   273
2
claus
parents: 1
diff changeset
   274
createProjectFiles
claus
parents: 1
diff changeset
   275
    "actually, creates all files to do a make in the project directory"
claus
parents: 1
diff changeset
   276
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   277
    |dirName|
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   278
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   279
    dirName := properties at:#directoryName.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   280
    dirName asFilename exists ifFalse:[
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   281
	(self confirm:'create new projectDirectory: ' , dirName) ifFalse:[^ self].
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   282
	OperatingSystem recursiveCreateDirectory:dirName.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   283
    ].
2
claus
parents: 1
diff changeset
   284
    self createMakefile.
claus
parents: 1
diff changeset
   285
    self createSourcefiles.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   286
    self createProtoMakefile.
2
claus
parents: 1
diff changeset
   287
!
claus
parents: 1
diff changeset
   288
claus
parents: 1
diff changeset
   289
createSourcefiles
235
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   290
    "creates all Smalltalk-source files in the project directory"
2
claus
parents: 1
diff changeset
   291
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   292
    |classes dir|
2
claus
parents: 1
diff changeset
   293
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   294
    dir := FileDirectory directoryNamed:self directory.
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   295
    Transcript showCr:'creating sources in ' , dir pathName , ' ...'; endEntry.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   296
235
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   297
    classes := self classes.
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   298
    classes notNil ifTrue:[
236
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   299
        classes do:[:aClass |
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   300
            aClass isLoaded ifFalse:[
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   301
                aClass autoload.
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   302
            ].
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   303
            Transcript show:' ... '; showCr:aClass name; endEntry.
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   304
            aClass fileOutIn:dir
fa6d1f330010 *** empty log message ***
claus
parents: 235
diff changeset
   305
        ]
2
claus
parents: 1
diff changeset
   306
    ].
claus
parents: 1
diff changeset
   307
!
claus
parents: 1
diff changeset
   308
claus
parents: 1
diff changeset
   309
createMakefile
claus
parents: 1
diff changeset
   310
    "creates an initial makefile, which will recreate a correct
claus
parents: 1
diff changeset
   311
     Makefile, then compile all"
claus
parents: 1
diff changeset
   312
claus
parents: 1
diff changeset
   313
    |d f out in|
claus
parents: 1
diff changeset
   314
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   315
    Transcript showCr:'creating Makefile'.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   316
2
claus
parents: 1
diff changeset
   317
    d := (properties at:#directoryName) asFilename.
claus
parents: 1
diff changeset
   318
    f := d construct:'Makefile'.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   319
    f exists ifTrue:[
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   320
	f renameTo:(d construct:'Makefile.bak')
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   321
    ].
2
claus
parents: 1
diff changeset
   322
    out := f writeStream.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   323
    out isNil ifTrue:[
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   324
	self warn:'cannot create Makefile'.
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   325
	^ self
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   326
    ].
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   327
    in := Smalltalk systemFileStreamFor:'rules/stdHeader'.
2
claus
parents: 1
diff changeset
   328
    out nextPutAll:in contents asString.
claus
parents: 1
diff changeset
   329
    in close.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   330
    out nextPutAll:'#TOP=/usr/local/lib/smalltalk'; cr.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   331
    out nextPutAll:'TOP=../..'; cr.
2
claus
parents: 1
diff changeset
   332
    out nextPutAll:'target:'; cr.
claus
parents: 1
diff changeset
   333
    out tab; nextPutAll:'touch Make.proto'; cr.
claus
parents: 1
diff changeset
   334
    out tab; nextPutAll:'$(MAKE) Makefile'; cr.
claus
parents: 1
diff changeset
   335
    out tab; nextPutAll:'make'; cr; cr.
claus
parents: 1
diff changeset
   336
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   337
    in := Smalltalk systemFileStreamFor:'configurations/myConf'.
2
claus
parents: 1
diff changeset
   338
    out nextPutAll:in contents asString.
claus
parents: 1
diff changeset
   339
    in close.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   340
    in := Smalltalk systemFileStreamFor:'rules/stdRules'.
2
claus
parents: 1
diff changeset
   341
    out nextPutAll:in contents asString.
claus
parents: 1
diff changeset
   342
    in close.
claus
parents: 1
diff changeset
   343
    out close
claus
parents: 1
diff changeset
   344
!
claus
parents: 1
diff changeset
   345
claus
parents: 1
diff changeset
   346
createProtoMakefile
claus
parents: 1
diff changeset
   347
    "creates a Make.proto file"
claus
parents: 1
diff changeset
   348
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   349
    |d f s type appName|
2
claus
parents: 1
diff changeset
   350
claus
parents: 1
diff changeset
   351
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   352
    Transcript showCr:'creating Make.proto'.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   353
2
claus
parents: 1
diff changeset
   354
    d := (properties at:#directoryName) asFilename.
claus
parents: 1
diff changeset
   355
    f := d construct:'Make.proto'.
claus
parents: 1
diff changeset
   356
    f exists ifTrue:[
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   357
	f renameTo:(d construct:'Make.proto.bak')
2
claus
parents: 1
diff changeset
   358
    ].
claus
parents: 1
diff changeset
   359
    s := f writeStream.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   360
    s isNil ifTrue:[
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   361
	self warn:'cannot create prototype Makefile'.
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   362
	^ self
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   363
    ].
2
claus
parents: 1
diff changeset
   364
    s nextPutAll:'#
235
d8e62525bfdf *** empty log message ***
claus
parents: 203
diff changeset
   365
# created by Smalltalks Project support
2
claus
parents: 1
diff changeset
   366
#
claus
parents: 1
diff changeset
   367
SHELL=/bin/sh
claus
parents: 1
diff changeset
   368
claus
parents: 1
diff changeset
   369
SUBDIRS=
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   370
#TOP=/usr/local/lib/smalltalk
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   371
TOP=../..
2
claus
parents: 1
diff changeset
   372
claus
parents: 1
diff changeset
   373
'.
claus
parents: 1
diff changeset
   374
claus
parents: 1
diff changeset
   375
    type := properties at:#projectType ifAbsent:[#executable].
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   376
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   377
    appName := properties at:#applicationName ifAbsent:['app'].
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   378
    s nextPutAll:'LIBNAME=lib' , appName; cr.
2
claus
parents: 1
diff changeset
   379
claus
parents: 1
diff changeset
   380
    type == #executable ifTrue:[
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   381
	s nextPutAll:'PROGS = ' , appName; cr
2
claus
parents: 1
diff changeset
   382
    ].
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   383
    s nextPutAll:'STARTUP_CLASS=' , (properties at:#startupClass ifAbsent:['Smalltalk']).
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   384
    s cr.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   385
    s nextPutAll:'STARTUP_SELECTOR="' , (properties at:#startupSelector ifAbsent:['start']).
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   386
    s nextPutAll:'"'; cr.
2
claus
parents: 1
diff changeset
   387
claus
parents: 1
diff changeset
   388
    s nextPutAll:'OBJS='.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   389
    (properties at:#classes ifAbsent:[#()]) do:[:aClassName |
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   390
	|abbrev|
2
claus
parents: 1
diff changeset
   391
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   392
	s nextPutAll:' \'. s cr.
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   393
	abbrev := Smalltalk fileNameForClass:aClassName.
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   394
	s nextPutAll:'  '; nextPutAll:abbrev; nextPutAll:'.o'.
2
claus
parents: 1
diff changeset
   395
    ].
claus
parents: 1
diff changeset
   396
    s cr; cr.
claus
parents: 1
diff changeset
   397
claus
parents: 1
diff changeset
   398
claus
parents: 1
diff changeset
   399
    type == #executable ifTrue:[
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   400
	s nextPutAll:'all:: $(PROGS)'; cr.
2
claus
parents: 1
diff changeset
   401
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   402
	s nextPutAll:appName.
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   403
	s nextPutAll:':: main.o classList.o $(OBJS)'; cr.
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   404
	s tab;      nextPutAll:'$(LD) $(ST_LDFLAG) $(LDFLAGS) -o ';
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   405
		    nextPutAll:appName;
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   406
		    nextPutAll:' \'; cr.
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   407
	s tab; tab; nextPutAll:'$(CRT0) main.$(O) classList.$(O) $(OBJS) $(EXTRA_OBJ) $(LIBOBJS) \'; cr.
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   408
	s tab; tab; nextPutAll:'$(LIBRUNDIR)/hidata.o $(LIBRUN) \'; cr.
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   409
	s tab; tab; nextPutAll:'$(MATHLIB) $(EXTRALIBS) -lXext $(SYSLIBS) $(OTHERLIBS) $(CRTN)'; cr.
2
claus
parents: 1
diff changeset
   410
    ].
claus
parents: 1
diff changeset
   411
claus
parents: 1
diff changeset
   412
    s close
claus
parents: 1
diff changeset
   413
! !
claus
parents: 1
diff changeset
   414
claus
parents: 1
diff changeset
   415
!Project methodsFor:'specifications'!
claus
parents: 1
diff changeset
   416
claus
parents: 1
diff changeset
   417
readSpec
claus
parents: 1
diff changeset
   418
    |s chunk fileName|
claus
parents: 1
diff changeset
   419
claus
parents: 1
diff changeset
   420
    fileName := (properties at:#directoryName) asFilename construct:'.project'.
claus
parents: 1
diff changeset
   421
    s := fileName readStream.
claus
parents: 1
diff changeset
   422
    s isNil ifTrue:[^ self].
claus
parents: 1
diff changeset
   423
    [s atEnd] whileFalse:[
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   424
	chunk := s nextChunk.
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   425
	Compiler evaluate:chunk receiver:properties notifying:nil
2
claus
parents: 1
diff changeset
   426
    ].
claus
parents: 1
diff changeset
   427
    s close.
claus
parents: 1
diff changeset
   428
claus
parents: 1
diff changeset
   429
    "(Project new directory:'../projects/Clock') readSpec"
claus
parents: 1
diff changeset
   430
!
claus
parents: 1
diff changeset
   431
claus
parents: 1
diff changeset
   432
saveSpec
claus
parents: 1
diff changeset
   433
    |f d s|
claus
parents: 1
diff changeset
   434
claus
parents: 1
diff changeset
   435
    d := (properties at:#directoryName) asFilename.
claus
parents: 1
diff changeset
   436
    d exists ifFalse:[
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   437
	self error:'directory does not exist'.
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   438
	^ self
2
claus
parents: 1
diff changeset
   439
    ].
claus
parents: 1
diff changeset
   440
    f := d construct:'.project'.
claus
parents: 1
diff changeset
   441
    s := f writeStream.
claus
parents: 1
diff changeset
   442
    s isNil ifTrue:[^ self].
claus
parents: 1
diff changeset
   443
    properties associationsDo:[:aProp |
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   444
	(aProp == #directoryName) ifFalse:[
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   445
	    s nextChunkPut:('self at:' , aProp key storeString, 
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   446
			       ' put:' , aProp value storeString).
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   447
	    s cr
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   448
	]
2
claus
parents: 1
diff changeset
   449
    ].
claus
parents: 1
diff changeset
   450
    s close
claus
parents: 1
diff changeset
   451
claus
parents: 1
diff changeset
   452
    "((Project new directory:'../projects/Clock') readSpec
203
3d88fa870de0 *** empty log message ***
claus
parents: 150
diff changeset
   453
	 directory:'../projects/xxx') saveSpec"
2
claus
parents: 1
diff changeset
   454
! !
claus
parents: 1
diff changeset
   455
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   456
Project initialize!