update Mon Mar 15 12:37:00 PDT 2010
[pkgsrc.git] / mk / djbware.mk
1 # $NetBSD: djbware.mk,v 1.23 2010/03/15 17:27:32 schmonz Exp $
2 #
3 # Makefile fragment for packages with djb-style build machinery
4 #
5 # Common functions provided:
6 # * a boilerplate RESTRICTED clause
7 # * typical defaults for BUILD_TARGET and INSTALL_TARGET
8 # * typical values for conf-* files
9 # * replace inline definitions of errno with "#include <errno.h>"
10 #
11 # TODO:
12 # * centralize handling of third-party manpages
13 # * centralize MASTER_SITES and SITES_foo
14 # * centralize compiler hack for arm{,32}
15 # * common install script for compatibility with default conf-home pathnames
16 # * PKG_OPTIONS (default):
17 #     djbware-errno-hack (off)
18 #     djbware-pathname-compat (on)
19 #     inet6 (off)
20 #     pam (off)
21 # * set RESTRICTED automatically iff patches or other mods are applied
22 # * be unrestricted by default for bulk builds
23 #
24
25 .if !defined(DJBWARE_MK)
26 DJBWARE_MK=             # defined
27
28 DJB_RESTRICTED?=        YES
29 DJB_MAKE_TARGETS?=      YES
30 DJB_BUILD_TARGETS?=     # empty
31 DJB_INSTALL_TARGETS?=   # empty
32 DJB_SLASHPACKAGE?=      NO
33 .if !empty(DJB_SLASHPACKAGE:M[yY][eE][sS])
34 DJB_CONFIG_DIR?=        ${WRKSRC}/src
35 DJB_BUILD_ARGS?=        # empty
36 .else
37 DJB_CONFIG_DIR?=        ${WRKSRC}
38 .endif
39 DJB_CONFIG_PREFIX?=     ${PREFIX}
40 DJB_CONFIG_HOME?=       conf-home
41 DJB_CONFIG_CMDS?=       ${DO_NADA}
42
43 .if !empty(DJB_RESTRICTED:M[yY][eE][sS])
44 LICENSE=                djb-nonlicense
45
46 RESTRICTED=             modified source and binaries may not be distributed
47 NO_BIN_ON_CDROM=        ${RESTRICTED}
48 NO_BIN_ON_FTP=          ${RESTRICTED}
49 .endif
50
51 .if !empty(DJB_MAKE_TARGETS:M[yY][eE][sS])
52 BUILD_TARGET?=          it ${DJB_BUILD_TARGETS}
53 INSTALL_TARGET?=        setup check ${DJB_INSTALL_TARGETS}
54 .endif
55
56 .if !defined(NO_CONFIGURE) && !target(do-configure)
57 do-configure:
58         ${RUN}cd ${DJB_CONFIG_DIR};             \
59         for i in conf-*; do ${CP} $${i} $${i}.orig_dist; done;          \
60         ${ECHO} ${DESTDIR:Q}${DJB_CONFIG_PREFIX:Q} > conf-destdir;      \
61         [ -f ${DJB_CONFIG_HOME} ] && \
62                 ${ECHO} ${DJB_CONFIG_PREFIX} > ${DJB_CONFIG_HOME};      \
63         [ -f conf-cc ] && \
64                 ${ECHO} ${CC:Q} ${CFLAGS:Q} ${CPPFLAGS:Q} > conf-cc;    \
65         [ -f conf-ld ] && \
66                 ${ECHO} ${CC:Q} ${_STRIPFLAG_CC} ${LDFLAGS:Q} > conf-ld;\
67         [ -f conf-bin ] && \
68                 ${ECHO} ${DJB_CONFIG_PREFIX}/bin > conf-bin;            \
69         [ -f conf-man ] && \
70                 ${ECHO} ${DJB_CONFIG_PREFIX}/${PKGMANDIR} > conf-man;   \
71         [ -f conf-qmail ] && \
72                 ${ECHO} ${QMAILDIR} > conf-qmail;                       \
73         [ -f conf-bgincs ] && \
74                 ${ECHO} ${LOCALBASE}/include/bglibs > conf-bgincs;      \
75         [ -f conf-bglibs ] && \
76                 ${ECHO} ${LOCALBASE}/lib/bglibs > conf-bglibs;          \
77         ${DJB_CONFIG_CMDS}
78 .endif
79
80 .if !target(do-build) && !empty(DJB_SLASHPACKAGE:M[yY][eE][sS])
81 do-build:
82         cd ${WRKSRC} && package/compile ${DJB_BUILD_ARGS}
83 .endif
84
85 PKG_SUPPORTED_OPTIONS+= djbware-errno-hack
86 PKG_SUGGESTED_OPTIONS+= djbware-errno-hack
87
88 .include "bsd.fast.prefs.mk"
89
90 .if exists(${PKGDIR}/options.mk)
91 . include "${PKGDIR}/options.mk"
92 .else
93 # Note: This expression is the same as ${PKGBASE}, but the latter is
94 # not defined yet, so we cannot use it here.
95 PKG_OPTIONS_VAR=        PKG_OPTIONS.${PKGNAME:C/-[0-9].*//}
96 .include "bsd.options.mk"
97 .endif
98
99 .if !empty(PKG_OPTIONS:Mdjbware-errno-hack)
100 SUBST_CLASSES+=         djbware
101 SUBST_STAGE.djbware=    do-configure
102 SUBST_FILES.djbware+=   error.h
103 SUBST_SED.djbware=      -e 's|^extern\ int\ errno\;|\#include \<errno.h\>|'
104 SUBST_MESSAGE.djbware=  Correcting definition of errno.
105 .endif
106
107 .endif  # DJBWARE_MK