autoconf: Add support for shared DRI build on linux and freebsd
[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) and dri right now.
91 dnl More later: osmesa, directfb, fbdev, ...
92 dnl
93 AC_ARG_WITH(driver,
94 [AS_HELP_STRING([--with-driver=DRIVER],
95 [driver for Mesa: x11,dri @<:@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)
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 esac
124 AC_SUBST(SRC_DIRS)
125 AC_SUBST(GLU_DIRS)
126 AC_SUBST(DRIVER_DIRS)
127 AC_SUBST(WINDOW_SYSTEM)
128
129 dnl
130 dnl Find out if X is available. The variables have_x or no_x will be
131 dnl set and used later in the driver setups
132 dnl
133 if test -n "$PKG_CONFIG"; then
134 AC_MSG_CHECKING([pkg-config files for X11 are available])
135 if $PKG_CONFIG --exists x11; then
136 x11_pkgconfig=yes
137 have_x=yes
138 AC_MSG_RESULT(yes)
139 else
140 x11_pkgconfig=no
141 no_x=yes
142 AC_MSG_RESULT(no)
143 fi
144 else
145 x11_pkgconfig=no
146 fi
147 dnl Use the autoconf macro if no pkg-config files
148 if test "$x11_pkgconfig" = no; then
149 AC_PATH_XTRA
150 fi
151
152 dnl We need X for xlib and dri, so bomb now if it's not found
153 case "$mesa_driver" in
154 x11|dri)
155 if test "$no_x" = yes; then
156 AC_MSG_ERROR([X11 development libraries needed for $mesa_driver driver])
157 fi
158 ;;
159 esac
160
161 dnl
162 dnl libGL configuration per driver
163 dnl
164 case "$mesa_driver" in
165 x11)
166 if test "$x11_pkgconfig" = yes; then
167 PKG_CHECK_MODULES(X11GL, x11 xext)
168 X11_INCLUDES="$X11_INCLUDES $X11GL_CFLAGS"
169 GL_LIB_DEPS="$X11GL_LIBS"
170 else
171 # should check these...
172 X11_INCLUDES="$X11_INCLUDES $X_CFLAGS"
173 GL_LIB_DEPS="$X_LIBS -lX11 -lXext"
174 fi
175 GL_LIB_DEPS="$GL_LIB_DEPS -lm -lpthread"
176 ;;
177 dri)
178 # Check for libdrm
179 PKG_CHECK_MODULES(LIBDRM, libdrm)
180
181 # find the DRI deps for libGL
182 if test "$x11_pkgconfig" = yes; then
183 PKG_CHECK_MODULES(DRIGL, x11 xext xxf86vm xdamage xfixes)
184 X11_INCLUDES="$X11_INCLUDES $DRIGL_CFLAGS"
185 GL_LIB_DEPS="$DRIGL_LIBS"
186 else
187 # should check these...
188 X11_INCLUDES="$X11_INCLUDES $X_CFLAGS"
189 GL_LIB_DEPS="$X_LIBS -lX11 -lXext -lXxf86vm -lXdamage -lXfixes"
190 fi
191
192 # need DRM libs, -lpthread, etc.
193 GL_LIB_DEPS="$GL_LIB_DEPS $LIBDRM_LIBS -lm -lpthread -ldl"
194 ;;
195 esac
196 AC_SUBST(GL_LIB_DEPS)
197
198 dnl
199 dnl More X11 setup
200 dnl
201 if test "$mesa_driver" = x11; then
202 DEFINES="$DEFINES -DUSE_XSHM"
203 fi
204
205 dnl
206 dnl More DRI setup
207 dnl
208 AC_ARG_ENABLE(glx-tls,
209 [AS_HELP_STRING([--enable-glx-tls],
210 [enable TLS support in GLX @<:@default=no@:>@])],
211 GLX_USE_TLS="$enableval",
212 GLX_USE_TLS=no)
213 dnl Directory for DRI drivers
214 AC_ARG_WITH(dridriverdir,
215 [AS_HELP_STRING([--with-dridriverdir=DIR],
216 [directory for the DRI drivers @<:@/usr/X11R6/lib/modules/dri@:>@])],
217 DRI_DRIVER_INSTALL_DIR="$withval",
218 DRI_DRIVER_INSTALL_DIR='/usr/X11R6/lib/modules/dri')
219 AC_SUBST(DRI_DRIVER_INSTALL_DIR)
220 dnl Direct rendering or just indirect rendering
221 AC_ARG_ENABLE(driglx-direct,
222 [AS_HELP_STRING([--enable-driglx-direct],
223 [enable direct rendering in GLX for DRI @<:@default=yes@:>@])],
224 driglx_direct="$enableval",
225 driglx_direct="yes")
226
227 dnl Just default to no EGL for now
228 USING_EGL=0
229 AC_SUBST(USING_EGL)
230
231 dnl Set DRI_DIRS, DEFINES and LIB_DEPS
232 if test "$mesa_driver" = dri; then
233 # Use TLS in GLX?
234 if test "x$GLX_USE_TLS" = xyes; then
235 DEFINES="$DEFINES -DGLX_USE_TLS -DPTHREADS"
236 fi
237
238 if test "x$USING_EGL" = x1; then
239 PROGRAM_DIRS="egl"
240 fi
241
242 # Platform specific settings and drivers to build
243 case "$host_os" in
244 linux*)
245 DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER"
246 DEFINES="$DEFINES -DGLX_INDIRECT_RENDERING -DHAVE_ALIAS"
247 if test "x$driglx_direct" = xyes; then
248 DEFINES="$DEFINES -DGLX_DIRECT_RENDERING"
249 fi
250
251 case "$host_cpu" in
252 i*86)
253 DRI_DIRS="i810 i915tex i915 i965 mach64 mga r128 r200 r300 \
254 radeon s3v savage sis tdfx trident unichrome ffb"
255 ;;
256 x86_64)
257 DRI_DIRS="i915tex i915 i965 mach64 mga r128 r200 radeon tdfx \
258 unichrome savage r300"
259 ;;
260 powerpc*)
261 DRI_DIRS="mach64 r128 r200 r300 radeon tdfx"
262 ;;
263 esac
264 ;;
265 freebsd*)
266 DEFINES="$DEFINES -DPTHREADS -DUSE_EXTERNAL_DXTN_LIB=1"
267 DEFINES="$DEFINES -DIN_DRI_DRIVER -DHAVE_ALIAS"
268 DEFINES="$DEFINES -DGLX_INDIRECT_RENDERING"
269 if test "x$driglx_direct" = xyes; then
270 DEFINES="$DEFINES -DGLX_DIRECT_RENDERING"
271 fi
272 if test "x$GXX" = xyes; then
273 CXXFLAGS="$CXXFLAGS -ansi -pedantic"
274 fi
275
276 DRI_DIRS="i810 i915 i965 mach64 mga r128 r200 r300 radeon tdfx \
277 unichrome savage sis"
278 ;;
279 esac
280 DRI_DIRS=`echo "$DRI_DIRS" | $SED 's/ */ /g'`
281
282 # Check for expat
283 EXPAT_INCLUDES=""
284 EXPAT_LIB=-lexpat
285 AC_ARG_WITH(expat, AS_HELP_STRING([--with-expat=DIR],
286 [expat install directory]),[
287 EXPAT_INCLUDES="-I$withval/include"
288 CPPFLAGS="$CPPFLAGS $EXPAT_INCLUDES"
289 LDFLAGS="$LDFLAGS -L$withval/$LIB_DIR"
290 EXPAT_LIB="-L$withval/$LIB_DIR -lexpat"
291 ])
292 AC_CHECK_HEADER(expat.h,,AC_MSG_ERROR([Expat required for DRI.]))
293 AC_CHECK_LIB(expat, XML_ParserCreate,,
294 AC_MSG_ERROR([Expat required for DRI.]))
295
296 # put all the necessary libs together
297 DRI_LIB_DEPS="$LIBDRM_LIBS $EXPAT_LIB -lm -lpthread -ldl"
298 fi
299 AC_SUBST(DRI_DIRS)
300 AC_SUBST(EXPAT_INCLUDES)
301 AC_SUBST(DRI_LIB_DEPS)
302
303 dnl
304 dnl OSMesa configuration
305 dnl
306 if test "$mesa_driver" = x11; then
307 DRIVER_DIRS="$DRIVER_DIRS osmesa"
308 fi
309 OSMESA_LIB_DEPS=""
310 OSMESA_MESA_DEPS='-l$(GL_LIB)'
311 AC_SUBST(OSMESA_LIB_DEPS)
312 AC_SUBST(OSMESA_MESA_DEPS)
313
314 dnl
315 dnl GLU configuration
316 dnl
317 AC_ARG_ENABLE(glu,
318 [AS_HELP_STRING([--enable-glu],
319 [enable OpenGL Utility library @<:@default=yes@:>@])],
320 enable_glu="$enableval",
321 enable_glu=yes)
322 if test "x$enable_glu" = xyes; then
323 SRC_DIRS="$SRC_DIRS glu"
324
325 # If GLU is available, we can build some programs
326 PROGRAM_DIRS="$PROGRAM_DIRS xdemos"
327
328 GLU_LIB_DEPS="-lm"
329 GLU_MESA_DEPS='-l$(GL_LIB)'
330 fi
331 AC_SUBST(GLU_LIB_DEPS)
332 AC_SUBST(GLU_MESA_DEPS)
333
334 dnl
335 dnl GLw configuration
336 dnl
337 AC_ARG_ENABLE(glw,
338 [AS_HELP_STRING([--enable-glw],
339 [enable Xt/Motif widget library @<:@default=yes@:>@])],
340 enable_glw="$enableval",
341 enable_glw=yes)
342 if test "x$enable_glw" = xyes; then
343 SRC_DIRS="$SRC_DIRS glw"
344 if test "$x11_pkgconfig" = yes; then
345 PKG_CHECK_MODULES(GLW, x11 xt)
346 GLW_LIB_DEPS="$GLW_LIBS"
347 else
348 # should check these...
349 GLW_LIB_DEPS="$X_LIBS -lX11 -lXt"
350 fi
351
352 GLW_MESA_DEPS='-l$(GL_LIB)'
353 fi
354 AC_SUBST(GLW_LIB_DEPS)
355 AC_SUBST(GLW_MESA_DEPS)
356
357 dnl
358 dnl GLUT configuration
359 dnl
360 if test -f "$srcdir/include/GL/glut.h"; then
361 default_glut=yes
362 else
363 default_glut=no
364 fi
365 AC_ARG_ENABLE(glut,
366 [AS_HELP_STRING([--enable-glut],
367 [enable GLUT library @<:@default=yes if source available@:>@])],
368 enable_glut="$enableval",
369 enable_glut="$default_glut")
370
371 dnl Can't build glut if GLU not available
372 if test "x$enable_glu$enable_glut" = xnoyes; then
373 AC_MSG_WARN([Disabling glut since GLU is disabled])
374 enable_glut=no
375 fi
376 if test "x$enable_glut" = xyes; then
377 SRC_DIRS="$SRC_DIRS glut/glx"
378 GLUT_CFLAGS=""
379 if test "x$GCC" = xyes; then
380 GLUT_CFLAGS="-fexceptions"
381 fi
382 if test "$x11_pkgconfig" = yes; then
383 PKG_CHECK_MODULES(GLUT, x11 xmu xt xi)
384 GLUT_LIB_DEPS="$GLUT_LIBS"
385 else
386 # should check these...
387 GLUT_LIB_DEPS="$X_LIBS -lX11 -lXmu -lXt -lXi"
388 fi
389 GLUT_LIB_DEPS="$GLUT_LIB_DEPS -lm"
390
391 # If glut is available, we can build most programs
392 PROGRAM_DIRS="$PROGRAM_DIRS demos redbook samples glsl"
393
394 GLUT_MESA_DEPS='-l$(GLU_LIB) -l$(GL_LIB)'
395 fi
396 AC_SUBST(GLUT_LIB_DEPS)
397 AC_SUBST(GLUT_MESA_DEPS)
398 AC_SUBST(GLUT_CFLAGS)
399
400 dnl
401 dnl Program library dependencies
402 dnl Only libm is added here if necessary as the libraries should
403 dnl be pulled in by the linker
404 dnl
405 if test "x$APP_LIB_DEPS" = x; then
406 APP_LIB_DEPS="-lm"
407 fi
408 AC_SUBST(APP_LIB_DEPS)
409 AC_SUBST(PROGRAM_DIRS)
410
411 dnl Arch/platform-specific settings
412 PIC_FLAGS=""
413 ASM_FLAGS=""
414 ASM_SOURCES=""
415 ASM_API=""
416 AC_SUBST(PIC_FLAGS)
417 AC_SUBST(ASM_FLAGS)
418 AC_SUBST(ASM_SOURCES)
419 AC_SUBST(ASM_API)
420 case "$host_os" in
421 linux*)
422 PIC_FLAGS="-fPIC"
423 case "$host_cpu" in
424 i*86)
425 ASM_FLAGS="-DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM"
426 ASM_SOURCES='$(X86_SOURCES)'
427 ASM_API='$(X86_API)'
428 ;;
429 x86_64)
430 ASM_FLAGS="-DUSE_X86_64_ASM"
431 ASM_SOURCES='$(X86-64_SOURCES)'
432 ASM_API='$(X86-64_API)'
433 ;;
434 powerpc)
435 ASM_FLAGS="-DUSE_PPC_ASM -DUSE_VMX_ASM"
436 ASM_SOURCES='$(PPC_SOURCES)'
437 ;;
438 esac
439 ;;
440 freebsd*)
441 PIC_FLAGS="-fPIC"
442 case "$host_os" in
443 i*86)
444 PIC_FLAGS=""
445 ASM_FLAGS="-DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM"
446 ASM_SOURCES='$(X86_SOURCES)'
447 ASM_API='$(X86_API)'
448 ;;
449 x86_64)
450 ASM_FLAGS="-DUSE_X86_64_ASM"
451 ASM_SOURCES='$(X86-64_SOURCES)'
452 ASM_API='$(X86-64_API)'
453 ;;
454 esac
455 ;;
456 esac
457
458 dnl Restore LDFLAGS and CPPFLAGS
459 LDFLAGS="$_SAVE_LDFLAGS"
460 CPPFLAGS="$_SAVE_CPPFLAGS"
461
462 dnl Substitute the config
463 AC_OUTPUT([configs/autoconf])
464
465 echo ""
466 echo " Run 'make autoconf' to build Mesa"
467 echo ""