xref: /trunk/main/setup_native/scripts/osx_install_languagepack.applescript (revision 56e4d38c33928bade1ec98e3d1fd9ebea94cde1d)
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
22This 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
31set OKLabel to "[OKLabel]"
32set InstallLabel to "[InstallLabel]"
33set AbortLabel to "[AbortLabel]"
34set intro to "[IntroText1]
35
36[IntroText2]
37
38[IntroText3]"
39set chooseMyOwn to "[ChooseMyOwnText]"
40set listPrompt to "[ListPromptText]"
41set chooseManual to "[ChooseManualText]"
42set listOKLabel to "[ListOKLabelText]"
43set listCancelLabel to "[ListCancelLabel]"
44set appInvalid to "[AppInvalidText1]
45
46[AppInvalidText2]" -- string will begin with the chosen application's name
47set startInstall to "[StartInstallText1]
48
49[StartInstallText2]"
50set IdentifyQ to "[IdentifyQText]
51
52[IdentifyQText2]"
53set IdentifyYES to "[IdentifyYES]"
54set IdentifyNO to "[IdentifyNO]"
55set installFailed to "[InstallFailedText]"
56set installSignedFailed to "[InstallSignedFailedText]"
57set installComplete to "[InstallCompleteText]
58
59[InstallCompleteText2]"
60
61set sourcedir to (do shell script "dirname " & quoted form of POSIX path of (path to of me))
62
63display dialog intro buttons {AbortLabel, InstallLabel} default button 2
64
65if (button returned of result) is AbortLabel then
66    return 2
67end if
68
69set the found_ooos_all to (do shell script "mdfind \"kMDItemContentType == 'com.apple.application-bundle' && kMDItemDisplayName == '[PRODUCTNAME]*' && kMDItemDisplayName != '[FULLAPPPRODUCTNAME].app'\"") & "
70" & chooseMyOwn
71
72set found_ooos_all_paragraphs to paragraphs in found_ooos_all
73
74set found_ooos to {}
75repeat with currentApp in found_ooos_all_paragraphs
76    if currentApp does not start with "/Volumes" then
77        copy currentApp to the end of found_ooos
78    end if
79end repeat
80
81-- repeat with oneApp in found_ooos
82--  display dialog oneApp
83-- end repeat
84
85-- the choice returned is of type "list"
86-- Show selection dialog only if more than one or no product was found
87-- The first item is an empty string, if no app was found and no app started with "/Volumes"
88-- The first item is chooseMyOwn, if no app was found and at least one app started with "/Volumes"
89if (get first item of found_ooos as string) is "" then
90  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)
91  if choice is false then
92      -- do nothing, the user cancelled the installation
93        return 2 --aborted by user
94  else if (choice as string) is chooseMyOwn then
95      -- yeah, one needs to use "choose file", otherwise
96      -- the user would not be able to select the .app
97      set the choice to POSIX path of (choose file with prompt chooseManual of type "com.apple.application-bundle" without showing package contents and invisibles)
98  end if
99else if (get first item of found_ooos as string) is chooseMyOwn then
100  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)
101  if choice is false then
102      -- do nothing, the user cancelled the installation
103        return 2 --aborted by user
104  else if (choice as string) is chooseMyOwn then
105      -- yeah, one needs to use "choose file", otherwise
106      -- the user would not be able to select the .app
107      set the choice to POSIX path of (choose file with prompt chooseManual of type "com.apple.application-bundle" without showing package contents and invisibles)
108  end if
109else if (get second item of found_ooos as string) is chooseMyOwn then
110  -- set choice to found installation
111  -- set the choice to (get first paragraph of found_ooos)
112  set the choice to (get first item of found_ooos)
113else
114  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)
115  if choice is false then
116      -- do nothing, the user cancelled the installation
117        return 2 --aborted by user
118  else if (choice as string) is chooseMyOwn then
119      -- yeah, one needs to use "choose file", otherwise
120      -- the user would not be able to select the .app
121      set the choice to POSIX path of (choose file with prompt chooseManual of type "com.apple.application-bundle" without showing package contents and invisibles)
122  end if
123end if
124
125-- now only check whether the path is really from [PRODUCTNAME]
126try
127    do shell script "grep '<string>[PRODUCTNAME] [PRODUCTVERSION]'   " & quoted form of (choice as string) & "/Contents/Info.plist"
128on error
129    display dialog (choice as string) & appInvalid buttons {InstallLabel} default button 1 with icon 0
130    return 3 --wrong target-directory
131end try
132
133-- Adding files below Contents would break a sealed application. Test for the seal
134-- itself: codesign --display also accepts the linker's ad-hoc signature on arm64.
135try
136    do shell script "test -e " & quoted form of ((choice as string) & "/Contents/_CodeSignature/CodeResources")
137    display dialog installSignedFailed buttons {OKLabel} default button 1 with icon 0
138    return 4
139on error
140    -- Unsigned legacy installations can still accept the traditional language pack.
141end try
142
143(*
144display dialog startInstall buttons {AbortLabel, InstallLabel} default button 2
145
146if (button returned of result) is AbortLabel then
147    return 2
148end if
149*)
150
151set tarCommand to "/usr/bin/tar -C " & quoted form of (choice as string) & " -xjf " & quoted form of sourcedir & "/tarball.tar.bz2"
152try
153    do shell script tarCommand
154
155on error errMSG number errNUM
156    display dialog IdentifyQ buttons {IdentifyYES, IdentifyNO} with icon 2
157    if (button returned of result) is IdentifyYES then
158        try
159            do shell script tarCommand with administrator privileges
160        on error errMSG number errNUM
161            display dialog installFailed buttons {OKLabel} default button 1 with icon 0
162            -- -60005 username/password wrong
163            -- -128   aborted by user
164            -- 2 error from tar - tarball not found (easy to test)
165            return errNUM
166        end try
167    else
168        return 2 -- aborted by user
169    end if
170end try
171
172display dialog installComplete buttons {OKLabel} default button 1
173