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