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.4 by root, Fri Dec 30 06:52:07 2011 UTC vs.
Revision 1.13 by root, Fri Jan 27 01:43:03 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
17 17
18if [ "$(uname -s)" = CYGWIN_NT-5.0 ]; then 18if [ "$(uname -s)" = CYGWIN_NT-5.0 ]; then
19 . ~/.setenv 19 . ~/.setenv
20 20
21 OS=windows 21 OS=windows
22 URLADER=.exe 22 URLADER=windows-x86
23 unset PANGO 23 unset PANGO
24 PERL=/c/perl/bin/perl 24 PERL=/c/perl/bin/perl
25 MAKE=nmake 25 MAKE=nmake
26 SYSLIB=/c/gtk/bin 26 SYSLIB=/c/gtk/bin
27 LIBEXT=dll 27 LIBEXT=dll
37 /c/gtk/bin/pango-querymodules # empty output usually 37 /c/gtk/bin/pango-querymodules # empty output usually
38 } 38 }
39 39
40elif [ "$(uname -s)" = Darwin ]; then 40elif [ "$(uname -s)" = Darwin ]; then
41 OS=darwin 41 OS=darwin
42 URLADER=-osx105 42 URLADER=darwin-x86
43 PANGO=1.6.0 43 PANGO=1.6.0
44 PERL=/opt/local/bin/perl 44 PERL=/opt/local/bin/perl
45 GENPACK_ENVVARS="DYLD_LIBRARY_PATH=." 45 GENPACK_ENVVARS="DYLD_LIBRARY_PATH=."
46 46
47 SYSLIB=/opt/local/lib 47 SYSLIB=/opt/local/lib
48 LIB0=dylib 48 LIB0=dylib
49 SO=bundle 49 SO=bundle
50 STRIP="strip -x" 50 STRIP="strip -x"
51elif [ $(arch) = i686 ]; then 51elif [ $(arch) = i686 ]; then
52 OS=linux 52 OS=linux
53 URLADER=-x86 53 URLADER=linux-x86
54 PANGO=1.5.0 54 PANGO=1.5.0
55 PERL=/usr/bin/perl 55 PERL=/usr/bin/perl
56else 56else
57 OS=linux 57 OS=linux
58 URLADER=-amd64 58 URLADER=linux-amd64
59 PANGO=1.5.0 59 PANGO=1.5.0
60 PERL=/usr/bin/perl 60 PERL=/usr/bin/perl
61 ARCHNAME=amd64 61 ARCHNAME=amd64
62fi 62fi
63 63
64export DIST="$(pwd)/dist/$OS-$ARCHNAME" 64DISTf="dist/$OS-$ARCHNAME"
65export DIST="$(pwd)/$DISTf"
65 66
66rm -rf "$DIST" 67eval $("$PERL" -V:sitebinexp:)
67mkdir -p "$DIST"
68 68
69#PERL=/opt/perl 69"$PERL" "$sitebinexp"/perl-libextractor --exedir . --dlldir . --bindir pm/bin --libdir pm \
70#PANGO=1.6.0 70 --perl --core-support --script deliantra \
71 71 --runtime-only --strip \
72export EV_EVENTFD=0 72 --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
82 cvs update -AdP
83 $PERL Makefile.PL </dev/null >/dev/null
84 $MAKE clean >/dev/null
85 $PERL Makefile.PL </dev/null >/dev/null
86 if ! $MAKE install >log 2>&1; then
87 cat log
88 exit
89 fi
90 rm -f log
91 $MAKE clean >/dev/null
92 ) || exit
93 done
94fi
95 73
96cat <<EOF >"$DIST"/pango.rc 74cat <<EOF >"$DIST"/pango.rc
97[Pango] 75[Pango]
98ModuleFiles = pango.modules 76ModuleFiles = pango.modules
99EOF 77EOF
102 exec 5>"$DIST"/pango.modules 80 exec 5>"$DIST"/pango.modules
103 pango-querymodules | grep ^/ | while read lib rest; do 81 pango-querymodules | grep ^/ | while read lib rest; do
104 base=$(basename "$lib") 82 base=$(basename "$lib")
105 [ "$base" = pango-basic-x.$LIBEXT ] && continue 83 [ "$base" = pango-basic-x.$LIBEXT ] && continue
106 cp -p "$lib" "$DIST"/. 84 cp -p "$lib" "$DIST"/.
107 echo "$base $rest" >&5 85 echo "./$base $rest" >&5 # using ./ seems to help pango not to rummage around in /usr/lib etc.
108 done 86 done
109) 87)
110 88
111############################################################################# 89#############################################################################
112 90
115eval $($PERL -V:sitebinexp -V:sitearchexp -V:sitelib -V:vendorarchexp -V:vendorlibexp -V:archlibexp -V:privlibexp) 93eval $($PERL -V:sitebinexp -V:sitearchexp -V:sitelib -V:vendorarchexp -V:vendorlibexp -V:archlibexp -V:privlibexp)
116 94
117mkdir -p "$DIST"/pm/bin 95mkdir -p "$DIST"/pm/bin
118cp "$sitebinexp"/deliantra "$DIST"/pm/bin/ 96cp "$sitebinexp"/deliantra "$DIST"/pm/bin/
119cp -p util/run "$DIST" 97cp -p util/run "$DIST"
120
121(
122 exec <util/modules.dep
123
124# while read type name; do
125# if [ "$type" = d ]; then
126# # not implemented
127# dir=$(echo "$name" | sed -e s%::%/%g)
128# for lib in "$sitearchexp" "$sitelib" "$vendorarchexp" "$vendorlibexp" "$archlibexp" "$privlibexp"; do
129# if [ -e "$lib/auto/$dir/.packlist" ]; then
130# cat "$lib/auto/$dir/.packlist"
131# fi
132# echo "x $lib $dir"
133# done
134# elif [ $type = m ]; then
135# :
136# else
137# echo "unknown type $type ($name)"
138# exit 1
139# fi
140# done
141 mkdir -p "$DIST"/pm
142
143 export OSDIST="$DIST"
144 [ "$OS" = windows ] && OSDIST=$(cygpath -w "$OSDIST")
145
146 $PERL -e '
147 use Config;
148 use File::Glob qw(:glob);
149 use File::Copy;
150 use File::Path;
151 use File::Basename;
152
153 my @path = do {
154 my %seen;
155 grep !$seen{$_}++, grep length, map $Config{$_}, qw(
156 sitearchexp
157 sitelib
158 vendorarchexp
159 vendorlibexp
160 archlibexp
161 privlibexp
162 )
163 };
164
165 while (<>) {
166 s/\015?\012$//;
167 next if /^(#|$)/;
168 s/\.dynob$/.'$SO'/;
169
170 my $found;
171 for my $lib (@path) {
172 chdir $lib || next;
173
174 my @glob = File::Glob::bsd_glob $_, 0; # explicit 0 needed
175
176 if (@glob) {
177 ++$found;
178
179 for (@glob) {
180 if (-d $_) {
181 system "rsync", "-aR", $_, "$ENV{DIST}/pm/.";
182 } else {
183 File::Path::mkpath "$ENV{OSDIST}/pm/" . dirname $_;
184 File::Copy::syscopy "$_", "$ENV{OSDIST}/pm/$_"
185 or die "$ENV{OSDIST}/pm/$_: $!";
186
187 if (s/\.pm$//) {
188 $auto = "auto/$_";
189
190 for my $glob ("*.'$SO'", "autosplit.ix", "*.al") {
191 for (bsd_glob "$auto/$glob", 0) {
192 File::Path::mkpath "$ENV{OSDIST}/pm/" . dirname $_;
193 File::Copy::syscopy "$_", "$ENV{OSDIST}/pm/$_";
194 }
195 }
196 }
197 }
198 }
199
200 last;
201 }
202 }
203
204 warn "$_: not found\n"
205 unless $found;
206 }
207 '
208) || exit
209 98
210############################################################################# 99#############################################################################
211 100
212if [ "$OS" = windows ]; then 101if [ "$OS" = windows ]; then
213 libdeps() { 102 libdeps() {
245} 134}
246 135
247( 136(
248 cd "$DIST" 137 cd "$DIST"
249 138
250 cp -p "$PERL" .
251
252 if [ "$OS" = windows ]; then 139 if [ "$OS" = windows ]; then
253 cp -p $SYSLIB/libvorbisfile-3.dll $SYSLIB/mikmod.dll $SYSLIB/libpng12-0.dll . 140 cp -p $SYSLIB/libvorbisfile-3.dll $SYSLIB/mikmod.dll $SYSLIB/libpng12-0.dll .
254 cp /root/src/CFPlus/util/splash.bmp . 141 cp /root/src/CFPlus/util/splash.bmp .
255 chmod -R u+rwX pm/auto 142 chmod -R u+rwX pm/auto
256 143
257 # convert perl to a non-console-app 144 # convert perl to a non-console-app
258 $PERL -MWin32::Exe -e '$e = new Win32::Exe"perl.exe"; $e->set_subsystem_windows; $e->write' 145 $PERL -MWin32::Exe -e '$e = new Win32::Exe"perl.exe"; $e->set_subsystem_windows; $e->write'
259 146
260 else 147 else
261 # patch braindamaged pango
262 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
263 chmod 755 libpango-1.0.$LIB0
264
265 for lib in mikmod vorbisfile; do 148 for lib in mikmod vorbisfile; do
266 cp -p $SYSLIB/lib$lib.$LIB0 . 149 cp -p $SYSLIB/lib$lib.$LIB0 .
267 chmod 755 lib$lib.$LIB0 150 chmod 755 lib$lib.$LIB0
268 done 151 done
269 fi 152 fi
277 for lib in \ 160 for lib in \
278 dl c m rt pthread nsl crypt \ 161 dl c m rt pthread nsl crypt \
279 X11 Xext Xau Xdmcp ICE SM Xrandr Xrender Xxf86vm drm GL \ 162 X11 Xext Xau Xdmcp ICE SM Xrandr Xrender Xxf86vm drm GL \
280 z 163 z
281 do 164 do
282 rm -f lib"$lib".$SO0 165 rm -f lib"$lib".$LIB0
283 done 166 done
167
168 if [ "$OS" != windows ]; then
169 # patch braindamaged pango
170
171 if [ "$OS" != darwin ]; then
172 set libpango-1.0.$LIB0
173 perl -pe 's{/u(?=sr/lib(32)?/pango)}{.\x00}g;' <"$1" >"$1~" && mv "$1~" "$1"
174 else
175 set lib*pango-1.0.0.dylib
176 perl -pe 's{/o(?=pt/local/.../pango)}{.\x00}g;' <"$1" >"$1~" && mv "$1~" "$1"
177 fi
178 chmod 755 "$1"
179 fi
284 180
285 if [ "$OS" = darwin ]; then 181 if [ "$OS" = darwin ]; then
286 # "dll hell" is most severe on os x, because apple 182 # "dll hell" is most severe on os x, because apple
287 # does not generally give a shit for backwards compatibility, 183 # does not generally give a shit for backwards compatibility,
288 # alwayss ships outdated libraries and often provides libraries 184 # alwayss ships outdated libraries and often provides libraries
320 patchlibs "$lib" 216 patchlibs "$lib"
321 mv "$lib" "libdeliantra-$stem.dylib" 217 mv "$lib" "libdeliantra-$stem.dylib"
322 done 218 done
323 fi 219 fi
324 220
325 [ "$OS" = linux ] && chrpath -d perl # debian perls have an rpath. really. 221 [ "$OS" = linux ] && chrpath -d perl $(find pm -name "*.so") # debian perls have an rpath, many modules too
326 $STRIP $(find . -name "*.$SO" -o -name "*.$LIBEXT" -o -name "*.$LIB0") perl 222 $STRIP $(find . -name "*.$SO" -o -name "*.$LIBEXT" -o -name "*.$LIB0") perl
223
224 : >timidity.cfg
327) 225)
328 226
329printf -- urlader$URLADER >"$DIST".urlader 227cat >"$DIST".vars <<EOF
228G_URLADER="$URLADER"
229G_OS="$OS"
230G_ARCHNAME="$ARCHNAME"
231G_ENVVARS="$GENPACK_ENVVARS"
232G_COMMAND="./perl run"
233EOF
330 234
331echo >"$DIST".genpack genpack deliantra_S-$OS-"$ARCHNAME" '"$EXE_VER"' '"$1"' $GENPACK_ENVVARS ./perl run
332
333exit
334
335
336tar cf deliantra-gnu-linux-$ARCHNAME.tar deliantra-gnu-linux-$ARCHNAME
337gzip -9vf deliantra-gnu-linux-$ARCHNAME.tar
338todata deliantra-gnu-linux-$ARCHNAME.tar.gz
339

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines