ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/util/gatherer
(Generate patch)

Comparing deliantra/Deliantra-Client/util/gatherer (file contents):
Revision 1.3 by root, Fri Dec 30 06:31:41 2011 UTC vs.
Revision 1.14 by root, Fri Jan 27 23:13:38 2012 UTC

1#!/bin/bash 1#!/bin/bash
2
3# this gem of a hack gathers all files required by the client for the platform
4# by deep magic, it works on osx, linux and windows. on MY osx, linux
5# and windows, that is.
2 6
3STRIP="strip" 7STRIP="strip"
4LIBEXT=so 8LIBEXT=so
5LIB0=so.? 9LIB0=so.?
6SO=so 10SO=so
7SYSLIB=/usr/lib 11SYSLIB=/usr/lib
8MAKE=make 12MAKE=make
9ARCHNAME=x86 13ARCHNAME=x86
10GENPACK_ENVVARS= 14GENPACK_ENVVARS="LD_LIBRARY_PATH=."
15EXTRA_EXTRACT=
11 16
12umask 022 17umask 022
13 18
14if [ "$(uname -s)" = CYGWIN_NT-5.0 ]; then 19if [ "$(uname -s)" = CYGWIN_NT-5.0 ]; then
15 . ~/.setenv 20 . ~/.setenv
16 21
17 OS=windows 22 OS=windows
18 URLADER=.exe 23 URLADER=windows-x86
19 unset PANGO 24 unset PANGO
20 PERL=/c/perl/bin/perl 25 PERL=/c/perl/bin/perl
21 MAKE=nmake 26 MAKE=nmake
22 SYSLIB=/c/gtk/bin 27 SYSLIB=/c/gtk/bin
23 LIBEXT=dll 28 LIBEXT=dll
24 LIB0=dll 29 LIB0=dll
25 SO=dll 30 SO=dll
26 STRIP=":" # stripping the perl library kills it, and apparently, everythignis always stripped 31 STRIP=":" # stripping the perl library kills it, and apparently, everythignis always stripped
32 EXTRA_EXTRACT="-MWin32::GUI::SplashScreen"
27 33
28 # fontconfig apparently ignores env vars and always looks at ./etc/fonts/fonts.conf, 34 # fontconfig apparently ignores env vars and always looks at ./etc/fonts/fonts.conf,
29 # but only if . isn't actually called bin or lib. hope for the best. 35 # but only if . isn't actually called bin or lib. hope for the best.
30 GENPACK_ENVVARS="FONTCONFIG_PATH=pm/Deliantra/Client/private/resources/fonts FONTCONFIG_FILE=fonts.conf" 36 GENPACK_ENVVARS="FONTCONFIG_PATH=pm/Deliantra/Client/private/resources/fonts FONTCONFIG_FILE=fonts.conf"
31 37
33 /c/gtk/bin/pango-querymodules # empty output usually 39 /c/gtk/bin/pango-querymodules # empty output usually
34 } 40 }
35 41
36elif [ "$(uname -s)" = Darwin ]; then 42elif [ "$(uname -s)" = Darwin ]; then
37 OS=darwin 43 OS=darwin
38 URLADER=-osx105 44 URLADER=darwin-x86
39 PANGO=1.6.0 45 PANGO=1.6.0
40 PERL=/opt/local/bin/perl 46 PERL=/opt/local/bin/perl
47 GENPACK_ENVVARS="DYLD_LIBRARY_PATH=."
41 48
42 SYSLIB=/opt/local/lib 49 SYSLIB=/opt/local/lib
43 LIB0=dylib 50 LIB0=dylib
44 SO=bundle 51 SO=bundle
45 STRIP="strip -x" 52 STRIP="strip -x"
46elif [ $(arch) = i686 ]; then 53elif [ $(arch) = i686 ]; then
47 OS=linux 54 OS=linux
48 URLADER=-x86 55 URLADER=linux-x86
49 PANGO=1.5.0 56 PANGO=1.5.0
50 PERL=/usr/bin/perl 57 PERL=/usr/bin/perl
51else 58else
52 OS=linux 59 OS=linux
53 URLADER=-amd64 60 URLADER=linux-amd64
54 PANGO=1.5.0 61 PANGO=1.5.0
55 PERL=/usr/bin/perl 62 PERL=/usr/bin/perl
56 ARCHNAME=amd64 63 ARCHNAME=amd64
57fi 64fi
58 65
59export DIST="$(pwd)/dist/$OS-$ARCHNAME" 66DISTf="dist/$OS-$ARCHNAME"
67export DIST="$(pwd)/$DISTf"
60 68
61rm -rf "$DIST" 69eval $("$PERL" -V:sitebinexp:)
62mkdir -p "$DIST"
63 70
64#PERL=/opt/perl 71"$PERL" "$sitebinexp"/perl-libextractor --exedir . --dlldir . --bindir pm/bin --libdir pm \
65#PANGO=1.6.0 72 --perl --core-support --script deliantra $EXTRA_EXTRACT \
66 73 --runtime-only \
67export EV_EVENTFD=0 74 --copy "$DISTf"
68export EV_INOTIFY=0
69export EV_SIGNALFD=0
70
71if true; then
72 for mod in Deliantra CFPlus; do
73# for mod in common-sense AnyEvent EV JSON-XS Deliantra Compress-LZF BDB Guard CFPlus; do
74# for mod in CFPlus; do
75 (
76 cd /root/src/$mod
77 cvs update -qAdP
78 $PERL Makefile.PL </dev/null >/dev/null
79 $MAKE clean >/dev/null
80 $PERL Makefile.PL </dev/null >/dev/null
81 if ! $MAKE install >log 2>&1; then
82 cat log
83 exit
84 fi
85 rm -f log
86 $MAKE clean >/dev/null
87 )
88 done
89fi
90 75
91cat <<EOF >"$DIST"/pango.rc 76cat <<EOF >"$DIST"/pango.rc
92[Pango] 77[Pango]
93ModuleFiles = pango.modules 78ModuleFiles = pango.modules
94EOF 79EOF
97 exec 5>"$DIST"/pango.modules 82 exec 5>"$DIST"/pango.modules
98 pango-querymodules | grep ^/ | while read lib rest; do 83 pango-querymodules | grep ^/ | while read lib rest; do
99 base=$(basename "$lib") 84 base=$(basename "$lib")
100 [ "$base" = pango-basic-x.$LIBEXT ] && continue 85 [ "$base" = pango-basic-x.$LIBEXT ] && continue
101 cp -p "$lib" "$DIST"/. 86 cp -p "$lib" "$DIST"/.
102 echo "$base $rest" >&5 87 echo "./$base $rest" >&5 # using ./ seems to help pango not to rummage around in /usr/lib etc.
103 done 88 done
104) 89)
105 90
106############################################################################# 91#############################################################################
107 92
110eval $($PERL -V:sitebinexp -V:sitearchexp -V:sitelib -V:vendorarchexp -V:vendorlibexp -V:archlibexp -V:privlibexp) 95eval $($PERL -V:sitebinexp -V:sitearchexp -V:sitelib -V:vendorarchexp -V:vendorlibexp -V:archlibexp -V:privlibexp)
111 96
112mkdir -p "$DIST"/pm/bin 97mkdir -p "$DIST"/pm/bin
113cp "$sitebinexp"/deliantra "$DIST"/pm/bin/ 98cp "$sitebinexp"/deliantra "$DIST"/pm/bin/
114cp -p util/run "$DIST" 99cp -p util/run "$DIST"
115
116(
117 exec <util/modules.dep
118
119# while read type name; do
120# if [ "$type" = d ]; then
121# # not implemented
122# dir=$(echo "$name" | sed -e s%::%/%g)
123# for lib in "$sitearchexp" "$sitelib" "$vendorarchexp" "$vendorlibexp" "$archlibexp" "$privlibexp"; do
124# if [ -e "$lib/auto/$dir/.packlist" ]; then
125# cat "$lib/auto/$dir/.packlist"
126# fi
127# echo "x $lib $dir"
128# done
129# elif [ $type = m ]; then
130# :
131# else
132# echo "unknown type $type ($name)"
133# exit 1
134# fi
135# done
136 mkdir -p "$DIST"/pm
137
138 export OSDIST="$DIST"
139 [ "$OS" = windows ] && OSDIST=$(cygpath -w "$OSDIST")
140
141 $PERL -e '
142 use Config;
143 use File::Glob qw(:glob);
144 use File::Copy;
145 use File::Path;
146 use File::Basename;
147
148 my @path = do {
149 my %seen;
150 grep !$seen{$_}++, grep length, map $Config{$_}, qw(
151 sitearchexp
152 sitelib
153 vendorarchexp
154 vendorlibexp
155 archlibexp
156 privlibexp
157 )
158 };
159
160 while (<>) {
161 s/\015?\012$//;
162 next if /^(#|$)/;
163 s/\.dynob$/.'$SO'/;
164
165 my $found;
166 for my $lib (@path) {
167 chdir $lib || next;
168
169 my @glob = File::Glob::bsd_glob $_, 0; # explicit 0 needed
170
171 if (@glob) {
172 ++$found;
173
174 for (@glob) {
175 if (-d $_) {
176 system "rsync", "-aR", $_, "$ENV{DIST}/pm/.";
177 } else {
178 File::Path::mkpath "$ENV{OSDIST}/pm/" . dirname $_;
179 File::Copy::syscopy "$_", "$ENV{OSDIST}/pm/$_"
180 or die "$ENV{OSDIST}/pm/$_: $!";
181
182 if (s/\.pm$//) {
183 $auto = "auto/$_";
184
185 for my $glob ("*.'$SO'", "autosplit.ix", "*.al") {
186 for (bsd_glob "$auto/$glob", 0) {
187 File::Path::mkpath "$ENV{OSDIST}/pm/" . dirname $_;
188 File::Copy::syscopy "$_", "$ENV{OSDIST}/pm/$_";
189 }
190 }
191 }
192 }
193 }
194
195 last;
196 }
197 }
198
199 warn "$_: not found\n"
200 unless $found;
201 }
202 '
203) || exit
204 100
205############################################################################# 101#############################################################################
206 102
207if [ "$OS" = windows ]; then 103if [ "$OS" = windows ]; then
208 libdeps() { 104 libdeps() {
240} 136}
241 137
242( 138(
243 cd "$DIST" 139 cd "$DIST"
244 140
245 cp -p "$PERL" .
246
247 if [ "$OS" = windows ]; then 141 if [ "$OS" = windows ]; then
248 cp -p $SYSLIB/libvorbisfile-3.dll $SYSLIB/mikmod.dll $SYSLIB/libpng12-0.dll . 142 cp -p $SYSLIB/libvorbisfile-3.dll $SYSLIB/mikmod.dll $SYSLIB/libpng12-0.dll .
249 cp /root/src/CFPlus/util/splash.bmp . 143 cp /root/src/CFPlus/util/splash.bmp .
250 chmod -R u+rwX pm/auto 144 chmod -R u+rwX pm/auto
251 145
252 # convert perl to a non-console-app 146 # convert perl to a non-console-app
253 $PERL -MWin32::Exe -e '$e = new Win32::Exe"perl.exe"; $e->set_subsystem_windows; $e->write' 147 $PERL -MWin32::Exe -e '$e = new Win32::Exe"perl.exe"; $e->set_subsystem_windows; $e->write'
254 148
255 else 149 else
256 # patch braindamaged pango
257 perl -pe 's{/u(?=sr/lib(32)?/pango)}{/\x00}g; s{\Q'$PANGO'\E\x00}{y.t.u\x00}g' <$SYSLIB/libpango-1.0.$LIB0 >libpango-1.0.$LIB0
258 chmod 755 libpango-1.0.$LIB0
259
260 for lib in mikmod vorbisfile; do 150 for lib in mikmod vorbisfile; do
261 cp -p $SYSLIB/lib$lib.$LIB0 . 151 cp -p $SYSLIB/lib$lib.$LIB0 .
262 chmod 755 lib$lib.$LIB0 152 chmod 755 lib$lib.$LIB0
263 done 153 done
264 fi 154 fi
272 for lib in \ 162 for lib in \
273 dl c m rt pthread nsl crypt \ 163 dl c m rt pthread nsl crypt \
274 X11 Xext Xau Xdmcp ICE SM Xrandr Xrender Xxf86vm drm GL \ 164 X11 Xext Xau Xdmcp ICE SM Xrandr Xrender Xxf86vm drm GL \
275 z 165 z
276 do 166 do
277 rm -f lib"$lib".$SO0 167 rm -f lib"$lib".$LIB0
278 done 168 done
169
170 if [ "$OS" != windows ]; then
171 # patch braindamaged pango
172
173 if [ "$OS" != darwin ]; then
174 set libpango-1.0.$LIB0
175 perl -pe 's{/u(?=sr/lib(32)?/pango)}{.\x00}g;' <"$1" >"$1~" && mv "$1~" "$1"
176 else
177 set lib*pango-1.0.0.dylib
178 perl -pe 's{/o(?=pt/local/.../pango)}{.\x00}g;' <"$1" >"$1~" && mv "$1~" "$1"
179 fi
180 chmod 755 "$1"
181 fi
279 182
280 if [ "$OS" = darwin ]; then 183 if [ "$OS" = darwin ]; then
281 # "dll hell" is most severe on os x, because apple 184 # "dll hell" is most severe on os x, because apple
282 # does not generally give a shit for backwards compatibility, 185 # does not generally give a shit for backwards compatibility,
283 # alwayss ships outdated libraries and often provides libraries 186 # alwayss ships outdated libraries and often provides libraries
315 patchlibs "$lib" 218 patchlibs "$lib"
316 mv "$lib" "libdeliantra-$stem.dylib" 219 mv "$lib" "libdeliantra-$stem.dylib"
317 done 220 done
318 fi 221 fi
319 222
320 [ "$OS" = linux ] && chrpath -d perl # debian perls have an rpath. really. 223 [ "$OS" = linux ] && chrpath -d perl $(find pm -name "*.so") # debian perls have an rpath, many modules too
321 $STRIP $(find . -name "*.$SO" -o -name "*.$LIBEXT" -o -name "*.$LIB0") perl 224 $STRIP $(find . -name "*.$SO" -o -name "*.$LIBEXT" -o -name "*.$LIB0") perl
225
226 : >timidity.cfg
322) 227)
323 228
324printf -- urlader$URLADER >"$DIST".urlader 229cat >"$DIST".vars <<EOF
230G_URLADER="$URLADER"
231G_OS="$OS"
232G_ARCHNAME="$ARCHNAME"
233G_ENVVARS="$GENPACK_ENVVARS"
234G_COMMAND="./perl run"
235EOF
325 236
326echo >"$DIST".genpack genpack deliantra_S-$OS-"$ARCHNAME" '"$EXE_VER"' '"$1"' $GENPACK_ENVVARS ./perl run
327
328exit
329
330
331tar cf deliantra-gnu-linux-$ARCHNAME.tar deliantra-gnu-linux-$ARCHNAME
332gzip -9vf deliantra-gnu-linux-$ARCHNAME.tar
333todata deliantra-gnu-linux-$ARCHNAME.tar.gz
334

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines