xorg-macros.m4.in revision c1197e68
1ffab5952Smrgdnl @configure_input@
2ffab5952Smrgdnl
3ffab5952Smrgdnl Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
443c16309Smrgdnl
5ffab5952Smrgdnl Permission is hereby granted, free of charge, to any person obtaining a
6ffab5952Smrgdnl copy of this software and associated documentation files (the "Software"),
7ffab5952Smrgdnl to deal in the Software without restriction, including without limitation
8ffab5952Smrgdnl the rights to use, copy, modify, merge, publish, distribute, sublicense,
9ffab5952Smrgdnl and/or sell copies of the Software, and to permit persons to whom the
10ffab5952Smrgdnl Software is furnished to do so, subject to the following conditions:
11ffab5952Smrgdnl
12ffab5952Smrgdnl The above copyright notice and this permission notice (including the next
13ffab5952Smrgdnl paragraph) shall be included in all copies or substantial portions of the
14ffab5952Smrgdnl Software.
15ffab5952Smrgdnl
16ffab5952Smrgdnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17ffab5952Smrgdnl IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18ffab5952Smrgdnl FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19ffab5952Smrgdnl THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20ffab5952Smrgdnl LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21ffab5952Smrgdnl FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22ffab5952Smrgdnl DEALINGS IN THE SOFTWARE.
23ffab5952Smrg
24ffab5952Smrg# XORG_MACROS_VERSION(required-version)
25ffab5952Smrg# -------------------------------------
26ffab5952Smrg# Minimum version: 1.1.0
27ffab5952Smrg#
28ffab5952Smrg# If you're using a macro added in Version 1.1 or newer, include this in
29ffab5952Smrg# your configure.ac with the minimum required version, such as:
30ffab5952Smrg# XORG_MACROS_VERSION(1.1)
31ffab5952Smrg#
32ffab5952Smrg# To ensure that this macro is defined, also add:
33ffab5952Smrg# m4_ifndef([XORG_MACROS_VERSION],
34ffab5952Smrg#     [m4_fatal([must install xorg-macros 1.1 or later before running autoconf/autogen])])
35ffab5952Smrg#
36ffab5952Smrg#
3743c16309Smrg# See the "minimum version" comment for each macro you use to see what
38ffab5952Smrg# version you require.
39ffab5952Smrgm4_defun([XORG_MACROS_VERSION],[
40ffab5952Smrgm4_define([vers_have], [@VERSION@])
41ffab5952Smrgm4_define([maj_have], m4_substr(vers_have, 0, m4_index(vers_have, [.])))
42ffab5952Smrgm4_define([maj_needed], m4_substr([$1], 0, m4_index([$1], [.])))
43ffab5952Smrgm4_if(m4_cmp(maj_have, maj_needed), 0,,
44ffab5952Smrg    [m4_fatal([xorg-macros major version ]maj_needed[ is required but ]vers_have[ found])])
45ffab5952Smrgm4_if(m4_version_compare(vers_have, [$1]), -1,
46ffab5952Smrg    [m4_fatal([xorg-macros version $1 or higher is required but ]vers_have[ found])])
47ffab5952Smrgm4_undefine([vers_have])
48ffab5952Smrgm4_undefine([maj_have])
49ffab5952Smrgm4_undefine([maj_needed])
50ffab5952Smrg]) # XORG_MACROS_VERSION
51ffab5952Smrg
52ffab5952Smrg# XORG_PROG_RAWCPP()
53ffab5952Smrg# ------------------
54ffab5952Smrg# Minimum version: 1.0.0
55ffab5952Smrg#
56ffab5952Smrg# Find cpp program and necessary flags for use in pre-processing text files
57ffab5952Smrg# such as man pages and config files
58ffab5952SmrgAC_DEFUN([XORG_PROG_RAWCPP],[
59ffab5952SmrgAC_REQUIRE([AC_PROG_CPP])
6043c16309SmrgAC_PATH_PROGS(RAWCPP, [cpp], [${CPP}],
61ffab5952Smrg   [$PATH:/bin:/usr/bin:/usr/lib:/usr/libexec:/usr/ccs/lib:/usr/ccs/lbin:/lib])
62ffab5952Smrg
63ffab5952Smrg# Check for flag to avoid builtin definitions - assumes unix is predefined,
64ffab5952Smrg# which is not the best choice for supporting other OS'es, but covers most
65ffab5952Smrg# of the ones we need for now.
66ffab5952SmrgAC_MSG_CHECKING([if $RAWCPP requires -undef])
6762044635SmrgAC_LANG_CONFTEST([AC_LANG_SOURCE([[Does cpp redefine unix ?]])])
68ffab5952Smrgif test `${RAWCPP} < conftest.$ac_ext | grep -c 'unix'` -eq 1 ; then
69ffab5952Smrg	AC_MSG_RESULT([no])
70ffab5952Smrgelse
71ffab5952Smrg	if test `${RAWCPP} -undef < conftest.$ac_ext | grep -c 'unix'` -eq 1 ; then
72ffab5952Smrg		RAWCPPFLAGS=-undef
73ffab5952Smrg		AC_MSG_RESULT([yes])
74ffab5952Smrg	# under Cygwin unix is still defined even with -undef
75ffab5952Smrg	elif test `${RAWCPP} -undef -ansi < conftest.$ac_ext | grep -c 'unix'` -eq 1 ; then
76ffab5952Smrg		RAWCPPFLAGS="-undef -ansi"
77ffab5952Smrg		AC_MSG_RESULT([yes, with -ansi])
78ffab5952Smrg	else
79ffab5952Smrg		AC_MSG_ERROR([${RAWCPP} defines unix with or without -undef.  I don't know what to do.])
80ffab5952Smrg	fi
81ffab5952Smrgfi
82ffab5952Smrgrm -f conftest.$ac_ext
83ffab5952Smrg
84ffab5952SmrgAC_MSG_CHECKING([if $RAWCPP requires -traditional])
8562044635SmrgAC_LANG_CONFTEST([AC_LANG_SOURCE([[Does cpp preserve   "whitespace"?]])])
86ffab5952Smrgif test `${RAWCPP} < conftest.$ac_ext | grep -c 'preserve   \"'` -eq 1 ; then
87ffab5952Smrg	AC_MSG_RESULT([no])
88ffab5952Smrgelse
89ffab5952Smrg	if test `${RAWCPP} -traditional < conftest.$ac_ext | grep -c 'preserve   \"'` -eq 1 ; then
90c1197e68Smrg		TRADITIONALCPPFLAGS="-traditional"
91ffab5952Smrg		RAWCPPFLAGS="${RAWCPPFLAGS} -traditional"
92ffab5952Smrg		AC_MSG_RESULT([yes])
93ffab5952Smrg	else
94ffab5952Smrg		AC_MSG_ERROR([${RAWCPP} does not preserve whitespace with or without -traditional.  I don't know what to do.])
95ffab5952Smrg	fi
96ffab5952Smrgfi
97ffab5952Smrgrm -f conftest.$ac_ext
98ffab5952SmrgAC_SUBST(RAWCPPFLAGS)
99c1197e68SmrgAC_SUBST(TRADITIONALCPPFLAGS)
100ffab5952Smrg]) # XORG_PROG_RAWCPP
101ffab5952Smrg
102ffab5952Smrg# XORG_MANPAGE_SECTIONS()
103ffab5952Smrg# -----------------------
104ffab5952Smrg# Minimum version: 1.0.0
105ffab5952Smrg#
106ffab5952Smrg# Determine which sections man pages go in for the different man page types
107ffab5952Smrg# on this OS - replaces *ManSuffix settings in old Imake *.cf per-os files.
108ffab5952Smrg# Not sure if there's any better way than just hardcoding by OS name.
109ffab5952Smrg# Override default settings by setting environment variables
110ffab5952Smrg# Added MAN_SUBSTS in version 1.8
111ffab5952Smrg# Added AC_PROG_SED in version 1.8
112ffab5952Smrg
113ffab5952SmrgAC_DEFUN([XORG_MANPAGE_SECTIONS],[
114ffab5952SmrgAC_REQUIRE([AC_CANONICAL_HOST])
115ffab5952SmrgAC_REQUIRE([AC_PROG_SED])
116ffab5952Smrg
117ffab5952Smrgif test x$APP_MAN_SUFFIX = x    ; then
118ffab5952Smrg    APP_MAN_SUFFIX=1
119ffab5952Smrgfi
120ffab5952Smrgif test x$APP_MAN_DIR = x    ; then
121ffab5952Smrg    APP_MAN_DIR='$(mandir)/man$(APP_MAN_SUFFIX)'
122ffab5952Smrgfi
123ffab5952Smrg
124ffab5952Smrgif test x$LIB_MAN_SUFFIX = x    ; then
125ffab5952Smrg    LIB_MAN_SUFFIX=3
126ffab5952Smrgfi
127ffab5952Smrgif test x$LIB_MAN_DIR = x    ; then
128ffab5952Smrg    LIB_MAN_DIR='$(mandir)/man$(LIB_MAN_SUFFIX)'
129ffab5952Smrgfi
130ffab5952Smrg
131ffab5952Smrgif test x$FILE_MAN_SUFFIX = x    ; then
132ffab5952Smrg    case $host_os in
133ffab5952Smrg	solaris*)	FILE_MAN_SUFFIX=4  ;;
134ffab5952Smrg	*)		FILE_MAN_SUFFIX=5  ;;
135ffab5952Smrg    esac
136ffab5952Smrgfi
137ffab5952Smrgif test x$FILE_MAN_DIR = x    ; then
138ffab5952Smrg    FILE_MAN_DIR='$(mandir)/man$(FILE_MAN_SUFFIX)'
139ffab5952Smrgfi
140ffab5952Smrg
141ffab5952Smrgif test x$MISC_MAN_SUFFIX = x    ; then
142ffab5952Smrg    case $host_os in
143ffab5952Smrg	solaris*)	MISC_MAN_SUFFIX=5  ;;
144ffab5952Smrg	*)		MISC_MAN_SUFFIX=7  ;;
145ffab5952Smrg    esac
146ffab5952Smrgfi
147ffab5952Smrgif test x$MISC_MAN_DIR = x    ; then
148ffab5952Smrg    MISC_MAN_DIR='$(mandir)/man$(MISC_MAN_SUFFIX)'
149ffab5952Smrgfi
150ffab5952Smrg
151ffab5952Smrgif test x$DRIVER_MAN_SUFFIX = x    ; then
152ffab5952Smrg    case $host_os in
153ffab5952Smrg	solaris*)	DRIVER_MAN_SUFFIX=7  ;;
154ffab5952Smrg	*)		DRIVER_MAN_SUFFIX=4  ;;
155ffab5952Smrg    esac
156ffab5952Smrgfi
157ffab5952Smrgif test x$DRIVER_MAN_DIR = x    ; then
158ffab5952Smrg    DRIVER_MAN_DIR='$(mandir)/man$(DRIVER_MAN_SUFFIX)'
159ffab5952Smrgfi
160ffab5952Smrg
161ffab5952Smrgif test x$ADMIN_MAN_SUFFIX = x    ; then
162ffab5952Smrg    case $host_os in
163ffab5952Smrg	solaris*)	ADMIN_MAN_SUFFIX=1m ;;
164ffab5952Smrg	*)		ADMIN_MAN_SUFFIX=8  ;;
165ffab5952Smrg    esac
166ffab5952Smrgfi
167ffab5952Smrgif test x$ADMIN_MAN_DIR = x    ; then
168ffab5952Smrg    ADMIN_MAN_DIR='$(mandir)/man$(ADMIN_MAN_SUFFIX)'
169ffab5952Smrgfi
170ffab5952Smrg
171ffab5952Smrg
172ffab5952SmrgAC_SUBST([APP_MAN_SUFFIX])
173ffab5952SmrgAC_SUBST([LIB_MAN_SUFFIX])
174ffab5952SmrgAC_SUBST([FILE_MAN_SUFFIX])
175ffab5952SmrgAC_SUBST([MISC_MAN_SUFFIX])
176ffab5952SmrgAC_SUBST([DRIVER_MAN_SUFFIX])
177ffab5952SmrgAC_SUBST([ADMIN_MAN_SUFFIX])
178ffab5952SmrgAC_SUBST([APP_MAN_DIR])
179ffab5952SmrgAC_SUBST([LIB_MAN_DIR])
180ffab5952SmrgAC_SUBST([FILE_MAN_DIR])
181ffab5952SmrgAC_SUBST([MISC_MAN_DIR])
182ffab5952SmrgAC_SUBST([DRIVER_MAN_DIR])
183ffab5952SmrgAC_SUBST([ADMIN_MAN_DIR])
184ffab5952Smrg
185ffab5952SmrgXORG_MAN_PAGE="X Version 11"
186ffab5952SmrgAC_SUBST([XORG_MAN_PAGE])
187ffab5952SmrgMAN_SUBSTS="\
188ffab5952Smrg	-e 's|__vendorversion__|\"\$(PACKAGE_STRING)\" \"\$(XORG_MAN_PAGE)\"|' \
189ffab5952Smrg	-e 's|__xorgversion__|\"\$(PACKAGE_STRING)\" \"\$(XORG_MAN_PAGE)\"|' \
190ffab5952Smrg	-e 's|__xservername__|Xorg|g' \
191ffab5952Smrg	-e 's|__xconfigfile__|xorg.conf|g' \
192ffab5952Smrg	-e 's|__projectroot__|\$(prefix)|g' \
193ffab5952Smrg	-e 's|__apploaddir__|\$(appdefaultdir)|g' \
194ffab5952Smrg	-e 's|__appmansuffix__|\$(APP_MAN_SUFFIX)|g' \
195ffab5952Smrg	-e 's|__drivermansuffix__|\$(DRIVER_MAN_SUFFIX)|g' \
196ffab5952Smrg	-e 's|__adminmansuffix__|\$(ADMIN_MAN_SUFFIX)|g' \
197ffab5952Smrg	-e 's|__libmansuffix__|\$(LIB_MAN_SUFFIX)|g' \
198ffab5952Smrg	-e 's|__miscmansuffix__|\$(MISC_MAN_SUFFIX)|g' \
199ffab5952Smrg	-e 's|__filemansuffix__|\$(FILE_MAN_SUFFIX)|g'"
200ffab5952SmrgAC_SUBST([MAN_SUBSTS])
201ffab5952Smrg
202ffab5952Smrg]) # XORG_MANPAGE_SECTIONS
203ffab5952Smrg
204ffab5952Smrg# XORG_CHECK_SGML_DOCTOOLS([MIN-VERSION])
205ffab5952Smrg# ------------------------
206ffab5952Smrg# Minimum version: 1.7.0
207ffab5952Smrg#
208ffab5952Smrg# Defines the variable XORG_SGML_PATH containing the location of X11/defs.ent
209ffab5952Smrg# provided by xorg-sgml-doctools, if installed.
210ffab5952SmrgAC_DEFUN([XORG_CHECK_SGML_DOCTOOLS],[
211ffab5952SmrgAC_MSG_CHECKING([for X.Org SGML entities m4_ifval([$1],[>= $1])])
212ffab5952SmrgXORG_SGML_PATH=
213ffab5952SmrgPKG_CHECK_EXISTS([xorg-sgml-doctools m4_ifval([$1],[>= $1])],
214ffab5952Smrg    [XORG_SGML_PATH=`$PKG_CONFIG --variable=sgmlrootdir xorg-sgml-doctools`],
215ffab5952Smrg    [m4_ifval([$1],[:],
216ffab5952Smrg        [if test x"$cross_compiling" != x"yes" ; then
217ffab5952Smrg            AC_CHECK_FILE([$prefix/share/sgml/X11/defs.ent],
218ffab5952Smrg                          [XORG_SGML_PATH=$prefix/share/sgml])
219ffab5952Smrg         fi])
220ffab5952Smrg    ])
221ffab5952Smrg
222ffab5952Smrg# Define variables STYLESHEET_SRCDIR and XSL_STYLESHEET containing
223ffab5952Smrg# the path and the name of the doc stylesheet
224ffab5952Smrgif test "x$XORG_SGML_PATH" != "x" ; then
225ffab5952Smrg   AC_MSG_RESULT([$XORG_SGML_PATH])
226ffab5952Smrg   STYLESHEET_SRCDIR=$XORG_SGML_PATH/X11
227ffab5952Smrg   XSL_STYLESHEET=$STYLESHEET_SRCDIR/xorg.xsl
228ffab5952Smrgelse
229ffab5952Smrg   AC_MSG_RESULT([no])
230ffab5952Smrgfi
231ffab5952Smrg
232ffab5952SmrgAC_SUBST(XORG_SGML_PATH)
233ffab5952SmrgAC_SUBST(STYLESHEET_SRCDIR)
234ffab5952SmrgAC_SUBST(XSL_STYLESHEET)
235ffab5952SmrgAM_CONDITIONAL([HAVE_STYLESHEETS], [test "x$XSL_STYLESHEET" != "x"])
236ffab5952Smrg]) # XORG_CHECK_SGML_DOCTOOLS
237ffab5952Smrg
238ffab5952Smrg# XORG_CHECK_LINUXDOC
239ffab5952Smrg# -------------------
240ffab5952Smrg# Minimum version: 1.0.0
241ffab5952Smrg#
242ffab5952Smrg# Defines the variable MAKE_TEXT if the necessary tools and
243ffab5952Smrg# files are found. $(MAKE_TEXT) blah.sgml will then produce blah.txt.
244ffab5952Smrg# Whether or not the necessary tools and files are found can be checked
245ffab5952Smrg# with the AM_CONDITIONAL "BUILD_LINUXDOC"
246ffab5952SmrgAC_DEFUN([XORG_CHECK_LINUXDOC],[
247ffab5952SmrgAC_REQUIRE([XORG_CHECK_SGML_DOCTOOLS])
248ffab5952SmrgAC_REQUIRE([XORG_WITH_PS2PDF])
249ffab5952Smrg
250ffab5952SmrgAC_PATH_PROG(LINUXDOC, linuxdoc)
251ffab5952Smrg
252ffab5952SmrgAC_MSG_CHECKING([whether to build documentation])
253ffab5952Smrg
254ffab5952Smrgif test x$XORG_SGML_PATH != x && test x$LINUXDOC != x ; then
255ffab5952Smrg   BUILDDOC=yes
256ffab5952Smrgelse
257ffab5952Smrg   BUILDDOC=no
258ffab5952Smrgfi
259ffab5952Smrg
260ffab5952SmrgAM_CONDITIONAL(BUILD_LINUXDOC, [test x$BUILDDOC = xyes])
261ffab5952Smrg
262ffab5952SmrgAC_MSG_RESULT([$BUILDDOC])
263ffab5952Smrg
264ffab5952SmrgAC_MSG_CHECKING([whether to build pdf documentation])
265ffab5952Smrg
266ffab5952Smrgif test x$have_ps2pdf != xno && test x$BUILD_PDFDOC != xno; then
267ffab5952Smrg   BUILDPDFDOC=yes
268ffab5952Smrgelse
269ffab5952Smrg   BUILDPDFDOC=no
270ffab5952Smrgfi
271ffab5952Smrg
272ffab5952SmrgAM_CONDITIONAL(BUILD_PDFDOC, [test x$BUILDPDFDOC = xyes])
273ffab5952Smrg
274ffab5952SmrgAC_MSG_RESULT([$BUILDPDFDOC])
275ffab5952Smrg
276ffab5952SmrgMAKE_TEXT="SGML_SEARCH_PATH=$XORG_SGML_PATH GROFF_NO_SGR=y $LINUXDOC -B txt -f"
277ffab5952SmrgMAKE_PS="SGML_SEARCH_PATH=$XORG_SGML_PATH $LINUXDOC -B latex --papersize=letter --output=ps"
278ffab5952SmrgMAKE_PDF="$PS2PDF"
279ffab5952SmrgMAKE_HTML="SGML_SEARCH_PATH=$XORG_SGML_PATH $LINUXDOC  -B html --split=0"
280ffab5952Smrg
281ffab5952SmrgAC_SUBST(MAKE_TEXT)
282ffab5952SmrgAC_SUBST(MAKE_PS)
283ffab5952SmrgAC_SUBST(MAKE_PDF)
284ffab5952SmrgAC_SUBST(MAKE_HTML)
285ffab5952Smrg]) # XORG_CHECK_LINUXDOC
286ffab5952Smrg
287ffab5952Smrg# XORG_CHECK_DOCBOOK
288ffab5952Smrg# -------------------
289ffab5952Smrg# Minimum version: 1.0.0
290ffab5952Smrg#
291ffab5952Smrg# Checks for the ability to build output formats from SGML DocBook source.
292ffab5952Smrg# For XXX in {TXT, PDF, PS, HTML}, the AM_CONDITIONAL "BUILD_XXXDOC"
293ffab5952Smrg# indicates whether the necessary tools and files are found and, if set,
294ffab5952Smrg# $(MAKE_XXX) blah.sgml will produce blah.xxx.
295ffab5952SmrgAC_DEFUN([XORG_CHECK_DOCBOOK],[
296ffab5952SmrgAC_REQUIRE([XORG_CHECK_SGML_DOCTOOLS])
297ffab5952Smrg
298ffab5952SmrgBUILDTXTDOC=no
299ffab5952SmrgBUILDPDFDOC=no
300ffab5952SmrgBUILDPSDOC=no
301ffab5952SmrgBUILDHTMLDOC=no
302ffab5952Smrg
303ffab5952SmrgAC_PATH_PROG(DOCBOOKPS, docbook2ps)
304ffab5952SmrgAC_PATH_PROG(DOCBOOKPDF, docbook2pdf)
305ffab5952SmrgAC_PATH_PROG(DOCBOOKHTML, docbook2html)
306ffab5952SmrgAC_PATH_PROG(DOCBOOKTXT, docbook2txt)
307ffab5952Smrg
308ffab5952SmrgAC_MSG_CHECKING([whether to build text documentation])
309ffab5952Smrgif test x$XORG_SGML_PATH != x && test x$DOCBOOKTXT != x &&
310ffab5952Smrg   test x$BUILD_TXTDOC != xno; then
311ffab5952Smrg	BUILDTXTDOC=yes
312ffab5952Smrgfi
313ffab5952SmrgAM_CONDITIONAL(BUILD_TXTDOC, [test x$BUILDTXTDOC = xyes])
314ffab5952SmrgAC_MSG_RESULT([$BUILDTXTDOC])
315ffab5952Smrg
316ffab5952SmrgAC_MSG_CHECKING([whether to build PDF documentation])
317ffab5952Smrgif test x$XORG_SGML_PATH != x && test x$DOCBOOKPDF != x &&
318ffab5952Smrg   test x$BUILD_PDFDOC != xno; then
319ffab5952Smrg	BUILDPDFDOC=yes
320ffab5952Smrgfi
321ffab5952SmrgAM_CONDITIONAL(BUILD_PDFDOC, [test x$BUILDPDFDOC = xyes])
322ffab5952SmrgAC_MSG_RESULT([$BUILDPDFDOC])
323ffab5952Smrg
324ffab5952SmrgAC_MSG_CHECKING([whether to build PostScript documentation])
325ffab5952Smrgif test x$XORG_SGML_PATH != x && test x$DOCBOOKPS != x &&
326ffab5952Smrg   test x$BUILD_PSDOC != xno; then
327ffab5952Smrg	BUILDPSDOC=yes
328ffab5952Smrgfi
329ffab5952SmrgAM_CONDITIONAL(BUILD_PSDOC, [test x$BUILDPSDOC = xyes])
330ffab5952SmrgAC_MSG_RESULT([$BUILDPSDOC])
331ffab5952Smrg
332ffab5952SmrgAC_MSG_CHECKING([whether to build HTML documentation])
333ffab5952Smrgif test x$XORG_SGML_PATH != x && test x$DOCBOOKHTML != x &&
334ffab5952Smrg   test x$BUILD_HTMLDOC != xno; then
335ffab5952Smrg	BUILDHTMLDOC=yes
336ffab5952Smrgfi
337ffab5952SmrgAM_CONDITIONAL(BUILD_HTMLDOC, [test x$BUILDHTMLDOC = xyes])
338ffab5952SmrgAC_MSG_RESULT([$BUILDHTMLDOC])
339ffab5952Smrg
340ffab5952SmrgMAKE_TEXT="SGML_SEARCH_PATH=$XORG_SGML_PATH $DOCBOOKTXT"
341ffab5952SmrgMAKE_PS="SGML_SEARCH_PATH=$XORG_SGML_PATH $DOCBOOKPS"
342ffab5952SmrgMAKE_PDF="SGML_SEARCH_PATH=$XORG_SGML_PATH $DOCBOOKPDF"
343ffab5952SmrgMAKE_HTML="SGML_SEARCH_PATH=$XORG_SGML_PATH $DOCBOOKHTML"
344ffab5952Smrg
345ffab5952SmrgAC_SUBST(MAKE_TEXT)
346ffab5952SmrgAC_SUBST(MAKE_PS)
347ffab5952SmrgAC_SUBST(MAKE_PDF)
348ffab5952SmrgAC_SUBST(MAKE_HTML)
349ffab5952Smrg]) # XORG_CHECK_DOCBOOK
350ffab5952Smrg
351ffab5952Smrg# XORG_WITH_XMLTO([MIN-VERSION], [DEFAULT])
352ffab5952Smrg# ----------------
353ffab5952Smrg# Minimum version: 1.5.0
354ffab5952Smrg# Minimum version for optional DEFAULT argument: 1.11.0
355ffab5952Smrg#
356ffab5952Smrg# Documentation tools are not always available on all platforms and sometimes
357ffab5952Smrg# not at the appropriate level. This macro enables a module to test for the
358ffab5952Smrg# presence of the tool and obtain it's path in separate variables. Coupled with
359ffab5952Smrg# the --with-xmlto option, it allows maximum flexibilty in making decisions
360ffab5952Smrg# as whether or not to use the xmlto package. When DEFAULT is not specified,
361ffab5952Smrg# --with-xmlto assumes 'auto'.
362ffab5952Smrg#
363ffab5952Smrg# Interface to module:
364ffab5952Smrg# HAVE_XMLTO: 	used in makefiles to conditionally generate documentation
365ffab5952Smrg# XMLTO:	returns the path of the xmlto program found
366ffab5952Smrg#		returns the path set by the user in the environment
367ffab5952Smrg# --with-xmlto:	'yes' user instructs the module to use xmlto
368ffab5952Smrg#		'no' user instructs the module not to use xmlto
369ffab5952Smrg#
370ffab5952Smrg# Added in version 1.10.0
371ffab5952Smrg# HAVE_XMLTO_TEXT: used in makefiles to conditionally generate text documentation
372ffab5952Smrg#                  xmlto for text output requires either lynx, links, or w3m browsers
373ffab5952Smrg#
374ffab5952Smrg# If the user sets the value of XMLTO, AC_PATH_PROG skips testing the path.
375ffab5952Smrg#
376ffab5952SmrgAC_DEFUN([XORG_WITH_XMLTO],[
377ffab5952SmrgAC_ARG_VAR([XMLTO], [Path to xmlto command])
378ffab5952Smrgm4_define([_defopt], m4_default([$2], [auto]))
379ffab5952SmrgAC_ARG_WITH(xmlto,
380ffab5952Smrg	AS_HELP_STRING([--with-xmlto],
381ffab5952Smrg	   [Use xmlto to regenerate documentation (default: ]_defopt[)]),
382ffab5952Smrg	   [use_xmlto=$withval], [use_xmlto=]_defopt)
383ffab5952Smrgm4_undefine([_defopt])
384ffab5952Smrg
385ffab5952Smrgif test "x$use_xmlto" = x"auto"; then
386ffab5952Smrg   AC_PATH_PROG([XMLTO], [xmlto])
387ffab5952Smrg   if test "x$XMLTO" = "x"; then
388ffab5952Smrg        AC_MSG_WARN([xmlto not found - documentation targets will be skipped])
389ffab5952Smrg	have_xmlto=no
390ffab5952Smrg   else
391ffab5952Smrg        have_xmlto=yes
392ffab5952Smrg   fi
393ffab5952Smrgelif test "x$use_xmlto" = x"yes" ; then
394ffab5952Smrg   AC_PATH_PROG([XMLTO], [xmlto])
395ffab5952Smrg   if test "x$XMLTO" = "x"; then
396ffab5952Smrg        AC_MSG_ERROR([--with-xmlto=yes specified but xmlto not found in PATH])
397ffab5952Smrg   fi
398ffab5952Smrg   have_xmlto=yes
399ffab5952Smrgelif test "x$use_xmlto" = x"no" ; then
400ffab5952Smrg   if test "x$XMLTO" != "x"; then
401ffab5952Smrg      AC_MSG_WARN([ignoring XMLTO environment variable since --with-xmlto=no was specified])
402ffab5952Smrg   fi
403ffab5952Smrg   have_xmlto=no
404ffab5952Smrgelse
405ffab5952Smrg   AC_MSG_ERROR([--with-xmlto expects 'yes' or 'no'])
406ffab5952Smrgfi
407ffab5952Smrg
408ffab5952Smrg# Test for a minimum version of xmlto, if provided.
409ffab5952Smrgm4_ifval([$1],
410ffab5952Smrg[if test "$have_xmlto" = yes; then
411ffab5952Smrg    # scrape the xmlto version
412ffab5952Smrg    AC_MSG_CHECKING([the xmlto version])
413ffab5952Smrg    xmlto_version=`$XMLTO --version 2>/dev/null | cut -d' ' -f3`
414ffab5952Smrg    AC_MSG_RESULT([$xmlto_version])
415ffab5952Smrg    AS_VERSION_COMPARE([$xmlto_version], [$1],
416ffab5952Smrg        [if test "x$use_xmlto" = xauto; then
417ffab5952Smrg            AC_MSG_WARN([xmlto version $xmlto_version found, but $1 needed])
418ffab5952Smrg            have_xmlto=no
419ffab5952Smrg        else
420ffab5952Smrg            AC_MSG_ERROR([xmlto version $xmlto_version found, but $1 needed])
421ffab5952Smrg        fi])
422ffab5952Smrgfi])
423ffab5952Smrg
424ffab5952Smrg# Test for the ability of xmlto to generate a text target
425ffab5952Smrghave_xmlto_text=no
426ffab5952Smrgcat > conftest.xml << "EOF"
427ffab5952SmrgEOF
428ffab5952SmrgAS_IF([test "$have_xmlto" = yes],
429ffab5952Smrg      [AS_IF([$XMLTO --skip-validation txt conftest.xml >/dev/null 2>&1],
430ffab5952Smrg             [have_xmlto_text=yes],
431ffab5952Smrg             [AC_MSG_WARN([xmlto cannot generate text format, this format skipped])])])
432ffab5952Smrgrm -f conftest.xml
433ffab5952SmrgAM_CONDITIONAL([HAVE_XMLTO_TEXT], [test $have_xmlto_text = yes])
434ffab5952SmrgAM_CONDITIONAL([HAVE_XMLTO], [test "$have_xmlto" = yes])
435ffab5952Smrg]) # XORG_WITH_XMLTO
436ffab5952Smrg
43762044635Smrg# XORG_WITH_XSLTPROC([MIN-VERSION], [DEFAULT])
43862044635Smrg# --------------------------------------------
43962044635Smrg# Minimum version: 1.12.0
44062044635Smrg# Minimum version for optional DEFAULT argument: 1.12.0
44162044635Smrg#
44262044635Smrg# XSLT (Extensible Stylesheet Language Transformations) is a declarative,
44362044635Smrg# XML-based language used for the transformation of XML documents.
44462044635Smrg# The xsltproc command line tool is for applying XSLT stylesheets to XML documents.
44562044635Smrg# It is used under the cover by xmlto to generate html files from DocBook/XML.
44662044635Smrg# The XSLT processor is often used as a standalone tool for transformations.
44762044635Smrg# It should not be assumed that this tool is used only to work with documnetation.
44862044635Smrg# When DEFAULT is not specified, --with-xsltproc assumes 'auto'.
44962044635Smrg#
45062044635Smrg# Interface to module:
45162044635Smrg# HAVE_XSLTPROC: used in makefiles to conditionally generate documentation
45262044635Smrg# XSLTPROC:	 returns the path of the xsltproc program found
45362044635Smrg#		 returns the path set by the user in the environment
45462044635Smrg# --with-xsltproc: 'yes' user instructs the module to use xsltproc
45562044635Smrg#		  'no' user instructs the module not to use xsltproc
45662044635Smrg# have_xsltproc: returns yes if xsltproc found in PATH or no
45762044635Smrg#
45862044635Smrg# If the user sets the value of XSLTPROC, AC_PATH_PROG skips testing the path.
45962044635Smrg#
46062044635SmrgAC_DEFUN([XORG_WITH_XSLTPROC],[
46162044635SmrgAC_ARG_VAR([XSLTPROC], [Path to xsltproc command])
46262044635Smrg# Preserves the interface, should it be implemented later
46362044635Smrgm4_ifval([$1], [m4_warn([syntax], [Checking for xsltproc MIN-VERSION is not implemented])])
46462044635Smrgm4_define([_defopt], m4_default([$2], [auto]))
46562044635SmrgAC_ARG_WITH(xsltproc,
46662044635Smrg	AS_HELP_STRING([--with-xsltproc],
46762044635Smrg	   [Use xsltproc for the transformation of XML documents (default: ]_defopt[)]),
46862044635Smrg	   [use_xsltproc=$withval], [use_xsltproc=]_defopt)
46962044635Smrgm4_undefine([_defopt])
47062044635Smrg
47162044635Smrgif test "x$use_xsltproc" = x"auto"; then
47262044635Smrg   AC_PATH_PROG([XSLTPROC], [xsltproc])
47362044635Smrg   if test "x$XSLTPROC" = "x"; then
47462044635Smrg        AC_MSG_WARN([xsltproc not found - cannot transform XML documents])
47562044635Smrg	have_xsltproc=no
47662044635Smrg   else
47762044635Smrg        have_xsltproc=yes
47862044635Smrg   fi
47962044635Smrgelif test "x$use_xsltproc" = x"yes" ; then
48062044635Smrg   AC_PATH_PROG([XSLTPROC], [xsltproc])
48162044635Smrg   if test "x$XSLTPROC" = "x"; then
48262044635Smrg        AC_MSG_ERROR([--with-xsltproc=yes specified but xsltproc not found in PATH])
48362044635Smrg   fi
48462044635Smrg   have_xsltproc=yes
48562044635Smrgelif test "x$use_xsltproc" = x"no" ; then
48662044635Smrg   if test "x$XSLTPROC" != "x"; then
48762044635Smrg      AC_MSG_WARN([ignoring XSLTPROC environment variable since --with-xsltproc=no was specified])
48862044635Smrg   fi
48962044635Smrg   have_xsltproc=no
49062044635Smrgelse
49162044635Smrg   AC_MSG_ERROR([--with-xsltproc expects 'yes' or 'no'])
49262044635Smrgfi
49362044635Smrg
49462044635SmrgAM_CONDITIONAL([HAVE_XSLTPROC], [test "$have_xsltproc" = yes])
49562044635Smrg]) # XORG_WITH_XSLTPROC
49662044635Smrg
49762044635Smrg# XORG_WITH_PERL([MIN-VERSION], [DEFAULT])
49862044635Smrg# ----------------------------------------
49962044635Smrg# Minimum version: 1.15.0
50062044635Smrg#
50162044635Smrg# PERL (Practical Extraction and Report Language) is a language optimized for
50262044635Smrg# scanning arbitrary text files, extracting information from those text files,
50362044635Smrg# and printing reports based on that information.
50462044635Smrg#
50562044635Smrg# When DEFAULT is not specified, --with-perl assumes 'auto'.
50662044635Smrg#
50762044635Smrg# Interface to module:
50862044635Smrg# HAVE_PERL: used in makefiles to conditionally scan text files
50962044635Smrg# PERL:	     returns the path of the perl program found
51062044635Smrg#	     returns the path set by the user in the environment
51162044635Smrg# --with-perl: 'yes' user instructs the module to use perl
51262044635Smrg#	       'no' user instructs the module not to use perl
51362044635Smrg# have_perl: returns yes if perl found in PATH or no
51462044635Smrg#
51562044635Smrg# If the user sets the value of PERL, AC_PATH_PROG skips testing the path.
51662044635Smrg#
51762044635SmrgAC_DEFUN([XORG_WITH_PERL],[
51862044635SmrgAC_ARG_VAR([PERL], [Path to perl command])
51962044635Smrg# Preserves the interface, should it be implemented later
52062044635Smrgm4_ifval([$1], [m4_warn([syntax], [Checking for perl MIN-VERSION is not implemented])])
52162044635Smrgm4_define([_defopt], m4_default([$2], [auto]))
52262044635SmrgAC_ARG_WITH(perl,
52362044635Smrg	AS_HELP_STRING([--with-perl],
52462044635Smrg	   [Use perl for extracting information from files (default: ]_defopt[)]),
52562044635Smrg	   [use_perl=$withval], [use_perl=]_defopt)
52662044635Smrgm4_undefine([_defopt])
52762044635Smrg
52862044635Smrgif test "x$use_perl" = x"auto"; then
52962044635Smrg   AC_PATH_PROG([PERL], [perl])
53062044635Smrg   if test "x$PERL" = "x"; then
53162044635Smrg        AC_MSG_WARN([perl not found - cannot extract information and report])
53262044635Smrg	have_perl=no
53362044635Smrg   else
53462044635Smrg        have_perl=yes
53562044635Smrg   fi
53662044635Smrgelif test "x$use_perl" = x"yes" ; then
53762044635Smrg   AC_PATH_PROG([PERL], [perl])
53862044635Smrg   if test "x$PERL" = "x"; then
53962044635Smrg        AC_MSG_ERROR([--with-perl=yes specified but perl not found in PATH])
54062044635Smrg   fi
54162044635Smrg   have_perl=yes
54262044635Smrgelif test "x$use_perl" = x"no" ; then
54362044635Smrg   if test "x$PERL" != "x"; then
54462044635Smrg      AC_MSG_WARN([ignoring PERL environment variable since --with-perl=no was specified])
54562044635Smrg   fi
54662044635Smrg   have_perl=no
54762044635Smrgelse
54862044635Smrg   AC_MSG_ERROR([--with-perl expects 'yes' or 'no'])
54962044635Smrgfi
55062044635Smrg
55162044635SmrgAM_CONDITIONAL([HAVE_PERL], [test "$have_perl" = yes])
55262044635Smrg]) # XORG_WITH_PERL
55362044635Smrg
554ffab5952Smrg# XORG_WITH_ASCIIDOC([MIN-VERSION], [DEFAULT])
555ffab5952Smrg# ----------------
556ffab5952Smrg# Minimum version: 1.5.0
557ffab5952Smrg# Minimum version for optional DEFAULT argument: 1.11.0
558ffab5952Smrg#
559ffab5952Smrg# Documentation tools are not always available on all platforms and sometimes
560ffab5952Smrg# not at the appropriate level. This macro enables a module to test for the
561ffab5952Smrg# presence of the tool and obtain it's path in separate variables. Coupled with
562ffab5952Smrg# the --with-asciidoc option, it allows maximum flexibilty in making decisions
563ffab5952Smrg# as whether or not to use the asciidoc package. When DEFAULT is not specified,
564ffab5952Smrg# --with-asciidoc assumes 'auto'.
565ffab5952Smrg#
566ffab5952Smrg# Interface to module:
567ffab5952Smrg# HAVE_ASCIIDOC: used in makefiles to conditionally generate documentation
568ffab5952Smrg# ASCIIDOC:	 returns the path of the asciidoc program found
569ffab5952Smrg#		 returns the path set by the user in the environment
570ffab5952Smrg# --with-asciidoc: 'yes' user instructs the module to use asciidoc
571ffab5952Smrg#		  'no' user instructs the module not to use asciidoc
572ffab5952Smrg#
573ffab5952Smrg# If the user sets the value of ASCIIDOC, AC_PATH_PROG skips testing the path.
574ffab5952Smrg#
575ffab5952SmrgAC_DEFUN([XORG_WITH_ASCIIDOC],[
576ffab5952SmrgAC_ARG_VAR([ASCIIDOC], [Path to asciidoc command])
577ffab5952Smrgm4_define([_defopt], m4_default([$2], [auto]))
578ffab5952SmrgAC_ARG_WITH(asciidoc,
579ffab5952Smrg	AS_HELP_STRING([--with-asciidoc],
580ffab5952Smrg	   [Use asciidoc to regenerate documentation (default: ]_defopt[)]),
581ffab5952Smrg	   [use_asciidoc=$withval], [use_asciidoc=]_defopt)
582ffab5952Smrgm4_undefine([_defopt])
583ffab5952Smrg
584ffab5952Smrgif test "x$use_asciidoc" = x"auto"; then
585ffab5952Smrg   AC_PATH_PROG([ASCIIDOC], [asciidoc])
586ffab5952Smrg   if test "x$ASCIIDOC" = "x"; then
587ffab5952Smrg        AC_MSG_WARN([asciidoc not found - documentation targets will be skipped])
588ffab5952Smrg	have_asciidoc=no
589ffab5952Smrg   else
590ffab5952Smrg        have_asciidoc=yes
591ffab5952Smrg   fi
592ffab5952Smrgelif test "x$use_asciidoc" = x"yes" ; then
593ffab5952Smrg   AC_PATH_PROG([ASCIIDOC], [asciidoc])
594ffab5952Smrg   if test "x$ASCIIDOC" = "x"; then
595ffab5952Smrg        AC_MSG_ERROR([--with-asciidoc=yes specified but asciidoc not found in PATH])
596ffab5952Smrg   fi
597ffab5952Smrg   have_asciidoc=yes
598ffab5952Smrgelif test "x$use_asciidoc" = x"no" ; then
599ffab5952Smrg   if test "x$ASCIIDOC" != "x"; then
600ffab5952Smrg      AC_MSG_WARN([ignoring ASCIIDOC environment variable since --with-asciidoc=no was specified])
601ffab5952Smrg   fi
602ffab5952Smrg   have_asciidoc=no
603ffab5952Smrgelse
604ffab5952Smrg   AC_MSG_ERROR([--with-asciidoc expects 'yes' or 'no'])
605ffab5952Smrgfi
606ffab5952Smrgm4_ifval([$1],
607ffab5952Smrg[if test "$have_asciidoc" = yes; then
608ffab5952Smrg    # scrape the asciidoc version
609ffab5952Smrg    AC_MSG_CHECKING([the asciidoc version])
610ffab5952Smrg    asciidoc_version=`$ASCIIDOC --version 2>/dev/null | cut -d' ' -f2`
611ffab5952Smrg    AC_MSG_RESULT([$asciidoc_version])
612ffab5952Smrg    AS_VERSION_COMPARE([$asciidoc_version], [$1],
613ffab5952Smrg        [if test "x$use_asciidoc" = xauto; then
614ffab5952Smrg            AC_MSG_WARN([asciidoc version $asciidoc_version found, but $1 needed])
615ffab5952Smrg            have_asciidoc=no
616ffab5952Smrg        else
617ffab5952Smrg            AC_MSG_ERROR([asciidoc version $asciidoc_version found, but $1 needed])
618ffab5952Smrg        fi])
619ffab5952Smrgfi])
620ffab5952SmrgAM_CONDITIONAL([HAVE_ASCIIDOC], [test "$have_asciidoc" = yes])
621ffab5952Smrg]) # XORG_WITH_ASCIIDOC
622ffab5952Smrg
623ffab5952Smrg# XORG_WITH_DOXYGEN([MIN-VERSION], [DEFAULT])
62443c16309Smrg# -------------------------------------------
625ffab5952Smrg# Minimum version: 1.5.0
626ffab5952Smrg# Minimum version for optional DEFAULT argument: 1.11.0
62743c16309Smrg# Minimum version for optional DOT checking: 1.18.0
628ffab5952Smrg#
629ffab5952Smrg# Documentation tools are not always available on all platforms and sometimes
630ffab5952Smrg# not at the appropriate level. This macro enables a module to test for the
631ffab5952Smrg# presence of the tool and obtain it's path in separate variables. Coupled with
632ffab5952Smrg# the --with-doxygen option, it allows maximum flexibilty in making decisions
633ffab5952Smrg# as whether or not to use the doxygen package. When DEFAULT is not specified,
634ffab5952Smrg# --with-doxygen assumes 'auto'.
635ffab5952Smrg#
636ffab5952Smrg# Interface to module:
637ffab5952Smrg# HAVE_DOXYGEN: used in makefiles to conditionally generate documentation
638ffab5952Smrg# DOXYGEN:	 returns the path of the doxygen program found
639ffab5952Smrg#		 returns the path set by the user in the environment
640ffab5952Smrg# --with-doxygen: 'yes' user instructs the module to use doxygen
641ffab5952Smrg#		  'no' user instructs the module not to use doxygen
642ffab5952Smrg#
643ffab5952Smrg# If the user sets the value of DOXYGEN, AC_PATH_PROG skips testing the path.
644ffab5952Smrg#
645ffab5952SmrgAC_DEFUN([XORG_WITH_DOXYGEN],[
646ffab5952SmrgAC_ARG_VAR([DOXYGEN], [Path to doxygen command])
64743c16309SmrgAC_ARG_VAR([DOT], [Path to the dot graphics utility])
648ffab5952Smrgm4_define([_defopt], m4_default([$2], [auto]))
649ffab5952SmrgAC_ARG_WITH(doxygen,
650ffab5952Smrg	AS_HELP_STRING([--with-doxygen],
651ffab5952Smrg	   [Use doxygen to regenerate documentation (default: ]_defopt[)]),
652ffab5952Smrg	   [use_doxygen=$withval], [use_doxygen=]_defopt)
653ffab5952Smrgm4_undefine([_defopt])
654ffab5952Smrg
655ffab5952Smrgif test "x$use_doxygen" = x"auto"; then
656ffab5952Smrg   AC_PATH_PROG([DOXYGEN], [doxygen])
657ffab5952Smrg   if test "x$DOXYGEN" = "x"; then
658ffab5952Smrg        AC_MSG_WARN([doxygen not found - documentation targets will be skipped])
659ffab5952Smrg	have_doxygen=no
660ffab5952Smrg   else
661ffab5952Smrg        have_doxygen=yes
662ffab5952Smrg   fi
663ffab5952Smrgelif test "x$use_doxygen" = x"yes" ; then
664ffab5952Smrg   AC_PATH_PROG([DOXYGEN], [doxygen])
665ffab5952Smrg   if test "x$DOXYGEN" = "x"; then
666ffab5952Smrg        AC_MSG_ERROR([--with-doxygen=yes specified but doxygen not found in PATH])
667ffab5952Smrg   fi
668ffab5952Smrg   have_doxygen=yes
669ffab5952Smrgelif test "x$use_doxygen" = x"no" ; then
670ffab5952Smrg   if test "x$DOXYGEN" != "x"; then
671ffab5952Smrg      AC_MSG_WARN([ignoring DOXYGEN environment variable since --with-doxygen=no was specified])
672ffab5952Smrg   fi
673ffab5952Smrg   have_doxygen=no
674ffab5952Smrgelse
675ffab5952Smrg   AC_MSG_ERROR([--with-doxygen expects 'yes' or 'no'])
676ffab5952Smrgfi
677ffab5952Smrgm4_ifval([$1],
678ffab5952Smrg[if test "$have_doxygen" = yes; then
679ffab5952Smrg    # scrape the doxygen version
680ffab5952Smrg    AC_MSG_CHECKING([the doxygen version])
681ffab5952Smrg    doxygen_version=`$DOXYGEN --version 2>/dev/null`
682ffab5952Smrg    AC_MSG_RESULT([$doxygen_version])
683ffab5952Smrg    AS_VERSION_COMPARE([$doxygen_version], [$1],
684ffab5952Smrg        [if test "x$use_doxygen" = xauto; then
685ffab5952Smrg            AC_MSG_WARN([doxygen version $doxygen_version found, but $1 needed])
686ffab5952Smrg            have_doxygen=no
687ffab5952Smrg        else
688ffab5952Smrg            AC_MSG_ERROR([doxygen version $doxygen_version found, but $1 needed])
689ffab5952Smrg        fi])
690ffab5952Smrgfi])
69143c16309Smrg
69243c16309Smrgdnl Check for DOT if we have doxygen. The caller decides if it is mandatory
69343c16309Smrgdnl HAVE_DOT is a variable that can be used in your doxygen.in config file:
69443c16309Smrgdnl 	HAVE_DOT = @HAVE_DOT@
69543c16309SmrgHAVE_DOT=no
69643c16309Smrgif test "x$have_doxygen" = "xyes"; then
69743c16309Smrg  AC_PATH_PROG([DOT], [dot])
69843c16309Smrg    if test "x$DOT" != "x"; then
69943c16309Smrg      HAVE_DOT=yes
70043c16309Smrg    fi
70143c16309Smrgfi
70243c16309Smrg
70343c16309SmrgAC_SUBST([HAVE_DOT])
70443c16309SmrgAM_CONDITIONAL([HAVE_DOT], [test "$HAVE_DOT" = "yes"])
705ffab5952SmrgAM_CONDITIONAL([HAVE_DOXYGEN], [test "$have_doxygen" = yes])
706ffab5952Smrg]) # XORG_WITH_DOXYGEN
707ffab5952Smrg
708ffab5952Smrg# XORG_WITH_GROFF([DEFAULT])
709ffab5952Smrg# ----------------
710ffab5952Smrg# Minimum version: 1.6.0
711ffab5952Smrg# Minimum version for optional DEFAULT argument: 1.11.0
712ffab5952Smrg#
713ffab5952Smrg# Documentation tools are not always available on all platforms and sometimes
714ffab5952Smrg# not at the appropriate level. This macro enables a module to test for the
715ffab5952Smrg# presence of the tool and obtain it's path in separate variables. Coupled with
716ffab5952Smrg# the --with-groff option, it allows maximum flexibilty in making decisions
717ffab5952Smrg# as whether or not to use the groff package. When DEFAULT is not specified,
718ffab5952Smrg# --with-groff assumes 'auto'.
719ffab5952Smrg#
720ffab5952Smrg# Interface to module:
721ffab5952Smrg# HAVE_GROFF:	 used in makefiles to conditionally generate documentation
722ffab5952Smrg# HAVE_GROFF_MM: the memorandum macros (-mm) package
723ffab5952Smrg# HAVE_GROFF_MS: the -ms macros package
724ffab5952Smrg# GROFF:	 returns the path of the groff program found
725ffab5952Smrg#		 returns the path set by the user in the environment
726ffab5952Smrg# --with-groff:	 'yes' user instructs the module to use groff
727ffab5952Smrg#		 'no' user instructs the module not to use groff
728ffab5952Smrg#
729ffab5952Smrg# Added in version 1.9.0:
730ffab5952Smrg# HAVE_GROFF_HTML: groff has dependencies to output HTML format:
731ffab5952Smrg#		   pnmcut pnmcrop pnmtopng pnmtops from the netpbm package.
732ffab5952Smrg#		   psselect from the psutils package.
733ffab5952Smrg#		   the ghostcript package. Refer to the grohtml man pages
734ffab5952Smrg#
735ffab5952Smrg# If the user sets the value of GROFF, AC_PATH_PROG skips testing the path.
736ffab5952Smrg#
737ffab5952Smrg# OS and distros often splits groff in a basic and full package, the former
738ffab5952Smrg# having the groff program and the later having devices, fonts and macros
739ffab5952Smrg# Checking for the groff executable is not enough.
740ffab5952Smrg#
741ffab5952Smrg# If macros are missing, we cannot assume that groff is useless, so we don't
742ffab5952Smrg# unset HAVE_GROFF or GROFF env variables.
743ffab5952Smrg# HAVE_GROFF_?? can never be true while HAVE_GROFF is false.
744ffab5952Smrg#
745ffab5952SmrgAC_DEFUN([XORG_WITH_GROFF],[
746ffab5952SmrgAC_ARG_VAR([GROFF], [Path to groff command])
747ffab5952Smrgm4_define([_defopt], m4_default([$1], [auto]))
748ffab5952SmrgAC_ARG_WITH(groff,
749ffab5952Smrg	AS_HELP_STRING([--with-groff],
750ffab5952Smrg	   [Use groff to regenerate documentation (default: ]_defopt[)]),
751ffab5952Smrg	   [use_groff=$withval], [use_groff=]_defopt)
752ffab5952Smrgm4_undefine([_defopt])
753ffab5952Smrg
754ffab5952Smrgif test "x$use_groff" = x"auto"; then
755ffab5952Smrg   AC_PATH_PROG([GROFF], [groff])
756ffab5952Smrg   if test "x$GROFF" = "x"; then
757ffab5952Smrg        AC_MSG_WARN([groff not found - documentation targets will be skipped])
758ffab5952Smrg	have_groff=no
759ffab5952Smrg   else
760ffab5952Smrg        have_groff=yes
761ffab5952Smrg   fi
762ffab5952Smrgelif test "x$use_groff" = x"yes" ; then
763ffab5952Smrg   AC_PATH_PROG([GROFF], [groff])
764ffab5952Smrg   if test "x$GROFF" = "x"; then
765ffab5952Smrg        AC_MSG_ERROR([--with-groff=yes specified but groff not found in PATH])
766ffab5952Smrg   fi
767ffab5952Smrg   have_groff=yes
768ffab5952Smrgelif test "x$use_groff" = x"no" ; then
769ffab5952Smrg   if test "x$GROFF" != "x"; then
770ffab5952Smrg      AC_MSG_WARN([ignoring GROFF environment variable since --with-groff=no was specified])
771ffab5952Smrg   fi
772ffab5952Smrg   have_groff=no
773ffab5952Smrgelse
774ffab5952Smrg   AC_MSG_ERROR([--with-groff expects 'yes' or 'no'])
775ffab5952Smrgfi
776ffab5952Smrg
777ffab5952Smrg# We have groff, test for the presence of the macro packages
778ffab5952Smrgif test "x$have_groff" = x"yes"; then
779ffab5952Smrg    AC_MSG_CHECKING([for ${GROFF} -ms macros])
780ffab5952Smrg    if ${GROFF} -ms -I. /dev/null >/dev/null 2>&1 ; then
781ffab5952Smrg        groff_ms_works=yes
782ffab5952Smrg    else
783ffab5952Smrg        groff_ms_works=no
784ffab5952Smrg    fi
785ffab5952Smrg    AC_MSG_RESULT([$groff_ms_works])
786ffab5952Smrg    AC_MSG_CHECKING([for ${GROFF} -mm macros])
787ffab5952Smrg    if ${GROFF} -mm -I. /dev/null >/dev/null 2>&1 ; then
788ffab5952Smrg        groff_mm_works=yes
789ffab5952Smrg    else
790ffab5952Smrg        groff_mm_works=no
791ffab5952Smrg    fi
792ffab5952Smrg    AC_MSG_RESULT([$groff_mm_works])
793ffab5952Smrgfi
794ffab5952Smrg
795ffab5952Smrg# We have groff, test for HTML dependencies, one command per package
796ffab5952Smrgif test "x$have_groff" = x"yes"; then
797ffab5952Smrg   AC_PATH_PROGS(GS_PATH, [gs gswin32c])
798ffab5952Smrg   AC_PATH_PROG(PNMTOPNG_PATH, [pnmtopng])
799ffab5952Smrg   AC_PATH_PROG(PSSELECT_PATH, [psselect])
800ffab5952Smrg   if test "x$GS_PATH" != "x" -a "x$PNMTOPNG_PATH" != "x" -a "x$PSSELECT_PATH" != "x"; then
801ffab5952Smrg      have_groff_html=yes
802ffab5952Smrg   else
803ffab5952Smrg      have_groff_html=no
804ffab5952Smrg      AC_MSG_WARN([grohtml dependencies not found - HTML Documentation skipped. Refer to grohtml man pages])
805ffab5952Smrg   fi
806ffab5952Smrgfi
807ffab5952Smrg
808ffab5952Smrg# Set Automake conditionals for Makefiles
809ffab5952SmrgAM_CONDITIONAL([HAVE_GROFF], [test "$have_groff" = yes])
810ffab5952SmrgAM_CONDITIONAL([HAVE_GROFF_MS], [test "$groff_ms_works" = yes])
811ffab5952SmrgAM_CONDITIONAL([HAVE_GROFF_MM], [test "$groff_mm_works" = yes])
812ffab5952SmrgAM_CONDITIONAL([HAVE_GROFF_HTML], [test "$have_groff_html" = yes])
813ffab5952Smrg]) # XORG_WITH_GROFF
814ffab5952Smrg
81562044635Smrg# XORG_WITH_FOP([MIN-VERSION], [DEFAULT])
81662044635Smrg# ---------------------------------------
817ffab5952Smrg# Minimum version: 1.6.0
818ffab5952Smrg# Minimum version for optional DEFAULT argument: 1.11.0
81962044635Smrg# Minimum version for optional MIN-VERSION argument: 1.15.0
820ffab5952Smrg#
821ffab5952Smrg# Documentation tools are not always available on all platforms and sometimes
822ffab5952Smrg# not at the appropriate level. This macro enables a module to test for the
823ffab5952Smrg# presence of the tool and obtain it's path in separate variables. Coupled with
824ffab5952Smrg# the --with-fop option, it allows maximum flexibilty in making decisions
825ffab5952Smrg# as whether or not to use the fop package. When DEFAULT is not specified,
826ffab5952Smrg# --with-fop assumes 'auto'.
827ffab5952Smrg#
828ffab5952Smrg# Interface to module:
829ffab5952Smrg# HAVE_FOP: 	used in makefiles to conditionally generate documentation
830ffab5952Smrg# FOP:	 	returns the path of the fop program found
831ffab5952Smrg#		returns the path set by the user in the environment
832ffab5952Smrg# --with-fop: 	'yes' user instructs the module to use fop
833ffab5952Smrg#		'no' user instructs the module not to use fop
834ffab5952Smrg#
835ffab5952Smrg# If the user sets the value of FOP, AC_PATH_PROG skips testing the path.
836ffab5952Smrg#
837ffab5952SmrgAC_DEFUN([XORG_WITH_FOP],[
838ffab5952SmrgAC_ARG_VAR([FOP], [Path to fop command])
83962044635Smrgm4_define([_defopt], m4_default([$2], [auto]))
840ffab5952SmrgAC_ARG_WITH(fop,
841ffab5952Smrg	AS_HELP_STRING([--with-fop],
842ffab5952Smrg	   [Use fop to regenerate documentation (default: ]_defopt[)]),
843ffab5952Smrg	   [use_fop=$withval], [use_fop=]_defopt)
844ffab5952Smrgm4_undefine([_defopt])
845ffab5952Smrg
846ffab5952Smrgif test "x$use_fop" = x"auto"; then
847ffab5952Smrg   AC_PATH_PROG([FOP], [fop])
848ffab5952Smrg   if test "x$FOP" = "x"; then
849ffab5952Smrg        AC_MSG_WARN([fop not found - documentation targets will be skipped])
850ffab5952Smrg	have_fop=no
851ffab5952Smrg   else
852ffab5952Smrg        have_fop=yes
853ffab5952Smrg   fi
854ffab5952Smrgelif test "x$use_fop" = x"yes" ; then
855ffab5952Smrg   AC_PATH_PROG([FOP], [fop])
856ffab5952Smrg   if test "x$FOP" = "x"; then
857ffab5952Smrg        AC_MSG_ERROR([--with-fop=yes specified but fop not found in PATH])
858ffab5952Smrg   fi
859ffab5952Smrg   have_fop=yes
860ffab5952Smrgelif test "x$use_fop" = x"no" ; then
861ffab5952Smrg   if test "x$FOP" != "x"; then
862ffab5952Smrg      AC_MSG_WARN([ignoring FOP environment variable since --with-fop=no was specified])
863ffab5952Smrg   fi
864ffab5952Smrg   have_fop=no
865ffab5952Smrgelse
866ffab5952Smrg   AC_MSG_ERROR([--with-fop expects 'yes' or 'no'])
867ffab5952Smrgfi
86862044635Smrg
86962044635Smrg# Test for a minimum version of fop, if provided.
87062044635Smrgm4_ifval([$1],
87162044635Smrg[if test "$have_fop" = yes; then
87262044635Smrg    # scrape the fop version
87362044635Smrg    AC_MSG_CHECKING([for fop minimum version])
87462044635Smrg    fop_version=`$FOP -version 2>/dev/null | cut -d' ' -f3`
87562044635Smrg    AC_MSG_RESULT([$fop_version])
87662044635Smrg    AS_VERSION_COMPARE([$fop_version], [$1],
87762044635Smrg        [if test "x$use_fop" = xauto; then
87862044635Smrg            AC_MSG_WARN([fop version $fop_version found, but $1 needed])
87962044635Smrg            have_fop=no
88062044635Smrg        else
88162044635Smrg            AC_MSG_ERROR([fop version $fop_version found, but $1 needed])
88262044635Smrg        fi])
88362044635Smrgfi])
884ffab5952SmrgAM_CONDITIONAL([HAVE_FOP], [test "$have_fop" = yes])
885ffab5952Smrg]) # XORG_WITH_FOP
886ffab5952Smrg
887c1197e68Smrg# XORG_WITH_M4([MIN-VERSION])
888c1197e68Smrg# ---------------------------
889c1197e68Smrg# Minimum version: 1.19.0
890c1197e68Smrg#
891c1197e68Smrg# This macro attempts to locate an m4 macro processor which supports
892c1197e68Smrg# -I option and is only useful for modules relying on M4 in order to
893c1197e68Smrg# expand macros in source code files.
894c1197e68Smrg#
895c1197e68Smrg# Interface to module:
896c1197e68Smrg# M4:	 	returns the path of the m4 program found
897c1197e68Smrg#		returns the path set by the user in the environment
898c1197e68Smrg#
899c1197e68SmrgAC_DEFUN([XORG_WITH_M4], [
900c1197e68SmrgAC_CACHE_CHECK([for m4 that supports -I option], [ac_cv_path_M4],
901c1197e68Smrg   [AC_PATH_PROGS_FEATURE_CHECK([M4], [m4 gm4],
902c1197e68Smrg       [[$ac_path_M4 -I. /dev/null > /dev/null 2>&1 && \
903c1197e68Smrg         ac_cv_path_M4=$ac_path_M4 ac_path_M4_found=:]],
904c1197e68Smrg   [AC_MSG_ERROR([could not find m4 that supports -I option])],
905c1197e68Smrg   [$PATH:/usr/gnu/bin])])
906c1197e68Smrg
907c1197e68SmrgAC_SUBST([M4], [$ac_cv_path_M4])
908c1197e68Smrg]) # XORG_WITH_M4
909c1197e68Smrg
910ffab5952Smrg# XORG_WITH_PS2PDF([DEFAULT])
911ffab5952Smrg# ----------------
912ffab5952Smrg# Minimum version: 1.6.0
913ffab5952Smrg# Minimum version for optional DEFAULT argument: 1.11.0
914ffab5952Smrg#
915ffab5952Smrg# Documentation tools are not always available on all platforms and sometimes
916ffab5952Smrg# not at the appropriate level. This macro enables a module to test for the
917ffab5952Smrg# presence of the tool and obtain it's path in separate variables. Coupled with
918ffab5952Smrg# the --with-ps2pdf option, it allows maximum flexibilty in making decisions
919ffab5952Smrg# as whether or not to use the ps2pdf package. When DEFAULT is not specified,
920ffab5952Smrg# --with-ps2pdf assumes 'auto'.
921ffab5952Smrg#
922ffab5952Smrg# Interface to module:
923ffab5952Smrg# HAVE_PS2PDF: 	used in makefiles to conditionally generate documentation
924ffab5952Smrg# PS2PDF:	returns the path of the ps2pdf program found
925ffab5952Smrg#		returns the path set by the user in the environment
926ffab5952Smrg# --with-ps2pdf: 'yes' user instructs the module to use ps2pdf
927ffab5952Smrg#		 'no' user instructs the module not to use ps2pdf
928ffab5952Smrg#
929ffab5952Smrg# If the user sets the value of PS2PDF, AC_PATH_PROG skips testing the path.
930ffab5952Smrg#
931ffab5952SmrgAC_DEFUN([XORG_WITH_PS2PDF],[
932ffab5952SmrgAC_ARG_VAR([PS2PDF], [Path to ps2pdf command])
933ffab5952Smrgm4_define([_defopt], m4_default([$1], [auto]))
934ffab5952SmrgAC_ARG_WITH(ps2pdf,
935ffab5952Smrg	AS_HELP_STRING([--with-ps2pdf],
936ffab5952Smrg	   [Use ps2pdf to regenerate documentation (default: ]_defopt[)]),
937ffab5952Smrg	   [use_ps2pdf=$withval], [use_ps2pdf=]_defopt)
938ffab5952Smrgm4_undefine([_defopt])
939ffab5952Smrg
940ffab5952Smrgif test "x$use_ps2pdf" = x"auto"; then
941ffab5952Smrg   AC_PATH_PROG([PS2PDF], [ps2pdf])
942ffab5952Smrg   if test "x$PS2PDF" = "x"; then
943ffab5952Smrg        AC_MSG_WARN([ps2pdf not found - documentation targets will be skipped])
944ffab5952Smrg	have_ps2pdf=no
945ffab5952Smrg   else
946ffab5952Smrg        have_ps2pdf=yes
947ffab5952Smrg   fi
948ffab5952Smrgelif test "x$use_ps2pdf" = x"yes" ; then
949ffab5952Smrg   AC_PATH_PROG([PS2PDF], [ps2pdf])
950ffab5952Smrg   if test "x$PS2PDF" = "x"; then
951ffab5952Smrg        AC_MSG_ERROR([--with-ps2pdf=yes specified but ps2pdf not found in PATH])
952ffab5952Smrg   fi
953ffab5952Smrg   have_ps2pdf=yes
954ffab5952Smrgelif test "x$use_ps2pdf" = x"no" ; then
955ffab5952Smrg   if test "x$PS2PDF" != "x"; then
956ffab5952Smrg      AC_MSG_WARN([ignoring PS2PDF environment variable since --with-ps2pdf=no was specified])
957ffab5952Smrg   fi
958ffab5952Smrg   have_ps2pdf=no
959ffab5952Smrgelse
960ffab5952Smrg   AC_MSG_ERROR([--with-ps2pdf expects 'yes' or 'no'])
961ffab5952Smrgfi
962ffab5952SmrgAM_CONDITIONAL([HAVE_PS2PDF], [test "$have_ps2pdf" = yes])
963ffab5952Smrg]) # XORG_WITH_PS2PDF
964ffab5952Smrg
965ffab5952Smrg# XORG_ENABLE_DOCS (enable_docs=yes)
966ffab5952Smrg# ----------------
967ffab5952Smrg# Minimum version: 1.6.0
968ffab5952Smrg#
969ffab5952Smrg# Documentation tools are not always available on all platforms and sometimes
970ffab5952Smrg# not at the appropriate level. This macro enables a builder to skip all
971ffab5952Smrg# documentation targets except traditional man pages.
972ffab5952Smrg# Combined with the specific tool checking macros XORG_WITH_*, it provides
973ffab5952Smrg# maximum flexibilty in controlling documentation building.
974ffab5952Smrg# Refer to:
975ffab5952Smrg# XORG_WITH_XMLTO         --with-xmlto
976ffab5952Smrg# XORG_WITH_ASCIIDOC      --with-asciidoc
977ffab5952Smrg# XORG_WITH_DOXYGEN       --with-doxygen
978ffab5952Smrg# XORG_WITH_FOP           --with-fop
979ffab5952Smrg# XORG_WITH_GROFF         --with-groff
980ffab5952Smrg# XORG_WITH_PS2PDF        --with-ps2pdf
981ffab5952Smrg#
982ffab5952Smrg# Interface to module:
983ffab5952Smrg# ENABLE_DOCS: 	  used in makefiles to conditionally generate documentation
984ffab5952Smrg# --enable-docs: 'yes' user instructs the module to generate docs
985ffab5952Smrg#		 'no' user instructs the module not to generate docs
986ffab5952Smrg# parm1:	specify the default value, yes or no.
987ffab5952Smrg#
988ffab5952SmrgAC_DEFUN([XORG_ENABLE_DOCS],[
98962044635Smrgm4_define([docs_default], m4_default([$1], [yes]))
990ffab5952SmrgAC_ARG_ENABLE(docs,
991ffab5952Smrg	AS_HELP_STRING([--enable-docs],
99262044635Smrg	   [Enable building the documentation (default: ]docs_default[)]),
99362044635Smrg	   [build_docs=$enableval], [build_docs=]docs_default)
99462044635Smrgm4_undefine([docs_default])
995ffab5952SmrgAM_CONDITIONAL(ENABLE_DOCS, [test x$build_docs = xyes])
996ffab5952SmrgAC_MSG_CHECKING([whether to build documentation])
997ffab5952SmrgAC_MSG_RESULT([$build_docs])
998ffab5952Smrg]) # XORG_ENABLE_DOCS
999ffab5952Smrg
1000ffab5952Smrg# XORG_ENABLE_DEVEL_DOCS (enable_devel_docs=yes)
1001ffab5952Smrg# ----------------
1002ffab5952Smrg# Minimum version: 1.6.0
1003ffab5952Smrg#
1004ffab5952Smrg# This macro enables a builder to skip all developer documentation.
1005ffab5952Smrg# Combined with the specific tool checking macros XORG_WITH_*, it provides
1006ffab5952Smrg# maximum flexibilty in controlling documentation building.
1007ffab5952Smrg# Refer to:
1008ffab5952Smrg# XORG_WITH_XMLTO         --with-xmlto
1009ffab5952Smrg# XORG_WITH_ASCIIDOC      --with-asciidoc
1010ffab5952Smrg# XORG_WITH_DOXYGEN       --with-doxygen
1011ffab5952Smrg# XORG_WITH_FOP           --with-fop
1012ffab5952Smrg# XORG_WITH_GROFF         --with-groff
1013ffab5952Smrg# XORG_WITH_PS2PDF        --with-ps2pdf
1014ffab5952Smrg#
1015ffab5952Smrg# Interface to module:
1016ffab5952Smrg# ENABLE_DEVEL_DOCS:	used in makefiles to conditionally generate developer docs
1017ffab5952Smrg# --enable-devel-docs:	'yes' user instructs the module to generate developer docs
1018ffab5952Smrg#			'no' user instructs the module not to generate developer docs
1019ffab5952Smrg# parm1:		specify the default value, yes or no.
1020ffab5952Smrg#
1021ffab5952SmrgAC_DEFUN([XORG_ENABLE_DEVEL_DOCS],[
1022ffab5952Smrgm4_define([devel_default], m4_default([$1], [yes]))
1023ffab5952SmrgAC_ARG_ENABLE(devel-docs,
1024ffab5952Smrg	AS_HELP_STRING([--enable-devel-docs],
1025ffab5952Smrg	   [Enable building the developer documentation (default: ]devel_default[)]),
1026ffab5952Smrg	   [build_devel_docs=$enableval], [build_devel_docs=]devel_default)
1027ffab5952Smrgm4_undefine([devel_default])
1028ffab5952SmrgAM_CONDITIONAL(ENABLE_DEVEL_DOCS, [test x$build_devel_docs = xyes])
1029ffab5952SmrgAC_MSG_CHECKING([whether to build developer documentation])
1030ffab5952SmrgAC_MSG_RESULT([$build_devel_docs])
1031ffab5952Smrg]) # XORG_ENABLE_DEVEL_DOCS
1032ffab5952Smrg
1033ffab5952Smrg# XORG_ENABLE_SPECS (enable_specs=yes)
1034ffab5952Smrg# ----------------
1035ffab5952Smrg# Minimum version: 1.6.0
1036ffab5952Smrg#
1037ffab5952Smrg# This macro enables a builder to skip all functional specification targets.
1038ffab5952Smrg# Combined with the specific tool checking macros XORG_WITH_*, it provides
1039ffab5952Smrg# maximum flexibilty in controlling documentation building.
1040ffab5952Smrg# Refer to:
1041ffab5952Smrg# XORG_WITH_XMLTO         --with-xmlto
1042ffab5952Smrg# XORG_WITH_ASCIIDOC      --with-asciidoc
1043ffab5952Smrg# XORG_WITH_DOXYGEN       --with-doxygen
1044ffab5952Smrg# XORG_WITH_FOP           --with-fop
1045ffab5952Smrg# XORG_WITH_GROFF         --with-groff
1046ffab5952Smrg# XORG_WITH_PS2PDF        --with-ps2pdf
1047ffab5952Smrg#
1048ffab5952Smrg# Interface to module:
1049ffab5952Smrg# ENABLE_SPECS:		used in makefiles to conditionally generate specs
1050ffab5952Smrg# --enable-specs:	'yes' user instructs the module to generate specs
1051ffab5952Smrg#			'no' user instructs the module not to generate specs
1052ffab5952Smrg# parm1:		specify the default value, yes or no.
1053ffab5952Smrg#
1054ffab5952SmrgAC_DEFUN([XORG_ENABLE_SPECS],[
1055ffab5952Smrgm4_define([spec_default], m4_default([$1], [yes]))
1056ffab5952SmrgAC_ARG_ENABLE(specs,
1057ffab5952Smrg	AS_HELP_STRING([--enable-specs],
1058ffab5952Smrg	   [Enable building the specs (default: ]spec_default[)]),
1059ffab5952Smrg	   [build_specs=$enableval], [build_specs=]spec_default)
1060ffab5952Smrgm4_undefine([spec_default])
1061ffab5952SmrgAM_CONDITIONAL(ENABLE_SPECS, [test x$build_specs = xyes])
1062ffab5952SmrgAC_MSG_CHECKING([whether to build functional specifications])
1063ffab5952SmrgAC_MSG_RESULT([$build_specs])
1064ffab5952Smrg]) # XORG_ENABLE_SPECS
1065ffab5952Smrg
106662044635Smrg# XORG_ENABLE_UNIT_TESTS (enable_unit_tests=auto)
106762044635Smrg# ----------------------------------------------
106862044635Smrg# Minimum version: 1.13.0
106962044635Smrg#
107062044635Smrg# This macro enables a builder to enable/disable unit testing
107162044635Smrg# It makes no assumption about the test cases implementation
107262044635Smrg# Test cases may or may not use Automake "Support for test suites"
107362044635Smrg# They may or may not use the software utility library GLib
107462044635Smrg#
107562044635Smrg# When used in conjunction with XORG_WITH_GLIB, use both AM_CONDITIONAL
107662044635Smrg# ENABLE_UNIT_TESTS and HAVE_GLIB. Not all unit tests may use glib.
107762044635Smrg# The variable enable_unit_tests is used by other macros in this file.
107862044635Smrg#
107962044635Smrg# Interface to module:
108062044635Smrg# ENABLE_UNIT_TESTS:	used in makefiles to conditionally build tests
108162044635Smrg# enable_unit_tests:    used in configure.ac for additional configuration
108262044635Smrg# --enable-unit-tests:	'yes' user instructs the module to build tests
108362044635Smrg#			'no' user instructs the module not to build tests
108462044635Smrg# parm1:		specify the default value, yes or no.
108562044635Smrg#
108662044635SmrgAC_DEFUN([XORG_ENABLE_UNIT_TESTS],[
108762044635SmrgAC_BEFORE([$0], [XORG_WITH_GLIB])
108862044635SmrgAC_BEFORE([$0], [XORG_LD_WRAP])
10893ae17ff1SmrgAC_REQUIRE([XORG_MEMORY_CHECK_FLAGS])
109062044635Smrgm4_define([_defopt], m4_default([$1], [auto]))
109162044635SmrgAC_ARG_ENABLE(unit-tests, AS_HELP_STRING([--enable-unit-tests],
109262044635Smrg	[Enable building unit test cases (default: ]_defopt[)]),
109362044635Smrg	[enable_unit_tests=$enableval], [enable_unit_tests=]_defopt)
109462044635Smrgm4_undefine([_defopt])
109562044635SmrgAM_CONDITIONAL(ENABLE_UNIT_TESTS, [test "x$enable_unit_tests" != xno])
109662044635SmrgAC_MSG_CHECKING([whether to build unit test cases])
109762044635SmrgAC_MSG_RESULT([$enable_unit_tests])
109862044635Smrg]) # XORG_ENABLE_UNIT_TESTS
109962044635Smrg
11003ae17ff1Smrg# XORG_ENABLE_INTEGRATION_TESTS (enable_unit_tests=auto)
11013ae17ff1Smrg# ------------------------------------------------------
11023ae17ff1Smrg# Minimum version: 1.17.0
11033ae17ff1Smrg#
11043ae17ff1Smrg# This macro enables a builder to enable/disable integration testing
11053ae17ff1Smrg# It makes no assumption about the test cases' implementation
11063ae17ff1Smrg# Test cases may or may not use Automake "Support for test suites"
11073ae17ff1Smrg#
11083ae17ff1Smrg# Please see XORG_ENABLE_UNIT_TESTS for unit test support. Unit test support
11093ae17ff1Smrg# usually requires less dependencies and may be built and run under less
11103ae17ff1Smrg# stringent environments than integration tests.
11113ae17ff1Smrg#
11123ae17ff1Smrg# Interface to module:
11133ae17ff1Smrg# ENABLE_INTEGRATION_TESTS:   used in makefiles to conditionally build tests
11143ae17ff1Smrg# enable_integration_tests:   used in configure.ac for additional configuration
11153ae17ff1Smrg# --enable-integration-tests: 'yes' user instructs the module to build tests
11163ae17ff1Smrg#                             'no' user instructs the module not to build tests
11173ae17ff1Smrg# parm1:                      specify the default value, yes or no.
11183ae17ff1Smrg#
11193ae17ff1SmrgAC_DEFUN([XORG_ENABLE_INTEGRATION_TESTS],[
11203ae17ff1SmrgAC_REQUIRE([XORG_MEMORY_CHECK_FLAGS])
11213ae17ff1Smrgm4_define([_defopt], m4_default([$1], [auto]))
11223ae17ff1SmrgAC_ARG_ENABLE(integration-tests, AS_HELP_STRING([--enable-integration-tests],
11233ae17ff1Smrg	[Enable building integration test cases (default: ]_defopt[)]),
11243ae17ff1Smrg	[enable_integration_tests=$enableval],
11253ae17ff1Smrg	[enable_integration_tests=]_defopt)
11263ae17ff1Smrgm4_undefine([_defopt])
11273ae17ff1SmrgAM_CONDITIONAL([ENABLE_INTEGRATION_TESTS],
11283ae17ff1Smrg	[test "x$enable_integration_tests" != xno])
11293ae17ff1SmrgAC_MSG_CHECKING([whether to build unit test cases])
11303ae17ff1SmrgAC_MSG_RESULT([$enable_integration_tests])
11313ae17ff1Smrg]) # XORG_ENABLE_INTEGRATION_TESTS
11323ae17ff1Smrg
113362044635Smrg# XORG_WITH_GLIB([MIN-VERSION], [DEFAULT])
113462044635Smrg# ----------------------------------------
113562044635Smrg# Minimum version: 1.13.0
113662044635Smrg#
113762044635Smrg# GLib is a library which provides advanced data structures and functions.
113862044635Smrg# This macro enables a module to test for the presence of Glib.
113962044635Smrg#
114062044635Smrg# When used with ENABLE_UNIT_TESTS, it is assumed GLib is used for unit testing.
114162044635Smrg# Otherwise the value of $enable_unit_tests is blank.
114262044635Smrg#
11433ae17ff1Smrg# Please see XORG_ENABLE_INTEGRATION_TESTS for integration test support. Unit
11443ae17ff1Smrg# test support usually requires less dependencies and may be built and run under
11453ae17ff1Smrg# less stringent environments than integration tests.
11463ae17ff1Smrg#
114762044635Smrg# Interface to module:
114862044635Smrg# HAVE_GLIB: used in makefiles to conditionally build targets
114962044635Smrg# with_glib: used in configure.ac to know if GLib has been found
115062044635Smrg# --with-glib:	'yes' user instructs the module to use glib
115162044635Smrg#		'no' user instructs the module not to use glib
115262044635Smrg#
115362044635SmrgAC_DEFUN([XORG_WITH_GLIB],[
115462044635SmrgAC_REQUIRE([PKG_PROG_PKG_CONFIG])
115562044635Smrgm4_define([_defopt], m4_default([$2], [auto]))
115662044635SmrgAC_ARG_WITH(glib, AS_HELP_STRING([--with-glib],
115762044635Smrg	[Use GLib library for unit testing (default: ]_defopt[)]),
115862044635Smrg	[with_glib=$withval], [with_glib=]_defopt)
115962044635Smrgm4_undefine([_defopt])
116062044635Smrg
116162044635Smrghave_glib=no
116262044635Smrg# Do not probe GLib if user explicitly disabled unit testing
116362044635Smrgif test "x$enable_unit_tests" != x"no"; then
116462044635Smrg  # Do not probe GLib if user explicitly disabled it
116562044635Smrg  if test "x$with_glib" != x"no"; then
116662044635Smrg    m4_ifval(
116762044635Smrg      [$1],
116862044635Smrg      [PKG_CHECK_MODULES([GLIB], [glib-2.0 >= $1], [have_glib=yes], [have_glib=no])],
116962044635Smrg      [PKG_CHECK_MODULES([GLIB], [glib-2.0], [have_glib=yes], [have_glib=no])]
117062044635Smrg    )
117162044635Smrg  fi
117262044635Smrgfi
117362044635Smrg
117462044635Smrg# Not having GLib when unit testing has been explicitly requested is an error
117562044635Smrgif test "x$enable_unit_tests" = x"yes"; then
117662044635Smrg  if test "x$have_glib" = x"no"; then
117762044635Smrg    AC_MSG_ERROR([--enable-unit-tests=yes specified but glib-2.0 not found])
117862044635Smrg  fi
117962044635Smrgfi
118062044635Smrg
118162044635Smrg# Having unit testing disabled when GLib has been explicitly requested is an error
118262044635Smrgif test "x$enable_unit_tests" = x"no"; then
118362044635Smrg  if test "x$with_glib" = x"yes"; then
118462044635Smrg    AC_MSG_ERROR([--enable-unit-tests=yes specified but glib-2.0 not found])
118562044635Smrg  fi
118662044635Smrgfi
118762044635Smrg
118862044635Smrg# Not having GLib when it has been explicitly requested is an error
118962044635Smrgif test "x$with_glib" = x"yes"; then
119062044635Smrg  if test "x$have_glib" = x"no"; then
119162044635Smrg    AC_MSG_ERROR([--with-glib=yes specified but glib-2.0 not found])
119262044635Smrg  fi
119362044635Smrgfi
119462044635Smrg
119562044635SmrgAM_CONDITIONAL([HAVE_GLIB], [test "$have_glib" = yes])
119662044635Smrg]) # XORG_WITH_GLIB
119762044635Smrg
11983ae17ff1Smrg# XORG_LD_WRAP([required|optional])
11993ae17ff1Smrg# ---------------------------------
120062044635Smrg# Minimum version: 1.13.0
120162044635Smrg#
120262044635Smrg# Check if linker supports -wrap, passed via compiler flags
120362044635Smrg#
120462044635Smrg# When used with ENABLE_UNIT_TESTS, it is assumed -wrap is used for unit testing.
120562044635Smrg# Otherwise the value of $enable_unit_tests is blank.
120662044635Smrg#
12073ae17ff1Smrg# Argument added in 1.16.0 - default is "required", to match existing behavior
12083ae17ff1Smrg# of returning an error if enable_unit_tests is yes, and ld -wrap is not
12093ae17ff1Smrg# available, an argument of "optional" allows use when some unit tests require
12103ae17ff1Smrg# ld -wrap and others do not.
12113ae17ff1Smrg#
121262044635SmrgAC_DEFUN([XORG_LD_WRAP],[
12133ae17ff1SmrgXORG_CHECK_LINKER_FLAGS([-Wl,-wrap,exit],[have_ld_wrap=yes],[have_ld_wrap=no],
12143ae17ff1Smrg    [AC_LANG_PROGRAM([#include <stdlib.h>
12153ae17ff1Smrg                      void __wrap_exit(int status) { return; }],
12163ae17ff1Smrg                     [exit(0);])])
121762044635Smrg# Not having ld wrap when unit testing has been explicitly requested is an error
12183ae17ff1Smrgif test "x$enable_unit_tests" = x"yes" -a "x$1" != "xoptional"; then
121962044635Smrg  if test "x$have_ld_wrap" = x"no"; then
122062044635Smrg    AC_MSG_ERROR([--enable-unit-tests=yes specified but ld -wrap support is not available])
122162044635Smrg  fi
122262044635Smrgfi
122362044635SmrgAM_CONDITIONAL([HAVE_LD_WRAP], [test "$have_ld_wrap" = yes])
122462044635Smrg#
122562044635Smrg]) # XORG_LD_WRAP
122662044635Smrg
122762044635Smrg# XORG_CHECK_LINKER_FLAGS
122862044635Smrg# -----------------------
122962044635Smrg# SYNOPSIS
123062044635Smrg#
12313ae17ff1Smrg#   XORG_CHECK_LINKER_FLAGS(FLAGS, [ACTION-SUCCESS], [ACTION-FAILURE], [PROGRAM-SOURCE])
123262044635Smrg#
123362044635Smrg# DESCRIPTION
123462044635Smrg#
123562044635Smrg#   Check whether the given linker FLAGS work with the current language's
123662044635Smrg#   linker, or whether they give an error.
123762044635Smrg#
123862044635Smrg#   ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
123962044635Smrg#   success/failure.
124062044635Smrg#
12413ae17ff1Smrg#   PROGRAM-SOURCE is the program source to link with, if needed
12423ae17ff1Smrg#
124362044635Smrg#   NOTE: Based on AX_CHECK_COMPILER_FLAGS.
124462044635Smrg#
124562044635Smrg# LICENSE
124662044635Smrg#
124762044635Smrg#   Copyright (c) 2009 Mike Frysinger <vapier@gentoo.org>
124862044635Smrg#   Copyright (c) 2009 Steven G. Johnson <stevenj@alum.mit.edu>
124962044635Smrg#   Copyright (c) 2009 Matteo Frigo
125062044635Smrg#
125162044635Smrg#   This program is free software: you can redistribute it and/or modify it
125262044635Smrg#   under the terms of the GNU General Public License as published by the
125362044635Smrg#   Free Software Foundation, either version 3 of the License, or (at your
125462044635Smrg#   option) any later version.
125562044635Smrg#
125662044635Smrg#   This program is distributed in the hope that it will be useful, but
125762044635Smrg#   WITHOUT ANY WARRANTY; without even the implied warranty of
125862044635Smrg#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
125962044635Smrg#   Public License for more details.
126062044635Smrg#
126162044635Smrg#   You should have received a copy of the GNU General Public License along
126262044635Smrg#   with this program. If not, see <http://www.gnu.org/licenses/>.
126362044635Smrg#
126462044635Smrg#   As a special exception, the respective Autoconf Macro's copyright owner
126562044635Smrg#   gives unlimited permission to copy, distribute and modify the configure
126662044635Smrg#   scripts that are the output of Autoconf when processing the Macro. You
126762044635Smrg#   need not follow the terms of the GNU General Public License when using
126862044635Smrg#   or distributing such scripts, even though portions of the text of the
126962044635Smrg#   Macro appear in them. The GNU General Public License (GPL) does govern
127062044635Smrg#   all other use of the material that constitutes the Autoconf Macro.
127162044635Smrg#
127262044635Smrg#   This special exception to the GPL applies to versions of the Autoconf
127362044635Smrg#   Macro released by the Autoconf Archive. When you make and distribute a
127462044635Smrg#   modified version of the Autoconf Macro, you may extend this special
127562044635Smrg#   exception to the GPL to apply to your modified version as well.#
127662044635SmrgAC_DEFUN([XORG_CHECK_LINKER_FLAGS],
127762044635Smrg[AC_MSG_CHECKING([whether the linker accepts $1])
127862044635Smrgdnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname:
127962044635SmrgAS_LITERAL_IF([$1],
128062044635Smrg  [AC_CACHE_VAL(AS_TR_SH(xorg_cv_linker_flags_[$1]), [
128162044635Smrg      ax_save_FLAGS=$LDFLAGS
128262044635Smrg      LDFLAGS="$1"
12833ae17ff1Smrg      AC_LINK_IFELSE([m4_default([$4],[AC_LANG_PROGRAM()])],
128462044635Smrg        AS_TR_SH(xorg_cv_linker_flags_[$1])=yes,
128562044635Smrg        AS_TR_SH(xorg_cv_linker_flags_[$1])=no)
128662044635Smrg      LDFLAGS=$ax_save_FLAGS])],
128762044635Smrg  [ax_save_FLAGS=$LDFLAGS
128862044635Smrg   LDFLAGS="$1"
128962044635Smrg   AC_LINK_IFELSE([AC_LANG_PROGRAM()],
129062044635Smrg     eval AS_TR_SH(xorg_cv_linker_flags_[$1])=yes,
129162044635Smrg     eval AS_TR_SH(xorg_cv_linker_flags_[$1])=no)
129262044635Smrg   LDFLAGS=$ax_save_FLAGS])
129362044635Smrgeval xorg_check_linker_flags=$AS_TR_SH(xorg_cv_linker_flags_[$1])
129462044635SmrgAC_MSG_RESULT($xorg_check_linker_flags)
129562044635Smrgif test "x$xorg_check_linker_flags" = xyes; then
129662044635Smrg	m4_default([$2], :)
129762044635Smrgelse
129862044635Smrg	m4_default([$3], :)
129962044635Smrgfi
130062044635Smrg]) # XORG_CHECK_LINKER_FLAGS
130162044635Smrg
13023ae17ff1Smrg# XORG_MEMORY_CHECK_FLAGS
13033ae17ff1Smrg# -----------------------
13043ae17ff1Smrg# Minimum version: 1.16.0
13053ae17ff1Smrg#
13063ae17ff1Smrg# This macro attempts to find appropriate memory checking functionality
13073ae17ff1Smrg# for various platforms which unit testing code may use to catch various
13083ae17ff1Smrg# forms of memory allocation and access errors in testing.
13093ae17ff1Smrg#
13103ae17ff1Smrg# Interface to module:
13113ae17ff1Smrg# XORG_MALLOC_DEBUG_ENV - environment variables to set to enable debugging
13123ae17ff1Smrg#                         Usually added to TESTS_ENVIRONMENT in Makefile.am
13133ae17ff1Smrg#
13143ae17ff1Smrg# If the user sets the value of XORG_MALLOC_DEBUG_ENV, it is used verbatim.
13153ae17ff1Smrg#
13163ae17ff1SmrgAC_DEFUN([XORG_MEMORY_CHECK_FLAGS],[
13173ae17ff1Smrg
13183ae17ff1SmrgAC_REQUIRE([AC_CANONICAL_HOST])
13193ae17ff1SmrgAC_ARG_VAR([XORG_MALLOC_DEBUG_ENV],
13203ae17ff1Smrg           [Environment variables to enable memory checking in tests])
13213ae17ff1Smrg
13223ae17ff1Smrg# Check for different types of support on different platforms
13233ae17ff1Smrgcase $host_os in
13243ae17ff1Smrg    solaris*)
13253ae17ff1Smrg        AC_CHECK_LIB([umem], [umem_alloc],
13263ae17ff1Smrg            [malloc_debug_env='LD_PRELOAD=libumem.so UMEM_DEBUG=default'])
13273ae17ff1Smrg        ;;
13283ae17ff1Smrg    *-gnu*) # GNU libc - Value is used as a single byte bit pattern,
13293ae17ff1Smrg        # both directly and inverted, so should not be 0 or 255.
13303ae17ff1Smrg        malloc_debug_env='MALLOC_PERTURB_=15'
13313ae17ff1Smrg        ;;
13323ae17ff1Smrg    darwin*)
13333ae17ff1Smrg        malloc_debug_env='MallocPreScribble=1 MallocScribble=1 DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib'
13343ae17ff1Smrg        ;;
13353ae17ff1Smrg    *bsd*)
13363ae17ff1Smrg        malloc_debug_env='MallocPreScribble=1 MallocScribble=1'
13373ae17ff1Smrg        ;;
13383ae17ff1Smrgesac
13393ae17ff1Smrg
13403ae17ff1Smrg# User supplied flags override default flags
13413ae17ff1Smrgif test "x$XORG_MALLOC_DEBUG_ENV" != "x"; then
13423ae17ff1Smrg    malloc_debug_env="$XORG_MALLOC_DEBUG_ENV"
13433ae17ff1Smrgfi
13443ae17ff1Smrg
13453ae17ff1SmrgAC_SUBST([XORG_MALLOC_DEBUG_ENV],[$malloc_debug_env])
13463ae17ff1Smrg]) # XORG_WITH_LINT
13473ae17ff1Smrg
1348ffab5952Smrg# XORG_CHECK_MALLOC_ZERO
1349ffab5952Smrg# ----------------------
1350ffab5952Smrg# Minimum version: 1.0.0
1351ffab5952Smrg#
1352ffab5952Smrg# Defines {MALLOC,XMALLOC,XTMALLOC}_ZERO_CFLAGS appropriately if
1353ffab5952Smrg# malloc(0) returns NULL.  Packages should add one of these cflags to
1354ffab5952Smrg# their AM_CFLAGS (or other appropriate *_CFLAGS) to use them.
1355ffab5952SmrgAC_DEFUN([XORG_CHECK_MALLOC_ZERO],[
1356ffab5952SmrgAC_ARG_ENABLE(malloc0returnsnull,
1357ffab5952Smrg	AS_HELP_STRING([--enable-malloc0returnsnull],
1358ffab5952Smrg		       [malloc(0) returns NULL (default: auto)]),
1359ffab5952Smrg	[MALLOC_ZERO_RETURNS_NULL=$enableval],
1360ffab5952Smrg	[MALLOC_ZERO_RETURNS_NULL=auto])
1361ffab5952Smrg
1362ffab5952SmrgAC_MSG_CHECKING([whether malloc(0) returns NULL])
1363ffab5952Smrgif test "x$MALLOC_ZERO_RETURNS_NULL" = xauto; then
136443c16309SmrgAC_CACHE_VAL([xorg_cv_malloc0_returns_null],
136543c16309Smrg	[AC_RUN_IFELSE([AC_LANG_PROGRAM([
136662044635Smrg#include <stdlib.h>
136762044635Smrg],[
1368ffab5952Smrg    char *m0, *r0, *c0, *p;
1369ffab5952Smrg    m0 = malloc(0);
1370ffab5952Smrg    p = malloc(10);
1371ffab5952Smrg    r0 = realloc(p,0);
137262044635Smrg    c0 = calloc(0,10);
137362044635Smrg    exit((m0 == 0 || r0 == 0 || c0 == 0) ? 0 : 1);
137462044635Smrg])],
137543c16309Smrg		[xorg_cv_malloc0_returns_null=yes],
137643c16309Smrg		[xorg_cv_malloc0_returns_null=no])])
137743c16309SmrgMALLOC_ZERO_RETURNS_NULL=$xorg_cv_malloc0_returns_null
1378ffab5952Smrgfi
1379ffab5952SmrgAC_MSG_RESULT([$MALLOC_ZERO_RETURNS_NULL])
1380ffab5952Smrg
1381ffab5952Smrgif test "x$MALLOC_ZERO_RETURNS_NULL" = xyes; then
1382ffab5952Smrg	MALLOC_ZERO_CFLAGS="-DMALLOC_0_RETURNS_NULL"
1383ffab5952Smrg	XMALLOC_ZERO_CFLAGS=$MALLOC_ZERO_CFLAGS
1384ffab5952Smrg	XTMALLOC_ZERO_CFLAGS="$MALLOC_ZERO_CFLAGS -DXTMALLOC_BC"
1385ffab5952Smrgelse
1386ffab5952Smrg	MALLOC_ZERO_CFLAGS=""
1387ffab5952Smrg	XMALLOC_ZERO_CFLAGS=""
1388ffab5952Smrg	XTMALLOC_ZERO_CFLAGS=""
1389ffab5952Smrgfi
1390ffab5952Smrg
1391ffab5952SmrgAC_SUBST([MALLOC_ZERO_CFLAGS])
1392ffab5952SmrgAC_SUBST([XMALLOC_ZERO_CFLAGS])
1393ffab5952SmrgAC_SUBST([XTMALLOC_ZERO_CFLAGS])
1394ffab5952Smrg]) # XORG_CHECK_MALLOC_ZERO
1395ffab5952Smrg
1396ffab5952Smrg# XORG_WITH_LINT()
1397ffab5952Smrg# ----------------
1398ffab5952Smrg# Minimum version: 1.1.0
1399ffab5952Smrg#
1400ffab5952Smrg# This macro enables the use of a tool that flags some suspicious and
1401ffab5952Smrg# non-portable constructs (likely to be bugs) in C language source code.
1402ffab5952Smrg# It will attempt to locate the tool and use appropriate options.
1403ffab5952Smrg# There are various lint type tools on different platforms.
1404ffab5952Smrg#
1405ffab5952Smrg# Interface to module:
1406ffab5952Smrg# LINT:		returns the path to the tool found on the platform
1407ffab5952Smrg#		or the value set to LINT on the configure cmd line
1408ffab5952Smrg#		also an Automake conditional
1409ffab5952Smrg# LINT_FLAGS:	an Automake variable with appropriate flags
1410ffab5952Smrg#
1411ffab5952Smrg# --with-lint:	'yes' user instructs the module to use lint
1412ffab5952Smrg#		'no' user instructs the module not to use lint (default)
1413ffab5952Smrg#
1414ffab5952Smrg# If the user sets the value of LINT, AC_PATH_PROG skips testing the path.
1415ffab5952Smrg# If the user sets the value of LINT_FLAGS, they are used verbatim.
1416ffab5952Smrg#
1417ffab5952SmrgAC_DEFUN([XORG_WITH_LINT],[
1418ffab5952Smrg
1419ffab5952SmrgAC_ARG_VAR([LINT], [Path to a lint-style command])
1420ffab5952SmrgAC_ARG_VAR([LINT_FLAGS], [Flags for the lint-style command])
1421ffab5952SmrgAC_ARG_WITH(lint, [AS_HELP_STRING([--with-lint],
1422ffab5952Smrg		[Use a lint-style source code checker (default: disabled)])],
1423ffab5952Smrg		[use_lint=$withval], [use_lint=no])
1424ffab5952Smrg
1425ffab5952Smrg# Obtain platform specific info like program name and options
1426ffab5952Smrg# The lint program on FreeBSD and NetBSD is different from the one on Solaris
1427ffab5952Smrgcase $host_os in
1428ffab5952Smrg  *linux* | *openbsd* | kfreebsd*-gnu | darwin* | cygwin*)
1429ffab5952Smrg	lint_name=splint
1430ffab5952Smrg	lint_options="-badflag"
1431ffab5952Smrg	;;
1432ffab5952Smrg  *freebsd* | *netbsd*)
1433ffab5952Smrg	lint_name=lint
1434ffab5952Smrg	lint_options="-u -b"
1435ffab5952Smrg	;;
1436ffab5952Smrg  *solaris*)
1437ffab5952Smrg	lint_name=lint
1438ffab5952Smrg	lint_options="-u -b -h -erroff=E_INDISTING_FROM_TRUNC2"
1439ffab5952Smrg	;;
1440ffab5952Smrgesac
1441ffab5952Smrg
1442ffab5952Smrg# Test for the presence of the program (either guessed by the code or spelled out by the user)
1443ffab5952Smrgif test "x$use_lint" = x"yes" ; then
1444ffab5952Smrg   AC_PATH_PROG([LINT], [$lint_name])
1445ffab5952Smrg   if test "x$LINT" = "x"; then
1446ffab5952Smrg        AC_MSG_ERROR([--with-lint=yes specified but lint-style tool not found in PATH])
1447ffab5952Smrg   fi
1448ffab5952Smrgelif test "x$use_lint" = x"no" ; then
1449ffab5952Smrg   if test "x$LINT" != "x"; then
1450ffab5952Smrg      AC_MSG_WARN([ignoring LINT environment variable since --with-lint=no was specified])
1451ffab5952Smrg   fi
1452ffab5952Smrgelse
1453ffab5952Smrg   AC_MSG_ERROR([--with-lint expects 'yes' or 'no'. Use LINT variable to specify path.])
1454ffab5952Smrgfi
1455ffab5952Smrg
1456ffab5952Smrg# User supplied flags override default flags
1457ffab5952Smrgif test "x$LINT_FLAGS" != "x"; then
1458ffab5952Smrg   lint_options=$LINT_FLAGS
1459ffab5952Smrgfi
1460ffab5952Smrg
1461ffab5952SmrgAC_SUBST([LINT_FLAGS],[$lint_options])
1462ffab5952SmrgAM_CONDITIONAL(LINT, [test "x$LINT" != x])
1463ffab5952Smrg
1464ffab5952Smrg]) # XORG_WITH_LINT
1465ffab5952Smrg
1466ffab5952Smrg# XORG_LINT_LIBRARY(LIBNAME)
1467ffab5952Smrg# --------------------------
1468ffab5952Smrg# Minimum version: 1.1.0
1469ffab5952Smrg#
1470ffab5952Smrg# Sets up flags for building lint libraries for checking programs that call
1471ffab5952Smrg# functions in the library.
1472ffab5952Smrg#
1473ffab5952Smrg# Interface to module:
1474ffab5952Smrg# LINTLIB		- Automake variable with the name of lint library file to make
1475ffab5952Smrg# MAKE_LINT_LIB		- Automake conditional
1476ffab5952Smrg#
1477ffab5952Smrg# --enable-lint-library:  - 'yes' user instructs the module to created a lint library
1478ffab5952Smrg#			  - 'no' user instructs the module not to create a lint library (default)
1479ffab5952Smrg
1480ffab5952SmrgAC_DEFUN([XORG_LINT_LIBRARY],[
1481ffab5952SmrgAC_REQUIRE([XORG_WITH_LINT])
1482ffab5952SmrgAC_ARG_ENABLE(lint-library, [AS_HELP_STRING([--enable-lint-library],
1483ffab5952Smrg	[Create lint library (default: disabled)])],
1484ffab5952Smrg	[make_lint_lib=$enableval], [make_lint_lib=no])
1485ffab5952Smrg
1486ffab5952Smrgif test "x$make_lint_lib" = x"yes" ; then
1487ffab5952Smrg   LINTLIB=llib-l$1.ln
1488ffab5952Smrg   if test "x$LINT" = "x"; then
1489ffab5952Smrg        AC_MSG_ERROR([Cannot make lint library without --with-lint])
1490ffab5952Smrg   fi
1491ffab5952Smrgelif test "x$make_lint_lib" != x"no" ; then
1492ffab5952Smrg   AC_MSG_ERROR([--enable-lint-library expects 'yes' or 'no'.])
1493ffab5952Smrgfi
1494ffab5952Smrg
1495ffab5952SmrgAC_SUBST(LINTLIB)
1496ffab5952SmrgAM_CONDITIONAL(MAKE_LINT_LIB, [test x$make_lint_lib != xno])
1497ffab5952Smrg
1498ffab5952Smrg]) # XORG_LINT_LIBRARY
1499ffab5952Smrg
150062044635Smrg# XORG_COMPILER_BRAND
150162044635Smrg# -------------------
150262044635Smrg# Minimum version: 1.14.0
150362044635Smrg#
150462044635Smrg# Checks for various brands of compilers and sets flags as appropriate:
150562044635Smrg#   GNU gcc - relies on AC_PROG_CC (via AC_PROG_CC_C99) to set GCC to "yes"
15063ae17ff1Smrg#   GNU g++ - relies on AC_PROG_CXX to set GXX to "yes"
150762044635Smrg#   clang compiler - sets CLANGCC to "yes"
150862044635Smrg#   Intel compiler - sets INTELCC to "yes"
150962044635Smrg#   Sun/Oracle Solaris Studio cc - sets SUNCC to "yes"
151062044635Smrg#
151162044635SmrgAC_DEFUN([XORG_COMPILER_BRAND], [
15123ae17ff1SmrgAC_LANG_CASE(
15133ae17ff1Smrg	[C], [
15143ae17ff1Smrg		AC_REQUIRE([AC_PROG_CC_C99])
15153ae17ff1Smrg	],
15163ae17ff1Smrg	[C++], [
15173ae17ff1Smrg		AC_REQUIRE([AC_PROG_CXX])
15183ae17ff1Smrg	]
15193ae17ff1Smrg)
152062044635SmrgAC_CHECK_DECL([__clang__], [CLANGCC="yes"], [CLANGCC="no"])
152162044635SmrgAC_CHECK_DECL([__INTEL_COMPILER], [INTELCC="yes"], [INTELCC="no"])
152262044635SmrgAC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
152362044635Smrg]) # XORG_COMPILER_BRAND
152462044635Smrg
15253ae17ff1Smrg# XORG_TESTSET_CFLAG(<variable>, <flag>, [<alternative flag>, ...])
15263ae17ff1Smrg# ---------------
15273ae17ff1Smrg# Minimum version: 1.16.0
15283ae17ff1Smrg#
15293ae17ff1Smrg# Test if the compiler works when passed the given flag as a command line argument.
15303ae17ff1Smrg# If it succeeds, the flag is appeneded to the given variable.  If not, it tries the
15313ae17ff1Smrg# next flag in the list until there are no more options.
15323ae17ff1Smrg#
15333ae17ff1Smrg# Note that this does not guarantee that the compiler supports the flag as some
15343ae17ff1Smrg# compilers will simply ignore arguments that they do not understand, but we do
15353ae17ff1Smrg# attempt to weed out false positives by using -Werror=unknown-warning-option and
15363ae17ff1Smrg# -Werror=unused-command-line-argument
15373ae17ff1Smrg#
15383ae17ff1SmrgAC_DEFUN([XORG_TESTSET_CFLAG], [
15393ae17ff1Smrgm4_if([$#], 0, [m4_fatal([XORG_TESTSET_CFLAG was given with an unsupported number of arguments])])
15403ae17ff1Smrgm4_if([$#], 1, [m4_fatal([XORG_TESTSET_CFLAG was given with an unsupported number of arguments])])
15413ae17ff1Smrg
15423ae17ff1SmrgAC_LANG_COMPILER_REQUIRE
15433ae17ff1Smrg
15443ae17ff1SmrgAC_LANG_CASE(
15453ae17ff1Smrg	[C], [
15463ae17ff1Smrg		AC_REQUIRE([AC_PROG_CC_C99])
15473ae17ff1Smrg		define([PREFIX], [C])
15483ae17ff1Smrg		define([CACHE_PREFIX], [cc])
15493ae17ff1Smrg		define([COMPILER], [$CC])
15503ae17ff1Smrg	],
15513ae17ff1Smrg	[C++], [
15523ae17ff1Smrg		define([PREFIX], [CXX])
15533ae17ff1Smrg		define([CACHE_PREFIX], [cxx])
15543ae17ff1Smrg		define([COMPILER], [$CXX])
15553ae17ff1Smrg	]
15563ae17ff1Smrg)
15573ae17ff1Smrg
15583ae17ff1Smrg[xorg_testset_save_]PREFIX[FLAGS]="$PREFIX[FLAGS]"
15593ae17ff1Smrg
15603ae17ff1Smrgif test "x$[xorg_testset_]CACHE_PREFIX[_unknown_warning_option]" = "x" ; then
15613ae17ff1Smrg	PREFIX[FLAGS]="$PREFIX[FLAGS] -Werror=unknown-warning-option"
15623ae17ff1Smrg	AC_CACHE_CHECK([if ]COMPILER[ supports -Werror=unknown-warning-option],
15633ae17ff1Smrg			[xorg_cv_]CACHE_PREFIX[_flag_unknown_warning_option],
15643ae17ff1Smrg			AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])],
15653ae17ff1Smrg					  [xorg_cv_]CACHE_PREFIX[_flag_unknown_warning_option=yes],
15663ae17ff1Smrg					  [xorg_cv_]CACHE_PREFIX[_flag_unknown_warning_option=no]))
15673ae17ff1Smrg	[xorg_testset_]CACHE_PREFIX[_unknown_warning_option]=$[xorg_cv_]CACHE_PREFIX[_flag_unknown_warning_option]
15683ae17ff1Smrg	PREFIX[FLAGS]="$[xorg_testset_save_]PREFIX[FLAGS]"
15693ae17ff1Smrgfi
15703ae17ff1Smrg
15713ae17ff1Smrgif test "x$[xorg_testset_]CACHE_PREFIX[_unused_command_line_argument]" = "x" ; then
15723ae17ff1Smrg	if test "x$[xorg_testset_]CACHE_PREFIX[_unknown_warning_option]" = "xyes" ; then
15733ae17ff1Smrg		PREFIX[FLAGS]="$PREFIX[FLAGS] -Werror=unknown-warning-option"
15743ae17ff1Smrg	fi
15753ae17ff1Smrg	PREFIX[FLAGS]="$PREFIX[FLAGS] -Werror=unused-command-line-argument"
15763ae17ff1Smrg	AC_CACHE_CHECK([if ]COMPILER[ supports -Werror=unused-command-line-argument],
15773ae17ff1Smrg			[xorg_cv_]CACHE_PREFIX[_flag_unused_command_line_argument],
15783ae17ff1Smrg			AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])],
15793ae17ff1Smrg					  [xorg_cv_]CACHE_PREFIX[_flag_unused_command_line_argument=yes],
15803ae17ff1Smrg					  [xorg_cv_]CACHE_PREFIX[_flag_unused_command_line_argument=no]))
15813ae17ff1Smrg	[xorg_testset_]CACHE_PREFIX[_unused_command_line_argument]=$[xorg_cv_]CACHE_PREFIX[_flag_unused_command_line_argument]
15823ae17ff1Smrg	PREFIX[FLAGS]="$[xorg_testset_save_]PREFIX[FLAGS]"
15833ae17ff1Smrgfi
15843ae17ff1Smrg
15853ae17ff1Smrgfound="no"
15863ae17ff1Smrgm4_foreach([flag], m4_cdr($@), [
15873ae17ff1Smrg	if test $found = "no" ; then
158843c16309Smrg		if test "x$xorg_testset_]CACHE_PREFIX[_unknown_warning_option" = "xyes" ; then
15893ae17ff1Smrg			PREFIX[FLAGS]="$PREFIX[FLAGS] -Werror=unknown-warning-option"
15903ae17ff1Smrg		fi
15913ae17ff1Smrg
159243c16309Smrg		if test "x$xorg_testset_]CACHE_PREFIX[_unused_command_line_argument" = "xyes" ; then
15933ae17ff1Smrg			PREFIX[FLAGS]="$PREFIX[FLAGS] -Werror=unused-command-line-argument"
15943ae17ff1Smrg		fi
15953ae17ff1Smrg
15963ae17ff1Smrg		PREFIX[FLAGS]="$PREFIX[FLAGS] ]flag["
15973ae17ff1Smrg
15983ae17ff1Smrgdnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname
159943c16309Smrg		AC_MSG_CHECKING([if ]COMPILER[ supports ]flag[])
16003ae17ff1Smrg		cacheid=AS_TR_SH([xorg_cv_]CACHE_PREFIX[_flag_]flag[])
16013ae17ff1Smrg		AC_CACHE_VAL($cacheid,
16023ae17ff1Smrg			     [AC_LINK_IFELSE([AC_LANG_PROGRAM([int i;])],
16033ae17ff1Smrg					     [eval $cacheid=yes],
16043ae17ff1Smrg					     [eval $cacheid=no])])
16053ae17ff1Smrg
16063ae17ff1Smrg		PREFIX[FLAGS]="$[xorg_testset_save_]PREFIX[FLAGS]"
16073ae17ff1Smrg
16083ae17ff1Smrg		eval supported=\$$cacheid
16093ae17ff1Smrg		AC_MSG_RESULT([$supported])
16103ae17ff1Smrg		if test "$supported" = "yes" ; then
16113ae17ff1Smrg			$1="$$1 ]flag["
16123ae17ff1Smrg			found="yes"
16133ae17ff1Smrg		fi
16143ae17ff1Smrg	fi
16153ae17ff1Smrg])
16163ae17ff1Smrg]) # XORG_TESTSET_CFLAG
16173ae17ff1Smrg
16183ae17ff1Smrg# XORG_COMPILER_FLAGS
16193ae17ff1Smrg# ---------------
16203ae17ff1Smrg# Minimum version: 1.16.0
16213ae17ff1Smrg#
16223ae17ff1Smrg# Defines BASE_CFLAGS or BASE_CXXFLAGS to contain a set of command line
16233ae17ff1Smrg# arguments supported by the selected compiler which do NOT alter the generated
16243ae17ff1Smrg# code.  These arguments will cause the compiler to print various warnings
16253ae17ff1Smrg# during compilation AND turn a conservative set of warnings into errors.
16263ae17ff1Smrg#
16273ae17ff1Smrg# The set of flags supported by BASE_CFLAGS and BASE_CXXFLAGS will grow in
16283ae17ff1Smrg# future versions of util-macros as options are added to new compilers.
16293ae17ff1Smrg#
16303ae17ff1SmrgAC_DEFUN([XORG_COMPILER_FLAGS], [
16313ae17ff1SmrgAC_REQUIRE([XORG_COMPILER_BRAND])
16323ae17ff1Smrg
16333ae17ff1SmrgAC_ARG_ENABLE(selective-werror,
16343ae17ff1Smrg              AS_HELP_STRING([--disable-selective-werror],
16353ae17ff1Smrg                             [Turn off selective compiler errors. (default: enabled)]),
16363ae17ff1Smrg              [SELECTIVE_WERROR=$enableval],
16373ae17ff1Smrg              [SELECTIVE_WERROR=yes])
16383ae17ff1Smrg
16393ae17ff1SmrgAC_LANG_CASE(
16403ae17ff1Smrg        [C], [
16413ae17ff1Smrg                define([PREFIX], [C])
16423ae17ff1Smrg        ],
16433ae17ff1Smrg        [C++], [
16443ae17ff1Smrg                define([PREFIX], [CXX])
16453ae17ff1Smrg        ]
16463ae17ff1Smrg)
16473ae17ff1Smrg# -v is too short to test reliably with XORG_TESTSET_CFLAG
16483ae17ff1Smrgif test "x$SUNCC" = "xyes"; then
16493ae17ff1Smrg    [BASE_]PREFIX[FLAGS]="-v"
16503ae17ff1Smrgelse
16513ae17ff1Smrg    [BASE_]PREFIX[FLAGS]=""
16523ae17ff1Smrgfi
16533ae17ff1Smrg
16543ae17ff1Smrg# This chunk of warnings were those that existed in the legacy CWARNFLAGS
16553ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wall])
16563ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wpointer-arith])
16573ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wmissing-declarations])
16583ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wformat=2], [-Wformat])
16593ae17ff1Smrg
16603ae17ff1SmrgAC_LANG_CASE(
16613ae17ff1Smrg	[C], [
16623ae17ff1Smrg		XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wstrict-prototypes])
16633ae17ff1Smrg		XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wmissing-prototypes])
16643ae17ff1Smrg		XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wnested-externs])
16653ae17ff1Smrg		XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wbad-function-cast])
166643c16309Smrg		XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wold-style-definition], [-fd])
16673ae17ff1Smrg		XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wdeclaration-after-statement])
16683ae17ff1Smrg	]
16693ae17ff1Smrg)
16703ae17ff1Smrg
16713ae17ff1Smrg# This chunk adds additional warnings that could catch undesired effects.
16723ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wunused])
16733ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wuninitialized])
16743ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wshadow])
16753ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wmissing-noreturn])
16763ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wmissing-format-attribute])
16773ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wredundant-decls])
1678c1197e68SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wlogical-op])
16793ae17ff1Smrg
16803ae17ff1Smrg# These are currently disabled because they are noisy.  They will be enabled
16813ae17ff1Smrg# in the future once the codebase is sufficiently modernized to silence
16823ae17ff1Smrg# them.  For now, I don't want them to drown out the other warnings.
16833ae17ff1Smrg# XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wparentheses])
16843ae17ff1Smrg# XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wcast-align])
168543c16309Smrg# XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wcast-qual])
16863ae17ff1Smrg
16873ae17ff1Smrg# Turn some warnings into errors, so we don't accidently get successful builds
16883ae17ff1Smrg# when there are problems that should be fixed.
16893ae17ff1Smrg
16903ae17ff1Smrgif test "x$SELECTIVE_WERROR" = "xyes" ; then
16913ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=implicit], [-errwarn=E_NO_EXPLICIT_TYPE_GIVEN -errwarn=E_NO_IMPLICIT_DECL_ALLOWED])
16923ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=nonnull])
16933ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=init-self])
16943ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=main])
16953ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=missing-braces])
16963ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=sequence-point])
16973ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=return-type], [-errwarn=E_FUNC_HAS_NO_RETURN_STMT])
16983ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=trigraphs])
16993ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=array-bounds])
17003ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=write-strings])
17013ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=address])
17023ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=int-to-pointer-cast], [-errwarn=E_BAD_PTR_INT_COMBINATION])
17033ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=pointer-to-int-cast]) # Also -errwarn=E_BAD_PTR_INT_COMBINATION
17043ae17ff1Smrgelse
17053ae17ff1SmrgAC_MSG_WARN([You have chosen not to turn some select compiler warnings into errors.  This should not be necessary.  Please report why you needed to do so in a bug report at $PACKAGE_BUGREPORT])
17063ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wimplicit])
17073ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wnonnull])
17083ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Winit-self])
17093ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wmain])
17103ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wmissing-braces])
17113ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wsequence-point])
17123ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wreturn-type])
17133ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wtrigraphs])
17143ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Warray-bounds])
17153ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wwrite-strings])
17163ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Waddress])
17173ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wint-to-pointer-cast])
17183ae17ff1SmrgXORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wpointer-to-int-cast])
17193ae17ff1Smrgfi
17203ae17ff1Smrg
17213ae17ff1SmrgAC_SUBST([BASE_]PREFIX[FLAGS])
17223ae17ff1Smrg]) # XORG_COMPILER_FLAGS
17233ae17ff1Smrg
1724ffab5952Smrg# XORG_CWARNFLAGS
1725ffab5952Smrg# ---------------
1726ffab5952Smrg# Minimum version: 1.2.0
17273ae17ff1Smrg# Deprecated since: 1.16.0 (Use XORG_COMPILER_FLAGS instead)
1728ffab5952Smrg#
1729ffab5952Smrg# Defines CWARNFLAGS to enable C compiler warnings.
1730ffab5952Smrg#
17313ae17ff1Smrg# This function is deprecated because it defines -fno-strict-aliasing
17323ae17ff1Smrg# which alters the code generated by the compiler.  If -fno-strict-aliasing
17333ae17ff1Smrg# is needed, then it should be added explicitly in the module when
17343ae17ff1Smrg# it is updated to use BASE_CFLAGS.
17353ae17ff1Smrg#
1736ffab5952SmrgAC_DEFUN([XORG_CWARNFLAGS], [
17373ae17ff1SmrgAC_REQUIRE([XORG_COMPILER_FLAGS])
173862044635SmrgAC_REQUIRE([XORG_COMPILER_BRAND])
17393ae17ff1SmrgAC_LANG_CASE(
17403ae17ff1Smrg	[C], [
17413ae17ff1Smrg		CWARNFLAGS="$BASE_CFLAGS"
17423ae17ff1Smrg		if  test "x$GCC" = xyes ; then
17433ae17ff1Smrg		    CWARNFLAGS="$CWARNFLAGS -fno-strict-aliasing"
17443ae17ff1Smrg		fi
17453ae17ff1Smrg		AC_SUBST(CWARNFLAGS)
17463ae17ff1Smrg	]
17473ae17ff1Smrg)
1748ffab5952Smrg]) # XORG_CWARNFLAGS
1749ffab5952Smrg
1750ffab5952Smrg# XORG_STRICT_OPTION
1751ffab5952Smrg# -----------------------
1752ffab5952Smrg# Minimum version: 1.3.0
1753ffab5952Smrg#
175462044635Smrg# Add configure option to enable strict compilation flags, such as treating
175562044635Smrg# warnings as fatal errors.
175662044635Smrg# If --enable-strict-compilation is passed to configure, adds strict flags to
17573ae17ff1Smrg# $BASE_CFLAGS or $BASE_CXXFLAGS and the deprecated $CWARNFLAGS.
175862044635Smrg#
175962044635Smrg# Starting in 1.14.0 also exports $STRICT_CFLAGS for use in other tests or
176062044635Smrg# when strict compilation is unconditionally desired.
1761ffab5952SmrgAC_DEFUN([XORG_STRICT_OPTION], [
1762ffab5952SmrgAC_REQUIRE([XORG_CWARNFLAGS])
17633ae17ff1SmrgAC_REQUIRE([XORG_COMPILER_FLAGS])
1764ffab5952Smrg
1765ffab5952SmrgAC_ARG_ENABLE(strict-compilation,
1766ffab5952Smrg			  AS_HELP_STRING([--enable-strict-compilation],
1767ffab5952Smrg			  [Enable all warnings from compiler and make them errors (default: disabled)]),
1768ffab5952Smrg			  [STRICT_COMPILE=$enableval], [STRICT_COMPILE=no])
17693ae17ff1Smrg
17703ae17ff1SmrgAC_LANG_CASE(
17713ae17ff1Smrg        [C], [
17723ae17ff1Smrg                define([PREFIX], [C])
17733ae17ff1Smrg        ],
17743ae17ff1Smrg        [C++], [
17753ae17ff1Smrg                define([PREFIX], [CXX])
17763ae17ff1Smrg        ]
17773ae17ff1Smrg)
17783ae17ff1Smrg
17793ae17ff1Smrg[STRICT_]PREFIX[FLAGS]=""
17803ae17ff1SmrgXORG_TESTSET_CFLAG([[STRICT_]PREFIX[FLAGS]], [-pedantic])
17813ae17ff1SmrgXORG_TESTSET_CFLAG([[STRICT_]PREFIX[FLAGS]], [-Werror], [-errwarn])
17823ae17ff1Smrg
17833ae17ff1Smrg# Earlier versions of gcc (eg: 4.2) support -Werror=attributes, but do not
17843ae17ff1Smrg# activate it with -Werror, so we add it here explicitly.
17853ae17ff1SmrgXORG_TESTSET_CFLAG([[STRICT_]PREFIX[FLAGS]], [-Werror=attributes])
17863ae17ff1Smrg
1787ffab5952Smrgif test "x$STRICT_COMPILE" = "xyes"; then
17883ae17ff1Smrg    [BASE_]PREFIX[FLAGS]="$[BASE_]PREFIX[FLAGS] $[STRICT_]PREFIX[FLAGS]"
17893ae17ff1Smrg    AC_LANG_CASE([C], [CWARNFLAGS="$CWARNFLAGS $STRICT_CFLAGS"])
1790ffab5952Smrgfi
17913ae17ff1SmrgAC_SUBST([STRICT_]PREFIX[FLAGS])
17923ae17ff1SmrgAC_SUBST([BASE_]PREFIX[FLAGS])
17933ae17ff1SmrgAC_LANG_CASE([C], AC_SUBST([CWARNFLAGS]))
1794ffab5952Smrg]) # XORG_STRICT_OPTION
1795ffab5952Smrg
1796ffab5952Smrg# XORG_DEFAULT_OPTIONS
1797ffab5952Smrg# --------------------
1798ffab5952Smrg# Minimum version: 1.3.0
1799ffab5952Smrg#
1800ffab5952Smrg# Defines default options for X.Org modules.
1801ffab5952Smrg#
1802ffab5952SmrgAC_DEFUN([XORG_DEFAULT_OPTIONS], [
1803ffab5952SmrgAC_REQUIRE([AC_PROG_INSTALL])
18043ae17ff1SmrgXORG_COMPILER_FLAGS
1805ffab5952SmrgXORG_CWARNFLAGS
1806ffab5952SmrgXORG_STRICT_OPTION
1807ffab5952SmrgXORG_RELEASE_VERSION
1808ffab5952SmrgXORG_CHANGELOG
1809ffab5952SmrgXORG_INSTALL
1810ffab5952SmrgXORG_MANPAGE_SECTIONS
1811ffab5952Smrgm4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])],
1812ffab5952Smrg    [AC_SUBST([AM_DEFAULT_VERBOSITY], [1])])
1813ffab5952Smrg]) # XORG_DEFAULT_OPTIONS
1814ffab5952Smrg
1815ffab5952Smrg# XORG_INSTALL()
1816ffab5952Smrg# ----------------
1817ffab5952Smrg# Minimum version: 1.4.0
1818ffab5952Smrg#
1819ffab5952Smrg# Defines the variable INSTALL_CMD as the command to copy
1820ffab5952Smrg# INSTALL from $prefix/share/util-macros.
1821ffab5952Smrg#
1822ffab5952SmrgAC_DEFUN([XORG_INSTALL], [
1823ffab5952SmrgAC_REQUIRE([PKG_PROG_PKG_CONFIG])
1824ffab5952Smrgmacros_datadir=`$PKG_CONFIG --print-errors --variable=pkgdatadir xorg-macros`
1825ffab5952SmrgINSTALL_CMD="(cp -f "$macros_datadir/INSTALL" \$(top_srcdir)/.INSTALL.tmp && \
1826ffab5952Smrgmv \$(top_srcdir)/.INSTALL.tmp \$(top_srcdir)/INSTALL) \
1827ffab5952Smrg|| (rm -f \$(top_srcdir)/.INSTALL.tmp; touch \$(top_srcdir)/INSTALL; \
1828ffab5952Smrgecho 'util-macros \"pkgdatadir\" from xorg-macros.pc not found: installing possibly empty INSTALL.' >&2)"
1829ffab5952SmrgAC_SUBST([INSTALL_CMD])
1830ffab5952Smrg]) # XORG_INSTALL
1831