Project.st
author claus
Wed, 24 Aug 1994 03:44:07 +0200
changeset 150 2d70065d158b
parent 149 a3b1bf2938c6
child 203 3d88fa870de0
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
"
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
     2
 COPYRIGHT (c) 1990 by Claus Gittinger
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
     3
              All Rights Reserved
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
a27a279701f8 Initial revision
claus
parents:
diff changeset
    13
Object subclass:#Project
2
claus
parents: 1
diff changeset
    14
         instanceVariableNames:'name changeSet views properties'
149
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
    15
         classVariableNames:'CurrentProject SystemProject'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    16
         poolDictionaries:''
a27a279701f8 Initial revision
claus
parents:
diff changeset
    17
         category:'System-Support'
a27a279701f8 Initial revision
claus
parents:
diff changeset
    18
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    19
89
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    20
Project comment:'
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    21
COPYRIGHT (c) 1993 by Claus Gittinger
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    22
              All Rights Reserved
97
b876f90648aa *** empty log message ***
claus
parents: 89
diff changeset
    23
150
2d70065d158b *** empty log message ***
claus
parents: 149
diff changeset
    24
$Header: /cvs/stx/stx/libbasic/Project.st,v 1.10 1994-08-24 01:44:07 claus Exp $
89
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    25
'!
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    26
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    27
!Project class methodsFor:'documentation'!
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    28
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    29
copyright
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    30
"
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    31
 COPYRIGHT (c) 1993 by Claus Gittinger
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    32
              All Rights Reserved
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    33
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    34
 This software is furnished under a license and may be used
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    35
 only in accordance with the terms of that license and with the
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    36
 inclusion of the above copyright notice.   This software may not
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    37
 be provided or otherwise made available to, or used by, any
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    38
 other person.  No title to or ownership of the software is
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    39
 hereby transferred.
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    40
"
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    41
!
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    42
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    43
version
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    44
"
150
2d70065d158b *** empty log message ***
claus
parents: 149
diff changeset
    45
$Header: /cvs/stx/stx/libbasic/Project.st,v 1.10 1994-08-24 01:44:07 claus Exp $
89
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    46
"
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    47
!
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    48
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    49
documentation
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    50
"
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    51
    this class is still under construction.
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    52
"
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    53
! !
7be0b86ef80f *** empty log message ***
claus
parents: 87
diff changeset
    54
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    55
!Project class methodsFor:'accessing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    56
a27a279701f8 Initial revision
claus
parents:
diff changeset
    57
current
10
claus
parents: 2
diff changeset
    58
    "return the currently active project"
claus
parents: 2
diff changeset
    59
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    60
    ^ CurrentProject
a27a279701f8 Initial revision
claus
parents:
diff changeset
    61
a27a279701f8 Initial revision
claus
parents:
diff changeset
    62
    "Project current"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    63
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    64
a27a279701f8 Initial revision
claus
parents:
diff changeset
    65
current:aProject
10
claus
parents: 2
diff changeset
    66
    "set the currently active project"
claus
parents: 2
diff changeset
    67
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    68
    CurrentProject := aProject
a27a279701f8 Initial revision
claus
parents:
diff changeset
    69
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
    70
a27a279701f8 Initial revision
claus
parents:
diff changeset
    71
!Project class methodsFor:'instance creation'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    72
a27a279701f8 Initial revision
claus
parents:
diff changeset
    73
new
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
    74
    ^ self basicNew initialize
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    75
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
    76
a27a279701f8 Initial revision
claus
parents:
diff changeset
    77
!Project class methodsFor:'initialization'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    78
a27a279701f8 Initial revision
claus
parents:
diff changeset
    79
initialize
a27a279701f8 Initial revision
claus
parents:
diff changeset
    80
    CurrentProject isNil ifTrue:[
150
2d70065d158b *** empty log message ***
claus
parents: 149
diff changeset
    81
        CurrentProject := SystemProject := self new name:'System'.
2d70065d158b *** empty log message ***
claus
parents: 149
diff changeset
    82
        "
2d70065d158b *** empty log message ***
claus
parents: 149
diff changeset
    83
         the SystemProject does not keep a record if changes,
2d70065d158b *** empty log message ***
claus
parents: 149
diff changeset
    84
         but instead depends on the changes file - recording anything there.
2d70065d158b *** empty log message ***
claus
parents: 149
diff changeset
    85
        "
2d70065d158b *** empty log message ***
claus
parents: 149
diff changeset
    86
        SystemProject changeSet:nil.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    87
    ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
    88
a27a279701f8 Initial revision
claus
parents:
diff changeset
    89
    "Project initialize"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    90
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
    91
149
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
    92
!Project class methodsFor:'changes management'!
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
    93
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
    94
addMethodChange:aMethod in:aClass
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
    95
    "add a change for a method to the current project"
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
    96
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
    97
    |p|
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
    98
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
    99
    p := CurrentProject.
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   100
    (p notNil 
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   101
     and:[p changeSet notNil]) ifTrue:[
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   102
        p changeSet addMethodChange:aMethod in:aClass 
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   103
    ]
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   104
!
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   105
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   106
currentProjectDirectory
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   107
    "return the name of the directory to use for fileOut.
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   108
     The returned name already includes a file-separator, so the
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   109
     filename can be concatenated to it."
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   110
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   111
    |p dirName|
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   112
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   113
    p := CurrentProject.
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   114
    p notNil ifTrue:[
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   115
        dirName := p directory  
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   116
    ] ifFalse:[
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   117
        dirName := '.'
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   118
    ].
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   119
    ^ dirName , Filename separator asString
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   120
! !
a3b1bf2938c6 changeSet interface changed
claus
parents: 97
diff changeset
   121
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   122
!Project methodsFor:'initialization'!
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   123
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   124
initialize
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   125
    self views:(OrderedCollection new).
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   126
    self name:'a new Project'.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   127
    self changeSet:(ChangeSet new).
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   128
    self directory:'.'
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   129
! !
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   130
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   131
!Project methodsFor:'accessing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   132
a27a279701f8 Initial revision
claus
parents:
diff changeset
   133
views
a27a279701f8 Initial revision
claus
parents:
diff changeset
   134
    ^ views
a27a279701f8 Initial revision
claus
parents:
diff changeset
   135
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   136
a27a279701f8 Initial revision
claus
parents:
diff changeset
   137
views:aSetOfViews
a27a279701f8 Initial revision
claus
parents:
diff changeset
   138
    views := aSetOfViews
a27a279701f8 Initial revision
claus
parents:
diff changeset
   139
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   140
a27a279701f8 Initial revision
claus
parents:
diff changeset
   141
changeSet
a27a279701f8 Initial revision
claus
parents:
diff changeset
   142
    ^ changeSet
a27a279701f8 Initial revision
claus
parents:
diff changeset
   143
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   144
a27a279701f8 Initial revision
claus
parents:
diff changeset
   145
changeSet:aChangeSet
a27a279701f8 Initial revision
claus
parents:
diff changeset
   146
    changeSet := aChangeSet
a27a279701f8 Initial revision
claus
parents:
diff changeset
   147
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   148
a27a279701f8 Initial revision
claus
parents:
diff changeset
   149
name
a27a279701f8 Initial revision
claus
parents:
diff changeset
   150
    ^ name
a27a279701f8 Initial revision
claus
parents:
diff changeset
   151
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   152
a27a279701f8 Initial revision
claus
parents:
diff changeset
   153
name:aString
a27a279701f8 Initial revision
claus
parents:
diff changeset
   154
    name := aString
73
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   155
! !
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   156
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   157
!Project methodsFor:'proerties'!
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   158
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   159
properties
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   160
    ^ properties
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   161
!
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   162
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   163
properties:p
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   164
    properties := p
2
claus
parents: 1
diff changeset
   165
!
claus
parents: 1
diff changeset
   166
claus
parents: 1
diff changeset
   167
directory
73
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   168
    ^ properties at:#directoryName ifAbsent:['.']
2
claus
parents: 1
diff changeset
   169
!
claus
parents: 1
diff changeset
   170
claus
parents: 1
diff changeset
   171
directory:aDirectoryName
claus
parents: 1
diff changeset
   172
    properties isNil ifTrue:[
claus
parents: 1
diff changeset
   173
        properties := Dictionary new
claus
parents: 1
diff changeset
   174
    ].
claus
parents: 1
diff changeset
   175
    properties at:#directoryName put:aDirectoryName
73
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   176
!
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   177
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   178
type
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   179
    "return the type of project"
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   180
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   181
    ^ properties at:#type ifAbsent:[#application]
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   182
!
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   183
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   184
type:aSymbol
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   185
    "set the projects type"
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   186
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   187
    (#(application library smalltalk) includes:aSymbol) ifFalse:[
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   188
        self warn:'invalid project type'.
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   189
        ^ self
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   190
    ].
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   191
    properties at:#type put:aSymbol
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   192
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   193
10
claus
parents: 2
diff changeset
   194
!Project methodsFor:'views'!
claus
parents: 2
diff changeset
   195
claus
parents: 2
diff changeset
   196
addView:aView
claus
parents: 2
diff changeset
   197
    views add:aView
claus
parents: 2
diff changeset
   198
!
claus
parents: 2
diff changeset
   199
claus
parents: 2
diff changeset
   200
removeView:aView
claus
parents: 2
diff changeset
   201
    views remove:aView ifAbsent:[]
claus
parents: 2
diff changeset
   202
!
claus
parents: 2
diff changeset
   203
claus
parents: 2
diff changeset
   204
showViews
claus
parents: 2
diff changeset
   205
    self views notNil ifTrue:[
claus
parents: 2
diff changeset
   206
        self views do:[:aView |
claus
parents: 2
diff changeset
   207
            aView rerealize
claus
parents: 2
diff changeset
   208
        ]
claus
parents: 2
diff changeset
   209
    ].
claus
parents: 2
diff changeset
   210
!
claus
parents: 2
diff changeset
   211
claus
parents: 2
diff changeset
   212
hideViews
claus
parents: 2
diff changeset
   213
    self views notNil ifTrue:[
claus
parents: 2
diff changeset
   214
        self views do:[:aView |
claus
parents: 2
diff changeset
   215
            aView unrealize
claus
parents: 2
diff changeset
   216
        ]
claus
parents: 2
diff changeset
   217
    ].
claus
parents: 2
diff changeset
   218
! !
claus
parents: 2
diff changeset
   219
2
claus
parents: 1
diff changeset
   220
!Project methodsFor:'maintenance'!
claus
parents: 1
diff changeset
   221
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   222
buildProject
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   223
    OperatingSystem executeCommand:('cd ' , self directory , ' ; make')
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   224
!
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   225
2
claus
parents: 1
diff changeset
   226
createProjectFiles
claus
parents: 1
diff changeset
   227
    "actually, creates all files to do a make in the project directory"
claus
parents: 1
diff changeset
   228
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   229
    |dirName|
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   230
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   231
    dirName := properties at:#directoryName.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   232
    dirName asFilename exists ifFalse:[
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   233
        (self confirm:'create new projectDirectory: ' , dirName) ifFalse:[^ self].
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   234
        OperatingSystem recursiveCreateDirectory:dirName.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   235
    ].
2
claus
parents: 1
diff changeset
   236
    self createMakefile.
claus
parents: 1
diff changeset
   237
    self createSourcefiles.
claus
parents: 1
diff changeset
   238
    self createClassListFile.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   239
    self createAbbreviationFile.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   240
    self createProtoMakefile.
2
claus
parents: 1
diff changeset
   241
!
claus
parents: 1
diff changeset
   242
claus
parents: 1
diff changeset
   243
createSourcefiles
claus
parents: 1
diff changeset
   244
    "creates all st-source files"
claus
parents: 1
diff changeset
   245
claus
parents: 1
diff changeset
   246
    |d f s abbrev classSymbol|
claus
parents: 1
diff changeset
   247
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   248
    Transcript showCr:'creating sources'.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   249
2
claus
parents: 1
diff changeset
   250
    d := (properties at:#directoryName) asFilename.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   251
    (properties at:#classes ifAbsent:[#()]) do:[:aClassName |
2
claus
parents: 1
diff changeset
   252
        classSymbol := aClassName asSymbol.
claus
parents: 1
diff changeset
   253
        (Smalltalk includesKey:classSymbol) ifFalse:[
claus
parents: 1
diff changeset
   254
            Transcript showCr:('no class named ' , aClassName)
claus
parents: 1
diff changeset
   255
        ] ifTrue:[
claus
parents: 1
diff changeset
   256
            (Smalltalk at:classSymbol) autoload.
claus
parents: 1
diff changeset
   257
            abbrev := Smalltalk fileNameForClass:aClassName.
claus
parents: 1
diff changeset
   258
            f := d construct:(abbrev , '.st').
claus
parents: 1
diff changeset
   259
            s := f writeStream.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   260
            s isNil ifTrue:[
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   261
                self warn:'cannot create source file(s)'.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   262
                ^ self
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   263
            ].
2
claus
parents: 1
diff changeset
   264
            (Smalltalk at:classSymbol) fileOutOn:s.
claus
parents: 1
diff changeset
   265
            s close
claus
parents: 1
diff changeset
   266
        ]
claus
parents: 1
diff changeset
   267
    ].
claus
parents: 1
diff changeset
   268
!
claus
parents: 1
diff changeset
   269
claus
parents: 1
diff changeset
   270
createClassListFile
claus
parents: 1
diff changeset
   271
    "creates classList.stc - assume all loaded now should go into executable"
claus
parents: 1
diff changeset
   272
claus
parents: 1
diff changeset
   273
    |d f in out|
claus
parents: 1
diff changeset
   274
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   275
    Transcript showCr:'creating classList.stc'.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   276
2
claus
parents: 1
diff changeset
   277
    d := (properties at:#directoryName) asFilename.
claus
parents: 1
diff changeset
   278
    f := d construct:'classList.stc'.
claus
parents: 1
diff changeset
   279
    out := f writeStream.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   280
    out isNil ifTrue:[
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   281
        self warn:'cannot create classList file'.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   282
        ^ self
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   283
    ].
2
claus
parents: 1
diff changeset
   284
claus
parents: 1
diff changeset
   285
    in := './classList.stc' asFilename readStream.
claus
parents: 1
diff changeset
   286
    out nextPutAll:in contents asString.
claus
parents: 1
diff changeset
   287
    in close.
claus
parents: 1
diff changeset
   288
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   289
    (properties at:#classes ifAbsent:[Smalltalk allClasses collect:[:aClass| aClass name asSymbol]]) do:[:aClassSymbol |
2
claus
parents: 1
diff changeset
   290
        (Smalltalk includesKey:aClassSymbol) ifFalse:[
claus
parents: 1
diff changeset
   291
            Transcript showCr:('no class named ' , aClassSymbol)
claus
parents: 1
diff changeset
   292
        ] ifTrue:[
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   293
"
2
claus
parents: 1
diff changeset
   294
            (Smalltalk at:aClassSymbol) autoload.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   295
"
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   296
            (Smalltalk at:aClassSymbol) isLoaded ifTrue:[
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   297
                out nextPutAll:aClassSymbol; cr
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   298
            ]
2
claus
parents: 1
diff changeset
   299
        ]
claus
parents: 1
diff changeset
   300
    ].
claus
parents: 1
diff changeset
   301
    out close.
claus
parents: 1
diff changeset
   302
!
claus
parents: 1
diff changeset
   303
claus
parents: 1
diff changeset
   304
createAbbreviationFile
claus
parents: 1
diff changeset
   305
    "creates abbrev.stc"
claus
parents: 1
diff changeset
   306
claus
parents: 1
diff changeset
   307
    |d f s abbrev|
claus
parents: 1
diff changeset
   308
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   309
    Transcript showCr:'creating abbrev.stc'.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   310
2
claus
parents: 1
diff changeset
   311
    d := (properties at:#directoryName) asFilename.
claus
parents: 1
diff changeset
   312
    f := d construct:'abbrev.stc'.
claus
parents: 1
diff changeset
   313
    s := f writeStream.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   314
    s isNil ifTrue:[
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   315
        self warn:'cannot create abbreviation file'.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   316
        ^ self
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   317
    ].
2
claus
parents: 1
diff changeset
   318
    Smalltalk allClassesDo:[:aClass |
claus
parents: 1
diff changeset
   319
        (aClass isSubclassOf:Autoload) ifFalse:[
claus
parents: 1
diff changeset
   320
            abbrev := Smalltalk fileNameForClass:aClass name.
claus
parents: 1
diff changeset
   321
            abbrev ~= aClass name ifTrue:[
claus
parents: 1
diff changeset
   322
                s nextPutAll:aClass name; tab; nextPutAll:abbrev; cr
claus
parents: 1
diff changeset
   323
            ]
claus
parents: 1
diff changeset
   324
        ].
claus
parents: 1
diff changeset
   325
    ].
claus
parents: 1
diff changeset
   326
    s close.
claus
parents: 1
diff changeset
   327
!
claus
parents: 1
diff changeset
   328
claus
parents: 1
diff changeset
   329
createMakefile
claus
parents: 1
diff changeset
   330
    "creates an initial makefile, which will recreate a correct
claus
parents: 1
diff changeset
   331
     Makefile, then compile all"
claus
parents: 1
diff changeset
   332
claus
parents: 1
diff changeset
   333
    |d f out in|
claus
parents: 1
diff changeset
   334
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   335
    Transcript showCr:'creating Makefile'.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   336
2
claus
parents: 1
diff changeset
   337
    d := (properties at:#directoryName) asFilename.
claus
parents: 1
diff changeset
   338
    f := d construct:'Makefile'.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   339
    f exists ifTrue:[
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   340
        f renameTo:(d construct:'Makefile.bak')
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   341
    ].
2
claus
parents: 1
diff changeset
   342
    out := f writeStream.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   343
    out isNil ifTrue:[
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   344
        self warn:'cannot create Makefile'.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   345
        ^ self
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   346
    ].
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   347
    in := Smalltalk systemFileStreamFor:'rules/stdHeader'.
2
claus
parents: 1
diff changeset
   348
    out nextPutAll:in contents asString.
claus
parents: 1
diff changeset
   349
    in close.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   350
    out nextPutAll:'#TOP=/usr/local/lib/smalltalk'; cr.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   351
    out nextPutAll:'TOP=../..'; cr.
2
claus
parents: 1
diff changeset
   352
    out nextPutAll:'target:'; cr.
claus
parents: 1
diff changeset
   353
    out tab; nextPutAll:'touch Make.proto'; cr.
claus
parents: 1
diff changeset
   354
    out tab; nextPutAll:'$(MAKE) Makefile'; cr.
claus
parents: 1
diff changeset
   355
    out tab; nextPutAll:'make'; cr; cr.
claus
parents: 1
diff changeset
   356
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   357
    in := Smalltalk systemFileStreamFor:'configurations/myConf'.
2
claus
parents: 1
diff changeset
   358
    out nextPutAll:in contents asString.
claus
parents: 1
diff changeset
   359
    in close.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   360
    in := Smalltalk systemFileStreamFor:'rules/stdRules'.
2
claus
parents: 1
diff changeset
   361
    out nextPutAll:in contents asString.
claus
parents: 1
diff changeset
   362
    in close.
claus
parents: 1
diff changeset
   363
    out close
claus
parents: 1
diff changeset
   364
!
claus
parents: 1
diff changeset
   365
claus
parents: 1
diff changeset
   366
createProtoMakefile
claus
parents: 1
diff changeset
   367
    "creates a Make.proto file"
claus
parents: 1
diff changeset
   368
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   369
    |d f s type appName|
2
claus
parents: 1
diff changeset
   370
claus
parents: 1
diff changeset
   371
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   372
    Transcript showCr:'creating Make.proto'.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   373
2
claus
parents: 1
diff changeset
   374
    d := (properties at:#directoryName) asFilename.
claus
parents: 1
diff changeset
   375
    f := d construct:'Make.proto'.
claus
parents: 1
diff changeset
   376
    f exists ifTrue:[
claus
parents: 1
diff changeset
   377
        f renameTo:(d construct:'Make.proto.bak')
claus
parents: 1
diff changeset
   378
    ].
claus
parents: 1
diff changeset
   379
    s := f writeStream.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   380
    s isNil ifTrue:[
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   381
        self warn:'cannot create prototype Makefile'.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   382
        ^ self
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   383
    ].
2
claus
parents: 1
diff changeset
   384
    s nextPutAll:'#
claus
parents: 1
diff changeset
   385
# created by Smalltalk
claus
parents: 1
diff changeset
   386
#
claus
parents: 1
diff changeset
   387
SHELL=/bin/sh
claus
parents: 1
diff changeset
   388
claus
parents: 1
diff changeset
   389
SUBDIRS=
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   390
#TOP=/usr/local/lib/smalltalk
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   391
TOP=../..
2
claus
parents: 1
diff changeset
   392
claus
parents: 1
diff changeset
   393
'.
claus
parents: 1
diff changeset
   394
claus
parents: 1
diff changeset
   395
    type := properties at:#projectType ifAbsent:[#executable].
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   396
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   397
    appName := properties at:#applicationName ifAbsent:['app'].
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   398
    s nextPutAll:'LIBNAME=lib' , appName; cr.
2
claus
parents: 1
diff changeset
   399
claus
parents: 1
diff changeset
   400
    type == #executable ifTrue:[
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   401
        s nextPutAll:'PROGS = ' , appName; cr
2
claus
parents: 1
diff changeset
   402
    ].
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   403
    s nextPutAll:'STARTUP_CLASS=' , (properties at:#startupClass ifAbsent:['Smalltalk']).
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   404
    s cr.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   405
    s nextPutAll:'STARTUP_SELECTOR="' , (properties at:#startupSelector ifAbsent:['start']).
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   406
    s nextPutAll:'"'; cr.
2
claus
parents: 1
diff changeset
   407
claus
parents: 1
diff changeset
   408
    s nextPutAll:'OBJS='.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   409
    (properties at:#classes ifAbsent:[#()]) do:[:aClassName |
2
claus
parents: 1
diff changeset
   410
        |abbrev|
claus
parents: 1
diff changeset
   411
claus
parents: 1
diff changeset
   412
        s nextPutAll:' \'. s cr.
claus
parents: 1
diff changeset
   413
        abbrev := Smalltalk fileNameForClass:aClassName.
claus
parents: 1
diff changeset
   414
        s nextPutAll:'  '; nextPutAll:abbrev; nextPutAll:'.o'.
claus
parents: 1
diff changeset
   415
    ].
claus
parents: 1
diff changeset
   416
    s cr; cr.
claus
parents: 1
diff changeset
   417
claus
parents: 1
diff changeset
   418
claus
parents: 1
diff changeset
   419
    type == #executable ifTrue:[
claus
parents: 1
diff changeset
   420
        s nextPutAll:'all:: $(PROGS)'; cr.
claus
parents: 1
diff changeset
   421
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   422
        s nextPutAll:appName.
2
claus
parents: 1
diff changeset
   423
        s nextPutAll:':: main.o classList.o $(OBJS)'; cr.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   424
        s tab;      nextPutAll:'$(LD) $(ST_LDFLAG) $(LDFLAGS) -o ';
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   425
                    nextPutAll:appName;
2
claus
parents: 1
diff changeset
   426
                    nextPutAll:' \'; cr.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   427
        s tab; tab; nextPutAll:'$(CRT0) main.$(O) classList.$(O) $(OBJS) $(EXTRA_OBJ) $(LIBOBJS) \'; cr.
2
claus
parents: 1
diff changeset
   428
        s tab; tab; nextPutAll:'$(LIBRUNDIR)/hidata.o $(LIBRUN) \'; cr.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   429
        s tab; tab; nextPutAll:'$(MATHLIB) $(EXTRALIBS) -lXext $(SYSLIBS) $(OTHERLIBS) $(CRTN)'; cr.
2
claus
parents: 1
diff changeset
   430
    ].
claus
parents: 1
diff changeset
   431
claus
parents: 1
diff changeset
   432
    s close
claus
parents: 1
diff changeset
   433
! !
claus
parents: 1
diff changeset
   434
claus
parents: 1
diff changeset
   435
!Project methodsFor:'specifications'!
claus
parents: 1
diff changeset
   436
claus
parents: 1
diff changeset
   437
readSpec
claus
parents: 1
diff changeset
   438
    |s chunk fileName|
claus
parents: 1
diff changeset
   439
claus
parents: 1
diff changeset
   440
    fileName := (properties at:#directoryName) asFilename construct:'.project'.
claus
parents: 1
diff changeset
   441
    s := fileName readStream.
claus
parents: 1
diff changeset
   442
    s isNil ifTrue:[^ self].
claus
parents: 1
diff changeset
   443
    [s atEnd] whileFalse:[
claus
parents: 1
diff changeset
   444
        chunk := s nextChunk.
claus
parents: 1
diff changeset
   445
        Compiler evaluate:chunk receiver:properties notifying:nil
claus
parents: 1
diff changeset
   446
    ].
claus
parents: 1
diff changeset
   447
    s close.
claus
parents: 1
diff changeset
   448
claus
parents: 1
diff changeset
   449
    "(Project new directory:'../projects/Clock') readSpec"
claus
parents: 1
diff changeset
   450
!
claus
parents: 1
diff changeset
   451
claus
parents: 1
diff changeset
   452
saveSpec
claus
parents: 1
diff changeset
   453
    |f d s|
claus
parents: 1
diff changeset
   454
claus
parents: 1
diff changeset
   455
    d := (properties at:#directoryName) asFilename.
claus
parents: 1
diff changeset
   456
    d exists ifFalse:[
claus
parents: 1
diff changeset
   457
        self error:'directory does not exist'.
claus
parents: 1
diff changeset
   458
        ^ self
claus
parents: 1
diff changeset
   459
    ].
claus
parents: 1
diff changeset
   460
    f := d construct:'.project'.
claus
parents: 1
diff changeset
   461
    s := f writeStream.
claus
parents: 1
diff changeset
   462
    s isNil ifTrue:[^ self].
claus
parents: 1
diff changeset
   463
    properties associationsDo:[:aProp |
claus
parents: 1
diff changeset
   464
        (aProp == #directoryName) ifFalse:[
claus
parents: 1
diff changeset
   465
            s nextChunkPut:('self at:' , aProp key storeString, 
claus
parents: 1
diff changeset
   466
                               ' put:' , aProp value storeString).
claus
parents: 1
diff changeset
   467
            s cr
claus
parents: 1
diff changeset
   468
        ]
claus
parents: 1
diff changeset
   469
    ].
claus
parents: 1
diff changeset
   470
    s close
claus
parents: 1
diff changeset
   471
claus
parents: 1
diff changeset
   472
    "((Project new directory:'../projects/Clock') readSpec
claus
parents: 1
diff changeset
   473
         directory:'../projects/xxx') saveSpec"
claus
parents: 1
diff changeset
   474
! !
claus
parents: 1
diff changeset
   475
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   476
Project initialize!