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
|
||
Comment on attachment 97628 [details] [diff] [review] Embedding patch v2 sr=rpotts@netscape.com
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
•