Closed
Bug 166105
Opened 22 years ago
Closed 22 years ago
Perl-based platform detection needs to support cygwin perl
Categories
(SeaMonkey :: Build Config, defect)
Tracking
(Not tracked)
RESOLVED
FIXED
mozilla1.2final
People
(Reporter: jbetak, Assigned: netscape)
Details
Attachments
(2 files, 1 obsolete file)
1.16 KB,
patch
|
netscape
:
review+
rpotts
:
superreview+
asa
:
approval+
|
Details | Diff | Splinter Review |
790 bytes,
patch
|
asa
:
approval+
|
Details | Diff | Splinter Review |
This is a spin-off from bug 144551, where Chris Seawood correctly pointed out
that this code doesn't support platform detection when using cygwin perl; it
only works with ActivePerl from ActiveState.
Let me know, if you want me to own this.
http://lxr.mozilla.org/seamonkey/source/config/make-chromelist.pl#71
http://lxr.mozilla.org/seamonkey/source/embedding/config/gen_mn.pl#15
Reporter | ||
Comment 1•22 years ago
|
||
The code in question was written by Gerv and Adam, I put them on cc to keep
them in the loop.
Summary: Perl-based platform detection need to support cygwin perl → Perl-based platform detection needs to support cygwin perl
Reporter | ||
Comment 3•22 years ago
|
||
Adam, over in bug 144551 we are looking at using this:
my $win32 = ($^O =~ /((MS)?win32)|cygwin|os2/i) ? 1 : 0;
my $macos = ($^O =~ /MacOS|darwin/i) ? 1 : 0;
my $unix = !($win32 || $macos) ? 1 : 0;
The *nix platform default was suggested by Chris Seeawood to avoid dealing with
the detection of a multitude of *nix flavors.
This is the patch for embedding. I haven't changed anything except used a perl
switch-like block and added cygwin detection. The requirements for
make-chromelist.pl are probably more stringent.
Even with the patch applied, I suspect one of the packages in cygwin perl is
broken, at least it is for me. Our gen_mn.pl uses the FindBin package (I'll CC
alecf in a moment). In cygwin, I see this error:
Cannot chdir to
/cygdrive/c/m/source/mozilla/embedding/config/c:/m/source/mozilla/embedding/config/:No
such file or directory at /usr/lib/perl5/5.6.1/cygwin-multi/FindBin.pm line 162
BEGIN failed--compilation aborted at
/usr/lib/perl5/5.6.1/cygwin-multi/FindBin.pm line 166.
Compilation failed in require at c:/m/source/mozilla/embedding/config/gen_mn.pl
line 7.
BEGIN failed--compilation aborted at
c:/m/source/mozilla/embedding/config/gen_mn.pl line 7.
Comment 6•22 years ago
|
||
findbin is supposed to be part of the current perl. have you updated to the
latest cygwin perl package?
Anyhow, findbin is used to include files that are in the same directory as the
perl executable. This allows embeddors to run gen_mn.pl from a directory other
than mozilla/embedding/config
Basically its like adding the directory that a binary lives on to the PATH, such
that the binary can load DLLs at runtime that exist in that directory, no matter
what directory the executable is run from.
Comment 7•22 years ago
|
||
I at least have FindBin.pm in both c:\cygwin\lib\perl5\5.6.1 and
c:\cygwin\lib\perl5\5.6.1\cygwin-multi and I'm 99.44% certain that I didn't
install it there myself.
I think the problem is in how the perl script is invoked. On my system, the
Makefile expands it out to this (ignoring some stuff):
perl -Ic:/m/source/mozilla/embedding/config
c:/m/source/mozilla/embedding/config/gen_mn.pl
The include path isn't the problem, but the fully qualified path to the script
is. I think FindBin is getting confused by the
c:/m/source/mozilla/embedding/config/gen_mn.pl path and doesn't know how to
merge it properly with the value returned by getcwd() which is
/cygdrive/c/m/source/mozilla/embedding/config.
Therefore it makes a total mess of it and appends the two together generating
the chdir() error that I saw. FindBin.pm does have some Win32 specific code, but
like us it's testing $^O for "Win32" and fails when it contains "cygwin".
$^O appears to be a read-write variable, so I'll see if can temporarily change
it to Win32 before it enters this package and restore it when it comes out.
Assignee | ||
Comment 9•22 years ago
|
||
The problem is that cygwin perl is balking on our use of dos paths. Fir
example, it requires that we use a /cygdrive path for the include path.
Apparently, it doesn't canonicalize the paths when it is comparing them in its
modules. The use of FindBin in make-jars.pl was disabled if using cygwin perl
for that reason.
Comment 10•22 years ago
|
||
Patch puts conditional test around including FindBin when using cygwin.
The embedding makefile is still failing later in make-jars.pl which cannot find
mozLock.pm. It looks like @INC turns the -Ic:/m/source/mozilla/config into c
/m/source/mozilla/config for some reason.
Attachment #97591 -
Attachment is obsolete: true
Comment 11•22 years ago
|
||
I'm not a huge fan of this solution - seawood, isn't there some sort of utility
to convert a DOS-style path to a cygwin-style path? It seems like it would be
better to just pass the cygwin style path to -I
Assignee | ||
Comment 12•22 years ago
|
||
Alec, we already do that via mozilla/build/cygwin-wrapper. We convert only the
include args when using cygwin perl since cygwin perl uses colon as a path
separator for -I. The problem appears to be that FindBin is taking the name of
the script, which uses a dospath, and doing a path comparison using the include
args without taking in consideration the path differences. I modified the
wrapper to convert all paths to cygdrive paths when using cygwin perl and that
fixes this problem. I'll have to run it over the build to see if there are any
other side-effects.
Comment 13•22 years ago
|
||
Can I get an r on the patch?
Assignee | ||
Comment 14•22 years ago
|
||
Comment on attachment 97628 [details] [diff] [review]
Embedding patch v2
r=cls
Attachment #97628 -
Flags: review+
Comment 15•22 years ago
|
||
Comment on attachment 97628 [details] [diff] [review]
Embedding patch v2
a=asa for checkin to 1.2 (on behalf of drivers).
Attachment #97628 -
Flags: approval+
Comment 16•22 years ago
|
||
Attachment #97628 -
Flags: superreview+
Assignee | ||
Comment 17•22 years ago
|
||
Assignee | ||
Updated•22 years ago
|
Target Milestone: --- → mozilla1.2final
Comment 18•22 years ago
|
||
cls: Making unix as (!win && !mac) is fine, but I'm not sure if cygwin should be
lumped in with Windows or with Unix. I have a feeling it uses "/" paths and so
should be in the Unix pot. But I'm not certain either way - do you have
experience which says one or the other?
Gerv
Assignee | ||
Comment 19•22 years ago
|
||
Gerv: You are correct that cygwin perl uses posix path separators internally
but that's irrelevant to this script as mac & dos paths are converted to posix
paths anyway to match the cvs paths. Plus, we need to set win32 to make sure
that the proper platform specific jar files are used.
Comment 20•22 years ago
|
||
OK, ignore me :-) r=gerv.
Gerv
Comment 21•22 years ago
|
||
Comment on attachment 104813 [details] [diff] [review]
Fix os-detection for make-chromelist.pl
a=asa for checkin to 1.2 (on behalf of drivers)
Attachment #104813 -
Flags: approval+
Assignee | ||
Comment 22•22 years ago
|
||
Patch has been checked in.
Status: NEW → RESOLVED
Closed: 22 years ago
Resolution: --- → FIXED
Updated•20 years ago
|
Product: Browser → Seamonkey
You need to log in
before you can comment on or make changes to this bug.
Description
•