From 684712dc221ed6c329f2f98bad7898462a0927d9 Mon Sep 17 00:00:00 2001 From: helge Date: Sat, 20 Aug 2005 22:40:35 +0000 Subject: [PATCH] work on OSX package git-svn-id: http://svn.opengroupware.org/SOPE/trunk@1055 e4a50df8-12e2-0310-a44c-efbce7f8a7e3 --- maintenance/ChangeLog | 4 + maintenance/License.rtf | 492 ++++++++++++++++++++++++++++ maintenance/Welcome.rtf | 8 + maintenance/make-osxpkg.sh | 348 ++++++++++++++++++++ maintenance/package_background.tiff | Bin 0 -> 65826 bytes 5 files changed, 852 insertions(+) create mode 100644 maintenance/License.rtf create mode 100644 maintenance/Welcome.rtf create mode 100755 maintenance/make-osxpkg.sh create mode 100644 maintenance/package_background.tiff diff --git a/maintenance/ChangeLog b/maintenance/ChangeLog index 361176a6..ac59352c 100644 --- a/maintenance/ChangeLog +++ b/maintenance/ChangeLog @@ -1,3 +1,7 @@ +2005-08-21 Helge Hess + + * added files required to build an OSX package + 2005-08-17 Helge Hess * added rm-sope-on-osxlib.sh to delete all SOPE frameworks from diff --git a/maintenance/License.rtf b/maintenance/License.rtf new file mode 100644 index 00000000..8d5db8bc --- /dev/null +++ b/maintenance/License.rtf @@ -0,0 +1,492 @@ +{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf110 +{\fonttbl\f0\fswiss\fcharset77 Helvetica;\f1\fnil\fcharset77 Monaco;} +{\colortbl;\red255\green255\blue255;} +\paperw11900\paperh16840\margl1440\margr1440\vieww10180\viewh18520\viewkind0 +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural + +\f0\fs24 \cf0 Copyright SKYRIX Software AG, Helge He\'a7, Marcus M\'9fller and Contributors\ +\ + +\f1\fs18 GNU LIBRARY GENERAL PUBLIC LICENSE\ + Version 2, June 1991\ +\ + Copyright (C) 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.\ +\ +[This is the first released version of the library GPL. It is\ + numbered 2 because it goes with version 2 of the ordinary GPL.]\ +\ + 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 Library General Public License, applies to some\ +specially designated Free Software Foundation software, and to any\ +other libraries whose authors decide to use it. You can use it for\ +your libraries, 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 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 a program 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.\ +\ + Our method of protecting your rights has two steps: (1) copyright\ +the library, and (2) offer you this license which gives you legal\ +permission to copy, distribute and/or modify the library.\ +\ + Also, for each distributor's protection, we want to make certain\ +that everyone understands that there is no warranty for this free\ +library. If the library is modified by someone else and passed on, we\ +want its recipients to know that what they have is not the original\ +version, so that any problems introduced by others will not reflect on\ +the original authors' reputations.\ +\page \ + Finally, any free program is threatened constantly by software\ +patents. We wish to avoid the danger that companies distributing free\ +software will individually obtain patent licenses, thus in effect\ +transforming the program into proprietary software. To prevent this,\ +we have made it clear that any patent must be licensed for everyone's\ +free use or not licensed at all.\ +\ + Most GNU software, including some libraries, is covered by the ordinary\ +GNU General Public License, which was designed for utility programs. This\ +license, the GNU Library General Public License, applies to certain\ +designated libraries. This license is quite different from the ordinary\ +one; be sure to read it in full, and don't assume that anything in it is\ +the same as in the ordinary license.\ +\ + The reason we have a separate public license for some libraries is that\ +they blur the distinction we usually make between modifying or adding to a\ +program and simply using it. Linking a program with a library, without\ +changing the library, is in some sense simply using the library, and is\ +analogous to running a utility program or application program. However, in\ +a textual and legal sense, the linked executable is a combined work, a\ +derivative of the original library, and the ordinary General Public License\ +treats it as such.\ +\ + Because of this blurred distinction, using the ordinary General\ +Public License for libraries did not effectively promote software\ +sharing, because most developers did not use the libraries. We\ +concluded that weaker conditions might promote sharing better.\ +\ + However, unrestricted linking of non-free programs would deprive the\ +users of those programs of all benefit from the free status of the\ +libraries themselves. This Library General Public License is intended to\ +permit developers of non-free programs to use free libraries, while\ +preserving your freedom as a user of such programs to change the free\ +libraries that are incorporated in them. (We have not seen how to achieve\ +this as regards changes in header files, but we have achieved it as regards\ +changes in the actual functions of the Library.) The hope is that this\ +will lead to faster development of free libraries.\ +\ + 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, while the latter only\ +works together with the library.\ +\ + Note that it is possible for a library to be covered by the ordinary\ +General Public License rather than by this special one.\ +\page \ + GNU LIBRARY GENERAL PUBLIC LICENSE\ + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\ +\ + 0. This License Agreement applies to any software library which\ +contains a notice placed by the copyright holder or other authorized\ +party saying it may be distributed under the terms of this Library\ +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.\ +\page \ + 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.\ +\page \ + 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.\ +\page \ + 6. As an exception to the Sections above, you may also compile 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) 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.\ +\ + c) 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.\ +\ + d) 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 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.\ +\ + 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.\ +\page \ + 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 to\ +this License.\ +\page \ + 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 Library 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.\ +\page \ + 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\ +\page \ + Appendix: 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.\ +\ + \ + Copyright (C) \ +\ + This library is free software; you can redistribute it and/or\ + modify it under the terms of the GNU Library General Public\ + License as published by the Free Software Foundation; either\ + version 2 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\ + Library General Public License for more details.\ +\ + You should have received a copy of the GNU Library 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.\ +\ + , 1 April 1990\ + Ty Coon, President of Vice\ +\ +That's all there is to it!\ +} \ No newline at end of file diff --git a/maintenance/Welcome.rtf b/maintenance/Welcome.rtf new file mode 100644 index 00000000..dde8b134 --- /dev/null +++ b/maintenance/Welcome.rtf @@ -0,0 +1,8 @@ +{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf110 +{\fonttbl\f0\fswiss\fcharset77 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\margl1440\margr1440\vieww9000\viewh9000\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural + +\f0\fs24 \cf0 Welcome to the SOPE Installation Program. You will be guided through the steps necessary to install the SOPE product.\ +} \ No newline at end of file diff --git a/maintenance/make-osxpkg.sh b/maintenance/make-osxpkg.sh new file mode 100755 index 00000000..f7d1e1de --- /dev/null +++ b/maintenance/make-osxpkg.sh @@ -0,0 +1,348 @@ +#!/bin/sh + +PKG_NAME="$1" + +oldpwd="$PWD" +PKG_BUILD_DIR="$PWD/osxpkgbuild" +PKG_DIR="$PKG_BUILD_DIR/${PKG_NAME}.pkg" +PKG_RSRC_DIR="$PKG_BUILD_DIR/${PKG_NAME}.pkg/Contents/Resources" +PKG_VERSION="4.5" +ROOT_DIR="$PKG_BUILD_DIR/root" +CHECK_XML="yes" +PLIST_DT_ID="-//Apple Computer//DTD PLIST 1.0//EN" +PLIST_DT_LOC="http://www.apple.com/DTDs/PropertyList-1.0.dtd" +INSTALLER_FORMAT_KEY="0.10000000149011612" + +BACKGROUND_TIFF="../maintenance/package_background.tiff" +LICENSE_FILE="../maintenance/License.rtf" +WELCOME_FILE="../maintenance/Welcome.rtf" + +MKDIRS="mkdirhier" + + +# ****************************** usage ******************************** + +function usage() { + cat <<_ACEOF +make-osxpkg.sh +_ACEOF +} + + +# ****************************** validate cmdline args **************** + +function validateArgs() { + if test "x$PKG_NAME" = "x"; then + usage; + exit 1 + fi +} + + +# ****************************** prepare/cleanup tmpfiles ************* + +function prepareTmpDirs() { + if test -d $PKG_BUILD_DIR; then + echo -n " deleting old builddir: $PKG_BUILD_DIR .." + rm -r $PKG_BUILD_DIR + echo ".. done." + fi + + echo -n " preparing temporary builddir .." + ${MKDIRS} "${PKG_BUILD_DIR}" + ${MKDIRS} "${PKG_DIR}" + ${MKDIRS} "${PKG_RSRC_DIR}" + ${MKDIRS} "${PKG_RSRC_DIR}/English.lproj" + ${MKDIRS} "${ROOT_DIR}" + ${MKDIRS} "${ROOT_DIR}/Library/Frameworks" + echo ".. done: $PKG_BUILD_DIR." +} + +function cleanupTmpDirs() { + if test -d $PKG_BUILD_DIR; then + echo -n " deleting builddir: $PKG_BUILD_DIR .." + rm -r $PKG_BUILD_DIR + echo ".. done." + fi +} + + +# ****************************** install ****************************** + +function installIntoTmpDirs() { + echo -n " install sources (log in ${PKG_BUILD_DIR}/install.log) .." + make -s FRAMEWORK_INSTALL_DIR="${ROOT_DIR}/Library/Frameworks" \ + shared=yes frameworks=yes install \ + >${PKG_BUILD_DIR}/install.log 2>&1 + echo ".. done." +} + + +# ****************************** pax archive ************************** + +function makePaxArchive() { + echo -n " gen archive .." + cd "${ROOT_DIR}" + pax -w . | gzip -c >${PKG_DIR}/Contents/Archive.pax.gz + + cd ${PKG_DIR}/Contents/Resources + ln -s ../Archive.pax.gz "${PKG_NAME}.pax.gz" + cd "$oldpwd" + echo ".. done: ${PKG_DIR}/Contents/Archive.pax.gz" +} + + +# ****************************** bom/sizes **************************** + +function generateBoM() { + echo -n " gen BoM file .." + cd "${ROOT_DIR}" + mkbom . "${PKG_DIR}/Contents/Archive.bom" + + cd ${PKG_DIR}/Contents/Resources + ln -s ../Archive.bom "${PKG_NAME}.bom" + cd "$oldpwd" + echo ".. done." +} + +function calcSizes() { + echo -n " calculate sizes .." + size_uncompressed="`du -sk $ROOT_DIR | cut -f 1`" + size_compressed="`du -sk $PKG_DIR | cut -f 1`" + numfiles="`find $ROOT_DIR | wc -l`" + numfiles="`echo $numfiles - 1 | bc`" + echo ".. done (size=${size_compressed}K/${size_uncompressed}K, #$numfiles)." +} + +function generateSizes() { + echo -n " gen sizes file .." + cd "${ROOT_DIR}" + echo "NumFiles $numfiles" >${PKG_DIR}/Contents/Archive.sizes + echo "InstalledSize $size_uncompressed" >>${PKG_DIR}/Contents/Archive.sizes + echo "CompressedSize $size_compressed" >>${PKG_DIR}/Contents/Archive.sizes + + cd ${PKG_DIR}/Contents/Resources + ln -s ../Archive.sizes "${PKG_NAME}.sizes" + cd "$oldpwd" + echo ".. done." +} + + +# ****************************** info files *************************** + +function plistWriteString() { + echo " $1" + echo " $2" +} +function plistWriteInt() { + echo " $1" + echo " `echo $2`" +} +function plistWriteReal() { + echo " $1" + echo " `echo $2`" +} +function plistWriteDate() { + echo " $1" + echo " $2" +} +function plistWriteBool() { + echo " $1" + echo " <$2/>" +} + + +function genInfoPList() { + # http://developer.apple.com/documentation/DeveloperTools/Conceptual/ + # SoftwareDistribution/Concepts/sd_pkg_flags.html + F="${PKG_DIR}/Contents/Info.plist" + echo -n " gen Info.plist: $F .." + + echo >$F "" + echo >>$F "" + echo >>$F "" + echo >>$F " " + + plistWriteString >>$F CFBundleGetInfoString "${PKG_NAME} ${PKG_VERSION}" + plistWriteString >>$F CFBundleIdentifier "org.opengroupware.pkg.${PKG_NAME}" + plistWriteString >>$F CFBundleName "${PKG_NAME}" + plistWriteString >>$F CFBundleShortVersionString "${PKG_VERSION}" + + plistWriteString >>$F IFMajorVersion 4 + plistWriteString >>$F IFMinorVersion 5 + + plistWriteDate >>$F IFPkgBuildDate "`date -u +%Y-%m-%dT%H:%M:%SZ`" + plistWriteString >>$F IFPkgBuildVersion "${PKG_VERSION}" + plistWriteBool >>$F IFPkgFlagAllowBackRev false + plistWriteString >>$F IFPkgFlagAuthorizationAction AdminAuthorization + plistWriteString >>$F IFPkgFlagBackgroundAlignment topright + plistWriteString >>$F IFPkgFlagBackgroundScaling none + plistWriteString >>$F IFPkgFlagDefaultLocation / + plistWriteBool >>$F IFPkgFlagFollowLinks true + plistWriteBool >>$F IFPkgFlagInstallFat true + plistWriteInt >>$F IFPkgFlagInstalledSize $size_uncompressed + plistWriteBool >>$F IFPkgFlagIsRequired false + plistWriteBool >>$F IFPkgFlagOverwritePermissions false + plistWriteBool >>$F IFPkgFlagRelocatable true + plistWriteString >>$F IFPkgFlagRestartAction NoRestart + plistWriteBool >>$F IFPkgFlagRootVolumeOnly false + plistWriteBool >>$F IFPkgFlagUpdateInstalledLanguages false + plistWriteBool >>$F IFPkgFlagUseUserMask false + plistWriteReal >>$F IFPkgFormatVersion "${INSTALLER_FORMAT_KEY}" + plistWriteInt >>$F IFPkgPayloadFileCount $numfiles + + echo >>$F " " + echo >>$F "" + if test "x$CHECK_XML" = "xyes"; then + xmllint --noout $F + fi + + echo ".. done." +} + + +function genBundleVersions() { + F="${PKG_RSRC_DIR}/BundleVersions.plist" + echo " gen bundle versions: $F .." + + echo >$F "" + echo >>$F "" + echo >>$F "" + echo >>$F " " + + # TODO: generate framework versions (scan for .framework/../Version files) + frameworks=`find "${ROOT_DIR}" -type d -name "*.framework"` + for frameworkpath in $frameworks; do + frameworkvfile="`find $frameworkpath -type f -name Version | head -n 1`" + if test "x$frameworkvfile" != "x"; then + relfwpath="`echo $frameworkpath | sed sX${ROOT_DIR}/XXg`" + + echo >>$F " ${relfwpath}" + echo >>$F " " + echo >>$F " BuildVersion" + echo >>$F " 1" # TODO + echo >>$F " CFBundleShortVersionString" + echo >>$F " ${PKG_VERSION}" + echo >>$F " ProjectName" + echo >>$F " `basename -s .framework $relfwpath`" + echo >>$F " SourceVersion" + echo >>$F " ${PKG_VERSION}" # TODO + echo >>$F " " + else + echo " Note: no Version file in framework `basename $frameworkpath`" + fi + done + + echo >>$F " " + echo >>$F "" + if test "x$CHECK_XML" = "xyes"; then + xmllint --noout $F + fi + echo " generated: $F." +} + +function genEnDescription() { + F="${PKG_RSRC_DIR}/English.lproj/Description.plist" + echo -n " gen description plist: $F .." + + echo >$F "" + echo >>$F "" + echo >>$F "" + echo >>$F " " + + plistWriteString >>$F IFPkgDescriptionDescription "${PKG_NAME}" + plistWriteString >>$F IFPkgDescriptionTitle "${PKG_NAME}" + plistWriteString >>$F IFPkgDescriptionVersion "${PKG_VERSION}" + + echo >>$F " " + echo >>$F "" + if test "x$CHECK_XML" = "xyes"; then + xmllint --noout $F + fi + echo ".. done." +} + +function genInfoFile() { + F="${PKG_RSRC_DIR}/English.lproj/${PKG_NAME}.info" + echo -n " gen info file: $F .." + + echo >$F "Title ${PKG_NAME}" + echo >>$F "Version ${PKG_VERSION}" + echo >>$F "Description ${PKG_VERSION}" + echo >>$F "Require Reboot NO" # TODO: consolidate + echo >>$F "OverwritePermissions NO" # TODO: consolidate + echo >>$F "NeedsAuthorization YES" # TODO: consolidate + echo >>$F "DefaultLocation /" # TODO: consolidate + echo >>$F "Relocatable YES" # TODO: consolidate + echo >>$F "Install Fat YES" # TODO: consolidate + echo >>$F "LibrarySubdirectory Standard" + + echo ".. done." +} + + +# ****************************** resources **************************** + +function copyBackgroundImage() { + if test -f "${BACKGROUND_TIFF}"; then + cp "${BACKGROUND_TIFF}" "${PKG_RSRC_DIR}/background.tiff" + else + echo "ERROR: did not find background image: ${BACKGROUND_TIFF}" + fi +} + +function copyLicenseFile() { + if test -f "${LICENSE_FILE}"; then + cp "${LICENSE_FILE}" "${PKG_RSRC_DIR}/English.lproj/License.rtf" + else + echo "ERROR: did not find file: ${LICENSE_FILE}" + fi +} +function copyWelcomeFile() { + if test -f "${WELCOME_FILE}"; then + cp "${WELCOME_FILE}" "${PKG_RSRC_DIR}/English.lproj/Welcome.rtf" + else + echo "ERROR: did not find file: ${WELCOME_FILE}" + fi +} + + +# ****************************** debugging **************************** + +function debugShowResults() { + echo "" + echo "prepared contents:" + find -s $PKG_BUILD_DIR \ + | sed "sX${PKG_BUILD_DIR}/X Xg" +} + + +# ****************************** running ****************************** + +echo "Building MacOSX Installer.app package $PKG_NAME.pkg .." +validateArgs; + +prepareTmpDirs; + +installIntoTmpDirs; + +makePaxArchive; +generateBoM; + +calcSizes; +generateSizes; + +genInfoPList; +genInfoFile; +genBundleVersions; +genEnDescription; + +copyBackgroundImage; +copyLicenseFile; +copyWelcomeFile; + + +# debugging, print results +#debugShowResults; + +#cleanupTmpDirs; diff --git a/maintenance/package_background.tiff b/maintenance/package_background.tiff new file mode 100644 index 0000000000000000000000000000000000000000..107bd59d9188fdfdc02bc89484c75922e79739a0 GIT binary patch literal 65826 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 oG