File: create_app_bundle

package info (click to toggle)
advene 1.1-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 10,588 kB
  • ctags: 6,326
  • sloc: xml: 56,303; python: 50,385; perl: 741; sh: 186; makefile: 83; ansic: 18
file content (156 lines) | stat: -rwxr-xr-x 6,007 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#! /bin/sh

THEMENAME=Cillop

# Ensure that we can access /opt
sudo chmod 755 /opt

# py2app's modulegraph uses file extensions to determine their nature. So, the fact
# that the advene main script is without extension prevents it from determining it is python code.
# There is a hack in the setup.py file that will use the alternate name advene_gui.py on MacOS X.
# We cannot simply use bin/advene.py, since it would conflict with the advene/ package directory name
# when importing
cp bin/advene bin/advene_gui.py

# Update the version date
./scripts/update_version

Basedir=./dist/Advene.app
Frameworks=${Basedir}/Contents/Frameworks
Resources=${Basedir}/Contents/Resources
MacOS=${Basedir}/Contents/MacOS

rm -rf build dist
/opt/local/bin/python setup.py py2app

# Make sure that all .py files are compiled (esp. advene/plugins/__init__.py)
/opt/local/bin/python -m compileall lib/advene

# Add advene, simpletal and cherrypy, which do not seem to be taken into account automatically. Should investigate this...
(cd lib ; zip -r ../dist/Advene.app/Contents/Resources/lib/python2.6/site-packages.zip  advene  simpletal cherrypy -i \*.pyc )
# Now try to copy the necessary gtk/pango data files (etc, lib)

# Let us put pango and pixbuf loader modules in the same modules directory
mkdir -p ${Frameworks}/modules

echo "Copying all Pango modules ..."
cp -R /opt/local/lib/pango/1.6.0/modules/*.so $Frameworks/modules

echo "Copying GTK modules"
cp -r /opt/local/lib/gtk-2.0 $Resources/lib
# Remove printbackends, there are issues when otool-ing them
rm ${Resources}/lib/gtk-2.0/2.10.0/printbackends/*

# generate new pango.modules file
cat > pangorc <<EOF 
[Pango]
ModulesPath=/opt/local/lib/pango/1.6.0/modules
EOF
env PANGO_RC_FILE=pangorc /opt/local/bin/pango-querymodules | sed "s?/opt/local/lib/pango/1.6.0/modules/?@executable_path/../Frameworks/modules/?" > $Resources/pango.modules.in
rm pangorc

# Generate a pangorc pointing to the relocated directory
cat > $Resources/pangorc.in <<EOF 
[Pango]
ModuleFiles=@userconf/pango.modules
ModulesPath=@executable_path/../Frameworks/modules
EOF

# Copy the fonts.conf file
cp /opt/local/etc/fonts/fonts.conf $Resources/fonts.conf

# Remove any reference to Verdana, since it makes Pango unusable
perl -pi -e 's/.*verdana.*//i' $Resources/fonts.conf

# Copy pixbuf loaders to gtk 2.10 dir
cp -r /opt/local/lib/gdk-pixbuf-2.0/2.10.0/loaders ${Resources}/lib/gtk-2.0/2.10.0

# generate a new GDK pixbufs loaders file
sed "s?/opt/local/lib/gdk-pixbuf-2.0/2.10.0/loaders/?@executable_path/../Resources/lib/gtk-2.0/2.10.0/loaders/?" < /opt/local/etc/gtk-2.0/gdk-pixbuf.loaders > $Resources/gdk-pixbuf.loaders.in

# Copy the theme
[ ! -z "$THEMENAME" ] && cp -r mac/${THEMENAME} ${Resources}/theme

# Some libraries (pixbufloader-gif, pixbufloader-xpm, svg_loader) have too large dependencies. 
# Use a workaround to shorten @executable_path/../Frameworks 
ln -s ../Frameworks ${MacOS}/f

# RSVG hack: include librsvg-2.2.dylib and its dependencies (last time I checked 2007/12/17, there was no need of recursively find dependencies from the dependencies)
cp /opt/local/lib/librsvg-2.2.dylib ${MacOS}/f
otool -L ${MacOS}/f/librsvg-2.2.dylib  | perl -lne 'print $1 if m!/opt/local/lib/(.+?) !' | while read a ; do if [ ! -e ${MacOS}/f/$a ]; then cp /opt/local/lib/$a ${MacOS}/f ; chmod 755 ${MacOS}/f/$a ; fi ; done


# Copy gtk python modules. This will override the py2app way (creating a _gtk.pyc wrapper in the site-packages.zip, which tries to load _gtk.so from lib-dynload, but it crashes)
#cp -r /opt/local/lib/python2.6/site-packages/gtk-2.0/* $Resources/lib/python2.6
# FIXME: now in /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/gtk-2.0/
cp -r  /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/gtk-2.0/* $Resources/lib/python2.6


# Copy gstreamer libs
cp /opt/local/lib/libgst*-0.10.0.dylib ${Frameworks}

# Copy gstreamer plugins and dependencies
( for n in `cat mac/gst-plugins.txt` 
do
   echo "gst plugin $n" >&2
   cp -r /opt/local/lib/gstreamer-0.10/${p} ${Resources}/gst-plugins
   otool -L /opt/local/lib/gstreamer-0.10/${n} | perl -lne 'print $1 if m!/opt/local/lib/(.+?\.dylib)!'
done) | sort -u | ( while read a
do
  echo "Copying $a dep" 
  cp /opt/local/lib/${a} ${Frameworks}
done )

echo "Fixing library names ..."
# fix the libraries we include
for dylib in $Frameworks/*.dylib $Frameworks/modules/*.so $Resources/lib/gtk-2.0/2.10.0/*/*.so $Resources/lib/python2.6/*.so $Resources/lib/python2.6/*/*.so ${Resources}/gst-plugins/*.so
#for dylib in $Frameworks/*.dylib $Frameworks/modules/*.so $Resources/lib/gtk-2.0/2.10.0/*/*.so $Resources/lib/python2.6/*/*.so ${Resources}/gst-plugins/*.so
do
    # skip symlinks
    if test ! -L $dylib ; then
	
	# change all the dependencies

	changes=""
	for lib in `otool -L $dylib | egrep "(/opt/local|/local/|libs/)" | awk '{print $1}'` ; do
	    base=`basename $lib`
	    #changes="$changes -change $lib @executable_path/../Frameworks/$base"
	    changes="$changes -change $lib @executable_path/f/$base"
	done

	if test "x$changes" != x ; then
	    if  install_name_tool $changes $dylib ; then
		:
	    else
                echo "Error for $dylib"
		#exit 1
	    fi
	fi

	# now the change what the library thinks its own name is

	base=`basename $dylib`
	#install_name_tool -id @executable_path/../Frameworks/$base $dylib
	install_name_tool -id @executable_path/f/$base $dylib
    fi
done

# Copy french gtk2.0 locale
cp -r /opt/local/share/locale/fr/LC_MESSAGES/*.mo ${Resources}/locale/fr/LC_MESSAGES

# Copy the x11 vlc output module
# FIXME: to update
##cp mac/libx11_plugin.dylib ${Resources}

# Fix shotdetect permissions
chmod 755 ${Resources}/share/shotdetect

# Use the shell wrapper
mv ${MacOS}/Advene ${MacOS}/Advene.bin
cp mac/Advene.wrapper ${MacOS}/Advene
chmod 755 ${MacOS}/Advene


# Hide the /opt directory, to make sure that we do not reuse something from there inadvertently
sudo chmod 000 /opt