73 |
71 |
74 help |
72 help |
75 " |
73 " |
76 Packager - A Standalone-Executable Builder and Packager |
74 Packager - A Standalone-Executable Builder and Packager |
77 |
75 |
78 This assistant-application allows for standalone applications to be built very easily. |
76 This assistant-application allows for standalone applications to be built very easily. |
79 It will generate all required classes, files, start the compilation process, |
77 It will generate all required classes, files, start the compilation process, |
80 generate a self-installable executable with a few mouse clicks. |
78 generate a self-installable executable with a few mouse clicks. |
81 |
79 |
82 A simple demo application like the famous 'Hello World' can be generated in a few minutes. |
80 A simple demo application like the famous 'Hello World' can be generated in a few minutes. |
83 |
81 |
84 Prerequisites |
82 Prerequisites |
85 |
83 |
86 * Windows Users: |
84 * Windows Users: |
87 Please install either the 'Borland Free Commandline Compiler Tools (bcc32)' |
85 Please install either the 'Borland Free Commandline Compiler Tools (bcc32)' |
88 or the 'Microsoft Visual-C++' package (also free). |
86 or the 'Microsoft Visual-C++' package (also free). |
89 In addition, the 'NullSoft NSIS-Installer Package' is required. |
87 In addition, the 'NullSoft NSIS-Installer Package' is required. |
90 |
88 |
91 Due to limitations and bugs in the Visual-C++ compiler (limit on the size of |
89 Due to limitations and bugs in the Visual-C++ compiler (limit on the size of |
92 string-constants), some Smalltalk code is still not compilable |
90 string-constants), some Smalltalk code is still not compilable |
93 (currently, this affects classes which contain image-resource methods for big images). |
91 (currently, this affects classes which contain image-resource methods for big images). |
94 Although microsoft is doing their best (a relative measure) to make things better |
92 Although microsoft is doing their best (a relative measure) to make things better |
95 (they increase the string-limit with every new release), they still seem to be unable |
93 (they increase the string-limit with every new release), they still seem to be unable |
96 to figure out how ti use malloc for string-data). |
94 to figure out how ti use malloc for string-data). |
97 We are patiently waiting for a real fix and still using bcc in the meanwhile. |
95 We are patiently waiting for a real fix and still using bcc in the meanwhile. |
98 Therefore, we recommend using the borland compiler suite. |
96 Therefore, we recommend using the borland compiler suite. |
99 Please install it at its standard location ('C:\Borland') as our makefiles might |
97 Please install it at its standard location ('C:\Borland') as our makefiles might |
100 still contain hard-coded pathes (yes, we are ashamed about this). |
98 still contain hard-coded paths (yes, we are ashamed about this). |
101 |
99 |
102 * Unix Users: |
100 * Unix Users: |
103 You should already have the gcc compile suite (including all required header files) |
101 You should already have the gcc compile suite (including all required header files) |
104 installed and ready to use. For a lack of time on our side, there is currently no |
102 installed and ready to use. For a lack of time on our side, there is currently no |
105 self-installer support for Unix. The packager will generate a zipped tar file, |
103 self-installer support for Unix. The packager will generate a zipped tar file, |
106 which must be deployed and unpacked for use. This may change in the near future. |
104 which must be deployed and unpacked for use. This may change in the near future. |
107 |
105 |
108 Packages, Projects, PackageIDs and ProjectDefinitions |
106 Packages, Projects, PackageIDs and ProjectDefinitions |
109 |
107 |
110 Smalltalk basically uses two objects for packaging: |
108 Smalltalk basically uses two objects for packaging: |
111 |
109 |
112 * PackageIDs (also called ProjectID's occasionally) |
110 * PackageIDs (also called ProjectID's occasionally) |
113 * ProjectDefinitions |
111 * ProjectDefinitions |
114 |
112 |
115 Older ST/X versions used instances of a Project class - this is now obsolete and |
113 Older ST/X versions used instances of a Project class - this is now obsolete and |
116 removed from the system (although there are still some minor uses of it, |
114 removed from the system (although there are still some minor uses of it, |
117 which might remain there for backward compatibility for some time, as some customers |
115 which might remain there for backward compatibility for some time, as some customers |
118 have built their own packaging scheme around it). |
116 have built their own packaging scheme around it). |
119 |
117 |
120 PackageIDs |
118 PackageIDs |
121 |
119 |
122 These are simple symbols and are attached to classes and methods. If a method has |
120 These are simple symbols and are attached to classes and methods. If a method has |
123 a packageID different from its class, it is called an extension method. |
121 a packageID different from its class, it is called an extension method. |
124 PackageIDs must have a certain fixed format: they always contain exactly two parts, |
122 PackageIDs must have a certain fixed format: they always contain exactly two parts, |
125 which are separated by a colon character: the module and the directory part. |
123 which are separated by a colon character: the module and the directory part. |
126 The module is used as main-selector on where and how the source code repository is |
124 The module is used as main-selector on where and how the source code repository is |
127 accessed. The directory is a path below that repository. If checked out into the local |
125 accessed. The directory is a path below that repository. If checked out into the local |
128 filesystem, the module defines the top-level directory. Thus, if a packageID is |
126 filesystem, the module defines the top-level directory. Thus, if a packageID is |
129 'stx:libbasic', the corresponding sources will be found in the repository associated |
127 'stx:libbasic', the corresponding sources will be found in the repository associated |
130 to the 'stx' module, under the directory 'libbasic'. |
128 to the 'stx' module, under the directory 'libbasic'. |
131 In the local file system, it will be found under 'stx/libbasic'. |
129 In the local file system, it will be found under 'stx/libbasic'. |
132 As another example, if the packageID is 'exept:expecco/plugins/foo', |
130 As another example, if the packageID is 'exept:expecco/plugins/foo', |
133 the repository is whichever is associated with the 'exept' module, and the subdirectory |
131 the repository is whichever is associated with the 'exept' module, and the subdirectory |
134 is 'expecco/plugins/foo'. The local path to the sourcefiles would be |
132 is 'expecco/plugins/foo'. The local path to the sourcefiles would be |
135 'exept/expecco/plugins/foo'. |
133 'exept/expecco/plugins/foo'. |
136 |
134 |
137 Please notice that it does make sense to associate different repositories to different |
135 Please notice that it does make sense to associate different repositories to different |
138 modules: for example, you could setup the sourceCodeManager to use CVS access to the |
136 modules: for example, you could setup the sourceCodeManager to use CVS access to the |
139 exept repository for everything under the 'stx' module, |
137 exept repository for everything under the 'stx' module, |
140 and at the same time, use a local SVN repository for everything under the 'myCompany' |
138 and at the same time, use a local SVN repository for everything under the 'myCompany' |
141 module. |
139 module. |
142 |
140 |
143 ProjectDefinitions |
141 ProjectDefinitions |
144 |
142 |
145 These describe the contents of a project, such as the classes to include, |
143 These describe the contents of a project, such as the classes to include, |
146 the set of extension methods, any additional compilation information. |
144 the set of extension methods, any additional compilation information. |
147 ProjectDefinitions come in 3 flavours: |
145 ProjectDefinitions come in 3 flavours: |
148 |
146 |
149 * GUI Application Definition |
147 * GUI Application Definition |
150 * non-GUI Application Definition |
148 * non-GUI Application Definition |
151 * ClassLibrary Definition |
149 * ClassLibrary Definition |
152 |
150 |
153 ProjectDefinitions are stored and managed as class-instances, located as subclasses |
151 ProjectDefinitions are stored and managed as class-instances, located as subclasses |
154 of one of ApplicationDefinition or LibraryDefinition. |
152 of one of ApplicationDefinition or LibraryDefinition. |
155 As classes, they are themself managed, compiled and packaged as part of the project |
153 As classes, they are themself managed, compiled and packaged as part of the project |
156 (and also have the same PackageID as their components). |
154 (and also have the same PackageID as their components). |
157 They are also treated like any other class w.r.t. source code management. |
155 They are also treated like any other class w.r.t. source code management. |
158 |
156 |
159 Packaging |
157 Packaging |
160 |
158 |
161 All classes and extension methods belonging to a single package are supposed to be |
159 All classes and extension methods belonging to a single package are supposed to be |
162 loaded (and possibly unloaded) together. They are also usually deployed inside a single |
160 loaded (and possibly unloaded) together. They are also usually deployed inside a single |
163 dynamic link library ('dll', for short). In the Unix world, these are called |
161 dynamic link library ('dll', for short). In the Unix world, these are called |
164 'shared object' or 'so'. |
162 'shared object' or 'so'. |
165 Finally, they are stored in a common directory both on the local file system and in a |
163 Finally, they are stored in a common directory both on the local file system and in a |
166 source code repository (CVS, SVN, etc.). |
164 source code repository (CVS, SVN, etc.). |
167 |
165 |
168 Structure of a Project |
166 Structure of a Project |
169 |
167 |
170 The artefacts as manipulated by the packager are: |
168 The artefacts as manipulated by the packager are: |
171 |
169 |
172 * the ProjectDefinition class |
170 * the ProjectDefinition class |
173 This defines the type of application (GUI / non-GUI), |
171 This defines the type of application (GUI / non-GUI), |
174 its contents (i.e. the set of classes to be included in the binary itself and |
172 its contents (i.e. the set of classes to be included in the binary itself and |
175 the set of library-dll's to be included in the deployed package), |
173 the set of library-dll's to be included in the deployed package), |
176 and some other metadata, such as icon, title etc. |
174 and some other metadata, such as icon, title etc. |
177 |
175 |
178 * the ApplicationModel class |
176 * the ApplicationModel class |
179 This defines the GUI, and is typically created using the UI-Painter. |
177 This defines the GUI, and is typically created using the UI-Painter. |
180 |
178 |
181 * the Startup class |
179 * the Startup class |
182 This is the first class which gets control when the executable is started; |
180 This is the first class which gets control when the executable is started; |
183 it can analyze the command line arguments, read patches or updates, |
181 it can analyze the command line arguments, read patches or updates, |
184 start background ptocesses, and will eventually open the applications GUI. |
182 start background ptocesses, and will eventually open the applications GUI. |
185 |
183 |
186 Build Procedure |
184 Build Procedure |
187 |
185 |
188 All of the three components above can be generated by the packager to provide an |
186 All of the three components above can be generated by the packager to provide an |
189 initial framework for further work. |
187 initial framework for further work. |
190 |
188 |
191 After the definition of those classes, all required files are stored in a temporary |
189 After the definition of those classes, all required files are stored in a temporary |
192 build directory. This means that the above classes are filed out, |
190 build directory. This means that the above classes are filed out, |
193 and make- and other support files are generated. |
191 and make- and other support files are generated. |
194 |
192 |
195 Finally, the actual build process is started. This requires an external C-compiler. |
193 Finally, the actual build process is started. This requires an external C-compiler. |
196 Under windows, both Borland-C (free download available via the internet) and Microsoft's |
194 Under windows, both Borland-C (free download available via the internet) and Microsoft's |
197 Visual-C++ (also available for free) can be used (the later with some limitations as explained above). |
195 Visual-C++ (also available for free) can be used (the later with some limitations as explained above). |
198 |
196 |
199 A self-installing executable is built using the NullSoft NSIS package. |
197 A self-installing executable is built using the NullSoft NSIS package. |
200 This is also required to be installed before the packager is started. |
198 This is also required to be installed before the packager is started. |
201 |
199 |
202 After the build, all required files are packaged in a single install-file. |
200 After the build, all required files are packaged in a single install-file. |
203 This is called 'MyApplicationSetup.exe' and found in the project-specific subdirectory |
201 This is called 'MyApplicationSetup.exe' and found in the project-specific subdirectory |
204 of the build directory. For deployment, this single file has to be delivered to a customer |
202 of the build directory. For deployment, this single file has to be delivered to a customer |
205 and executed there. |
203 and executed there. |
206 |
204 |
207 Summary: It has NEVER been easier to create a GUI application with Smalltalk. |
205 Summary: It has NEVER been easier to create a GUI application with Smalltalk. |
208 " |
206 " |
209 ! ! |
207 ! ! |
210 |
208 |
211 !ProjectBuilderAssistantApplication class methodsFor:'assistant pages spec'! |
209 !ProjectBuilderAssistantApplication class methodsFor:'assistant pages spec'! |
212 |
210 |