Mercurial > pub > dyncall > dyncall
annotate configure @ 53:e2519fb5f88d
configure fixes for iOS 9
author | Daniel Adler <dadler@dyncall.org> |
---|---|
date | Wed, 23 Dec 2015 15:03:49 +0100 |
parents | c16bc7736bb4 |
children | 2cccd38e5e4d |
rev | line source |
---|---|
0 | 1 #!/bin/sh |
2 C=Makefile.config | |
3 | |
4 # get full path | |
5 case $0 in | |
6 /*) | |
7 FULL=$0 | |
8 ;; | |
9 *) | |
10 FULL=$PWD/$0 | |
11 ;; | |
12 esac | |
13 | |
14 printf "# auto-generated by $0\n" >$C | |
15 while [ $# -gt 0 ]; do | |
16 X=$1 | |
17 shift 1 | |
18 # Shell common: | |
19 case $X in | |
20 --help|-h|-?) | |
21 cat <<EOF | |
22 usage: $0 --<option>=<value> <var>=<value> .. | |
23 | |
24 --prefix=<dir> | |
25 --target=<platform> uname/special targets: MacOSX,iOS,iPhoneSimulator | |
30
c16bc7736bb4
- added configure (only sh-version) option to display list of settable targets
cslag
parents:
5
diff
changeset
|
26 use "?" to get a list of explicitly specifiable |
c16bc7736bb4
- added configure (only sh-version) option to display list of settable targets
cslag
parents:
5
diff
changeset
|
27 targets |
0 | 28 --sdk=<version> Mac OS X/iOS SDK version (e.g. '6.1' or '10.9.3') |
29 Tested iOS SDK versions: 4.3, 6.1, 8.1 | |
30 --sdkroot=<dir> | |
31 | |
32 Useful variables CC, CXX, CFLAGS, CXXFLAGS, etc.. | |
33 | |
34 EOF | |
35 exit 1 | |
36 ;; | |
37 # GNU Compatibility: | |
38 --prefix=*) | |
39 PREFIX=`printf -- "${X}" | cut -c 10-` | |
40 ;; | |
41 --target=*) | |
42 TARGET=`printf -- "${X}" | cut -c 10-` | |
43 ;; | |
44 --sdk=*) | |
45 SDK=`printf -- "${X}" | cut -c 7-` | |
46 ;; | |
47 --sdkroot=*) | |
48 SDKROOT=`printf -- "${X}" | cut -c 11-` | |
49 ;; | |
50 # Environment variables: | |
51 [A-Za-z_]*=*) | |
52 printf "${X}\n" >>$C | |
53 k=`printf "${X}" | cut -d = -f 1` | |
54 v=`printf "${X}" | cut -d = -f 2` | |
55 export $k="$v" | |
56 ;; | |
57 # Others fail: | |
58 *) | |
59 printf "error: invalid option ${X}\n" >&2 | |
60 exit 1 | |
61 ;; | |
62 esac | |
63 done | |
64 printf "PREFIX=${PREFIX:=/usr/local}\n" >>$C | |
65 case ${TARGET:=`uname`} in | |
66 Linux) | |
67 if [ -z "${CFLAGS}" ]; then | |
68 printf "CFLAGS=-fPIC\n" >>$C | |
69 fi | |
70 printf "LDLIBS=-lm -ldl\n" >>$C | |
71 ;; | |
72 OpenBSD) | |
73 printf "LDLIBS=-lm\n" >>$C | |
74 ;; | |
75 DragonFly|NetBSD) | |
76 if [ -z "${CFLAGS}" ]; then | |
77 printf "CFLAGS=-fPIC\n" >>$C | |
78 fi | |
79 printf "LDLIBS=-lm\n" >>$C | |
80 ;; | |
81 FreeBSD) | |
82 if [ -z "${CFLAGS}" ]; then | |
83 printf "CFLAGS=-fPIC\n" >>$C | |
84 fi | |
85 printf "LDLIBS=-lm\n" >>$C | |
86 printf "RM=rm -f\n" >>$C | |
87 ;; | |
88 MacOSX|Darwin) | |
89 # if Apple's libtool (not to be confused with GNU's) is available, which is according to libtool(1) "with -static [...] intended | |
90 # to replace ar(5) and ranlib", use it - if it is shadowed by some install of GNU's libtool assume that a foreign environment is | |
91 # intentionally used, and fall back to using 'ar rs' (the equivalent to 'libtool -static'), for compatibility: | |
92 if libtool -V >/dev/null 2>/dev/null; then # Apple's libtool has -V for version, which GNU does not. | |
93 printf "AR=libtool\n" >>$C | |
94 printf "ARFLAGS=-static -o\n" >>$C | |
95 else | |
96 printf "AR=ar\n" >>$C | |
97 printf "ARFLAGS=rs\n" >>$C # 's' is crucial for universal binary archives | |
98 fi | |
99 if [ `uname -n` = 'iPhone' ]; then # building on iPhone itself, uname yields Darwin (gcc setup for current/correct arch) | |
100 printf "CC=gcc\n" >>$C | |
101 elif [ -z ${SDK} ]; then | |
102 case `sw_vers -productVersion` in | |
103 10.4.*) | |
104 ARCHS="-arch ppc -arch i386 -arch x86_64" | |
105 ;; | |
5
52deacbdd2b1
- fix from MoarVM team and Tobi Leich for osx configure
cslag
parents:
0
diff
changeset
|
106 10.5.*) |
0 | 107 ARCHS="-arch i386 -arch x86_64 -arch ppc" |
108 ;; | |
109 10.6.*) | |
110 ARCHS="-arch i386 -arch x86_64" | |
111 ;; | |
112 10.10.*) | |
113 ARCHS="-arch x86_64 -arch i386" | |
114 ;; | |
115 10.[789].*) | |
116 ARCHS="-arch x86_64 -arch i386" | |
117 ;; | |
118 esac | |
119 printf "ASFLAGS=${ARCHS}\n" >>$C | |
120 printf "CFLAGS=${ARCHS}\n" >>$C | |
121 printf "CXXFLAGS=${ARCHS}\n" >>$C | |
122 else | |
123 if [ -z ${SDKROOT} ]; then | |
124 SDKROOT="`xcode-select -print-path`/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${SDK}.sdk" | |
125 fi | |
126 printf "CFLAGS=-isysroot ${SDKROOT}\n" >>$C | |
127 printf "CXXFLAGS=-isysroot ${SDKROOT}\n" >>$C | |
128 fi | |
129 ;; | |
130 iPhoneOS|iOS) | |
131 if [ -z ${SDKROOT} ]; then | |
132 SDKROOT="`xcode-select -print-path`/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDK}.sdk" | |
133 fi | |
134 if [ -z "${ARCHS}" ]; then | |
135 case "${SDK}" in | |
136 [45].*) | |
137 ARCHS="-arch armv6" | |
138 ;; | |
139 [67].*) | |
140 ARCHS="-arch armv7" | |
141 ;; | |
53 | 142 [89].*) |
0 | 143 ARCHS="-arch armv7 -arch arm64" |
144 ;; | |
145 esac | |
146 fi | |
147 printf "ARFLAGS=rs\n" >>$C # 's' is crucial for universal binary archives | |
148 printf "ASFLAGS=${ARCHS} -isysroot ${SDKROOT}\n" >>$C | |
149 printf "CFLAGS=${ARCHS} -isysroot ${SDKROOT}\n" >>$C | |
150 printf "CXXFLAGS=${ARCHS} -isysroot ${SDKROOT}\n" >>$C | |
151 printf "LDFLAGS=-Wl,-syslibroot ${SDKROOT}\n" >>$C | |
152 ;; | |
153 iPhoneSimulator) | |
154 if [ -z ${SDKROOT} ]; then | |
155 SDKROOT="`xcode-select -print-path`/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator${SDK}.sdk" | |
156 fi | |
157 ARCHS="-arch i386" | |
158 printf "ASFLAGS=${ARCHS} -isysroot ${SDKROOT}\n" >>$C | |
159 printf "CFLAGS=${ARCHS} -isysroot ${SDKROOT}\n" >>$C | |
160 printf "CXXFLAGS=${ARCHS} -isysroot ${SDKROOT}\n" >>$C | |
161 printf "LDFLAGS=-Wl,-syslibroot ${SDKROOT}\n" >>$C | |
162 ;; | |
163 SunOS) | |
164 # open distributions often don't come with default cc and CC, check for common alternatives. | |
165 printf "CC=` (which cc || which gcc || which clang ) | grep -v '^no '`\n" >>$C | |
166 printf "CXX=`(which CC || which g++ || which clang++) | grep -v '^no '`\n" >>$C # C++ compiler traditionally named CC | |
167 printf "CCC=${CXX}\n" >>$C # Sun make's rules use CCC for c++ compiler | |
168 printf "LDLIBS=-lm\n" >>$C | |
169 ;; | |
170 Minix) | |
171 printf "CC=gcc\n" >>$C | |
172 printf "CXX=g++\n">>$C | |
173 printf "AR=ar\n" >>$C | |
174 ;; | |
175 PSP) | |
176 SDKROOT="`psp-config --pspsdk-path`" | |
177 printf "CC=psp-gcc\n" >>$C | |
178 printf "CXX=psp-gcc\n">>$C # don't use psp-g++, buggy | |
179 printf "AR=psp-ar\n" >>$C | |
180 printf "CFLAGS=-I${SDKROOT}/include/\n" >>$C | |
181 printf "CXXFLAGS=-I${SDKROOT}/include/\n" >>$C | |
182 # Pulling in dyncall libs below is a hack, for some reason psp-ld is super-picky about order. | |
183 # Use your C lib of choice, from the PSPSDK, or... | |
184 #printf "LDLIBS=-L${SDKROOT}/lib/ -L`dirname ${FULL}`/dyncall -L`dirname ${FULL}`/dyncallback -ldyncall_s -ldyncallback_s -lm -lpspdebug -lpspdisplay -lpspge -lpspctrl -lpspsdk -lstdc++ -lpsplibc -lpspnet -lpspnet_inet -lpspnet_apctl -lpspnet_resolver -lpsputility -lpspuser \n" >>$C | |
185 # ... newlib. | |
186 printf "LDLIBS=-L${SDKROOT}/lib/ -L`dirname ${FULL}`/dyncall -L`dirname ${FULL}`/dyncallback -ldyncall_s -ldyncallback_s -lm -lpspdebug -lpspdisplay -lpspge -lpspctrl -lpspsdk -lstdc++ -lc -lpspnet -lpspnet_inet -lpspnet_apctl -lpspnet_resolver -lpsputility -lpspuser \n" >>$C | |
187 ;; | |
30
c16bc7736bb4
- added configure (only sh-version) option to display list of settable targets
cslag
parents:
5
diff
changeset
|
188 ?) |
c16bc7736bb4
- added configure (only sh-version) option to display list of settable targets
cslag
parents:
5
diff
changeset
|
189 cat $0 | awk '/^esac$/{b=0}/^ [A-Za-z0-9|]+\)/{if(b==1) print substr($1,1,length($1)-1)}BEGIN{b=0}/^case.*TARGET.*uname.*in$/{b=1}' | tr '|' '\n' |
c16bc7736bb4
- added configure (only sh-version) option to display list of settable targets
cslag
parents:
5
diff
changeset
|
190 exit 0 |
c16bc7736bb4
- added configure (only sh-version) option to display list of settable targets
cslag
parents:
5
diff
changeset
|
191 ;; |
0 | 192 esac |
193 | |
194 BLDTOP="$PWD" | |
195 SRCTOP=`dirname ${FULL}` | |
196 | |
197 FILES=`( cd $SRCTOP ; find . -name "Makefile.generic" )` | |
198 for FILE in $FILES ; do | |
199 SRCFILE="$SRCTOP/$FILE" | |
200 BLDFILE="$BLDTOP/$FILE" | |
201 SRCDIR=`dirname $SRCFILE` | |
202 BLDDIR=`dirname $BLDFILE` | |
203 mkdir -p "$BLDDIR" | |
204 cat <<EOF >$BLDDIR/Makefile | |
205 VPATH = $SRCDIR | |
206 include $BLDTOP/Makefile.config | |
207 include \${VPATH}/Makefile.generic | |
208 EOF | |
209 done |