Project.st
author claus
Thu, 02 Jun 1994 18:22:49 +0200
changeset 88 81dacba7a63a
parent 87 a0cc38a72871
child 89 7be0b86ef80f
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     1
'From Smalltalk/X, Version:2.6.4 on 27-Apr-1993 at 20:02:37'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
     2
a27a279701f8 Initial revision
claus
parents:
diff changeset
     3
Object subclass:#Project
2
claus
parents: 1
diff changeset
     4
         instanceVariableNames:'name changeSet views properties'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     5
         classVariableNames:'CurrentProject'
a27a279701f8 Initial revision
claus
parents:
diff changeset
     6
         poolDictionaries:''
a27a279701f8 Initial revision
claus
parents:
diff changeset
     7
         category:'System-Support'
a27a279701f8 Initial revision
claus
parents:
diff changeset
     8
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
     9
a27a279701f8 Initial revision
claus
parents:
diff changeset
    10
!Project class methodsFor:'accessing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    11
a27a279701f8 Initial revision
claus
parents:
diff changeset
    12
current
10
claus
parents: 2
diff changeset
    13
    "return the currently active project"
claus
parents: 2
diff changeset
    14
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    15
    ^ CurrentProject
a27a279701f8 Initial revision
claus
parents:
diff changeset
    16
a27a279701f8 Initial revision
claus
parents:
diff changeset
    17
    "Project current"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    18
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    19
a27a279701f8 Initial revision
claus
parents:
diff changeset
    20
current:aProject
10
claus
parents: 2
diff changeset
    21
    "set the currently active project"
claus
parents: 2
diff changeset
    22
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    23
    CurrentProject := aProject
a27a279701f8 Initial revision
claus
parents:
diff changeset
    24
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
    25
a27a279701f8 Initial revision
claus
parents:
diff changeset
    26
!Project class methodsFor:'instance creation'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    27
a27a279701f8 Initial revision
claus
parents:
diff changeset
    28
new
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
    29
    ^ self basicNew initialize
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    30
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
    31
a27a279701f8 Initial revision
claus
parents:
diff changeset
    32
!Project class methodsFor:'initialization'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    33
a27a279701f8 Initial revision
claus
parents:
diff changeset
    34
initialize
a27a279701f8 Initial revision
claus
parents:
diff changeset
    35
    CurrentProject isNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
    36
        CurrentProject := self new name:'System'
a27a279701f8 Initial revision
claus
parents:
diff changeset
    37
    ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
    38
a27a279701f8 Initial revision
claus
parents:
diff changeset
    39
    "Project initialize"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    40
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
    41
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
    42
!Project methodsFor:'initialization'!
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
    43
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
    44
initialize
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
    45
    self views:(OrderedCollection new).
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
    46
    self name:'a new Project'.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
    47
    self changeSet:(ChangeSet new).
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
    48
    self directory:'.'
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
    49
! !
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
    50
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    51
!Project methodsFor:'accessing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    52
a27a279701f8 Initial revision
claus
parents:
diff changeset
    53
views
a27a279701f8 Initial revision
claus
parents:
diff changeset
    54
    ^ views
a27a279701f8 Initial revision
claus
parents:
diff changeset
    55
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    56
a27a279701f8 Initial revision
claus
parents:
diff changeset
    57
views:aSetOfViews
a27a279701f8 Initial revision
claus
parents:
diff changeset
    58
    views := aSetOfViews
a27a279701f8 Initial revision
claus
parents:
diff changeset
    59
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    60
a27a279701f8 Initial revision
claus
parents:
diff changeset
    61
changeSet
a27a279701f8 Initial revision
claus
parents:
diff changeset
    62
    ^ changeSet
a27a279701f8 Initial revision
claus
parents:
diff changeset
    63
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    64
a27a279701f8 Initial revision
claus
parents:
diff changeset
    65
changeSet:aChangeSet
a27a279701f8 Initial revision
claus
parents:
diff changeset
    66
    changeSet := aChangeSet
a27a279701f8 Initial revision
claus
parents:
diff changeset
    67
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    68
a27a279701f8 Initial revision
claus
parents:
diff changeset
    69
name
a27a279701f8 Initial revision
claus
parents:
diff changeset
    70
    ^ name
a27a279701f8 Initial revision
claus
parents:
diff changeset
    71
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    72
a27a279701f8 Initial revision
claus
parents:
diff changeset
    73
name:aString
a27a279701f8 Initial revision
claus
parents:
diff changeset
    74
    name := aString
73
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
    75
! !
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
    76
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
    77
!Project methodsFor:'proerties'!
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
    78
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
    79
properties
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
    80
    ^ properties
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
    81
!
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
    82
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
    83
properties:p
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
    84
    properties := p
2
claus
parents: 1
diff changeset
    85
!
claus
parents: 1
diff changeset
    86
claus
parents: 1
diff changeset
    87
directory
73
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
    88
    ^ properties at:#directoryName ifAbsent:['.']
2
claus
parents: 1
diff changeset
    89
!
claus
parents: 1
diff changeset
    90
claus
parents: 1
diff changeset
    91
directory:aDirectoryName
claus
parents: 1
diff changeset
    92
    properties isNil ifTrue:[
claus
parents: 1
diff changeset
    93
        properties := Dictionary new
claus
parents: 1
diff changeset
    94
    ].
claus
parents: 1
diff changeset
    95
    properties at:#directoryName put:aDirectoryName
73
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
    96
!
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
    97
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
    98
type
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
    99
    "return the type of project"
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   100
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   101
    ^ properties at:#type ifAbsent:[#application]
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   102
!
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   103
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   104
type:aSymbol
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   105
    "set the projects type"
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   106
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   107
    (#(application library smalltalk) includes:aSymbol) ifFalse:[
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   108
        self warn:'invalid project type'.
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   109
        ^ self
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   110
    ].
a6640cc96199 *** empty log message ***
claus
parents: 13
diff changeset
   111
    properties at:#type put:aSymbol
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   112
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   113
10
claus
parents: 2
diff changeset
   114
!Project methodsFor:'views'!
claus
parents: 2
diff changeset
   115
claus
parents: 2
diff changeset
   116
addView:aView
claus
parents: 2
diff changeset
   117
    views add:aView
claus
parents: 2
diff changeset
   118
!
claus
parents: 2
diff changeset
   119
claus
parents: 2
diff changeset
   120
removeView:aView
claus
parents: 2
diff changeset
   121
    views remove:aView ifAbsent:[]
claus
parents: 2
diff changeset
   122
!
claus
parents: 2
diff changeset
   123
claus
parents: 2
diff changeset
   124
showViews
claus
parents: 2
diff changeset
   125
    self views notNil ifTrue:[
claus
parents: 2
diff changeset
   126
        self views do:[:aView |
claus
parents: 2
diff changeset
   127
            aView rerealize
claus
parents: 2
diff changeset
   128
        ]
claus
parents: 2
diff changeset
   129
    ].
claus
parents: 2
diff changeset
   130
!
claus
parents: 2
diff changeset
   131
claus
parents: 2
diff changeset
   132
hideViews
claus
parents: 2
diff changeset
   133
    self views notNil ifTrue:[
claus
parents: 2
diff changeset
   134
        self views do:[:aView |
claus
parents: 2
diff changeset
   135
            aView unrealize
claus
parents: 2
diff changeset
   136
        ]
claus
parents: 2
diff changeset
   137
    ].
claus
parents: 2
diff changeset
   138
! !
claus
parents: 2
diff changeset
   139
2
claus
parents: 1
diff changeset
   140
!Project methodsFor:'maintenance'!
claus
parents: 1
diff changeset
   141
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   142
buildProject
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   143
    OperatingSystem executeCommand:('cd ' , self directory , ' ; make')
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   144
!
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   145
2
claus
parents: 1
diff changeset
   146
createProjectFiles
claus
parents: 1
diff changeset
   147
    "actually, creates all files to do a make in the project directory"
claus
parents: 1
diff changeset
   148
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   149
    |dirName|
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   150
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   151
    dirName := properties at:#directoryName.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   152
    dirName asFilename exists ifFalse:[
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   153
        (self confirm:'create new projectDirectory: ' , dirName) ifFalse:[^ self].
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   154
        OperatingSystem recursiveCreateDirectory:dirName.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   155
    ].
2
claus
parents: 1
diff changeset
   156
    self createMakefile.
claus
parents: 1
diff changeset
   157
    self createSourcefiles.
claus
parents: 1
diff changeset
   158
    self createClassListFile.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   159
    self createAbbreviationFile.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   160
    self createProtoMakefile.
2
claus
parents: 1
diff changeset
   161
!
claus
parents: 1
diff changeset
   162
claus
parents: 1
diff changeset
   163
createSourcefiles
claus
parents: 1
diff changeset
   164
    "creates all st-source files"
claus
parents: 1
diff changeset
   165
claus
parents: 1
diff changeset
   166
    |d f s abbrev classSymbol|
claus
parents: 1
diff changeset
   167
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   168
    Transcript showCr:'creating sources'.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   169
2
claus
parents: 1
diff changeset
   170
    d := (properties at:#directoryName) asFilename.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   171
    (properties at:#classes ifAbsent:[#()]) do:[:aClassName |
2
claus
parents: 1
diff changeset
   172
        classSymbol := aClassName asSymbol.
claus
parents: 1
diff changeset
   173
        (Smalltalk includesKey:classSymbol) ifFalse:[
claus
parents: 1
diff changeset
   174
            Transcript showCr:('no class named ' , aClassName)
claus
parents: 1
diff changeset
   175
        ] ifTrue:[
claus
parents: 1
diff changeset
   176
            (Smalltalk at:classSymbol) autoload.
claus
parents: 1
diff changeset
   177
            abbrev := Smalltalk fileNameForClass:aClassName.
claus
parents: 1
diff changeset
   178
            f := d construct:(abbrev , '.st').
claus
parents: 1
diff changeset
   179
            s := f writeStream.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   180
            s isNil ifTrue:[
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   181
                self warn:'cannot create source file(s)'.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   182
                ^ self
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   183
            ].
2
claus
parents: 1
diff changeset
   184
            (Smalltalk at:classSymbol) fileOutOn:s.
claus
parents: 1
diff changeset
   185
            s close
claus
parents: 1
diff changeset
   186
        ]
claus
parents: 1
diff changeset
   187
    ].
claus
parents: 1
diff changeset
   188
!
claus
parents: 1
diff changeset
   189
claus
parents: 1
diff changeset
   190
createClassListFile
claus
parents: 1
diff changeset
   191
    "creates classList.stc - assume all loaded now should go into executable"
claus
parents: 1
diff changeset
   192
claus
parents: 1
diff changeset
   193
    |d f in out|
claus
parents: 1
diff changeset
   194
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   195
    Transcript showCr:'creating classList.stc'.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   196
2
claus
parents: 1
diff changeset
   197
    d := (properties at:#directoryName) asFilename.
claus
parents: 1
diff changeset
   198
    f := d construct:'classList.stc'.
claus
parents: 1
diff changeset
   199
    out := f writeStream.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   200
    out isNil ifTrue:[
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   201
        self warn:'cannot create classList file'.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   202
        ^ self
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   203
    ].
2
claus
parents: 1
diff changeset
   204
claus
parents: 1
diff changeset
   205
    in := './classList.stc' asFilename readStream.
claus
parents: 1
diff changeset
   206
    out nextPutAll:in contents asString.
claus
parents: 1
diff changeset
   207
    in close.
claus
parents: 1
diff changeset
   208
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   209
    (properties at:#classes ifAbsent:[Smalltalk allClasses collect:[:aClass| aClass name asSymbol]]) do:[:aClassSymbol |
2
claus
parents: 1
diff changeset
   210
        (Smalltalk includesKey:aClassSymbol) ifFalse:[
claus
parents: 1
diff changeset
   211
            Transcript showCr:('no class named ' , aClassSymbol)
claus
parents: 1
diff changeset
   212
        ] ifTrue:[
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   213
"
2
claus
parents: 1
diff changeset
   214
            (Smalltalk at:aClassSymbol) autoload.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   215
"
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   216
            (Smalltalk at:aClassSymbol) isLoaded ifTrue:[
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   217
                out nextPutAll:aClassSymbol; cr
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   218
            ]
2
claus
parents: 1
diff changeset
   219
        ]
claus
parents: 1
diff changeset
   220
    ].
claus
parents: 1
diff changeset
   221
    out close.
claus
parents: 1
diff changeset
   222
!
claus
parents: 1
diff changeset
   223
claus
parents: 1
diff changeset
   224
createAbbreviationFile
claus
parents: 1
diff changeset
   225
    "creates abbrev.stc"
claus
parents: 1
diff changeset
   226
claus
parents: 1
diff changeset
   227
    |d f s abbrev|
claus
parents: 1
diff changeset
   228
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   229
    Transcript showCr:'creating abbrev.stc'.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   230
2
claus
parents: 1
diff changeset
   231
    d := (properties at:#directoryName) asFilename.
claus
parents: 1
diff changeset
   232
    f := d construct:'abbrev.stc'.
claus
parents: 1
diff changeset
   233
    s := f writeStream.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   234
    s isNil ifTrue:[
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   235
        self warn:'cannot create abbreviation file'.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   236
        ^ self
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   237
    ].
2
claus
parents: 1
diff changeset
   238
    Smalltalk allClassesDo:[:aClass |
claus
parents: 1
diff changeset
   239
        (aClass isSubclassOf:Autoload) ifFalse:[
claus
parents: 1
diff changeset
   240
            abbrev := Smalltalk fileNameForClass:aClass name.
claus
parents: 1
diff changeset
   241
            abbrev ~= aClass name ifTrue:[
claus
parents: 1
diff changeset
   242
                s nextPutAll:aClass name; tab; nextPutAll:abbrev; cr
claus
parents: 1
diff changeset
   243
            ]
claus
parents: 1
diff changeset
   244
        ].
claus
parents: 1
diff changeset
   245
    ].
claus
parents: 1
diff changeset
   246
    s close.
claus
parents: 1
diff changeset
   247
!
claus
parents: 1
diff changeset
   248
claus
parents: 1
diff changeset
   249
createMakefile
claus
parents: 1
diff changeset
   250
    "creates an initial makefile, which will recreate a correct
claus
parents: 1
diff changeset
   251
     Makefile, then compile all"
claus
parents: 1
diff changeset
   252
claus
parents: 1
diff changeset
   253
    |d f out in|
claus
parents: 1
diff changeset
   254
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   255
    Transcript showCr:'creating Makefile'.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   256
2
claus
parents: 1
diff changeset
   257
    d := (properties at:#directoryName) asFilename.
claus
parents: 1
diff changeset
   258
    f := d construct:'Makefile'.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   259
    f exists ifTrue:[
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   260
        f renameTo:(d construct:'Makefile.bak')
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   261
    ].
2
claus
parents: 1
diff changeset
   262
    out := f writeStream.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   263
    out isNil ifTrue:[
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   264
        self warn:'cannot create Makefile'.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   265
        ^ self
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   266
    ].
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   267
    in := Smalltalk systemFileStreamFor:'rules/stdHeader'.
2
claus
parents: 1
diff changeset
   268
    out nextPutAll:in contents asString.
claus
parents: 1
diff changeset
   269
    in close.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   270
    out nextPutAll:'#TOP=/usr/local/lib/smalltalk'; cr.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   271
    out nextPutAll:'TOP=../..'; cr.
2
claus
parents: 1
diff changeset
   272
    out nextPutAll:'target:'; cr.
claus
parents: 1
diff changeset
   273
    out tab; nextPutAll:'touch Make.proto'; cr.
claus
parents: 1
diff changeset
   274
    out tab; nextPutAll:'$(MAKE) Makefile'; cr.
claus
parents: 1
diff changeset
   275
    out tab; nextPutAll:'make'; cr; cr.
claus
parents: 1
diff changeset
   276
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   277
    in := Smalltalk systemFileStreamFor:'configurations/myConf'.
2
claus
parents: 1
diff changeset
   278
    out nextPutAll:in contents asString.
claus
parents: 1
diff changeset
   279
    in close.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   280
    in := Smalltalk systemFileStreamFor:'rules/stdRules'.
2
claus
parents: 1
diff changeset
   281
    out nextPutAll:in contents asString.
claus
parents: 1
diff changeset
   282
    in close.
claus
parents: 1
diff changeset
   283
    out close
claus
parents: 1
diff changeset
   284
!
claus
parents: 1
diff changeset
   285
claus
parents: 1
diff changeset
   286
createProtoMakefile
claus
parents: 1
diff changeset
   287
    "creates a Make.proto file"
claus
parents: 1
diff changeset
   288
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   289
    |d f s type appName|
2
claus
parents: 1
diff changeset
   290
claus
parents: 1
diff changeset
   291
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   292
    Transcript showCr:'creating Make.proto'.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   293
2
claus
parents: 1
diff changeset
   294
    d := (properties at:#directoryName) asFilename.
claus
parents: 1
diff changeset
   295
    f := d construct:'Make.proto'.
claus
parents: 1
diff changeset
   296
    f exists ifTrue:[
claus
parents: 1
diff changeset
   297
        f renameTo:(d construct:'Make.proto.bak')
claus
parents: 1
diff changeset
   298
    ].
claus
parents: 1
diff changeset
   299
    s := f writeStream.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   300
    s isNil ifTrue:[
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   301
        self warn:'cannot create prototype Makefile'.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   302
        ^ self
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   303
    ].
2
claus
parents: 1
diff changeset
   304
    s nextPutAll:'#
claus
parents: 1
diff changeset
   305
# created by Smalltalk
claus
parents: 1
diff changeset
   306
#
claus
parents: 1
diff changeset
   307
SHELL=/bin/sh
claus
parents: 1
diff changeset
   308
claus
parents: 1
diff changeset
   309
SUBDIRS=
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   310
#TOP=/usr/local/lib/smalltalk
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   311
#LIBRUNDIR=$(TOP)/lib
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   312
#LIBBASICDIR=$(TOP)/lib
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   313
#LIBVIEWDIR=$(TOP)/lib
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   314
#LIBWIDGDIR=$(TOP)/lib
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   315
#LIBCOMPDIR=$(TOP)/lib
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   316
TOP=../..
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   317
LIBRUNDIR=$(TOP)/librun
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   318
LIBBASICDIR=$(TOP)/libbasic
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   319
LIBVIEWDIR=$(TOP)/libview
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   320
LIBWIDGDIR=$(TOP)/libwidg
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   321
LIBCOMPDIR=$(TOP)/libcomp
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   322
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   323
LIBRUN=$(LIBRUNDIR)/librun.$(A)
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   324
LIBBASICOBJ=$(LIBBASICDIR)/libbasic$(OBJNAME)
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   325
LIBVIEWOBJ=$(LIBVIEWDIR)/libview$(OBJNAME)
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   326
LIBWIDGOBJ=$(LIBWIDGDIR)/libwidg$(OBJNAME)
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   327
LIBCOMPOBJ=$(LIBCOMPDIR)/libcomp$(OBJNAME)
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   328
2
claus
parents: 1
diff changeset
   329
I=$(TOP)/include
claus
parents: 1
diff changeset
   330
SYSLIBS = -lX11
claus
parents: 1
diff changeset
   331
claus
parents: 1
diff changeset
   332
STC=stc
claus
parents: 1
diff changeset
   333
CFLAGS  = -I$(INCLUDE) $(OS) $(OPT) $(DBG) $(DEFS)
claus
parents: 1
diff changeset
   334
STCFLAGS= -H. -I. -I$(INCLUDE) $(STCOPT)
claus
parents: 1
diff changeset
   335
claus
parents: 1
diff changeset
   336
'.
claus
parents: 1
diff changeset
   337
claus
parents: 1
diff changeset
   338
    type := properties at:#projectType ifAbsent:[#executable].
claus
parents: 1
diff changeset
   339
    type := properties at:#projectType ifAbsent:[#executable].
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   340
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   341
    appName := properties at:#applicationName ifAbsent:['app'].
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   342
    s nextPutAll:'LIBNAME=lib' , appName; cr.
2
claus
parents: 1
diff changeset
   343
claus
parents: 1
diff changeset
   344
    type == #executable ifTrue:[
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   345
        s nextPutAll:'PROGS = ' , appName; cr
2
claus
parents: 1
diff changeset
   346
    ].
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   347
    s nextPutAll:'STARTUP_CLASS=' , (properties at:#startupClass ifAbsent:['Smalltalk']).
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   348
    s cr.
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   349
    s nextPutAll:'STARTUP_SELECTOR="' , (properties at:#startupSelector ifAbsent:['start']).
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   350
    s nextPutAll:'"'; cr.
2
claus
parents: 1
diff changeset
   351
claus
parents: 1
diff changeset
   352
    s nextPutAll:'OBJS='.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   353
    (properties at:#classes ifAbsent:[#()]) do:[:aClassName |
2
claus
parents: 1
diff changeset
   354
        |abbrev|
claus
parents: 1
diff changeset
   355
claus
parents: 1
diff changeset
   356
        s nextPutAll:' \'. s cr.
claus
parents: 1
diff changeset
   357
        abbrev := Smalltalk fileNameForClass:aClassName.
claus
parents: 1
diff changeset
   358
        s nextPutAll:'  '; nextPutAll:abbrev; nextPutAll:'.o'.
claus
parents: 1
diff changeset
   359
    ].
claus
parents: 1
diff changeset
   360
    s cr; cr.
claus
parents: 1
diff changeset
   361
claus
parents: 1
diff changeset
   362
claus
parents: 1
diff changeset
   363
    type == #executable ifTrue:[
claus
parents: 1
diff changeset
   364
        s nextPutAll:'all:: $(PROGS)'; cr.
claus
parents: 1
diff changeset
   365
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   366
        s nextPutAll:appName.
2
claus
parents: 1
diff changeset
   367
        s nextPutAll:':: main.o classList.o $(OBJS)'; cr.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   368
        s tab;      nextPutAll:'$(LD) $(ST_LDFLAG) $(LDFLAGS) -o ';
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   369
                    nextPutAll:appName;
2
claus
parents: 1
diff changeset
   370
                    nextPutAll:' \'; cr.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   371
        s tab; tab; nextPutAll:'$(CRT0) main.$(O) classList.$(O) $(OBJS) $(EXTRA_OBJ) $(LIBOBJS) \'; cr.
2
claus
parents: 1
diff changeset
   372
        s tab; tab; nextPutAll:'$(LIBRUNDIR)/hidata.o $(LIBRUN) \'; cr.
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   373
        s tab; tab; nextPutAll:'$(MATHLIB) $(EXTRALIBS) -lXext $(SYSLIBS) $(OTHERLIBS) $(CRTN)'; cr.
2
claus
parents: 1
diff changeset
   374
    ].
claus
parents: 1
diff changeset
   375
claus
parents: 1
diff changeset
   376
    s close
claus
parents: 1
diff changeset
   377
! !
claus
parents: 1
diff changeset
   378
claus
parents: 1
diff changeset
   379
!Project methodsFor:'specifications'!
claus
parents: 1
diff changeset
   380
claus
parents: 1
diff changeset
   381
readSpec
claus
parents: 1
diff changeset
   382
    |s chunk fileName|
claus
parents: 1
diff changeset
   383
claus
parents: 1
diff changeset
   384
    fileName := (properties at:#directoryName) asFilename construct:'.project'.
claus
parents: 1
diff changeset
   385
    s := fileName readStream.
claus
parents: 1
diff changeset
   386
    s isNil ifTrue:[^ self].
claus
parents: 1
diff changeset
   387
    [s atEnd] whileFalse:[
claus
parents: 1
diff changeset
   388
        chunk := s nextChunk.
claus
parents: 1
diff changeset
   389
        Compiler evaluate:chunk receiver:properties notifying:nil
claus
parents: 1
diff changeset
   390
    ].
claus
parents: 1
diff changeset
   391
    s close.
claus
parents: 1
diff changeset
   392
claus
parents: 1
diff changeset
   393
    "(Project new directory:'../projects/Clock') readSpec"
claus
parents: 1
diff changeset
   394
!
claus
parents: 1
diff changeset
   395
claus
parents: 1
diff changeset
   396
saveSpec
claus
parents: 1
diff changeset
   397
    |f d s|
claus
parents: 1
diff changeset
   398
claus
parents: 1
diff changeset
   399
    d := (properties at:#directoryName) asFilename.
claus
parents: 1
diff changeset
   400
    d exists ifFalse:[
claus
parents: 1
diff changeset
   401
        self error:'directory does not exist'.
claus
parents: 1
diff changeset
   402
        ^ self
claus
parents: 1
diff changeset
   403
    ].
claus
parents: 1
diff changeset
   404
    f := d construct:'.project'.
claus
parents: 1
diff changeset
   405
    s := f writeStream.
claus
parents: 1
diff changeset
   406
    s isNil ifTrue:[^ self].
claus
parents: 1
diff changeset
   407
    properties associationsDo:[:aProp |
claus
parents: 1
diff changeset
   408
        (aProp == #directoryName) ifFalse:[
claus
parents: 1
diff changeset
   409
            s nextChunkPut:('self at:' , aProp key storeString, 
claus
parents: 1
diff changeset
   410
                               ' put:' , aProp value storeString).
claus
parents: 1
diff changeset
   411
            s cr
claus
parents: 1
diff changeset
   412
        ]
claus
parents: 1
diff changeset
   413
    ].
claus
parents: 1
diff changeset
   414
    s close
claus
parents: 1
diff changeset
   415
claus
parents: 1
diff changeset
   416
    "((Project new directory:'../projects/Clock') readSpec
claus
parents: 1
diff changeset
   417
         directory:'../projects/xxx') saveSpec"
claus
parents: 1
diff changeset
   418
! !
claus
parents: 1
diff changeset
   419
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   420
Project initialize!