Tools__ProjectBuilderAssistantApplication.st
changeset 3320 3a3e4ca40b7c
parent 3309 cc9feb931733
child 3335 217dad1c84d0
equal deleted inserted replaced
3319:97fd83492529 3320:3a3e4ca40b7c
     1 "{ Encoding: utf8 }"
       
     2 
       
     3 "
     1 "
     4  COPYRIGHT (c) 2009 by eXept Software AG
     2  COPYRIGHT (c) 2009 by eXept Software AG
     5               All Rights Reserved
     3               All Rights Reserved
     6 
     4 
     7  This software is furnished under a license and may be used
     5  This software is furnished under a license and may be used
    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