Closed Bug 298543 Opened 19 years ago Closed 19 years ago



(Firefox Build System :: General, defect)

Not set


(Not tracked)



(Reporter: mark, Assigned: mark)


(Keywords: relnote)


(3 files, 3 obsolete files)

Following bug 298430, 10.1 ("Puma") is no longer supported.  The default
deployment target was changed to 10.2 in, but configure only
exports the value to MACOSX_DEPLOYMENT_TARGET in the environment when it's
specified explicitly.  That was fine when the default was 10.1, because that was
the default value in the absence of that variable anyway.

The default value should be 10.2 on PowerPC to match our new minimum and 10.4 on
Intel to match the minimum possible value for that architecture.

configure should export this variable:
 - when the user explicitly asks for --enable-macos-target
 - when configure implicitly selects a target and no MACOSX_DEPLOYMENT_TARGET
   variable exists in the environment

This will have the desired effect of preventing the app from launching on
systems that are too old (although someone should whip out a 10.1 system and
test it.)
This would also be a good time to kill MACOS_DEPLOYMENT_TARGET (without the X).
 It's currently a preprocessor macro that corresponds to the value of
--enable-macos-target.  We can do better by using MAC_OS_X_VERSION_MIN_REQUIRED,
which the system gives us for free as part of the build environment.  It's set
based on the value of MACOSX_DEPLOYMENT_TARGET in the environment.  Also of
interest is MAC_OS_X_VERSION_MAX_ALLOWED, which corresponds to the selected SDK.

If we use this setup to the fullest extent possible, we'll be able to do some
neat release-dependent things with weak linking, but there will be some gotchas
now that Apple's changed some APIs.

lxr tells me that the only place outside of nspr that uses
MACOS_DEPLOYMENT_TARGET tests for target < 10.2, which isn't a factor now that
Jaguar is the minimum supported runtime.  Within nspr, which still supports
Puma, there should be no problem using the system's availability macros.
This patch implements the logic in comment 0.  When no --enable-macos-target is
given, configure will use the preexisting MACOSX_DEPLOYMENT_TARGET variable, if
any, and fall back on a minimum value depending on the target architecture. 
For PowerPC, this is now 10.2.	For ia32, it is 10.4.

This patch also removes the custom MACOS_DEPLOYMENT_TARGET, as discussed in
comment 1.  Use MAC_OS_X_VERSION_MIN_REQUIRED as a substitute if and when
necessary.  See attachment 187099 [details] [diff] [review] to bug 298529 for an example.  The only
existing part of the code outside of NSPR that used MACOS_DEPLOYMENT_TARGET was
in js.	Because the test there was for a deployment target < 10.2, and the
minimum deployment target is now 10.2 on any platform, that conditional section
was removed.

Finally, this patch fixes the ia32 detector introduced in bug 297165.  The
patch there was initially against configure, but the square brackets present a
problem in m4 source like when the quote delimiters are [,]. 
Using x[3456]86* led to the configure script testing for x345686*.

An additional patch to NSPR will be required.
Attachment #187596 - Flags: superreview?(peterv)
Attachment #187596 - Flags: review?(cls)
Attached patch NSPR companion (obsolete) — Splinter Review
This does for NSPR what the core patch does for the core.

This builds on the patch in bug 298531, and won't apply or work properly until
that patch is in.  That patch hasn't yet made it to
NSPRPUB_PRE_4_2_CLIENT_BRANCH, although it has approval to.

I will test this patch in a standalone build and verify that it still functions
with the 10.1 SDK.
Attachment #187718 - Flags: review?(wtchang)
Comment on attachment 187718 [details] [diff] [review]
NSPR companion

> AC_ARG_ENABLE(macos-target,
>-             [  --enable-macos-target=VER (default=10.1)
>-                          Set the minimum MacOS version needed at runtime],
>-             [MACOS_DEPLOYMENT_TARGET_STR=$enableval],
>-             [MACOS_DEPLOYMENT_TARGET_STR=10.1])
>+             [  --enable-macos-target=VER (default=10.1/ppc, 10.4/x86)
>+                 Set the minimum MacOS version needed at runtime],
>+             [_MACOSX_DEPLOYMENT_TARGET_STR=$enableval])

I suggest we say "10.1 for ppc" or "10.1 on ppc" instead of

Just curious -- does the indentation of the "Set the minimum..."
line matter?

>+#ifdef XP_MACOSX
>+#if !defined(MAC_OS_X_VERSION_10_3) || \
> /*
>  * socket(AF_INET6) fails with EPROTONOSUPPORT on Mac OS X 10.1.
>  * IPv6 under OS X 10.2 and below is not complete (see bug 222031).
>  */

Could you explain why we need !defined(MAC_OS_X_VERSION_10_3)?

If MAC_OS_X_VERSION_10_3 is not defined, we blindly assume
the deployment target is < 10.3.  That doesn't seem right.

>+#if defined(XP_MACOSX) && (!defined(MAC_OS_X_VERSION_10_3) || \
>+                         MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_2)

!defined(MAC_OS_X_VERSION_10_3) should be
!defined(MAC_OS_X_VERSION_10_2), right?

>-        || (defined(MACOS_DEPLOYMENT_TARGET) \
>-        && MACOS_DEPLOYMENT_TARGET < 100200)))
>+        || (defined(XP_MACOSX) && (!defined(MAC_OS_X_VERSION_10_3) || \

Original code is DT < 10.2, new code is DT < 10.3.  This doesn't
seem right.
Attached patch NSPR companion, v2 (obsolete) — Splinter Review
Sharp eye.  Adjustments made.

> Could you explain why we need !defined(MAC_OS_X_VERSION_10_3)?
> If MAC_OS_X_VERSION_10_3 is not defined, we blindly assume
> the deployment target is < 10.3.  That doesn't seem right.

If MAC_OS_X_VERSION_10_3 is not defined, it's because it's not defined in the
SDK's headers.	Right now, the headers for the SDKs (10.1 - 10.4) I've checked
on both 10.3 and 10.4 have macros for 10.1 - 10.5.  But what if the perpetual
rumors of Apple's "beleagured" state are incorrect, and in the future, against
all odds, there's a 10.6 release?  The 10.6 SDK would surely have a macro for
it, but those still working in 10.4-land wouldn't.  So if MAC_OS_X_VERSION_10_6
is undefined, I think it's safe to assume that it's because the SDK is older
than 10.6.  Since SDK >= DT, it's also safe to assume that the DT is less than
10.6.  Although 10_3 is defined in all of the SDKs I checked, I can't examine
them all.  To set a better example for future conditionals, I thought it would
be a good idea to test for its being defined before using it and assuming older
if undefined.
Attachment #187718 - Attachment is obsolete: true
Attachment #187725 - Flags: review?(wtchang)
Attachment #187718 - Flags: review?(wtchang)
Comment on attachment 187725 [details] [diff] [review]
NSPR companion, v2

I'm still confused about the MAC_OS_X_VERSION_MIN_REQUIRED
and MAC_OS_X_VERSION_10_x macros.

I don't know which SDK I installed on my Mac.  NEXT_ROOT is
not set in my environment.  If I compile a simple C file
with "gcc foo.c", I found that MAC_OS_X_VERSION_10_1 and
MAC_OS_X_VERSION_10_3 are not defined.	Is this because
I am not using any SDK?  If so, this patch will make a SDK
a new requirement to compile NSPR.
Those macros come in from AvailabilityMacros.h.  Accustomed to working in an
environment where, for example, Carbon/Carbon.h is already included, I omitted
including it.  That was sloppy.  I should have tested the #ifdefs.  Here, I
include it in md/_darwin.h if XP_MACOSX is defined.

If you don't specify an SDK, / will be treated as your SDK.  In other words,
you'll get the headers and libraries that shipped with your OS release (more
accurately, the toolcahin that belongs to your OS release.)

SDKs are not a requirement to build nspr.  This patch does not change nspr's
minimum requirements.

SDKs are a requirement to build Mozilla in certain situations, but that's
another story.
Attachment #187725 - Attachment is obsolete: true
Attachment #187744 - Flags: review?(wtchang)
Attachment #187725 - Flags: review?(wtchang)
Comment on attachment 187744 [details] [diff] [review]
NSPR companion, v3rd time's a charm

Mark, thanks for the explanation and the new patch.  This one
has an error.  The --enable-macos-target option sets the
_MACOSX_DEPLOYMENT_TARGET_STR variable.  It should set the

For stylistic reason, would it be better to initialize

A nit (which I would just fix when I check in if this patch
were good): the continuation of a long line is usually indented
either 4 or 8 spaces to the right in NSPR code.
Attachment #187744 - Flags: review?(wtchang) → review-
Attachment #187744 - Attachment is obsolete: true
Comment on attachment 187899 [details] [diff] [review]
NSPR companion, v4

I went ahead and fixed the error in Mark's patch, v3.

I've tested this patch.

I personally would replace

    (!defined(MAC_OS_X_VERSION_10_2) || \



I find the latter much easier to understand even though it uses
hardcoded constant 1020.

As comment 5 shows, it takes at least three sentences to explain
why !defined(MAC_OS_X_VERSION_10_2) implies DT < 10.2.

But I am willing to be consistent with how this is coded in the
rest of Mozilla.
Attachment #187899 - Flags: superreview?(cls)
Attachment #187899 - Flags: review?(mark)
(In reply to comment #10)
> I find the latter much easier to understand even though it uses
> hardcoded constant 1020.

I think the link between 10.2 and 1020 is much more tenuous than
MAC_OS_X_VERSION_10_2.  I'd rather use the macro, for this reason only.  The
!defined nonsense seems intuitive to me, but I don't expect everyone to be
familiar with the intracacies of SDKs and their macros.  Ideally, the !defined
test and comparison would go off in some function with comments to explain it,
but cpp doesn't allow that kind of thing.

> As comment 5 shows, it takes at least three sentences to explain
> why !defined(MAC_OS_X_VERSION_10_2) implies DT < 10.2.

I was just being verbose!
Comment on attachment 187899 [details] [diff] [review]
NSPR companion, v4

r+, we've got a winner
Attachment #187899 - Flags: review?(mark) → review+
(In reply to comment #8)
> For stylistic reason, would it be better to initialize

Just a matter of style.  I never do that in raw sh, under the assumption that
I'm shaving off a handful of cycles.  I'd give r+ if you wanted to add a block
for when --enable-macos-target is missing and set the variable empty, though.
Mark, did you notice that I added the initialization of
_MACOSX_DEPLOYMENT_TARGET to NSPR patch v4?  I did that
to be consistent with how the script handles
the other variables.
Yes, that's fine.
Attachment #187596 - Flags: review+
Attachment #187899 - Flags: superreview?(cls) → superreview+
The first patch in the list will allow us to fail gracefully for Mac OS X 10.1
users. This will be the first release they can't use, so we should at least do
that for them. Nominating as blocker.
Flags: blocking1.8b3?
Needs a release note for 1.8b3 (we should releasenote that we don't work with
mac10.1 anyway); need to fix for b4.
Flags: blocking1.8b4+
Flags: blocking1.8b3?
Flags: blocking1.8b3-
Keywords: relnote
Comment on attachment 187596 [details] [diff] [review]

We won't block the release on this bug but if reviews are received and the
patch is landed in time it might be able to make 1.1a2.
Attachment #187596 - Flags: approval1.8b3?
Attachment #187596 - Flags: approval1.8b3? → approval1.8b3+
We should also set LSMinimumSystemVersion = 10.2.0 in the various Info.plist
files.  That gives the friendliest message:

You cannot use the application "APP_NAME" with this version of Mac OS X.
This is supposed to mark the package as having a minimum system requirement of
10.2.0.  Unfortunately, neither this nor the adjustment to
MACOSX_DEPLOYMENT_TARGET is allowing for graceful failure on 10.1.0.

When attempting to launch on 10.1.0, the system blindly forges
forward and fails due to undefined symbols without any UI feedback.  If you're
lucky, you get a quick dock bounce, but other than that, nothing.

If you really really really need UI feedback, I guess we could replace
firefox-bin with a stub that slaps up a dialog if the minima aren't met or
execs the real firefox-bin if they are.  My own opinion is that it's not worth

The patches should still go in, but I don't really see any reason they should
block.	They can wait for the trunk after branching.
Actually, if the 1.1/1.8 tree is to build on the Intel Macs out of the box, the
first patch to this bug really ought to be taken.  The NSPR version of this
patch is already in.
Attachment #189452 - Flags: review+
Attachment #187596 - Flags: superreview?(peterv) → superreview+
Attachment #187596 - Flags: review?(cls)
Comment on attachment 187596 [details] [diff] [review]

This was already approved for 18b3 but didn't make it.	Can we get it for 18b4?
Attachment #187596 - Flags: approval1.8b4?
Attachment #187596 - Flags: approval1.8b4? → approval1.8b4+
for Mark since I'm doing Intel work today and I need that. Will leave bug open
for Mark to close out when he's ready.
Thanks for the checkin and staying on tree patrol.

Closing this one out.  Note that the NSPR stuff isn't part of the client build
yet, but that should be OK.

I'm not going to push LSMinimumSystemVersion here because 10.1 doesn't care. 
We'll do it when we need it and it can help.  Open a new bug if you'd like to
handle the 10.1 situation more gracefully.
Closed: 19 years ago
Resolution: --- → FIXED
Product: Core → Firefox Build System
You need to log in before you can comment on or make changes to this bug.