| (* |
| |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| |
| |
| |
| This script is meant to |
| 1) Identify installed instances of the product |
| 2) check whether the user has write-access (and if not |
| ask for authentification) |
| 3) install the shipped tarball |
| *) |
| |
| -- strings for localisations - to be meant to be replaced |
| -- by a makefile or similar |
| set OKLabel to "[OKLabel]" |
| set InstallLabel to "[InstallLabel]" |
| set AbortLabel to "[AbortLabel]" |
| set intro to "[IntroText1] |
| |
| [IntroText2] |
| |
| [IntroText3]" |
| set chooseMyOwn to "[ChooseMyOwnText]" |
| set listPrompt to "[ListPromptText]" |
| set chooseManual to "[ChooseManualText]" |
| set listOKLabel to "[ListOKLabelText]" |
| set listCancelLabel to "[ListCancelLabel]" |
| set appInvalid to "[AppInvalidText1] |
| |
| [AppInvalidText2]" -- string will begin with the chosen application's name |
| set startInstall to "[StartInstallText1] |
| |
| [StartInstallText2]" |
| set IdentifyQ to "[IdentifyQText] |
| |
| [IdentifyQText2]" |
| set IdentifyYES to "[IdentifyYES]" |
| set IdentifyNO to "[IdentifyNO]" |
| set installFailed to "[InstallFailedText]" |
| set installComplete to "[InstallCompleteTextPatch]" |
| |
| set sourcedir to (do shell script "dirname " & quoted form of POSIX path of (path to of me)) |
| |
| display dialog intro buttons {AbortLabel, InstallLabel} default button 2 |
| |
| if (button returned of result) is AbortLabel then |
| return 2 |
| end if |
| |
| set the found_ooos_all to (do shell script "mdfind \"kMDItemContentType == 'com.apple.application-bundle' && kMDItemDisplayName == '[PRODUCTNAME]*' && kMDItemDisplayName != '[FULLAPPPRODUCTNAME].app'\"") & " |
| " & chooseMyOwn |
| |
| set found_ooos_all_paragraphs to paragraphs in found_ooos_all |
| |
| set found_ooos to {} |
| repeat with currentApp in found_ooos_all_paragraphs |
| if currentApp does not start with "/Volumes" then |
| copy currentApp to the end of found_ooos |
| end if |
| end repeat |
| |
| -- repeat with oneApp in found_ooos |
| -- display dialog oneApp |
| -- end repeat |
| |
| -- the choice returned is of type "list" |
| -- Show selection dialog only if more than one or no product was found |
| -- The first item is an empty string, if no app was found and no app started with "/Volumes" |
| -- The first item is chooseMyOwn, if no app was found and at least one app started with "/Volumes" |
| if (get first item of found_ooos as string) is "" then |
| 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) |
| if choice is false then |
| -- do nothing, the user cancelled the installation |
| return 2 --aborted by user |
| else if (choice as string) is chooseMyOwn then |
| -- yeah, one needs to use "choose file", otherwise |
| -- the user would not be able to select the .app |
| set the choice to POSIX path of (choose file with prompt chooseManual of type "com.apple.application-bundle" without showing package contents and invisibles) |
| end if |
| else if (get first item of found_ooos as string) is chooseMyOwn then |
| 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) |
| if choice is false then |
| -- do nothing, the user cancelled the installation |
| return 2 --aborted by user |
| else if (choice as string) is chooseMyOwn then |
| -- yeah, one needs to use "choose file", otherwise |
| -- the user would not be able to select the .app |
| set the choice to POSIX path of (choose file with prompt chooseManual of type "com.apple.application-bundle" without showing package contents and invisibles) |
| end if |
| else if (get second item of found_ooos as string) is chooseMyOwn then |
| -- set choice to found installation |
| -- set the choice to (get first paragraph of found_ooos) |
| set the choice to (get first item of found_ooos) |
| else |
| 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) |
| if choice is false then |
| -- do nothing, the user cancelled the installation |
| return 2 --aborted by user |
| else if (choice as string) is chooseMyOwn then |
| -- yeah, one needs to use "choose file", otherwise |
| -- the user would not be able to select the .app |
| set the choice to POSIX path of (choose file with prompt chooseManual of type "com.apple.application-bundle" without showing package contents and invisibles) |
| end if |
| end if |
| |
| -- now only check whether the path is really from [PRODUCTNAME] |
| try |
| do shell script "grep '<string>[PRODUCTNAME] [PRODUCTVERSION]' " & quoted form of (choice as string) & "/Contents/Info.plist" |
| on error |
| display dialog (choice as string) & appInvalid buttons {InstallLabel} default button 1 with icon 0 |
| return 3 --wrong target-directory |
| end try |
| |
| (* |
| display dialog startInstall buttons {AbortLabel, InstallLabel} default button 2 |
| |
| if (button returned of result) is AbortLabel then |
| return 2 |
| end if |
| *) |
| |
| set tarCommand to "/usr/bin/tar -C " & quoted form of (choice as string) & " -xjf " & quoted form of sourcedir & "/tarball.tar.bz2" |
| try |
| do shell script tarCommand |
| |
| on error errMSG number errNUM |
| display dialog IdentifyQ buttons {IdentifyYES, IdentifyNO} with icon 2 |
| if (button returned of result) is IdentifyYES then |
| try |
| do shell script tarCommand with administrator privileges |
| on error errMSG number errNUM |
| display dialog installFailed buttons {OKLabel} default button 1 with icon 0 |
| -- -60005 username/password wrong |
| -- -128 aborted by user |
| -- 2 error from tar - tarball not found (easy to test) |
| return errNUM |
| end try |
| else |
| return 2 -- aborted by user |
| end if |
| end try |
| |
| display dialog installComplete buttons {OKLabel} default button 1 |