# $NetBSD: Makefile,v 1.27 2003/07/17 21:44:25 grant Exp $ DISTNAME= gcc-2.95.3 GCC_VERSION= 2.95.3 PKGNAME= gcc-ssp-2.95.3.13 PKGVERSION= ${GCC_VERSION} PKGREVISION= PKGBASENAME= gcc-ssp WRKSRC= ${WRKDIR}/objdir CATEGORIES= lang security MASTER_SITES= ${MASTER_SITE_GNU:=gcc/} MAINTAINER= tech-pkg@NetBSD.org HOMEPAGE= http://www.trl.ibm.com/projects/security/ssp/ COMMENT= GNU Compiler Collection with Stack-smashing protection PATCH_SITES= ${MASTER_SITE_LOCAL} PATCHFILES= gcc-2.95.3-diff-2002-08-29.gz SSP_PATCH= protector-2.95.3-13.tar.gz DISTFILES+= ${DISTNAME}.tar.gz ${SSP_PATCH} SITES_protector-2.95.3-13.tar.gz= http://www.trl.ibm.com/projects/security/ssp/gcc2_95_3/ PATCHDIR= ../gcc/patches GCC_FILESDIR= ${FILESDIR}/../../gcc/files #ONLY_FOR_PLATFORM= NetBSD-*-i386 NetBSD-*-sparc # # Build error for NetBSD/alpha #NOT_FOR_PLATFORM= NetBSD-*-alpha \ # NetBSD-*-powerpc NetBSD-*-macppc \ # NetBSD-*-prep NetBSD-*-bebox NetBSD-*-ofppc \ # NetBSD-*-amigappc NetBSD-*-sandpoint BUILD_DEPENDS+= bison-[0-9]*:../../devel/bison USE_GMAKE= YES HAS_CONFIGURE= YES CONFIGURE_ARGS= --host=${MACHINE_GNU_PLATFORM} \ --prefix=${GCC_PREFIX} \ --enable-shared CONFIGURE_SCRIPT= ${SRCDIR}/configure INFO_FILES= # Not instal info files. MESSAGE_SUBST+= MAKE=${MAKE} \ PKGBASENAME=${PKGBASENAME} PLIST_SUBST+= PKGBASENAME=${PKGBASENAME} SRCDIR= ${WRKDIR}/${DISTNAME} .include "../../mk/bsd.prefs.mk" .if ${OPSYS} != "SunOS" CONFIGURE_ARGS+= --with-gnu-as --with-gnu-ld GCC_PREFIX= ${LOCALBASE}/${PKGBASENAME} .else . if ${CC:M*gcc*} == "" ALL_TARGET= bootstrap . endif GCC_PREFIX= ${LOCALBASE} PLIST_SRC= ${PKGDIR}/PLIST.SunOS PLIST_SUBST+= GCC_VERSION=${GCC_VERSION} CONFLICTS+= gcc-[0-9]* pgcc-[0-9]* .endif post-extract: ${MKDIR} ${WRKSRC} cd ${WRKSRC}/../${DISTNAME}/gcc/config; \ ${CP} ${GCC_FILESDIR}/xm-netbsd.h .; \ ${CP} ${GCC_FILESDIR}/xm-target64.h .; \ for FILE in ${GCC_FILESDIR}/*_* ; do \ ARCH=`basename $${FILE} | ${CUT} -d_ -f1`; \ DEST=`basename $${FILE} | ${SED} -e "s/$${ARCH}_//"`; \ ${MKDIR} $${ARCH}; \ ${CP} $${FILE} $${ARCH}/$${DEST}; \ done; \ cd ${WRKSRC}/../${DISTNAME}; \ for i in gcc/config/alpha/netbsd-elf.h gcc/config/arm/t-netbsd \ gcc/config/mips/x-netbsd libf2c/libF77/dtime_.c libf2c/libF77/etime_.c; do \ ${RM} $${i};\ done post-patch: ${ECHO} "bogus" >${WRKSRC}/../${DISTNAME}/gcc/cstamp-h.in cd ${WRKDIR} && ${PAX} -O -zrf ${_DISTDIR}/${SSP_PATCH} ${CP} ${WRKDIR}/protector.c ${WRKDIR}/protector.h ${WRKDIR}/${DISTNAME}/gcc/ ${PATCH} -p0 -d ${WRKDIR}/${DISTNAME} --forward --quiet -E < ${WRKDIR}/protector.dif ${PATCH} -p0 -d ${WRKDIR}/${DISTNAME} --forward --quiet -E < ${WRKDIR}/protectonly.dif .if ${OPSYS} != "SunOS" post-build: for FILE in ${FILESDIR}/gcc.mk; do \ ${SED} -e 's#@@MAKE@@#${MAKE}#g' \ -e 's#@@PKGBASENAME@@#${PKGBASENAME}#g' \ -e 's#@@PREFIX@@#${PREFIX}#g' \ <$$FILE >${WRKDIR}/`basename $$FILE`; \ done @${ECHO} "===> Check whether stack protection works or not" ${WRKSRC}/gcc/xgcc -B${WRKSRC}/gcc/ -O2 -o ${WRKDIR}/buffer ${FILESDIR}/buffer.c ulimit -c 0 && ${WRKDIR}/buffer abcdefghijklmnopqrstuvwxyz 2> ${WRKDIR}/output || ${TRUE} @if [ x"`${CAT} ${WRKDIR}/output`" = "x: stack smashing attack in function main" ]; then \ ${ECHO} "===> Stack protection succeeded."; \ exit 0; \ else \ ${ECHO} "**** Stack protection failed."; \ exit 1; \ fi .endif pre-install: # ${SETENV} PKG_PREFIX="${PREFIX}" ${SH} ${INSTALL_FILE} any PRE-INSTALL # This is not needed because of no info. .if ${OPSYS} != "SunOS" post-install: ${RM} -f ${GCC_PREFIX}/lib/gcc-lib/${MACHINE_GNU_PLATFORM}/${GCC_VERSION}/include/curses.h ${PREFIX}/${PKGBASENAME}/bin/cc ${LN} -s gcc ${PREFIX}/${PKGBASENAME}/bin/cc ${INSTALL_DATA} ${WRKDIR}/gcc.mk ${PREFIX}/etc/${PKGBASENAME}.mk ${RM} -fr ${GCC_PREFIX}/info .else # remove empy file and directories that show up when one # does make install; make deinstall; make install post-install: -cd ${GCC_PREFIX}/lib/gcc-lib/${MACHINE_GNU_PLATFORM}/${GCC_VERSION}/include && \ ${RM} -f fixed && \ ${RMDIR} v7 v9 .endif .include "../../mk/bsd.pkg.mk" # Make bootstrap with compiler != gcc possible. LDFLAGS= ${_STRIPFLAG_CC}