Make sure the GUID of the typelib we are registering matches the guid
[wine] / tools / wineshelllink
1 #!/bin/sh
2 #
3 # Create menu/desktop entries for an application
4 # This is used by the IShellLink interface
5 #
6 # Copyright 2000 Alexandre Julliard
7 #
8 # This library is free software; you can redistribute it and/or
9 # modify it under the terms of the GNU Lesser General Public
10 # License as published by the Free Software Foundation; either
11 # version 2.1 of the License, or (at your option) any later version.
12 #
13 # This library is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16 # Lesser General Public License for more details.
17 #
18 # You should have received a copy of the GNU Lesser General Public
19 # License along with this library; if not, write to the Free Software
20 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21 #
22
23 mode=""
24 args=""
25 menu=""
26 icon=""
27 descr=""
28 link=""
29 path=""
30 workdir=""
31
32 usage()
33 {
34     cat <<EOF
35 usage: wineshelllink options
36
37 options:
38   --desktop     create a desktop link
39   --menu        create a menu entry
40   --path xx     path to the application
41   --link xx     name of link to create
42   --args xx     command-line arguments for the application
43   --icon xx     icon to display
44   --workdir xx  working directory for the application
45   --descr xx    application description
46
47 EOF
48     exit 2
49 }
50
51 if [ $# -eq 0 ] ; then
52     usage
53 fi
54
55 while [ $# -gt 0 ]
56 do
57   case "$1" in
58     --desktop) mode="desktop"; shift 1 ;;
59     --menu)    mode="menu"; shift 1 ;;
60     --path)    path="$2"; shift 2 ;;
61     --link)    link="$2"; shift 2 ;;
62     --args)    args="$2"; shift 2 ;;
63     --icon)    icon="$2"; shift 2 ;;
64     --descr)   descr="$2"; shift 2 ;;
65     --workdir) workdir="$2"; shift 2 ;;
66     *) usage ;;
67   esac
68 done
69
70 if [ -z "$mode" ] ; then
71     echo "Either --desktop or --menu required"
72     usage
73 fi
74
75 if [ -z "$link" ] ; then
76     echo "You must specify a link name with --link"
77     usage
78 fi
79
80 kde_entry()
81 {
82     xname=`basename "$link"`
83     cat <<EOF
84 # KDE Config File
85 [KDE Desktop Entry]
86 Name=$xname
87 Exec=wine '$path' $args
88 Type=Application
89 Comment=$descr
90 EOF
91     [ -z "$workdir" ] || echo "Path=\"$workdir\""
92     [ -z "$xpmicon" ] || echo "Icon=$xpmicon"
93 }
94
95 gnome_entry()
96 {
97     xname=`basename "$link"`
98     cat <<EOF
99 [Desktop Entry]
100 Name=$xname
101 Exec=wine "$path" $args
102 Type=Application
103 Comment=$descr
104 EOF
105     [ -z "$workdir" ] || echo "Path=\"$workdir\""
106     [ -z "$xpmicon" ] || echo "Icon=$xpmicon"
107 }
108
109 mdk_entry()
110 {
111     base=`basename "$link"`
112     section=`dirname "$link"`
113     [ -z "$icon" ] || xicon="icon=\"$xpmicon\""
114     pathmenu=`echo "$path" | sed 's+\\\\+\\\\\\\\+g'`
115     echo "?package(local.Wine):needs=x11 section=\"/Wine/$section\" title=\"$base\" longtitle=\"$descr\" command=\"wine '$pathmenu' $args\" $xicon"
116 }
117
118 # copy the icon file to a specified dir and set xpmicon to the resulting path
119 copy_icon()
120 {
121   dir="$1"
122   mkdir -p "$dir"
123   mkdir -p "$dir/""`dirname "$link"`" || true
124   if [ -f "$icon" ]
125   then
126     cp "$icon" "$dir/$link.xpm"
127     xpmicon="$dir/$link.xpm"
128   else
129     xpmicon=""
130   fi
131 }
132
133 # Debian/Mandrake
134
135 which update-menus > /dev/null 2>&1
136 if [ $? = 0 -a $mode = "menu" ]
137 then
138   iconname="`basename "$link"`.xpm"
139   dir="$HOME/.menu/icons"
140   if [ -f "$icon" ]
141   then
142     mkdir -p "$dir"
143     cp "$icon" "$dir/$iconname"
144     xpmicon="$dir/$iconname"
145   else
146     xpmicon=""
147   fi
148   mdk_entry >> "$HOME/.menu/wine"
149   if [ -d "/usr/lib/menu" ] && [ -w "/usr/lib/menu" ]
150   then
151     mdk_entry >> "/usr/lib/menu/wine"
152   fi
153   update-menus > /dev/null 2>&1
154 fi
155
156 # KDE
157
158 if [ -d "$HOME/.kde" ]
159 then
160   kdeversion=0
161   if which kde-config >/dev/null 2>&1
162   then
163     kdeversion=`kde-config -v | grep KDE: | sed -n "s/^KDE: \([^.]*\)\..*$/\1/p"`
164   fi
165
166   if [ $kdeversion -ge 2 ]
167   then
168     copy_icon "$HOME/.kde/share/applnk/Wine"
169     if [ $mode = "menu" ]
170     then
171       gnome_entry > "$HOME/.kde/share/applnk/Wine/$link.desktop"
172     elif [ -d "$HOME/Desktop" ]
173     then
174       gnome_entry > "$HOME/Desktop/$link.desktop"
175     fi
176   else
177     copy_icon "$HOME/.kde/share/applnk/Wine"
178     if [ $mode = "menu" ]
179     then
180       kde_entry > "$HOME/.kde/share/applnk/Wine/$link.kdelnk"
181
182       # KDE 1.x kludge.  Wake up KDE, if we can find kpanel running
183       which kwmcom >/dev/null 2>/dev/null && \
184         ps u -C kpanel >/dev/null 2>/dev/null && \
185           kwmcom kpanel:restart
186
187     elif [ -d "$HOME/Desktop" ]
188     then
189       kde_entry > "$HOME/Desktop/$link.kdelnk"
190       #   KDE 1.x kludge:  wake up KDE, if we can find kfm running...
191       which kfmclient >/dev/null 2>/dev/null && \
192         ps u -C kfm >/dev/null 2>/dev/null  && \
193           kfmclient refreshDesktop
194     fi
195   fi
196 fi
197
198 if [ -d "$HOME/.kde2" ]
199 then
200   copy_icon "$HOME/.kde2/share/applnk/Wine"
201   if [ $mode = "menu" ]
202   then
203     gnome_entry > "$HOME/.kde2/share/applnk/Wine/$link.desktop"
204   else
205     if [ -d "$HOME/Desktop2" ]
206     then
207       gnome_entry > "$HOME/Desktop2/$link.desktop"
208     fi
209     if [ -d "$HOME/Desktop" ]
210     then
211       gnome_entry > "$HOME/Desktop/$link.desktop"
212     fi
213   fi
214 fi
215
216 if [ -d "$HOME/.kde3/share/applnk" ]
217 then
218   copy_icon "$HOME/.kde3/share/applnk/Wine"
219   if [ $mode = "menu" ]
220   then
221     gnome_entry > "$HOME/.kde3/share/applnk/Wine/$link.desktop"
222   else
223     if [ -d "$HOME/Desktop3" ]
224     then
225       gnome_entry > "$HOME/Desktop3/$link.desktop"
226     fi
227     if [ -d "$HOME/Desktop2" ]
228     then
229       gnome_entry > "$HOME/Desktop2/$link.desktop"
230     fi
231     if [ -d "$HOME/Desktop" ]
232     then
233       gnome_entry > "$HOME/Desktop/$link.desktop"
234     fi
235   fi
236 fi
237
238 # Gnome
239
240 if [ -d "$HOME/.gnome" ]
241 then
242   copy_icon "$HOME/.gnome/apps/Wine"
243   if [ $mode = "menu" ]
244   then
245     gnome_entry > "$HOME/.gnome/apps/Wine/$link.desktop"
246   elif [ -d "$HOME/.gnome-desktop" ]
247   then
248     gnome_entry > "$HOME/.gnome-desktop/$link.desktop"
249   fi
250 fi
251
252 exit 0