1dnl #########################################################################
2dnl ### Init
3dnl #########################################################################
4
5dnl -------------------------------------------------------------------------
6dnl Name and version
7dnl
8AC_INIT([libzen], [0.4.39])
9
10dnl -------------------------------------------------------------------------
11dnl Test if we are at the good place
12dnl
13AC_CONFIG_SRCDIR([../../../Source/ZenLib/Ztring.cpp])
14
15dnl -------------------------------------------------------------------------
16dnl sets build, host, target variables and the same with _alias
17dnl
18AC_CANONICAL_BUILD
19AM_INIT_AUTOMAKE([foreign -Wall])
20
21dnl -------------------------------------------------------------------------
22dnl Autotools init
23dnl
24AC_PROG_CC
25AC_PROG_CXX
26AC_PROG_CPP
27AC_DISABLE_STATIC
28AC_LIBTOOL_WIN32_DLL
29AC_PROG_LIBTOOL
30AC_PROG_INSTALL
31
32dnl #########################################################################
33dnl ### Options
34dnl #########################################################################
35
36dnl -------------------------------------------------------------------------
37dnl Enable
38dnl
39AC_ARG_ENABLE([debug],            [AS_HELP_STRING([--enable-debug],             [Enable full debug])],                          , [enable_debug=no])
40AC_ARG_ENABLE([gprof],            [AS_HELP_STRING([--enable-gprof],             [Enable gprof log])],                           , [enable_gprof=no])
41AC_ARG_ENABLE([universal_binary], [AS_HELP_STRING([--enable-universal_binary],  [Create Mac PPC/i386 Universal binary])],       , [enable_universal_binary=no])
42AC_ARG_ENABLE([arch-ppc],         [AS_HELP_STRING(([--enable-arch-ppc],         [Create Mac PPC architecture]))],               , [enable_arch_ppc=no])
43AC_ARG_ENABLE([arch-ppc64],       [AS_HELP_STRING(([--enable-arch-ppc64],       [Create Mac PPC64 architecture]))],             , [enable_arch_ppc64=no])
44AC_ARG_ENABLE([arch-i386],        [AS_HELP_STRING(([--enable-arch-i386],        [Create Mac/iPhone i386 architecture]))],       , [enable_arch_i386=no])
45AC_ARG_ENABLE([arch-x86_64],      [AS_HELP_STRING(([--enable-arch-x86_64],      [Create Mac/iPhone x86_64 architecture]))],     , [enable_arch_x86_64=no])
46AC_ARG_ENABLE([arch-armv7],       [AS_HELP_STRING(([--enable-arch-armv7],       [Create iPhone ARMv7 architecture]))],          , [enable_arch_armv7=no])
47AC_ARG_ENABLE([arch-armv7s],      [AS_HELP_STRING(([--enable-arch-armv7s],      [Create iPhone ARMv7s architecture]))],         , [enable_arch_armv7s=no])
48AC_ARG_ENABLE([arch-arm64],       [AS_HELP_STRING(([--enable-arch-arm64],       [Create Mac/iPhone ARM64 architecture]))],      , [enable_arch_arm64=no])
49AC_ARG_ENABLE([unicode],          [AS_HELP_STRING(([--disable-unicode],         [Disable unicode]))],                           , [enable_unicode=yes])
50AC_ARG_ENABLE([wstring_missing],  [AS_HELP_STRING(([--enable-wstring_missing],  [Disable wstring support (old compilers)]))],   , [enable_wstring_missing=no])
51AC_ARG_ENABLE([stream_missing],   [AS_HELP_STRING(([--enable-stream_missing],   [Disable stream support (old compilers)]))],    , [enable_stream_missing=no])
52AC_ARG_ENABLE([large_files],      [AS_HELP_STRING(([--disable-large_files],     [Disable large files support]))],               , [enable_large_files=yes])
53dnl AC_ARG_ENABLE([threads],          [AS_HELP_STRING(([--disable-threads],         [Disable threads support]))],                   , [enable_threads=yes])
54
55
56dnl -------------------------------------------------------------------------
57dnl With
58dnl
59AC_ARG_WITH([macosx-sdk],           [AS_HELP_STRING(([--with-macosx-sdk],           [Force the Mac SDK]))],                         , [with_macosx_sdk=no])
60AC_ARG_WITH([macosx-version-min],   [AS_HELP_STRING(([--with-macosx-version-min],   [Force the Mac Version]))],                     , [with_macosx_version_min=no])
61AC_ARG_WITH([iphoneos-sdk],         [AS_HELP_STRING(([--with-iphoneos-sdk],         [Force the iPhone SDK]))],                      , [with_iphoneos_sdk=no])
62AC_ARG_WITH([iphoneos-version-min], [AS_HELP_STRING(([--with-iphoneos-version-min], [Force the iPhone Version]))],                  , [with_iphoneos_version_min=no])
63
64dnl #########################################################################
65dnl ### Compiler specific
66dnl #########################################################################
67
68dnl -------------------------------------------------------------------------
69case "${build}" in
70  powerpc-montavista* )
71    CFLAGS="$CFLAGS -D__MONTAVISTA__"
72    CXXFLAGS="$CXXFLAGS -D__MONTAVISTA__"
73  ;;
74esac
75
76dnl -------------------------------------------------------------------------
77dnl Mac/iPhone Architecture and SDK
78dnl
79if test "$enable_universal_binary" = "yes"; then
80	enable_arch_ppc=yes
81	enable_arch_i386=yes
82fi
83if test "$enable_arch_ppc" = "yes"; then
84	CXXFLAGS="$CXXFLAGS -arch ppc"
85	CFLAGS="$CFLAGS -arch ppc"
86	LDFLAGS="$LDFLAGS -arch ppc"
87fi
88if test "$enable_arch_ppc64" = "yes"; then
89	CXXFLAGS="$CXXFLAGS -arch ppc64"
90	CFLAGS="$CFLAGS -arch ppc64"
91	LDFLAGS="$LDFLAGS -arch ppc64"
92fi
93if test "$enable_arch_i386" = "yes"; then
94	CXXFLAGS="$CXXFLAGS -arch i386"
95	CFLAGS="$CFLAGS -arch i386"
96	LDFLAGS="$LDFLAGS -arch i386"
97fi
98if test "$enable_arch_x86_64" = "yes"; then
99	CXXFLAGS="$CXXFLAGS -arch x86_64"
100	CFLAGS="$CFLAGS -arch x86_64"
101	LDFLAGS="$LDFLAGS -arch x86_64"
102fi
103if test "$enable_arch_armv7" = "yes"; then
104	CXXFLAGS="$CXXFLAGS -arch armv7"
105	CFLAGS="$CFLAGS -arch armv7"
106	LDFLAGS="$LDFLAGS -arch armv7"
107fi
108if test "$enable_arch_armv7s" = "yes"; then
109	CXXFLAGS="$CXXFLAGS -arch armv7s"
110	CFLAGS="$CFLAGS -arch armv7s"
111	LDFLAGS="$LDFLAGS -arch armv7s"
112fi
113if test "$enable_arch_arm64" = "yes"; then
114	CXXFLAGS="$CXXFLAGS -arch arm64"
115	CFLAGS="$CFLAGS -arch arm64"
116	LDFLAGS="$LDFLAGS -arch arm64"
117fi
118if test "x$with_macosx_sdk" != xno ; then
119	CXXFLAGS="-isysroot $with_macosx_sdk $CXXFLAGS"
120	CFLAGS="-isysroot $with_macosx_sdk $CFLAGS"
121	LDFLAGS="-isysroot $with_macosx_sdk $LDFLAGS"
122fi
123if test "x$with_macosx_version_min" != xno ; then
124	CXXFLAGS="-mmacosx-version-min=$with_macosx_version_min $CXXFLAGS"
125	CFLAGS="-mmacosx-version-min=$with_macosx_version_min $CFLAGS"
126	LDFLAGS="-mmacosx-version-min=$with_macosx_version_min $LDFLAGS"
127fi
128if test "x$with_iphoneos_sdk" != xno ; then
129	CXXFLAGS="-isysroot $with_iphoneos_sdk $CXXFLAGS"
130	CFLAGS="-isysroot $with_iphoneos_sdk $CFLAGS"
131	LDFLAGS="-isysroot $with_iphoneos_sdk $LDFLAGS"
132fi
133if test "x$with_iphoneos_version_min" != xno ; then
134	CXXFLAGS="-miphoneos-version-min=$with_iphoneos_version_min $CXXFLAGS"
135	CFLAGS="-miphoneos-version-min=$with_iphoneos_version_min $CFLAGS"
136	LDFLAGS="-miphoneos-version-min=$with_iphoneos_version_min $LDFLAGS"
137fi
138
139dnl #########################################################################
140dnl ### ZenLib flags
141dnl #########################################################################
142
143dnl -------------------------------------------------------------------------
144dnl Common
145dnl
146if test "$enable_shared" = "yes"; then
147    ZenLib_LIBS="-L$(pwd)/.libs -lzen -lpthread $ZenLib_LIBS"
148fi
149if test "$enable_static" = "yes"; then
150    ZenLib_LIBS_Static="$(pwd)/.libs/libzen.a -lpthread $ZenLib_LIBS_Static"
151fi
152
153dnl #########################################################################
154dnl ### C/C++ compiler options used to compile
155dnl #########################################################################
156
157dnl -------------------------------------------------------------------------
158dnl wstring
159dnl
160if test "$enable_wstring_missing" = "yes"; then
161	CXXFLAGS="$CXXFLAGS -DWSTRING_MISSING"
162	ZenLib_CXXFLAGS="$ZenLib_CXXFLAGS -DWSTRING_MISSING"
163	ZenLib_wstring_missing="yes"
164	enable_unicode="no"
165else
166	ZenLib_wstring_missing="no"
167fi
168
169dnl -------------------------------------------------------------------------
170dnl Unicode
171dnl
172if test "$enable_unicode" = "yes"; then
173	CXXFLAGS="$CXXFLAGS -DUNICODE"
174	ZenLib_CXXFLAGS="$ZenLib_CXXFLAGS -DUNICODE"
175	ZenLib_Unicode="yes"
176else
177	ZenLib_Unicode="no"
178fi
179
180dnl -------------------------------------------------------------------------
181dnl Large files
182dnl
183if test "$enable_large_files" = "yes"; then
184	CXXFLAGS="$CXXFLAGS -D_LARGE_FILES -D_FILE_OFFSET_BITS=64"
185	ZenLib_LargeFiles="yes"
186else
187	ZenLib_LargeFiles="no"
188fi
189
190dnl -------------------------------------------------------------------------
191dnl Threads
192dnl
193
194dnl -------------------------------------------------------------------------
195dnl Check if size_t is long
196dnl
197AC_LANG([C++])
198AC_COMPILE_IFELSE([AC_LANG_SOURCE([
199	#include <cstdlib>
200	void foo(signed int) {}
201	void foo(unsigned int) {}
202	int main () {foo(size_t(0)); return 0;}])], [size_t_is_long="no"], [size_t_is_long="yes"])
203
204if test "$size_t_is_long" = "yes"; then
205	CXXFLAGS="$CXXFLAGS -DSIZE_T_IS_LONG"
206	ZenLib_CXXFLAGS="$ZenLib_CXXFLAGS -DSIZE_T_IS_LONG"
207fi
208
209dnl -------------------------------------------------------------------------
210dnl Check if stream is available
211dnl
212AC_LANG([C++])
213if test "$enable_unicode" = "yes"; then
214    AC_COMPILE_IFELSE([AC_LANG_SOURCE([
215        #include <sstream>
216        int main () {std::wstringstream message; message<<1.0; return 0;}])], , [enable_stream_missing="yes"])
217else
218    AC_COMPILE_IFELSE([AC_LANG_SOURCE([
219        #include <sstream>
220        int main () {std::stringstream message; message<<1.0; return 0;}])], , [enable_stream_missing="yes"])
221fi
222
223if test "$enable_stream_missing" = "yes"; then
224	CXXFLAGS="$CXXFLAGS -DSTREAM_MISSING"
225fi
226
227dnl -------------------------------------------------------------------------
228dnl GNU compiler
229dnl
230if test "$GXX" = yes ; then
231    case "${build}" in
232      *mingw* | *cygwin* ) ;;
233      *)
234        CFLAGS="$CFLAGS -fPIC"
235        CXXFLAGS="$CXXFLAGS -fPIC"
236        LDFLAGS="$LDFLAGS -fPIC"
237      ;;
238    esac
239	if test "$enable_debug" = "yes"; then
240		CFLAGS="$CFLAGS -O0 -g -Wall -Wundef"
241		CXXFLAGS="$CXXFLAGS -O0 -g -Wall -W -Wundef -Wcast-qual -Wno-ctor-dtor-privacy"
242	else
243		CFLAGS="$CFLAGS -O2"
244		CXXFLAGS="$CXXFLAGS -O2"
245	fi
246	if test "$enable_gprof" = "yes"; then
247		CFLAGS="$CFLAGS -pg -g"
248		CXXFLAGS="$CXXFLAGS -pg -g"
249	fi
250fi
251
252dnl -------------------------------------------------------------------------
253dnl External libs
254dnl
255LDFLAGS="$LDFLAGS -lpthread"
256
257dnl -------------------------------------------------------------------------
258dnl Check if thread safe variants of time functions are available
259dnl
260AC_CHECK_FUNCS(gmtime_r localtime_r)
261
262dnl #########################################################################
263dnl ### Output
264dnl #########################################################################
265
266AC_SUBST(ZenLib_CXXFLAGS)
267AC_SUBST(ZenLib_LIBS)
268AC_SUBST(ZenLib_LIBS_Static)
269AC_SUBST(ZenLib_Unicode)
270AC_SUBST(ZenLib_wstring_missing)
271AC_SUBST(ZenLib_LargeFiles)
272AC_CONFIG_FILES(libzen-config, [chmod u+x libzen-config])
273AC_CONFIG_FILES(libzen.pc)
274
275AC_OUTPUT(Makefile)
276
277dnl #########################################################################
278dnl ### Report how we have been configured
279dnl #########################################################################
280
281echo ""
282echo "Configured ZenLib for '$build'"
283echo ""
284echo "  Unicode?                                                $enable_unicode"
285echo "  Large files support?                                    $enable_large_files"
286echo "  wstring missing support?                                $enable_wstring_missing"
287echo "  stream missing support?                                 $enable_stream_missing"
288echo ""
289echo "  Create static lib?                                      $enable_static"
290echo "  Create shared lib?                                      $enable_shared"
291echo ""
292echo "  CXXFLAGS: $CXXFLAGS"
293echo "  LIBS: $LIBS"
294