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.12 by root, Thu Jan 26 20:11:14 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=."
11 15
12umask 022 16umask 022
13 17
14if [ "$(uname -s)" = CYGWIN_NT-5.0 ]; then 18if [ "$(uname -s)" = CYGWIN_NT-5.0 ]; then
15 . ~/.setenv 19 . ~/.setenv
16 20
17 OS=windows 21 OS=windows
18 URLADER=.exe 22 URLADER=windows-x86
19 unset PANGO 23 unset PANGO
20 PERL=/c/perl/bin/perl 24 PERL=/c/perl/bin/perl
21 MAKE=nmake 25 MAKE=nmake
22 SYSLIB=/c/gtk/bin 26 SYSLIB=/c/gtk/bin
23 LIBEXT=dll 27 LIBEXT=dll
33 /c/gtk/bin/pango-querymodules # empty output usually 37 /c/gtk/bin/pango-querymodules # empty output usually
34 } 38 }
35 39
36elif [ "$(uname -s)" = Darwin ]; then 40elif [ "$(uname -s)" = Darwin ]; then
37 OS=darwin 41 OS=darwin
38 URLADER=-osx105 42 URLADER=darwin-x86
39 PANGO=1.6.0 43 PANGO=1.6.0
40 PERL=/opt/local/bin/perl 44 PERL=/opt/local/bin/perl
45 GENPACK_ENVVARS="DYLD_LIBRARY_PATH=."
41 46
42 SYSLIB=/opt/local/lib 47 SYSLIB=/opt/local/lib
43 LIB0=dylib 48 LIB0=dylib
44 SO=bundle 49 SO=bundle
45 STRIP="strip -x" 50 STRIP="strip -x"
46elif [ $(arch) = i686 ]; then 51elif [ $(arch) = i686 ]; then
47 OS=linux 52 OS=linux
48 URLADER=-x86 53 URLADER=linux-x86
49 PANGO=1.5.0 54 PANGO=1.5.0
50 PERL=/usr/bin/perl 55 PERL=/usr/bin/perl
51else 56else
52 OS=linux 57 OS=linux
53 URLADER=-amd64 58 URLADER=linux-amd64
54 PANGO=1.5.0 59 PANGO=1.5.0
55 PERL=/usr/bin/perl 60 PERL=/usr/bin/perl
56 ARCHNAME=amd64 61 ARCHNAME=amd64
57fi 62fi
58 63
59export DIST="$(pwd)/dist/$OS-$ARCHNAME" 64export DIST="$(pwd)/dist/$OS-$ARCHNAME"
60 65
61rm -rf "$DIST" 66eval $($PERL -V:sitebinexp:)
62mkdir -p "$DIST"
63 67
64#PERL=/opt/perl 68"$sitebinexp"/perl-libextractor --exedir . --dlldir . --bindir pm/bin --libdir pm \
65#PANGO=1.6.0 69 --perl --core-support --script deliantra \
66 70 --runtime-only --strip \
67export EV_EVENTFD=0 71 --copy "$DIST"
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 72
91cat <<EOF >"$DIST"/pango.rc 73cat <<EOF >"$DIST"/pango.rc
92[Pango] 74[Pango]
93ModuleFiles = pango.modules 75ModuleFiles = pango.modules
94EOF 76EOF
97 exec 5>"$DIST"/pango.modules 79 exec 5>"$DIST"/pango.modules
98 pango-querymodules | grep ^/ | while read lib rest; do 80 pango-querymodules | grep ^/ | while read lib rest; do
99 base=$(basename "$lib") 81 base=$(basename "$lib")
100 [ "$base" = pango-basic-x.$LIBEXT ] && continue 82 [ "$base" = pango-basic-x.$LIBEXT ] && continue
101 cp -p "$lib" "$DIST"/. 83 cp -p "$lib" "$DIST"/.
102 echo "$base $rest" >&5 84 echo "./$base $rest" >&5 # using ./ seems to help pango not to rummage around in /usr/lib etc.
103 done 85 done
104) 86)
105 87
106############################################################################# 88#############################################################################
107 89
110eval $($PERL -V:sitebinexp -V:sitearchexp -V:sitelib -V:vendorarchexp -V:vendorlibexp -V:archlibexp -V:privlibexp) 92eval $($PERL -V:sitebinexp -V:sitearchexp -V:sitelib -V:vendorarchexp -V:vendorlibexp -V:archlibexp -V:privlibexp)
111 93
112mkdir -p "$DIST"/pm/bin 94mkdir -p "$DIST"/pm/bin
113cp "$sitebinexp"/deliantra "$DIST"/pm/bin/ 95cp "$sitebinexp"/deliantra "$DIST"/pm/bin/
114cp -p util/run "$DIST" 96cp -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 97
205############################################################################# 98#############################################################################
206 99
207if [ "$OS" = windows ]; then 100if [ "$OS" = windows ]; then
208 libdeps() { 101 libdeps() {
240} 133}
241 134
242( 135(
243 cd "$DIST" 136 cd "$DIST"
244 137
245 cp -p "$PERL" .
246
247 if [ "$OS" = windows ]; then 138 if [ "$OS" = windows ]; then
248 cp -p $SYSLIB/libvorbisfile-3.dll $SYSLIB/mikmod.dll $SYSLIB/libpng12-0.dll . 139 cp -p $SYSLIB/libvorbisfile-3.dll $SYSLIB/mikmod.dll $SYSLIB/libpng12-0.dll .
249 cp /root/src/CFPlus/util/splash.bmp . 140 cp /root/src/CFPlus/util/splash.bmp .
250 chmod -R u+rwX pm/auto 141 chmod -R u+rwX pm/auto
251 142
252 # convert perl to a non-console-app 143 # convert perl to a non-console-app
253 $PERL -MWin32::Exe -e '$e = new Win32::Exe"perl.exe"; $e->set_subsystem_windows; $e->write' 144 $PERL -MWin32::Exe -e '$e = new Win32::Exe"perl.exe"; $e->set_subsystem_windows; $e->write'
254 145
255 else 146 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 147 for lib in mikmod vorbisfile; do
261 cp -p $SYSLIB/lib$lib.$LIB0 . 148 cp -p $SYSLIB/lib$lib.$LIB0 .
262 chmod 755 lib$lib.$LIB0 149 chmod 755 lib$lib.$LIB0
263 done 150 done
264 fi 151 fi
272 for lib in \ 159 for lib in \
273 dl c m rt pthread nsl crypt \ 160 dl c m rt pthread nsl crypt \
274 X11 Xext Xau Xdmcp ICE SM Xrandr Xrender Xxf86vm drm GL \ 161 X11 Xext Xau Xdmcp ICE SM Xrandr Xrender Xxf86vm drm GL \
275 z 162 z
276 do 163 do
277 rm -f lib"$lib".$SO0 164 rm -f lib"$lib".$LIB0
278 done 165 done
166
167 if [ "$OS" != windows ]; then
168 # patch braindamaged pango
169
170 if [ "$OS" != darwin ]; then
171 set libpango-1.0.$LIB0
172 perl -pe 's{/u(?=sr/lib(32)?/pango)}{.\x00}g;' <"$1" >"$1~" && mv "$1~" "$1"
173 else
174 set lib*pango-1.0.0.dylib
175 perl -pe 's{/o(?=pt/local/.../pango)}{.\x00}g;' <"$1" >"$1~" && mv "$1~" "$1"
176 fi
177 chmod 755 "$1"
178 fi
279 179
280 if [ "$OS" = darwin ]; then 180 if [ "$OS" = darwin ]; then
281 # "dll hell" is most severe on os x, because apple 181 # "dll hell" is most severe on os x, because apple
282 # does not generally give a shit for backwards compatibility, 182 # does not generally give a shit for backwards compatibility,
283 # alwayss ships outdated libraries and often provides libraries 183 # alwayss ships outdated libraries and often provides libraries
315 patchlibs "$lib" 215 patchlibs "$lib"
316 mv "$lib" "libdeliantra-$stem.dylib" 216 mv "$lib" "libdeliantra-$stem.dylib"
317 done 217 done
318 fi 218 fi
319 219
320 [ "$OS" = linux ] && chrpath -d perl # debian perls have an rpath. really. 220 [ "$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 221 $STRIP $(find . -name "*.$SO" -o -name "*.$LIBEXT" -o -name "*.$LIB0") perl
222
223 : >timidity.cfg
322) 224)
323 225
324printf -- urlader$URLADER >"$DIST".urlader 226cat >"$DIST".vars <<EOF
227G_URLADER="$URLADER"
228G_OS="$OS"
229G_ARCHNAME="$ARCHNAME"
230G_ENVVARS="$GENPACK_ENVVARS"
231G_COMMAND="./perl run"
232EOF
325 233
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