Stuart Henderson <[email protected]> writes:

> As most readers know by now, ports requiring WX mappings must now
> be annotated when the binaries are created. Because there are many
> build systems in ports (sometimes even different ones within a
> single port) this is an utter pain to setup, so for the jdk ports
> I've used a wrapper installed to ${WRKDIR}/bin/ld that adds the
> relevant flag.
>
> This factors out the wrapper so it can be generated by ports
> infrastructure instead (by setting USE_WXNEEDED=Yes), and adds
> it to the sqlports database so we can spot them more easily.
>
> Any comments?

This may not be enough to fix everything (eg lisp stuff that dumps
executables) but whatever.

I guess that you didn't want to introduce a more generic ld wrapper
script?

> OK?

Looks fine, ok

(one nit below)

> Index: ports/infrastructure/mk/bsd.port.mk
> ===================================================================
> RCS file: /cvs/ports/infrastructure/mk/bsd.port.mk,v
> retrieving revision 1.1319
> diff -u -p -r1.1319 bsd.port.mk
> --- ports/infrastructure/mk/bsd.port.mk       10 Jul 2016 18:51:03 -0000      
> 1.1319
> +++ ports/infrastructure/mk/bsd.port.mk       18 Aug 2016 09:06:19 -0000
> @@ -110,7 +110,7 @@ _ALL_VARIABLES += HOMEPAGE DISTNAME \
>       SHARED_LIBS TARGETS PSEUDO_FLAVOR \
>       MAINTAINER AUTOCONF_VERSION AUTOMAKE_VERSION CONFIGURE_ARGS \
>       GH_ACCOUNT GH_COMMIT GH_PROJECT GH_TAGNAME PORTROACH \
> -     PORTROACH_COMMENT MAKEFILE_LIST
> +     PORTROACH_COMMENT MAKEFILE_LIST USE_WXNEEDED
>  _ALL_VARIABLES_PER_ARCH += BROKEN
>  # and stuff needing to be MULTI_PACKAGE'd
>  _ALL_VARIABLES_INDEXED += COMMENT PKGNAME \
> @@ -361,6 +361,7 @@ BASELOCALSTATEDIR ?= ${VARBASE}
>  LOCALSTATEDIR ?= ${BASELOCALSTATEDIR}
>  
>  RCDIR ?= /etc/rc.d
> +USE_WXNEEDED ?= No
>  USE_GMAKE ?= No
>  .if ${USE_GMAKE:L} == "yes"
>  BUILD_DEPENDS += devel/gmake
> @@ -2595,6 +2596,10 @@ ${_PATCH_COOKIE}: ${_EXTRACT_COOKIE}
>               if $$error; then exit 1; fi; \
>       fi
>  # End of PATCH.
> +.endif
> +.if ${USE_WXNEEDED:L} == "yes"
> +     @printf '#!/bin/sh\nexec /usr/bin/ld -z wxneeded $$*\n' > 
> ${WRKDIR}/bin/ld
> +     @chmod 555 ${WRKDIR}/bin/ld
>  .endif
>  .if target(post-patch)
>       @${_MAKESYS} post-patch
> Index: ports/databases/sqlports/Makefile
> ===================================================================
> RCS file: /cvs/ports/databases/sqlports/Makefile,v
> retrieving revision 1.61
> diff -u -p -r1.61 Makefile
> --- ports/databases/sqlports/Makefile 20 Mar 2016 20:03:07 -0000      1.61
> +++ ports/databases/sqlports/Makefile 18 Aug 2016 09:09:47 -0000
> @@ -1,7 +1,7 @@
>  # $OpenBSD: Makefile,v 1.61 2016/03/20 20:03:07 naddy Exp $
>  
>  CATEGORIES =         databases
> -V =                  5.0
> +V =                  6.0
>  DISTNAME =           sqlports-$V
>  DISTFILES =
>  COMMENT =            sqlite database of ports
> Index: ports/databases/sqlports/files/Info.pm
> ===================================================================
> RCS file: /cvs/ports/databases/sqlports/files/Info.pm,v
> retrieving revision 1.18
> diff -u -p -r1.18 Info.pm
> --- ports/databases/sqlports/files/Info.pm    20 Mar 2016 20:03:07 -0000      
> 1.18
> +++ ports/databases/sqlports/files/Info.pm    18 Aug 2016 09:09:47 -0000
> @@ -95,6 +95,7 @@ our $vars = {
>      USE_GMAKE => 'YesNoVar',
>      USE_GROFF => 'YesNoVar',
>      USE_LIBTOOL => 'YesNoGnuVar',
> +    USE_WXNEEDED => 'YesNoVar',
>      WANTLIB => 'WantlibVar',
>      # XXX those variables are part of the dump for dpb, but really should
>      # not end up in sqlports. But make sure we know about them.
> Index: src/share/man/man5/bsd.port.mk.5
> ===================================================================
> RCS file: /cvs/src/share/man/man5/bsd.port.mk.5,v
> retrieving revision 1.437
> diff -u -p -r1.437 bsd.port.mk.5
> --- src/share/man/man5/bsd.port.mk.5  1 Aug 2016 00:48:22 -0000       1.437
> +++ src/share/man/man5/bsd.port.mk.5  18 Aug 2016 09:06:19 -0000
> @@ -2922,6 +2922,13 @@ and not intended to be a user setting.
>  See
>  .Ev WRKOBJDIR_MFS
>  for configuration.
> +.It Ev USE_WXNEEDED
> +Set to
> +.Sq Yes
> +if this port needs to disable the default W^X enforcement on memory
> +mappings.
> +Adds a wrapper script to ${WRKDIR}/bin/ld in
> +.Cm post-patch .
>  .It Ev USE_X11
>  Normally, presence of ${X11BASE} is enforced by default for building ports.
>  But there is an experimental way to hook the xenocara build into
> Index: ports/devel/jdk/1.7/Makefile
> ===================================================================
> RCS file: /cvs/ports/devel/jdk/1.7/Makefile,v
> retrieving revision 1.82
> diff -u -p -r1.82 Makefile
> --- ports/devel/jdk/1.7/Makefile      17 Aug 2016 21:36:47 -0000      1.82
> +++ ports/devel/jdk/1.7/Makefile      18 Aug 2016 09:06:19 -0000
> @@ -1,6 +1,7 @@
>  # $OpenBSD: Makefile,v 1.82 2016/08/17 21:36:47 sthen Exp $
>  
>  ONLY_FOR_ARCHS=      i386 amd64
> +USE_WXNEEDED=        Yes
>  
>  COMMENT-main=        Java2(TM) SE Dev Kit v${V}
>  COMMENT-jre= Java2(TM) SE Runtime Environment v${V}
> @@ -136,8 +137,6 @@ COPYFILES=        hotspot/src/os/linux/vm/decod
>  
>  # create initial bsd src from linux src
>  post-extract:
> -     @printf '#!/bin/sh\nexec /usr/bin/ld -z wxneeded $$*\n' > 
> ${WRKDIR}/bin/ld
                                               Could use "$$@" here to
                                               protect arguments.

> -     @chmod 755 ${WRKDIR}/bin/ld
>       @for f in ${COPYFILES}; do \
>               t=`echo $$f | sed 's/linux/bsd/g'`; \
>               sed 's/linux/bsd/g; s/Linux/Bsd/g' < ${WRKDIST}/$$f > 
> ${WRKDIST}/$$t; \
> Index: ports/devel/jdk/1.8/Makefile
> ===================================================================
> RCS file: /cvs/ports/devel/jdk/1.8/Makefile,v
> retrieving revision 1.10
> diff -u -p -r1.10 Makefile
> --- ports/devel/jdk/1.8/Makefile      17 Aug 2016 21:58:36 -0000      1.10
> +++ ports/devel/jdk/1.8/Makefile      18 Aug 2016 09:06:19 -0000
> @@ -1,6 +1,7 @@
>  # $OpenBSD: Makefile,v 1.10 2016/08/17 21:58:36 sthen Exp $
>  
>  ONLY_FOR_ARCHS=      i386 amd64
> +USE_WXNEEDED=        Yes
>  
>  COMMENT-main=        OpenJDK Software Development Kit v${V}
>  COMMENT-jre= OpenJDK Runtime Environment v${V}
> @@ -106,8 +107,6 @@ JREIMAGEDIR=      ${BUILDDIR}/j2re-image
>   
>  post-extract:
>       chmod +x ${WRKDIST}/configure
> -     printf '#!/bin/sh\nexec /usr/bin/ld -z wxneeded $$*\n' > 
> ${WRKDIR}/bin/ld; \
> -             chmod 755 ${WRKDIR}/bin/ld
>  
>  post-build:
>       @rm -rf ${JDKIMAGEDIR}/man/ja ${JDKIMAGEDIR}/man/ja_JP.UTF-8 \
>

-- 
jca | PGP: 0x1524E7EE / 5135 92C1 AD36 5293 2BDF  DDCC 0DFA 74AE 1524 E7EE

Reply via email to