summaryrefslogtreecommitdiff
path: root/mk
diff options
context:
space:
mode:
authorobache <obache@pkgsrc.org>2013-11-23 09:06:09 +0000
committerobache <obache@pkgsrc.org>2013-11-23 09:06:09 +0000
commitf6cafd6051d2431f87b65eeb240fbb839f609c76 (patch)
tree7bbcde06aac491426396abc17b7ba2b10b332037 /mk
parent490b32be8fe375c1351feefbd8c9db9412d50def (diff)
downloadpkgsrc-f6cafd6051d2431f87b65eeb240fbb839f609c76.tar.gz
Introduce find-headers.mk, ablility to find builtin header files.
Inspired by find-libs.mk and find-files.mk.
Diffstat (limited to 'mk')
-rw-r--r--mk/buildlink3/bsd.builtin.mk3
-rw-r--r--mk/buildlink3/find-headers.mk104
2 files changed, 106 insertions, 1 deletions
diff --git a/mk/buildlink3/bsd.builtin.mk b/mk/buildlink3/bsd.builtin.mk
index e9d16bcdf98..8651d90038c 100644
--- a/mk/buildlink3/bsd.builtin.mk
+++ b/mk/buildlink3/bsd.builtin.mk
@@ -1,4 +1,4 @@
-# $NetBSD: bsd.builtin.mk,v 1.12 2013/09/04 15:14:45 jperkin Exp $
+# $NetBSD: bsd.builtin.mk,v 1.13 2013/11/23 09:06:09 obache Exp $
#
# Copyright (c) 2004-2005 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -171,4 +171,5 @@ _BUILTIN_PKGS+= ${_pkg_}
.endfor
.include "../../mk/buildlink3/find-libs.mk"
+.include "../../mk/buildlink3/find-headers.mk"
.include "../../mk/buildlink3/find-files.mk"
diff --git a/mk/buildlink3/find-headers.mk b/mk/buildlink3/find-headers.mk
new file mode 100644
index 00000000000..bf3342500ac
--- /dev/null
+++ b/mk/buildlink3/find-headers.mk
@@ -0,0 +1,104 @@
+# $NetBSD: find-headers.mk,v 1.1 2013/11/23 09:06:09 obache Exp $
+#
+# Copyright (c) 2005 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# This code is derived from software contributed to The NetBSD Foundation
+# by Johnny C. Lam.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+# must display the following acknowledgement:
+# This product includes software developed by the NetBSD
+# Foundation, Inc. and its contributors.
+# 4. Neither the name of The NetBSD Foundation nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+#
+# This is a "subroutine" that can be included to detect the presence of
+# header files in the base system.
+#
+# The following variables must be defined before including this file:
+#
+# BUILTIN_FIND_HEADERS_VAR is a list of variables to define. These
+# variables take the value of the path to the file that is
+# "found".
+#
+# BUILTIN_FIND_HEADERS.<var> is the list of header files to find, in
+# order, on the ${COMPILER_INCLUDE_DIRS}. The variable <var> is set
+# to the first path "found" on the filesystem.
+#
+# Optionally, the following variables may also be defined:
+#
+# BUILTIN_FIND_GREP.<var> is a regular expression that must be
+# matched within a file in order for the file to be considered
+# "found". If it isn't defined, then we simply check for the
+# existence of the file.
+#
+# After including this file, the following variables are defined:
+#
+# <var> is the first of the header file listed in
+# ${BUILTIN_FIND_HEADERS.<var>} that is "found" in
+# ${COMPILER_INCLUDE_DIRS}, or else it is "__nonexistent__".
+#
+# An example use is:
+#
+# BUILTIN_FIND_HEADERS_VAR:= FOO BAR
+#
+# BUILTIN_FIND_HEADERS.FOO= header1.h header2.h
+# BUILTIN_FIND_GREP.FOO= \#define.*FOO
+#
+# BUILTIN_FIND_HEADERS.BAR= header3.h heaer/4.h
+# .include "../../mk/buildlink3/builtin-files.mk"
+#
+
+.if empty(USE_TOOLS:Mecho)
+USE_TOOLS+= echo
+.endif
+.if empty(USE_TOOLS:Mgrep)
+USE_TOOLS+= grep
+.endif
+
+.for _var_ in ${BUILTIN_FIND_HEADERS_VAR}
+. if !defined(${_var_})
+${_var_}= __nonexistent__
+. for _file_ in ${BUILTIN_FIND_HEADERS.${_var_}}
+. for _dir_ in ${COMPILER_INCLUDE_DIRS}
+. if !empty(${_var_}:M__nonexistent__) && exists(${_dir_}/${_file_})
+. if !defined(BUILTIN_FIND_GREP.${_var_})
+${_var_}= ${_dir_}/${_file_}
+. else
+${_var_}!= \
+ if ${GREP} -q ${BUILTIN_FIND_GREP.${_var_}:Q} ${_dir_:Q}/${_file_:Q}; then \
+ ${ECHO} ${_dir_:Q}/${_file_:Q}; \
+ else \
+ ${ECHO} __nonexistent__; \
+ fi
+. endif
+. endif
+. endfor
+. endfor
+. endif
+MAKEVARS+= ${_var_}
+.endfor