1 (* 2 3 Licensed to the Apache Software Foundation (ASF) under one 4 or more contributor license agreements. See the NOTICE file 5 distributed with this work for additional information 6 regarding copyright ownership. The ASF licenses this file 7 to you under the Apache License, Version 2.0 (the 8 "License"); you may not use this file except in compliance 9 with the License. You may obtain a copy of the License at 10 11 http://www.apache.org/licenses/LICENSE-2.0 12 13 Unless required by applicable law or agreed to in writing, 14 software distributed under the License is distributed on an 15 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 KIND, either express or implied. See the License for the 17 specific language governing permissions and limitations 18 under the License. 19 20 21 22 This script is meant to 23 1) Identify installed instances of the product 24 2) check whether the user has write-access (and if not 25 ask for authentification) 26 3) install the shipped tarball 27 *) 28 29 -- strings for localisations - to be meant to be replaced 30 -- by a makefile or similar 31 set OKLabel to "[OKLabel]" 32 set InstallLabel to "[InstallLabel]" 33 set AbortLabel to "[AbortLabel]" 34 set intro to "[IntroText1] 35 36 [IntroText2] 37 38 [IntroText3]" 39 set chooseMyOwn to "[ChooseMyOwnText]" 40 set listPrompt to "[ListPromptText]" 41 set chooseManual to "[ChooseManualText]" 42 set listOKLabel to "[ListOKLabelText]" 43 set listCancelLabel to "[ListCancelLabel]" 44 set appInvalid to "[AppInvalidText1] 45 46 [AppInvalidText2]" -- string will begin with the chosen application's name 47 set startInstall to "[StartInstallText1] 48 49 [StartInstallText2]" 50 set IdentifyQ to "[IdentifyQText] 51 52 [IdentifyQText2]" 53 set IdentifyYES to "[IdentifyYES]" 54 set IdentifyNO to "[IdentifyNO]" 55 set installFailed to "[InstallFailedText]" 56 set installComplete to "[InstallCompleteText] 57 58 [InstallCompleteText2]" 59 60 set sourcedir to (do shell script "dirname " & quoted form of POSIX path of (path to of me)) 61 62 display dialog intro buttons {AbortLabel, InstallLabel} default button 2 63 64 if (button returned of result) is AbortLabel then 65 return 2 66 end if 67 68 set the found_ooos_all to (do shell script "mdfind \"kMDItemContentType == 'com.apple.application-bundle' && kMDItemDisplayName == '[PRODUCTNAME]*' && kMDItemDisplayName != '[FULLAPPPRODUCTNAME].app'\"") & " 69 " & chooseMyOwn 70 71 set found_ooos_all_paragraphs to paragraphs in found_ooos_all 72 73 set found_ooos to {} 74 repeat with currentApp in found_ooos_all_paragraphs 75 if currentApp does not start with "/Volumes" then 76 copy currentApp to the end of found_ooos 77 end if 78 end repeat 79 80 -- repeat with oneApp in found_ooos 81 -- display dialog oneApp 82 -- end repeat 83 84 -- the choice returned is of type "list" 85 -- Show selection dialog only if more than one or no product was found 86 -- The first item is an empty string, if no app was found and no app started with "/Volumes" 87 -- The first item is chooseMyOwn, if no app was found and at least one app started with "/Volumes" 88 if (get first item of found_ooos as string) is "" then 89 set the choice to (choose from list found_ooos default items (get second item of found_ooos) with prompt listPrompt OK button name listOKLabel cancel button name listCancelLabel) 90 if choice is false then 91 -- do nothing, the user cancelled the installation 92 return 2 --aborted by user 93 else if (choice as string) is chooseMyOwn then 94 -- yeah, one needs to use "choose file", otherwise 95 -- the user would not be able to select the .app 96 set the choice to POSIX path of (choose file with prompt chooseManual of type "com.apple.application-bundle" without showing package contents and invisibles) 97 end if 98 else if (get first item of found_ooos as string) is chooseMyOwn then 99 set the choice to (choose from list found_ooos default items (get first item of found_ooos) with prompt listPrompt OK button name listOKLabel cancel button name listCancelLabel) 100 if choice is false then 101 -- do nothing, the user cancelled the installation 102 return 2 --aborted by user 103 else if (choice as string) is chooseMyOwn then 104 -- yeah, one needs to use "choose file", otherwise 105 -- the user would not be able to select the .app 106 set the choice to POSIX path of (choose file with prompt chooseManual of type "com.apple.application-bundle" without showing package contents and invisibles) 107 end if 108 else if (get second item of found_ooos as string) is chooseMyOwn then 109 -- set choice to found installation 110 -- set the choice to (get first paragraph of found_ooos) 111 set the choice to (get first item of found_ooos) 112 else 113 set the choice to (choose from list found_ooos default items (get first item of found_ooos) with prompt listPrompt OK button name listOKLabel cancel button name listCancelLabel) 114 if choice is false then 115 -- do nothing, the user cancelled the installation 116 return 2 --aborted by user 117 else if (choice as string) is chooseMyOwn then 118 -- yeah, one needs to use "choose file", otherwise 119 -- the user would not be able to select the .app 120 set the choice to POSIX path of (choose file with prompt chooseManual of type "com.apple.application-bundle" without showing package contents and invisibles) 121 end if 122 end if 123 124 -- now only check whether the path is really from [PRODUCTNAME] 125 try 126 do shell script "grep '<string>[PRODUCTNAME] [PRODUCTVERSION]' " & quoted form of (choice as string) & "/Contents/Info.plist" 127 on error 128 display dialog (choice as string) & appInvalid buttons {InstallLabel} default button 1 with icon 0 129 return 3 --wrong target-directory 130 end try 131 132 (* 133 display dialog startInstall buttons {AbortLabel, InstallLabel} default button 2 134 135 if (button returned of result) is AbortLabel then 136 return 2 137 end if 138 *) 139 140 set tarCommand to "/usr/bin/tar -C " & quoted form of (choice as string) & " -xjf " & quoted form of sourcedir & "/tarball.tar.bz2" 141 try 142 do shell script tarCommand 143 144 on error errMSG number errNUM 145 display dialog IdentifyQ buttons {IdentifyYES, IdentifyNO} with icon 2 146 if (button returned of result) is IdentifyYES then 147 try 148 do shell script tarCommand with administrator privileges 149 on error errMSG number errNUM 150 display dialog installFailed buttons {OKLabel} default button 1 with icon 0 151 -- -60005 username/password wrong 152 -- -128 aborted by user 153 -- 2 error from tar - tarball not found (easy to test) 154 return errNUM 155 end try 156 else 157 return 2 -- aborted by user 158 end if 159 end try 160 161 display dialog installComplete buttons {OKLabel} default button 1 162