xref: /trunk/main/setup_native/scripts/osx_install_patch.applescript (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1(*
2This script is meant to
3    1) Identify installed instances of the product
4    2) check whether the user has write-access (and if not
5    ask for authentification)
6    3) install the shipped tarball
7*)
8
9-- strings for localisations - to be meant to be replaced
10-- by a makefile or similar
11set OKLabel to "[OKLabel]"
12set InstallLabel to "[InstallLabel]"
13set AbortLabel to "[AbortLabel]"
14set intro to "[IntroText1]
15
16[IntroText2]
17
18[IntroText3]"
19set chooseMyOwn to "[ChooseMyOwnText]"
20set listPrompt to "[ListPromptText]"
21set chooseManual to "[ChooseManualText]"
22set listOKLabel to "[ListOKLabelText]"
23set listCancelLabel to "[ListCancelLabel]"
24set appInvalid to "[AppInvalidText1]
25
26[AppInvalidText2]" -- string will begin with the chosen application's name
27set startInstall to "[StartInstallText1]
28
29[StartInstallText2]"
30set IdentifyQ to "[IdentifyQText]
31
32[IdentifyQText2]"
33set IdentifyYES to "[IdentifyYES]"
34set IdentifyNO to "[IdentifyNO]"
35set installFailed to "[InstallFailedText]"
36set installComplete to "[InstallCompleteTextPatch]"
37
38set sourcedir to (do shell script "dirname " & quoted form of POSIX path of (path to of me))
39
40display dialog intro buttons {AbortLabel, InstallLabel} default button 2
41
42if (button returned of result) is AbortLabel then
43    return 2
44end if
45
46set the found_ooos_all to (do shell script "mdfind \"kMDItemContentType == 'com.apple.application-bundle' && kMDItemDisplayName == '[PRODUCTNAME]*' && kMDItemDisplayName != '[FULLAPPPRODUCTNAME].app'\"") & "
47" & chooseMyOwn
48
49set found_ooos_all_paragraphs to paragraphs in found_ooos_all
50
51set found_ooos to {}
52repeat with currentApp in found_ooos_all_paragraphs
53    if currentApp does not start with "/Volumes" then
54        copy currentApp to the end of found_ooos
55    end if
56end repeat
57
58-- repeat with oneApp in found_ooos
59--  display dialog oneApp
60-- end repeat
61
62-- the choice returned is of type "list"
63-- Show selection dialog only if more than one or no product was found
64-- The first item is an empty string, if no app was found and no app started with "/Volumes"
65-- The first item is chooseMyOwn, if no app was found and at least one app started with "/Volumes"
66if (get first item of found_ooos as string) is "" then
67  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)
68  if choice is false then
69      -- do nothing, the user cancelled the installation
70        return 2 --aborted by user
71  else if (choice as string) is chooseMyOwn then
72      -- yeah, one needs to use "choose file", otherwise
73      -- the user would not be able to select the .app
74      set the choice to POSIX path of (choose file with prompt chooseManual of type "com.apple.application-bundle" without showing package contents and invisibles)
75  end if
76else if (get first item of found_ooos as string) is chooseMyOwn then
77  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)
78  if choice is false then
79      -- do nothing, the user cancelled the installation
80        return 2 --aborted by user
81  else if (choice as string) is chooseMyOwn then
82      -- yeah, one needs to use "choose file", otherwise
83      -- the user would not be able to select the .app
84      set the choice to POSIX path of (choose file with prompt chooseManual of type "com.apple.application-bundle" without showing package contents and invisibles)
85  end if
86else if (get second item of found_ooos as string) is chooseMyOwn then
87  -- set choice to found installation
88  -- set the choice to (get first paragraph of found_ooos)
89  set the choice to (get first item of found_ooos)
90else
91  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)
92  if choice is false then
93      -- do nothing, the user cancelled the installation
94        return 2 --aborted by user
95  else if (choice as string) is chooseMyOwn then
96      -- yeah, one needs to use "choose file", otherwise
97      -- the user would not be able to select the .app
98      set the choice to POSIX path of (choose file with prompt chooseManual of type "com.apple.application-bundle" without showing package contents and invisibles)
99  end if
100end if
101
102-- now only check whether the path is really from [PRODUCTNAME]
103try
104    do shell script "grep '<string>[PRODUCTNAME] [PRODUCTVERSION]'   " & quoted form of (choice as string) & "/Contents/Info.plist"
105on error
106    display dialog (choice as string) & appInvalid buttons {InstallLabel} default button 1 with icon 0
107    return 3 --wrong target-directory
108end try
109
110(*
111display dialog startInstall buttons {AbortLabel, InstallLabel} default button 2
112
113if (button returned of result) is AbortLabel then
114    return 2
115end if
116*)
117
118set tarCommand to "/usr/bin/tar -C " & quoted form of (choice as string) & " -xjf " & quoted form of sourcedir & "/tarball.tar.bz2"
119try
120    do shell script tarCommand
121
122on error errMSG number errNUM
123    display dialog IdentifyQ buttons {IdentifyYES, IdentifyNO} with icon 2
124    if (button returned of result) is IdentifyYES then
125        try
126            do shell script tarCommand with administrator privileges
127        on error errMSG number errNUM
128            display dialog installFailed buttons {OKLabel} default button 1 with icon 0
129            -- -60005 username/password wrong
130            -- -128   aborted by user
131            -- 2 error from tar - tarball not found (easy to test)
132            return errNUM
133        end try
134    else
135        return 2 -- aborted by user
136    end if
137end try
138
139display dialog installComplete buttons {OKLabel} default button 1
140