#!/bin/sh
#
# $NetBSD: createbuildlink,v 1.36 2015/07/04 16:18:39 joerg Exp $
#
# Copyright (c) 2002 The NetBSD Foundation, Inc.
# All rights reserved.
#
# This code is derived from software contributed to The NetBSD Foundation
# by Rene Hexel.
#
# 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.
#
# Create an initial buildlink3.mk from a package's Makefile and PLIST
#
REV=`echo '$Revision: 1.36 $' | sed 's/\\$//g'`
tmpdir=/tmp
spacesintab=8
makefile=Makefile
sedrules=$tmpdir/sedrules.buildlink.$$
PLIST=PLIST
CREATEPLSUBST=false
args=`getopt 3p $*`
if [ $? != 0 ]; then
echo "Usage: $0 [-p] > buildlink3.mk"
exit 2
fi
set -- $args
while [ $# -gt 0 ]; do
case "$1" in
-3)
shift;;
-p)
CREATEPLSUBST=true
shift;;
--)
shift; break
;;
esac
shift
done
##
## some simple integrity checking
##
if [ ! -f $makefile ]; then
echo "===> Incomplete package! To create a buildlink file <==="
echo "===> a working $makefile is required! <==="
exit 1
fi
##
## try to find any included Makefile.common's
##
commons=`grep '^.include.*Makefile.common\"' $makefile | \
sed 's/^.*"\(.*\)".*/\1/'`
##
## package specific variables
##
CURDIR=`pwd | sed 's|^.*/\([^/]*/[^/]*\)$|\1|'`
PKGNAME=`@MAKE@ show-var VARNAME=PKGNAME`
PKGVER=`echo $PKGNAME | sed -e 's/^.*-//'`
PKGNOVER=`echo $PKGNAME | sed -e 's/-[^-]*$//'`
PKGUPPER=`echo $PKGNOVER | tr '[:lower:]' '[:upper:]' | tr - _`
PREFIX=LOCALBASE
##
## create sed rules
##
echo >$sedrules "s|@@CURDIR@@|$CURDIR|g"
echo >>$sedrules "s|@@ID@@|\$Net""BSD\$|g"
echo >>$sedrules "s|@@PKGNAME@@|$PKGNAME|g"
echo >>$sedrules "s|@@PKGNOVER@@|$PKGNOVER|g"
echo >>$sedrules "s|@@PKGUPPER@@|$PKGUPPER|g"
echo >>$sedrules "s|@@PKGVER@@|$PKGVER|g"
echo >>$sedrules "s|@@PREFIX@@|$PREFIX|g"
echo >>$sedrules "s|@@REV@@|$REV|g"
echo >>$sedrules "s|@@PKGVERSION@@|@PKGVERSION@|g"
#
# buildlink header
#
sed -f $sedrules <<EOF
# @@ID@@
# XXX
# XXX This file was created automatically using createbuildlink-@PKGVERSION@.
# XXX After this file has been verified as correct, the comment lines
# XXX beginning with "XXX" should be removed. Please do not commit
# XXX unverified buildlink3.mk files.
# XXX
# XXX Packages that only install static libraries or headers should
# XXX include the following line:
# XXX
# XXX BUILDLINK_DEPMETHOD.$PKGNOVER?= build
EOF
gap=" "
for i in 1 2 3; do
n=`expr $i \* $spacesintab`
if [ ${#PKGUPPER} -ge $n ]; then
gap=" $gap"
fi
done
sed -f $sedrules <<EOF
BUILDLINK_TREE+= $PKGNOVER
.if !defined(${PKGUPPER}_BUILDLINK3_MK)
${PKGUPPER}_BUILDLINK3_MK:=
EOF
sed -f $sedrules <<EOF
BUILDLINK_API_DEPENDS.$PKGNOVER+= $PKGNOVER>=$PKGVER
EOF
sed -f $sedrules <<EOF
BUILDLINK_PKGSRCDIR.$PKGNOVER?= ../../$CURDIR
EOF
if [ $CREATEPLSUBST = "true" ]; then
echo ""
substplistbasedirs
echo ""
fi
##
## buildlinked dependencies
##
grep -l '^.include.*\.\.\/.*\/.*/buildlink3.mk\"' $makefile $commons \
>/dev/null 2>&1 && cat <<EOF
# XXX
# XXX Uncomment and keep only the buildlink3 lines below which are directly
# XXX needed for dependencies to compile, link, and run. If this package
# XXX provides a wrappered API or otherwise does not expose the APIs of the
# XXX buildlink3 lines below to dependencies, remove them.
# XXX
EOF
for i in $makefile $commons ; do
[ ! -f $i ] || grep '^.include.*\.\.\/.*\/.*/buildlink3.mk\"' $i |
egrep -v '/devel/pkg-config/|/textproc/intltool/|/graphics/hicolor-icon-theme/' | sed 's,^,#,'
done
sed -f $sedrules <<EOF
.endif # ${PKGUPPER}_BUILDLINK3_MK
BUILDLINK_TREE+= -$PKGNOVER
EOF
rm -f $sedrules