1# This is free software, licensed under the GNU Public License V2.
2# See the file COPYING for details.
3
4dnl # ******************************
5dnl # Initialise
6dnl # ******************************
7
8AC_DEFUN([MAJOR], [0])
9AC_DEFUN([MINOR], [8])
10AC_DEFUN([MICRO], [8])
11AC_DEFUN([MY_VERSION], [MAJOR.MINOR.MICRO])
12AC_INIT([qof], [0.8.8], [http://lists.sourceforge.net/lists/listinfo/qof-devel])
13AC_PREREQ(2.68)
14AC_GNU_SOURCE
15AC_DEFUN([QOFCURRENT], [2])
16AC_DEFUN([QOFREVISION], [5])
17AC_DEFUN([QOFAGE], [0])
18AC_DEFUN([LIBQOFVERS], [QOFCURRENT:QOFREVISION:QOFAGE])
19LIBQOF_LIBRARY_VERSION=LIBQOFVERS
20AC_DEFUN([SQLCURRENT], [1])
21AC_DEFUN([SQLREVISION], [2])
22AC_DEFUN([SQLAGE], [0])
23AC_DEFUN([LIBSQLVERS], [SQLCURRENT:SQLREVISION:SQLAGE])
24LIBQOFSQL_LIBRARY_VERSION=LIBSQLVERS
25AC_CONFIG_MACRO_DIR([m4])
26
27AC_SUBST(LIBQOF_LIBRARY_VERSION)
28AC_SUBST(LIBQOFSQL_LIBRARY_VERSION)
29SONAME=QOFCURRENT
30AC_SUBST([SONAME])
31
32AC_PREFIX_PROGRAM([/usr])
33VERSION=AC_PACKAGE_VERSION
34AC_SUBST(VERSION)
35PACKAGE=AC_PACKAGE_NAME
36AC_SUBST(PACKAGE)
37AM_INIT_AUTOMAKE()
38
39AC_PROG_LIBTOOL
40AC_CONFIG_HEADERS([config.h])
41
42AC_ISC_POSIX
43AC_PROG_AWK
44AC_PROG_CXX
45AC_PROG_CC
46AC_PROG_CPP
47AC_HEADER_STDC
48AC_PROG_YACC
49AC_PROG_INSTALL
50AC_PROG_LN_S
51AC_PROG_MAKE_SET
52AC_FUNC_MKTIME
53AC_FUNC_STRTOD
54
55dnl # *****************************************
56dnl # pkg-config check time
57dnl # *****************************************
58
59AM_PATH_GLIB_2_0("2.9.0", , ,gobject)
60
61AC_PATH_PROG(PKG_CONFIG,pkg-config)
62if test "x$PKG_CONFIG" != x; then
63	GLIB_LIBS=`$PKG_CONFIG --libs glib-2.0`
64	GLIB_CFLAGS=`$PKG_CONFIG --cflags glib-2.0`
65	GOBJECT_LIBS=`$PKG_CONFIG --libs gobject-2.0`
66	GMODULE_LIBS=`$PKG_CONFIG --libs gmodule-2.0`
67fi
68AC_SUBST(GLIB_CFLAGS)
69AC_SUBST(GLIB_LIBS)
70AC_SUBST(GOBJECT_LIBS)
71AC_SUBST(GMODULE_LIBS)
72
73dnl # ********************************
74dnl # Symbol versioning support
75dnl # ********************************
76
77dnl # use symbol versioning on Linux, to avoid problems when
78dnl # mixing-and-matching multiple lib versions; may be useful on other
79dnl # platforms that support symbol versioning (BSDs?)
80
81AC_MSG_CHECKING(whether to implement symbol versioning)
82case $host_os in
83  *gnu*)
84	LINKER_SCRIPT="-Wl,--version-script=\$(srcdir)/libqof.ver"
85	AC_MSG_RESULT(yes)
86	;;
87  *)
88	AC_MSG_RESULT(no)
89	;;
90esac
91AC_SUBST(LINKER_SCRIPT)
92
93dnl # ********************************
94dnl # Auto-disable deprecated QOF
95dnl # ********************************
96
97# nothing to do, yet.
98
99AC_MSG_CHECKING(for darwin)
100case $host_os in
101	rhapsody* | darwin1*)
102		AC_MSG_RESULT([yes, but too old])
103		AC_MSG_ERROR([This platform is too old, please update to the latest darwin])
104		;;
105	darwin*)
106		AC_MSG_RESULT([yes, patching libtool to always build dylibs])
107		mv libtool libtool.old
108		sed -e 's/^deplibs_check_method.*/deplibs_check_method=pass_all/g' \
109			-e 's|^library_names_spec.*|library_names_spec="\\$libname\\$release\\$versuffix.dylib \\$libname\\$release\\${major}.dylib \\$libname.dylib"|g' \
110			-e 's|^soname_spec.*|soname_spec="\\$libname\\$release\\$major.dylib"|g' \
111			< libtool.old > libtool
112		rm libtool.old
113		AC_DEFINE(DARWIN,,Found Mac OSX Darwin)
114		DARWIN="dylib"
115		AC_SUBST(DARWIN)
116		;;
117	*)
118		AC_MSG_RESULT(no)
119		;;
120esac
121
122dnl # **************************************************************
123dnl # Checks for typedefs, structures, and compiler characteristics.
124dnl # **************************************************************
125
126AC_C_CONST
127AC_C_INLINE
128AC_TYPE_INT16_T
129AC_TYPE_INT32_T
130AC_TYPE_INT8_T
131AC_TYPE_PID_T
132AC_TYPE_SIZE_T
133AC_HEADER_TIME
134AC_STRUCT_TIMEZONE
135AC_STRUCT_TM
136AC_TYPE_UID_T
137AC_TYPE_UINT16_T
138AC_TYPE_UINT32_T
139AC_TYPE_UINT8_T
140
141dnl # *****************************
142dnl # Checks for library functions.
143dnl # *****************************
144AC_FUNC_MALLOC
145AC_FUNC_MKTIME
146AC_FUNC_REALLOC
147AC_FUNC_STRTOD
148AC_FUNC_STRFTIME
149AC_CHECK_HEADERS(sys/times.h time.h langinfo.h wchar.h )
150AC_CHECK_FUNCS(getcwd gettimeofday getline getwd stpcpy strdup strtoul \
151	strcasestr strcasecmp gmtime_r mblen pow tzname tzset)
152AC_CHECK_MEMBERS([struct stat.st_rdev])
153
154dnl # *******************************
155dnl # Internationalization
156dnl # *******************************
157
158GETTEXT_PACKAGE=qof
159AC_SUBST(GETTEXT_PACKAGE)
160AM_GNU_GETTEXT([external])
161AM_GNU_GETTEXT_VERSION([0.19.2])
162AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE],["$GETTEXT_PACKAGE"], [gettext domain])
163
164dnl # ********************************
165dnl # Auto-disable deprecated glib
166dnl # ********************************
167
168AC_ARG_ENABLE(deprecated-glib,
169  [  --disable-deprecated-glib
170                          Do not use deprecated glib functions],
171  [case "${enableval}" in
172        no) AC_DEFINE(G_DISABLE_DEPRECATED,1,
173          [Do not use deprecated glib functions]) ;;
174        yes) ;;
175        *) AC_MSG_ERROR(bad value ${enableval} for --enable-deprecated-glib) ;;
176        esac])
177
178dnl # **************************************************************
179dnl # Embedded systems only use the QofSQLite backend.
180dnl # libxml2 and optional sqlite for host systems.
181dnl # libxml2 v2.5.10 is required for QSF (backend/file)
182dnl # libgdasql is omitted to prevent a need for libgda2-3 itself.
183dnl # **************************************************************
184
185AC_ARG_ENABLE(embedded,
186	[  --enable-embedded       Enable the SQLite backend for embedded systems
187                          and DISABLE libgdasql and the QSF XML backend. (no)],
188	[case "${enableval}" in
189		no) embedded="no" ;;
190		yes) embedded="yes" ;;
191		*) AC_MSG_ERROR(bad value ${enableval} for --enable-embedded) ;;
192		esac])
193
194if test "$embedded" = "yes"; then
195	PKG_CHECK_MODULES(SQLITE, sqlite >= 2.8.0)
196	AC_SUBST(SQLITE_LIBS)
197	AC_SUBST(SQLITE_CFLAGS)
198	backend="sqlite"
199else
200	LIBXML2_REQUIRED=2.5.10
201	PKG_CHECK_MODULES(LIBXML2, libxml-2.0 >= $LIBXML2_REQUIRED)
202	LIBXML_VERSION=`xml2-config --version`
203	AC_SUBST(LIBXML2_CFLAGS)
204	AC_SUBST(LIBXML2_LIBS)
205	backend="libxml2 == $LIBXML_VERSION"
206fi
207
208AM_CONDITIONAL(EMBEDDED, [test "$embedded" = "yes"])
209
210sqlite="no"
211AC_ARG_ENABLE(sqlite,
212  [  --disable-sqlite        Disable the SQLite backend module.],
213  [case "${enableval}" in
214  		no) sqlite="no" ;;
215		yes) sqlite="yes" ;;
216		*) AC_MSG_ERROR(bad value ${enableval} for --disable-sqlite) ;;
217		esac])
218
219if test "$embedded" != "yes"; then
220	if test "$sqlite" = "yes"; then
221		SQLITE_REQUIRED=2.8.0
222		PKG_CHECK_MODULES(SQLITE, sqlite >= $SQLITE_REQUIRED)
223		AC_SUBST(SQLITE_LIBS)
224		AC_SUBST(SQLITE_CFLAGS)
225		backend2="sqlite"
226	fi
227fi
228
229AM_CONDITIONAL(USE_SQLITE, [test "$sqlite" = "yes"])
230
231dnl # **************************************************************
232dnl # GNOME Data Access library for GNOME2 libgda
233dnl # Enables use of gdasql within libqof1 *and* the gda backend.
234dnl # **************************************************************
235
236dnl # Not ready yet.
237usegdabackend="no"
238backend3="Disabled (default)"
239if test "$embedded" != "yes"; then
240	usegdasql="yes"
241else
242	usegdasql="no"
243	usegdabackend="no"
244fi
245AC_ARG_ENABLE(gdasql,
246  [  --disable-gdasql        Disable the use of libgdasql.],
247  [case "${enableval}" in
248		no) usegdasql="no" ;;
249		yes) usegdasql="yes" ;;
250		*) AC_MSG_ERROR(bad value ${enableval} for --disable-gda) ;;
251		esac])
252
253if test "$usegdasql" = "yes"; then
254	AC_MSG_CHECKING(for SQL parser support)
255	if test "$embedded" != "yes"; then
256		GDA_REQUIRED=3.0.1
257		LIBGDA_CFLAGS=`$PKG_CONFIG --cflags "libgda-3.0 >= $GDA_REQUIRED"`
258		LIBGDA_LIBS="-lgda-3.0"
259		# LIBGDA should only be used for the GDA backend
260		AC_SUBST(LIBGDA_CFLAGS)
261		AC_SUBST(LIBGDA_LIBS)
262	fi
263fi
264if test "x$LIBGDA_CFLAGS" = x; then
265	AC_MSG_RESULT([GDA not found (or disabled); will build using internal SQL library.])
266	SQL_PKG_LIB="-lqofsql"
267else
268	AC_ARG_ENABLE(gdabackend,
269	  [  --enable-gdabackend     Enable the use of the gda backend (off).],
270	  [case "${enableval}" in
271			no) usegdabackend="no" ;;
272			yes) usegdabackend="yes" ;;
273			*) AC_MSG_ERROR(bad value ${enableval} for --enable-gdabackend) ;;
274			esac])
275	GDA_VERSION=`$PKG_CONFIG --modversion libgda-3.0`
276	AC_SUBST(GDA_VERSION)
277	AC_MSG_RESULT([yes, using GDA: ${GDA_VERSION}])
278	save_LIBS="$LIBS"
279	AC_CHECK_LIB(gda-3.0, gda_client_open_connection, ,
280		[AC_MSG_ERROR([libgda3-3 found but missing gda_client_open_connection])])
281	AC_CHECK_LIB(gdasql-3.0, sql_parse, , [AC_MSG_ERROR([libgda3-3 found but missing libgdasql-3.0])])
282	AC_DEFINE(HAVE_GDA,,[We have found GDA])
283	GDA_PKG_LIB="-lgdasql-3.0"
284	LIBS="$save_LIBS"
285	HAVE_GDA="use_gda"
286	if test "$usegdabackend" = "yes"; then
287		backend3="Enabled"
288	fi
289fi
290
291AM_CONDITIONAL(USE_GDABACKEND, [ test x"$usegdabackend" != x"no"])
292
293AM_CONDITIONAL(USE_LIBGDA, [ test x"$HAVE_GDA" != x])
294AM_CONDITIONAL(USE_LIBGDA, [ test "$HAVE_GDA" = "use_gda"])
295AC_SUBST(USE_LIBGDA)
296AC_SUBST(GDA_PKG_LIB)
297AC_SUBST(SQL_PKG_LIB)
298
299dnl # **************************************************************
300dnl # DWI is now 'estron' - a dedicated backend
301dnl # **************************************************************
302
303#estron="no"
304#AC_ARG_ENABLE(estron,
305#  [  --enable-estron         Enable the Estron support. (off)],
306#  [case "${enableval}" in
307#  		no) estron="no" ;;
308#		yes) estron="yes" ;;
309#		*) AC_MSG_ERROR(bad value ${enableval} for --enable-estron) ;;
310#		esac])
311
312#AC_ARG_WITH(estron,
313#   [  --with-estron=path      prefix for Data With Integration - Estron (off)])
314#ESTRON_REQ=0.7.0
315#ESTRON_Q="--silence-errors"
316#ESTRON_PC_PATH="lib/pkgconfig/estron.pc"
317#AC_MSG_CHECKING([for estron >= $ESTRON_REQ])
318#if test x"$withval" != x; then
319#	if test "$estron" = "yes"; then
320#		ESTRON=`$PKG_CONFIG $ESTRON_Q --exists '$withval/$ESTRON_PC_PATH >= $ESTRON_REQ'`
321#		ESTRON_LIBS=`$PKG_CONFIG $ESTRON_Q --libs $withval/$ESTRON_PC_PATH`
322#		ESTRON_CFLAGS=`$PKG_CONFIG $ESTRON_Q --cflags $withval/$ESTRON_PC_PATH`
323#		ESTRON_VERSION=`$PKG_CONFIG $ESTRON_Q --modversion $withval/$ESTRON_PC_PATH`
324#		AC_MSG_RESULT([yes, using estron: ${ESTRON_VERSION}])
325#	fi
326#else
327#	if test "$estron" = "yes"; then
328#		PKG_CHECK_MODULES(ESTRON, estron >= $ESTRON_REQ)
329#		AC_SUBST(ESTRON_LIBS)
330#		AC_SUBST(ESTRON_CFLAGS)
331#		ESTRON_VERSION=`$PKG_CONFIG --modversion estron`
332#		AC_SUBST(ESTRON_VERSION)
333#		AC_MSG_RESULT([yes, using estron: ${ESTRON_VERSION}])
334#		backend3="estron"
335#	fi
336#fi
337#
338#AM_CONDITIONAL(USE_ESTRON, [test "$estron" = "yes"])
339
340dnl # =========================
341dnl # Perl - no longer needed
342dnl # =========================
343
344# check for doxygen, mostly stolen from http://log4cpp.sourceforge.net/
345# ------------------------------------------------------------------
346AC_DEFUN([BB_ENABLE_DOXYGEN],
347[
348AC_ARG_ENABLE(doxygen, [  --enable-doxygen        enable documentation generation with doxygen (auto)])
349AC_ARG_ENABLE(dot, [  --enable-dot            use 'dot' to generate graphs in doxygen (auto)])
350AC_ARG_ENABLE(html-docs, [  --enable-html-docs      enable HTML generation with doxygen (yes)], [], [ enable_html_docs=yes])
351AC_ARG_ENABLE(latex-docs, [  --enable-latex-docs     enable LaTeX documentation generation with doxygen (no)], [], [ enable_latex_docs=no])
352if test "$embedded" = "yes"; then
353	enable_doxygen=no
354	enable_doc=no
355fi
356if test "x$enable_doxygen" = xno; then
357        enable_doc=no
358else
359        AC_PATH_PROG(DOXYGEN, doxygen, , $PATH)
360        if test x$DOXYGEN = x; then
361                if test "x$enable_doxygen" = xyes; then
362                        AC_MSG_ERROR([could not find doxygen])
363                fi
364                enable_doc=no
365        else
366                enable_doc=yes
367                AC_PATH_PROG(DOT, dot, , $PATH)
368        fi
369fi
370AM_CONDITIONAL(DOC, test x$enable_doc = xyes)
371
372if test x$DOT = x; then
373        if test "x$enable_dot" = xyes; then
374                AC_MSG_ERROR([could not find dot])
375        fi
376        enable_dot=no
377else
378        enable_dot=yes
379fi
380AM_CONDITIONAL(ENABLE_DOXYGEN, test "$enable_doc" = "yes")
381AC_SUBST(enable_dot)
382AC_SUBST(enable_html_docs)
383AC_SUBST(enable_latex_docs)
384])
385
386# check for doxygen
387BB_ENABLE_DOXYGEN
388# ----------------------------------------------------------------
389
390dnl # *************************************
391dnl # Extra warnings
392dnl # *************************************
393AC_MSG_CHECKING(what extra warning flags to pass to the C compiler)
394if test ${GCC}x = yesx; then
395  warnFLAGS=
396  CFLAGS="${CFLAGS} -g2 -Wall"
397  AC_ARG_ENABLE(error-on-warning,
398        [  --disable-error-on-warning
399                          disable treating compile warnings as errors],
400        [case "${enableval}" in
401        yes) warnFLAGS="${warnFLAGS} -Werror" ;;
402        no)  ;;
403        *) AC_MSG_ERROR(bad value ${enableval} for --enable-error-on-warning) ;;
404        esac],
405        [  warnFLAGS="${warnFLAGS}" ])
406  GCC_VERSION=`${CC} -dumpversion`
407  if test `echo ${GCC_VERSION} | cut -d. -f1` -ge 3; then
408     # This is gcc >= 3.x.x
409     if test `echo ${GCC_VERSION} | cut -d. -f2` -ge 4; then
410        # This is gcc >= 3.4.x
411        warnFLAGS="${warnFLAGS} -Wdeclaration-after-statement"
412     else if test `echo ${GCC_VERSION} | cut -d. -f1` -ge 4; then
413        # This is gcc == 4.x.x
414        warnFLAGS="${warnFLAGS} -Wdeclaration-after-statement -Wno-pointer-sign"
415        fi
416     fi
417  fi
418dnl  CFLAGS="${CFLAGS} ${warnFLAGS}"
419else
420  warnFLAGS=
421fi
422AC_MSG_RESULT($warnFLAGS)
423AC_SUBST(warnFLAGS)
424
425set_compile_warnings=no
426
427AC_ARG_ENABLE(compile-warnings,
428              [  --enable-compile-warnings
429                          Enable verbose compiler warnings],
430              set_compile_warnings=yes)
431
432if test "$GCC" = "yes" -a "$set_compile_warnings" != "no"; then
433        warnFLAGS="$warnFLAGS -Wcast-align -Wsign-compare \
434 -Wmissing-prototypes -Wmissing-declarations -Werror -Wmissing-include-dirs \
435 -Wstrict-prototypes -Winline -Wnested-externs -Wpointer-arith \
436 -Wmissing-field-initializers"
437# LDFLAGS="$LDFLAGS -Wl,-z,defs"
438fi
439
440AC_SUBST(CFLAGS)
441AC_SUBST(CPPFLAGS)
442AC_SUBST(LDFLAGS)
443
444DATADIR=`eval echo $datadir`
445QSF_SCHEMA_DIR=`eval echo $DATADIR`"/xml/qof/qsf"
446AC_SUBST(QSF_SCHEMA_DIR)
447BACKEND_SCHEMA_DIR=`eval echo $DATADIR`"/xml/qof/"
448AC_SUBST(BACKEND_SCHEMA_DIR)
449
450QOF_CFLAGS="-I$includedir/qof"
451QOF_LIBS="-lqof"
452QOF_LIBDEPS="$LDFLAGS"
453QOF_VERSION="$VERSION"
454QOF_LIB_DIR=$libdir/${PACKAGE}${SONAME}
455AC_SUBST(QOF_LIB_DIR)
456QLD_PRINT=`eval echo $QOF_LIB_DIR | sed "s%^NONE%$prefix%"`
457AC_SUBST(QOF_LIBS)
458
459dnl # ******************************
460dnl # Check if this was VCS source
461dnl # ******************************
462if test -f "${srcdir}/README.vcs" ; then
463	AC_DEFINE([TEST_DEBUG],1,
464		[Run test code in debug mode])
465	QOF_FROM_VCS=yes
466fi
467
468AC_CONFIG_FILES([ po/Makefile.in
469Makefile
470backend/Makefile
471backend/file/Makefile
472backend/gda/Makefile
473backend/sqlite/Makefile
474doc/Makefile
475doc/html/Makefile
476doc/doxygen.cfg
477lib/Makefile
478lib/libsql/Makefile
479qof/Makefile
480qof/test/Makefile
481qof.pc
482qof.symbols
483])
484AC_OUTPUT
485
486dnl # <= Configuration summary =>
487
488echo ""
489echo "qof configuration summary:"
490echo "==========================="
491echo ""
492
493dnl # <= CFLAGS and LDFLAGS =>
494echo "CFLAGS      :   $warnFLAGS"
495echo "LDFLAGS     :   $LDFLAGS"
496echo "QOF_CFLAGS  :   "`eval echo $QOF_CFLAGS`
497echo "QOF_LIBS    :   $QOF_LIBS"
498echo "ESTRON_LIBS :   $ESTRON_LIBS"
499echo "1st backend :   $backend"
500echo "2nd backend :   $backend2"
501echo "GDA backend :   $backend3"
502echo "libgda      :   $GDA_VERSION"
503echo "libgdasql   :   $GDA_PKG_LIB"
504echo "libqofsql   :   $SQL_PKG_LIB"
505echo "prefix      :   $prefix"
506echo "data dir    :   "`eval echo $DATADIR`
507echo "XML dir     :   "`eval echo $QSF_SCHEMA_DIR`
508echo "include dir :   "`eval echo $includedir`
509echo "lib dir     :   "`eval echo $QLD_PRINT`
510echo ""
511echo ""
512dnl # <= End of configuration summary =>
513
514if [[ x"$QOF_FROM_VCS" = xyes ]]; then
515  echo " .----- NOTICE ------------------------------------------------."
516  echo " |         You are using QOF from VCS source.                  |"
517  echo " |                                                             |"
518  echo " | This is likely to be unstable, or contain some incomplete   |"
519  echo " | features, or just plain not work at all. Use it at your own |"
520  echo " | risk. Please help me to fix any bugs you find, by reporting |"
521  echo " | them back to me via the QOF-devel mailing list.             |"
522  echo " | http://lists.alioth.debian.org/mailman/listinfo/qof-devel   |"
523  echo " \`-------------------------------------------------------------'"
524  echo ""
525fi
526