# $NetBSD: Makefile.common,v 1.17 2022/03/07 16:18:24 nia 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 # used by emulators/compat61/Makefile # used by emulators/compat61-x11/Makefile # used by emulators/compat80/Makefile # used by emulators/compat90/Makefile CATEGORIES= emulators MASTER_SITES= ${MASTER_SITE_LOCAL:=${DIST_SUBDIR}${DIST_SUBDIR:D/}} EXTRACT_SUFX= .tar.bz2 MAINTAINER= pkgsrc-users@NetBSD.org NO_SRC_ON_FTP= Already in MASTER_SITE_LOCAL USE_TOOLS+= pax NETBSD_PKG= yes EMUL_REQD= netbsd>=${NETBSD_VERSION} CHECK_PIE_SUPPORTED= no CHECK_RELRO_SUPPORTED= no .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