Mercurial > mxe-octave
annotate tools/make-shared-from-static @ 2858:7c6b29399d05
New script to make shared libraries from static libraries. This
script should only be used as a temporary solution for those packages
which do not have Makefiles that can be easily fixed to generate
shared libraries. It would be better to fix the build systems of
these libraries to correctly generate shared libraries using CMake or
autotools.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Thu, 15 Nov 2012 16:14:26 -0500 |
parents | |
children | 1c18d3bb1829 |
rev | line source |
---|---|
2858
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1 #!/usr/bin/env bash |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2 |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
3 set -e |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
4 |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
5 LD= |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
6 AR= |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
7 infile= |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
8 outfile= |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
9 LIBS= |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
10 |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
11 topdir=$(pwd) |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
12 tmpdir=$topdir/make-shared-from-static.$$ |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
13 |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
14 trap "cd $topdir; rm -rf $tmpdir" 1 2 15 |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
15 |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
16 for arg |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
17 do |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
18 case "$1" in |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
19 --ld) |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
20 shift |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
21 if [ $# -gt 0 ]; then |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
22 LD="$1" |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
23 shift |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
24 else |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
25 echo "make-shared-from-static: expecting argument for --ld option" 1>&2 |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
26 exit 1 |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
27 fi |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
28 ;; |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
29 --ar) |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
30 shift |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
31 if [ $# -gt 0 ]; then |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
32 AR="$1" |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
33 shift |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
34 else |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
35 echo "make-shared-from-static: expecting argument for --ar option" 1>&2 |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
36 exit 1 |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
37 fi |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
38 ;; |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
39 -l*) |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
40 LIBS="$LIBS $1" |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
41 shift |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
42 ;; |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
43 *.a) |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
44 if [ -z "$infile" ]; then |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
45 case "$1" in |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
46 /*) |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
47 infile="$1" |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
48 ;; |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
49 *) |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
50 infile=$(pwd)/$1 |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
51 ;; |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
52 esac |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
53 outfile=$(echo $infile | sed 's/\.a$/.dll/') |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
54 shift |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
55 else |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
56 echo "make-shared-from-static: only one input file allowed" 1>&2 |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
57 exit 1 |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
58 fi |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
59 ;; |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
60 esac |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
61 done |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
62 |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
63 if [ -z "$outfile" ]; then |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
64 echo "make-shared-from-static: no output file specified" 1>&2 |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
65 exit 1 |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
66 fi |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
67 |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
68 mkdir $tmpdir |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
69 |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
70 ( |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
71 cd $tmpdir |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
72 |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
73 $AR x $infile |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
74 |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
75 $LD -shared -Wl,--export-all-symbols -Wl,--enable-auto-import -Wl,--enable-auto-image-base -Wl,--out-implib=$outfile.a -o $outfile *.o $LIBS |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
76 ) |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
77 |
7c6b29399d05
New script to make shared libraries from static libraries. This
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
78 rm -rvf $tmpdir |