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.5 by root, Fri Dec 30 10:59:00 2011 UTC vs.
Revision 1.14 by root, Fri Jan 27 23:13:38 2012 UTC

1#!/bin/bash 1#!/bin/bash
2 2
3# this gem of a hack gathers all fiels required by the client for the platform 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 4# by deep magic, it works on osx, linux and windows. on MY osx, linux
5# and windows, that is. 5# and windows, that is.
6 6
7STRIP="strip" 7STRIP="strip"
8LIBEXT=so 8LIBEXT=so
10SO=so 10SO=so
11SYSLIB=/usr/lib 11SYSLIB=/usr/lib
12MAKE=make 12MAKE=make
13ARCHNAME=x86 13ARCHNAME=x86
14GENPACK_ENVVARS="LD_LIBRARY_PATH=." 14GENPACK_ENVVARS="LD_LIBRARY_PATH=."
15EXTRA_EXTRACT=
15 16
16umask 022 17umask 022
17 18
18if [ "$(uname -s)" = CYGWIN_NT-5.0 ]; then 19if [ "$(uname -s)" = CYGWIN_NT-5.0 ]; then
19 . ~/.setenv 20 . ~/.setenv
20 21
21 OS=windows 22 OS=windows
22 URLADER=.exe 23 URLADER=windows-x86
23 unset PANGO 24 unset PANGO
24 PERL=/c/perl/bin/perl 25 PERL=/c/perl/bin/perl
25 MAKE=nmake 26 MAKE=nmake
26 SYSLIB=/c/gtk/bin 27 SYSLIB=/c/gtk/bin
27 LIBEXT=dll 28 LIBEXT=dll
28 LIB0=dll 29 LIB0=dll
29 SO=dll 30 SO=dll
30 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"
31 33
32 # 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,
33 # 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.
34 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"
35 37
37 /c/gtk/bin/pango-querymodules # empty output usually 39 /c/gtk/bin/pango-querymodules # empty output usually
38 } 40 }
39 41
40elif [ "$(uname -s)" = Darwin ]; then 42elif [ "$(uname -s)" = Darwin ]; then
41 OS=darwin 43 OS=darwin
42 URLADER=-osx105 44 URLADER=darwin-x86
43 PANGO=1.6.0 45 PANGO=1.6.0
44 PERL=/opt/local/bin/perl 46 PERL=/opt/local/bin/perl
45 GENPACK_ENVVARS="DYLD_LIBRARY_PATH=." 47 GENPACK_ENVVARS="DYLD_LIBRARY_PATH=."
46 48
47 SYSLIB=/opt/local/lib 49 SYSLIB=/opt/local/lib
48 LIB0=dylib 50 LIB0=dylib
49 SO=bundle 51 SO=bundle
50 STRIP="strip -x" 52 STRIP="strip -x"
51elif [ $(arch) = i686 ]; then 53elif [ $(arch) = i686 ]; then
52 OS=linux 54 OS=linux
53 URLADER=-x86 55 URLADER=linux-x86
54 PANGO=1.5.0 56 PANGO=1.5.0
55 PERL=/usr/bin/perl 57 PERL=/usr/bin/perl
56else 58else
57 OS=linux 59 OS=linux
58 URLADER=-amd64 60 URLADER=linux-amd64
59 PANGO=1.5.0 61 PANGO=1.5.0
60 PERL=/usr/bin/perl 62 PERL=/usr/bin/perl
61 ARCHNAME=amd64 63 ARCHNAME=amd64
62fi 64fi
63 65
64export DIST="$(pwd)/dist/$OS-$ARCHNAME" 66DISTf="dist/$OS-$ARCHNAME"
67export DIST="$(pwd)/$DISTf"
65 68
66rm -rf "$DIST" 69eval $("$PERL" -V:sitebinexp:)
67mkdir -p "$DIST"
68 70
69#PERL=/opt/perl 71"$PERL" "$sitebinexp"/perl-libextractor --exedir . --dlldir . --bindir pm/bin --libdir pm \
70#PANGO=1.6.0 72 --perl --core-support --script deliantra $EXTRA_EXTRACT \
71 73 --runtime-only \
72export EV_EVENTFD=0 74 --copy "$DISTf"
73export EV_INOTIFY=0
74export EV_SIGNALFD=0
75
76if true; then
77 for mod in deliantra/Deliantra deliantra/Deliantra-Client; do
78# for mod in common-sense AnyEvent EV JSON-XS deliantra/Deliantra Compress-LZF BDB Guard deliantra/Deliantra-Client; do
79# for mod in CFPlus; do
80 (
81 cd /root/src/$mod || exit
82 cvs update -AdP
83 rm -rf blib
84 set -x
85 $PERL Makefile.PL </dev/null >/dev/null
86 $MAKE clean >/dev/null
87 $PERL Makefile.PL </dev/null >/dev/null
88 if ! $MAKE install >log 2>&1; then
89 echo
90 echo error while building $mod
91 cat log
92 exit
93 fi
94 rm -f log
95 $MAKE clean >/dev/null
96 ) || exit
97 done
98fi
99 75
100cat <<EOF >"$DIST"/pango.rc 76cat <<EOF >"$DIST"/pango.rc
101[Pango] 77[Pango]
102ModuleFiles = pango.modules 78ModuleFiles = pango.modules
103EOF 79EOF
106 exec 5>"$DIST"/pango.modules 82 exec 5>"$DIST"/pango.modules
107 pango-querymodules | grep ^/ | while read lib rest; do 83 pango-querymodules | grep ^/ | while read lib rest; do
108 base=$(basename "$lib") 84 base=$(basename "$lib")
109 [ "$base" = pango-basic-x.$LIBEXT ] && continue 85 [ "$base" = pango-basic-x.$LIBEXT ] && continue
110 cp -p "$lib" "$DIST"/. 86 cp -p "$lib" "$DIST"/.
111 echo "$base $rest" >&5 87 echo "./$base $rest" >&5 # using ./ seems to help pango not to rummage around in /usr/lib etc.
112 done 88 done
113) 89)
114 90
115############################################################################# 91#############################################################################
116 92
119eval $($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)
120 96
121mkdir -p "$DIST"/pm/bin 97mkdir -p "$DIST"/pm/bin
122cp "$sitebinexp"/deliantra "$DIST"/pm/bin/ 98cp "$sitebinexp"/deliantra "$DIST"/pm/bin/
123cp -p util/run "$DIST" 99cp -p util/run "$DIST"
124
125(
126 exec <util/modules.dep
127
128# while read type name; do
129# if [ "$type" = d ]; then
130# # not implemented
131# dir=$(echo "$name" | sed -e s%::%/%g)
132# for lib in "$sitearchexp" "$sitelib" "$vendorarchexp" "$vendorlibexp" "$archlibexp" "$privlibexp"; do
133# if [ -e "$lib/auto/$dir/.packlist" ]; then
134# cat "$lib/auto/$dir/.packlist"
135# fi
136# echo "x $lib $dir"
137# done
138# elif [ $type = m ]; then
139# :
140# else
141# echo "unknown type $type ($name)"
142# exit 1
143# fi
144# done
145 mkdir -p "$DIST"/pm
146
147 export OSDIST="$DIST"
148 [ "$OS" = windows ] && OSDIST=$(cygpath -w "$OSDIST")
149
150 $PERL -e '
151 use Config;
152 use File::Glob qw(:glob);
153 use File::Copy;
154 use File::Path;
155 use File::Basename;
156
157 my @path = do {
158 my %seen;
159 grep !$seen{$_}++, grep length, map $Config{$_}, qw(
160 sitearchexp
161 sitelib
162 vendorarchexp
163 vendorlibexp
164 archlibexp
165 privlibexp
166 )
167 };
168
169 while (<>) {
170 s/\015?\012$//;
171 next if /^(#|$)/;
172 s/\.dynob$/.'$SO'/;
173
174 my $found;
175 for my $lib (@path) {
176 chdir $lib || next;
177
178 my @glob = File::Glob::bsd_glob $_, 0; # explicit 0 needed
179
180 if (@glob) {
181 ++$found;
182
183 for (@glob) {
184 if (-d $_) {
185 system "rsync", "-aR", $_, "$ENV{DIST}/pm/.";
186 } else {
187 File::Path::mkpath "$ENV{OSDIST}/pm/" . dirname $_;
188 File::Copy::syscopy "$_", "$ENV{OSDIST}/pm/$_"
189 or die "$ENV{OSDIST}/pm/$_: $!";
190
191 if (s/\.pm$//) {
192 $auto = "auto/$_";
193
194 for my $glob ("*.'$SO'", "autosplit.ix", "*.al") {
195 for (bsd_glob "$auto/$glob", 0) {
196 File::Path::mkpath "$ENV{OSDIST}/pm/" . dirname $_;
197 File::Copy::syscopy "$_", "$ENV{OSDIST}/pm/$_";
198 }
199 }
200 }
201 }
202 }
203
204 last;
205 }
206 }
207
208 warn "$_: not found\n"
209 unless $found;
210 }
211 '
212) || exit
213 100
214############################################################################# 101#############################################################################
215 102
216if [ "$OS" = windows ]; then 103if [ "$OS" = windows ]; then
217 libdeps() { 104 libdeps() {
249} 136}
250 137
251( 138(
252 cd "$DIST" 139 cd "$DIST"
253 140
254 cp -p "$PERL" .
255
256 if [ "$OS" = windows ]; then 141 if [ "$OS" = windows ]; then
257 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 .
258 cp /root/src/CFPlus/util/splash.bmp . 143 cp /root/src/CFPlus/util/splash.bmp .
259 chmod -R u+rwX pm/auto 144 chmod -R u+rwX pm/auto
260 145
282 rm -f lib"$lib".$LIB0 167 rm -f lib"$lib".$LIB0
283 done 168 done
284 169
285 if [ "$OS" != windows ]; then 170 if [ "$OS" != windows ]; then
286 # patch braindamaged pango 171 # patch braindamaged pango
172
173 if [ "$OS" != darwin ]; then
287 set libpango-1.0.$LIB0 174 set libpango-1.0.$LIB0
288 perl -pe 's{/u(?=sr/lib(32)?/pango)}{/\x00}g; s{\Q'$PANGO'\E\x00}{y.t.u\x00}g' <"$1" >"$1~" && mv "$1~" "$1" 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
289 chmod 755 "$1" 180 chmod 755 "$1"
290 fi 181 fi
291 182
292 if [ "$OS" = darwin ]; then 183 if [ "$OS" = darwin ]; then
293 # "dll hell" is most severe on os x, because apple 184 # "dll hell" is most severe on os x, because apple
327 patchlibs "$lib" 218 patchlibs "$lib"
328 mv "$lib" "libdeliantra-$stem.dylib" 219 mv "$lib" "libdeliantra-$stem.dylib"
329 done 220 done
330 fi 221 fi
331 222
332 [ "$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
333 $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
334) 227)
335 228
336printf -- 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
337 236
338echo >"$DIST".genpack genpack deliantra_S-$OS-"$ARCHNAME" '"$EXE_VER"' '"$1"' $GENPACK_ENVVARS ./perl run
339
340exit
341
342
343tar cf deliantra-gnu-linux-$ARCHNAME.tar deliantra-gnu-linux-$ARCHNAME
344gzip -9vf deliantra-gnu-linux-$ARCHNAME.tar
345todata deliantra-gnu-linux-$ARCHNAME.tar.gz
346

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines