configure.ac 15.9 KB
Newer Older
1
2
3
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

4
m4_pattern_forbid([^OLN_])
5

Roland Levillain's avatar
Roland Levillain committed
6
AC_PREREQ([2.61])
7
8
9
10
11
12


## ---------------- ##
## Package set up.  ##
## ---------------- ##

13
AC_INIT([Olena], [1.0a], [olena@lrde.epita.fr], [olena])
14

Roland Levillain's avatar
Roland Levillain committed
15
16
17
# M4 macros.
AC_CONFIG_MACRO_DIR([m4])

18
19
20
21
22
# Auxiliary files.
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_FILES([build-aux/Makefile])

# Automake.
Roland Levillain's avatar
Roland Levillain committed
23
AM_INIT_AUTOMAKE([1.10 subdir-objects check-news dist-bzip2 nostdinc -Wall])
24

25
26
27
# Package metadata.
AC_CONFIG_FILES([milena/mln/version.hh])
AC_DEFINE_UNQUOTED([OLN_PACKAGE_NAME], ["$PACKAGE_NAME"],
28
		   [Package Full name.])
29
30
31
32
33
34
AC_DEFINE_UNQUOTED([OLN_PACKAGE_BUGREPORT], ["$PACKAGE_BUGREPORT"],
		   [Bug report address.])
AC_DEFINE_UNQUOTED([OLN_PACKAGE_STRING], ["$PACKAGE_STRING"],
		   [Full name and version.])
AC_DEFINE_UNQUOTED([OLN_PACKAGE_VERSION], ["$PACKAGE_VERSION"],
		   [Package Version.])
35

36
## --------------------- ##
37
## C++ compiler set up.  ##
38
39
## --------------------- ##

Roland Levillain's avatar
Roland Levillain committed
40
41
42
43
44
45
# If the user doesn't provide any CXXFLAGS, prevent Autoconf from
# settings its own default ones (e.g., `-g -O2' for g++).
if test ! ${CXXFLAGS+set}; then
   CXXFLAGS=""
fi

46
47
48
49
# Look for a C++ compiler.
AC_LANG([C++])
AC_PROG_CXX

50
# GNU C++ compiler setup.
51
if test "$GXX" = yes; then
52
  # Speed up compiling times.
53
  CXXFLAGS="$CXXFLAGS -pipe"
54
55
56
57
58
59
60
61
62
63
64
65
66

  # The code generated for mln::data::impl::memcpy__() by g++ 4.2 with
  # a high optimization level (`-O3') and without
  # `-fno-strict-aliasing' might be wrong, at least with Debian's g++
  # 4.2 on IA-32 (see also milena/mln/memcpy_.hh).  We observed this
  # behavior with e.g. milena/apps/graph-morpho/samples-image2d.cc.
  # Note that Debian's g++ 4.0, 4.1, 4.3 and 4.4 are fine.
  #
  # So, when the C++ compiler is g++ 4.2, set STRICT_ALIASING_CXXFLAGS
  # to `-fno-strict-aliasing'.
  if $CXX --version | head -n 1 | grep '\b4\.2' >/dev/null 2>&1; then
    STRICT_ALIASING_CXXFLAGS=-fno-strict-aliasing
  fi
67
fi
68
AC_SUBST([STRICT_ALIASING_CXXFLAGS])
69

70
71

# Adjusting warning options according to compilers.
72
AC_ARG_VAR([WARNINGS_CXXFLAGS], [C++ compiler warning flags])
73
74
75
76
77
78
79
80
81
82
83
case "$CXX" in
     # Intel compiler
     *icpc*)
	WARNINGS_CXXFLAGS="-Wall -wd111,193,279,383,444,522,654,810,981,1418"
	;;
     *)
	WARNINGS_CXXFLAGS="-Wall -W"
	;;
esac


84
85
86
87
88
89
# ------------------------------ #
# C++ compiler flags for tests.  #
# ------------------------------ #

# FIXME: We might want to write an Autoconf macro to factor this.

90
# Standard flags for tests.
91
AC_ARG_VAR([TESTS_CXXFLAGS], [C++ compiler flags for tests])
92
# We want no optimization for the tests (it slows down compiling
93
# times), and debugging information.
94
if test "$GXX" = yes && test -z "$TESTS_CXXFLAGS"; then
95
  TESTS_CXXFLAGS="-O0 -ggdb $WARNINGS_CXXFLAGS"
96
97
fi

98
# Flags for complex tests.
99
100
AC_ARG_VAR([TESTS_CXXFLAGS_SPEED],
           [C++ compiler optimization flags for (complex) tests])
101
102
103
104
105
106
# We want optimization for complex tests, and keep debugging flags
# (still useful).
if test "$GXX" = yes && test -z "$TESTS_CXXFLAGS_SPEED"; then
  TESTS_CXXFLAGS_SPEED="-O3 -DNDEBUG -ggdb -Wall -W"
fi

107
# Flags for tests with with all debugging features turned on.
108
AC_ARG_VAR([TESTS_CXXFLAGS_DEBUG], [C++ compiler debug flags])
109
110
111
112
113
114
115
# We want no optimization for the tests (it slows down compiling
# times), and a lot of debugging features.
# * GNU C++ Library Debug Mode:
#   http://gcc.gnu.org/onlinedocs/libstdc++/manual/debug_mode.html
# * GNU C++ Library Compile Time Checks (a.k.a. concept checking):
#   http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt12ch29.html
if test "$GXX" = yes && test -z "$TESTS_CXXFLAGS_DEBUG"; then
116
  TESTS_CXXFLAGS_DEBUG="-O0 -ggdb $WARNINGS_CXXFLAGS -D_GLIBCXX_DEBUG -D_GLIBCXX_CONCEPT_CHECKS"
117
118
119
fi


120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
## ------------------------------ ##
## ``Enable Everything'' Switch.  ##
## ------------------------------ ##

# Enable all bundled features (trimesh2, Swilena, apps, tools).  This
# option is useful to maintainers to ensure they do not break optional
# parts while modifying the core of the project. If both
# ``--enable-all'' is set and a given feature is disabled (say,
# ``--disable-apps''), then the disable flag has priority.

AC_ARG_ENABLE([all],
              [AS_HELP_STRING([--enable-all],
                              [enable maintainer mode])],
              [
               enable_trimesh=yes
               enable_swilena=yes
136
dnl<<lrde
137
               enable_scribo=yes
138
dnl>>
139
140
141
               enable_apps=yes
               enable_tools=yes
              ])
142

143

144
145
146
147
148
## ------------------ ##
## Libraries set up.  ##
## ------------------ ##

# Use Libtool.
149
150
# To be replaced by a call to LT_INIT as soon as Libtool 2.2 is used.
AC_PROG_LIBTOOL
151
152
153
154
155

# Check for Darwin.
AC_CANONICAL_HOST
AM_CONDITIONAL([DARWIN], [echo "$host_os" | grep '^darwin'])

Roland Levillain's avatar
Roland Levillain committed
156

157
158
159
## -------------------- ##
## External libraries.  ##
## -------------------- ##
160

161
### Support for FreeImagePlus has been disabled for Olena 1.0.
162
## OLN_WITH_LIB([FreeImagePlus], [FreeImagePlus.h], [freeimageplus])
163

164
# CFITSIO library.
165
OLN_WITH_LIB([CFITSIO], [fitsio.h], [cfitsio])
166

167
168
169
170
171
172
# Magick++.
# FIXME: We should handle Magick++ using pkgconfig (and/or
# Magick++-config?) instead of OLN_WITH_LIB.  See how other projects
# handle this.
OLN_WITH_LIB([Magick++], [Magick++.h], [Magick++], [magickxx], [MAGICKXX])

173
174
175
# TIFF library.
OLN_WITH_LIB([TIFF], [tiff.h], [tiff])

176
# Grassroots DiCoM (GDCM).
177
178
OLN_WITH_LIB([GDCM], [gdcm-2.0/gdcmReader.h], [gdcmCommon], [gdcm], [GDCM],
	     [-lgdcmzlib])
179

180
181
182
183
# Tesseract
OLN_WITH_LIB([TESSERACT], [tesseract/baseapi.h], [tesseract_full], [tesseract], [TESSERACT])


184

185
186
187
188
189
## ---------------------------- ##
## (Bundled) trimesh2 library.  ##
## ---------------------------- ##

AC_ARG_ENABLE([trimesh],
190
              [AS_HELP_STRING([--enable-trimesh],
191
                              [build the (bundled) trimesh2 library])])
192
AM_CONDITIONAL([ENABLE_TRIMESH], [test "x$enable_trimesh" = xyes])
193
194
AC_CONFIG_SUBDIRS([external/trimesh])

Roland Levillain's avatar
Roland Levillain committed
195
196
197
198
## --------- ##
## Swilena.  ##
## --------- ##

199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
AC_ARG_ENABLE([swilena],
              [AS_HELP_STRING([--enable-swilena],
                              [build Swilena Python bindings])])
AS_IF([test "x$enable_swilena" = xyes],
      [# Ensure dynamic libraries are enabled.
       if test "x$enable_shared" = xno; then
         AC_MSG_ERROR([`--enable-swilena' was given, but dynamic libraries are
disabled.  Try to invoke configure with `--enable-shared'.])
       fi
       # Check for SWIG.
       AC_PROG_SWIG([1.3.35])
       if (eval "$SWIG -version") >/dev/null 2>&1; then :; else
         AC_MSG_ERROR([SWIG 1.3.35 is required for Swilena])
       fi
       # Check for Python.
       AM_PATH_PYTHON([2.4], [],
                      [AC_MSG_ERROR([Python 2.4 is required for Swilena.])])
       adl_CHECK_PYTHON
       # Check for Python headers.
       save_CPPFLAGS=$CPPFLAGS
       CPPFLAGS="$CPPFLAGS -I$PYTHONINC"
       AC_CHECK_HEADERS([Python.h], [],
                        [AC_MSG_ERROR([`Python.h' is required for Swilena.
Try adding `-I <Python include path>' to `CPPFLAGS'.])])
       CPPFLAGS=$save_CPPFLAGS])
AM_CONDITIONAL([ENABLE_SWILENA], [test "x$enable_swilena" = xyes])
Roland Levillain's avatar
Roland Levillain committed
225

226
AC_CONFIG_FILES([swilena/Makefile
227
		 swilena/python/Makefile])
228

Roland Levillain's avatar
Roland Levillain committed
229
230
AC_CONFIG_FILES([swilena/run], [chmod +x swilena/run])

231
AC_CONFIG_FILES(m4_do([swilena/python/sps],
232
233
234
		      [:swilena/python/sps-common.in],
		      [:swilena/python/sps.in]),
		[chmod +x swilena/python/sps])
235
AC_CONFIG_FILES(m4_do([swilena/python/sps-local],
236
237
238
		      [:swilena/python/sps-common.in],
		      [:swilena/python/sps-local.in]),
		[chmod +x swilena/python/sps-local])
239

240
dnl<<lrde
241
242
243
244
## -------- ##
## Scribo.  ##
## -------- ##

245
246
247
AC_ARG_ENABLE([scribo],
              [AS_HELP_STRING([--enable-scribo],
                              [enable Scribo])])
248
AM_CONDITIONAL([ENABLE_SCRIBO], [test "x$enable_scribo" = xyes])
249
250
251

AC_CONFIG_FILES([
  scribo/Makefile
252
    scribo/demo/Makefile
253
254
    scribo/src/Makefile
      scribo/src/binarization/Makefile
255
      scribo/src/debug/Makefile
256
      scribo/src/filter/Makefile
257
258
      scribo/src/misc/Makefile
      scribo/src/multi_scale/Makefile
259
      scribo/src/preprocessing/Makefile
260
261
262
263
      scribo/src/primitive/Makefile
	scribo/src/primitive/extract/Makefile
	scribo/src/primitive/find/Makefile
        scribo/src/primitive/group/Makefile
264
      scribo/src/table/Makefile
265
      scribo/src/text/Makefile
266
267
268
269
270
271
272
273
274
275
])

AC_CONFIG_FILES([scribo/tests/data.hh])

AC_CONFIG_FILES([
  scribo/tests/Makefile
    scribo/tests/filter/Makefile
    scribo/tests/preprocessing/Makefile
    scribo/tests/table/Makefile
    scribo/tests/text/Makefile
276
    scribo/tests/unit_test/Makefile
277
])
278
dnl>>
Roland Levillain's avatar
Roland Levillain committed
279

280
281
282
283
## --------------- ##
## Configuration.  ##
## --------------- ##

284
285
# Ask for config.h creation.
AC_CONFIG_HEADERS([config.h])
286

287
288
289
290
# Ask for the creation of a milena/doc/tool/data.hh, used to access to
# data (images) from the documentation.
AC_CONFIG_FILES([milena/doc/tools/data.hh])

291
292
293
# Ask for the Makefile creations.
AC_CONFIG_FILES([
  Makefile
Roland Levillain's avatar
Roland Levillain committed
294
    external/Makefile
295
296
    milena/Makefile
      milena/doc/Makefile
297
      milena/mesh/Makefile
298
])
299

300

301
302
303
304
## ------- ##
## Tests.  ##
## ------- ##

Roland Levillain's avatar
Roland Levillain committed
305
306
# Ask for the creation of a milena/tests/data.hh, used to access to
# data (images) from tests.
307
308
AC_CONFIG_FILES([milena/tests/data.hh])

Roland Levillain's avatar
Roland Levillain committed
309
# Ask for the creation of tests' Makefiles.
310
AC_CONFIG_FILES([
311
  milena/tests/Makefile
Roland Levillain's avatar
Roland Levillain committed
312
    milena/tests/accu/Makefile
313
    milena/tests/accu/image/Makefile
314
    milena/tests/accu/site_set/Makefile
315
    milena/tests/accu/stat/Makefile
316
    milena/tests/accu/math/Makefile
317
    milena/tests/accu/shape/Makefile
318
    milena/tests/algebra/Makefile
319
    milena/tests/arith/Makefile
320
    milena/tests/binarization/Makefile
Roland Levillain's avatar
Roland Levillain committed
321
    milena/tests/border/Makefile
322
323
324
325
    milena/tests/canvas/Makefile
      milena/tests/canvas/browsing/Makefile
      milena/tests/canvas/morpho/Makefile
    milena/tests/convert/Makefile
326
    milena/tests/convert/impl/Makefile
Roland Levillain's avatar
Roland Levillain committed
327
    milena/tests/core/Makefile
Nicolas Ballas's avatar
Nicolas Ballas committed
328
329
      milena/tests/core/alias/Makefile
      milena/tests/core/image/Makefile
330
	milena/tests/core/image/dmorph/Makefile
331
332
	milena/tests/core/image/imorph/Makefile
	milena/tests/core/image/vmorph/Makefile
Nicolas Ballas's avatar
Nicolas Ballas committed
333
334
335
      milena/tests/core/other/Makefile
      milena/tests/core/routine/Makefile
      milena/tests/core/site_set/Makefile
336
    milena/tests/data/Makefile
337
338
      milena/tests/data/approx/Makefile
      milena/tests/data/naive/Makefile
Roland Levillain's avatar
Roland Levillain committed
339
340
341
    milena/tests/debug/Makefile
    milena/tests/display/Makefile
    milena/tests/draw/Makefile
342
    milena/tests/estim/Makefile
343
    milena/tests/extension/Makefile
344
345
346
    milena/tests/fun/Makefile
      milena/tests/fun/i2v/Makefile
      milena/tests/fun/p2b/Makefile
347
      milena/tests/fun/p2p/Makefile
348
      milena/tests/fun/p2v/Makefile
349
      milena/tests/fun/stat/Makefile
350
      milena/tests/fun/v2v/Makefile
351
      milena/tests/fun/vv2v/Makefile
Roland Levillain's avatar
Roland Levillain committed
352
353
      milena/tests/fun/x2x/Makefile
    milena/tests/geom/Makefile
354
355
    milena/tests/graph/Makefile
      milena/tests/graph/attribute/Makefile
Roland Levillain's avatar
Roland Levillain committed
356
    milena/tests/histo/Makefile
357
    milena/tests/io/Makefile
358
      milena/tests/io/dicom/Makefile
359
      milena/tests/io/dump/Makefile
Roland Levillain's avatar
Roland Levillain committed
360
      milena/tests/io/fits/Makefile
361
      milena/tests/io/fld/Makefile
362
      milena/tests/io/magick/Makefile
363
      milena/tests/io/off/Makefile
Roland Levillain's avatar
Roland Levillain committed
364
      milena/tests/io/pbm/Makefile
365
      milena/tests/io/pbms/Makefile
366
367
      milena/tests/io/pfm/Makefile
      milena/tests/io/pgm/Makefile
368
      milena/tests/io/pgms/Makefile
369
370
      milena/tests/io/pnm/Makefile
      milena/tests/io/ppm/Makefile
371
      milena/tests/io/ppms/Makefile
372
      milena/tests/io/tiff/Makefile
373
    milena/tests/labeling/Makefile
Roland Levillain's avatar
Roland Levillain committed
374
375
376
377
    milena/tests/linear/Makefile
      milena/tests/linear/local/Makefile
    milena/tests/literal/Makefile
    milena/tests/logical/Makefile
378
    milena/tests/make/Makefile
Roland Levillain's avatar
Roland Levillain committed
379
380
381
382
383
    milena/tests/math/Makefile
    milena/tests/metal/Makefile
      milena/tests/metal/make/Makefile
      milena/tests/metal/math/Makefile
    milena/tests/morpho/Makefile
384
      milena/tests/morpho/approx/Makefile
385
      milena/tests/morpho/attribute/Makefile
386
      milena/tests/morpho/closing/Makefile
387
      milena/tests/morpho/closing/approx/Makefile
388
      milena/tests/morpho/elementary/Makefile
389
      milena/tests/morpho/opening/Makefile
390
      milena/tests/morpho/opening/approx/Makefile
391
      milena/tests/morpho/reconstruction/Makefile
392
        milena/tests/morpho/reconstruction/by_dilation/Makefile
393
        milena/tests/morpho/reconstruction/by_erosion/Makefile
394
      milena/tests/morpho/tree/Makefile
Edwin Carlinet's avatar
Edwin Carlinet committed
395
	milena/tests/morpho/tree/filter/Makefile
396
      milena/tests/morpho/watershed/Makefile
397
    milena/tests/norm/Makefile
398
    milena/tests/opt/Makefile
Roland Levillain's avatar
Roland Levillain committed
399
400
401
    milena/tests/pw/Makefile
    milena/tests/set/Makefile
    milena/tests/tag/Makefile
402
    milena/tests/test/Makefile
403
    milena/tests/topo/Makefile
404
      milena/tests/topo/skeleton/Makefile
Roland Levillain's avatar
Roland Levillain committed
405
406
407
408
409
    milena/tests/trace/Makefile
    milena/tests/trait/Makefile
      milena/tests/trait/image/Makefile
      milena/tests/trait/op/Makefile
      milena/tests/trait/value/Makefile
410
    milena/tests/transform/Makefile
411
    milena/tests/unit_test/Makefile
412
413
    milena/tests/upscaling/Makefile
      milena/tests/upscaling/art/Makefile
414
    milena/tests/util/Makefile
Roland Levillain's avatar
Roland Levillain committed
415
416
417
418
    milena/tests/value/Makefile
      milena/tests/value/builtin/Makefile
      milena/tests/value/concept/Makefile
    milena/tests/win/Makefile
419
    milena/tests/world/Makefile
420
      milena/tests/world/binary_2d/Makefile
421
422
      milena/tests/world/inter_pixel/Makefile
	milena/tests/world/inter_pixel/dim2/Makefile
423
])
424

425
426
dnl<<lrde
AC_CONFIG_FILES([
427
  milena/tests/extract/Makefile
428
429
430
431
432
433
  milena/tests/linear/gaussian/Makefile
  milena/tests/registration/Makefile
  milena/tests/subsampling/Makefile
])
dnl>>

434
435
436
437
438

## -------------- ##
## Applications.  ##
## -------------- ##

439
440
441
442
# Ask for the creation of a milena/apps/data.hh, used to access to
# data (images) from apps.
AC_CONFIG_FILES([milena/apps/data.hh])

443
444
445
446
447
AC_ARG_ENABLE([apps],
              [AS_HELP_STRING([--enable-apps],
                              [enable application])])
AM_CONDITIONAL([ENABLE_APPS], [test "x$enable_apps" = "xyes"])

448
# Ask for the creation of applications' Makefiles.
449
450
AC_CONFIG_FILES([
  milena/apps/Makefile
451
    milena/apps/constrained-connectivity/Makefile
452
453
454
455
    milena/apps/graph-morpho/Makefile
    milena/apps/mesh-segm-skel/Makefile
    milena/apps/papers/Makefile
      milena/apps/papers/levillain.09.ismm/Makefile
456
])
457
458

# Configure tests.
459
460
# FIXME: Consider using `sed' instead of `configure' to create these
# tests for the sake of speed.
461
462
463
464
465
466
467
468
469
470
471
472
AC_CONFIG_FILES([milena/apps/mesh-segm-skel/test-mesh-max-curv],
		[chmod +x milena/apps/mesh-segm-skel/test-mesh-max-curv])
AC_CONFIG_FILES([milena/apps/mesh-segm-skel/test-mesh-complex-max-curv],
		[chmod +x milena/apps/mesh-segm-skel/test-mesh-complex-max-curv])
AC_CONFIG_FILES([milena/apps/mesh-segm-skel/test-mesh-segm],
		[chmod +x milena/apps/mesh-segm-skel/test-mesh-segm])
AC_CONFIG_FILES([milena/apps/mesh-segm-skel/test-mesh-complex-segm],
		[chmod +x milena/apps/mesh-segm-skel/test-mesh-complex-segm])
AC_CONFIG_FILES([milena/apps/mesh-segm-skel/test-mesh-complex-max-curv-segm],
		[chmod +x milena/apps/mesh-segm-skel/test-mesh-complex-max-curv-segm])
AC_CONFIG_FILES([milena/apps/mesh-segm-skel/test-mesh-complex-skel],
		[chmod +x milena/apps/mesh-segm-skel/test-mesh-complex-skel])
473

474
475
476
AC_CONFIG_FILES([milena/apps/constrained-connectivity/test-constrained-connectivity],
		[chmod +x milena/apps/constrained-connectivity/test-constrained-connectivity])

477
# Flags for apps.
478
AC_ARG_VAR([APPS_CXXFLAGS], [C++ compiler flags for applications])
479
480
# We want fast binaries for apps.
if test "$GXX" = yes && test -z "$APPS_CXXFLAGS"; then
481
  APPS_CXXFLAGS="-O3 -DNDEBUG -ggdb $WARNINGS_CXXFLAGS"
482
483
fi

484
485
486
487
488
489
490
491
492
493
494
495
496
## ------- ##
## Tools.  ##
## ------- ##

AC_ARG_ENABLE([tools],
              [AS_HELP_STRING([--enable-tools],
                              [enable tools])])
AM_CONDITIONAL([ENABLE_TOOLS], [test "x$enable_tools" = "xyes"])

# Ask for the creation of tools' Makefiles.
AC_CONFIG_FILES([milena/tools/Makefile])

# Flags for tools.
497
AC_ARG_VAR([TOOLS_CXXFLAGS], [C++ compiler flags for tools])
498
499
# We want fast binaries for tools.
if test "$GXX" = yes && test -z "$TOOLS_CXXFLAGS"; then
500
  TOOLS_CXXFLAGS="-O3 -DNDEBUG -ggdb $WARNINGS_CXXFLAGS"
501
502
503
fi


504
AC_OUTPUT