summaryrefslogtreecommitdiff
path: root/emulators/compat_netbsd/Makefile.common
blob: 2c0e29b502a8436c3a61ff758447d35d811b12f5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
# $NetBSD: Makefile.common,v 1.13 2017/06/01 13:30:25 jlam Exp $
#
# Common infrastructure for NetBSD compat* packages.
#
# This file should be included after EMUL_PLATFORMS and NETBSD_VERSION are
# defined and before EMUL_PLATFORM is used.
#
# used by emulators/compat12/Makefile
# used by emulators/compat13/Makefile
# used by emulators/compat14/Makefile
# used by emulators/compat15-extras/Makefile
# used by emulators/compat15-extras/Makefile
# used by emulators/compat15/Makefile
# used by emulators/compat15/Makefile
# used by emulators/compat16-extras/Makefile
# used by emulators/compat16-extras/Makefile
# used by emulators/compat16/Makefile
# used by emulators/compat16/Makefile
# used by emulators/compat20-extras/Makefile
# used by emulators/compat20-extras/Makefile
# used by emulators/compat20/Makefile
# used by emulators/compat20/Makefile
# used by emulators/compat30-extras/Makefile
# used by emulators/compat30-extras/Makefile
# used by emulators/compat30/Makefile
# used by emulators/compat30/Makefile
# used by emulators/compat40-extras/Makefile
# used by emulators/compat40-extras/Makefile
# used by emulators/compat40/Makefile
# used by emulators/compat40/Makefile
# used by emulators/compat50-x11/Makefile
# used by emulators/compat50/Makefile
# used by emulators/compat51-x11/Makefile
# used by emulators/compat51/Makefile
# used by emulators/compat60/Makefile

CATEGORIES=		emulators
MASTER_SITES=		${MASTER_SITE_LOCAL:=${DIST_SUBDIR}${DIST_SUBDIR:D/}}
EXTRACT_SUFX=		.tar.bz2

MAINTAINER=		pkgsrc-users@NetBSD.org

PKG_DESTDIR_SUPPORT=	destdir

NO_SRC_ON_FTP=		Already in MASTER_SITE_LOCAL

USE_TOOLS+=	pax

NETBSD_PKG=		yes
EMUL_REQD=		netbsd>=${NETBSD_VERSION}

.include "../../mk/bsd.prefs.mk"

.if defined(NETBSD_COMPAT32) && defined(ACCEPTABLE_NETBSD)
ONLY_FOR_PLATFORM+=	${ACCEPTABLE_NETBSD:S/$/-sparc64/}
ONLY_FOR_PLATFORM+=	${ACCEPTABLE_NETBSD:S/$/-x86_64/}
.endif

NETBSD_PKGSRCDIR?=	${.CURDIR}/../${.CURDIR:T:S/^netbsd32_//}
FILESDIR=		${NETBSD_PKGSRCDIR}/files
PATCHDIR=		${NETBSD_PKGSRCDIR}/patches
PKGDIR=			${NETBSD_PKGSRCDIR}

.if defined(NETBSD_COMPAT32)
PKGNAME=		netbsd32_${DISTNAME:S/-${EMUL_ARCH}-/-/}
COMMENT:=		${COMMENT:S/NetBSD/NetBSD 32-bit/}
NETBSD_BASE=		netbsd32_
.else
PKGNAME=		${DISTNAME:S/-${EMUL_ARCH}-/-/}
NETBSD_BASE=		# empty
.endif

BUILD_DIRS=		# empty
MAKE_DIRS+=		${EMULDIR}
ELF_SYMLINKS_DATA=	${WRKDIR}/.symlinks-data

#
# PLISTs are composed from the following bits, in order:
#
#	PLIST.${EMUL_ARCH}	e.g. PLIST.alpha
#	PLIST.${EMUL_EXEC_FMT}	e.g. PLIST.ELF
#	PLIST			e.g. PLIST
#
.if exists(${PKGDIR}/PLIST.${EMUL_ARCH})
PLIST_SRC+=		${PKGDIR}/PLIST.${EMUL_ARCH}
.endif
.if exists(${PKGDIR}/PLIST.${EMUL_EXEC_FMT})
PLIST_SRC+=		${PKGDIR}/PLIST.${EMUL_EXEC_FMT}
.endif
.if exists(${PKGDIR}/PLIST)
PLIST_SRC+=		${PKGDIR}/PLIST
.endif

# Set NATIVE_EXEC_FMT and EMUL_EXEC_FMT appropriately.  Normally, these
# are set by mk/emulator.mk, included in bsd.pkg.mk, but this happens
# too late for us here.
#
# Directly set NATIVE_EXEC_FMT and include the correct emulator.mk file
# to define EMUL_EXEC_FMT.
#
NATIVE_EXEC_FMT=	${SHLIB_TYPE}

.include "${PKGSRCDIR}/emulators/${COMPAT_PKG}/emulator.mk"

#
# Different combinations of the native executable format and the emulated
# executable format require different ways of making the installed shared
# libraries useful after installation.
#
#	native	emul	action
#	-----	----	------
#	a.out	a.out	append to ld.so.conf and run ldconfig
#	ELF	a.out	run ldconfig
#	ELF	ELF	create symlinks to shlibs into base system
#	ELF64	ELF32	nothing
#
.if (${NATIVE_EXEC_FMT} == "a.out") && (${EMUL_EXEC_FMT} == "a.out")
INSTALL_TEMPLATES+=	${PKGSRCDIR}/emulators/compat_netbsd/INSTALL.a.out

.elif (${NATIVE_EXEC_FMT} == "ELF") && (${EMUL_EXEC_FMT} == "a.out")
INSTALL_TEMPLATES+=	${PKGSRCDIR}/emulators/compat_netbsd/INSTALL.emulaout

.elif defined(NETBSD_COMPAT32)
INSTALL_TEMPLATES+=	${PKGSRCDIR}/emulators/compat_netbsd/INSTALL.emulnetbsd32

.else # (${NATIVE_EXEC_FMT} == "ELF") && (${EMUL_EXEC_FMT} == "ELF")
INSTALL_TEMPLATES+=	${PKGSRCDIR}/emulators/compat_netbsd/INSTALL.ELF
INSTALL_TEMPLATES+=	${ELF_SYMLINKS_DATA}
post-build: symlinks-data
.endif

DEINSTALL_TEMPLATES+=	${PKGSRCDIR}/emulators/compat_netbsd/DEINSTALL

#
# For ELF platforms, the INSTALL.ELF script needs SYMLINK data lines to
# tell it which shared libraries need to be symlinked to where.  Generate
# this information from the PLIST.
#
.PHONY: symlinks-data
symlinks-data: ${ELF_SYMLINKS_DATA}
${ELF_SYMLINKS_DATA}: plist
	${RUN} ${CAT} ${PLIST} | ${AWK}					\
	'BEGIN { print "#" } END { print "#" } /^@/ { next }		\
	 { src = $$0; dst = src; sub("^${EMULSUBDIRSLASH}", "/", dst);	\
	   print "# SYMLINK: " src " " dst }' > ${.TARGET}

#
# The compat* packages have a very strict package layout:
#
#	${WRKSRC}/lib
#	${WRKSRC}/libexec
#	${WRKSRC}/usr
#
# Each of these directories, if they exist, are copied directly into
# ${EMULDIR}.
#
.PHONY: compat-install
do-install: compat-install
compat-install:
	${INSTALL_DATA_DIR} ${DESTDIR}${PREFIX}/${EMULSUBDIR}
	cd ${WRKSRC} && for dir in lib libexec usr; do			\
		if ${TEST} -d "$$dir"; then				\
			pax -rw "$$dir"				\
				${DESTDIR}${PREFIX}/${EMULSUBDIR};	\
		fi;							\
	done