I can pick this up and sponsor it, but as Erik wrote, I'll be pushing to jdk10/jdk10.

Tim

On 07/14/17 07:02, Erik Joelsson wrote:
I realized I spoke too soon. I won't be able to sponsor this anytime
soon as I'm about to leave on vacation now. Hopefully someone else will
be able to pick this up for you.

/Erik


On 2017-07-14 08:53, Erik Joelsson wrote:
This looks good to me. Never mind the regexps, they are fine.

I can sponsor the change since it touches configure and will need a
corresponding closed change. Do you mind if I push this to jdk10/jdk10
instead of hs? That way it will get to hs within a week, but also be
in jdk10, while going the other way, it will take much longer before
it hits jdk10.

/Erik

On 2017-07-13 19:24, Hohensee, Paul wrote:
New webrev with two-line change to flags.m4 at line 1129.

http://cr.openjdk.java.net/~phh/8184022/webrev.03/

“xno” now means “use build system default”, just as if the switch had
not been used.

I’m a very inexperienced regex user, so I used what worked first for
me. What would it look like to escape the whole expression or
sub-expressions?

Paul

On 7/13/17, 10:04 AM, "Erik Joelsson" <erik.joels...@oracle.com> wrote:

     This looks pretty good. A few points:
          * Please use $GREP since configure is doing some work on
finding a good
     grep for us. If you want to make the grep patterns more
readable, it's
     possible to put the [] escapes around the whole expression, or
at any
     level you wish. That way you don't need to repeat them for each
[0-9].
     Both styles are used throughout the configure script and I don't
have a
     strong preference myself.
          * The check for "no" got me thinking. If someone explicitly
sets
     --without-macosx-version-max, that probably means they want it
empty.
     The reason for doing so would be to override an earlier instance
of the
     parameter on the command line (set by some script or automatic
system
     that you can't directly influence). This is not a likely usecase
but is
     perhaps a more correct action. Sorry for confusing this earlier.
"yes"
     is definitely an error though.
          I took this patch for a run here and it seems to work as it
should from
     the Oracle point of view.
          /Erik
               On 2017-07-13 17:46, Hohensee, Paul wrote:
     > New webrev
     >
     > http://cr.openjdk.java.net/~phh/8184022/webrev.02/
     >
     > It includes –with-macosx-version-max format checks (disallows
–without-macosx-version-max) and your jib-profiles.js patch. I put
the checking logic in AC_ARG_WITH based on the code in basics.m4 line
597 that defines BASIC_SETUP_DEVKIT.
     >
     > --with-macosx-version-max will fail the format checks and
–without-macosx-version-max will fail the check against ‘xno’.
     >
     > Paul
     >
     > On 7/12/17, 1:15 AM, "Erik Joelsson"
<erik.joels...@oracle.com> wrote:
     >
     >      Hello,
     >
     >
     >      On 2017-07-12 03:19, Hohensee, Paul wrote:
     >      > New webrev at
     >      >
     >      > http://cr.openjdk.java.net/~phh/8184022/webrev.01/
     >      For the AC_ARG_WITH, we usually refrain from using the
builtin "if-set,
     >      if-not-set" parameters and define our own logic to handle
all 4
     >      possibilities: not set, --with-foobar=value,
--with-foobar and
     >      --without-foobar. The latter two results in the values
"yes" and "no"
     >      respectively and in this case those two are invalid and
needs to result
     >      in errors. Also since we are expecting a very specific
format on the
     >      input, we need to validate this format so we fail fast
instead of
     >      getting weird compile errors much later.
     >
     >      My understanding of -mmacosx-version-min is that it sets
     >      MAC_OS_X_VERSION_MIN_REQUIRED for you so no need to add
that. OTOH, it
     >      makes it more obvious where this comes from if anyone
stumbles on it in
     >      the source.
     >      > I defined a new shell variable MACOSX_VERSION_MAX which
is settable via a new configure switch
–with-macosx-version-max=<version>. Example use:
--with-macosx-version-max=10.12.00. The specified version is passed
via a compiler command line switch, vis
–DMAC_OS_X_VERSION_MAX_ALLOWED=101200 (de-dotted <version>).
     >      At what point did they introduce the double zeros at the
end? Seems like
     >      we will need guard the values quite carefully and make
sure we zero pad
     >      if needed.
     >      > MACOSX_VERSION_MIN remains hardcoded to 10.7.0, but is
now passed to the compilers via -DMAC_OS_X_VERSION_MIN_REQUIRED=1070
rather than via -DMAC_OS_X_VERSION_MAX_ALLOWED=1070.
     >      >
     >      > Tested by attempting builds on OSX 10.12.04.
     >      >
     >      > (1) no –with-macosx-version-max: succeeds as expected
because no –DMAC_OS_X_VERSION_MAX_ALLOWED passed to compilers, so
defaults to 10.12.04.
     >      > (2) –with-macosx-version-max=10.11.00: fails as
expected due to formal parameter type mismatch.
     >      > (3) –with-macosx-version-max=10.12.00: succeeds as
expected because formal parameter types are the same for all 10.12.xx.
     >      >
     >      > It’d be great if you could try it out.
     >      >
     >      > Note that successful cases (1) and (3) above provoke
three warnings which I haven’t investigated. Imo, I/we can figure out
how to get rid of these next/later.
     >      >
     >      > ld: warning: object file
(/Users/hohensee/workspaces/jdk10-hs/build/macosx-x86_64-normal-server-release/support/native/java.base//libfdlibm.a)
was built for newer OSX version (10.12) than being linked (10.7)
     >      > ld: warning: object file
(/Users/hohensee/workspaces/jdk10-hs/build/macosx-x86_64-normal-server-release/support/native/java.base/libjli_static.a)
was built for newer OSX version (10.12) than being linked (10.7)
     >      > clang: warning: libstdc++ is deprecated; move to libc++
with a minimum deployment target of OS X 10.9 [-Wdeprecated]
     >      I believe the warnings for static libs is simply caused
by not adding
     >      -mmacosx-version-min to the ARFLAGS. Not sure if ar on
mac takes that
     >      flag though.
     >
     >      The libstdc++ warning seems harder to work around until
we change the
     >      minimum to 10.9 instead of 10.7.
     >
     >      I would appreciate if you could also include this patch
as part of this
     >      change to make Oracle builds still behave as before:
     >
     >      diff -r a6c830ee8a67 common/conf/jib-profiles.js
     >      --- a/common/conf/jib-profiles.js
     >      +++ b/common/conf/jib-profiles.js
     >      @@ -436,7 +436,8 @@
     >                    target_os: "macosx",
     >                    target_cpu: "x64",
     >                    dependencies: ["devkit"],
     >      -            configure_args:
concat(common.configure_args_64bit,
     >      "--with-zlib=system"),
     >      +            configure_args:
concat(common.configure_args_64bit,
     >      "--with-zlib=system",
     >      + "--with-macosx-version-max=10.7.0"),
     >                },
     >
     >                "solaris-x64": {
     >
     >
     >      Thanks!
     >      /Erik
     >      > Paul
     >      >
     >      > On 7/11/17, 2:45 AM, "Erik Joelsson"
<erik.joels...@oracle.com> wrote:
     >      >
     >      >      The -DMAC_OSX_VERSION_MAX_ALLOWED and
-mmacosx-version-min arguments are
     >      >      used in combination to achieve the same thing. I
chose to use both to
     >      >      really enforce full compatibility with the
specified version. The
     >      >      "official" way of targeting earlier versions of
the OS is just using
     >      >      -mmacosx-version-min. This will however still
accept uses of newer APIs,
     >      >      but at link time, those will be linked with
weak_import. Essentially
     >      >      it's expected that your application should be able
to do without these
     >      >      calls if necessary, at the application level.
While better than not
     >      >      being able to launch at all on the older OS, by
adding
     >      >      -DMAC_OSX_VERSION_MAX_ALLOWED, it becomes a
compile time error if any
     >      >      code tries to use a newer API.
     >      >
     >      >      As I see it, either we fully enforce this at build
time, or we don't at
     >      >      all. The natural default is to build for the
current host platform. The
     >      >      configure parameter would make it possible to
enforce a minimal
     >      >      compatible OS version that the binaries must be
usable on.
     >      >
     >      >      (Note that if you propose such a change, I will
need to add the Oracle
     >      >      bit as well, where we use the parameter, which
would need to go in at
     >      >      the same time in common/conf/jib-profiles.js. Also
note that I will be
     >      >      on vacation for 5 weeks starting this weekend so
won't be around to
     >      >      review for most of that time.)
     >      >
     >      >      /Erik
     >      >
     >      >
     >      >      On 2017-07-10 19:48, Hohensee, Paul wrote:
     >      >      > That’s a good idea, though the option would be
--with-macosx-version-max=<n>, right? The minimum is currently
hard-coded and should probably stay that way since there’s likely a
lot of code that depends on it. Let me see what I can come up with.
     >      >      >
     >      >      > Thanks,
     >      >      >
     >      >      > Paul
     >      >      >
     >      >      > On 7/10/17, 10:01 AM, "Erik Joelsson"
<erik.joels...@oracle.com> wrote:
     >      >      >
     >      >      >
     >      >      >
     >      >      >      On 2017-07-10 18:09, Hohensee, Paul wrote:
     >      >      >      > Hi Erik,
     >      >      >      >
     >      >      >      > The problem is that the compiler doesn’t
issue a warning in this case, but rather a type-mismatch error on
NSEventMask, so I can’t turn it off. NSUInteger was being used as an
enum, so Apple changed to using a real enum in 10.12 as a matter of
code hygiene. The new code in NSApplicationAWT.m is doing the right
thing by checking MAC_OS_X_VERSION_MAX_ALLOWED.
     >      >      >      >
     >      >      >      > What particular problem were you trying
to solve? Production, QA and JPRT builds and test runs are done on
the oldest supported OSX version, so any use of newer features should
be detected very early in the test process. Restricting builds to old
OSX versions means that engineers who keep their development boxes up
to date (which they should: security, etc.) can’t use them to do JDK
development.
     >      >      >      That's not exactly true. Apple is making it
very hard to stay on older
     >      >      >      versions of the OS compared to other OS
vendors. For this reason we are
     >      >      >      not always able to stay on a particular
version for Macosx in
     >      >      >      particular. We also in general try to avoid
having to fill our build
     >      >      >      servers/environments with just the oldest
OSes, because older OSes are
     >      >      >      harder to maintain and less convenient to
work with. So instead, we try
     >      >      >      to maintain working build environments on
newer OSes that produce
     >      >      >      binaries that are compatible with the
oldest we support. So, at least
     >      >      >      from Oracle's perspective, we prefer if
builds on different OS versions
     >      >      >      produce equivalent binaries when possible.
We certainly don't want to
     >      >      >      prevent building on newer OS/compilers.
     >      >      >
     >      >      >      If this can't be worked around at the
source level, then perhaps we need
     >      >      >      to consider hiding this macro definition
behind a configure option that
     >      >      >      we can use internally. I would be open to
that. Something like
     >      >      > --with-macosx-version-min=10.7 which configure
could then translate to
     >      >      >      the combination of options currently used.
That way, most openjdk
     >      >      >      developers/builders would not need to
suffer this Oracle requirement.
     >      >      >
     >      >      >      /Erik
     >      >      >      > Thanks,
     >      >      >      >
     >      >      >      > Paul
     >      >      >      >
     >      >      >      > On 7/10/17, 1:10 AM, "Erik Joelsson"
<erik.joels...@oracle.com> wrote:
     >      >      >      >
     >      >      >      >      Hello,
     >      >      >      >
     >      >      >      >      I do not agree to removing that
macro. I added those options to help
     >      >      >      >      guarantee that a build made on a
newer version of macosx would still run
     >      >      >      >      on the oldest version currently
supported. The macro is not mainly meant
     >      >      >      >      to be used in our code, but is
picked up by system headers to cause an
     >      >      >      >      error if any features newer than
10.7 are used. It may be that we should
     >      >      >      >      bump it to a newer version of macosx
in JDK 10, but certainly not to 10.12.
     >      >      >      >
     >      >      >      >      It seems to me that we instead need
to ignore the particular warning for
     >      >      >      >      this case.
     >      >      >      >
     >      >      >      >      /Erik
     >      >      >      >
     >      >      >      >
     >      >      >      >      On 2017-07-09 15:26, Hohensee, Paul
wrote:
     >      >      >      >      > Please review the following change
to get JDK10 to build on OSX 10.12 and above.
     >      >      >      >      >
     >      >      >      >      >
https://bugs.openjdk.java.net/browse/JDK-8184022
     >      >      >      >      >
http://cr.openjdk.java.net/~phh/8184022/webrev.00/
     >      >      >      >      >
     >      >      >      >      > I’d very much appreciate a sponsor
for this fix. Imo, successful JDK10 builds on all supported platforms
would be sufficient testing, but please let me know what I can do to
help.
     >      >      >      >      >
     >      >      >      >      > Slightly revised from the RFE:
     >      >      >      >      >
     >      >      >      >      >
JDK-8182299<https://bugs.openjdk.java.net/browse/JDK-8182299> enabled
previously disabled clang warnings and was intended to also enable
builds on OSX 10 + Xcode 8. Due to a mixup, this code in
jdk/src/java.desktop/macosx/native/libosxapp/NSApplicationAWT.m
     >      >      >      >      >
     >      >      >      >      >    #if
defined(MAC_OS_X_VERSION_10_12) && \
     >      >      >      >      > MAC_OS_X_VERSION_MAX_ALLOWED >=
MAC_OS_X_VERSION_10_12 && \
     >      >      >      >      >       __LP64__
     >      >      >      >      >       / 10.12 changed `mask` to
NSEventMask (unsigned long long) for x86_64 builds.
     >      >      >      >      >    - (NSEvent
*)nextEventMatchingMask:(NSEventMask)mask
     >      >      >      >      >    #else
     >      >      >      >      >    - (NSEvent
*)nextEventMatchingMask:(NSUInteger)mask
     >      >      >      >      >    #endif
     >      >      >      >      > untilDate:(NSDate *)expiration
inMode:(NSString *)mode dequeue:(BOOL)deqFlag {
     >      >      >      >      >
     >      >      >      >      > works fine with OSX versions
earlier than 10.12, but fails to compile starting with OSX 10.12 due
to MAC_OSX_VERSION_MAX_ALLOWED being defined on the compile command
line as 10.7.
     >      >      >      >      >
     >      >      >      >      > The fix is to remove that
definition, since it places an artificial upper bound on the OSX
version under which JDK10 can be built. A source code search reveals
no uses of MAC_OSX_VERSION_MAX_ALLOWED other than in
NSApplicationAWT.m and hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp.
The latter won't be affected by this change, since it checks for a
version > 10.5, which is always true in JDK10.
     >      >      >      >      >
     >      >      >      >      > Thanks,
     >      >      >      >      >
     >      >      >      >      > Paul
     >      >      >      >      >
     >      >      >      >
     >      >      >      >
     >      >      >      >
     >      >      >
     >      >      >
     >      >      >
     >      >
     >      >
     >      >
     >
     >
     >




Reply via email to