diff --git a/installer/lib/launch4j/LICENSE.txt b/installer/lib/launch4j/LICENSE.txt new file mode 100644 index 0000000000000000000000000000000000000000..3912109b5cd65a68039d473c11c9f7ac2303e06d --- /dev/null +++ b/installer/lib/launch4j/LICENSE.txt @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/installer/lib/launch4j/bin/COPYING b/installer/lib/launch4j/bin/COPYING new file mode 100644 index 0000000000000000000000000000000000000000..60549be514af76c5db0c17ce6bbe01b2f81e2d9e --- /dev/null +++ b/installer/lib/launch4j/bin/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) 19yy <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/installer/lib/launch4j/bin/ld b/installer/lib/launch4j/bin/ld new file mode 100644 index 0000000000000000000000000000000000000000..1d3f4091d4ac22d02ed8e49377aaa787e6394abb Binary files /dev/null and b/installer/lib/launch4j/bin/ld differ diff --git a/installer/lib/launch4j/bin/windres b/installer/lib/launch4j/bin/windres new file mode 100644 index 0000000000000000000000000000000000000000..a67a74be4b63e3018a21eb17e1b4790476bba567 Binary files /dev/null and b/installer/lib/launch4j/bin/windres differ diff --git a/installer/lib/launch4j/build.xml b/installer/lib/launch4j/build.xml new file mode 100644 index 0000000000000000000000000000000000000000..42c77a225f04a9365f2eaba3d5e71851083f5bc0 --- /dev/null +++ b/installer/lib/launch4j/build.xml @@ -0,0 +1,99 @@ +<project name="launch4j" default="compile" basedir="."> + <property name="versionNumber" value="2.0.0.0" /> + <property name="version" value="2.0.RC3" /> + <property name="src" location="src" /> + <property name="lib" location="lib" /> + <property name="build" location="build" /> + <property name="dist" location="${user.home}/dist/${ant.project.name}" /> + <property name="jar" location="./${ant.project.name}.jar" /> + <property name="launch4j.dir" location="." /> + + <path id="dist.classpath"> + <pathelement path="${build}" /> + <fileset dir="${lib}"> + <include name="**/*.jar" /> + </fileset> + </path> + + <target name="init"> + <tstamp /> + <mkdir dir="${build}" /> + <mkdir dir="${dist}" /> + </target> + + <target name="compile" depends="init" description="compile the source"> + <javac srcdir="${src}" destdir="${build}" classpathref="dist.classpath" source="1.4" debug="on" /> + <copy todir="${build}/images"> + <fileset dir="${src}/images"> + <include name="**/*" /> + </fileset> + </copy> + </target> + + <target name="jar" depends="compile" description="create jar"> + <fileset dir="${lib}" id="lib.dist.fileset"> + <include name="**/*.jar" /> + </fileset> + <pathconvert pathsep=" " property="dist.classpath" refid="lib.dist.fileset"> + <map from="${lib}" to="./lib" /> + </pathconvert> + <!-- Put everything in ${build} into a jar file --> + <jar jarfile="${jar}"> + <fileset dir="${build}" includes="**/*" /> + <manifest> + <attribute name="Main-Class" value="net.sf.launch4j.Main" /> + <attribute name="Class-Path" value=". ${dist.classpath}" /> + </manifest> + </jar> + <jar jarfile="./launcher.jar"> + <fileset dir="${build}" includes="net/sf/launch4j/Launcher.class" /> + <manifest> + <attribute name="Main-Class" value="net.sf.launch4j.Launcher" /> + <attribute name="Class-Path" value=". ./${ant.project.name}.jar ${dist.classpath}" /> + </manifest> + </jar> + </target> + + <target name="demo" depends="jar" description="build the demos"> + <ant dir="./demo/ConsoleApp" inheritAll="false" /> + <ant dir="./demo/SimpleApp" inheritAll="false" /> + </target> + + <target name="dist.linux" depends="jar" description="generate the Linux distribution"> + <!-- changes executables to default mode! + <tar tarfile="${dist}/${ant.project.name}-${version}-linux.tgz" basedir="." + compression="gzip" excludes="**/build/** **/CVS/** **/*.exe"/> --> + <exec executable="tar" failonerror="true"> + <arg line="-czC .. --exclude build --exclude CVS --exclude *.bat --exclude *.exe --exclude launch4j/l4j --exclude launch4j/launcher.jar -f ${dist}/${ant.project.name}-${version}-linux.tgz ./launch4j" /> + </exec> + </target> + + <target name="dist.win32" depends="jar" description="generate the Windows distribution"> + <taskdef name="launch4j" classname="net.sf.launch4j.ant.Launch4jTask" classpath="${build}:./lib/xstream.jar" /> + <launch4j configFile="./l4j/launch4j.xml" + fileVersion="${versionNumber}" txtFileVersion="${version}" + productVersion="${versionNumber}" txtProductVersion="${version}" /> + <launch4j configFile="./l4j/launch4jc.xml" + fileVersion="${versionNumber}" txtFileVersion="${version}" + productVersion="${versionNumber}" txtProductVersion="${version}" /> + <zip destfile="${dist}/${ant.project.name}-${version}-win32.zip"> + <zipfileset dir="." prefix="launch4j" excludes="**/build/** **/CVS/** bin/ld bin/windres l4j/** launch4j launcher.jar" /> + </zip> + </target> + + <target name="dist" depends="demo, dist.linux, dist.win32, clean" description="generate all distributions" /> + + <target name="clean" description="clean up"> + <delete file="${jar}" /> + <delete file="./launcher.jar" /> + <delete> + <fileset dir="." includes="*.exe"/> + </delete> + <ant dir="./demo/ConsoleApp" target="clean" inheritAll="false" /> + <ant dir="./demo/SimpleApp" target="clean" inheritAll="false" /> + </target> + + <target name="clean.all" depends="clean" description="clean up"> + <delete dir="${build}" /> + </target> +</project> diff --git a/installer/lib/launch4j/demo/ConsoleApp/.cvsignore b/installer/lib/launch4j/demo/ConsoleApp/.cvsignore new file mode 100644 index 0000000000000000000000000000000000000000..378eac25d311703f3f2cd456d8036da525cd0366 --- /dev/null +++ b/installer/lib/launch4j/demo/ConsoleApp/.cvsignore @@ -0,0 +1 @@ +build diff --git a/installer/lib/launch4j/demo/ConsoleApp/ConsoleApp.jar b/installer/lib/launch4j/demo/ConsoleApp/ConsoleApp.jar new file mode 100644 index 0000000000000000000000000000000000000000..59b3e8b7e8c5caf8061dfdbed26320285af26d53 Binary files /dev/null and b/installer/lib/launch4j/demo/ConsoleApp/ConsoleApp.jar differ diff --git a/installer/lib/launch4j/demo/ConsoleApp/build.xml b/installer/lib/launch4j/demo/ConsoleApp/build.xml new file mode 100644 index 0000000000000000000000000000000000000000..b06bb133ae088928094d0942280519939019e183 --- /dev/null +++ b/installer/lib/launch4j/demo/ConsoleApp/build.xml @@ -0,0 +1,59 @@ +<project name="ConsoleApp" default="exe" basedir="."> + <property name="src" location="src"/> + <property name="lib" location="lib"/> + <property name="build" location="build"/> + <property name="launch4j.dir" location="../.." /> + + <path id="dist.classpath"> + <pathelement path="${build}"/> + <fileset dir="${lib}"> + <include name="**/*.jar"/> + </fileset> + </path> + + <target name="init"> + <tstamp/> + <mkdir dir="${build}"/> + </target> + + <target name="compile" depends="init" description="compile the source"> + <javac srcdir="${src}" destdir="${build}" classpathref="dist.classpath" debug="on"/> + </target> + + <target name="jar" depends="compile" description="create the jar"> + <fileset dir="${lib}" id="lib.dist.fileset"> + <include name="**/*.jar"/> + </fileset> + <pathconvert pathsep=" " property="dist.classpath" refid="lib.dist.fileset"> + <map from="${lib}" to=".\lib"/> + </pathconvert> + <!-- Put everything in ${build} into a jar file --> + <jar jarfile="${ant.project.name}.jar"> + <fileset dir="${build}" includes="**/*"/> + <manifest> + <!-- SET YOUR MAIN CLASS HERE --> + <attribute name="Main-Class" value="net.sf.launch4j.example.ConsoleApp"/> + <attribute name="Class-Path" value=". ${dist.classpath}"/> + </manifest> + </jar> + </target> + + <target name="exe" depends="jar"> + <taskdef name="launch4j" + classname="net.sf.launch4j.ant.Launch4jTask" + classpath="${launch4j.dir}/launch4j.jar + :${launch4j.dir}/lib/xstream.jar" /> + <launch4j> + <config headerType="1" jar="ConsoleApp.jar" outfile="ConsoleApp.exe" + errTitle="ConsoleApp" chdir="." customProcName="true" icon="l4j/ConsoleApp.ico"> + <jre minVersion="1.4.0" /> + </config> + </launch4j> + </target> + + <target name="clean" description="clean up" > + <delete dir="${build}"/> + <delete file="${ant.project.name}.jar"/> + <delete file="${ant.project.name}.exe"/> + </target> +</project> diff --git a/installer/lib/launch4j/demo/ConsoleApp/l4j/ConsoleApp.ico b/installer/lib/launch4j/demo/ConsoleApp/l4j/ConsoleApp.ico new file mode 100644 index 0000000000000000000000000000000000000000..cc4c540e2d1b1556444bfddf1ce9f32aa1f5e94c Binary files /dev/null and b/installer/lib/launch4j/demo/ConsoleApp/l4j/ConsoleApp.ico differ diff --git a/installer/lib/launch4j/demo/ConsoleApp/lib/readme.txt b/installer/lib/launch4j/demo/ConsoleApp/lib/readme.txt new file mode 100644 index 0000000000000000000000000000000000000000..ef44ded3a1a894a305c6078aa094af0cdff04f59 --- /dev/null +++ b/installer/lib/launch4j/demo/ConsoleApp/lib/readme.txt @@ -0,0 +1,8 @@ +Put your jar libs here and the build script will include them +in the classpath stored inside the jar manifest. +In order to run your application move the output exe file from +the dist directory to the same level as lib. + +SimpleApp.exe +lib/ +lib/xml.jar diff --git a/installer/lib/launch4j/demo/ConsoleApp/readme.txt b/installer/lib/launch4j/demo/ConsoleApp/readme.txt new file mode 100644 index 0000000000000000000000000000000000000000..fa38dc8bd2f390f6d821902fc4d0dbd8b99e1306 --- /dev/null +++ b/installer/lib/launch4j/demo/ConsoleApp/readme.txt @@ -0,0 +1 @@ +To build the example application set JAVA_HOME and ANT_HOME environment variables. diff --git a/installer/lib/launch4j/demo/ConsoleApp/src/net/sf/launch4j/example/ConsoleApp.java b/installer/lib/launch4j/demo/ConsoleApp/src/net/sf/launch4j/example/ConsoleApp.java new file mode 100644 index 0000000000000000000000000000000000000000..94fc33dd61acc00d500e8e9aae8cfeff1ba62e9d --- /dev/null +++ b/installer/lib/launch4j/demo/ConsoleApp/src/net/sf/launch4j/example/ConsoleApp.java @@ -0,0 +1,57 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +package net.sf.launch4j.example; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +/** + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public class ConsoleApp { + public static void main(String[] args) { + StringBuffer sb = new StringBuffer("Hello World!\n\nJava version: "); + sb.append(System.getProperty("java.version")); + sb.append("\nJava home: "); + sb.append(System.getProperty("java.home")); + sb.append("\nCurrent dir: "); + sb.append(System.getProperty("user.dir")); + if (args.length > 0) { + sb.append("\nArgs: "); + for (int i = 0; i < args.length; i++) { + sb.append(args[i]); + sb.append(' '); + } + } + sb.append("\n\nEnter a line of text, Ctrl-C to stop.\n\n>"); + System.out.print(sb.toString()); + try { + BufferedReader is = new BufferedReader(new InputStreamReader(System.in)); + String line; + while ((line = is.readLine()) != null) { + System.out.print("You wrote: " + line + "\n\n>"); + } + is.close(); + } catch (IOException e) { + System.err.print(e); + } + } +} diff --git a/installer/lib/launch4j/demo/LICENSE.txt b/installer/lib/launch4j/demo/LICENSE.txt new file mode 100644 index 0000000000000000000000000000000000000000..3912109b5cd65a68039d473c11c9f7ac2303e06d --- /dev/null +++ b/installer/lib/launch4j/demo/LICENSE.txt @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/installer/lib/launch4j/demo/readme.txt b/installer/lib/launch4j/demo/readme.txt new file mode 100644 index 0000000000000000000000000000000000000000..f5917821449a151fe3cf72ac21c4c9007d44349c --- /dev/null +++ b/installer/lib/launch4j/demo/readme.txt @@ -0,0 +1,3 @@ +JRE/SDK 1.4.0 or higher must be installed on your system to run this demo. + +try running it with some command line arguments... diff --git a/installer/lib/launch4j/head/LICENSE.txt b/installer/lib/launch4j/head/LICENSE.txt new file mode 100644 index 0000000000000000000000000000000000000000..b1e3f5a2638797271cbc9b91b856c05ed6942c8f --- /dev/null +++ b/installer/lib/launch4j/head/LICENSE.txt @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + <one line to give the library's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + <signature of Ty Coon>, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/installer/lib/launch4j/head/consolehead.o b/installer/lib/launch4j/head/consolehead.o new file mode 100644 index 0000000000000000000000000000000000000000..89706ccc720eef29cd90186e0ac297f0d4382411 Binary files /dev/null and b/installer/lib/launch4j/head/consolehead.o differ diff --git a/installer/lib/launch4j/head/guihead.o b/installer/lib/launch4j/head/guihead.o new file mode 100644 index 0000000000000000000000000000000000000000..ddd2be1baa704ec05c64fc77a59afed728c0e51f Binary files /dev/null and b/installer/lib/launch4j/head/guihead.o differ diff --git a/installer/lib/launch4j/head/head.o b/installer/lib/launch4j/head/head.o new file mode 100644 index 0000000000000000000000000000000000000000..1cdcd670b1177807d14aac0a05f64de1edd5c664 Binary files /dev/null and b/installer/lib/launch4j/head/head.o differ diff --git a/installer/lib/launch4j/head_src/LICENSE.txt b/installer/lib/launch4j/head_src/LICENSE.txt new file mode 100644 index 0000000000000000000000000000000000000000..b1e3f5a2638797271cbc9b91b856c05ed6942c8f --- /dev/null +++ b/installer/lib/launch4j/head_src/LICENSE.txt @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + <one line to give the library's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + <signature of Ty Coon>, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/installer/lib/launch4j/head_src/consolehead/Makefile.win b/installer/lib/launch4j/head_src/consolehead/Makefile.win new file mode 100644 index 0000000000000000000000000000000000000000..55366347b8dca0425fd01e0aa9fdd4da9a6282cd --- /dev/null +++ b/installer/lib/launch4j/head_src/consolehead/Makefile.win @@ -0,0 +1,33 @@ +# Project: consolehead +# Makefile created by Dev-C++ 4.9.9.2 + +CPP = g++.exe +CC = gcc.exe +WINDRES = windres.exe +RES = +OBJ = consolehead.o ../head.o $(RES) +LINKOBJ = consolehead.o ../head.o $(RES) +LIBS = -L"lib" -s +INCS = -I"include" +CXXINCS = -I"lib/gcc/mingw32/3.4.2/include" -I"include/c++/3.4.2/backward" -I"include/c++/3.4.2/mingw32" -I"include/c++/3.4.2" -I"include" +BIN = consolehead.exe +CXXFLAGS = $(CXXINCS) -fexpensive-optimizations -O3 +CFLAGS = $(INCS) -fexpensive-optimizations -O3 +RM = rm -f + +.PHONY: all all-before all-after clean clean-custom + +all: all-before consolehead.exe all-after + + +clean: clean-custom + ${RM} $(OBJ) $(BIN) + +$(BIN): $(OBJ) + $(CC) $(LINKOBJ) -o "consolehead.exe" $(LIBS) + +consolehead.o: consolehead.c + $(CC) -c consolehead.c -o consolehead.o $(CFLAGS) + +../head.o: ../head.c + $(CC) -c ../head.c -o ../head.o $(CFLAGS) diff --git a/installer/lib/launch4j/head_src/consolehead/consolehead.c b/installer/lib/launch4j/head_src/consolehead/consolehead.c new file mode 100644 index 0000000000000000000000000000000000000000..cc0d85d7623065b8ca767ddc0fe9f2b02d9d16af --- /dev/null +++ b/installer/lib/launch4j/head_src/consolehead/consolehead.c @@ -0,0 +1,56 @@ +/* + + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2004-2005 Grzegorz Kowal + + Compiled with Mingw port of GCC, Bloodshed Dev-C++ IDE (http://www.bloodshed.net/devcpp.html) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +#include "../resource.h" +#include "../head.h" + +int main(int argc, char* argv[]) +{ + setConsoleFlag(); + HMODULE hLibrary = NULL; + char cmdLine[BIG_STR] = ""; + int i; // causes error: 'for' loop initial declaration used outside C99 mode. + for (i = 1; i < argc; i++) { + strcat(cmdLine, argv[i]); + if (i < argc - 1) { + strcat(cmdLine, " "); + } + } + if (!prepare(hLibrary, cmdLine)) { + if (hLibrary != NULL) { + FreeLibrary(hLibrary); + } + return 1; + } + FreeLibrary(hLibrary); + + int result = (int) execute(TRUE); + if (result == -1) { + char errMsg[BIG_STR] = "could not start the application: "; + strcat(errMsg, strerror(errno)); + msgBox(errMsg); + return 1; + } else { + return result; + } +} diff --git a/installer/lib/launch4j/head_src/consolehead/consolehead.dev b/installer/lib/launch4j/head_src/consolehead/consolehead.dev new file mode 100644 index 0000000000000000000000000000000000000000..4f55c0cefe1b0183f8b6f542eb9be223685277fe --- /dev/null +++ b/installer/lib/launch4j/head_src/consolehead/consolehead.dev @@ -0,0 +1,108 @@ +[Project] +FileName=consolehead.dev +Name=consolehead +UnitCount=4 +Type=1 +Ver=1 +ObjFiles= +Includes= +Libs= +PrivateResource=consolehead_private.rc +ResourceIncludes= +MakeIncludes= +Compiler= +CppCompiler= +Linker= +IsCpp=0 +Icon= +ExeOutput= +ObjectOutput= +OverrideOutput=0 +OverrideOutputName=consolehead.exe +HostApplication= +Folders= +CommandLine= +UseCustomMakefile=0 +CustomMakefile= +IncludeVersionInfo=0 +SupportXPThemes=0 +CompilerSet=0 +CompilerSettings=0000000001001000000100 + +[Unit1] +FileName=consolehead.c +CompileCpp=0 +Folder=consolehead +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[VersionInfo] +Major=0 +Minor=1 +Release=1 +Build=1 +LanguageID=1033 +CharsetID=1252 +CompanyName= +FileVersion= +FileDescription=Developed using the Dev-C++ IDE +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion= +AutoIncBuildNr=0 + +[Unit2] +FileName=..\resource.h +CompileCpp=0 +Folder=consolehead +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit3] +FileName=..\head.c +CompileCpp=0 +Folder=consolehead +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit4] +FileName=..\head.h +CompileCpp=0 +Folder=consolehead +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit5] +FileName=..\head.rc +Folder=consolehead +Compile=1 +Link=0 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit6] +FileName=..\resid.h +CompileCpp=0 +Folder=consolehead +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + diff --git a/installer/lib/launch4j/head_src/guihead/Makefile.win b/installer/lib/launch4j/head_src/guihead/Makefile.win new file mode 100644 index 0000000000000000000000000000000000000000..2e3f746800ee6450d0f345467703cf2ca9769800 --- /dev/null +++ b/installer/lib/launch4j/head_src/guihead/Makefile.win @@ -0,0 +1,33 @@ +# Project: guihead +# Makefile created by Dev-C++ 4.9.9.2 + +CPP = g++.exe +CC = gcc.exe +WINDRES = windres.exe +RES = +OBJ = guihead.o ../head.o $(RES) +LINKOBJ = guihead.o ../head.o $(RES) +LIBS = -L"lib" -mwindows +INCS = -I"include" +CXXINCS = -I"lib/gcc/mingw32/3.4.2/include" -I"include/c++/3.4.2/backward" -I"include/c++/3.4.2/mingw32" -I"include/c++/3.4.2" -I"include" +BIN = guihead.exe +CXXFLAGS = $(CXXINCS) -fexpensive-optimizations -O3 +CFLAGS = $(INCS) -fexpensive-optimizations -O3 +RM = rm -f + +.PHONY: all all-before all-after clean clean-custom + +all: all-before guihead.exe all-after + + +clean: clean-custom + ${RM} $(OBJ) $(BIN) + +$(BIN): $(OBJ) + $(CC) $(LINKOBJ) -o "guihead.exe" $(LIBS) + +guihead.o: guihead.c + $(CC) -c guihead.c -o guihead.o $(CFLAGS) + +../head.o: ../head.c + $(CC) -c ../head.c -o ../head.o $(CFLAGS) diff --git a/installer/lib/launch4j/head_src/guihead/guihead.c b/installer/lib/launch4j/head_src/guihead/guihead.c new file mode 100644 index 0000000000000000000000000000000000000000..cbc1c76167ef89dbba0622e85db6ced68c3c2c7d --- /dev/null +++ b/installer/lib/launch4j/head_src/guihead/guihead.c @@ -0,0 +1,155 @@ +/* + + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2004-2005 Grzegorz Kowal + + Compiled with Mingw port of GCC, Bloodshed Dev-C++ IDE (http://www.bloodshed.net/devcpp.html) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +#include "../resource.h" +#include "../head.h" +#include "guihead.h" + +extern PROCESS_INFORMATION pi; + +HWND hWnd; +DWORD dwExitCode = 0; +BOOL stayAlive = FALSE; +BOOL splash = FALSE; +BOOL splashTimeoutErr; +BOOL waitForWindow; +int splashTimeout; // tick count (s) + +int APIENTRY WinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPSTR lpCmdLine, + int nCmdShow) { + HMODULE hLibrary = NULL; + if (!prepare(hLibrary, lpCmdLine)) { + if (hLibrary != NULL) { + FreeLibrary(hLibrary); + } + return 1; + } + + splash = loadBoolString(hLibrary, SHOW_SPLASH); + stayAlive = loadBoolString(hLibrary, GUI_HEADER_STAYS_ALIVE); + if (splash || stayAlive) { + hWnd = CreateWindowEx(WS_EX_TOOLWINDOW, "STATIC", "", + WS_POPUP | SS_BITMAP, + 0, 0, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); + if (splash) { + char timeout[10] = ""; + if (!loadString(hLibrary, SPLASH_TIMEOUT, timeout)) { + msgBox("Cannot load splash timeout property."); + return 1; + } + splashTimeout = atoi(timeout); + if (splashTimeout <= 0 || splashTimeout > 60 * 15 /* 15 minutes */) { + msgBox("Invalid splash timeout property."); + return 1; + } + splashTimeoutErr = loadBoolString(hLibrary, SPLASH_TIMEOUT_ERR); + waitForWindow = loadBoolString(hLibrary, SPLASH_WAITS_FOR_WINDOW); + HANDLE hImage = LoadImage(hInstance, // handle of the instance containing the image + MAKEINTRESOURCE(SPLASH_BITMAP), // name or identifier of image + IMAGE_BITMAP, // type of image + 0, // desired width + 0, // desired height + LR_DEFAULTSIZE); + if (hImage == NULL) { + msgBox("Cannot load splash screen."); + return 1; + } + SendMessage(hWnd, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM) hImage); + RECT rect; + GetWindowRect(hWnd, &rect); + int x = (GetSystemMetrics(SM_CXSCREEN) - (rect.right - rect.left)) / 2; + int y = (GetSystemMetrics(SM_CYSCREEN) - (rect.bottom - rect.top)) / 2; + SetWindowPos(hWnd, HWND_TOP, x, y, 0, 0, SWP_NOSIZE); + ShowWindow(hWnd, nCmdShow); + UpdateWindow (hWnd); + } + if (!SetTimer (hWnd, ID_TIMER, 1000 /* 1s */, TimerProc)) { + return 1; + } + } + FreeLibrary(hLibrary); + if (execute(FALSE) == -1) { + char errMsg[BIG_STR] = "Error occured while starting the application...\n"; + strcat(errMsg, strerror(errno)); + msgBox(errMsg); + return 1; + } + if (!(splash || stayAlive)) { + closeHandles(); + return 0; + } + MSG msg; + while (GetMessage(&msg, NULL, 0, 0)) { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + closeHandles(); + return dwExitCode; +} + +BOOL CALLBACK enumwndfn(HWND hwnd, LPARAM lParam) { + DWORD processId; + GetWindowThreadProcessId(hwnd, &processId); + if (pi.dwProcessId == processId) { + LONG styles = GetWindowLong(hwnd, GWL_STYLE); + if ((styles & WS_VISIBLE) != 0) { + splash = FALSE; + ShowWindow(hWnd, SW_HIDE); + return FALSE; + } + } + return TRUE; +} + +VOID CALLBACK TimerProc( + HWND hwnd, // handle of window for timer messages + UINT uMsg, // WM_TIMER message + UINT idEvent, // timer identifier + DWORD dwTime) { // current system time + + if (splash) { + if (splashTimeout == 0) { + splash = FALSE; + ShowWindow(hWnd, SW_HIDE); + if (waitForWindow && splashTimeoutErr) { + KillTimer(hwnd, ID_TIMER); + msgBox("Could not start the application, operation timed out."); + PostQuitMessage(0); + } + } else { + splashTimeout--; + if (waitForWindow) { + EnumWindows(enumwndfn, 0); + } + } + } + GetExitCodeProcess(pi.hProcess, &dwExitCode); + if (dwExitCode != STILL_ACTIVE + || !(splash || stayAlive)) { + KillTimer(hWnd, ID_TIMER); + PostQuitMessage(0); + return; + } +} diff --git a/installer/lib/launch4j/head_src/guihead/guihead.dev b/installer/lib/launch4j/head_src/guihead/guihead.dev new file mode 100644 index 0000000000000000000000000000000000000000..ec0403d27e50c2879f6b1b280f46948f9d7033cc --- /dev/null +++ b/installer/lib/launch4j/head_src/guihead/guihead.dev @@ -0,0 +1,119 @@ +[Project] +FileName=guihead.dev +Name=guihead +UnitCount=5 +Type=0 +Ver=1 +ObjFiles= +Includes= +Libs= +PrivateResource= +ResourceIncludes= +MakeIncludes= +Compiler= +CppCompiler= +Linker=_@@_ +IsCpp=0 +Icon= +ExeOutput= +ObjectOutput= +OverrideOutput=0 +OverrideOutputName=guihead.exe +HostApplication= +Folders= +CommandLine= +UseCustomMakefile=0 +CustomMakefile= +IncludeVersionInfo=0 +SupportXPThemes=0 +CompilerSet=0 +CompilerSettings=0000000001001000000000 + +[Unit1] +FileName=guihead.c +CompileCpp=0 +Folder=guihead +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit2] +FileName=guihead.h +CompileCpp=0 +Folder=guihead +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[VersionInfo] +Major=0 +Minor=1 +Release=1 +Build=1 +LanguageID=1033 +CharsetID=1252 +CompanyName= +FileVersion= +FileDescription=Developed using the Dev-C++ IDE +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion= +AutoIncBuildNr=0 + +[Unit4] +FileName=..\head.h +CompileCpp=0 +Folder=guihead +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit6] +FileName=..\resource.h +Folder=guihead +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= +CompileCpp=0 + +[Unit7] +FileName=..\resid.h +CompileCpp=0 +Folder=guihead +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit3] +FileName=..\head.c +CompileCpp=0 +Folder=guihead +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit5] +FileName=..\resource.h +CompileCpp=0 +Folder=guihead +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + diff --git a/installer/lib/launch4j/head_src/guihead/guihead.h b/installer/lib/launch4j/head_src/guihead/guihead.h new file mode 100644 index 0000000000000000000000000000000000000000..26b51e0c6464593c10eaa5725d8ac55cf9de3196 --- /dev/null +++ b/installer/lib/launch4j/head_src/guihead/guihead.h @@ -0,0 +1,31 @@ +/* + + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2004-2005 Grzegorz Kowal + + Compiled with Mingw port of GCC, Bloodshed Dev-C++ IDE (http://www.bloodshed.net/devcpp.html) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +#define ID_TIMER 1 + +VOID CALLBACK TimerProc( + HWND hwnd, // handle of window for timer messages + UINT uMsg, // WM_TIMER message + UINT idEvent, // timer identifier + DWORD dwTime // current system time +); diff --git a/installer/lib/launch4j/head_src/head.c b/installer/lib/launch4j/head_src/head.c new file mode 100644 index 0000000000000000000000000000000000000000..b1ce585526b6ca3d3edc47793f7d94916e9e6e86 --- /dev/null +++ b/installer/lib/launch4j/head_src/head.c @@ -0,0 +1,358 @@ +/* + + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2004-2005 Grzegorz Kowal + + Compiled with Mingw port of GCC, Bloodshed Dev-C++ IDE (http://www.bloodshed.net/devcpp.html) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +#include "resource.h" +#include "head.h" + +BOOL console = FALSE; +int foundJava = NO_JAVA_FOUND; + +struct _stat statBuf; +PROCESS_INFORMATION pi; + +char errTitle[STR] = "launch4j"; +char javaMinVer[STR] = ""; +char javaMaxVer[STR] = ""; +char foundJavaVer[STR] = ""; + +char workingDir[_MAX_PATH] = ""; +char cmd[_MAX_PATH] = ""; +char args[BIG_STR * 2] = ""; + +void setConsoleFlag() { + console = TRUE; +} + +void msgBox(const char* text) { + if (console) { + printf("%s: %s\n", errTitle, text); + } else { + MessageBox(NULL, text, errTitle, MB_OK); + } +} + +void showJavaWebPage() { + ShellExecute(NULL, "open", "http://java.com", NULL, NULL, SW_SHOWNORMAL); +} + +BOOL loadString(HMODULE hLibrary, int resID, char* buffer) { + HRSRC hResource; + HGLOBAL hResourceLoaded; + LPBYTE lpBuffer; + + hResource = FindResourceEx(hLibrary, RT_RCDATA, MAKEINTRESOURCE(resID), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT)); + if (NULL != hResource) { + hResourceLoaded = LoadResource(hLibrary, hResource); + if (NULL != hResourceLoaded) { + lpBuffer = (LPBYTE) LockResource(hResourceLoaded); + if (NULL != lpBuffer) { + int x = 0; + do { + buffer[x] = (char) lpBuffer[x]; + } while (buffer[x++] != 0); + return TRUE; + } + } + } + return FALSE; +} + +BOOL loadBoolString(HMODULE hLibrary, int resID) { + char boolStr[10] = ""; + loadString(hLibrary, resID, boolStr); + return strcmp(boolStr, TRUE_STR) == 0; +} + +void regSearch(HKEY hKey, char* keyName, int searchType) { + DWORD x = 0; + unsigned long size = BIG_STR; + FILETIME time; + char buffer[BIG_STR] = ""; + while (RegEnumKeyEx( + hKey, // handle to key to enumerate + x++, // index of subkey to enumerate + buffer, // address of buffer for subkey name + &size, // address for size of subkey buffer + NULL, // reserved + NULL, // address of buffer for class string + NULL, // address for size of class buffer + &time) == ERROR_SUCCESS) { + if (strcmp(buffer, javaMinVer) >= 0 + && (javaMaxVer[0] == 0 || strcmp(buffer, javaMaxVer) <= 0) + && strcmp(buffer, foundJavaVer) > 0) { + strcpy(foundJavaVer, buffer); + foundJava = searchType; + } + size = BIG_STR; + } +} + +BOOL findJavaHome(char* path) { + HKEY hKey; + char jre[] = "SOFTWARE\\JavaSoft\\Java Runtime Environment"; + char sdk[] = "SOFTWARE\\JavaSoft\\Java Development Kit"; + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, + TEXT(jre), + 0, + KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS, + &hKey) == ERROR_SUCCESS) { + regSearch(hKey, jre, FOUND_JRE); + RegCloseKey(hKey); + } + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, + TEXT(sdk), + 0, + KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS, + &hKey) == ERROR_SUCCESS) { + regSearch(hKey, sdk, FOUND_SDK); + RegCloseKey(hKey); + } + if (foundJava != NO_JAVA_FOUND) { + char keyBuffer[BIG_STR]; + unsigned long datatype; + unsigned long bufferlength = BIG_STR; + if (foundJava == FOUND_JRE) { + strcpy(keyBuffer, jre); + } else { + strcpy(keyBuffer, sdk); + } + strcat(keyBuffer, "\\"); + strcat(keyBuffer, foundJavaVer); + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, + TEXT(keyBuffer), + 0, + KEY_QUERY_VALUE, + &hKey) == ERROR_SUCCESS) { + unsigned char buffer[BIG_STR]; + if (RegQueryValueEx(hKey, "JavaHome", NULL, &datatype, buffer, &bufferlength) + == ERROR_SUCCESS) { + int i = 0; + do { + path[i] = buffer[i]; + } while (path[i++] != 0); + if (foundJava == FOUND_SDK) { + strcat(path, "\\jre"); + } + RegCloseKey(hKey); + return TRUE; + } + RegCloseKey(hKey); + } + } + return FALSE; +} + +/* + * extract the executable name, returns path length. + */ +int getExePath(char* exePath) { + HMODULE hModule = GetModuleHandle(NULL); + if (hModule == 0 + || GetModuleFileName(hModule, exePath, _MAX_PATH) == 0) { + return -1; + } + return strrchr(exePath, '\\') - exePath; +} + +void appendJavaw(char* jrePath) { + if (console) { + strcat(jrePath, "\\bin\\java.exe"); + } else { + strcat(jrePath, "\\bin\\javaw.exe"); + } +} + +void appendLauncher(BOOL setProcName, char* exePath, int pathLen, char* cmd) { + if (setProcName) { + char tmpspec[_MAX_PATH] = ""; + char tmpfile[_MAX_PATH] = ""; + strcpy(tmpspec, cmd); + strcat(tmpspec, LAUNCH4J_TMP_DIR); + tmpspec[strlen(tmpspec) - 1] = 0; + if (_stat(tmpspec, &statBuf) == 0) { + // remove temp launchers + struct _finddata_t c_file; + long hFile; + strcat(tmpspec, "\\*.exe"); + strcpy(tmpfile, cmd); + strcat(tmpfile, LAUNCH4J_TMP_DIR); + char* filename = tmpfile + strlen(tmpfile); + if ((hFile = _findfirst(tmpspec, &c_file)) != -1L) { + do { + strcpy(filename, c_file.name); + _unlink(tmpfile); + } while (_findnext(hFile, &c_file) == 0); + } + _findclose(hFile); + } else { + if (_mkdir(tmpspec) != 0) { + appendJavaw(cmd); + return; + } + } + char javaw[_MAX_PATH] = ""; + strcpy(javaw, cmd); + appendJavaw(javaw); + strcpy(tmpfile, cmd); + strcat(tmpfile, LAUNCH4J_TMP_DIR); + char* exeFilePart = exePath + pathLen + 1; + strcat(tmpfile, exeFilePart); + if (CopyFile(javaw, tmpfile, FALSE)) { + strcpy(cmd, tmpfile); + return; + } else { + long fs = statBuf.st_size; + if (_stat(tmpfile, &statBuf) == 0 && fs == statBuf.st_size) { + strcpy(cmd, tmpfile); + return; + } + } + } + appendJavaw(cmd); +} + +BOOL isJrePathOk(char* path) { + if (!*path) { + return FALSE; + } + char javaw[_MAX_PATH]; + strcpy(javaw, path); + appendJavaw(javaw); + return _stat(javaw, &statBuf) == 0; +} + +BOOL prepare(HMODULE hLibrary, char *lpCmdLine) { + // open executable + char exePath[_MAX_PATH] = ""; + int pathLen = getExePath(exePath); + if (pathLen == -1) { + msgBox("Cannot determinate exe file name."); + return FALSE; + } + hLibrary = LoadLibrary(exePath); + if (hLibrary == NULL) { + char msg[BIG_STR] = "Cannot find file: "; + strcat(msg, exePath); + msgBox(msg); + return FALSE; + } + + // error message box title + loadString(hLibrary, ERR_TITLE, errTitle); + + // working dir + char tmp_path[_MAX_PATH] = ""; + if (loadString(hLibrary, CHDIR, tmp_path)) { + strncpy(workingDir, exePath, pathLen); + strcat(workingDir, "/"); + strcat(workingDir, tmp_path); + _chdir(workingDir); + } + + // custom process name + const BOOL setProcName = loadBoolString(hLibrary, SET_PROC_NAME); + + // use bundled jre or find java + if (loadString(hLibrary, JRE_PATH, tmp_path)) { + strncpy(cmd, exePath, pathLen); + strcat(cmd, "/"); + strcat(cmd, tmp_path); + } + if (!isJrePathOk(cmd)) { + if (!loadString(hLibrary, JAVA_MIN_VER, javaMinVer)) { + msgBox("Cannot find bundled JRE or javaw.exe is missing."); + return FALSE; + } + loadString(hLibrary, JAVA_MAX_VER, javaMaxVer); + if (!findJavaHome(cmd)) { + char txt[BIG_STR] = "Cannot find Java "; + strcat(txt, javaMinVer); + if (*javaMaxVer) { + strcat(txt, " - "); + strcat(txt, javaMaxVer); + } + msgBox(txt); + showJavaWebPage(); + return FALSE; + } + if (!isJrePathOk(cmd)) { + msgBox("Java found, but javaw.exe seems to be missing."); + return FALSE; + } + } + + appendLauncher(setProcName, exePath, pathLen, cmd); + + char jarArgs[BIG_STR] = ""; + loadString(hLibrary, JAR_ARGS, jarArgs); + loadString(hLibrary, JVM_ARGS, args); + if (*args) { + strcat(args, " "); + } + strcat(args, "-jar \""); + strcat(args, exePath); + strcat(args, "\""); + if (*jarArgs) { + strcat(args, " "); + strcat(args, jarArgs); + } + if (*lpCmdLine) { + strcat(args, " "); + strcat(args, lpCmdLine); + } + + // msgBox(cmd); + // msgBox(args); + // msgBox(workingDir); + return TRUE; +} + +void closeHandles() { + CloseHandle(pi.hThread); + CloseHandle(pi.hProcess); +} + +DWORD execute(BOOL wait) { + STARTUPINFO si; + memset(&pi, 0, sizeof(pi)); + memset(&si, 0, sizeof(si)); + si.cb = sizeof(si); + + DWORD dwExitCode = -1; + char cmdline[_MAX_PATH + BIG_STR] = "\""; + strcat(cmdline, cmd); + strcat(cmdline, "\" "); + strcat(cmdline, args); + if (CreateProcess(NULL, cmdline, NULL, NULL, + FALSE, 0, NULL, NULL, &si, &pi)) { + if (wait) { + WaitForSingleObject(pi.hProcess, INFINITE); + GetExitCodeProcess(pi.hProcess, &dwExitCode); + closeHandles(); + } else { + dwExitCode = 0; + } + } + return dwExitCode; +} diff --git a/installer/lib/launch4j/head_src/head.h b/installer/lib/launch4j/head_src/head.h new file mode 100644 index 0000000000000000000000000000000000000000..412092ff962c63caaf91e190da7ff87dfa892ca2 --- /dev/null +++ b/installer/lib/launch4j/head_src/head.h @@ -0,0 +1,69 @@ +/* + + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2004-2005 Grzegorz Kowal + + Compiled with Mingw port of GCC, Bloodshed Dev-C++ IDE (http://www.bloodshed.net/devcpp.html) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +#ifndef _LAUNCH4J_HEAD__INCLUDED_ +#define _LAUNCH4J_HEAD__INCLUDED_ + +#define WIN32_LEAN_AND_MEAN // VC - Exclude rarely-used stuff from Windows headers + +// Windows Header Files: +#include <windows.h> + +// C RunTime Header Files +#include <stdlib.h> +#include <malloc.h> +#include <memory.h> +#include <tchar.h> +#include <shellapi.h> +#include <direct.h> +#include <stdio.h> +#include <sys/stat.h> +#include <io.h> +#include <process.h> + +#define NO_JAVA_FOUND 0 +#define FOUND_JRE 1 +#define FOUND_SDK 2 + +#define LAUNCH4J_TMP_DIR "\\launch4j-tmp\\" + +#define STR 128 +#define BIG_STR 1024 + +#define TRUE_STR "true" +#define FALSE_STR "false" + +void msgBox(const char* text); +void showJavaWebPage(); +BOOL loadString(HMODULE hLibrary, int resID, char* buffer); +BOOL loadBoolString(HMODULE hLibrary, int resID); +void regSearch(HKEY hKey, char* keyName, int searchType); +BOOL findJavaHome(char* path); +int getExePath(char* exePath); +void catJavaw(char* jrePath); +BOOL isJrePathOk(char* path); +BOOL prepare(HMODULE hLibrary, char *lpCmdLine); +void closeHandles(); +DWORD execute(BOOL wait); + +#endif // _LAUNCH4J_HEAD__INCLUDED_ diff --git a/installer/lib/launch4j/head_src/resource.h b/installer/lib/launch4j/head_src/resource.h new file mode 100644 index 0000000000000000000000000000000000000000..d5bec63812698db91b40fa57828a3f806adb265c --- /dev/null +++ b/installer/lib/launch4j/head_src/resource.h @@ -0,0 +1,43 @@ +/* + + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2004-2005 Grzegorz Kowal + + Compiled with Mingw port of GCC, Bloodshed Dev-C++ IDE (http://www.bloodshed.net/devcpp.html) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +// ICON +#define APP_ICON 1 + +// BITMAP +#define SPLASH_BITMAP 1 + +// RCDATA +#define JRE_PATH 1 +#define JAVA_MIN_VER 2 +#define JAVA_MAX_VER 3 +#define SHOW_SPLASH 4 +#define SPLASH_WAITS_FOR_WINDOW 5 +#define SPLASH_TIMEOUT 6 +#define SPLASH_TIMEOUT_ERR 7 +#define CHDIR 8 +#define SET_PROC_NAME 9 +#define ERR_TITLE 10 +#define GUI_HEADER_STAYS_ALIVE 11 +#define JVM_ARGS 12 +#define JAR_ARGS 13 diff --git a/installer/lib/launch4j/launch4j b/installer/lib/launch4j/launch4j new file mode 100644 index 0000000000000000000000000000000000000000..f839f21b13a0d545f1bfc45618300bd8544374e8 --- /dev/null +++ b/installer/lib/launch4j/launch4j @@ -0,0 +1,8 @@ +#!/bin/sh +cd `dirname $0` +if [ -n "$JAVA_HOME" ]; then + $JAVA_HOME/bin/java -jar ./launch4j.jar $* +else + java -jar ./launch4j.jar $* +fi +cd $OLDPWD diff --git a/installer/lib/launch4j/launch4j.jar b/installer/lib/launch4j/launch4j.jar new file mode 100644 index 0000000000000000000000000000000000000000..9e59abfb87b7667c2beefc4c3e36528977cfb830 Binary files /dev/null and b/installer/lib/launch4j/launch4j.jar differ diff --git a/installer/lib/launch4j/launch4j.jfpr b/installer/lib/launch4j/launch4j.jfpr new file mode 100644 index 0000000000000000000000000000000000000000..a2e63ebc52079828ded48f8c80a29a4684b56902 Binary files /dev/null and b/installer/lib/launch4j/launch4j.jfpr differ diff --git a/installer/lib/launch4j/lib/JGoodies.Forms.LICENSE.txt b/installer/lib/launch4j/lib/JGoodies.Forms.LICENSE.txt new file mode 100644 index 0000000000000000000000000000000000000000..9ba2419e7fdbb6200d4889228f37b8d5071c89fd --- /dev/null +++ b/installer/lib/launch4j/lib/JGoodies.Forms.LICENSE.txt @@ -0,0 +1,31 @@ + + The BSD License for the JGoodies Forms + ====================================== + +Copyright (c) 2002-2004 JGoodies Karsten Lentzsch. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + o Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + o Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + o Neither the name of JGoodies Karsten Lentzsch nor the names of + its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/installer/lib/launch4j/lib/JGoodies.Looks.LICENSE.txt b/installer/lib/launch4j/lib/JGoodies.Looks.LICENSE.txt new file mode 100644 index 0000000000000000000000000000000000000000..6ea98a5b3b441465090913cc7bd7381ab761b6e0 --- /dev/null +++ b/installer/lib/launch4j/lib/JGoodies.Looks.LICENSE.txt @@ -0,0 +1,30 @@ + The BSD License for the JGoodies Looks + ====================================== + +Copyright (c) 2003 JGoodies Karsten Lentzsch. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + o Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + o Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + o Neither the name of JGoodies Karsten Lentzsch nor the names of + its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/installer/lib/launch4j/lib/Nuvola.Icon.Theme.LICENSE.txt b/installer/lib/launch4j/lib/Nuvola.Icon.Theme.LICENSE.txt new file mode 100644 index 0000000000000000000000000000000000000000..b1e3f5a2638797271cbc9b91b856c05ed6942c8f --- /dev/null +++ b/installer/lib/launch4j/lib/Nuvola.Icon.Theme.LICENSE.txt @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + <one line to give the library's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + <signature of Ty Coon>, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/installer/lib/launch4j/lib/XStream.LICENSE.txt b/installer/lib/launch4j/lib/XStream.LICENSE.txt new file mode 100644 index 0000000000000000000000000000000000000000..4848b3e4e5d1224bb00a8d379c208b27853186b3 --- /dev/null +++ b/installer/lib/launch4j/lib/XStream.LICENSE.txt @@ -0,0 +1,27 @@ +(BSD Style License) + +Copyright (c) 2003-2004, Joe Walnes +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. Redistributions in binary form must reproduce +the above copyright notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the distribution. + +Neither the name of XStream nor the names of its contributors may be used to endorse +or promote products derived from this software without specific prior written +permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY +WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. diff --git a/installer/lib/launch4j/lib/commons-beanutils.jar b/installer/lib/launch4j/lib/commons-beanutils.jar new file mode 100644 index 0000000000000000000000000000000000000000..b1b89c9c921f16af22a88db3ff28975a8e40d886 Binary files /dev/null and b/installer/lib/launch4j/lib/commons-beanutils.jar differ diff --git a/installer/lib/launch4j/lib/commons-logging.jar b/installer/lib/launch4j/lib/commons-logging.jar new file mode 100644 index 0000000000000000000000000000000000000000..b73a80fab641131e6fbe3ae833549efb3c540d17 Binary files /dev/null and b/installer/lib/launch4j/lib/commons-logging.jar differ diff --git a/installer/lib/launch4j/lib/commons.LICENSE.txt b/installer/lib/launch4j/lib/commons.LICENSE.txt new file mode 100644 index 0000000000000000000000000000000000000000..fdb6475220af83857099a5eb3cc630a442ce1cbf --- /dev/null +++ b/installer/lib/launch4j/lib/commons.LICENSE.txt @@ -0,0 +1,50 @@ +/* + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) @year@ The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Apache Cocoon" and "Apache Software Foundation" must not be + used to endorse or promote products derived from this software without + prior written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + Stefano Mazzocchi <stefano@apache.org>. For more information on the Apache + Software Foundation, please see <http://www.apache.org/>. + +*/ diff --git a/installer/lib/launch4j/lib/formsrt.jar b/installer/lib/launch4j/lib/formsrt.jar new file mode 100644 index 0000000000000000000000000000000000000000..a13f3f7cab254677afe958a73c3ca8bcc4c97739 Binary files /dev/null and b/installer/lib/launch4j/lib/formsrt.jar differ diff --git a/installer/lib/launch4j/lib/foxtrot.LICENSE.txt b/installer/lib/launch4j/lib/foxtrot.LICENSE.txt new file mode 100644 index 0000000000000000000000000000000000000000..5fa4019d5bff32e5cedc023bb012af52a7f9d45f --- /dev/null +++ b/installer/lib/launch4j/lib/foxtrot.LICENSE.txt @@ -0,0 +1,25 @@ +Copyright (c) 2002, Simone Bordet & Marco Cravero +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + - Neither the name of Foxtrot nor the names of the contributors may be used + to endorse or promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/installer/lib/launch4j/lib/foxtrot.jar b/installer/lib/launch4j/lib/foxtrot.jar new file mode 100644 index 0000000000000000000000000000000000000000..f39103a09090864fec56b5cf95d8bb74ae9229ac Binary files /dev/null and b/installer/lib/launch4j/lib/foxtrot.jar differ diff --git a/installer/lib/launch4j/lib/looks.jar b/installer/lib/launch4j/lib/looks.jar new file mode 100644 index 0000000000000000000000000000000000000000..b97ef7792873ed9ffc60bb5c0f60d8ee8dca014e Binary files /dev/null and b/installer/lib/launch4j/lib/looks.jar differ diff --git a/installer/lib/launch4j/lib/xstream.jar b/installer/lib/launch4j/lib/xstream.jar new file mode 100644 index 0000000000000000000000000000000000000000..0245e05732107ddc70b0dc7d66b2da700c1a32f3 Binary files /dev/null and b/installer/lib/launch4j/lib/xstream.jar differ diff --git a/installer/lib/launch4j/readme.txt b/installer/lib/launch4j/readme.txt new file mode 100644 index 0000000000000000000000000000000000000000..c74ec42534a3a63759e46dc8e7efc074dd413b9c --- /dev/null +++ b/installer/lib/launch4j/readme.txt @@ -0,0 +1,35 @@ +Launch4j Cross-platform java application wrapper for creating windows native executables. +Copyright (C) 2005 Grzegorz Kowal + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Head subproject (the code which is attached to the wrapped jars) is +licensed under the GNU Lesser General Public License. + +Launch4j may be used for wrapping closed source, commercial applications. + +The following projects are used by Launch4j... + MinGW binutils (http://www.mingw.org/) + Commons BeanUtils (http://jakarta.apache.org/commons/beanutils/) + Commons Logging (http://jakarta.apache.org/commons/logging/) + XStream (http://xstream.codehaus.org/) + JGoodies Forms (http://www.jgoodies.com/freeware/forms/) + JGoodies Looks (http://www.jgoodies.com/freeware/looks/) + Foxtrot (http://foxtrot.sourceforge.net/) + Nuvola Icon Theme (http://www.icon-king.com) + Forms were created using Abeille Forms Designer (https://abeille.dev.java.net/) + +This product includes software developed by the Apache Software Foundation (http://www.apache.org/). diff --git a/installer/lib/launch4j/src/images/build.png b/installer/lib/launch4j/src/images/build.png new file mode 100644 index 0000000000000000000000000000000000000000..625285f0bb6d7bb8991258c0785bd5ec3128687c Binary files /dev/null and b/installer/lib/launch4j/src/images/build.png differ diff --git a/installer/lib/launch4j/src/images/info.png b/installer/lib/launch4j/src/images/info.png new file mode 100644 index 0000000000000000000000000000000000000000..eb37d9a08ca5fd4de38469d336d0ad9f62b4067a Binary files /dev/null and b/installer/lib/launch4j/src/images/info.png differ diff --git a/installer/lib/launch4j/src/images/new.png b/installer/lib/launch4j/src/images/new.png new file mode 100644 index 0000000000000000000000000000000000000000..6e2700ad915ecc84c5beb896b8138e831d6a41e1 Binary files /dev/null and b/installer/lib/launch4j/src/images/new.png differ diff --git a/installer/lib/launch4j/src/images/open.png b/installer/lib/launch4j/src/images/open.png new file mode 100644 index 0000000000000000000000000000000000000000..a801665fd57e06c74dfdc33a68c4f53af285fe36 Binary files /dev/null and b/installer/lib/launch4j/src/images/open.png differ diff --git a/installer/lib/launch4j/src/images/open16.png b/installer/lib/launch4j/src/images/open16.png new file mode 100644 index 0000000000000000000000000000000000000000..5321c17c63fc8cbc8b62eb600851b2eaaf9ddddc Binary files /dev/null and b/installer/lib/launch4j/src/images/open16.png differ diff --git a/installer/lib/launch4j/src/images/run.png b/installer/lib/launch4j/src/images/run.png new file mode 100644 index 0000000000000000000000000000000000000000..b41fa2b975b37b4cf67f50a1c403480c2649313d Binary files /dev/null and b/installer/lib/launch4j/src/images/run.png differ diff --git a/installer/lib/launch4j/src/images/save.png b/installer/lib/launch4j/src/images/save.png new file mode 100644 index 0000000000000000000000000000000000000000..74b37b0b5101b0b7136653b7cde0885b6dc7dc9b Binary files /dev/null and b/installer/lib/launch4j/src/images/save.png differ diff --git a/installer/lib/launch4j/src/net/sf/launch4j/Builder.java b/installer/lib/launch4j/src/net/sf/launch4j/Builder.java new file mode 100644 index 0000000000000000000000000000000000000000..6813ab26e30c61860e9f3f19ba1871f69991b698 --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/Builder.java @@ -0,0 +1,189 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on 2005-04-24 + */ +package net.sf.launch4j; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; + +import net.sf.launch4j.binding.InvariantViolationException; +import net.sf.launch4j.config.Config; +import net.sf.launch4j.config.ConfigPersister; + +/** + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public class Builder { + private final Log _log; + + public Builder(Log log) { + _log = log; + } + + /** + * @return Output file path. + */ + public File build() throws BuilderException { + final Config c = ConfigPersister.getInstance().getConfig(); + try { + c.validate(); + } catch (InvariantViolationException e) { + throw new BuilderException(e.getMessage()); + } + File rc = null; + File ro = null; + File outfile = null; + FileInputStream is = null; + FileOutputStream os = null; + final RcBuilder rcb = new RcBuilder(); + try { + String basedir = Util.getJarBasedir(); + if (basedir == null) { + basedir = "."; + } + rc = rcb.build(c); + ro = File.createTempFile("launch4j", "o"); + outfile = ConfigPersister.getInstance().getOutputFile(); + + Cmd resCmd = new Cmd(basedir); + resCmd.addExe("/bin/windres") + .add(Util.WINDOWS_OS ? "--preprocessor=type" : "--preprocessor=cat") + .add("-J rc -O coff -F pe-i386") + .add(rc.getPath()) + .add(ro.getPath()); + _log.append("Compiling resources"); + Util.exec(resCmd.toString(), _log); + + Cmd ldCmd = new Cmd(basedir); + ldCmd.addExe("/bin/ld") + .add("-mi386pe") + .add("--oformat pei-i386") + .add((c.getHeaderType() == Config.GUI_HEADER) + ? "--subsystem windows" : "--subsystem console") + .add("-s") // strip symbols + .addFile("/w32api/crt2.o") + .addFile((c.getHeaderType() == Config.GUI_HEADER) + ? "/head/guihead.o" : "/head/consolehead.o") + .addFile("/head/head.o") + .addAbsFile(ro.getPath()) + .addFile("/w32api/libmingw32.a") + .addFile("/w32api/libgcc.a") + .addFile("/w32api/libmsvcrt.a") + .addFile("/w32api/libkernel32.a") + .addFile("/w32api/libuser32.a") + .addFile("/w32api/libadvapi32.a") + .addFile("/w32api/libshell32.a") + .add("-o") + .addAbsFile(outfile.getPath()); + _log.append("Linking"); + Util.exec(ldCmd.toString(), _log); + + _log.append("Wrapping"); + int len; + byte[] buffer = new byte[1024]; + is = new FileInputStream( + Util.getAbsoluteFile(ConfigPersister.getInstance().getConfigPath(), c.getJar())); + os = new FileOutputStream(outfile, true); + while ((len = is.read(buffer)) > 0) { + os.write(buffer, 0, len); + } + _log.append("Successfully created " + outfile.getPath()); + return outfile; + } catch (IOException e) { + Util.delete(outfile); + _log.append(e.getMessage()); + throw new BuilderException(e); + } catch (ExecException e) { + Util.delete(outfile); + String msg = e.getMessage(); + if (msg != null && msg.indexOf("windres") != -1) { + _log.append("Generated resource file...\n"); + _log.append(rcb.getContent()); + } + throw new BuilderException(e); + } finally { + Util.close(is); + Util.close(os); + Util.delete(rc); + Util.delete(ro); + } + } +} + +class Cmd { + private final StringBuffer _sb = new StringBuffer(); + private final String _basedir; + private final boolean _quote; + + public Cmd(String basedir) { + _basedir = basedir; + _quote = basedir.indexOf(' ') != -1; + } + + public Cmd add(String s) { + space(); + _sb.append(s); + return this; + } + + public Cmd addAbsFile(String file) { + space(); + boolean quote = file.indexOf(' ') != -1; + if (quote) { + _sb.append('"'); + } + _sb.append(file); + if (quote) { + _sb.append('"'); + } + return this; + } + + public Cmd addFile(String file) { + space(); + if (_quote) { + _sb.append('"'); + } + _sb.append(_basedir); + _sb.append(file); + if (_quote) { + _sb.append('"'); + } + return this; + } + + public Cmd addExe(String file) { + return addFile(Util.WINDOWS_OS ? file + ".exe" : file); + } + + private void space() { + if (_sb.length() > 0) { + _sb.append(' '); + } + } + + public String toString() { + return _sb.toString(); + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/BuilderException.java b/installer/lib/launch4j/src/net/sf/launch4j/BuilderException.java new file mode 100644 index 0000000000000000000000000000000000000000..2728dfb7a65013404cc99548c1539974c9020bac --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/BuilderException.java @@ -0,0 +1,38 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on May 13, 2005 + */ +package net.sf.launch4j; + +/** + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public class BuilderException extends Exception { + public BuilderException() {} + + public BuilderException(Throwable t) { + super(t); + } + + public BuilderException(String msg) { + super(msg); + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/ExecException.java b/installer/lib/launch4j/src/net/sf/launch4j/ExecException.java new file mode 100644 index 0000000000000000000000000000000000000000..0a46fe0604d4920f54384830bf43b875053ec2ff --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/ExecException.java @@ -0,0 +1,38 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on May 14, 2005 + */ +package net.sf.launch4j; + +/** + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public class ExecException extends Exception { + public ExecException() {} + + public ExecException(Throwable t) { + super(t); + } + + public ExecException(String msg) { + super(msg); + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/FileChooserFilter.java b/installer/lib/launch4j/src/net/sf/launch4j/FileChooserFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..69d410f5e4deed2d83269a534a301fe455c13b1e --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/FileChooserFilter.java @@ -0,0 +1,62 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on 2004-01-15 + */ +package net.sf.launch4j; + +import java.io.File; + +import javax.swing.filechooser.FileFilter; + +/** + * @author Copyright (C) 2004 Grzegorz Kowal + */ +public class FileChooserFilter extends FileFilter { + String _description; + String[] _extensions; + + public FileChooserFilter(String description, String extension) { + _description = description; + _extensions = new String[] {extension}; + } + + public FileChooserFilter(String description, String[] extensions) { + _description = description; + _extensions = extensions; + } + + public boolean accept(File f) { + if (f.isDirectory()) { + return true; + } + String ext = Util.getExtension(f); + for (int i = 0; i < _extensions.length; i++) { + if (ext.toLowerCase().equals(_extensions[i].toLowerCase())) { + return true; + } + } + return false; + } + + public String getDescription() { + return _description; + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/Launcher.java b/installer/lib/launch4j/src/net/sf/launch4j/Launcher.java new file mode 100644 index 0000000000000000000000000000000000000000..587b340f57e1b53de06c15902675ab048fa98799 --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/Launcher.java @@ -0,0 +1,21 @@ +/* + * Created on Jun 4, 2005 + */ +package net.sf.launch4j; + +/** + * This class allows launch4j to act as a launcher instead of a wrapper. + * It's useful on Windows because an application cannot be a GUI and console one + * at the same time. So there are two launchers that start launch4j.jar: launch4j.exe + * for GUI mode and launch4jc.exe for console operation. + * The Launcher class is packed into an executable jar that contains nothing else but + * the manifest with Class-Path attribute defined as in the application jar. The jar + * is wrapped with launch4j. + * + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public class Launcher { + public static void main(String[] args) { + Main.main(args); + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/Log.java b/installer/lib/launch4j/src/net/sf/launch4j/Log.java new file mode 100644 index 0000000000000000000000000000000000000000..84eef2e1e22fcb4c9a51b3d08751d47d4eadcd65 --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/Log.java @@ -0,0 +1,91 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on May 12, 2005 + */ +package net.sf.launch4j; + +import javax.swing.JTextArea; +import javax.swing.SwingUtilities; + +/** + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public abstract class Log { + private static final Log _consoleLog = new ConsoleLog(); + private static final Log _antLog = new AntLog(); + + public abstract void clear(); + public abstract void append(String line); + + public static Log getConsoleLog() { + return _consoleLog; + } + + public static Log getAntLog() { + return _antLog; + } + + public static Log getSwingLog(JTextArea textArea) { + return new SwingLog(textArea); + } +} + +class ConsoleLog extends Log { + public void clear() { + System.out.println("\n"); + } + + public void append(String line) { + System.out.println("launch4j: " + line); + } +} + +class AntLog extends Log { + public void clear() { + System.out.println("\n"); + } + + public void append(String line) { + System.out.println(line); + } +} + +class SwingLog extends Log { + private final JTextArea _textArea; + + public SwingLog(JTextArea textArea) { + _textArea = textArea; + } + + public void clear() { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + _textArea.setText(""); + }}); + } + + public void append(final String line) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + _textArea.append(line + "\n"); + }}); + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/Main.java b/installer/lib/launch4j/src/net/sf/launch4j/Main.java new file mode 100644 index 0000000000000000000000000000000000000000..a49cb1ae96c4fe2ff412f387f44ada500b4d7bee --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/Main.java @@ -0,0 +1,62 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on Apr 21, 2005 + */ +package net.sf.launch4j; + +import java.io.File; + +import net.sf.launch4j.config.ConfigPersister; +import net.sf.launch4j.config.ConfigPersisterException; +import net.sf.launch4j.formimpl.MainFrame; + +/** + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public class Main { + + public static final String PROGRAM_NAME = "launch4j 2.0.RC3"; + public static final String PROGRAM_DESCRIPTION = PROGRAM_NAME + + " :: Cross-platform Java application wrapper for creating Windows native executables\n" + + "Copyright (C) 2005 Grzegorz Kowal\n" + + "launch4j comes with ABSOLUTELY NO WARRANTY\n" + + "This is free software, licensed under the GNU General Public License.\n" + + "This product includes software developed by the Apache Software Foundation (http://www.apache.org/).\n\n"; + + public static void main(String[] args) { + try { + if (args.length == 0) { + ConfigPersister.getInstance().createBlank(); + MainFrame.createInstance(); + } else if (args.length == 1 && !args[0].startsWith("-")) { + ConfigPersister.getInstance().load(new File(args[0])); + Builder b = new Builder(Log.getConsoleLog()); + b.build(); + } else { + System.out.println(PROGRAM_DESCRIPTION + "usage: launch4j config.xml"); + } + } catch (ConfigPersisterException e) { + Log.getConsoleLog().append(e.getMessage()); + } catch (BuilderException e) { + Log.getConsoleLog().append(e.getMessage()); + } + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/OptionParser.java b/installer/lib/launch4j/src/net/sf/launch4j/OptionParser.java new file mode 100644 index 0000000000000000000000000000000000000000..7686c91b685a7b467be793338e08df91958c80f5 --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/OptionParser.java @@ -0,0 +1,57 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on 2005-04-24 + */ +package net.sf.launch4j; + +//import net.sf.launch4j.config.Config; + +//import org.apache.commons.cli.CommandLine; +//import org.apache.commons.cli.CommandLineParser; +//import org.apache.commons.cli.HelpFormatter; +//import org.apache.commons.cli.Options; +//import org.apache.commons.cli.ParseException; +//import org.apache.commons.cli.PosixParser; + +/** + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public class OptionParser { + +// private final Options _options; +// +// public OptionParser() { +// _options = new Options(); +// _options.addOption("h", "header", true, "header"); +// } +// +// public Config parse(Config c, String[] args) throws ParseException { +// CommandLineParser parser = new PosixParser(); +// CommandLine cl = parser.parse(_options, args); +// c.setJar(getFile(props, Config.JAR)); +// c.setOutfile(getFile(props, Config.OUTFILE)); +// } +// +// public void printHelp() { +// HelpFormatter formatter = new HelpFormatter(); +// formatter.printHelp("launch4j", _options); +// } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/RcBuilder.java b/installer/lib/launch4j/src/net/sf/launch4j/RcBuilder.java new file mode 100644 index 0000000000000000000000000000000000000000..57c20cb66184750dc8e79afb538d0867ec091316 --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/RcBuilder.java @@ -0,0 +1,230 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on 2005-04-24 + */ +package net.sf.launch4j; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; + +import net.sf.launch4j.config.Config; +import net.sf.launch4j.config.ConfigPersister; +import net.sf.launch4j.config.Jre; +import net.sf.launch4j.config.Splash; +import net.sf.launch4j.config.VersionInfo; + +/** + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public class RcBuilder { + + // winnt.h + public static final int LANG_NEUTRAL = 0; + public static final int SUBLANG_NEUTRAL = 0; + public static final int SUBLANG_DEFAULT = 1; + public static final int SUBLANG_SYS_DEFAULT = 2; + + // ICON + public static final int APP_ICON = 1; + + // BITMAP + public static final int SPLASH_BITMAP = 1; + + // RCDATA + public static final int JRE_PATH = 1; + public static final int JAVA_MIN_VER = 2; + public static final int JAVA_MAX_VER = 3; + public static final int SHOW_SPLASH = 4; + public static final int SPLASH_WAITS_FOR_WINDOW = 5; + public static final int SPLASH_TIMEOUT = 6; + public static final int SPLASH_TIMEOUT_ERR = 7; + public static final int CHDIR = 8; + public static final int SET_PROC_NAME = 9; + public static final int ERR_TITLE = 10; + public static final int GUI_HEADER_STAYS_ALIVE = 11; + public static final int JVM_ARGS = 12; + public static final int JAR_ARGS = 13; + + private final StringBuffer _sb = new StringBuffer(); + + public String getContent() { + return _sb.toString(); + } + + public File build(Config c) throws IOException { + _sb.append("LANGUAGE "); + _sb.append(LANG_NEUTRAL); + _sb.append(", "); + _sb.append(SUBLANG_DEFAULT); + _sb.append('\n'); + addVersionInfo(c.getVersionInfo()); + addJre(c.getJre()); + addIcon(APP_ICON, c.getIcon()); + addText(ERR_TITLE, c.getErrTitle()); + addText(JAR_ARGS, c.getJarArgs()); + addWindowsPath(CHDIR, c.getChdir()); + addTrue(SET_PROC_NAME, c.isCustomProcName()); + addTrue(GUI_HEADER_STAYS_ALIVE, c.isStayAlive()); + addSplash(c.getSplash()); + File f = File.createTempFile("launch4j", "rc"); + BufferedWriter w = new BufferedWriter(new FileWriter(f)); + w.write(_sb.toString()); + w.close(); + return f; + } + + private void addVersionInfo(VersionInfo v) { + if (v == null) { + return; + } + _sb.append("1 VERSIONINFO\n"); + _sb.append("FILEVERSION "); + _sb.append(v.getFileVersion().replaceAll("\\.", ", ")); + _sb.append("\nPRODUCTVERSION "); + _sb.append(v.getProductVersion().replaceAll("\\.", ", ")); + _sb.append("\nFILEFLAGSMASK 0\n" + + "FILEOS 0x40000\n" + + "FILETYPE 1\n" + + "{\n" + + " BLOCK \"StringFileInfo\"\n" + + " {\n" + + " BLOCK \"040904E4\"\n" + // English + " {\n"); + addVerBlockValue("CompanyName", v.getCompanyName()); + addVerBlockValue("FileDescription", v.getFileDescription()); + addVerBlockValue("FileVersion", v.getTxtFileVersion()); + addVerBlockValue("InternalName", v.getInternalName()); + addVerBlockValue("LegalCopyright", v.getCopyright()); + addVerBlockValue("OriginalFilename", v.getOriginalFilename()); + addVerBlockValue("ProductName", v.getProductName()); + addVerBlockValue("ProductVersion", v.getTxtProductVersion()); + _sb.append(" }\n }\n}\n"); + } + + private void addJre(Jre jre) { + addWindowsPath(JRE_PATH, jre.getPath()); + addText(JAVA_MIN_VER, jre.getMinVersion()); + addText(JAVA_MAX_VER, jre.getMaxVersion()); + StringBuffer jvmArgs = new StringBuffer(); + if (jre.getInitialHeapSize() > 0) { + jvmArgs.append("-Xms"); + jvmArgs.append(jre.getInitialHeapSize()); + jvmArgs.append('m'); + } + if (jre.getMaxHeapSize() > 0) { + addSpace(jvmArgs); + jvmArgs.append("-Xmx"); + jvmArgs.append(jre.getMaxHeapSize()); + jvmArgs.append('m'); + } + if (jre.getArgs() != null && jre.getArgs().length() > 0) { + addSpace(jvmArgs); + jvmArgs.append(jre.getArgs().replaceAll("\n", " ")); + } + addText(JVM_ARGS, jvmArgs.toString()); + } + + private void addSplash(Splash splash) { + if (splash == null) { + return; + } + addTrue(SHOW_SPLASH, true); + addTrue(SPLASH_WAITS_FOR_WINDOW, splash.getWaitForWindow()); + addText(SPLASH_TIMEOUT, String.valueOf(splash.getTimeout())); + addTrue(SPLASH_TIMEOUT_ERR, splash.isTimeoutErr()); + addBitmap(SPLASH_BITMAP, splash.getFile()); + } + + private void addText(int id, String text) { + if (text == null || text.length() == 0) { + return; + } + _sb.append(id); + _sb.append(" RCDATA BEGIN \""); + _sb.append(text); + _sb.append("\\0\" END\n"); + } + + /** + * Stores path in Windows format with '\' separators. + */ + private void addWindowsPath(int id, String path) { + if (path == null || path.equals("")) { + return; + } + _sb.append(id); + _sb.append(" RCDATA BEGIN \""); + _sb.append(path.replaceAll("\\\\", "\\\\\\\\") + .replaceAll("/", "\\\\\\\\")); + _sb.append("\\0\" END\n"); + } + + private void addTrue(int id, boolean value) { + if (value) { + addText(id, "true"); + } + } + + private void addIcon(int id, File icon) { + if (icon == null || icon.getPath().equals("")) { + return; + } + _sb.append(id); + _sb.append(" ICON DISCARDABLE \""); + _sb.append(getPath(Util.getAbsoluteFile( + ConfigPersister.getInstance().getConfigPath(), icon))); + _sb.append("\"\n"); + } + + private void addBitmap(int id, File bitmap) { + if (bitmap == null) { + return; + } + _sb.append(id); + _sb.append(" BITMAP \""); + _sb.append(getPath(Util.getAbsoluteFile( + ConfigPersister.getInstance().getConfigPath(), bitmap))); + _sb.append("\"\n"); + } + + private String getPath(File f) { + return f.getPath().replaceAll("\\\\", "\\\\\\\\"); + } + + private void addSpace(StringBuffer sb) { + int len = sb.length(); + if (len-- > 0 && sb.charAt(len) != ' ') { + sb.append(' '); + } + } + + private void addVerBlockValue(String key, String value) { + _sb.append(" VALUE \""); + _sb.append(key); + _sb.append("\", \""); + if (value != null) { + _sb.append(value); + } + _sb.append("\"\n"); + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/Util.java b/installer/lib/launch4j/src/net/sf/launch4j/Util.java new file mode 100644 index 0000000000000000000000000000000000000000..c05dabfa67001b78921db0aea19df4dca4a50de9 --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/Util.java @@ -0,0 +1,152 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * Created on 2005-04-24 + */ +package net.sf.launch4j; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.Reader; +import java.io.Writer; + +/** + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public class Util { + public static final boolean WINDOWS_OS = System.getProperty("os.name") + .toLowerCase().startsWith("windows"); + + private Util() {} + + /** + * Returns the base directory of a jar file or null if the class is a standalone file. + * @return System specific path + * + * Based on a patch submitted by Josh Elsasser + */ + public static String getJarBasedir() { + String url = Util.class.getClassLoader() + .getResource(Util.class.getName().replace('.', '/') + ".class") + .getFile() + .replaceAll("%20", " "); + if (url.startsWith("file:")) { + String jar = url.substring(5, url.lastIndexOf('!')); + int x = jar.lastIndexOf('/'); + if (x == -1) { + x = jar.lastIndexOf('\\'); + } + String basedir = jar.substring(0, x + 1); + return new File(basedir).getPath(); + } else { + return null; + } + } + + public static File getAbsoluteFile(File basepath, File f) { + return f.isAbsolute() ? f : new File(basepath, f.getPath()); + } + + public static String getExtension(File f) { + String name = f.getName(); + int x = name.lastIndexOf('.'); + if (x != -1) { + return name.substring(x); + } else { + return ""; + } + } + + public static void exec(String cmd, Log log) throws ExecException { + BufferedReader is = null; + try { + if (WINDOWS_OS) { + cmd = cmd.replaceAll("/", "\\\\"); + } + Process p = Runtime.getRuntime().exec(cmd); + is = new BufferedReader(new InputStreamReader(p.getErrorStream())); + String line; + while ((line = is.readLine()) != null) { + log.append(line); + } + is.close(); + p.waitFor(); + if (p.exitValue() != 0) { + String msg = "Exec failed (" + p.exitValue() + "): " + cmd; + log.append(msg); + throw new ExecException(msg); + } + } catch (IOException e) { + close(is); + throw new ExecException(e); + } catch (InterruptedException e) { + close(is); + throw new ExecException(e); + } + } + + public static void close(final InputStream o) { + if (o != null) { + try { + o.close(); + } catch (IOException e) { + System.err.println(e); // XXX log + } + } + } + + public static void close(final OutputStream o) { + if (o != null) { + try { + o.close(); + } catch (IOException e) { + System.err.println(e); // XXX log + } + } + } + + public static void close(final Reader o) { + if (o != null) { + try { + o.close(); + } catch (IOException e) { + System.err.println(e); // XXX log + } + } + } + + public static void close(final Writer o) { + if (o != null) { + try { + o.close(); + } catch (IOException e) { + System.err.println(e); // XXX log + } + } + } + + public static boolean delete(File f) { + return (f != null) ? f.delete() : false; + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/ant/AntConfig.java b/installer/lib/launch4j/src/net/sf/launch4j/ant/AntConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..6f637fe9a9fe4fe3f804af2d0382f0127a81f746 --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/ant/AntConfig.java @@ -0,0 +1,57 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on May 24, 2005 + */ +package net.sf.launch4j.ant; + +import org.apache.tools.ant.BuildException; + +import net.sf.launch4j.config.Config; +import net.sf.launch4j.config.Jre; +import net.sf.launch4j.config.Splash; +import net.sf.launch4j.config.VersionInfo; + +/** + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public class AntConfig extends Config { + + public void addJre(Jre jre) { + checkNull(getJre(), "jre"); + setJre(jre); + } + + public void addSplash(Splash splash) { + checkNull(getSplash(), "splash"); + setSplash(splash); + } + + public void addVersionInfo(VersionInfo versionInfo) { + checkNull(getVersionInfo(), "versionInfo"); + setVersionInfo(versionInfo); + } + + private void checkNull(Object o, String name) { + if (o != null) { + throw new BuildException("Duplicate element: " + name); + } + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/ant/Launch4jTask.java b/installer/lib/launch4j/src/net/sf/launch4j/ant/Launch4jTask.java new file mode 100644 index 0000000000000000000000000000000000000000..bb7161f64273123a6544027f93c9a52dcfc00e05 --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/ant/Launch4jTask.java @@ -0,0 +1,122 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on May 24, 2005 + */ +package net.sf.launch4j.ant; + +import java.io.File; + +import net.sf.launch4j.Builder; +import net.sf.launch4j.BuilderException; +import net.sf.launch4j.Log; +import net.sf.launch4j.config.Config; +import net.sf.launch4j.config.ConfigPersister; +import net.sf.launch4j.config.ConfigPersisterException; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Task; + +/** + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public class Launch4jTask extends Task { + private File _configFile; + private AntConfig _config; + + // Override configFile settings + private File jar; + private File outfile; + private String fileVersion; + private String txtFileVersion; + private String productVersion; + private String txtProductVersion; + + public void execute() throws BuildException { + try { + if (_configFile != null && _config != null) { + throw new BuildException("Specify configFile or config"); + } else if (_configFile != null) { + ConfigPersister.getInstance().load(_configFile); + Config c = ConfigPersister.getInstance().getConfig(); + if (jar != null) { + c.setJar(jar); + } + if (outfile != null) { + c.setOutfile(outfile); + } + if (fileVersion != null) { + c.getVersionInfo().setFileVersion(fileVersion); + } + if (txtFileVersion != null) { + c.getVersionInfo().setTxtFileVersion(txtFileVersion); + } + if (productVersion != null) { + c.getVersionInfo().setProductVersion(productVersion); + } + if (txtProductVersion != null) { + c.getVersionInfo().setTxtProductVersion(txtProductVersion); + } + } else if (_config != null) { + ConfigPersister.getInstance().setAntConfig(_config, getProject().getBaseDir()); + } else { + throw new BuildException("Specify configFile or config"); + } + final Builder b = new Builder(Log.getAntLog()); + b.build(); + } catch (ConfigPersisterException e) { + throw new BuildException(e); + } catch (BuilderException e) { + throw new BuildException(e); + } + } + + public void setConfigFile(File configFile) { + _configFile = configFile; + } + + public void addConfig(AntConfig config) { + _config = config; + } + + public void setFileVersion(String fileVersion) { + this.fileVersion = fileVersion; + } + + public void setJar(File jar) { + this.jar = jar; + } + + public void setOutfile(File outfile) { + this.outfile = outfile; + } + + public void setProductVersion(String productVersion) { + this.productVersion = productVersion; + } + + public void setTxtFileVersion(String txtFileVersion) { + this.txtFileVersion = txtFileVersion; + } + + public void setTxtProductVersion(String txtProductVersion) { + this.txtProductVersion = txtProductVersion; + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/binding/Binding.java b/installer/lib/launch4j/src/net/sf/launch4j/binding/Binding.java new file mode 100644 index 0000000000000000000000000000000000000000..72ec619233d737849a8df32b8de92cdc6844f947 --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/binding/Binding.java @@ -0,0 +1,48 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on Apr 30, 2005 + */ +package net.sf.launch4j.binding; + +import java.awt.Color; + +/** + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public interface Binding { + /** Used to mark components with invalid data. */ + public final static Color INVALID_COLOR = Color.PINK; + + /** Java Bean property bound to a component */ + public String getProperty(); + /** Clear component, set it to the default value. */ + public void clear(); + /** Java Bean property -> Component */ + public void put(IValidatable bean); + /** Component -> Java Bean property */ + public void get(IValidatable bean); + /** Mark component as valid */ + public void markValid(); + /** Mark component as invalid */ + public void markInvalid(); + /** Enable or disable the component */ + public void setEnabled(boolean enabled); +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/binding/BindingException.java b/installer/lib/launch4j/src/net/sf/launch4j/binding/BindingException.java new file mode 100644 index 0000000000000000000000000000000000000000..2a3b5b8292186a49104e546e7ee0cc84fd32e179 --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/binding/BindingException.java @@ -0,0 +1,38 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on Apr 30, 2005 + */ +package net.sf.launch4j.binding; + +/** + * Signals a runtime error, a missing property in a Java Bean for example. + * + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public class BindingException extends RuntimeException { + public BindingException(Throwable t) { + super(t); + } + + public BindingException(String msg) { + super(msg); + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/binding/Bindings.java b/installer/lib/launch4j/src/net/sf/launch4j/binding/Bindings.java new file mode 100644 index 0000000000000000000000000000000000000000..48fd22bf15db62610e843a8745e5a27dd86ed81a --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/binding/Bindings.java @@ -0,0 +1,247 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on Apr 30, 2005 + */ +package net.sf.launch4j.binding; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import javax.swing.JComponent; +import javax.swing.JRadioButton; +import javax.swing.JToggleButton; +import javax.swing.text.JTextComponent; + +import org.apache.commons.beanutils.PropertyUtils; + +/** + * Creates and handles bindings. + * + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public class Bindings implements PropertyChangeListener { + private final Map _bindings = new HashMap(); + private final Map _optComponents = new HashMap(); + private boolean _modified = false; + + /** + * Used to track component modifications. + */ + public void propertyChange(PropertyChangeEvent evt) { + if ("AccessibleValue".equals(evt.getPropertyName()) + || "AccessibleText".equals(evt.getPropertyName())) { + _modified = true; + } + } + + /** + * Any of the components modified? + */ + public boolean isModified() { + return _modified; + } + + public Binding getBinding(String property) { + return (Binding) _bindings.get(property); + } + + private void registerPropertyChangeListener(JComponent c) { + c.getAccessibleContext().addPropertyChangeListener(this); + } + + private void registerPropertyChangeListener(JComponent[] cs) { + for (int i = 0; i < cs.length; i++) { + cs[i].getAccessibleContext().addPropertyChangeListener(this); + } + } + + private boolean isPropertyNull(IValidatable bean, Binding b) { + try { + for (Iterator iter = _optComponents.keySet().iterator(); iter.hasNext();) { + String property = (String) iter.next(); + if (b.getProperty().startsWith(property)) { + return PropertyUtils.getProperty(bean, property) == null; + } + } + return false; + } catch (Exception e) { + throw new BindingException(e); + } + } + + /** + * Enables or disables all components bound to properties that begin with given prefix. + */ + public void setComponentsEnabled(String prefix, boolean enabled) { + for (Iterator iter = _bindings.values().iterator(); iter.hasNext();) { + Binding b = (Binding) iter.next(); + if (b.getProperty().startsWith(prefix)) { + b.setEnabled(enabled); + } + } + } + + /** + * Clear all components, set them to their default values. + * Clears the _modified flag. + */ + public void clear() { + for (Iterator iter = _optComponents.values().iterator(); iter.hasNext();) { + ((Binding) iter.next()).clear(); + } + for (Iterator iter = _bindings.values().iterator(); iter.hasNext();) { + ((Binding) iter.next()).clear(); + } + _modified = false; + } + + /** + * Copies data from the Java Bean to the UI components. + * Clears the _modified flag. + */ + public void put(IValidatable bean) { + for (Iterator iter = _optComponents.values().iterator(); iter.hasNext();) { + ((Binding) iter.next()).put(bean); + } + for (Iterator iter = _bindings.values().iterator(); iter.hasNext();) { + Binding b = (Binding) iter.next(); + if (isPropertyNull(bean, b)) { + b.clear(); + } else { + b.put(bean); + } + } + _modified = false; + } + + /** + * Copies data from UI components to the Java Bean and checks it's class invariants. + * Clears the _modified flag. + * @throws InvariantViolationException + * @throws BindingException + */ + public void get(IValidatable bean) { + try { + for (Iterator iter = _optComponents.values().iterator(); iter.hasNext();) { + ((Binding) iter.next()).get(bean); + } + for (Iterator iter = _bindings.values().iterator(); iter.hasNext();) { + Binding b = (Binding) iter.next(); + if (!isPropertyNull(bean, b)) { + b.get(bean); + } + } + bean.checkInvariants(); + for (Iterator iter = _optComponents.keySet().iterator(); iter.hasNext();) { + String property = (String) iter.next(); + IValidatable component = (IValidatable) PropertyUtils.getProperty(bean, property); + if (component != null) { + component.checkInvariants(); + } + } + _modified = false; // XXX + } catch (InvariantViolationException e) { + e.setBinding(getBinding(e.getProperty())); + throw e; + } catch (Exception e) { + throw new BindingException(e); + } + } + + private Bindings add(Binding b) { + if (_bindings.containsKey(b.getProperty())) { + throw new BindingException("Duplicate binding"); + } + _bindings.put(b.getProperty(), b); + return this; + } + + /** + * Add an optional (nullable) Java Bean component of type clazz. + */ + public Bindings addOptComponent(String property, Class clazz, JToggleButton c, + boolean enabledByDefault) { + Binding b = new OptComponentBinding(this, property, clazz, c, enabledByDefault); + if (_optComponents.containsKey(property)) { + throw new BindingException("Duplicate binding"); + } + _optComponents.put(property, b); + return this; + } + + /** + * Add an optional (nullable) Java Bean component of type clazz. + */ + public Bindings addOptComponent(String property, Class clazz, JToggleButton c) { + return addOptComponent(property, clazz, c, false); + } + + /** + * Handles JEditorPane, JTextArea, JTextField + */ + public Bindings add(String property, JTextComponent c, String defaultValue) { + registerPropertyChangeListener(c); + return add(new JTextComponentBinding(property, c, defaultValue)); + } + + /** + * Handles JEditorPane, JTextArea, JTextField + */ + public Bindings add(String property, JTextComponent c) { + registerPropertyChangeListener(c); + return add(new JTextComponentBinding(property, c, "")); + } + + /** + * Handles JToggleButton, JCheckBox + */ + public Bindings add(String property, JToggleButton c, boolean defaultValue) { + registerPropertyChangeListener(c); + return add(new JToggleButtonBinding(property, c, defaultValue)); + } + + /** + * Handles JToggleButton, JCheckBox + */ + public Bindings add(String property, JToggleButton c) { + registerPropertyChangeListener(c); + return add(new JToggleButtonBinding(property, c, false)); + } + + /** + * Handles JRadioButton + */ + public Bindings add(String property, JRadioButton[] cs, int defaultValue) { + registerPropertyChangeListener(cs); + return add(new JRadioButtonBinding(property, cs, defaultValue)); + } + + /** + * Handles JRadioButton + */ + public Bindings add(String property, JRadioButton[] cs) { + registerPropertyChangeListener(cs); + return add(new JRadioButtonBinding(property, cs, 0)); + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/binding/IValidatable.java b/installer/lib/launch4j/src/net/sf/launch4j/binding/IValidatable.java new file mode 100644 index 0000000000000000000000000000000000000000..91b6fa514c27dd0bde9b6a55eec07ff1d994ba8c --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/binding/IValidatable.java @@ -0,0 +1,30 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on 2004-01-30 + */ +package net.sf.launch4j.binding; + +/** + * @author Copyright (C) 2004 Grzegorz Kowal + */ +public interface IValidatable { + public void checkInvariants(); +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/binding/InvariantViolationException.java b/installer/lib/launch4j/src/net/sf/launch4j/binding/InvariantViolationException.java new file mode 100644 index 0000000000000000000000000000000000000000..99eb569a8dc799f3aefabad82557d4076f93040f --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/binding/InvariantViolationException.java @@ -0,0 +1,53 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on Jun 23, 2003 + */ +package net.sf.launch4j.binding; + +/** + * @author Copyright (C) 2003 Grzegorz Kowal + */ +public class InvariantViolationException extends RuntimeException { + private final String _property; + private Binding _binding; + + public InvariantViolationException(String msg) { + super(msg); + _property = null; + } + + public InvariantViolationException(String property, String msg) { + super(msg); + _property = property; + } + + public String getProperty() { + return _property; + } + + public Binding getBinding() { + return _binding; + } + + public void setBinding(Binding binding) { + _binding = binding; + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/binding/JRadioButtonBinding.java b/installer/lib/launch4j/src/net/sf/launch4j/binding/JRadioButtonBinding.java new file mode 100644 index 0000000000000000000000000000000000000000..1298b529cef5cc85142892e929c6ad96f3d10248 --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/binding/JRadioButtonBinding.java @@ -0,0 +1,127 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on May 10, 2005 + */ +package net.sf.launch4j.binding; + +import java.awt.Color; + +import javax.swing.JRadioButton; + +import org.apache.commons.beanutils.PropertyUtils; + +/** + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public class JRadioButtonBinding implements Binding { + private final String _property; + private final JRadioButton[] _buttons; + private final int _defaultValue; + private final Color _validColor; + + public JRadioButtonBinding(String property, JRadioButton[] buttons, int defaultValue) { + if (property == null || buttons == null) { + throw new NullPointerException(); + } + for (int i = 0; i < buttons.length; i++) { + if (buttons[i] == null) { + throw new NullPointerException(); + } + } + if (property.equals("") + || buttons.length == 0 + || defaultValue < 0 || defaultValue >= buttons.length) { + throw new IllegalArgumentException(); + } + _property = property; + _buttons = buttons; + _defaultValue = defaultValue; + _validColor = buttons[0].getBackground(); + } + + public String getProperty() { + return _property; + } + + public void clear() { + select(_defaultValue); + } + + public void put(IValidatable bean) { + try { + Integer i = (Integer) PropertyUtils.getProperty(bean, _property); + if (i == null) { + throw new BindingException("Property is null"); + } + select(i.intValue()); + } catch (Exception e) { + throw new BindingException(e); + } + } + + public void get(IValidatable bean) { + try { + for (int i = 0; i < _buttons.length; i++) { + if (_buttons[i].isSelected()) { + PropertyUtils.setProperty(bean, _property, new Integer(i)); + return; + } + } + throw new BindingException("Nothing selected"); + } catch (Exception e) { + throw new BindingException(e); + } + } + + private void select(int index) { + if (index < 0 || index >= _buttons.length) { + throw new BindingException("Button index out of bounds"); + } + _buttons[index].setSelected(true); + } + + public void markValid() { + for (int i = 0; i < _buttons.length; i++) { + if (_buttons[i].isSelected()) { + _buttons[i].setBackground(_validColor); + _buttons[i].requestFocusInWindow(); + return; + } + } + throw new BindingException("Nothing selected"); + } + + public void markInvalid() { + for (int i = 0; i < _buttons.length; i++) { + if (_buttons[i].isSelected()) { + _buttons[i].setBackground(Binding.INVALID_COLOR); + return; + } + } + throw new BindingException("Nothing selected"); + } + + public void setEnabled(boolean enabled) { + for (int i = 0; i < _buttons.length; i++) { + _buttons[i].setEnabled(enabled); + } + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/binding/JTextComponentBinding.java b/installer/lib/launch4j/src/net/sf/launch4j/binding/JTextComponentBinding.java new file mode 100644 index 0000000000000000000000000000000000000000..26ec4d665f4c382a2adeab180ac4c744d261a635 --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/binding/JTextComponentBinding.java @@ -0,0 +1,92 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on Apr 30, 2005 + */ +package net.sf.launch4j.binding; + +import java.awt.Color; + +import javax.swing.text.JTextComponent; + +import org.apache.commons.beanutils.BeanUtils; + +/** + * Handles JEditorPane, JTextArea, JTextField + * + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public class JTextComponentBinding implements Binding { + private final String _property; + private final JTextComponent _textComponent; + private final String _defaultValue; + private final Color _validColor; + + public JTextComponentBinding(String property, JTextComponent textComponent, String defaultValue) { + if (property == null || textComponent == null || defaultValue == null) { + throw new NullPointerException(); + } + if (property.equals("")) { + throw new IllegalArgumentException(); + } + _property = property; + _textComponent = textComponent; + _defaultValue = defaultValue; + _validColor = _textComponent.getBackground(); + } + + public String getProperty() { + return _property; + } + + public void clear() { + _textComponent.setText(_defaultValue); + } + + public void put(IValidatable bean) { + try { + String s = BeanUtils.getProperty(bean, _property); + _textComponent.setText(s != null && !s.equals("0") ? s : ""); // XXX displays zeros as blank + } catch (Exception e) { + throw new BindingException(e); + } + } + + public void get(IValidatable bean) { + try { + BeanUtils.setProperty(bean, _property, _textComponent.getText()); + } catch (Exception e) { + throw new BindingException(e); + } + } + + public void markValid() { + _textComponent.setBackground(_validColor); + _textComponent.requestFocusInWindow(); + } + + public void markInvalid() { + _textComponent.setBackground(Binding.INVALID_COLOR); + } + + public void setEnabled(boolean enabled) { + _textComponent.setEnabled(enabled); + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/binding/JToggleButtonBinding.java b/installer/lib/launch4j/src/net/sf/launch4j/binding/JToggleButtonBinding.java new file mode 100644 index 0000000000000000000000000000000000000000..43fe11913a8dac9239de0667e928594da6c06c44 --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/binding/JToggleButtonBinding.java @@ -0,0 +1,94 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on Apr 30, 2005 + */ +package net.sf.launch4j.binding; + +import java.awt.Color; + +import javax.swing.JToggleButton; + +import org.apache.commons.beanutils.PropertyUtils; + +/** + * Handles JToggleButton, JCheckBox + * + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public class JToggleButtonBinding implements Binding { + private final String _property; + private final JToggleButton _button; + private final boolean _defaultValue; + private final Color _validColor; + + public JToggleButtonBinding(String property, JToggleButton button, boolean defaultValue) { + if (property == null || button == null) { + throw new NullPointerException(); + } + if (property.equals("")) { + throw new IllegalArgumentException(); + } + _property = property; + _button = button; + _defaultValue = defaultValue; + _validColor = _button.getBackground(); + } + + public String getProperty() { + return _property; + } + + public void clear() { + _button.setSelected(_defaultValue); + } + + public void put(IValidatable bean) { + try { + // String s = BeanUtils.getProperty(o, _property); + // _checkBox.setSelected("true".equals(s)); + Boolean b = (Boolean) PropertyUtils.getProperty(bean, _property); + _button.setSelected(b != null && b.booleanValue()); + } catch (Exception e) { + throw new BindingException(e); + } + } + + public void get(IValidatable bean) { + try { + PropertyUtils.setProperty(bean, _property, Boolean.valueOf(_button.isSelected())); + } catch (Exception e) { + throw new BindingException(e); + } + } + + public void markValid() { + _button.setBackground(_validColor); + _button.requestFocusInWindow(); + } + + public void markInvalid() { + _button.setBackground(Binding.INVALID_COLOR); + } + + public void setEnabled(boolean enabled) { + _button.setEnabled(enabled); + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/binding/OptComponentBinding.java b/installer/lib/launch4j/src/net/sf/launch4j/binding/OptComponentBinding.java new file mode 100644 index 0000000000000000000000000000000000000000..9d514ad5a9d44bc1c0defd55b513c7c87d2732f1 --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/binding/OptComponentBinding.java @@ -0,0 +1,104 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on May 11, 2005 + */ +package net.sf.launch4j.binding; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Arrays; + +import javax.swing.JToggleButton; + +import org.apache.commons.beanutils.PropertyUtils; + +/** + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public class OptComponentBinding implements Binding, ActionListener { + private final Bindings _bindings; + private final String _property; + private final Class _clazz; + private final JToggleButton _button; + private final boolean _enabledByDefault; + + public OptComponentBinding(Bindings bindings, String property, Class clazz, + JToggleButton button, boolean enabledByDefault) { + if (property == null || clazz == null || button == null) { + throw new NullPointerException(); + } + if (property.equals("")) { + throw new IllegalArgumentException(); + } + if (!Arrays.asList(clazz.getInterfaces()).contains(IValidatable.class)) { + throw new IllegalArgumentException("Optional component must implement " + + IValidatable.class); + } + _bindings = bindings; + _property = property; + _clazz = clazz; + _button = button; + _button.addActionListener(this); + _enabledByDefault = enabledByDefault; + } + + public String getProperty() { + return _property; + } + + public void clear() { + _button.setSelected(_enabledByDefault); + updateComponents(); + } + + public void put(IValidatable bean) { + try { + Object component = PropertyUtils.getProperty(bean, _property); + _button.setSelected(component != null); + updateComponents(); + } catch (Exception e) { + throw new BindingException(e); + } + } + + public void get(IValidatable bean) { + try { + PropertyUtils.setProperty(bean, _property, _button.isSelected() + ? _clazz.newInstance() : null); + } catch (Exception e) { + throw new BindingException(e); + } + } + + public void markValid() {} + + public void markInvalid() {} + + public void setEnabled(boolean enabled) {} // XXX implement? + + public void actionPerformed(ActionEvent e) { + updateComponents(); + } + + private void updateComponents() { + _bindings.setComponentsEnabled(_property, _button.isSelected()); + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/binding/Validator.java b/installer/lib/launch4j/src/net/sf/launch4j/binding/Validator.java new file mode 100644 index 0000000000000000000000000000000000000000..b7f543adf79dc5d417a95ef81b18134d05d7926e --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/binding/Validator.java @@ -0,0 +1,190 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on 2004-01-30 + */ +package net.sf.launch4j.binding; + +import java.io.File; +import java.util.Collection; +import java.util.HashSet; + +import net.sf.launch4j.Util; +import net.sf.launch4j.config.ConfigPersister; + +/** + * @author Copyright (C) 2004 Grzegorz Kowal + */ +public class Validator { + public static final String ALPHANUMERIC_PATTERN = "[\\w]*?"; + public static final String ALPHA_PATTERN = "[\\w&&\\D]*?"; + public static final String NUMERIC_PATTERN = "[\\d]*?"; + public static final String PATH_PATTERN = "[\\w|[ .,:\\-/\\\\]]*?"; + + private static final String EMPTY_FIELD = "Enter: "; + private static final String FIELD_ERROR = "Invalid data: "; + private static final String RANGE_ERROR = " must be in range ["; + private static final String MINIMUM = " must be at least "; + private static final String DUPLICATE = " already exists."; + + private Validator() {} + + public static boolean isEmpty(String s) { + return s == null || s.equals(""); + } + + public static void checkNotNull(Object o, String property, String name) { + if (o == null) { + signalViolation(property, EMPTY_FIELD + name); + } + } + + public static void checkString(String s, int maxLength, String property, String name) { + if (s == null || s.length() == 0) { + signalViolation(property, EMPTY_FIELD + name); + } + if (s.length() > maxLength) { + signalLengthViolation(property, name, maxLength); + } + } + + public static void checkString(String s, int maxLength, String pattern, + String property, String name) { + checkString(s, maxLength, property, name); + if (!s.matches(pattern)) { + signalViolation(property, FIELD_ERROR + name); + } + } + + public static void checkOptString(String s, int maxLength, String property, String name) { + if (s == null || s.length() == 0) { + return; + } + if (s.length() > maxLength) { + signalLengthViolation(property, name, maxLength); + } + } + + public static void checkOptString(String s, int maxLength, String pattern, + String property, String name) { + if (s == null || s.length() == 0) { + return; + } + if (s.length() > maxLength) { + signalLengthViolation(property, name, maxLength); + } + if (!s.matches(pattern)) { + signalViolation(property, FIELD_ERROR + name); + } + } + + public static void checkRange(int value, int min, int max, + String property, String name) { + if (value < min || value > max) { + StringBuffer sb = new StringBuffer(name); + sb.append(RANGE_ERROR); + sb.append(min); + sb.append('-'); + sb.append(max); + sb.append(']'); + signalViolation(property, sb.toString()); + } + } + + public static void checkRange(char value, char min, char max, + String property, String name) { + if (value < min || value > max) { + StringBuffer sb = new StringBuffer(name); + sb.append(RANGE_ERROR); + sb.append(min); + sb.append('-'); + sb.append(max); + sb.append(']'); + signalViolation(property, sb.toString()); + } + } + + public static void checkMin(int value, int min, String property, String name) { + if (value < min) { + StringBuffer sb = new StringBuffer(name); + sb.append(MINIMUM); + sb.append(min); + signalViolation(property, sb.toString()); + } + } + + public static void checkTrue(boolean condition, String property, String msg) { + if (!condition) { + signalViolation(property, msg); + } + } + + public static void checkFalse(boolean condition, String property, String msg) { + if (condition) { + signalViolation(property, msg); + } + } + + public static void checkElementsNotNullUnique(Collection c, String property, String msg) { + if (c.contains(null) + || new HashSet(c).size() != c.size()) { + signalViolation(property, msg + DUPLICATE); + } + } + + public static void checkElementsUnique(Collection c, String property, String msg) { + if (new HashSet(c).size() != c.size()) { + signalViolation(property, msg + DUPLICATE); + } + } + + public static void checkFile(File f, String property, String fileDescription) { + File cfgPath = ConfigPersister.getInstance().getConfigPath(); + if (f == null || (!f.exists() && !Util.getAbsoluteFile(cfgPath, f).exists())) { + signalViolation(property, fileDescription + " doesn't exist."); + } + } + + public static void checkOptFile(File f, String property, String fileDescription) { + if (f != null && f.getPath().length() > 0) { + checkFile(f, property, fileDescription); + } + } + + public static void checkRelativeWinPath(String path, String property, String msg) { + if (path.startsWith("/") + || path.startsWith("\\") + || path.indexOf(':') != -1) { + signalViolation(property, msg); + } + } + + public static void signalLengthViolation(String property, String name, int maxLength) { + final StringBuffer sb = new StringBuffer(name); + sb.append(" exceeds the maximum length of "); + sb.append(maxLength); + sb.append(" characters."); + throw new InvariantViolationException(property, sb.toString()); + } + + public static void signalViolation(String property, String msg) { + throw new InvariantViolationException(property, msg); + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/config/Config.java b/installer/lib/launch4j/src/net/sf/launch4j/config/Config.java new file mode 100644 index 0000000000000000000000000000000000000000..2176d4d79c5d85e21ed910bc4b564d2dc1432e18 --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/config/Config.java @@ -0,0 +1,228 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on Apr 21, 2005 + */ +package net.sf.launch4j.config; + +import java.io.File; +import java.util.List; + +import net.sf.launch4j.binding.IValidatable; +import net.sf.launch4j.binding.Validator; + +/** + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public class Config implements IValidatable { + + public static final String HEADER = "header"; + public static final String JAR = "jar"; + public static final String OUTFILE = "outfile"; + public static final String ERR_TITLE = "errTitle"; + public static final String JAR_ARGS = "jarArgs"; + public static final String CHDIR = "chdir"; + public static final String CUSTOM_PROC_NAME = "customProcName"; + public static final String STAY_ALIVE = "stayAlive"; + public static final String ICON = "icon"; + + public static final int GUI_HEADER = 0; + public static final int CONSOLE_HEADER = 1; + public static final int CUSTOM_HEADER = 2; + + private int headerType; + private List headerObjects; + private List libs; + private File jar; + private File outfile; + + // runtime configuration + private String errTitle; + private String jarArgs; + private String chdir; + private boolean customProcName = false; + private boolean stayAlive = false; + private File icon; + private Jre jre; + private Splash splash; + private VersionInfo versionInfo; + + public void checkInvariants() { + Validator.checkTrue(outfile != null && outfile.getPath().endsWith(".exe"), + "outfile", "Specify output file with .exe extension."); + Validator.checkFile(jar, "jar", "Application jar"); + if (!Validator.isEmpty(chdir)) { + Validator.checkRelativeWinPath(chdir, + "chdir", "'chdir' must be a path relative to the executable."); + Validator.checkFalse(chdir.toLowerCase().equals("true") + || chdir.toLowerCase().equals("false"), + "chdir", "'chdir' is now a path instead of a boolean, please check the docs."); + } + Validator.checkOptFile(icon, "icon", "Icon"); + Validator.checkOptString(jarArgs, 128, "jarArgs", "Jar arguments"); + Validator.checkOptString(errTitle, 128, "errTitle", "Error title"); + Validator.checkRange(headerType, GUI_HEADER, CONSOLE_HEADER, + "headerType", "Invalid header type"); // TODO add custom header check + Validator.checkTrue(headerType != CONSOLE_HEADER || splash == null, + "headerType", "Splash screen is not implemented by console header."); + // TODO libs + jre.checkInvariants(); + } + + public void validate() { + checkInvariants(); + if (splash != null) { + splash.checkInvariants(); + } + if (versionInfo != null) { + versionInfo.checkInvariants(); + } + } + + /** Change current directory to EXE location. */ + public String getChdir() { + return chdir; + } + + public void setChdir(String chdir) { + this.chdir = chdir; + } + + /** Constant command line arguments passed to application jar. */ + public String getJarArgs() { + return jarArgs; + } + + public void setJarArgs(String jarArgs) { + this.jarArgs = jarArgs; + } + + /** Optional, error message box title. */ + public String getErrTitle() { + return errTitle; + } + + public void setErrTitle(String errTitle) { + this.errTitle = errTitle; + } + + /** launch4j header file. */ + public int getHeaderType() { + return headerType; + } + + public void setHeaderType(int headerType) { + this.headerType = headerType; + } + + public List getHeaderObjects() { +// switch (_headerType) { +// case GUI_HEADER: +// return +// case CONSOLE_HEADER: +// FIXME +// default: + return headerObjects; + } + + public void setHeaderObject(List headerObjects) { + this.headerObjects = headerObjects; + } + + public List getLibs() { + return libs; + // FIXME default libs if null or empty + } + + public void setLibs(List libs) { + this.libs = libs; + } + + /** ICO file. */ + public File getIcon() { + return icon; + } + + public void setIcon(File icon) { + this.icon = icon; + } + + /** Jar to wrap. */ + public File getJar() { + return jar; + } + + public void setJar(File jar) { + this.jar = jar; + } + + /** JRE configuration */ + public Jre getJre() { + return jre; + } + + public void setJre(Jre jre) { + this.jre = jre; + } + + /** Output EXE file. */ + public File getOutfile() { + return outfile; + } + + public void setOutfile(File outfile) { + this.outfile = outfile; + } + + /** Custom process name as the output EXE file name. */ + public boolean isCustomProcName() { + return customProcName; + } + + public void setCustomProcName(boolean customProcName) { + this.customProcName = customProcName; + } + + /** Splash screen configuration. */ + public Splash getSplash() { + return splash; + } + + public void setSplash(Splash splash) { + this.splash = splash; + } + + /** Stay alive after launching the application. */ + public boolean isStayAlive() { + return stayAlive; + } + + public void setStayAlive(boolean stayAlive) { + this.stayAlive = stayAlive; + } + + public VersionInfo getVersionInfo() { + return versionInfo; + } + + public void setVersionInfo(VersionInfo versionInfo) { + this.versionInfo = versionInfo; + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/config/ConfigPersister.java b/installer/lib/launch4j/src/net/sf/launch4j/config/ConfigPersister.java new file mode 100644 index 0000000000000000000000000000000000000000..b203df739503f0504e809d09ed92aed1e3e5ea09 --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/config/ConfigPersister.java @@ -0,0 +1,202 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on Apr 22, 2005 + */ +package net.sf.launch4j.config; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.util.Properties; + +import net.sf.launch4j.Util; + +import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.io.xml.DomDriver; + +/** + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public class ConfigPersister { + + private static final ConfigPersister _instance = new ConfigPersister(); + + private final XStream _xstream; + private Config _config; + private File _configPath; + + private ConfigPersister() { + _xstream = new XStream(new DomDriver()); + _xstream.alias("launch4jConfig", Config.class); + _xstream.alias("jre", Jre.class); + _xstream.alias("splash", Splash.class); + _xstream.alias("versionInfo", VersionInfo.class); + } + + public static ConfigPersister getInstance() { + return _instance; + } + + public Config getConfig() { + return _config; + } + + public File getConfigPath() { + return _configPath; + } + + public File getOutputPath() throws IOException { + if (_config.getOutfile().isAbsolute()) { + return _config.getOutfile().getParentFile(); + } + File parent = _config.getOutfile().getParentFile(); + return (parent != null) ? new File(_configPath, parent.getPath()) : _configPath; + } + + public File getOutputFile() throws IOException { + return _config.getOutfile().isAbsolute() + ? _config.getOutfile() + : new File(getOutputPath(), _config.getOutfile().getName()); + } + + public void createBlank() { + _config = new Config(); + _config.setJre(new Jre()); + _configPath = null; + } + + public void setAntConfig(Config c, File basedir) { + _config = c; + _configPath = basedir; + } + + public void load(File f) throws ConfigPersisterException { + try { + BufferedReader r = new BufferedReader(new FileReader(f)); + _config = (Config) _xstream.fromXML(r); + r.close(); + setConfigPath(f); + } catch (Exception e) { + throw new ConfigPersisterException(e); + } + } + + /** + * Imports launch4j 1.x.x config file. + */ + public void loadVersion1(File f) throws ConfigPersisterException { + try { + Props props = new Props(f); + _config = new Config(); + String header = props.getProperty(Config.HEADER); + _config.setHeaderType(header == null + || header.toLowerCase().equals("guihead.bin") ? 0 : 1); + _config.setJar(props.getFile(Config.JAR)); + _config.setOutfile(props.getFile(Config.OUTFILE)); + _config.setJre(new Jre()); + _config.getJre().setPath(props.getProperty(Jre.PATH)); + _config.getJre().setMinVersion(props.getProperty(Jre.MIN_VERSION)); + _config.getJre().setMaxVersion(props.getProperty(Jre.MAX_VERSION)); + _config.getJre().setArgs(props.getProperty(Jre.ARGS)); + _config.setJarArgs(props.getProperty(Config.JAR_ARGS)); + _config.setChdir("true".equals(props.getProperty(Config.CHDIR)) ? "." : null); + _config.setCustomProcName("true".equals( + props.getProperty("setProcName"))); // 1.x + _config.setStayAlive("true".equals(props.getProperty(Config.STAY_ALIVE))); + _config.setErrTitle(props.getProperty(Config.ERR_TITLE)); + _config.setIcon(props.getFile(Config.ICON)); + File splashFile = props.getFile(Splash.SPLASH_FILE); + if (splashFile != null) { + _config.setSplash(new Splash()); + _config.getSplash().setFile(splashFile); + String waitfor = props.getProperty("waitfor"); // 1.x + _config.getSplash().setWaitForWindow(waitfor != null && !waitfor.equals("")); + String splashTimeout = props.getProperty(Splash.TIMEOUT); + if (splashTimeout != null) { + _config.getSplash().setTimeout(Integer.parseInt(splashTimeout)); + } + _config.getSplash().setTimeoutErr("true".equals( + props.getProperty(Splash.TIMEOUT_ERR))); + } else { + _config.setSplash(null); + } + setConfigPath(f); + } catch (IOException e) { + throw new ConfigPersisterException(e); + } + } + + public void save(File f) throws ConfigPersisterException { + try { + BufferedWriter w = new BufferedWriter(new FileWriter(f)); + _xstream.toXML(_config, w); + w.close(); + setConfigPath(f); + } catch (Exception e) { + throw new ConfigPersisterException(e); + } + } + + private void setConfigPath(File configFile) { + _configPath = configFile.getAbsoluteFile().getParentFile(); + } + + private class Props { + final Properties _properties = new Properties(); + + public Props(File f) throws IOException { + FileInputStream is = null; + try { + is = new FileInputStream(f); + _properties.load(is); + } finally { + Util.close(is); + } + } + + /** + * Get property and remove trailing # comments. + */ + public String getProperty(String key) { + String p = _properties.getProperty(key); + if (p == null) { + return null; + } + int x = p.indexOf('#'); + if (x == -1) { + return p; + } + do { + x--; + } while (x > 0 && (p.charAt(x) == ' ' || p.charAt(x) == '\t')); + return (x == 0) ? "" : p.substring(0, x + 1); + } + + public File getFile(String key) { + String value = getProperty(key); + return value != null ? new File(value) : null; + } + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/config/ConfigPersisterException.java b/installer/lib/launch4j/src/net/sf/launch4j/config/ConfigPersisterException.java new file mode 100644 index 0000000000000000000000000000000000000000..7ade4cc4508b8fc9c15aab01d67e4ff22e9f6ae3 --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/config/ConfigPersisterException.java @@ -0,0 +1,37 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on Apr 22, 2005 + */ +package net.sf.launch4j.config; + +/** + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public class ConfigPersisterException extends Exception { + + public ConfigPersisterException(String msg, Throwable t) { + super(msg, t); + } + + public ConfigPersisterException(Throwable t) { + super(t); + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/config/Jre.java b/installer/lib/launch4j/src/net/sf/launch4j/config/Jre.java new file mode 100644 index 0000000000000000000000000000000000000000..ef6c36fb7cc8410b1da693db17a44ce37945b20c --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/config/Jre.java @@ -0,0 +1,125 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on Apr 21, 2005 + */ +package net.sf.launch4j.config; + +import net.sf.launch4j.binding.IValidatable; +import net.sf.launch4j.binding.Validator; + +/** + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public class Jre implements IValidatable { + public static final String VERSION_PATTERN = "(\\d\\.){2}\\d(_\\d+)?"; + public static final String PATH = "jrepath"; + public static final String MIN_VERSION = "javamin"; + public static final String MAX_VERSION = "javamax"; + public static final String ARGS = "jvmArgs"; + + private String path; + private String minVersion; + private String maxVersion; + private int initialHeapSize; + private int maxHeapSize; + private String args; + + public void checkInvariants() { + Validator.checkOptString(minVersion, 10, VERSION_PATTERN, + "jre.minVersion", "Minimum JRE version should be x.x.x[_xx]"); + Validator.checkOptString(maxVersion, 10, VERSION_PATTERN, + "jre.maxVersion", "Maximum JRE version should be x.x.x[_xx]"); + if (Validator.isEmpty(path)) { + Validator.checkFalse(Validator.isEmpty(minVersion), + "jre.path", "Specify embedded JRE path or/and minimum JRE version."); + } else { + Validator.checkRelativeWinPath(path, + "jre.path", "Embedded JRE path must be a path relative to the executable."); + } + if (!Validator.isEmpty(maxVersion)) { + Validator.checkFalse(Validator.isEmpty(minVersion), + "jre.minVersion", "Specify minimum JRE version."); + Validator.checkTrue(minVersion.compareTo(maxVersion) <= 0, + "jre.minVersion", "Minimum JRE version is greater than the maximum."); + } + Validator.checkTrue(initialHeapSize >= 0, "jre.initialHeapSize", + "Initial heap size cannot be negative," + + " specify 0 or leave the field blank to use the JVM default."); + Validator.checkTrue(maxHeapSize == 0 || initialHeapSize <= maxHeapSize, + "jre.maxHeapSize", "Maximum heap size cannot be less than the initial" + + " size, specify 0 or leave the field blank to use the JVM default."); + Validator.checkOptString(args, 512, "jre.args", "JVM arguments"); + } + + /** JVM arguments: XOptions, system properties. */ + public String getArgs() { + return args; + } + + public void setArgs(String args) { + this.args = args; + } + + /** Max Java version (x.x.x) */ + public String getMaxVersion() { + return maxVersion; + } + + public void setMaxVersion(String maxVersion) { + this.maxVersion = maxVersion; + } + + /** Min Java version (x.x.x) */ + public String getMinVersion() { + return minVersion; + } + + public void setMinVersion(String minVersion) { + this.minVersion = minVersion; + } + + /** JRE path */ + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + /** Initial heap size in MB */ + public int getInitialHeapSize() { + return initialHeapSize; + } + + public void setInitialHeapSize(int initialHeapSize) { + this.initialHeapSize = initialHeapSize; + } + + /** Max heap size in MB */ + public int getMaxHeapSize() { + return maxHeapSize; + } + + public void setMaxHeapSize(int maxHeapSize) { + this.maxHeapSize = maxHeapSize; + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/config/Splash.java b/installer/lib/launch4j/src/net/sf/launch4j/config/Splash.java new file mode 100644 index 0000000000000000000000000000000000000000..f7315a9d121f163666f8579886615de25339745f --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/config/Splash.java @@ -0,0 +1,84 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on Apr 21, 2005 + */ +package net.sf.launch4j.config; + +import java.io.File; + +import net.sf.launch4j.binding.IValidatable; +import net.sf.launch4j.binding.Validator; + +/** + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public class Splash implements IValidatable { + public static final String SPLASH_FILE = "splash"; + public static final String WAIT_FOR_TITLE = "waitForTitle"; + public static final String TIMEOUT = "splashTimeout"; + public static final String TIMEOUT_ERR = "splashTimeoutErr"; + + private File file; + private boolean waitForWindow = true; + private int timeout = 60; + private boolean timeoutErr = true; + + public void checkInvariants() { + Validator.checkFile(file, "splash.file", "Splash file"); + Validator.checkRange(timeout, 1, 60 * 15, "splash.timeout", "Splash timeout"); + } + + /** Splash screen in BMP format. */ + public File getFile() { + return file; + } + + public void setFile(File file) { + this.file = file; + } + + /** Splash timeout in seconds. */ + public int getTimeout() { + return timeout; + } + + public void setTimeout(int timeout) { + this.timeout = timeout; + } + + /** Signal error on splash timeout. */ + public boolean isTimeoutErr() { + return timeoutErr; + } + + public void setTimeoutErr(boolean timeoutErr) { + this.timeoutErr = timeoutErr; + } + + /** Hide splash screen when the child process displayes the first window. */ + public boolean getWaitForWindow() { + return waitForWindow; + } + + public void setWaitForWindow(boolean waitForWindow) { + this.waitForWindow = waitForWindow; + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/config/VersionInfo.java b/installer/lib/launch4j/src/net/sf/launch4j/config/VersionInfo.java new file mode 100644 index 0000000000000000000000000000000000000000..359af7e172e7ecb809cb2940d782f10abdcb3a47 --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/config/VersionInfo.java @@ -0,0 +1,135 @@ +/* + * Created on May 21, 2005 + */ +package net.sf.launch4j.config; + +import net.sf.launch4j.binding.IValidatable; +import net.sf.launch4j.binding.Validator; + +/** + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public class VersionInfo implements IValidatable { + public static final String VERSION_PATTERN = "(\\d+\\.){3}\\d+"; + private static final int MAX_LEN = 150; + + private String fileVersion; + private String txtFileVersion; + private String fileDescription; + private String copyright; + private String productVersion; + private String txtProductVersion; + private String productName; + private String companyName; + private String internalName; + private String originalFilename; + + public void checkInvariants() { + Validator.checkString(fileVersion, 20, VERSION_PATTERN, + "versionInfo.fileVersion", "File version, should be 'x.x.x.x'"); + Validator.checkString(txtFileVersion, 50, + "versionInfo.txtFileVersion", "Free form file version"); + Validator.checkString(fileDescription, MAX_LEN, + "versionInfo.fileDescription", "File description"); + Validator.checkString(copyright, MAX_LEN, + "versionInfo.copyright", "Copyright"); + Validator.checkString(productVersion, 20, VERSION_PATTERN, + "versionInfo.productVersion", "Product version, should be 'x.x.x.x'"); + Validator.checkString(txtProductVersion, 50, + "versionInfo.txtProductVersion", "Free from product version"); + Validator.checkString(productName, MAX_LEN, + "versionInfo.productName", "Product name"); + Validator.checkOptString(companyName, MAX_LEN, + "versionInfo.companyName", "Company name"); + Validator.checkString(internalName, 50, + "versionInfo.internalName", "Internal name"); + Validator.checkTrue(!internalName.endsWith(".exe"), + "versionInfo.internalName", + "Internal name shouldn't have the .exe extension."); + Validator.checkString(originalFilename, 50, + "versionInfo.originalFilename", "Original filename"); + Validator.checkTrue(originalFilename.endsWith(".exe"), + "versionInfo.originalFilename", + "Original filename should end with the .exe extension."); + } + + public String getCompanyName() { + return companyName; + } + + public void setCompanyName(String companyName) { + this.companyName = companyName; + } + + public String getCopyright() { + return copyright; + } + + public void setCopyright(String copyright) { + this.copyright = copyright; + } + + public String getFileDescription() { + return fileDescription; + } + + public void setFileDescription(String fileDescription) { + this.fileDescription = fileDescription; + } + + public String getFileVersion() { + return fileVersion; + } + + public void setFileVersion(String fileVersion) { + this.fileVersion = fileVersion; + } + + public String getInternalName() { + return internalName; + } + + public void setInternalName(String internalName) { + this.internalName = internalName; + } + + public String getOriginalFilename() { + return originalFilename; + } + + public void setOriginalFilename(String originalFilename) { + this.originalFilename = originalFilename; + } + + public String getProductName() { + return productName; + } + + public void setProductName(String productName) { + this.productName = productName; + } + + public String getProductVersion() { + return productVersion; + } + + public void setProductVersion(String productVersion) { + this.productVersion = productVersion; + } + + public String getTxtFileVersion() { + return txtFileVersion; + } + + public void setTxtFileVersion(String txtFileVersion) { + this.txtFileVersion = txtFileVersion; + } + + public String getTxtProductVersion() { + return txtProductVersion; + } + + public void setTxtProductVersion(String txtProductVersion) { + this.txtProductVersion = txtProductVersion; + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/form/Config.jfrm b/installer/lib/launch4j/src/net/sf/launch4j/form/Config.jfrm new file mode 100644 index 0000000000000000000000000000000000000000..0be002848db1c866e7c4cae90349264fdc0368dc Binary files /dev/null and b/installer/lib/launch4j/src/net/sf/launch4j/form/Config.jfrm differ diff --git a/installer/lib/launch4j/src/net/sf/launch4j/form/ConfigForm.java b/installer/lib/launch4j/src/net/sf/launch4j/form/ConfigForm.java new file mode 100644 index 0000000000000000000000000000000000000000..e41c832871ec1cbb81cd290752a775e66d6b8298 --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/form/ConfigForm.java @@ -0,0 +1,534 @@ +package net.sf.launch4j.form; + +import com.jeta.forms.components.separator.TitledSeparator; +import com.jgoodies.forms.layout.CellConstraints; +import com.jgoodies.forms.layout.FormLayout; +import java.awt.BorderLayout; +import java.awt.Container; +import java.awt.Dimension; +import javax.swing.Box; +import javax.swing.ButtonGroup; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.JRadioButton; +import javax.swing.JScrollPane; +import javax.swing.JTabbedPane; +import javax.swing.JTextArea; +import javax.swing.JTextField; + + +public abstract class ConfigForm extends JPanel +{ + protected final JTabbedPane _tab = new JTabbedPane(); + protected final JButton _outfileButton = new JButton(); + protected final JTextField _outfileField = new JTextField(); + protected final JTextField _errorTitleField = new JTextField(); + protected final JCheckBox _customProcNameCheck = new JCheckBox(); + protected final JCheckBox _stayAliveCheck = new JCheckBox(); + protected final JTextField _iconField = new JTextField(); + protected final JTextField _jarField = new JTextField(); + protected final JButton _jarButton = new JButton(); + protected final JButton _iconButton = new JButton(); + protected final JTextField _jarArgsField = new JTextField(); + protected final JTextField _chdirField = new JTextField(); + protected final JRadioButton _guiHeaderRadio = new JRadioButton(); + protected final ButtonGroup _headerButtonGroup = new ButtonGroup(); + protected final JRadioButton _consoleHeaderRadio = new JRadioButton(); + protected final JList _objectFileList = new JList(); + protected final JList _w32apiList = new JList(); + protected final JTextField _jrePathField = new JTextField(); + protected final JTextField _jreMinField = new JTextField(); + protected final JTextField _jreMaxField = new JTextField(); + protected final JTextArea _jvmArgsTextArea = new JTextArea(); + protected final JTextField _initialHeapSizeField = new JTextField(); + protected final JTextField _maxHeapSizeField = new JTextField(); + protected final JCheckBox _timeoutErrCheck = new JCheckBox(); + protected final JTextField _splashFileField = new JTextField(); + protected final JTextField _timeoutField = new JTextField(); + protected final JButton _splashFileButton = new JButton(); + protected final JCheckBox _splashCheck = new JCheckBox(); + protected final JCheckBox _waitForWindowCheck = new JCheckBox(); + protected final JCheckBox _versionInfoCheck = new JCheckBox(); + protected final JTextField _fileVersionField = new JTextField(); + protected final JTextField _productVersionField = new JTextField(); + protected final JTextField _fileDescriptionField = new JTextField(); + protected final JTextField _copyrightField = new JTextField(); + protected final JTextField _txtFileVersionField = new JTextField(); + protected final JTextField _txtProductVersionField = new JTextField(); + protected final JTextField _productNameField = new JTextField(); + protected final JTextField _originalFilenameField = new JTextField(); + protected final JTextField _internalNameField = new JTextField(); + protected final JTextField _companyNameField = new JTextField(); + protected final JTextArea _logTextArea = new JTextArea(); + + /** + * Default constructor + */ + public ConfigForm() + { + initializePanel(); + } + + /** + * Adds fill components to empty cells in the first row and first column of the grid. + * This ensures that the grid spacing will be the same as shown in the designer. + * @param cols an array of column indices in the first row where fill components should be added. + * @param rows an array of row indices in the first column where fill components should be added. + */ + void addFillComponents( Container panel, int[] cols, int[] rows ) + { + Dimension filler = new Dimension(10,10); + + boolean filled_cell_11 = false; + CellConstraints cc = new CellConstraints(); + if ( cols.length > 0 && rows.length > 0 ) + { + if ( cols[0] == 1 && rows[0] == 1 ) + { + /** add a rigid area */ + panel.add( Box.createRigidArea( filler ), cc.xy(1,1) ); + filled_cell_11 = true; + } + } + + for( int index = 0; index < cols.length; index++ ) + { + if ( cols[index] == 1 && filled_cell_11 ) + { + continue; + } + panel.add( Box.createRigidArea( filler ), cc.xy(cols[index],1) ); + } + + for( int index = 0; index < rows.length; index++ ) + { + if ( rows[index] == 1 && filled_cell_11 ) + { + continue; + } + panel.add( Box.createRigidArea( filler ), cc.xy(1,rows[index]) ); + } + + } + + /** + * Helper method to load an image file from the CLASSPATH + * @param imageName the package and name of the file to load relative to the CLASSPATH + * @return an ImageIcon instance with the specified image file + * @throws IllegalArgumentException if the image resource cannot be loaded. + */ + public ImageIcon loadImage( String imageName ) + { + try + { + ClassLoader classloader = getClass().getClassLoader(); + java.net.URL url = classloader.getResource( imageName ); + if ( url != null ) + { + ImageIcon icon = new ImageIcon( url ); + return icon; + } + } + catch( Exception e ) + { + e.printStackTrace(); + } + throw new IllegalArgumentException( "Unable to load image: " + imageName ); + } + + public JPanel createPanel() + { + JPanel jpanel1 = new JPanel(); + FormLayout formlayout1 = new FormLayout("FILL:3DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:3DLU:NONE","CENTER:3DLU:NONE,FILL:DEFAULT:NONE,CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:3DLU:NONE"); + CellConstraints cc = new CellConstraints(); + jpanel1.setLayout(formlayout1); + + _tab.setName("tab"); + _tab.addTab("Basic",null,createPanel1()); + _tab.addTab("Header",null,createPanel2()); + _tab.addTab("JRE",null,createPanel3()); + _tab.addTab("Splash",null,createPanel4()); + _tab.addTab("Version Info",null,createPanel5()); + jpanel1.add(_tab,cc.xy(2,2)); + + _logTextArea.setName("logTextArea"); + JScrollPane jscrollpane1 = new JScrollPane(); + jscrollpane1.setViewportView(_logTextArea); + jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); + jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + jpanel1.add(jscrollpane1,cc.xy(2,6)); + + TitledSeparator titledseparator1 = new TitledSeparator(); + titledseparator1.setText("Log"); + jpanel1.add(titledseparator1,cc.xy(2,4)); + + addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,2,3,4,5,6,7 }); + return jpanel1; + } + + public JPanel createPanel1() + { + JPanel jpanel1 = new JPanel(); + FormLayout formlayout1 = new FormLayout("FILL:7DLU:NONE,RIGHT:MAX(55DLU;DEFAULT):NONE,FILL:3DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:3DLU:NONE,FILL:26PX:NONE,FILL:7DLU:NONE","CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:9DLU:NONE"); + CellConstraints cc = new CellConstraints(); + jpanel1.setLayout(formlayout1); + + _outfileButton.setIcon(loadImage("images/open16.png")); + _outfileButton.setName("outfileButton"); + jpanel1.add(_outfileButton,cc.xy(6,2)); + + JLabel jlabel1 = new JLabel(); + jlabel1.setText("<html><b>Output file</b></html>"); + jpanel1.add(jlabel1,cc.xy(2,2)); + + JLabel jlabel2 = new JLabel(); + jlabel2.setText("Error title"); + jpanel1.add(jlabel2,cc.xy(2,12)); + + _outfileField.setName("outfileField"); + _outfileField.setToolTipText("Output executable file."); + jpanel1.add(_outfileField,cc.xy(4,2)); + + _errorTitleField.setName("errorTitleField"); + _errorTitleField.setToolTipText("Launch4j signals errors using a message box, you can set it's title to the application's name."); + jpanel1.add(_errorTitleField,cc.xy(4,12)); + + _customProcNameCheck.setActionCommand("Custom process name"); + _customProcNameCheck.setName("customProcNameCheck"); + _customProcNameCheck.setText("Custom process name"); + jpanel1.add(_customProcNameCheck,cc.xy(4,14)); + + _stayAliveCheck.setActionCommand("Stay alive after launching a GUI application"); + _stayAliveCheck.setName("stayAliveCheck"); + _stayAliveCheck.setText("Stay alive after launching a GUI application"); + jpanel1.add(_stayAliveCheck,cc.xy(4,16)); + + JLabel jlabel3 = new JLabel(); + jlabel3.setText("Icon"); + jpanel1.add(jlabel3,cc.xy(2,6)); + + _iconField.setName("iconField"); + _iconField.setToolTipText("Application icon."); + jpanel1.add(_iconField,cc.xy(4,6)); + + _jarField.setName("jarField"); + _jarField.setToolTipText("Application jar."); + jpanel1.add(_jarField,cc.xy(4,4)); + + JLabel jlabel4 = new JLabel(); + jlabel4.setText("<html><b>Jar</b></html>"); + jpanel1.add(jlabel4,cc.xy(2,4)); + + _jarButton.setIcon(loadImage("images/open16.png")); + _jarButton.setName("jarButton"); + jpanel1.add(_jarButton,cc.xy(6,4)); + + _iconButton.setIcon(loadImage("images/open16.png")); + _iconButton.setName("iconButton"); + jpanel1.add(_iconButton,cc.xy(6,6)); + + JLabel jlabel5 = new JLabel(); + jlabel5.setText("Jar arguments"); + jpanel1.add(jlabel5,cc.xy(2,10)); + + _jarArgsField.setName("jarArgsField"); + _jarArgsField.setToolTipText("Constant command line arguments passed to the application."); + jpanel1.add(_jarArgsField,cc.xy(4,10)); + + JLabel jlabel6 = new JLabel(); + jlabel6.setText("Options"); + jpanel1.add(jlabel6,cc.xy(2,14)); + + JLabel jlabel7 = new JLabel(); + jlabel7.setText("Change dir"); + jpanel1.add(jlabel7,cc.xy(2,8)); + + _chdirField.setName("chdirField"); + _chdirField.setToolTipText("Change current directory to a location relative to the executable. Empty field has no effect, . - changes directory to the exe location."); + jpanel1.add(_chdirField,cc.xy(4,8)); + + addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 }); + return jpanel1; + } + + public JPanel createPanel2() + { + JPanel jpanel1 = new JPanel(); + FormLayout formlayout1 = new FormLayout("FILL:7DLU:NONE,RIGHT:MAX(55DLU;DEFAULT):NONE,FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:7DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:7DLU:NONE","CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,FILL:DEFAULT:GROW(0.2),CENTER:3DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:9DLU:NONE"); + CellConstraints cc = new CellConstraints(); + jpanel1.setLayout(formlayout1); + + JLabel jlabel1 = new JLabel(); + jlabel1.setText("Header type"); + jpanel1.add(jlabel1,cc.xy(2,2)); + + _guiHeaderRadio.setActionCommand("GUI"); + _guiHeaderRadio.setName("guiHeaderRadio"); + _guiHeaderRadio.setText("GUI"); + _headerButtonGroup.add(_guiHeaderRadio); + jpanel1.add(_guiHeaderRadio,cc.xy(4,2)); + + _consoleHeaderRadio.setActionCommand("Console"); + _consoleHeaderRadio.setName("consoleHeaderRadio"); + _consoleHeaderRadio.setText("Console"); + _headerButtonGroup.add(_consoleHeaderRadio); + jpanel1.add(_consoleHeaderRadio,cc.xy(6,2)); + + JLabel jlabel2 = new JLabel(); + jlabel2.setText("Object files"); + jpanel1.add(jlabel2,new CellConstraints(2,4,1,1,CellConstraints.DEFAULT,CellConstraints.TOP)); + + _objectFileList.setName("objectFileList"); + _objectFileList.setToolTipText("Compiled header files."); + JScrollPane jscrollpane1 = new JScrollPane(); + jscrollpane1.setViewportView(_objectFileList); + jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); + jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + jpanel1.add(jscrollpane1,cc.xywh(4,4,4,1)); + + JLabel jlabel3 = new JLabel(); + jlabel3.setText("w32api"); + jpanel1.add(jlabel3,new CellConstraints(2,6,1,1,CellConstraints.DEFAULT,CellConstraints.TOP)); + + _w32apiList.setName("w32apiList"); + _w32apiList.setToolTipText("DLLs required by header."); + JScrollPane jscrollpane2 = new JScrollPane(); + jscrollpane2.setViewportView(_w32apiList); + jscrollpane2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); + jscrollpane2.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + jpanel1.add(jscrollpane2,cc.xywh(4,6,4,1)); + + addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7,8 },new int[]{ 1,2,3,4,5,6,7 }); + return jpanel1; + } + + public JPanel createPanel3() + { + JPanel jpanel1 = new JPanel(); + FormLayout formlayout1 = new FormLayout("FILL:7DLU:NONE,RIGHT:MAX(55DLU;DEFAULT):NONE,FILL:3DLU:NONE,FILL:60DLU:NONE,FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:7DLU:NONE","CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:9DLU:NONE"); + CellConstraints cc = new CellConstraints(); + jpanel1.setLayout(formlayout1); + + JLabel jlabel1 = new JLabel(); + jlabel1.setText("<html><b>Emb. JRE path</b></html>"); + jpanel1.add(jlabel1,cc.xy(2,2)); + + JLabel jlabel2 = new JLabel(); + jlabel2.setText("<html><b>Min JRE version</b></html>"); + jpanel1.add(jlabel2,cc.xy(2,4)); + + JLabel jlabel3 = new JLabel(); + jlabel3.setText("Max JRE version"); + jpanel1.add(jlabel3,cc.xy(2,6)); + + JLabel jlabel4 = new JLabel(); + jlabel4.setText("JVM arguments"); + jpanel1.add(jlabel4,new CellConstraints(2,12,1,1,CellConstraints.DEFAULT,CellConstraints.TOP)); + + _jrePathField.setName("jrePathField"); + _jrePathField.setToolTipText("Embedded JRE path relative to the executable."); + jpanel1.add(_jrePathField,cc.xywh(4,2,4,1)); + + _jreMinField.setName("jreMinField"); + jpanel1.add(_jreMinField,cc.xy(4,4)); + + _jreMaxField.setName("jreMaxField"); + jpanel1.add(_jreMaxField,cc.xy(4,6)); + + _jvmArgsTextArea.setName("jvmArgsTextArea"); + _jvmArgsTextArea.setToolTipText("Accepts everything you would normally pass to java/javaw launcher: assertion options, system properties and X options."); + JScrollPane jscrollpane1 = new JScrollPane(); + jscrollpane1.setViewportView(_jvmArgsTextArea); + jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); + jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + jpanel1.add(jscrollpane1,cc.xywh(4,12,4,1)); + + JLabel jlabel5 = new JLabel(); + jlabel5.setText("Initial heap size"); + jpanel1.add(jlabel5,cc.xy(2,8)); + + JLabel jlabel6 = new JLabel(); + jlabel6.setText("Max heap size"); + jpanel1.add(jlabel6,cc.xy(2,10)); + + JLabel jlabel7 = new JLabel(); + jlabel7.setText("MB"); + jpanel1.add(jlabel7,cc.xy(6,8)); + + JLabel jlabel8 = new JLabel(); + jlabel8.setText("MB"); + jpanel1.add(jlabel8,cc.xy(6,10)); + + _initialHeapSizeField.setName("initialHeapSizeField"); + jpanel1.add(_initialHeapSizeField,cc.xy(4,8)); + + _maxHeapSizeField.setName("maxHeapSizeField"); + jpanel1.add(_maxHeapSizeField,cc.xy(4,10)); + + addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7,8 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13 }); + return jpanel1; + } + + public JPanel createPanel4() + { + JPanel jpanel1 = new JPanel(); + FormLayout formlayout1 = new FormLayout("FILL:7DLU:NONE,RIGHT:MAX(55DLU;DEFAULT):NONE,FILL:3DLU:NONE,FILL:60DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:3DLU:NONE,FILL:26PX:NONE,FILL:7DLU:NONE","CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:9DLU:NONE"); + CellConstraints cc = new CellConstraints(); + jpanel1.setLayout(formlayout1); + + JLabel jlabel1 = new JLabel(); + jlabel1.setText("Splash file"); + jpanel1.add(jlabel1,cc.xy(2,4)); + + JLabel jlabel2 = new JLabel(); + jlabel2.setText("Wait for window"); + jpanel1.add(jlabel2,cc.xy(2,6)); + + JLabel jlabel3 = new JLabel(); + jlabel3.setText("Timeout [s]"); + jpanel1.add(jlabel3,cc.xy(2,8)); + + _timeoutErrCheck.setActionCommand("Signal error on timeout"); + _timeoutErrCheck.setName("timeoutErrCheck"); + _timeoutErrCheck.setText("Signal error on timeout"); + _timeoutErrCheck.setToolTipText("True signals an error on splash timeout, false closes the splash screen quietly."); + jpanel1.add(_timeoutErrCheck,cc.xywh(4,10,2,1)); + + _splashFileField.setName("splashFileField"); + _splashFileField.setToolTipText("Splash screen file in BMP format."); + jpanel1.add(_splashFileField,cc.xywh(4,4,2,1)); + + _timeoutField.setName("timeoutField"); + _timeoutField.setToolTipText("Number of seconds after which the splash screen must close. Splash timeout may cause an error depending on splashTimeoutErr property."); + jpanel1.add(_timeoutField,cc.xy(4,8)); + + _splashFileButton.setIcon(loadImage("images/open16.png")); + _splashFileButton.setName("splashFileButton"); + jpanel1.add(_splashFileButton,cc.xy(7,4)); + + _splashCheck.setActionCommand("Enable splash screen"); + _splashCheck.setName("splashCheck"); + _splashCheck.setText("Enable splash screen"); + jpanel1.add(_splashCheck,cc.xywh(4,2,2,1)); + + _waitForWindowCheck.setActionCommand("Close splash screen when an application window appears"); + _waitForWindowCheck.setName("waitForWindowCheck"); + _waitForWindowCheck.setText("Close splash screen when an application window appears"); + jpanel1.add(_waitForWindowCheck,cc.xywh(4,6,2,1)); + + addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7,8 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11 }); + return jpanel1; + } + + public JPanel createPanel5() + { + JPanel jpanel1 = new JPanel(); + FormLayout formlayout1 = new FormLayout("FILL:7DLU:NONE,RIGHT:MAX(55DLU;DEFAULT):NONE,FILL:3DLU:NONE,FILL:60DLU:NONE,FILL:7DLU:NONE,RIGHT:DEFAULT:NONE,FILL:3DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:7DLU:NONE","CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:9DLU:NONE"); + CellConstraints cc = new CellConstraints(); + jpanel1.setLayout(formlayout1); + + _versionInfoCheck.setActionCommand("Add version information"); + _versionInfoCheck.setName("versionInfoCheck"); + _versionInfoCheck.setText("Add version information"); + jpanel1.add(_versionInfoCheck,cc.xywh(4,2,5,1)); + + JLabel jlabel1 = new JLabel(); + jlabel1.setText("File version"); + jpanel1.add(jlabel1,cc.xy(2,4)); + + _fileVersionField.setName("fileVersionField"); + _fileVersionField.setToolTipText("Version number 'x.x.x.x'"); + jpanel1.add(_fileVersionField,cc.xy(4,4)); + + TitledSeparator titledseparator1 = new TitledSeparator(); + titledseparator1.setText("Additional information"); + jpanel1.add(titledseparator1,cc.xywh(2,10,7,1)); + + JLabel jlabel2 = new JLabel(); + jlabel2.setText("Product version"); + jpanel1.add(jlabel2,cc.xy(2,12)); + + _productVersionField.setName("productVersionField"); + _productVersionField.setToolTipText("Version number 'x.x.x.x'"); + jpanel1.add(_productVersionField,cc.xy(4,12)); + + JLabel jlabel3 = new JLabel(); + jlabel3.setText("File description"); + jpanel1.add(jlabel3,cc.xy(2,6)); + + _fileDescriptionField.setName("fileDescriptionField"); + _fileDescriptionField.setToolTipText("File description presented to the user."); + jpanel1.add(_fileDescriptionField,cc.xywh(4,6,5,1)); + + JLabel jlabel4 = new JLabel(); + jlabel4.setText("Copyright"); + jpanel1.add(jlabel4,cc.xy(2,8)); + + _copyrightField.setName("copyrightField"); + jpanel1.add(_copyrightField,cc.xywh(4,8,5,1)); + + JLabel jlabel5 = new JLabel(); + jlabel5.setText("Free form"); + jpanel1.add(jlabel5,cc.xy(6,4)); + + _txtFileVersionField.setName("txtFileVersionField"); + _txtFileVersionField.setToolTipText("Free form file version, for example '1.20.RC1'."); + jpanel1.add(_txtFileVersionField,cc.xy(8,4)); + + JLabel jlabel6 = new JLabel(); + jlabel6.setText("Free form"); + jpanel1.add(jlabel6,cc.xy(6,12)); + + _txtProductVersionField.setName("txtProductVersionField"); + _txtProductVersionField.setToolTipText("Free form product version, for example '1.20.RC1'."); + jpanel1.add(_txtProductVersionField,cc.xy(8,12)); + + JLabel jlabel7 = new JLabel(); + jlabel7.setText("Product name"); + jpanel1.add(jlabel7,cc.xy(2,14)); + + _productNameField.setName("productNameField"); + jpanel1.add(_productNameField,cc.xywh(4,14,5,1)); + + JLabel jlabel8 = new JLabel(); + jlabel8.setText("Original filename"); + jpanel1.add(jlabel8,cc.xy(2,20)); + + _originalFilenameField.setName("originalFilenameField"); + _originalFilenameField.setToolTipText("Original name of the file without the path. Allows to determine whether a file has been renamed by a user."); + jpanel1.add(_originalFilenameField,cc.xywh(4,20,5,1)); + + JLabel jlabel9 = new JLabel(); + jlabel9.setText("Internal name"); + jpanel1.add(jlabel9,cc.xy(2,18)); + + _internalNameField.setName("internalNameField"); + _internalNameField.setToolTipText("Internal name without extension, original filename or module name for example."); + jpanel1.add(_internalNameField,cc.xywh(4,18,5,1)); + + JLabel jlabel10 = new JLabel(); + jlabel10.setText("Company name"); + jpanel1.add(jlabel10,cc.xy(2,16)); + + _companyNameField.setName("companyNameField"); + jpanel1.add(_companyNameField,cc.xywh(4,16,5,1)); + + addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7,8,9 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 }); + return jpanel1; + } + + /** + * Initializer + */ + protected void initializePanel() + { + setLayout(new BorderLayout()); + add(createPanel(), BorderLayout.CENTER); + } + + +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/formimpl/ConfigFormImpl.java b/installer/lib/launch4j/src/net/sf/launch4j/formimpl/ConfigFormImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..bf87719ad2404d552e1db27fffc32ec4a290f067 --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/formimpl/ConfigFormImpl.java @@ -0,0 +1,141 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on May 10, 2005 + */ +package net.sf.launch4j.formimpl; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; + +import javax.swing.JFileChooser; +import javax.swing.JRadioButton; +import javax.swing.JTextArea; +import javax.swing.JTextField; + +import net.sf.launch4j.FileChooserFilter; +import net.sf.launch4j.binding.Binding; +import net.sf.launch4j.binding.Bindings; +import net.sf.launch4j.binding.IValidatable; +import net.sf.launch4j.config.Splash; +import net.sf.launch4j.config.VersionInfo; +import net.sf.launch4j.form.ConfigForm; + +/** + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public class ConfigFormImpl extends ConfigForm { + private final JFileChooser _fileChooser = new JFileChooser(); + private final Bindings _bindings = new Bindings(); + + public ConfigFormImpl() { + _outfileButton.addActionListener(new BrowseActionListener( + _outfileField, new FileChooserFilter("Windows executables (.exe)", ".exe"))); + _jarButton.addActionListener(new BrowseActionListener( + _jarField, new FileChooserFilter("Jar files", ".jar"))); + _iconButton.addActionListener(new BrowseActionListener( + _iconField, new FileChooserFilter("Icon files (.ico)", ".ico"))); + _splashFileButton.addActionListener(new BrowseActionListener( + _splashFileField, new FileChooserFilter("Bitmap files (.bmp)", ".bmp"))); + + _bindings.add("outfile", _outfileField) + .add("jar", _jarField) + .add("icon", _iconField) + .add("jarArgs", _jarArgsField) + .add("errTitle", _errorTitleField) + .add("chdir", _chdirField) + .add("customProcName", _customProcNameCheck) + .add("stayAlive", _stayAliveCheck) + .add("headerType", new JRadioButton[] {_guiHeaderRadio, _consoleHeaderRadio}) + // TODO header object files + // TODO w32api + .add("jre.path", _jrePathField) + .add("jre.minVersion", _jreMinField) + .add("jre.maxVersion", _jreMaxField) + .add("jre.initialHeapSize", _initialHeapSizeField) + .add("jre.maxHeapSize", _maxHeapSizeField) + .add("jre.args", _jvmArgsTextArea) + .addOptComponent("splash", Splash.class, _splashCheck) + .add("splash.file", _splashFileField) + .add("splash.waitForWindow", _waitForWindowCheck, true) + .add("splash.timeout", _timeoutField, "60") + .add("splash.timeoutErr", _timeoutErrCheck, true) + .addOptComponent("versionInfo", VersionInfo.class, _versionInfoCheck) + .add("versionInfo.fileVersion", _fileVersionField) + .add("versionInfo.productVersion", _productVersionField) + .add("versionInfo.fileDescription", _fileDescriptionField) + .add("versionInfo.internalName", _internalNameField) + .add("versionInfo.originalFilename", _originalFilenameField) + .add("versionInfo.productName", _productNameField) + .add("versionInfo.txtFileVersion", _txtFileVersionField) + .add("versionInfo.txtProductVersion", _txtProductVersionField) + .add("versionInfo.companyName", _companyNameField) + .add("versionInfo.copyright", _copyrightField); + } + + private class BrowseActionListener implements ActionListener { + private final JTextField _field; + private final FileChooserFilter _filter; + + public BrowseActionListener(JTextField field, FileChooserFilter filter) { + _field = field; + _filter = filter; + } + + public void actionPerformed(ActionEvent e) { + if (!_field.isEnabled()) { + return; + } + _fileChooser.setFileFilter(_filter); + _fileChooser.setSelectedFile(new File("")); + int result = _field.equals(_outfileField) + ? _fileChooser.showSaveDialog(MainFrame.getInstance()) + : _fileChooser.showOpenDialog(MainFrame.getInstance()); + if (result == JFileChooser.APPROVE_OPTION) { + _field.setText(_fileChooser.getSelectedFile().getPath()); + } + } + } + + public void clear() { + _bindings.clear(); + } + + public void put(IValidatable bean) { + _bindings.put(bean); + } + + public void get(IValidatable bean) { + _bindings.get(bean); + } + + public boolean isModified() { + return _bindings.isModified(); + } + + public JTextArea getLogTextArea() { + return _logTextArea; + } + + public Binding getBinding(String property) { + return _bindings.getBinding(property); + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/formimpl/GlassPane.java b/installer/lib/launch4j/src/net/sf/launch4j/formimpl/GlassPane.java new file mode 100644 index 0000000000000000000000000000000000000000..c1b1d8dd4f0571eadd81759551be4dedcd62f25e --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/formimpl/GlassPane.java @@ -0,0 +1,67 @@ +package net.sf.launch4j.formimpl; + +import java.awt.AWTEvent; +import java.awt.Component; +import java.awt.Cursor; +import java.awt.Toolkit; +import java.awt.Window; +import java.awt.event.AWTEventListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; + +import javax.swing.JComponent; +import javax.swing.SwingUtilities; + +/** + * This is the glass pane class that intercepts screen interactions during + * system busy states. + * + * Based on JavaWorld article by Yexin Chen. + */ +public class GlassPane extends JComponent implements AWTEventListener { + private final Window _window; + + public GlassPane(Window w) { + _window = w; + addMouseListener(new MouseAdapter() {}); + addKeyListener(new KeyAdapter() {}); + setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + } + + /** + * Receives all key events in the AWT and processes the ones that originated + * from the current window with the glass pane. + * + * @param event + * the AWTEvent that was fired + */ + public void eventDispatched(AWTEvent event) { + Object source = event.getSource(); + if (event instanceof KeyEvent + && source instanceof Component) { + /* + * If the event originated from the window w/glass pane, + * consume the event. + */ + if ((SwingUtilities.windowForComponent((Component) source) == _window)) { + ((KeyEvent) event).consume(); + } + } + } + + /** + * Sets the glass pane as visible or invisible. The mouse cursor will be set + * accordingly. + */ + public void setVisible(boolean visible) { + if (visible) { + // Start receiving all events and consume them if necessary + Toolkit.getDefaultToolkit().addAWTEventListener(this, AWTEvent.KEY_EVENT_MASK); + } else { + // Stop receiving all events + Toolkit.getDefaultToolkit().removeAWTEventListener(this); + } + super.setVisible(visible); + } +} diff --git a/installer/lib/launch4j/src/net/sf/launch4j/formimpl/MainFrame.java b/installer/lib/launch4j/src/net/sf/launch4j/formimpl/MainFrame.java new file mode 100644 index 0000000000000000000000000000000000000000..a402e7c22a827e83c5b7aac566e7e5c2c1294ddf --- /dev/null +++ b/installer/lib/launch4j/src/net/sf/launch4j/formimpl/MainFrame.java @@ -0,0 +1,319 @@ +/* + launch4j :: Cross-platform Java application wrapper for creating Windows native executables + Copyright (C) 2005 Grzegorz Kowal + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Created on 2005-05-09 + */ +package net.sf.launch4j.formimpl; + +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.Toolkit; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.io.File; + +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JFileChooser; +import javax.swing.JFrame; +import javax.swing.JOptionPane; +import javax.swing.JToolBar; +import javax.swing.UIManager; + +import com.jgoodies.plaf.Options; +import com.jgoodies.plaf.plastic.PlasticXPLookAndFeel; + +import foxtrot.Task; +import foxtrot.Worker; + +import net.sf.launch4j.Builder; +import net.sf.launch4j.BuilderException; +import net.sf.launch4j.ExecException; +import net.sf.launch4j.FileChooserFilter; +import net.sf.launch4j.Log; +import net.sf.launch4j.Main; +import net.sf.launch4j.Util; +import net.sf.launch4j.binding.BindingException; +import net.sf.launch4j.binding.InvariantViolationException; +import net.sf.launch4j.config.Config; +import net.sf.launch4j.config.ConfigPersister; +import net.sf.launch4j.config.ConfigPersisterException; + +/** + * @author Copyright (C) 2005 Grzegorz Kowal + */ +public class MainFrame extends JFrame { + private static MainFrame _instance; + + private final JToolBar _toolBar; + private final JButton _runButton; + private final ConfigFormImpl _configForm; + private final JFileChooser _fileChooser = new JFileChooser(); + private File _outfile; + private boolean _saved = false; + + public static void createInstance() { + try { + Toolkit.getDefaultToolkit().setDynamicLayout(true); + System.setProperty("sun.awt.noerasebackground","true"); + + // JGoodies + Options.setDefaultIconSize(new Dimension(16, 16)); // menu icons + Options.setUseNarrowButtons(false); + Options.setPopupDropShadowEnabled(true); + + UIManager.setLookAndFeel(new PlasticXPLookAndFeel()); + _instance = new MainFrame(); + } catch (Exception e) { + System.err.println(e); + } + } + + public static MainFrame getInstance() { + return _instance; + } + + public MainFrame() { + showConfigName(null); + setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); + addWindowListener(new ExitWindowListener()); + setGlassPane(new GlassPane(this)); + _fileChooser.setFileFilter(new FileChooserFilter("launch4j config files (.xml, .cfg)", + new String[] {".xml", ".cfg"})); + + _toolBar = new JToolBar(); + _toolBar.setFloatable(false); + _toolBar.setRollover(true); + addButton("images/new.png", "New configuration", new NewActionListener()); + addButton("images/open.png", "Open configuration or import 1.x", new OpenActionListener()); + addButton("images/save.png", "Save configuration", new SaveActionListener()); + _toolBar.addSeparator(); + addButton("images/build.png", "Build wrapper", new BuildActionListener()); + _runButton = addButton("images/run.png", "Test wrapper", new RunActionListener()); + setRunEnabled(false); + _toolBar.addSeparator(); + addButton("images/info.png", "About launch4j", new AboutActionListener()); + + _configForm = new ConfigFormImpl(); + getContentPane().setLayout(new BorderLayout()); + getContentPane().add(_toolBar, BorderLayout.NORTH); + getContentPane().add(_configForm, BorderLayout.CENTER); + _configForm.clear(); + pack(); + Dimension scr = Toolkit.getDefaultToolkit().getScreenSize(); + Dimension fr = getSize(); + fr.height += 100; + setBounds((scr.width - fr.width) / 2, (scr.height - fr.height) / 2, fr.width, fr.height); + setVisible(true); + } + + private JButton addButton(String iconPath, String tooltip, ActionListener l) { + ImageIcon icon = new ImageIcon(MainFrame.class.getClassLoader().getResource(iconPath)); + JButton b = new JButton(icon); + b.setToolTipText(tooltip); + b.addActionListener(l); + _toolBar.add(b); + return b; + } + + public void info(String text) { + JOptionPane.showMessageDialog(this, + text, + Main.PROGRAM_NAME, + JOptionPane.INFORMATION_MESSAGE); + } + + public void warn(String text) { + JOptionPane.showMessageDialog(this, + text, + Main.PROGRAM_NAME, + JOptionPane.WARNING_MESSAGE); + } + + public void warn(InvariantViolationException e) { + e.getBinding().markInvalid(); + warn(e.getMessage()); + e.getBinding().markValid(); + } + + private boolean isModified() { + return (!_configForm.isModified()) + || JOptionPane.showConfirmDialog(MainFrame.this, + "Discard changes?", + "Confirm", + JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION; + } + + private boolean save() { + // XXX + try { + _configForm.get(ConfigPersister.getInstance().getConfig()); + if (_fileChooser.showSaveDialog(MainFrame.this) == JOptionPane.YES_OPTION) { + File f = _fileChooser.getSelectedFile(); + if (!f.getPath().endsWith(".xml")) { + f = new File(f.getPath() + ".xml"); + } + ConfigPersister.getInstance().save(f); + _saved = true; + showConfigName(f); + return true; + } + return false; + } catch (InvariantViolationException ex) { + warn(ex); + return false; + } catch (BindingException ex) { + warn(ex.getMessage()); + return false; + } catch (ConfigPersisterException ex) { + warn(ex.getMessage()); + return false; + } + } + + private void showConfigName(File config) { + setTitle(Main.PROGRAM_NAME + " - " + (config != null ? config.getName() : "untitled")); + } + + private void setRunEnabled(boolean enabled) { + if (!enabled) { + _outfile = null; + } + _runButton.setEnabled(enabled); + } + + private class ExitWindowListener extends WindowAdapter { + public void windowClosing(WindowEvent e) { + if (isModified()) { + System.exit(0); + } + } + } + + private class NewActionListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + if (isModified()) { + ConfigPersister.getInstance().createBlank(); + _configForm.put(ConfigPersister.getInstance().getConfig()); + } + _saved = false; + showConfigName(null); + setRunEnabled(false); + } + } + + private class OpenActionListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + try { + if (isModified() + && _fileChooser.showOpenDialog(MainFrame.this) == JOptionPane.YES_OPTION) { + final File f = _fileChooser.getSelectedFile(); + if (f.getPath().endsWith(".xml")) { + ConfigPersister.getInstance().load(f); + _saved = true; + } else { + ConfigPersister.getInstance().loadVersion1(f); + _saved = false; + } + _configForm.put(ConfigPersister.getInstance().getConfig()); + showConfigName(f); + setRunEnabled(false); + } + } catch (ConfigPersisterException ex) { + warn(ex.getMessage()); + } + } + } + + private class SaveActionListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + save(); + } + } + + private class BuildActionListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + final Log log = Log.getSwingLog(_configForm.getLogTextArea()); + try { + if ((!_saved || _configForm.isModified()) + && !save()) { + return; + } + log.clear(); + ConfigPersister.getInstance().getConfig().checkInvariants(); + Builder b = new Builder(log); + _outfile = b.build(); + setRunEnabled(ConfigPersister.getInstance().getConfig().getHeaderType() + == Config.GUI_HEADER); // TODO fix console app test + } catch (InvariantViolationException ex) { + setRunEnabled(false); + ex.setBinding(_configForm.getBinding(ex.getProperty())); // XXX + warn(ex); + } catch (BuilderException ex) { + setRunEnabled(false); + log.append(ex.getMessage()); + } + } + } + + private class RunActionListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + try { + getGlassPane().setVisible(true); + Worker.post(new Task() { + public Object run() throws ExecException { + Log log = Log.getSwingLog(_configForm.getLogTextArea()); + log.clear(); + String path = _outfile.getPath(); + if (Util.WINDOWS_OS) { + log.append("Executing: " + path); + Util.exec(path, log); + } else { + log.append("Jar integrity test, executing: " + path); + Util.exec("java -jar " + path, log); + } + return null; + } + }); + } catch (Exception ex) { + // XXX errors logged by exec + } finally { + getGlassPane().setVisible(false); + } + }; + } + + private class AboutActionListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + info(Main.PROGRAM_DESCRIPTION + + "The following projects are used by launch4j...\n\n" + + "MinGW binutils (http://www.mingw.org/)\n" + + "Commons BeanUtils (http://jakarta.apache.org/commons/beanutils/)\n" + + "Commons Logging (http://jakarta.apache.org/commons/logging/)\n" + + "XStream (http://xstream.codehaus.org/)\n" + + "JGoodies Forms (http://www.jgoodies.com/freeware/forms/)\n" + + "JGoodies Looks (http://www.jgoodies.com/freeware/looks/)\n" + + "Foxtrot (http://foxtrot.sourceforge.net/)\n" + + "Nuvola Icon Theme (http://www.icon-king.com)"); + } + } +} diff --git a/installer/lib/launch4j/w32api/MinGW.LICENSE.txt b/installer/lib/launch4j/w32api/MinGW.LICENSE.txt new file mode 100644 index 0000000000000000000000000000000000000000..aea85bd8dcdca1c79355d9f81a5c17437934df10 --- /dev/null +++ b/installer/lib/launch4j/w32api/MinGW.LICENSE.txt @@ -0,0 +1,25 @@ +MinGW - Licensing Terms + +Various pieces distributed with MinGW come with its own copyright and license: + +Basic MinGW runtime + MinGW base runtime package is uncopyrighted and placed in the public domain. + This basically means that you can do what you want with the code. + +w32api + You are free to use, modify and copy this package. + No restrictions are imposed on programs or object files compiled with this library. + You may not restrict the the usage of this library. + You may distribute this library as part of another package or as a modified package + if and only if you do not restrict the usage of the portions consisting + of this (optionally modified) library. + If distributed as a modified package then this file must be included. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty + of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +MinGW profiling code + MinGW profiling code is distributed under the GNU General Public License. + +The development tools such as GCC, GDB, GNU Make, etc all covered by GNU General Public License. diff --git a/installer/lib/launch4j/w32api/crt2.o b/installer/lib/launch4j/w32api/crt2.o new file mode 100644 index 0000000000000000000000000000000000000000..462667056e82e18f461494e459ce085aa92969e3 Binary files /dev/null and b/installer/lib/launch4j/w32api/crt2.o differ diff --git a/installer/lib/launch4j/w32api/libadvapi32.a b/installer/lib/launch4j/w32api/libadvapi32.a new file mode 100644 index 0000000000000000000000000000000000000000..801c6606c0f7e878083b6ed7ec6f782b61dede22 Binary files /dev/null and b/installer/lib/launch4j/w32api/libadvapi32.a differ diff --git a/installer/lib/launch4j/w32api/libgcc.a b/installer/lib/launch4j/w32api/libgcc.a new file mode 100644 index 0000000000000000000000000000000000000000..d3f89479ee9608c634c996cc7548aabd0943631f Binary files /dev/null and b/installer/lib/launch4j/w32api/libgcc.a differ diff --git a/installer/lib/launch4j/w32api/libkernel32.a b/installer/lib/launch4j/w32api/libkernel32.a new file mode 100644 index 0000000000000000000000000000000000000000..c45e991a7f447f019d994865ae9329f633802500 Binary files /dev/null and b/installer/lib/launch4j/w32api/libkernel32.a differ diff --git a/installer/lib/launch4j/w32api/libmingw32.a b/installer/lib/launch4j/w32api/libmingw32.a new file mode 100644 index 0000000000000000000000000000000000000000..f342ffaf97a75239e0e0b0858bfff5b0c5564614 Binary files /dev/null and b/installer/lib/launch4j/w32api/libmingw32.a differ diff --git a/installer/lib/launch4j/w32api/libmsvcrt.a b/installer/lib/launch4j/w32api/libmsvcrt.a new file mode 100644 index 0000000000000000000000000000000000000000..89662e8fb79a1058597e6554f13f9986df25dc90 Binary files /dev/null and b/installer/lib/launch4j/w32api/libmsvcrt.a differ diff --git a/installer/lib/launch4j/w32api/libshell32.a b/installer/lib/launch4j/w32api/libshell32.a new file mode 100644 index 0000000000000000000000000000000000000000..ba79d6c6b8e161257afd2939e4321504f6ce81ec Binary files /dev/null and b/installer/lib/launch4j/w32api/libshell32.a differ diff --git a/installer/lib/launch4j/w32api/libuser32.a b/installer/lib/launch4j/w32api/libuser32.a new file mode 100644 index 0000000000000000000000000000000000000000..3cd52eb7ffa993f7b47fc3d6c16a647a7c754acf Binary files /dev/null and b/installer/lib/launch4j/w32api/libuser32.a differ diff --git a/installer/lib/launch4j/web/changelog.html b/installer/lib/launch4j/web/changelog.html new file mode 100644 index 0000000000000000000000000000000000000000..7c1a519d756c5a6bf7bd9250d54016ac63e21cbc --- /dev/null +++ b/installer/lib/launch4j/web/changelog.html @@ -0,0 +1,202 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + + <title>Launch4j :: Cross-platform java application wrapper for creating Windows native executables</title><meta content="Grzegorz Kowal" name="author"> + <meta content="Cross-platform java application wrapper for creating Windows native executables. +Features native splash screen, application icon, small stub." name="description"> + <meta name="Keywords" content="Java, java, exe, native, windows, Windows, jar, wrap, wrapper, launch, +run, execute, executable, splash, icon, ico, ant, build, script, deploy, free, freeware, open source, +gpl, GPL, lgpl, LGPL, sourceforge, c++, C++, W2K, WXP, W98, linux, Linux"> + <link rel="stylesheet" type="text/css" href="layout.css"> + <link rel="stylesheet" type="text/css" href="style.css"></head> + +<body> +<div id="container"> +<div id="top"><img style="width: 249px; height: 58px;" alt="" src="launch4j.gif"><span style="color: rgb(48, 127, 225);"> <small><span style="font-weight: bold; font-family: Helvetica,Arial,sans-serif;">1.4.2, +2.0.RC3</span></small></span> +</div> +<div id="leftnav"> +<ul id="navlist"> + <li><a href="index.html"><span style="font-weight: bold;"></span>Home</a></li> + <li><a href="docs1.html"><span style="font-weight: bold;"></span>1.x +docs</a></li> + <li><a href="docs2.html"><span style="font-weight: bold;"></span>2.x +docs</a></li> + <li><a href="changelog.html"><span style="font-weight: bold;"></span>Changelog</a></li> + <li><a href="http://sourceforge.net/project/screenshots.php?group_id=95944"><span style="font-weight: bold;"></span>Screenshots</a></li> + <li><a href="http://sourceforge.net/project/showfiles.php?group_id=95944"><span style="font-weight: bold;"></span>Download</a></li> + <li><a href="http://sourceforge.net/forum/?group_id=95944"><span style="font-weight: bold;"></span>Support</a></li> + <li><a href="http://sourceforge.net/projects/launch4j"><span style="font-weight: bold;"></span>Project +summary</a></li> + <li><a href="http://sourceforge.net/tracker/?atid=613100&group_id=95944"><span style="font-weight: bold;"></span>Bug +tracker</a></li> + <li><a href="links.html"><span style="font-weight: bold;"></span>Links</a></li> +</ul> +</div> +<div id="content"> +<h2>Changelog</h2> +<strong>Changes in version 2.0 RC3 (13-08-2005) - final RC<br></strong><ul><li>Correct handling of pathnames with spaces.</li><li>Fixed the '%20' pathname bug.</li><li>Fixed basedir bug (Richard Xing).</li><li>Splash screen can be closed when the application window becomes visible with out specifying it's title (Martin Busik), update your config file: <font color="#ff0000"><waitForTitle>title</waitForTitle></font> +is now <font color="#ff0000"><waitForWindow>true</waitForWindow></font>.</li><li>Fixed build.bat files in demo directories.</li></ul><strong>Changes in version 2.0 RC2 (21-06-2005)<br> +</strong> +<ul> + <li>chdir allows to change the current directory to arbitrary paths +relative to the executable (FR #1144907). It's incompatible with +previous versions, update your config file: <font color="#ff0000"><chdir>true</chdir></font> +is now <font color="#ff0000"><chdir>.</chdir></font>.<br> + </li> + <li>Embedded JRE path no longer depends on chdir function.<br> + </li> + <li>Fixed Ant task bug, build files outside launch4j's directory +wouldn't work. (Josh Elsasser submitted a patch that works without +setting launch4j's home dir in the build file. Thanks!).</li> + <li>Removed static edge from splash screen (Serge Baranov).</li> + <li>Program checks that the output file path doesn't contain spaces.</li> + <li>Fixed a NPE bug caused by a missing maxVersion property (found by +Morgan Schweers).</li> + <li>Fixed relative JRE path bug (found by Nili_).</li> + <li>Cleaned up the Builder class.</li> + <li>Fixed Ant task NPE where the config was entirely defined in the +build file (Josh Elsasser).</li> +</ul> +<strong>Changes in version 2.0 +RC (07-06-2005)</strong><br> +<ul> + <li>Added an Ant task for better build integration.</li> + <li>Added 2.x documentation.</li> + <li>Updated the demo configuration files.</li> + <li>Fixed issues with relative paths in the configuration.</li> + <li>Removed the '-1' option in console mode.<br> + </li> + <li>Minor fixes.<br> + </li> +</ul> +<strong>Changes in version 2.0 +beta2 (23-05-2005)<br> +</strong> +<ul> + <li># comments are recognized when importing 1.x cfg files.</li> + <li>Added version information.</li> + <li>Resource file is displayed when a resource error occurs.</li> + <li>Fixed a bug found by Max, options on the first tab were always +enabled.<br> + </li> +</ul> +<p><strong>Changes in version 2.0 +beta1 (13-05-2005)<br> +</strong> </p> +<ul> + <li>Completely new, cross-platform wrapper - create windows +executables on Linux.<br> + </li> + <li>New .xml configuration file.</li> + <li>Application icon with multiple resolutions and color depths.</li> + <li>Swing GUI interface.</li> + <li>Header compiled with MinGW port of gcc instead of VC++.<br> + </li> +</ul> +<strong></strong><strong>Changes in version +1.4.2 (12-03-2005)</strong><span style="font-weight: bold;"><br> +</span> +<ul> + <li>Fixed bug #1158143<span style="font-weight: bold;">, </span>stayAlive +without a splash screen caused an infinite loop (found by Gregory +Kotsaftis).<br> + </li> +</ul> +<span style="font-weight: bold;"></span><strong>Changes in +version 1.4.1 (04-03-2005)</strong><br> +<ul> + <li>Fixed bug #1119040, buffer for reading config properties +was too short (found by Tom Jensen and Neil).</li> + <li>Added configurable splash timeout (FR #1102951).</li> + <li>Added option to disable the error message on splash timeout +(FR #1109159).</li> + <li>Option to keep the gui launcher 'alive' after starting an +application (FR #1124653).</li> + <li>Removed version info.</li> + <li>'waitfor' property is now optional.</li> +</ul> +<span style="font-weight: bold;"></span><strong>Changes in +version +1.4.0 +(26-01-2005)</strong><b><br> +</b> +<ul> + <li>Removed .lch4j suffix from process name, now it has the +form of the executable filename. The temporary launchers are stored in +launch4j-tmp directory (suggested by Emmanuel).</li> + <li>Added support for console apps (FR #1050053).</li> +</ul> +<br> +<span style="font-weight: bold;"></span><strong>Changes in +version +1.3.1 +(05-11-2004)</strong><b><br> +</b> +<ul> + <li>Fixed a bug where explorer window was opened instead of +launching the application when setProcName was set to false (found by +Rob Jones).</li> + <li>Fixed temporary launcher deletion bug.</li> +</ul> +<br> +<strong>Changes in version 1.3.0 (01-11-2004)</strong><b><br> +</b> +<ul> + <li>Now you can configure launch4j to:<br> + <ul> + <li>Use a bundled JRE.</li> + <li>Search for java, show an error message if the +right version cannot be found and open the java download page.</li> + <li>And a feature you asked for: use bundled JRE, if +that fails search for java and bring up the java download page on error.</li> + </ul> + </li> + <li>Enhanced code that sets the custom process name. In +case launch4j can't refresh the temporary launcher, bundled JRE on a +read only file system for example, it will use one created previously, +if it's present and has the correct size. If not, launching will still +continue, but with javaw.exe process name.Temporary launchers are +now created in the jre directory instead of jre/bin.<br> + </li> + <li>errTitle property allows to set the title of the error +message box.</li> +</ul> +<b><br> +</b><strong>Changes in version 1.2.1 (25-09-2004)</strong><b><br> +</b> +<ul> + <li>Bugfix that allows launching from command line using short +name (#1026514 / found by Zach Del)</li> +</ul> +<b><br> +</b><strong>Changes in version 1.2.0 (10-09-2004)</strong><br> +<ul> + <li><strong>Custom process name</strong> (<i>myapp.lch4j.exe</i>)</li> + <li><strong>9 KB stub!</strong></li> + <li>Jar arguments<br> + </li> + <li>Bugfix that allows launching from command line.</li> + <li>Hide splash on javaw error.<br> + </li> + <li>Easier configuration with case insensitive parameters + +show +unrecognized parameter.</li> + <li>12 KB demo application, 34 KB with splash screen.</li> + <li><font color="#ff0000">Configuration parameter 'args' <strong>changed +to</strong> 'jvmArgs'</font></li> +</ul> +</div> +<div id="footer"> +Copyright +© 2005 Grzegorz Kowal +<br> +<br> +<p><a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=95944&type=4" alt="SourceForge.net Logo" border="0" height="37" width="125"></a> +<a href="http://www.nosoftwarepatents.com"><img alt="" src="http://www.nosoftwarepatents.com/banners/90x40_3.jpg" style="border: 0px solid ; width: 90px; height: 40px;"></a> +<a href="http://validator.w3.org/check?uri=referer"><img src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" border="0" height="31" width="88"></a> +</p> +</div> +</div> +</body></html> \ No newline at end of file diff --git a/installer/lib/launch4j/web/docs1.html b/installer/lib/launch4j/web/docs1.html new file mode 100644 index 0000000000000000000000000000000000000000..69a7fcf49f9ca2edeefba0fe92fbdb727871a474 --- /dev/null +++ b/installer/lib/launch4j/web/docs1.html @@ -0,0 +1,345 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> + <meta http-equiv="Content-Type" + content="text/html; charset=iso-8859-1"> + <title>Launch4j :: Cross-platform java application wrapper for +creating Windows native executables</title> + <meta content="Grzegorz Kowal" name="author"> + <meta + content="Cross-platform java application wrapper for creating Windows native executables. +Features native splash screen, application icon, small stub." + name="description"> + <meta name="Keywords" + content="Java, java, exe, native, windows, Windows, jar, wrap, wrapper, launch, +run, execute, executable, splash, icon, ico, ant, build, script, deploy, free, freeware, open source, +gpl, GPL, lgpl, LGPL, sourceforge, c++, C++, W2K, WXP, W98, linux, Linux"> + <link rel="stylesheet" type="text/css" href="layout.css"> + <link rel="stylesheet" type="text/css" href="style.css"> +</head> +<body> +<div id="container"> +<div id="top"><img style="width: 249px; height: 58px;" alt="" + src="launch4j.gif"><span style="color: rgb(48, 127, 225);"> <small><span + style="font-weight: bold; font-family: Helvetica,Arial,sans-serif;">1.4.2, +2.0.RC3</span></small></span> +</div> +<div id="leftnav"> +<ul id="navlist"> + <li><a href="index.html"><span style="font-weight: bold;"></span>Home</a></li> + <li><a href="docs1.html"><span style="font-weight: bold;"></span>1.x +docs</a></li> + <li><a href="docs2.html"><span style="font-weight: bold;"></span>2.x +docs</a></li> + <li><a href="changelog.html"><span style="font-weight: bold;"></span>Changelog</a></li> + <li><a + href="http://sourceforge.net/project/screenshots.php?group_id=95944"><span + style="font-weight: bold;"></span>Screenshots</a></li> + <li><a + href="http://sourceforge.net/project/showfiles.php?group_id=95944"><span + style="font-weight: bold;"></span>Download</a></li> + <li><a href="http://sourceforge.net/forum/?group_id=95944"><span + style="font-weight: bold;"></span>Support</a></li> + <li><a href="http://sourceforge.net/projects/launch4j"><span + style="font-weight: bold;"></span>Project +summary</a></li> + <li><a + href="http://sourceforge.net/tracker/?atid=613100&group_id=95944"><span + style="font-weight: bold;"></span>Bug +tracker</a></li> + <li><a href="links.html"><span style="font-weight: bold;"></span>Links</a></li> +</ul> +</div> +<div id="content"> +<h2>How to wrap your +application<br> +</h2> +<span style="font-weight: bold;"></span>Launch4j wraps only +executable jars, which<em> </em>aren't +very +difficult +to create. Package your application in a jar file and include a +manifest with +the <em>Main-Class</em> +attribute +defined. In order to use external jars, you must also define the <em>Class-Path</em> +attribute. Create a +configuration file and run launch4j (launch4j +my_application.cfg). It's a good idea to run it inside a console +window to see the output. If the configuration file is invalid, +launch4j will provide useful information that will help you fix the +problem. If everything goes fine, the output exe will be created and +ready to run. All information provided in the config file is stored in +the executable, so you don't need it to run the application.<br> +<br> +<h2><span style="font-weight: bold;">Faster way...<span + style="font-weight: bold;"><span style="font-weight: bold;"></span></span></span></h2> +<span style="font-weight: bold;"><span style="font-weight: bold;"><span + style="font-weight: bold;"> </span></span></span>Create +the +configuration file and let Ant do +the +rest (SimpleApp/build.xml).<br> +<br> +<h2><span style="font-weight: bold;">Configuration file (1.x) </span></h2> +<strong class="codeword">Bold</strong> +elements are +required.<br> +<pre><span style="font-weight: bold;"></span><span class="codeword">header</span> headfile.bin<br><strong><span + class="codeword">jar</span></strong> application.jar<br><strong><span + class="codeword">outfile</span></strong> application.exe<br + style="font-family: monospace;"><strong><span class="codeword">jrepath</span></strong> ../jre<br> and/or<br><strong><span + class="codeword">javamin</span></strong> version<br><span + class="codeword">javamax</span> version // optional, use only in combination with <strong><span + class="codeword">javamin</span></strong>.<br><span class="codeword">jvmArgs</span> args<br><span + class="codeword">jarArgs</span> args<br><span class="codeword">chdir</span> true|<span + style="text-decoration: underline;">false</span><br><span + class="codeword">setProcName</span> true|<span + style="text-decoration: underline;">false</span><br><span + class="codeword">errTitle</span> application_name<br + style="font-family: monospace;"><span class="codeword">icon</span> icon.ico<br + style="font-family: monospace;"><span class="codeword">splash</span> splash.bmp<br + style="font-family: monospace;"><span class="codeword">waitfor</span> beginning_of_application_title<br + style="font-family: monospace;"><span class="codeword">splashTimeout</span> seconds<br + style="font-family: monospace;"><span class="codeword">splashTimeoutErr</span> <span + style="text-decoration: underline;">true</span>|false<br + style="font-family: monospace;"><span class="codeword">stayAlive</span> true|false</pre> +<br> +<h2>Configuration details<span style="font-weight: bold;"></span></h2> +<span style="font-weight: bold;"> </span> +<dl> + <dt>header</dt> + <dd>Optional, defaults to <em>guihead.bin</em>. +Standard headers are: <em>guihead.bin</em> +and <em>consolehead.bin</em>, +you can +also specify your own.</dd> +</dl> +<table style="text-align: left;" border="1" cellpadding="4" + cellspacing="0"> + <tbody> + <tr> + <td style="text-align: center;"><span style="font-weight: bold;">Header</span><br> + </td> + <td + style="white-space: nowrap; text-align: center; font-weight: bold;">App +type<br> + </td> + <td style="text-align: center;"><span style="font-weight: bold;">Launcher</span><br> + </td> + <td + style="white-space: nowrap; text-align: center; font-weight: bold;">Splash +screen</td> + <td + style="text-align: center; font-weight: bold; white-space: nowrap;">Wait +for the application to +close </td> + </tr> + <tr> + <td style="text-align: center;">guihead.bin<br> + </td> + <td style="text-align: center;">GUI<br> + </td> + <td style="text-align: center;">javaw<br> + </td> + <td style="text-align: center;">yes<br> + </td> + <td>wrapper +waits only if <span class="codeword">stayAlive</span> +is set to true, otherwise it terminates immediately or after closing +the splash screen.<br> + </td> + </tr> + <tr> + <td style="text-align: center;">consolehead.bin<br> + </td> + <td style="text-align: center;">console<br> + </td> + <td style="text-align: center;">java<br> + </td> + <td style="text-align: center;">no<br> + </td> + <td>always waits and +returns application's exit code.<br> + </td> + </tr> + </tbody> +</table> +<br> +<dl> + <dt>jrepath, +javamin/javamax</dt> + <dd>The <span class="codeword">jrepath</span> +property is used +to specify the path (usually relative) of a JRE, note that this path is +not checked until the actual application execution. If you'd like the +wrapper to search for a JRE (public or SDK +private) use the <span class="codeword">javamin</span> +property, you may also specify the <span class="codeword">javamax</span> +to prevent it from using higher Java versions. Launch4j will always use +the highest version available (in the min/max range of course). You can +also combine these properties to change the startup process...</dd> +</dl> +<div style="margin-left: 40px;"> +<dl> + <dt class="codeword">jrepath</dt> + <dd>Run if bundled JRE and +javaw.exe +are present, otherwise stop with error.</dd> + <dt class="codeword">jrepath ++ javamin [+ javamax]</dt> + <dd>Use bundled JRE first, +if it +cannot be located search for Java, if that fails display error message +and open the Java download page.</dd> + <dt class="codeword">javamin +[+ javamax]</dt> + <dd>Search for Java, if an +appropriate version cannot be found display error message and open the +Java download page.</dd> +</dl> +</div> +<dl> + <dt>jvmArgs</dt> + <dd>Optional, accepts +everything you would normally pass to +java/javaw +launcher: assertion options, system properties and X options.</dd> +</dl> +<dl> + <dt>jarArgs</dt> + <dd>Optional, constant +command line arguments.</dd> +</dl> +<dl> + <dt>chdir</dt> + <dd>Optional, defaults to +false. +Change current directory to exe location. Set this property to true, if +you have resources outside the jar or want to use a bundled JRE which +location is relative to the executable.</dd> +</dl> +<dl> + <dt><span style="font-weight: bold;"></span>setProcName</dt> + <dd>Optional, defaults to +false. +Set the process name as the executable filename. Creates a temporary +file in launch4j-tmp directory inside the used JRE. These files are +deleted by +any launch4j wrapped application, which sets the process name and uses +the same JRE. The removal takes place when the application <strong>starts</strong>, +so at least one copy of this file will always be present.</dd> +</dl> +<dl> + <dt>errTitle</dt> + <dd>Optional, +sets the title of the error message box that's displayed if Java cannot +be found for instance. This usually should contain the name of your +application. The console header prefixes error messages with this +property (myapp: error...)</dd> +</dl> +<span style="font-weight: bold;"> </span> +<dl> + <dt>icon</dt> + <dd>Accepted file format: +ICO</dd> + <dd>The first icon is used +and rescaled when needed. </dd> +</dl> +<dl> + <dt>splash</dt> + <dd>Accepted file format: +BMP<br> +Ignored by <em>consolehead.bin</em></dd> +</dl> +<dl> + <dt>waitfor</dt> + <dd>Optional. Specifies +the beginning of the application title, +used to +determine when the splash screen is to be closed. Don't include version +numbers or other information (<strong>My +Application</strong><span style="color: rgb(0, 0, 0);"> v1.20, </span><strong>My +App</strong> +- Program setup...). If omitted, the splash screen +will +close on timeout.<br> +Ignored by <em>consolehead.bin</em></dd> +</dl> +<span style="font-style: italic;"></span> +<dl> + <dt>splashTimeout</dt> + <dd>Optional, defaults to +60. +Number of seconds after which the splash screen must close. Splash +timeout may cause an error depending on <span class="codeword">splashTimeoutErr</span> +property.<span style="font-weight: bold;"> </span>Ignored by <em>consolehead.bin</em><span + style="font-style: italic;"></span></dd> +</dl> +<span style="font-weight: bold;"> </span><span + style="font-style: italic;"></span> +<dl> + <dt>splashTimeoutErr</dt> + <dd>Optional, defaults to +true. +True signals +an error on splash timeout, false +closes the splash screen quietly.<br> + <span style="font-weight: bold;"></span>Ignored +by <em>consolehead.bin</em></dd> +</dl> +<span style="font-style: italic;"></span> +<dl> + <dt>stayAlive</dt> + <dd>Optional, defaults to +false +in <em>guihead.bin</em> +/ always true<span style="font-weight: bold;"> </span>in <em>consolehead.bin</em>. +When enabled the +launcher waits for the Java application to finish and returns it's exit +code.</dd> +</dl> +<h2>Example configurations</h2> +<pre><span + style="font-weight: bold; font-family: monospace; color: rgb(51, 51, 255);"><span + style="font-weight: bold;"><span style="font-weight: bold;"><span + style="font-weight: bold;"><span style="font-weight: bold;"></span></span></span></span><span + style="font-weight: bold;"><span style="font-weight: bold;"><span + style="font-weight: bold;"><span style="font-weight: bold;"></span></span></span></span><span + style="font-weight: bold;"><span style="font-weight: bold;"><span + style="font-weight: bold;"><span style="font-weight: bold;"></span></span></span></span></span><span + class="codeword">jar</span> paint2\paint2.jar<br><span class="codeword">outfile</span> paint2\paint2.exe<br><span + class="codeword">javamin</span> 1.4.0<br><span class="codeword">javamax</span> 1.4.2<br><span + class="codeword">icon</span> paint2\paint2.ico<br><span + class="codeword">errTitle</span> Paint2 Error<br><span class="codeword">splash</span> paint2\paint2.bmp<br><span + class="codeword">waitfor</span> Paint2<br><span class="codeword">splashTimeout</span> 45<br><span + class="codeword">chdir</span> true<br><span class="codeword">setProcName</span> true</pre> +<span style="font-family: monospace;"><span + style="color: rgb(51, 51, 255);"> </span></span> +<pre><span class="codeword">header</span> consolehead.bin<br><span + class="codeword">jar</span> dist\ConsoleApp.jar<br><span + class="codeword">outfile</span> dist\ConsoleApp.exe<br><span + class="codeword">jrepath</span> ..\jre<br><span class="codeword">javamin</span> 1.4.2<br><span + class="codeword">icon</span> l4j\ConsoleApp.ico<br><span + class="codeword">chdir</span> true<br><span class="codeword">setProcName</span> true<br><span + class="codeword">errTitle</span> ConsoleApp<br><span class="codeword">jvmArgs</span> -Xloggc:gclog.txt</pre> +</div> +<div id="footer"> +Copyright +© 2005 Grzegorz Kowal +<br> +<br> +<p><a href="http://sourceforge.net"><img + src="http://sourceforge.net/sflogo.php?group_id=95944&type=4" + alt="SourceForge.net Logo" border="0" height="37" width="125"></a> +<a href="http://www.nosoftwarepatents.com"><img alt="" + src="http://www.nosoftwarepatents.com/banners/90x40_3.jpg" + style="border: 0px solid ; width: 90px; height: 40px;"></a> +<a href="http://validator.w3.org/check?uri=referer"><img + src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" + border="0" height="31" width="88"></a> +</p> +</div> +</div> +</body> +</html> diff --git a/installer/lib/launch4j/web/docs2.html b/installer/lib/launch4j/web/docs2.html new file mode 100644 index 0000000000000000000000000000000000000000..9d539c89dff7889d448e199b12dea825025f012d --- /dev/null +++ b/installer/lib/launch4j/web/docs2.html @@ -0,0 +1,394 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + + <title>Launch4j :: Cross-platform java application wrapper for creating Windows native executables</title><meta content="Grzegorz Kowal" name="author"> + <meta content="Cross-platform java application wrapper for creating Windows native executables. +Features native splash screen, application icon, small stub." name="description"> + <meta name="Keywords" content="Java, java, exe, native, windows, Windows, jar, wrap, wrapper, launch, +run, execute, executable, splash, icon, ico, ant, build, script, deploy, free, freeware, open source, +gpl, GPL, lgpl, LGPL, sourceforge, c++, C++, W2K, WXP, W98, linux, Linux"> + <link rel="stylesheet" type="text/css" href="layout.css"> + <link rel="stylesheet" type="text/css" href="style.css"></head> + +<body> +<div id="container"> +<div id="top"><img style="width: 249px; height: 58px;" alt="" src="launch4j.gif"><span style="color: rgb(48, 127, 225);"> <small><span style="font-weight: bold; font-family: Helvetica,Arial,sans-serif;">1.4.2, +2.0.RC3</span></small></span> +</div> +<div id="leftnav"> +<ul id="navlist"> + <li><a href="index.html"><span style="font-weight: bold;"></span>Home</a></li> + <li><a href="docs1.html"><span style="font-weight: bold;"></span>1.x +docs</a></li> + <li><a href="docs2.html"><span style="font-weight: bold;"></span>2.x +docs</a></li> + <li><a href="changelog.html"><span style="font-weight: bold;"></span>Changelog</a></li> + <li><a href="http://sourceforge.net/project/screenshots.php?group_id=95944"><span style="font-weight: bold;"></span>Screenshots</a></li> + <li><a href="http://sourceforge.net/project/showfiles.php?group_id=95944"><span style="font-weight: bold;"></span>Download</a></li> + <li><a href="http://sourceforge.net/forum/?group_id=95944"><span style="font-weight: bold;"></span>Support</a></li> + <li><a href="http://sourceforge.net/projects/launch4j"><span style="font-weight: bold;"></span>Project +summary</a></li> + <li><a href="http://sourceforge.net/tracker/?atid=613100&group_id=95944"><span style="font-weight: bold;"></span>Bug +tracker</a></li> + <li><a href="links.html"><span style="font-weight: bold;"></span>Links</a></li> +</ul> +</div> +<div id="content"> +<a href="#Running_launch4j">Running +launch4j</a><br> +<a href="#Configuration_file">Configuration +file</a><br> +<a href="#Importing_1.x_configuration">Importing +1.x configuration</a><br> +<a href="#Ant_task">Ant Task</a><br> +<br> +<br> +<h2><a name="Running_launch4j"></a>Running +launch4j<br> +</h2> +Run <em>launch4j.exe</em> +or <em>launch4j</em> +script without command +line arguments to enter the GUI mode.<br> +<pre>launch4j.exe<br></pre> +To wrap a jar in console mode use <em>launch4jc.exe</em> <em></em>and +specify the configuration file using an absolute path.<br> +<pre>launch4jc.exe c:\src\demo\l4j\config.xml<br></pre> +On linux use the <em>launch4j</em> +script.<br> +<pre>launch4j ~/src/demo/l4j/config.xml<br></pre> +<br> +<h2><a name="Configuration_file"></a>Configuration +file</h2> +Launch4j requires an xml configuration file for each output executable. +You can create and edit it conveniently using the graphic user +interface or your favorite editor. Alternatively it's possible to pass +all of the configuration parameters through the Ant task. All files +except for <em><jre><path></em> +may be absolute paths or +relative to the configuration file path.<br> +<pre><!-- <strong>Bold</strong> elements are required --><br><strong><launch4jConfig><br></strong> <!-- Header types: 0-GUI, 1-console --><strong><br></strong> <strong><headerType></strong><span class="codeword">0|1</span><strong></headerType></strong><br> <strong><jar></strong><span class="codeword">file</span><span class="codeword"></span><strong></jar><br></strong> <strong><outfile></strong><span class="codeword">file.exe</span><strong><span class="codeword"></span></outfile></strong><br> <errTitle><span class="codeword">text</span></errTitle><br> <jarArgs><span class="codeword">text</span></jarArgs><br> <chdir><span class="codeword">path</span></chdir><br> <customProcName><span class="codeword">true|<u>false</u></span></customProcName><br> <stayAlive><span class="codeword">true|false</span></stayAlive><br> <icon><span class="codeword">file</span></icon><br> <strong><jre><br></strong> <!-- Specify one of the following or both --><br> <strong><path></strong><span class="codeword">path</span><strong></path><br> </strong><strong><minVersion></strong><span class="codeword">x.x.x[_xx]</span><strong></minVersion><br></strong> <maxVersion><span class="codeword">x.x.x[_xx]</span></maxVersion><br> <!-- Heap sizes in MB, 0-use default --><br> <initialHeapSize><span class="codeword">MB</span></initialHeapSize><br> <maxHeapSize><span class="codeword">MB</span></maxHeapSize><br> <args><span class="codeword">text</span></args><br> <strong></jre></strong><br> <splash><br> <strong><file></strong><span class="codeword">file</span><strong></file></strong><br> <waitForWindow><span class="codeword"><u>true</u>|false</span></waitForWindow><br> <timeout><span class="codeword">seconds [60]</span></timeout><br> <timeoutErr><span class="codeword"><u>true</u>|false</span></timeoutErr><br> </splash><br> <versionInfo><br> <strong><fileVersion></strong><span class="codeword">x.x.x.x</span><strong></fileVersion></strong><br> <strong><txtFileVersion></strong><span class="codeword">text</span><strong></txtFileVersion></strong><br> <strong><fileDescription></strong><span class="codeword">text</span><strong></fileDescription></strong><br> <strong><copyright></strong><span class="codeword">text</span><strong></copyright></strong><br> <strong><productVersion></strong><span class="codeword">x.x.x.x</span><strong></productVersion></strong><br> <strong><txtProductVersion></strong><span class="codeword">text</span><strong></txtProductVersion></strong><br> <strong><productName></strong><span class="codeword">text</span><strong></productName></strong><br> <companyName><span class="codeword">text</span></companyName><br> <strong><internalName></strong><span class="codeword">filename</span><strong></internalName></strong><br> <strong><originalFilename></strong><span class="codeword">filename.exe</span><strong></originalFilename></strong><br> </versionInfo><br><strong></launch4jConfig></strong><br></pre> +<dl> + <dt><headerType></dt> + <dd>Type of the header used to +wrap the application.</dd> +</dl> +<table style="text-align: left;" border="1" cellpadding="4" cellspacing="0"> + <tbody> + <tr> + <td style="text-align: center;"><span style="font-weight: bold;">Header </span><span style="font-weight: bold;">type</span><br> + </td> + <td style="white-space: nowrap; text-align: center; font-weight: bold;">App +type<br> + </td> + <td style="text-align: center;"><span style="font-weight: bold;">Launcher</span><br> + </td> + <td style="white-space: nowrap; text-align: center; font-weight: bold;">Splash +screen</td> + <td style="text-align: center; font-weight: bold; white-space: nowrap;">Wait +for the application to +close </td> + </tr> + <tr> + <td style="text-align: center;">0<br> + </td> + <td style="text-align: center;">GUI<br> + </td> + <td style="text-align: center;">javaw<br> + </td> + <td style="text-align: center;">yes<br> + </td> + <td>wrapper +waits only if <em>stayAlive</em> +is set to true, otherwise it terminates immediately or after closing +the splash screen.<br> + </td> + </tr> + <tr> + <td style="text-align: center;">1<br> + </td> + <td style="text-align: center;">console<br> + </td> + <td style="text-align: center;">java<br> + </td> + <td style="text-align: center;">no<br> + </td> + <td>always waits and +returns application's exit code.<br> + </td> + </tr> + </tbody> +</table> +<br> +<dl> + <dt><jar></dt> + <dd>Executable jar to wrap.</dd> +</dl> +<dl> + <dt><outfile></dt> + <dd>Output executable file.<strong></strong></dd> +</dl> +<dl> + <dt><errTitle></dt> + <dd>Optional, +sets the title of the error message box that's displayed if Java cannot +be found for instance. This usually should contain the name of your +application. The console header prefixes error messages with this +property (myapp: error...)</dd> +</dl> +<dl> + <dt><jarArgs></dt> + <dd>Optional, constant +command line arguments.</dd> +</dl> +<dl> + <dt><chdir></dt> + <dd>Optional. Change current +directory to an arbitrary path relative to the executable. <br> +If you omit this property +or leave it blank it will have no effect. Setting it to <em>.</em> +will change the current dir to the same directory as the executable. <em>..</em> +will change it to the parent directory, and so on.</dd> + <dd> + <pre><chdir>.</chdir></pre> + </dd> + <dd> + <pre><chdir>../somedir</chdir></pre> + </dd> +</dl> +<dl> + <dt><customProcName></dt> + <dd>Optional, defaults to +false. +Set the process name as the executable filename. Creates a temporary +file in launch4j-tmp directory inside the used JRE. These files are +deleted by +any launch4j wrapped application, which sets the process name and uses +the same JRE. The removal takes place when the application <strong>starts</strong>, +so at least one copy of this file will always be present.</dd> +</dl> +<dl> + <dt><stayAlive></dt> + <dd>Optional, defaults to +false +in GUI header, <em></em> +always true<span style="font-weight: bold;"> </span>in console header. +When enabled the +launcher waits for the Java application to finish and returns it's exit +code.</dd> +</dl> +<dl> + <dt><icon></dt> + <dd>Application icon in ICO +format. May contain multiple color depths/resolutions.<br> + </dd> +</dl> +<dl> + <dt><jre></dt> + <dd>Required element that groups +JRE settings.</dd> +</dl> +<blockquote> + <dl> + <dt><path>, +<minVersion>, <maxVersion><br> + </dt> + <dd>The <em><path></em> +property +is used +to specify the relative path (to the executable) of an embedded JRE, it +does not rely on the current directory or <em><chdir></em>. +Note that this path is +not checked until the actual application execution. If you'd like the +wrapper to search for a JRE (public or SDK +private) use the <em><minVersion></em> +property, you may also specify the <em><maxVersion></em> +to prevent it from using higher Java versions. Launch4j will always use +the highest version available (in the min/max range of course). You can +also combine these properties to change the startup process...</dd> + </dl> + <div style="margin-left: 40px;"> + <dl> + <dt><path></dt> + <dd>Run if bundled JRE and +javaw.exe +are present, otherwise stop with error.</dd> + <dt><path> + +<minVersion> [+ <maxVersion>]</dt> + <dd>Use bundled JRE first, +if it +cannot be located search for Java, if that fails display error message +and open the Java download page.</dd> + <dt><minVersion> +[+ <maxVersion>]</dt> + <dd>Search for Java, if an +appropriate version cannot be found display error message and open the +Java download page.</dd> + </dl> + </div> +</blockquote> +<blockquote> + <dl> + <dt><initialHeapSize></dt> + <dd>Optional, initial heap +size in MB, 0 - use default.</dd> + </dl> + <dl> + <dt><maxHeapSize></dt> + <dd>Optional, max heap size in +MB, 0 - use default.</dd> + </dl> + <dl> + <dt><args></dt> + <dd>Optional, accepts +everything you would normally pass to +java/javaw +launcher: assertion options, system properties and X options.</dd> + </dl> +</blockquote> +<dl> + <dt><splash></dt> + <dd>Optional, groups the splash +screen settings. Allowed only in GUI header.<br> + </dd> +</dl> +<blockquote> + <dl> + <dt><file></dt> + <dd>Splash screen image in BMP +format.</dd> + </dl> + <dl> + <dt><waitForWindow></dt> + <dd>Optional, +defaults to true. Close the splash screen when an application window or +Java error message box appears. If set to false, the splash screen will +be closed on timeout.<br> + </dd> + + </dl> + <dl> + <dt><timeout></dt> + <dd>Optional, defaults to +60. +Number of seconds after which the splash screen must be closed. Splash +timeout may cause an error depending on <em><timeoutErr></em>.</dd> + </dl> + <dl> + <dt><timeoutErr></dt> + <dd>Optional, defaults to +true. +True signals +an error on splash timeout, false +closes the splash screen quietly.</dd> + </dl> +</blockquote> +<dl> + <dt><versionInfo></dt> + <dd>Optional, version +information to be displayed by the Windows +Explorer.</dd> +</dl> +<blockquote> + <dl> + <dt><fileVersion></dt> + <dd>Version number 'x.x.x.x'<br> + </dd> + </dl> + <dl> + <dt><txtFileVersion></dt> + <dd>Free form file version, +for example '1.20.RC1'.<br> + </dd> + </dl> + <dl> + <dt><fileDescription></dt> + <dd>File description presented +to the user.<br> + </dd> + </dl> + <dl> + <dt><copyright></dt> + <dd>Legal copyright.<br> + </dd> + </dl> + <dl> + <dt><productVersion></dt> + <dd>Version number 'x.x.x.x'<br> + </dd> + </dl> + <dl> + <dt><txtProductVersion></dt> + <dd>Free form file version, +for example '1.20.RC1'.<br> + </dd> + </dl> + <dl> + <dt><productName></dt> + <dd>Text.<br> + </dd> + </dl> + <dl> + <dt><companyName></dt> + <dd>Optional text.<br> + </dd> + </dl> + <dl> + <dt><internalName></dt> + <dd>Internal name without +extension, original filename or module +name for example.<br> + </dd> + </dl> + <dl> + <dt><originalFilename></dt> + <dd>Original name of the file +without the path. Allows to determine +whether a file has been renamed by a user.<br> + </dd> + </dl> +</blockquote> +<br> +<h2><a name="Importing_1.x_configuration"></a>Importing +1.x +configuration</h2> +It's possible to import a 1.x configuration file using the GUI +interface. Open the file, correct the paths and save it as a new xml +configuration.<br> +<br> +<h2><a name="Ant_task"></a>Ant +task</h2> +You may set a launch4j directory property or change the task definition. +<pre><property name="launch4j.dir" location="/opt/launch4j" /></pre> +Define the task in your Ant build script.<br> +<pre><taskdef name="launch4j"<br> classname="net.sf.launch4j.ant.Launch4jTask"<br> classpath="${launch4j.dir}/launch4j.jar<br> :${launch4j.dir}/lib/xstream.jar" /><br></pre> +Execute the task!<br> +<pre><launch4j configFile="./l4j/demo.xml" /></pre> +You can set or override the following configuration properties...<br> +<em><jar><br> +<outfile><br> +<versionInfo><br> + <fileVersion><br> + <txtFileVersion><br> + <productVersion><br> + <txtProductVersion></em><em><br> +</em> +<pre><launch4j configFile="./l4j/demo.xml"<br> outfile="mydemo.exe"<br> fileVersion="1.0.0.0" txtFileVersion="1.0 RC2" /><br></pre> +You can also define the entire configuration in the task, but it will +not be possible to edit such a file in the GUI mode. All paths except +for <em><chdir></em> and <em><jre><path></em> are +calculated using the <em>basedir</em> project attribute. +<pre><launch4j><br> <config headerType="0" jar="demo.jar" outfile="demo.exe"><br> <jre minVersion="1.4.0" /><br> </config><br></launch4j><br></pre> +</div> +<div id="footer">Copyright +© 2005 Grzegorz Kowal +<br> +<br> +<p><a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=95944&type=4" alt="SourceForge.net Logo" border="0" height="37" width="125"></a> +<a href="http://www.nosoftwarepatents.com"><img alt="" src="http://www.nosoftwarepatents.com/banners/90x40_3.jpg" style="border: 0px solid ; width: 90px; height: 40px;"></a> +<a href="http://validator.w3.org/check?uri=referer"><img src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" border="0" height="31" width="88"></a> +</p> +</div> +</div> +</body></html> \ No newline at end of file diff --git a/installer/lib/launch4j/web/index.html b/installer/lib/launch4j/web/index.html new file mode 100644 index 0000000000000000000000000000000000000000..742124946ae0a79c4395e4dadaed4d8daec965ba --- /dev/null +++ b/installer/lib/launch4j/web/index.html @@ -0,0 +1,152 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + + <title>Launch4j :: Cross-platform Java application wrapper for creating Windows native executables</title><meta content="Grzegorz Kowal" name="author"> + <meta content="Cross-platform java application wrapper for creating Windows native executables. +Features native splash screen, application icon, small stub." name="description"> + <meta name="Keywords" content="Java, java, exe, native, windows, Windows, jar, wrap, wrapper, launch, +run, execute, executable, splash, icon, ico, ant, build, script, deploy, free, freeware, open source, +gpl, GPL, lgpl, LGPL, sourceforge, c++, C++, W2K, WXP, W98, linux, Linux"> + <link rel="stylesheet" type="text/css" href="layout.css"> + <link rel="stylesheet" type="text/css" href="style.css"></head> + +<body> +<div id="container"> +<div id="top"><img style="width: 249px; height: 58px;" alt="" src="launch4j.gif"><span style="color: rgb(48, 127, 225);"> <small><span style="font-weight: bold; font-family: Helvetica,Arial,sans-serif;">1.4.2, +2.0.RC3</span></small></span> +</div> +<div id="leftnav"> +<ul id="navlist"> + <li><a href="index.html"><span style="font-weight: bold;"></span>Home</a></li> + <li><a href="docs1.html"><span style="font-weight: bold;"></span>1.x +docs</a></li> + <li><a href="docs2.html"><span style="font-weight: bold;"></span>2.x +docs</a></li> + <li><a href="changelog.html"><span style="font-weight: bold;"></span>Changelog</a></li> + <li><a href="http://sourceforge.net/project/screenshots.php?group_id=95944"><span style="font-weight: bold;"></span>Screenshots</a></li> + <li><a href="http://sourceforge.net/project/showfiles.php?group_id=95944"><span style="font-weight: bold;"></span>Download</a></li> + <li><a href="http://sourceforge.net/forum/?group_id=95944"><span style="font-weight: bold;"></span>Support</a></li> + <li><a href="http://sourceforge.net/projects/launch4j"><span style="font-weight: bold;"></span>Project +summary</a></li> + <li><a href="http://sourceforge.net/tracker/?atid=613100&group_id=95944"><span style="font-weight: bold;"></span>Bug +tracker</a></li> + <li><a href="links.html"><span style="font-weight: bold;"></span>Links</a></li> +</ul> +</div> +<div id="content"><big><span style="color: rgb(48, 127, 225);"> +Cross-platform Java application wrapper for creating Windows </span></big><big><span style="color: rgb(48, 127, 225);">native </span></big><big><span style="color: rgb(48, 127, 225);">EXEs.</span></big> +<h2><span style="font-weight: bold;"></span></h2> +Launch4j is a cross-platform tool for wrapping +Java applications distributed as jars in lightweight Windows +native executables. The executable can be +configured to search for a certain JRE version or +use a bundled one, and it's possible to set +runtime options, like the initial/max heap size. +The wrapper also provides better user experience +through an application icon, a native pre-JRE +splash screen, a custom process name, and a Java +download page in case the appropriate JRE cannot +be found.<br> +<br> +<h2><span style="font-weight: bold;"></span><small><span style="color: rgb(255, 0, 0);"><span style="color: rgb(0, 0, 0);"></span></span></small> +Features (2.x)</h2> +<ul> + <li>Launch4j wraps jars in +Windows native executables and +allows to +run them like a regular Windows program. It's possible to wrap +applications on Linux!<br> + </li> + <li><strong>Doesn't +extract the jar</strong> from the +executable.</li> + <li>Custom application icon with +multiple resolutions and color +depths.</li> + <li><strong>Native pre-JRE +splash screen</strong> in BMP format +shown until +the +Java +application starts.</li> + <li><strong>Process +name</strong> as the executable +filename to +easily +identify your application.<i> </i><span style="font-weight: bold; color: rgb(255, 0, 0);"></span></li> + <li>Works with a bundled JRE or +searches for newest JRE / SDK +in +given range.</li> + <li>Opens <strong>Java +download page</strong> if an +appropriate Java version +cannot be found.</li> + <li>Supports <strong>GUI +and +console apps</strong>.<br> + </li> + <li>Passes command line +arguments, also supports constant arguments.</li> + <li>Allows to set the initial/max heap size.<br> + </li> + <li>JVM options: set system properties, tweak the garbage +collection...<span style="font-weight: bold;"> </span><span style="font-weight: bold; color: rgb(255, 0, 0);"></span></li> + <li><span style="color: rgb(255, 0, 0);"><span style="color: rgb(0, 0, 0);">Option +to change current directory to the executable location.</span></span></li> + <li><span style="color: rgb(255, 0, 0);"><span style="color: rgb(0, 0, 0);">Custom <strong>version +information</strong> shown by Windows Explorer.<br> + </span></span></li> + <li><span style="color: rgb(255, 0, 0);"><span style="color: rgb(0, 0, 0);"><strong>GUI</strong> and command line +interface.</span></span></li> + <li><span style="color: rgb(255, 0, 0);"><span style="color: rgb(0, 0, 0);">Build integration through an <strong>Ant +task</strong>.<br> + </span></span></li> + <li><big><b>Lightweight: 21 KB!</b></big> <span style="font-weight: bold; color: rgb(255, 0, 0);"></span></li> + <li><strong>It's +free</strong> and may be used for +commercial +purposes.</li> + <li>Includes a sample +application and <strong>Ant script</strong> +that +automates the +build +process from Java sources to native executable.<br> + </li> + <li><span style="color: rgb(255, 0, 0);"><span style="color: rgb(0, 0, 0);">The wrapped program +works on all Windows platforms (98/Me/NT/2K/Xp), launch4j works on +NT/2K/Xp, Linux (developed and tested on FC2).<br> + </span></span></li> +</ul> +<h2>License</h2> +This program is free software licensed under the <a href="http://www.gnu.org/copyleft/gpl.html">GPL +license</a>, the <i>head</i> +subproject (the code which is attached to the wrapped jars) is licensed +under the <span style="font-weight: bold;"></span><a href="http://www.gnu.org/copyleft/lesser.html">LGPL +license</a>. +Launch4j may be used for wrapping closed source, commercial +applications.<br> +<br> +<h2>Info</h2>Running Launch4j on other Java enabled platforms is a matter +of getting a binary version of <a href="http://www.mingw.org/">MinGW</a> +binutils 2.15.90 (<b>windres</b> +and <b>ld</b> +only) for your system or compiling them. If you'll +provide these, I'll be able to create a binary package +available for download.<br> +<br> +<a href="http://sourceforge.net/forum/forum.php?forum_id=332683"></a></div> +<div id="footer"> +Copyright +© 2005 Grzegorz Kowal +<br> +<br> +<p><a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=95944&type=4" alt="SourceForge.net Logo" border="0" height="37" width="125"></a> +<a href="http://www.nosoftwarepatents.com"><img alt="" src="http://www.nosoftwarepatents.com/banners/90x40_3.jpg" style="border: 0px solid ; width: 90px; height: 40px;"></a> +<a href="http://validator.w3.org/check?uri=referer"><img src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" border="0" height="31" width="88"></a> +</p> +</div> +</div> +</body></html> \ No newline at end of file diff --git a/installer/lib/launch4j/web/launch4j.gif b/installer/lib/launch4j/web/launch4j.gif new file mode 100644 index 0000000000000000000000000000000000000000..27552074ac391c4156f5a245f75ac0d6ba4257e0 Binary files /dev/null and b/installer/lib/launch4j/web/launch4j.gif differ diff --git a/installer/lib/launch4j/web/layout.css b/installer/lib/launch4j/web/layout.css new file mode 100644 index 0000000000000000000000000000000000000000..d03a57a42fd47f60a955f2cfdfd7a09a7662036e --- /dev/null +++ b/installer/lib/launch4j/web/layout.css @@ -0,0 +1,83 @@ +/* Generated by CaScadeS, a stylesheet editor for Mozilla Composer */ + + #container { border-width: 0px; + margin: 10px auto; + width: 90%; + color: rgb(51, 51, 51); + line-height: 130%; + background-color: rgb(255, 255, 255); + } + + #top { padding: 0.5em; + background-color: rgb(255, 255, 255); + } + + #top h1 { margin: 0pt; + padding: 0pt; + } + + #leftnav { margin: 0pt; + padding: 0.5em; + float: left; + width: 160px; + background-color: rgb(255, 255, 255); + } + + #leftnav ul { border-width: 0px; + margin-left: 0pt; + padding-left: 0pt; + list-style-type: none; + font-family: Arial,Helvetica,sans-serif; + font-weight: inherit; + } + + #leftnav a { padding: 2px; + display: block; + width: 160px; + } + + #leftnav a:link, #navlist a:visited { text-decoration: none; + color: rgb(102, 102, 102); + } + + #leftnav a:hover { color: rgb(255, 255, 255); + background-color: rgb(48, 127, 225); + } + + #content { border-width: 0pt 0pt 0pt 1px; + border-left: 1px solid rgb(204, 204, 204); + padding: 1em; + margin-left: 200px; + background-color: rgb(255, 255, 255); + max-width: 36em; + } + + #content a:link { text-decoration: none; + color: rgb(102, 102, 102); + } + + #content a:visited { text-decoration: none; + color: rgb(69, 69, 69); + } + + #content a:hover { color: rgb(48, 127, 255); + text-decoration: underline; + } + + #footer { border-color: gray; + border-width: 1px; + margin: 0pt; + padding: 0.5em; + clear: both; + color: rgb(51, 51, 51); + background-color: rgb(255, 255, 255); + text-align: center; + font-size: 90%; + } + + #leftnav p { margin: 0pt 0pt 1em; + } + + #content h2 { margin: 0pt 0pt 0.5em; + } + diff --git a/installer/lib/launch4j/web/links.html b/installer/lib/launch4j/web/links.html new file mode 100644 index 0000000000000000000000000000000000000000..ae5d2143a49aaeb3872cddaa04457b9edfdd1894 --- /dev/null +++ b/installer/lib/launch4j/web/links.html @@ -0,0 +1,88 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> + <meta http-equiv="Content-Type" + content="text/html; charset=iso-8859-1"> + <title>Launch4j :: Cross-platform java application wrapper for +creating Windows native executables</title> + <meta content="Grzegorz Kowal" name="author"> + <meta + content="Cross-platform java application wrapper for creating Windows native executables. +Features native splash screen, application icon, small stub." + name="description"> + <meta name="Keywords" + content="Java, java, exe, native, windows, Windows, jar, wrap, wrapper, launch, +run, execute, executable, splash, icon, ico, ant, build, script, deploy, free, freeware, open source, +gpl, GPL, lgpl, LGPL, sourceforge, c++, C++, W2K, WXP, W98, linux, Linux"> + <link rel="stylesheet" type="text/css" href="layout.css"> + <link rel="stylesheet" type="text/css" href="style.css"> +</head> +<body> +<div id="container"> +<div id="top"><img style="width: 249px; height: 58px;" alt="" + src="launch4j.gif"><span style="color: rgb(48, 127, 225);"> <small><span + style="font-weight: bold; font-family: Helvetica,Arial,sans-serif;">1.4.2, +2.0.RC3</span></small></span> +</div> +<div id="leftnav"> +<ul id="navlist"> + <li><a href="index.html"><span style="font-weight: bold;"></span>Home</a></li> + <li><a href="docs1.html"><span style="font-weight: bold;"></span>1.x +docs</a></li> + <li><a href="docs2.html"><span style="font-weight: bold;"></span>2.x +docs</a></li> + <li><a href="changelog.html"><span style="font-weight: bold;"></span>Changelog</a></li> + <li><a + href="http://sourceforge.net/project/screenshots.php?group_id=95944"><span + style="font-weight: bold;"></span>Screenshots</a></li> + <li><a + href="http://sourceforge.net/project/showfiles.php?group_id=95944"><span + style="font-weight: bold;"></span>Download</a></li> + <li><a href="http://sourceforge.net/forum/?group_id=95944"><span + style="font-weight: bold;"></span>Support</a></li> + <li><a href="http://sourceforge.net/projects/launch4j"><span + style="font-weight: bold;"></span>Project +summary</a></li> + <li><a + href="http://sourceforge.net/tracker/?atid=613100&group_id=95944"><span + style="font-weight: bold;"></span>Bug +tracker</a></li> + <li><a href="links.html"><span style="font-weight: bold;"></span>Links</a></li> +</ul> +</div> +<div id="content"> +<h2>Links</h2> +<p><a href="http://www.mingw.org/">MinGW</a><br> +<a href="http://jakarta.apache.org/commons/beanutils/">Commons +BeanUtils</a><br> +<a href="http://jakarta.apache.org/commons/logging/">Commons +Logging</a><br> +<a href="http://xstream.codehaus.org/">XStream</a><br> +<a href="http://www.jgoodies.com/freeware/forms/">JGoodies Forms</a><br> +<a href="http://www.jgoodies.com/freeware/looks/">JGoodies Looks</a><br> +<a href="http://www.icon-king.com/">Nuvola Icon Theme</a><br> +<a href="https://abeille.dev.java.net/">Abeille Forms Designer</a><br> +<a href="http://www.eclipse.org/">Eclipse</a><br> +<a href="http://www.bloodshed.net/devcpp.html">Bloodshed Dev-C++ +IDE</a><br> +</p> +</div> +<div id="footer"> +Copyright +© 2005 Grzegorz Kowal +<br> +<br> +<p><a href="http://sourceforge.net"><img + src="http://sourceforge.net/sflogo.php?group_id=95944&type=4" + alt="SourceForge.net Logo" border="0" height="37" width="125"></a> +<a href="http://www.nosoftwarepatents.com"><img alt="" + src="http://www.nosoftwarepatents.com/banners/90x40_3.jpg" + style="border: 0px solid ; width: 90px; height: 40px;"></a> +<a href="http://validator.w3.org/check?uri=referer"><img + src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" + border="0" height="31" width="88"></a> +</p> +</div> +</div> +</body> +</html> diff --git a/installer/lib/launch4j/web/style.css b/installer/lib/launch4j/web/style.css new file mode 100644 index 0000000000000000000000000000000000000000..0f15e5493c41d95760892f51e3dc15f0d74885ef --- /dev/null +++ b/installer/lib/launch4j/web/style.css @@ -0,0 +1,23 @@ +/* Generated by CaScadeS, a stylesheet editor for Mozilla Composer */ + + pre { border: 1px dashed rgb(153, 153, 153); + padding: 8px; + background-color: rgb(241, 241, 241); + font-family: Courier New,Courier,monospace; + font-size: smaller; + } + + .codeword { color: rgb(51, 51, 255); + } + + dt { font-weight: bold; + } + + em { font-weight: bold; + color: rgb(102, 102, 102); + font-style: normal; + } + + body { font-family: Times New Roman,Times,serif; + } +