source: trunk/configure.ac @ 1579

Last change on this file since 1579 was 1579, checked in by Peter Johansson, 7 years ago

merged patch release 0.10.2 into trunk

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 15.7 KB
Line 
1## Process this file with autoconf to produce a configure script.
2##
3## $Id: configure.ac 1579 2015-02-23 05:21:49Z peter $
4##
5## If you grabbed the source from subversion you should, at top-level,
6## execute:
7##          ./bootstrap
8## To push subsequent changes of this file into the build scripts you
9## must issue:
10##          autoreconf
11
12# Copyright (C) 2005 Jari Häkkinen, Peter Johansson
13# Copyright (C) 2006 Jari Häkkinen
14# Copyright (C) 2007, 2008, 2009, 2010 Jari Häkkinen, Peter Johansson
15# Copyright (C) 2011, 2012, 2015 Peter Johansson
16# Copyright (C) 2015 Jari Häkkinen
17#
18# This file is part of svndigest, http://dev.thep.lu.se/svndigest
19#
20# svndigest is free software; you can redistribute it and/or modify it
21# under the terms of the GNU General Public License as published by
22# the Free Software Foundation; either version 3 of the License, or
23# (at your option) any later version.
24#
25# svndigest is distributed in the hope that it will be useful, but
26# WITHOUT ANY WARRANTY; without even the implied warranty of
27# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
28# General Public License for more details.
29#
30# You should have received a copy of the GNU General Public License
31# along with svndigest. If not, see <http://www.gnu.org/licenses/>.
32
33AC_PREREQ([2.63])
34
35m4_include([m4/version.m4])
36AC_INIT([svndigest], m4_defn([my_VERSION]),
37        [svndigest-users@lists.sourceforge.net],,
38        [http://dev.thep.lu.se/svndigest])
39AC_CONFIG_SRCDIR([lib/File.h])
40AC_CONFIG_AUX_DIR([autotools])
41dnl arg below should be the same as in Makefile.am
42AC_CONFIG_MACRO_DIR([m4])
43AC_PREFIX_DEFAULT([/usr/local])
44
45dnl FIXME remove when we assume autoconf 2.64
46m4_ifndef([AC_PACKAGE_URL],
47          [AC_DEFINE([PACKAGE_URL], ["http://dev.thep.lu.se/svndigest"],
48                     [Define to home page for this package])
49           AC_SUBST([PACKAGE_URL], ["http://dev.thep.lu.se/svndigest"])])
50
51MY_VERSION
52AC_CONFIG_HEADERS([config.h])
53AM_INIT_AUTOMAKE([1.11 color-tests std-options parallel-tests
54                  silent-rules subdir-objects])
55
56# Set default programming language
57AC_LANG([C++])
58
59# propagate selected configure variables to DISTCHECK_CONFIGURE_FLAGS
60for var in CPPFLAGS CXX CXXFLAGS CXXCPP LDFLAGS LIBS; do
61  eval isset=\${$var+set}
62  if test "$isset" = 'set' ; then
63    eval val=$`echo $var`
64    DISTCHECK_CONFIGURE_FLAGS="${DISTCHECK_CONFIGURE_FLAGS}'${var}=${val}' "
65  fi
66done
67AC_SUBST(DISTCHECK_CONFIGURE_FLAGS)
68
69# record if CXXFLAGS was set by user for further use below
70AS_IF([test "${CXXFLAGS+set}" = set], [
71  CXXFLAGS_set_by_user=yes
72],[
73  CXXFLAGS_set_by_user=no
74  # set CXXFLAGS to avoid expansion in AC_PROG_CXX
75  CXXFLAGS=
76])
77
78# Checks for programs.
79AC_PROG_CXXCPP
80AC_PROG_CXX
81AC_PROG_RANLIB
82AC_PROG_SED
83# avoid running help2man when cross-compiling (as it involves invoking binaries)
84AS_IF([test x$cross_compiling = xno], [
85  AM_MISSING_PROG([HELP2MAN], [help2man])
86  ], [
87  # user is always right
88  HELP2MAN=${HELP2MAN-:}
89])
90# look for pkg-config
91PKG_PROG_PKG_CONFIG([0.23])
92
93# Save FLAGS
94APR_SAVE_THE_ENVIRONMENT(CPPFLAGS)
95APR_SAVE_THE_ENVIRONMENT(CXXFLAGS)
96
97AC_TYPE_LONG_LONG_INT
98AS_IF([test x$ac_cv_type_long_long_int = xno],
99      [AC_MSG_ERROR([compiler does not support long long int])]
100     )
101
102AC_ARG_ENABLE([debug],
103  [AS_HELP_STRING([--enable-debug],[turn on debug options and code])],
104  [], [enable_debug=no])
105
106# Set CXXFLAGS depending on whether CXXFLAGS was provided by user and
107# whether we are in debug mode
108AS_IF([test x$enable_debug = xyes], [
109  # in debug we alsways add flags below i.e. we turn on warnings,
110  # debug symbols, and low level of optimisation.
111
112  # -Wno-long-long is needed to suppress compiler diagnostics regarding
113  # using extension beyond the C++ standard (usage of non C++ standard
114  # 'long long' types).
115  YAT_CXX_ADD_FLAG([CXXFLAGS],[-pedantic -Wall -Wno-long-long -g -O])
116],[
117  # in standard mode we set to CXXFLAGS default to '-O3', but only if
118  # CXXFLAGS was not proved by user. If user provided a VALUE FOR
119  # CXXFLAGS we listen to that and leave as is.
120  AS_IF([test x$CXXFLAGS_set_by_user != xyes], [
121    YAT_CXX_ADD_FLAG([CXXFLAGS],[-O3])
122  ])
123])
124
125AC_ARG_ENABLE([assert],
126  [AS_HELP_STRING([--enable-assert], [turn on assertions])])
127
128# if assert not enabled/disabled explicitly, default behaviour is to
129# enable assert in debug mode and disable otherwise
130test "${enable_assert+set}" = set || enable_assert=$enable_debug
131
132# FIXME perhaps we should AC_DEFINE NDEBUG instead but then we need to
133# include config.h in all source files.
134#
135# propagate enable_assert to CPPFLAGS
136AS_IF([test x$enable_assert != xyes],[YAT_CPP_ADD_FLAG([CPPFLAGS],[-DNDEBUG])])
137
138AC_MSG_CHECKING([g++ deprecation attribute])
139AC_COMPILE_IFELSE(
140  [AC_LANG_PROGRAM([[void f() __attribute__ ((deprecated));]],)],
141  [AC_DEFINE([YAT_HAVE_GCC_DEPRECATED], [1],
142             [Define if compiler supports deprecated attribute, as in g++ 4.0])
143   AC_MSG_RESULT([yes])],
144  [AC_MSG_RESULT([no])] )
145
146# Apache Portable Runtime (APR) API checks
147APR_FIND_APR(,,[1],[1 0])
148AS_IF([test "${with_apr+set}" = set],
149    [DISTCHECK_CONFIGURE_FLAGS="$DISTCHECK_CONFIGURE_FLAGS --with-apr=$with_apr"]
150)
151if test "$apr_found" = "yes" ; then
152  APR_LIBS="`$apr_config --libs`"
153  apr_link_ld="`$apr_config --link-ld`"
154  for i in $apr_link_ld; do
155    AS_IF([AS_ECHO([$i]) | grep '^-l' > /dev/null],
156          [APR_LIBS="$i $APR_LIBS"],
157          [YAT_LD_ADD_FLAG([LDFLAGS], [$i])])
158  done
159  YAT_CPP_ADD_FLAG([CPPFLAGS],[`$apr_config --includes --cppflags`])
160  AC_CHECK_HEADER([apr_allocator.h],,[apr_found="no"])
161fi
162AC_SUBST([APR_LIBS])
163
164# Subversion API checks
165svn_found="yes"
166AC_ARG_WITH([svn],
167  [AS_HELP_STRING([--with-svn=DIR],
168                  [prefix for svn developer files])],
169  [ AS_CASE([$withval], [yes|no],
170            [AC_MSG_ERROR([--with-svn requires a directory to be provided])])
171    AS_IF([test -d $with_svn], [],
172          [AC_MSG_ERROR([$with_svn: no such directory])])
173    # transform argument to absolute path
174    with_svn=`cd $with_svn && pwd`
175    DISTCHECK_CONFIGURE_FLAGS="$DISTCHECK_CONFIGURE_FLAGS --with-svn=$with_svn"
176    YAT_LD_ADD_FLAG([LDFLAGS], [-L$with_svn/lib])
177    YAT_CPP_ADD_FLAG([CPPFLAGS], [-I$with_svn/include])
178  ])
179# svn needs needs apr headers
180AC_CHECK_HEADER([subversion-1/svn_types.h],,[svn_found="no"])
181
182# In some versions, such as 1.7, of Subversion header file `svn_wc.h'
183# does not conform to C++98 and therefore compiling with -pedantic
184# fails. As -pedantic is automatically turned on in --enable-debug
185# mode we need to turn it off -pedantic to allow building with
186# --enable-debug (see ticket #506)
187AS_IF([test x$enable_debug = xyes],
188  [AC_MSG_CHECKING([subversion-1/svn_wc.h usability with -pedantic])
189   AC_COMPILE_IFELSE(
190    [AC_LANG_PROGRAM([@%:@include <subversion-1/svn_wc.h>])],
191    [AC_MSG_RESULT([yes])],
192    [AC_MSG_RESULT([no])
193     CXXFLAGS=`AS_ECHO(["$CXXFLAGS"]) | $SED 's|-pedantic||'`
194     AC_MSG_NOTICE([remove -pedantic from \$CXXFLAGS])
195    ]
196   )
197  ])
198
199save_LIBS=$LIBS
200tmp_LIBS="$APR_LIBS $save_LIBS"
201LIBS=""
202AC_SEARCH_LIBS([svn_cmdline_setup_auth_baton],[svn_subr-1],
203               [], [svn_found="no"], [$tmp_LIBS])
204AC_SEARCH_LIBS([svn_ra_initialize],[svn_ra-1], [], [svn_found="no"],[$tmp_LIBS])
205AC_SEARCH_LIBS([svn_wc_adm_open3],[svn_wc-1], [], [svn_found="no"], [$tmp_LIBS])
206AC_SEARCH_LIBS([svn_diff_file_options_create],[svn_diff-1],[],
207               [svn_found="no"], [$tmp_LIBS])
208AC_SEARCH_LIBS([svn_client_log3],[svn_client-1],,[svn_found="no"], [$tmp_LIBS])
209SVN_LIBS=$LIBS
210LIBS=$save_LIBS
211AC_SUBST([SVN_LIBS])
212
213# PLplot API checks
214# plplot_found can get values: skip, noheader, old, or nolib if an
215# error is detected.
216plplot_found="yes"
217plplot_version=5.10.0
218save_PKG_CONFIG_PATH=$PKG_CONFIG_PATH
219AC_ARG_WITH([plplot],
220  [AS_HELP_STRING([--with-plplot=DIR],[prefix for plplot developer files])],
221  [DISTCHECK_CONFIGURE_FLAGS="$DISTCHECK_CONFIGURE_FLAGS --with-plplot=$withval"
222   AS_IF([test "x$withval" = "xno"], [ dnl
223     plplot_found=skip;
224   ], [ dnl
225     AS_IF([test -d $with_plplot], [],
226           [AC_MSG_ERROR([$with_plplot: no such directory])])
227     with_plplot=`cd $with_plplot && pwd`
228     # help pkg-config find .pc file
229     PKG_CONFIG_PATH=$with_plplot/lib/pkgconfig$PATH_SEPARATOR$PKG_CONFIG_PATH
230     export PKG_CONFIG_PATH
231   ])
232  ])
233
234use_plplot_pc="no"
235AS_IF([test "x$plplot_found" = "xyes" && test -n "$PKG_CONFIG"], [
236  AC_MSG_CHECKING([for plplotd-c++.pc])
237  AS_IF([$PKG_CONFIG --exists plplotd-c++], [
238    AC_MSG_RESULT([yes])
239    use_plplot_pc="yes"
240  ],[
241    AC_MSG_RESULT([no])
242    AC_MSG_WARN([cannot find plplotd-c++;
243      please use --with-plplot with appropriate argument to get more accurate
244      configuration.])
245  ])
246])
247
248AS_IF([test "x$plplot_found" = "xyes"], [
249  # copy flags if we have found pc file
250  AS_IF([test "$use_plplot_pc" = "yes"], [
251    # plplot typically returns <prefix>/include/plplot because plplot
252    # people assumes users include header files as <foo.h>. We prefer
253    # including files as <plplot/foo.h> and therefore need to trim off
254    # trailing '/plplot'. Space is included in sed expression to avoid
255    # substituting potential '/plplot' in PREFIX.
256    YAT_CPP_ADD_FLAG([CPPFLAGS],
257             [`$PKG_CONFIG plplotd-c++ --cflags-only-I | sed 's|/plplot | |g'`])
258    YAT_LD_ADD_FLAG([LDFLAGS], [`$PKG_CONFIG plplotd-c++ --libs-only-L`])
259    PLPLOT_LIBS="`$PKG_CONFIG plplotd-c++ --libs-only-l --libs-only-other`"
260  ],[
261    # otherwise guess
262    PLPLOT_LIBS="-lplplotcxxd -lplplotd";
263    AS_IF([test -n "$with_plplot" && test "x$with_plplot" != "xyes"], [
264      YAT_LD_ADD_FLAG([LDFLAGS], [-L$with_plplot/lib])
265      YAT_CPP_ADD_FLAG([CPPFLAGS], [-I$with_plplot/include])
266    ])
267  ])
268])
269
270AS_IF([test "x$plplot_found" = "xyes"], [
271  AC_CHECK_HEADER([plplot/plstream.h], [], [plplot_found="noheader"])
272])
273
274AS_IF([test "x$plplot_found" = "xyes" && test -n "$PKG_CONFIG"], [
275  AC_MSG_CHECKING([plplot version >= $plplot_version])
276  AS_IF([$PKG_CONFIG --atleast-version=$plplot_version plplotd-c++], [
277    AC_MSG_RESULT([yes])
278  ],[
279    have_plplot_version=`$PKG_CONFIG --modversion plplotd-c++`
280    AC_MSG_RESULT([$have_plplot_version])
281    plplot_found="old"
282  ])
283])
284
285AS_IF([test "x$plplot_found" = "xyes"], [
286  save_LIBS=$LIBS
287  LIBS="$PLPLOT_LIBS $LIBS"
288  AC_MSG_CHECKING([for library containing plstream])
289  AC_LINK_IFELSE([AC_LANG_PROGRAM([@%:@include <plplot/plstream.h>],
290                                  [plstream pls(1,1,"svg", "conftest.svg");
291                                   pls.scolbga(255, 255, 255, 0);
292                                  ])],
293                 [AC_MSG_RESULT([yes]);
294                  AC_DEFINE([HAVE_PLPLOT], [1],
295                            [Define to 1 if you have plplot])],
296                 [AC_MSG_RESULT([no])
297                  plplot_found=nolib;])
298  LIBS=$save_LIBS
299])
300# restore variable
301export PKG_CONFIG_PATH=$save_PKG_CONFIG_PATH
302AC_SUBST(PLPLOT_LIBS)
303
304# checking if we have test repo
305test_repo_filename=$srcdir/test/repo;
306AS_IF([test -r $test_repo_filename],
307              [AC_DEFINE([HAVE_TEST_REPO],[1],[define if test repo is available])
308               test_repo_found="yes"],
309              [test_repo_found="no"])
310AC_SUBST([test_repo_found])
311AS_IF([test "x$test_repo_found" = xyes],
312      [abs_test_repo=`cd $test_repo_filename && pwd`;
313       AC_SUBST(abs_test_repo)]
314     )
315AC_CONFIG_FILES([test/init.sh])
316AC_CONFIG_FILES([test/svn_update.sh], [chmod +x test/svn_update.sh])
317
318dnl maintainer make rules from yat project
319YAT_SVN_RELEASE
320YAT_SVN_REVISION
321YAT_REVISION_HEADER
322YAT_SVN_RELEASE_YEAR
323
324# Set variable if we are bulding from a typical distribution, i.e., we
325# don't have svn wc and we have man pages (included in dist).
326AM_CONDITIONAL([MAN_TARBALL],
327  [test $have_svn_wc = "no" && test -r $srcdir/man/svndigest.1 && \
328   test -r $srcdir/man/svncopyright.1 && \
329   test -r $srcdir/man/svndigest-copy-cache.1])
330
331# Restore FLAGS
332APR_RESTORE_THE_ENVIRONMENT([CPPFLAGS], [SVNDIGEST_])
333APR_RESTORE_THE_ENVIRONMENT([CXXFLAGS], [SVNDIGEST_])
334APR_RESTORE_THE_ENVIRONMENT([LDFLAGS], [SVNDIGEST_])
335
336AC_CONFIG_FILES([Makefile test/environment.h])
337
338AC_CONFIG_FILES([build_support/tag_and_release.sh],
339                [chmod +x-w build_support/tag_and_release.sh])
340
341AC_CONFIG_HEADER([yat/config_public.h])
342
343# Print failure status information about selected items, and exit if
344# fatal errors were encountered. No output will be created if
345# configure is halted prematurely.
346
347# used to trigger exit before creation of output
348all_reqs_ok="true"
349
350AS_VAR_IF([have_svn_wc], [yes], [
351   AC_MSG_CHECKING([help2man])
352   # redirecting potential error msg to log file
353   AS_IF([help2man --version >/dev/null 2>&AS_MESSAGE_LOG_FD],
354         [AC_MSG_RESULT([yes])],
355         [AC_MSG_RESULT([no])
356     AC_MSG_WARN(m4_text_wrap(m4_normalize([
357       `help2man' is missing on your system.  You will not be
358       able to create the man page. A sound man page should be
359       included in a distribution, and since you will not able
360       to create a complete distribution `make dist' will fail.
361       ]),[                   ],
362          [                             ], 79))
363   ])
364   if (test "$test_repo_found" = "no"); then
365      all_reqs_ok="false";
366      AC_MSG_WARN([dnl
367Cannot find test repository (test_repo_filename), which should be
368available when building from a subversion working copy. Try svn
369update in top directory.]);
370   fi
371])
372
373# Non-existing APR is fatal -- sub-sequent compilation will fail.
374if (test "$apr_found" = "no") ; then
375  AC_MSG_WARN([APR not found. The Apache Portable Runtime
376  (APR) library cannot be found. Please make sure APR is installed
377  and supply the appropriate --with-apr option to 'configure'.])
378  all_reqs_ok="false"
379fi
380
381# Non-existing subversion API is fatal -- sub-sequent compilation will fail.
382if (test "$svn_found" = "no") ; then
383  svn_msg="Subversion API not found. Subversion API libraries cannot
384  be found. Make sure the APIs are installed and supply the
385  appropriate --with-svn option to 'configure'."
386  if (test "$apr_found" = "no") ; then
387    svn_msg="$svn_msg
388    Note, APR was not found. Failure to locate APR affects the search
389    of the subversion API. Please fix the APR problem before trying
390    to resolve the subversion related issues."
391  fi
392  AC_MSG_WARN([$svn_msg])
393  all_reqs_ok="false"
394fi
395
396# Non-existing PLplot API is fatal -- sub-sequent compilation will fail.
397AS_CASE([$plplot_found],
398  [noheader],
399    [AC_MSG_WARN([
400    PLplot developer files cannot be found. Make sure PLplot is installed.])
401    all_reqs_ok="false"],
402  [old],
403    [AC_MSG_WARN([
404    PLplot developer files found but not required API version.
405    Version at least $plplot_version is required. Please upgrade PLplot.])
406    all_reqs_ok="false"],
407  [nolib],
408    [AC_MSG_WARN([
409    PLplot developer files found but linking against plplot library failed.])
410    all_reqs_ok="false"])
411
412if test $ac_cv_type_long_long_int != yes ; then
413  AC_MSG_WARN([Compiler $CXX does not support `long long'.
414  svndigest must be compiled with a compiler that supports `long long'.])
415  all_reqs_ok="false"
416fi
417
418if (test "$all_reqs_ok" = "false") ; then
419  AC_MSG_ERROR([Some pre-requisites were not fulfilled, aborting
420  configure. Please consult the 'README' file for more information
421  about what is needed to compile svndigest and refer to above
422  warning messages. Needed files were NOT created.])
423fi
424
425# Create output.
426AC_OUTPUT
427
428# Some more messages.
429AC_MSG_NOTICE([
430Ready to compile the executables of svndigest $VERSION
431The following flags and libs will be used:
432+++++++++++++++++++++++++++++++++++++++++++++++
433  Compiler:           $CXX
434  Preprocessor flags:
435    CPPFLAGS:           $CPPFLAGS
436    SVNDIGEST_CPPFLAGS: $SVNDIGEST_CPPFLAGS
437  C++ flags:
438    CXXFLAGS:           $CXXFLAGS
439    SVNDIGEST_CXXFLAGS: $SVNDIGEST_CXXFLAGS
440  Linker flags:
441    LDFLAGS:            $LDFLAGS
442    SVNDIGEST_LDFLAGS:  $SVNDIGEST_LDFLAGS
443  Libraries:
444    LIBS                $LIBS
445    APR_LIBS            $APR_LIBS
446    SVN_LIBS            $SVN_LIBS
447    PLPLOT_LIBS         $PLPLOT_LIBS
448+++++++++++++++++++++++++++++++++++++++++++++++]dnl
449)
450
451AC_MSG_NOTICE([Now type 'make all check'.])
Note: See TracBrowser for help on using the repository browser.