autoconf: Add support for osmesa-only builds
[mesa.git] / configure.ac
1 dnl Process this file with autoconf to create configure.
2
3 AC_PREREQ(2.59)
4
5 dnl Versioning
6 dnl Make version number available to autoconf and configure
7 m4_define(mesa_major, 7)
8 m4_define(mesa_minor, 1)
9 m4_define(mesa_tiny, 0)
10 m4_define(mesa_version, [mesa_major().mesa_minor().mesa_tiny()])
11
12 AC_INIT(Mesa, mesa_version(), mesa3d@sourceforge.net)
13 AC_CONFIG_AUX_DIR(bin)
14 AC_CANONICAL_HOST
15
16 dnl Substitute the version number into shell variables
17 MESA_MAJOR=mesa_major()
18 MESA_MINOR=mesa_minor()
19 MESA_TINY=mesa_tiny()
20 AC_SUBST(MESA_MAJOR)
21 AC_SUBST(MESA_MINOR)
22 AC_SUBST(MESA_TINY)
23
24 dnl Check for progs
25 AC_PROG_CPP
26 AC_PROG_CC
27 AC_PROG_CXX
28 AC_PATH_PROG(MAKE, make)
29 AC_PATH_PROG(MKDEP, makedepend)
30 AC_PATH_PROG(SED, sed)
31 PKG_PROG_PKG_CONFIG()
32
33 dnl LIB_DIR - library basename
34 LIB_DIR=`echo $libdir | $SED 's%.*/%%'`
35 AC_SUBST(LIB_DIR)
36
37 dnl Cache LDFLAGS so we can add EXTRA_LIB_PATH and restore it later
38 _SAVE_LDFLAGS="$LDFLAGS"
39 AC_ARG_VAR(EXTRA_LIB_PATH,[Extra -L paths for the linker])
40 AC_SUBST(EXTRA_LIB_PATH)
41
42 dnl Cache CPPFLAGS so we can add *_INCLUDES and restore it later
43 _SAVE_CPPFLAGS="$CPPFLAGS"
44 AC_ARG_VAR(X11_INCLUDES,[Extra -I paths for X11 headers])
45 AC_SUBST(X11_INCLUDES)
46
47 dnl Compiler macros
48 DEFINES=""
49 AC_SUBST(DEFINES)
50 if test "x$GCC" = xyes; then
51 DEFINES="-D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_BSD_SOURCE"
52 fi
53 case "$host_os" in
54 linux*)
55 DEFINES="$DEFINES -D_SVID_SOURCE -D_GNU_SOURCE -DPTHREADS -DHAVE_POSIX_MEMALIGN"
56 ;;
57 esac
58
59 dnl Add flags for gcc and g++
60 if test "x$GCC" = xyes; then
61 CFLAGS="$CFLAGS -Wall -Wmissing-prototypes -std=c99 -ffast-math"
62 fi
63 if test "x$GXX" = xyes; then
64 CXXFLAGS="$CXXFLAGS -Wall"
65 fi
66
67 dnl These should be unnecessary, but let the user set them if they want
68 AC_ARG_VAR(OPT_FLAGS, [Additional optimization flags for the compiler.
69 Default is to use CFLAGS.])
70 AC_ARG_VAR(ARCH_FLAGS, [Additional architecture specific flags for the
71 compiler. Default is to use CFLAGS.])
72 AC_SUBST(OPT_FLAGS)
73 AC_SUBST(ARCH_FLAGS)
74
75 dnl
76 dnl library names
77 dnl
78 GL_LIB_NAME='lib$(GL_LIB).so'
79 GLU_LIB_NAME='lib$(GLU_LIB).so'
80 GLUT_LIB_NAME='lib$(GLUT_LIB).so'
81 GLW_LIB_NAME='lib$(GLW_LIB).so'
82 OSMESA_LIB_NAME='lib$(OSMESA_LIB).so'
83 AC_SUBST(GL_LIB_NAME)
84 AC_SUBST(GLU_LIB_NAME)
85 AC_SUBST(GLUT_LIB_NAME)
86 AC_SUBST(GLW_LIB_NAME)
87 AC_SUBST(OSMESA_LIB_NAME)
88
89 dnl
90 dnl Driver configuration. Options are x11 (Xlib), dri and osmesa right now.
91 dnl More later: directfb, fbdev, ...
92 dnl
93 AC_ARG_WITH(driver,
94 [AS_HELP_STRING([--with-driver=DRIVER],
95 [driver for Mesa: x11,dri,osmesa @<:@default=x11@:>@])],
96 mesa_driver="$withval",
97 mesa_driver="x11")
98 dnl Check for valid option
99 case "x$mesa_driver" in
100 xx11|xdri|xosmesa)
101 ;;
102 *)
103 AC_MSG_ERROR([Driver '$mesa_driver' is not a valid option])
104 ;;
105 esac
106
107 dnl
108 dnl Driver specific build directories
109 dnl
110 SRC_DIRS="mesa"
111 GLU_DIRS="sgi"
112 DRI_DIRS=""
113 WINDOW_SYSTEM=""
114 case "$mesa_driver" in
115 x11)
116 DRIVER_DIRS="x11"
117 ;;
118 dri)
119 SRC_DIRS="glx/x11 $SRC_DIRS"
120 DRIVER_DIRS="dri"
121 WINDOW_SYSTEM="dri"
122 ;;
123 osmesa)
124 DRIVER_DIRS="osmesa"
125 ;;
126 esac
127 AC_SUBST(SRC_DIRS)
128 AC_SUBST(GLU_DIRS)
129 AC_SUBST(DRIVER_DIRS)
130 AC_SUBST(WINDOW_SYSTEM)
131
132 dnl
133 dnl Find out if X is available. The variables have_x or no_x will be
134 dnl set and used later in the driver setups
135 dnl
136 if test -n "$PKG_CONFIG"; then
137 AC_MSG_CHECKING([pkg-config files for X11 are available])
138 if $PKG_CONFIG --exists x11; then
139 x11_pkgconfig=yes
140 have_x=yes
141 AC_MSG_RESULT(yes)
142 else
143 x11_pkgconfig=no
144 no_x=yes
145 AC_MSG_RESULT(no)
146 fi
147 else
148 x11_pkgconfig=no
149 fi
150 dnl Use the autoconf macro if no pkg-config files
151 if test "$x11_pkgconfig" = no; then
152 AC_PATH_XTRA
153 fi
154
155 dnl We need X for xlib and dri, so bomb now if it's not found
156 case "$mesa_driver" in
157 x11|dri)
158 if test "$no_x" = yes; then
159 AC_MSG_ERROR([X11 development libraries needed for $mesa_driver driver])
160 fi
161 ;;
162 esac
163
164 dnl
165 dnl libGL configuration per driver
166 dnl
167 case "$mesa_driver" in
168 x11)
169 if test "$x11_pkgconfig" = yes; then
170 PKG_CHECK_MODULES(X11GL, x11 xext)
171 X11_INCLUDES="$X11_INCLUDES $X11GL_CFLAGS"
172 GL_LIB_DEPS="$X11GL_LIBS"
173 else
174 # should check these...
175 X11_INCLUDES="$X11_INCLUDES $X_CFLAGS"
176 GL_LIB_DEPS="$X_LIBS -lX11 -lXext"
177 fi
178 GL_LIB_DEPS="$GL_LIB_DEPS -lm -lpthread"
179 ;;
180 dri)
181 # Check for libdrm
182 PKG_CHECK_MODULES(LIBDRM, libdrm)
183
184 # find the DRI deps for libGL
185 if test "$x11_pkgconfig" = yes; then
186 PKG_CHECK_MODULES(DRIGL, x11 xext xxf86vm xdamage xfixes)
187 X11_INCLUDES="$X11_INCLUDES $DRIGL_CFLAGS"
188 GL_LIB_DEPS="$DRIGL_LIBS"
189 else
190 # should check these...
191 X11_INCLUDES="$X11_INCLUDES $X_CFLAGS"
192 GL_LIB_DEPS="$X_LIBS -lX11 -lXext -lXxf86vm -lXdamage -lXfixes"
193 fi
194
195 # need DRM libs, -lpthread, etc.
196 GL_LIB_DEPS="$GL_LIB_DEPS $LIBDRM_LIBS -lm -lpthread -ldl"
197 ;;
198 osmesa)
199 # No libGL for osmesa
200 GL_LIB_DEPS=""
201 ;;
202 esac
203 AC_SUBST(GL_LIB_DEPS)
204
205 dnl
206 dnl More X11 setup
207 dnl
208 if test "$mesa_driver" = x11; then
209 DEFINES="$DEFINES -DUSE_XSHM"
210 fi
211
212 dnl
213 dnl More DRI setup
214 dnl
215 AC_ARG_ENABLE(glx-tls,
216 [AS_HELP_STRING([--enable-glx-tls],
217 [enable TLS support in GLX @<:@default=no@:>@])],
218 GLX_USE_TLS="$enableval",
219 GLX_USE_TLS=no)
220 dnl Directory for DRI drivers
221 AC_ARG_WITH(dridriverdir,
222 [AS_HELP_STRING([--with-dridriverdir=DIR],
223 [directory for the DRI drivers @<:@/usr/X11R6/lib/modules/dri@:>@])],
224 DRI_DRIVER_INSTALL_DIR="$withval",
225 DRI_DRIVER_INSTALL_DIR='/usr/X11R6/lib/modules/dri')
226 AC_SUBST(DRI_DRIVER_INSTALL_DIR)
227 dnl Direct rendering or just indirect rendering
228 AC_ARG_ENABLE(driglx-direct,
229 [AS_HELP_STRING([--enable-driglx-direct],
230 [enable direct rendering in GLX for DRI @<:@default=yes@:>@])],
231 driglx_direct="$enableval",
232 driglx_direct="yes")
233
234 dnl Just default to no EGL for now
235 USING_EGL=0
236 AC_SUBST(USING_EGL)
237
238 dnl Set DRI_DIRS, DEFINES and LIB_DEPS
239 if test "$mesa_driver" = dri; then
240 # Use TLS in GLX?
241 if test "x$GLX_USE_TLS" = xyes; then
242 DEFINES="$DEFINES -DGLX_USE_TLS -DPTHREADS"
243 fi
244
245 if test "x$USING_EGL" = x1; then
246 PROGRAM_DIRS="egl"
247 fi
248
249 # Platform specific settings and drivers to build
250 case "$host_os" in
251 linux*)
252 DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER"
253 DEFINES="$DEFINES -DGLX_INDIRECT_RENDERING -DHAVE_ALIAS"
254 if test "x$driglx_direct" = xyes; then
255 DEFINES="$DEFINES -DGLX_DIRECT_RENDERING"
256 fi
257
258 case "$host_cpu" in
259 i*86)
260 DRI_DIRS="i810 i915tex i915 i965 mach64 mga r128 r200 r300 \
261 radeon s3v savage sis tdfx trident unichrome ffb"
262 ;;
263 x86_64)
264 DRI_DIRS="i915tex i915 i965 mach64 mga r128 r200 radeon tdfx \
265 unichrome savage r300"
266 ;;
267 powerpc*)
268 DRI_DIRS="mach64 r128 r200 r300 radeon tdfx"
269 ;;
270 esac
271 ;;
272 freebsd*)
273 DEFINES="$DEFINES -DPTHREADS -DUSE_EXTERNAL_DXTN_LIB=1"
274 DEFINES="$DEFINES -DIN_DRI_DRIVER -DHAVE_ALIAS"
275 DEFINES="$DEFINES -DGLX_INDIRECT_RENDERING"
276 if test "x$driglx_direct" = xyes; then
277 DEFINES="$DEFINES -DGLX_DIRECT_RENDERING"
278 fi
279 if test "x$GXX" = xyes; then
280 CXXFLAGS="$CXXFLAGS -ansi -pedantic"
281 fi
282
283 DRI_DIRS="i810 i915 i965 mach64 mga r128 r200 r300 radeon tdfx \
284 unichrome savage sis"
285 ;;
286 esac
287 DRI_DIRS=`echo "$DRI_DIRS" | $SED 's/ */ /g'`
288
289 # Check for expat
290 EXPAT_INCLUDES=""
291 EXPAT_LIB=-lexpat
292 AC_ARG_WITH(expat, AS_HELP_STRING([--with-expat=DIR],
293 [expat install directory]),[
294 EXPAT_INCLUDES="-I$withval/include"
295 CPPFLAGS="$CPPFLAGS $EXPAT_INCLUDES"
296 LDFLAGS="$LDFLAGS -L$withval/$LIB_DIR"
297 EXPAT_LIB="-L$withval/$LIB_DIR -lexpat"
298 ])
299 AC_CHECK_HEADER(expat.h,,AC_MSG_ERROR([Expat required for DRI.]))
300 AC_CHECK_LIB(expat, XML_ParserCreate,,
301 AC_MSG_ERROR([Expat required for DRI.]))
302
303 # put all the necessary libs together
304 DRI_LIB_DEPS="$LIBDRM_LIBS $EXPAT_LIB -lm -lpthread -ldl"
305 fi
306 AC_SUBST(DRI_DIRS)
307 AC_SUBST(EXPAT_INCLUDES)
308 AC_SUBST(DRI_LIB_DEPS)
309
310 dnl
311 dnl OSMesa configuration
312 dnl
313 if test "$mesa_driver" = x11; then
314 default_x11_osmesa=yes
315 else
316 default_x11_osmesa=no
317 fi
318 AC_ARG_ENABLE(x11-osmesa,
319 [AS_HELP_STRING([--enable-x11-osmesa],
320 [enable OSMesa on X11 libGL @<:@default=yes for x11 driver@:>@])],
321 x11_osmesa="$enableval",
322 x11_osmesa="$default_x11_osmesa")
323 if test "x$x11_osmesa" = xyes; then
324 if test "$mesa_driver" = x11; then
325 DRIVER_DIRS="$DRIVER_DIRS osmesa"
326 else
327 AC_MSG_ERROR([Can only enable OSMesa on libGL for X11])
328 fi
329 fi
330
331 case "$mesa_driver" in
332 osmesa)
333 OSMESA_LIB_DEPS="-lm -lpthread"
334 OSMESA_MESA_DEPS=""
335 ;;
336 *)
337 # Link OSMesa to libGL otherwise
338 OSMESA_LIB_DEPS=""
339 OSMESA_MESA_DEPS='-l$(GL_LIB)'
340 ;;
341 esac
342 AC_SUBST(OSMESA_LIB_DEPS)
343 AC_SUBST(OSMESA_MESA_DEPS)
344
345 dnl
346 dnl GLU configuration
347 dnl
348 AC_ARG_ENABLE(glu,
349 [AS_HELP_STRING([--enable-glu],
350 [enable OpenGL Utility library @<:@default=yes@:>@])],
351 enable_glu="$enableval",
352 enable_glu=yes)
353 if test "x$enable_glu" = xyes; then
354 SRC_DIRS="$SRC_DIRS glu"
355
356 case "$mesa_driver" in
357 osmesa)
358 # If GLU is available, we can build the osdemos
359 PROGRAM_DIRS="$PROGRAM_DIRS osdemos"
360
361 # Link libGLU to libOSMesa instead of libGL
362 GLU_LIB_DEPS=""
363 GLU_MESA_DEPS='-l$(OSMESA_LIB)'
364 ;;
365 *)
366 # If GLU is available, we can build the xdemos
367 PROGRAM_DIRS="$PROGRAM_DIRS xdemos"
368
369 GLU_LIB_DEPS="-lm"
370 GLU_MESA_DEPS='-l$(GL_LIB)'
371 ;;
372 esac
373 fi
374 AC_SUBST(GLU_LIB_DEPS)
375 AC_SUBST(GLU_MESA_DEPS)
376
377 dnl
378 dnl GLw configuration
379 dnl
380 AC_ARG_ENABLE(glw,
381 [AS_HELP_STRING([--enable-glw],
382 [enable Xt/Motif widget library @<:@default=yes@:>@])],
383 enable_glw="$enableval",
384 enable_glw=yes)
385 dnl Don't build GLw on osmesa
386 if test "x$enable_glw" = xyes && test "$mesa_driver" = osmesa; then
387 AC_MSG_WARN([Disabling GLw since the driver is OSMesa])
388 enable_glw=no
389 fi
390 if test "x$enable_glw" = xyes; then
391 SRC_DIRS="$SRC_DIRS glw"
392 if test "$x11_pkgconfig" = yes; then
393 PKG_CHECK_MODULES(GLW, x11 xt)
394 GLW_LIB_DEPS="$GLW_LIBS"
395 else
396 # should check these...
397 GLW_LIB_DEPS="$X_LIBS -lX11 -lXt"
398 fi
399
400 GLW_MESA_DEPS='-l$(GL_LIB)'
401 fi
402 AC_SUBST(GLW_LIB_DEPS)
403 AC_SUBST(GLW_MESA_DEPS)
404
405 dnl
406 dnl GLUT configuration
407 dnl
408 if test -f "$srcdir/include/GL/glut.h"; then
409 default_glut=yes
410 else
411 default_glut=no
412 fi
413 AC_ARG_ENABLE(glut,
414 [AS_HELP_STRING([--enable-glut],
415 [enable GLUT library @<:@default=yes if source available@:>@])],
416 enable_glut="$enableval",
417 enable_glut="$default_glut")
418
419 dnl Can't build glut if GLU not available
420 if test "x$enable_glu$enable_glut" = xnoyes; then
421 AC_MSG_WARN([Disabling glut since GLU is disabled])
422 enable_glut=no
423 fi
424 dnl Don't build glut on osmesa
425 if test "x$enable_glut" = xyes && test "$mesa_driver" = osmesa; then
426 AC_MSG_WARN([Disabling glut since the driver is OSMesa])
427 enable_glut=no
428 fi
429
430 if test "x$enable_glut" = xyes; then
431 SRC_DIRS="$SRC_DIRS glut/glx"
432 GLUT_CFLAGS=""
433 if test "x$GCC" = xyes; then
434 GLUT_CFLAGS="-fexceptions"
435 fi
436 if test "$x11_pkgconfig" = yes; then
437 PKG_CHECK_MODULES(GLUT, x11 xmu xt xi)
438 GLUT_LIB_DEPS="$GLUT_LIBS"
439 else
440 # should check these...
441 GLUT_LIB_DEPS="$X_LIBS -lX11 -lXmu -lXt -lXi"
442 fi
443 GLUT_LIB_DEPS="$GLUT_LIB_DEPS -lm"
444
445 # If glut is available, we can build most programs
446 PROGRAM_DIRS="$PROGRAM_DIRS demos redbook samples glsl"
447
448 GLUT_MESA_DEPS='-l$(GLU_LIB) -l$(GL_LIB)'
449 fi
450 AC_SUBST(GLUT_LIB_DEPS)
451 AC_SUBST(GLUT_MESA_DEPS)
452 AC_SUBST(GLUT_CFLAGS)
453
454 dnl
455 dnl Program library dependencies
456 dnl Only libm is added here if necessary as the libraries should
457 dnl be pulled in by the linker
458 dnl
459 if test "x$APP_LIB_DEPS" = x; then
460 APP_LIB_DEPS="-lm"
461 fi
462 AC_SUBST(APP_LIB_DEPS)
463 AC_SUBST(PROGRAM_DIRS)
464
465 dnl Arch/platform-specific settings
466 PIC_FLAGS=""
467 ASM_FLAGS=""
468 ASM_SOURCES=""
469 ASM_API=""
470 AC_SUBST(PIC_FLAGS)
471 AC_SUBST(ASM_FLAGS)
472 AC_SUBST(ASM_SOURCES)
473 AC_SUBST(ASM_API)
474 case "$host_os" in
475 linux*)
476 PIC_FLAGS="-fPIC"
477 case "$host_cpu" in
478 i*86)
479 ASM_FLAGS="-DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM"
480 ASM_SOURCES='$(X86_SOURCES)'
481 ASM_API='$(X86_API)'
482 ;;
483 x86_64)
484 ASM_FLAGS="-DUSE_X86_64_ASM"
485 ASM_SOURCES='$(X86-64_SOURCES)'
486 ASM_API='$(X86-64_API)'
487 ;;
488 powerpc)
489 ASM_FLAGS="-DUSE_PPC_ASM -DUSE_VMX_ASM"
490 ASM_SOURCES='$(PPC_SOURCES)'
491 ;;
492 esac
493 ;;
494 freebsd*)
495 PIC_FLAGS="-fPIC"
496 case "$host_os" in
497 i*86)
498 PIC_FLAGS=""
499 ASM_FLAGS="-DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM"
500 ASM_SOURCES='$(X86_SOURCES)'
501 ASM_API='$(X86_API)'
502 ;;
503 x86_64)
504 ASM_FLAGS="-DUSE_X86_64_ASM"
505 ASM_SOURCES='$(X86-64_SOURCES)'
506 ASM_API='$(X86-64_API)'
507 ;;
508 esac
509 ;;
510 esac
511
512 dnl Restore LDFLAGS and CPPFLAGS
513 LDFLAGS="$_SAVE_LDFLAGS"
514 CPPFLAGS="$_SAVE_CPPFLAGS"
515
516 dnl Substitute the config
517 AC_OUTPUT([configs/autoconf])
518
519 echo ""
520 echo " Run 'make autoconf' to build Mesa"
521 echo ""