Continuing to iterate toward the right autoconf/make solution
[mediagoblin.git] / configure.ac
1 dnl configure.ac
2 dnl
3 dnl Copyright 2012, 2013 Brandon Invergo <brandon@invergo.net>
4 dnl 2014 MediaGoblin contributors (see MediaGoblin's AUTHORS)
5 dnl
6 dnl Copying and distribution of this file, with or without modification,
7 dnl are permitted in any medium without royalty provided the copyright
8 dnl notice and this notice are preserved. This file is offered as-is,
9 dnl without any warranty.
10
11 dnl#########
12 dnl README #
13 dnl#########
14 dnl
15 dnl This is a basic Autoconf configure.ac file for Python-based
16 dnl projects. It is not intended to be used as-is, but rather to be
17 dnl modified to the specific needs of the project.
18 dnl
19 dnl Lines prefixed with "dnl" are comments that are automatically
20 dnl removed by Autoconf/M4, thus they will not appear in the generated
21 dnl configure script (see the M4 documentation for more information).
22 dnl Such comments are used in this file to communicate information to
23 dnl you, the developer. In some cases, the comments contain extra
24 dnl macros that you might consider including in your configure script.
25 dnl If you wish to include them, simply remove the "dnl" from the
26 dnl beginning of the line.
27 dnl
28 dnl Lines prefixed with "#" are comments that will appear in the
29 dnl generated configure script. These comments are thus used to clarify
30 dnl to the user what is happening in that script
31 dnl
32 dnl Wherever pyconfigure-specific macros are used, extra comments are
33 dnl included to describe the macros.
34
35 dnl######################
36 dnl Package Information #
37 dnl######################
38
39 dnl----
40 dnl Initialize Autoconf with the package metadata
41 dnl The arguments have been set via the project's PKG-INFO file
42 dnl and correspond to:
43 dnl
44 dnl 1) package name (i.e. foo)
45 dnl 2) package version (i.e. 1.2)
46 dnl 3) bug/info/project email address (i.e. bug-foo@gnu.org)
47 dnl----
48 dnl
49 AC_INIT([mediagoblin], [0.4.0.dev], [cwebber@gnu.org])
50
51
52 dnl----
53 dnl Load macros from the m4/ directory. If you plan to write new
54 dnl macros, put them in files in this directory.
55 dnl----
56 dnl
57 AC_CONFIG_MACRO_DIR([m4])
58
59
60 dnl # The default prefix should be changed from /usr/local. Set it, as in
61 dnl # the documentation, to /srv/mediagoblin.example.org/mediagoblin/
62 dnl AC_PREFIX_DEFAULT([`pwd`])
63
64
65 dnl###########################
66 dnl Program/command support #
67 dnl###########################
68 dnl
69 dnl In this section, we check for the presence of important commands
70 dnl and programs.
71
72 dnl--PC_INIT----------------------------------------------------------
73 dnl This is the only required macro. Its primary function is to find
74 dnl a Python interpreter that is compatible with the package and set
75 dnl the PYTHON variable to hold its path. It can optionally take
76 dnl arguments to specify minimum and/or maximum versions. This is a
77 dnl convenience macro that combines the functionality of the macros
78 dnl PC_PROG_PYTHON and PC_PYTHON_VERIFY_VERSION
79 dnl PC_INIT: find an interpreter with a version between 2.0 and 3.3.99
80 dnl (in other words, up to and including any possible release
81 dnl in the 3.3 series)
82 dnl PC_INIT([MIN_VER], [MAX_VER]): Find an interpreter that is between
83 dnl the minimum and maximum version. If the min is in the 2.0
84 dnl series and the max is in the 3.0 series, non-existent
85 dnl releases (2.8 & 2.9) will be correctly skipped.
86 dnl----
87 dnl
88 dnl PC_INIT([2.7], [3.3.1])
89
90
91 dnl--PC_PROG_PYTHON---------------------------------------------------
92 dnl This macro provides a means of finding a Python interpreter.
93 dnl You may optionally pass it argument to pass a path to a binary to
94 dnl check for first. You may also pass a second and third argument to
95 dnl specify the minimum and maximum versions to check for. This works
96 dnl in a naive way by appending the major and minor release numbers to
97 dnl the binary name. By default, this will first check for a binary
98 dnl called "python" and then from there it will check for version-
99 dnl specific binaries (ie "python3", "python2.7") in decending version
100 dnl order. Thus, the highest version binary will be found first.
101 dnl----
102 dnl
103 dnl PC_PROG_PYTHON
104
105
106 dnl--PC_PYTHON_PROG_PYTHON_CONFIG-------------------------------------
107 dnl In order to use some of the other macros, you also need the
108 dnl python-config command, which will fall subject to the same problem
109 dnl of python3-config being preferred to python2-config. This macro
110 dnl will be automatically included if you use on of the macros that
111 dnl depends on it, so you normally don't have to call it. However, if
112 dnl you require a specific version, you can do something like the
113 dnl following example.
114 dnl----
115 dnl
116 PC_PYTHON_PROG_PYTHON_CONFIG([python2-config])
117 if [[ "x$PYTHON_CONFIG" == "x" ]]; then
118 PC_PYTHON_PROG_PYTHON_CONFIG([$PYTHON-config])
119 fi
120
121 dnl----
122 dnl With the following set of macros, we implement an option
123 dnl "--with-virtualenv", which the user can pass to the configure
124 dnl script in order to install to a Virtualenv (AC_ARG_WITH). If the
125 dnl option is specified by the user, then we check if the program is
126 dnl available, checking both for "virtualenv" and "virtualenv2"
127 dnl (AC_CHECK_PROGS)
128 dnl----
129 dnl
130 # Support doing development in a virtualenv via the --with-virtualenv
131 # configure flag
132 AC_ARG_WITH([virtualenv],
133 [AS_HELP_STRING([--without-virtualenv], [install to a Python virtualenv])],
134 [],
135 [with_virtualenv=yes])
136 AS_IF([test "x$with_virtualenv" != xno],
137 AC_CHECK_PROGS([VIRTUALENV], [virtualenv virtualenv3 virtualenv2], [no])
138 AS_IF([test "x$VIRTUALENV" = xno],
139 [AC_MSG_FAILURE(
140 [--with-virtualenv given but virtualenv could not be found])]),
141 AC_SUBST([VIRTUALENV], [no]))
142 AC_ARG_VAR([VIRTUALENV_FLAGS], [flags to pass to the virtualenv command])
143
144 dnl----
145 dnl If the program uses sphinx-build to build documentation, uncomment
146 dnl this to create a SPHINXBUILD variable in the Makefile pointing to
147 dnl the program. Thus, the user would specify
148 dnl SPHINXBUILD=/path/to/sphinx-build as an argument to the configure
149 dnl script. Since building the documentation should be optional, just
150 dnl print a warning. If the program uses some other documentation
151 dnl system, you can do something similar with it.
152 dnl----
153 dnl
154 # Check for sphinx-build
155 AC_CHECK_PROGS([SPHINXBUILD], [sphinx-build sphinx-build3 sphinx-build2], [no])
156 AS_IF([test "x$SPHINXBUILD" = xno],
157 AC_MSG_WARN(sphinx-build is required to build documentation))
158
159
160 dnl----
161 dnl These two are standard Autoconf macros which check for the
162 dnl presence of some programs that we will use in the Makefile.
163 dnl----
164 dnl
165 AC_PROG_MKDIR_P
166 AC_PROG_INSTALL
167
168 # Check for a supported database program
169 AC_PATH_PROG([SQLITE], [sqlite3])
170 AC_PATH_PROG([POSTGRES], [psql])
171 AS_IF([test "x$SQLITE" = x -a "x$POSTGRES" = "x"],
172 [AC_MSG_ERROR([SQLite or PostgreSQL is required])])
173
174
175 dnl#################################
176 dnl Python installation properties #
177 dnl#################################
178 dnl
179 dnl In this section, we test for various aspects of the Python
180 dnl installation on the user's computer.
181
182 dnl--PC_PYTHON_VERIFY_VERSION & PC_PYTHON_CHECK_VERSION----------------
183 dnl PC_PYTHON_VERIFY_VERSION is used to check if the version of the
184 dnl discovered Python binary meets some requirement. The first argument
185 dnl should be a Python-compatible numerical comparison operator (i.e.
186 dnl "==", "<", ">=", etc.). The second argument should be the version to
187 dnl test against. Finally, you may optionally provide actions to take if
188 dnl it does (3rd argument) or if it does not (4th argument) meet the
189 dnl requirement.
190 dnl
191 dnl PC_PYTHON_CHECK_VERSION simply fetches the version number of the
192 dnl Python interpreter stored in the PYTHON variable
193 dnl----
194 dnl
195 dnl PC_PYTHON_VERIFY_VERSION([>=], [2.7.1], [AC_MSG_RESULT([yes])],
196 dnl AC_MSG_FAILURE(Python 2 (python_min_ver+) is required))
197
198
199 dnl--PC_PYTHON_CHECK_PREFIX--------------------------------------------
200 dnl This macro finds out what Python thinks is the PREFIX
201 dnl (i.e. /usr) and stores it in PYTHON_PREFIX. You probably shouldn't
202 dnl use this and you should just stick to $prefix, but here it is
203 dnl anyway.
204 dnl----
205 dnl
206 dnl PC_PYTHON_CHECK_PREFIX
207
208
209 dnl--PC_PYTHON_CHECK_EXEC_PREFIX---------------------------------------
210 dnl The same as above but for $exec-prefix
211 dnl----
212 dnl
213 dnl PC_PYTHON_CHECK_EXEC_PREFIX
214
215
216 dnl--PC_PYTHON_CHECK_PLATFORM------------------------------------------
217 dnl This macro checks what platform Python thinks this is (ie
218 dnl "linux2") and stores it in PYTHON_PLATFORM
219 dnl----
220 dnl
221 dnl PC_PYTHON_CHECK_PLATFORM
222
223
224 dnl--PC_PYTHON_CHECK_SITE_DIR------------------------------------------
225 dnl This checks where Python packages are installed (usually
226 dnl /usr/lib/pythonX.Y/site-packages) and stores it in the variable
227 dnl pythondir.
228 dnl----
229 dnl
230 dnl PC_PYTHON_CHECK_SITE_DIR
231
232
233 dnl--PC_PYTHON_SITE_PACKAGE_DIR---------------------------------------
234 dnl This uses PYTHON_SITE_DIR to construct a directory for this
235 dnl project (ie $PYTHON_SITE_DIR/project_name) and stores it in
236 dnl pkgpythondir. This value is used by Automake for installing Python
237 dnl scripts. By default, this begins with $pythondir, unexpanded, to
238 dnl provide compatibility with GNU Makefile specifications, allowing
239 dnl the user to change the prefix from the commandline.
240 dnl----
241 dnl
242 PC_PYTHON_SITE_PACKAGE_DIR
243
244
245 dnl--PC_PYTHON_CHECK_EXEC_DIR------------------------------------------
246 dnl Same as PC_PYTHON_CHECK_SITE_DIR but for $exec-prefix. Stored in
247 dnl pyexecdir
248 dnl----
249 dnl
250 dnl PC_PYTHON_CHECK_EXEC_DIR
251
252 dnl--PC_PYTHON_EXEC_PACKAGE_DIR----------------------------------------
253 dnl Same as PC_PYTHON_SITE_PACKAGE_DIR but for $exec-prefix. Stored in
254 dnl pkgpyexecdir
255 dnl----
256 dnl
257 PC_PYTHON_EXEC_PACKAGE_DIR
258
259
260 dnl###############################
261 dnl Checking Python capabilities #
262 dnl###############################
263
264 dnl--PC_PYTHON_CHECK_MODULE([PYTHON-MODULE], [ACTION-IF-PRESENT],
265 dnl [ACTION-IF-ABSENT])
266 dnl This macro lets you check if a given Python module exists on the
267 dnl system.
268 dnl----
269 dnl
270 dnl PC_PYTHON_CHECK_MODULE([foo])
271
272
273 # Check for python-lxml module
274 PC_PYTHON_CHECK_MODULE([lxml], [],
275 [AC_MSG_ERROR([python-lxml is required])])
276
277 # Check for the Python Imaging Library
278 PC_PYTHON_CHECK_MODULE([Image], [],
279 [AC_MSG_ERROR([Python Imaging Library is required])])
280
281
282 dnl--PC_PYTHON_CHECK_FUNC([PYTHON-MODULE], [FUNCTION], [ARGS],
283 dnl [ACTION-IF-SUCCESSFUL], [ACTION-IF-FAIL])
284 dnl
285 dnl This macro lets you test if a given function, possibly contained
286 dnl in a given module, exists. If any exception is encountered when
287 dnl calling this function, the check will fail.
288 dnl----
289 dnl
290 dnl # test if Python library foo can do bar()
291 dnl PC_PYTHON_CHECK_FUNC([foo], [bar])
292
293
294 dnl Advanced notes:
295 dnl m4/python.m4 implements Python as a language in Autoconf. This
296 dnl means that you can use all the usual AC_LANG_* macros with Python
297 dnl and it will behave as expected. In particular, this means that you
298 dnl can run arbitrary Python code. For example:
299 dnl
300 dnl AC_LANG_PUSH(Python)[]
301 dnl AC_RUN_IFELSE([AC_LANG_PROGRAM([dnl
302 dnl # some code here
303 dnl import foo
304 dnl ], [dnl
305 dnl # some more code here
306 dnl foo.bar()
307 dnl ])], [ACTION-IF-SUCCESSFUL], [ACTION-IF-FAILED])
308 dnl AC_LANG_POP(Python)[]
309 dnl
310 dnl As usual, AC_LANG_PROGRAM takes two arguments, PROLOG code and
311 dnl MAIN code. The PROLOG code goes verbatim at the top of the file,
312 dnl while the MAIN code is embedded in an if __name__ == "__main__":
313 dnl block. Python's indentation rules complicate things, however. In
314 dnl particular, you must be sure that all of the code in MAIN is
315 dnl indented once by default. PROLOG code does not require this.
316
317
318 dnl##################################
319 dnl Python module build environment #
320 dnl##################################
321 dnl
322 dnl Here we check for necessary information for building Python modules
323 dnl written in C
324
325 dnl--PC_PYTHON_CHECK_INCLUDES------------------------------------------
326 dnl This macro figures out the include flags necessary for loading the
327 dnl Python headers (ie -I/usr/lib/python). The results are stored in
328 dnl PYTHON_INCLUDES
329 dnl----
330 dnl
331 dnl PC_PYTHON_CHECK_INCLUDES
332
333
334 dnl--PC_PYTHON_CHECK_HEADERS([ACTION-IF-PRESENT], [ACTION-IF-ABSENT])--
335 dnl Using the information found from PC_PYTHON_CHECK_INCLUDES, check
336 dnl to make sure that Python.h can be loaded. Note that if you use
337 dnl this, you don't strictly need to also include
338 dnl PC_PYTHON_CHECK_INCLUDES.
339 dnl----
340 dnl
341 dnl PC_PYTHON_CHECK_HEADERS(,[AC_MSG_ERROR(could not find Python headers)])
342
343
344 dnl--PC_PYTHON_CHECK_LIBS----------------------------------------------
345 dnl This checks what LIBS flags are necessary to use the Python
346 dnl libraries (ie -lpython). The results are stored in PYTHON_LIBS
347 dnl----
348 dnl
349 dnl PC_PYTHON_CHECK_LIBS
350
351
352 dnl--PC_PYTHON_TEST_LIBS([FUNCTION-TO-TEST], [ACTION-IF-PRESENT], [ACTION-IF-ABSENT])
353 dnl This checks whether the LIBS flag for libpython discovered with
354 dnl PC_PYTHON_CHECK_LIBS is loadable and if a given function can be
355 dnl found in the library. You may use this to test for the presence of
356 dnl features in the library.
357 dnl----
358 dnl
359 dnl PC_PYTHON_TEST_LIBS([PyObject_Print],,
360 dnl [AC_MSG_ERROR(The Python library could not be loaded)])
361 dnl # Add PYTHON_LIBS to LIBS
362 dnl LIBS="$LIBS $PYTHON_LIBS"
363
364
365 dnl--PC_PYTHON_CHECK_CFLAGS--------------------------------------------
366 dnl This macro checks what Python thinks are the proper CFLAGS to
367 dnl use and stores them in PYTHON_CFLAGS. Note that this info is only
368 dnl available for Python versions which include a python-config tool
369 dnl (2.5+).
370 dnl----
371 dnl
372 dnl PC_PYTHON_CHECK_CFLAGS
373 dnl # Add PYTHON_CFLAGS to CFLAGS
374 dnl CFLAGS="$CFLAGS $PYTHON_CFLAGS"
375
376
377 dnl--PC_PYTHON_CHECK_LDFLAGS-------------------------------------------
378 dnl The same as above but for LDFLAGS
379 dnl----
380 dnl
381 dnl PC_PYTHON_CHECK_LDFLAGS
382 dnl # Add PYTHON_LDFLAGS to LDFLAGS
383 dnl LDFLAGS="$LDFLAGS $PYTHON_LDFLAGS"
384
385
386 dnl--PC_PYTHON_CHECK_EXTENSION_SUFFIX----------------------------------
387 dnl This checks for what Python expects the suffix of extension
388 dnl modules to be (i.e. .cpython-32mu.so) and stores it in
389 dnl PYTHON_EXTENSION SUFFIX. This information is only available for
390 dnl Python 3+
391 dnl----
392 dnl
393 dnl PC_PYTHON_CHECK_EXTENSION_SUFFIX
394
395
396 dnl--PC_PYTHON_CHECK_ABI_FLAGS----------------------------------------
397 dnl This checks for the ABI flags used by Python (i.e. "mu") and
398 dnl stores it in PYTHON_ABI_FLAGS. This information is only available
399 dnl for Python 3+
400 dnl----
401 dnl
402 dnl PC_PYTHON_CHECK_ABI_FLAGS
403
404
405 dnl--MediaGoblin specific variables ----------------------------------
406
407
408 dnl#########
409 dnl Finish #
410 dnl#########
411
412 dnl Define the files to be configured
413 AC_CONFIG_FILES([Makefile])
414 AC_CONFIG_FILES([env], [chmod +x env])
415
416 dnl Generate config.status
417 AC_OUTPUT