source: branches/0.10-stable/configure.ac @ 1585

Last change on this file since 1585 was 1585, checked in by Jari Häkkinen, 6 years ago

Addresses #532. Prefer checking for newer version of support libraries.

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