64 lines
2.4 KiB
Text
64 lines
2.4 KiB
Text
$NetBSD: BUILDLINK3_DG,v 1.8 2014/12/30 15:13:19 wiz Exp $
|
|
|
|
0 Developer's guide to buildlink3
|
|
=================================
|
|
|
|
This is a tutorial for pkgsrc developers to understand and to use the
|
|
buildlink3 framework in pkgsrc.
|
|
|
|
|
|
1 Changes between buildlink2 and buildlink3
|
|
===========================================
|
|
|
|
The buildlink3 framework is a evolutionary descendant of the
|
|
buildlink2 framework that does a better job of adhering to the
|
|
fundamental buildlink principle: only allow the software build
|
|
process to see what we choose to allow it to see.
|
|
|
|
|
|
1.1 Better behavior with libtool
|
|
================================
|
|
|
|
One of the biggest problems in buildlink2 is handling packages that
|
|
install libtool archive files for libraries that are also present in
|
|
the base system. buildlink3 is significantly better at this as it
|
|
more tightly controls where libtool can find libtool archives. One
|
|
side effect of this is that we no longer need to create fake libtool
|
|
archives to work around cases where the pkgsrc libraries were being
|
|
used instead of the system libraries if they shared the same name.
|
|
|
|
|
|
1.2 New buildlink3.mk file structure
|
|
====================================
|
|
|
|
buildlink3.mk files have two major differences over buildlink2.mk
|
|
files. The first, most noticeable difference is that buildlink3.mk
|
|
generally don't contain a BUILDLINK_FILES definition. This is
|
|
because buildlink3 automatically determines which files to symlink
|
|
into ${BUILDLINK_DIR} by examining the PLIST of the installed package.
|
|
The second difference is that buildlink3.mk files keep track of how
|
|
"deep" we are in including buildlink3.mk files, and only creates
|
|
dependencies on packages encountered at depth 1. This means that
|
|
packages that want to add a dependency must directly include the
|
|
buildlink3.mk file for that dependency.
|
|
|
|
|
|
2 Troubleshooting
|
|
=================
|
|
|
|
Q1: Where can I see the actual command executed by the wrapper
|
|
scripts?
|
|
|
|
A1: You should examine the contents of the ${WRKDIR}/.work.log file.
|
|
The lines preceded with [*] are the commands that are intercepted
|
|
by the wrapper scripts, and the lines preceded with <.> are the
|
|
commands that are executed by the wrapper scripts.
|
|
|
|
|
|
Q2: Why can't I check the values of variables set by the buildlink3
|
|
framework using 'make show-var VARNAME=...'?
|
|
|
|
A2: Some variables are only defined for a subset of the package build
|
|
phases. Try instead:
|
|
|
|
make show-var PKG_PHASE=wrapper VARNAME=...
|