Add smart identification of auxiliary header file paths.

This commit is contained in:
Keith Marshall 2012-01-15 19:11:09 +00:00
parent f485d8ffb4
commit 71992560f7
5 changed files with 199 additions and 43 deletions

View File

@ -1,3 +1,22 @@
2012-01-15 Keith Marshall <keithmarshall@users.sf.net>
Add smart identification of auxiliary header file paths.
* aclocal.m4: New file; replaces previously removed file of
same name, with entirely new content.
* Makefile.in (DISTFILES): Reinstate aclocal.m4
* Makefile.comm.in (EXTRA_INCLUDES): Use AC_SUBST to assign it.
(BUILDENV): No longer required; remove all references to it.
* configure.ac (BUILDENV): Redundant AC_SUBST variable; delete it.
(MINGW_AC_CONFIG_SRCDIR): Factor out; relocate it to aclocal.m4
(EXTRA_INCLUDES): Define as AC_SUBST variable; assign value using...
(MINGW_AC_RUNTIME_SRCDIR): ...this new aclocal.m4 macro.
* configure: Regenerated.
2012-01-15 Keith Marshall <keithmarshall@users.sf.net>
More makefile code refactoring; fix top_srcdir references.

View File

@ -35,6 +35,7 @@ LD = @LD@
CFLAGS = @CFLAGS@
ALL_CFLAGS = $(CFLAGS) $(INCLUDES)
EXTRA_INCLUDES = -nostdinc -iwithprefix include @EXTRA_INCLUDES@
DLLTOOL = @DLLTOOL@
DLLTOOL_FLAGS = --as=$(AS) -k
@ -43,24 +44,6 @@ WINDRES = @WINDRES@
RANLIB = @RANLIB@
AR = @AR@
# Depending on if we build as part of winsup or mingw we need to
# add additional include paths in order to get the correct headers
# from the C library.
#
BUILDENV = @BUILDENV@
ifeq ($(BUILDENV), cygwin)
# winsup/include
# winsup/../newlib/libc/include
# winsup/../newlib/libc/sys/cygwin
EXTRA_INCLUDES = -I ${top_srcdir}/../include \
-I ${top_srcdir}/../../newlib/libc/include \
-I ${top_srcdir}/../../newlib/libc/sys/cygwin
endif
ifeq ($(BUILDENV), mingw)
EXTRA_INCLUDES = -I ${top_srcdir}/../mingw/include
endif
# In spite of its general unsuitability for use on MS-Windows hosts,
# Cygwin is able to, and likes to support the $(DESTDIR) capability;
# provide a graceful rejection mechanism, for any (non-Cygwin) cases

View File

@ -30,7 +30,7 @@ TARFILEEXT = .tar.lzma
SUBDIRS = lib
DISTFILES = \
ChangeLog configure.ac Makefile.in Makefile.comm.in configure \
ChangeLog aclocal.m4 configure.ac Makefile.in Makefile.comm.in configure \
config.guess config.sub install-sh README.w32api TODO CONTRIBUTIONS
all: $(SUBDIRS)

174
winsup/w32api/aclocal.m4 vendored Normal file
View File

@ -0,0 +1,174 @@
# aclocal.m4 for MinGW/Cygwin w32api package. -*- Autoconf -*-
#
# Definitions of autoconf macros used to implement the configure
# script for the w32api package.
#
# $Id$
#
# Written by Keith Marshall <keithmarshall@users.sourceforge.net>
# Copyright (C) 2011, 2012, MinGW Project
#
# -----------------------------------------------------------------------------
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
# -----------------------------------------------------------------------------
#
# MINGW_AC_CONFIG_SRCDIR( VERSION_TAG, UNIQUE_FILE )
# --------------------------------------------------
# Wrapper for AC_CONFIG_SRCDIR; in addition to checking for a
# unique file reference within the source tree, it resolves the
# definition for PACKAGE_VERSION, based on a tagged definition
# within that file.
#
AC_DEFUN([MINGW_AC_CONFIG_SRCDIR],
[AC_CONFIG_SRCDIR([$2])
AC_MSG_CHECKING([package version])
PACKAGE_VERSION=`awk '$[2] == "'"$1"'" { print $[3] }' ${srcdir}/$2`
AC_MSG_RESULT([$PACKAGE_VERSION])dnl
])# MINGW_AC_CONFIG_SRCDIR
# MINGW_AC_RUNTIME_SRCDIR
# -----------------------
# Attempt to identify the locations of the C runtime sources.
# Accept explicit locations specified by the user, as arguments
# to --with-host-srcdir and --with-libc-srcdir; if unspecified,
# fall back to standard locations relative to ${srcdir}. For a
# MinGW build, identification of an appropriate location will be
# determined by presence of include/_mingw.h in host-srcdir, and
# lib-srcdir is not required; for a Cygwin build, host-srcdir is
# identified by the presence of include/cygwin/cygwin_dll.h, and
# presence of include/newlib.h is also required to identify the
# libc-srcdir location. This is naive; however, AC_CHECK_HEADER
# cannot be used because the system's runtime headers may result
# in false identification of unsuitable locations.
#
AC_DEFUN([MINGW_AC_RUNTIME_SRCDIR],
[AC_REQUIRE([MINGW_AC_HOST_SRCDIR])dnl
AC_REQUIRE([MINGW_AC_LIBC_SRCDIR])dnl
AS_IF([(test "x${with_host_srcdir}" = xMISSING || test "x${with_libc_srcdir}" = xMISSING)],
[AC_MSG_WARN([the location of required runtime headers cannot be established])
AC_MSG_WARN([please correct this omission before running configure again])
AC_MSG_RESULT
AC_MSG_ERROR([unable to continue until this issue is resolved])
])dnl
])# MINGW_AC_RUNTIME_SRCDIR
# MINGW_AC_HOST_SRCDIR
# --------------------
# Helper macro, AC_REQUIREd by MINGW_AC_RUNTIME_SRCDIR.
# This establishes the --with-host-srcdir reference for identification
# of runtime header path; it is never called directly by configure.ac
#
AC_DEFUN([MINGW_AC_HOST_SRCDIR],
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
AC_ARG_WITH([host-srcdir],
[AS_HELP_STRING([--with-host-srcdir=DIR],
[locate host-specific runtime library sources in DIR [SRCDIR/../mingw*]
([SRCDIR/../cygwin] when HOST == Cygwin)
])dnl
],[],[with_host_srcdir=NONE])
AS_CASE([${host_os}],
[*cygwin*],[ac_dir="cygwin" ac_file="cygwin/cygwin_dll"],
[ac_dir="mingw" ac_file="_mingw"])
MINGW_AC_CHECK_RUNTIME_SRCDIR([host],[host runtime])
EXTRA_INCLUDES="-I ${with_host_srcdir}/include"
])# MINGW_AC_HOST_SRCDIR
# MINGW_AC_LIBC_SRCDIR
# --------------------
# Helper macro, AC_REQUIREd by MINGW_AC_RUNTIME_SRCDIR.
# This establishes the --with-libc-srcdir reference for identification
# of runtime header path; it is never called directly by configure.ac
#
AC_DEFUN([MINGW_AC_LIBC_SRCDIR],
[AC_ARG_WITH([libc-srcdir],
[AS_HELP_STRING([--with-libc-srcdir=DIR],
[locate additional libc sources in DIR [SRCDIR/../../newlib/libc]
(required only when HOST == Cygwin)
])dnl
],[],[with_libc_srcdir=NONE])
AC_MSG_CHECKING([whether additional runtime headers are required])
AS_CASE([${host_os}],
[*cygwin*],
[AC_MSG_RESULT([libc (newlib)])
ac_dir="../newlib/libc" ac_file="newlib"
MINGW_AC_CHECK_RUNTIME_SRCDIR([libc],[libc runtime])
AS_IF([test "x${with_libc_srcdir}" != xNONE],
[EXTRA_INCLUDES="-I ${with_libc_srcdir}/include ${EXTRA_INCLUDES}"
])dnl
],dnl
[AC_MSG_RESULT([no])
])dnl
])# MINGW_AC_LIBC_SRCDIR
# MINGW_AC_CHECK_RUNTIME_SRCDIR( KEY, CATEGORY )
# ----------------------------------------------
# Helper macro, invoked by each of MINGW_AC_HOST_SRCDIR and
# MINGW_AC_LIBC_SRCDIR, with KEY passed as 'host' or as 'libc'
# respectively; it establishes and verifies the reference path
# for headers of the class described by CATEGORY, assigning
# the result to the shell variable 'with_KEY_srcdir'.
#
# As is the case for each of the preceding macros, which may
# call it, MINGW_AC_CHECK_RUNTIME_SRCDIR is never invoked
# directly by configure.ac
#
AC_DEFUN([MINGW_AC_CHECK_RUNTIME_SRCDIR],
[AS_IF([test "x${with_$1_srcdir}" = xNONE],
[AC_MSG_CHECKING([include path for $2 headers])
for with_$1_srcdir in ${srcdir}/../${ac_dir}*; do
test -f "${with_$1_srcdir}/include/${ac_file}.h" && break
with_$1_srcdir=MISSING
done
AS_IF([test "x${with_$1_srcdir}" = xMISSING],
[AC_MSG_RESULT([none found])
AC_MSG_RESULT
AC_MSG_WARN([source directory containing include/${ac_file}.h not found])
AC_MSG_WARN([ensure $2 sources are installed at \${top_srcdir}/../${ac_dir}*])
AC_MSG_WARN([or use --with-$1-srcdir=DIR to specify an alternative])
AC_MSG_RESULT
],dnl
[case "${with_$1_srcdir}" in
"${srcdir}/"*) with_$1_srcdir="`echo "${with_$1_srcdir}" \
| sed s,"^${srcdir}/",'${top_srcdir}/',`" ;;
esac
AC_MSG_RESULT([${with_$1_srcdir}/include])dnl
])dnl
],dnl
[AC_MSG_CHECKING([for ${ac_file}.h in ${with_$1_srcdir}/include])
AS_IF([test -f "${with_$1_srcdir}/include/${ac_file}.h"],
[AC_MSG_RESULT([yes])
case "${with_$1_srcdir}" in /*) ;;
*) with_$1_srcdir='${top_builddir}/'"${with_$1_srcdir}" ;;
esac
],dnl
[AC_MSG_RESULT([no])
AC_MSG_RESULT
AC_MSG_WARN([the nominated directory, ${with_$1_srcdir}])
AC_MSG_WARN([does not appear to contain valid $2 source code])
AC_MSG_WARN([(file '${with_$1_srcdir}/include/${ac_file}.h' is not present)])
AC_MSG_RESULT
with_$1_srcdir=MISSING
])dnl
])dnl
])# MINGW_AC_CHECK_RUNTIME_SRCDIR
# $RCSfile$: end of file: vim: ft=config

View File

@ -9,20 +9,10 @@
AC_PREREQ([2.59])
#
# Extract current release version from include/w32api.h
# at autoconf time...
# Extract current release version from include/w32api.h at autoconf time.
#
m4_define([__ver__],dnl
m4_esyscmd([awk '$2=="__W32API_VERSION"{printf "%s","v"$3}' include/w32api.h]))
#
# ...and confirm it at configure time.
#
AC_DEFUN([MINGW_AC_CONFIG_SRCDIR],
[AC_CONFIG_SRCDIR([$2])
AC_MSG_CHECKING([package version])
PACKAGE_VERSION=`awk '$[2] == "'"$1"'" { print $[3] }' ${srcdir}/$2`
AC_MSG_RESULT([$PACKAGE_VERSION])dnl
])# MINGW_AC_CONFIG_SRCDIR
AC_INIT([MS-Windows API],[__ver__],[http://mingw.org/reporting_bugs],[w32api])
MINGW_AC_CONFIG_SRCDIR([__W32API_VERSION],[include/w32api.h])
@ -50,6 +40,7 @@ AC_PROG_INSTALL
#
AC_CHECK_TOOL([CC], [gcc], [gcc])
AC_SUBST([CFLAGS], [${CFLAGS-"-O2 -g"}])
AC_SUBST([EXTRA_INCLUDES], [MINGW_AC_RUNTIME_SRCDIR])
# FIXME: What is the purpose of this? I think it should go away.
#
@ -64,19 +55,8 @@ AC_CHECK_TOOL([DLLTOOL], [dlltool], [dlltool])
AC_CHECK_TOOL([WINDRES], [windres], [windres])
AC_CHECK_TOOL([LD], [ld], [ld])
AC_MSG_CHECKING([for build environment])
case "$build_alias" in
*-mingw*) BUILDENV=mingw;;
*-cygwin*) BUILDENV=cygwin;;
esac
if test -z "$BUILDENV"; then
AC_MSG_RESULT([standard])
else
AC_MSG_RESULT([$BUILDENV])
fi
AC_SUBST([BUILDENV])
# Create makefiles
#
AC_CONFIG_FILES([Makefile Makefile.comm])
AC_CONFIG_FILES([lib/Makefile lib/ddk/Makefile lib/directx/Makefile])
AC_OUTPUT