Closed Bug 299407 Opened 20 years ago Closed 20 years ago

fix VC6 cairo/pixman builds

Categories

(Core :: Graphics: Canvas2D, defect)

x86
Windows XP
defect
Not set
normal

Tracking

()

RESOLVED FIXED

People

(Reporter: vlad, Assigned: vlad)

References

Details

Attachments

(2 files, 2 obsolete files)

I'll go and mark the relevant bugs as depending on this one shortly... the gist of this fix is that I compiled a VC7.1 pixman.lib, and plan on checking the compiled version into the tree. On win32-msvc builds, we just overwrite the one we build with this one. It seems to work fine, though I wouldn't mind some independent verification.
Attached patch build patch (obsolete) — Splinter Review
Attachment #187980 - Flags: review?(bryner)
Bugzilla won't let me attach the lib, but it's at http://rig.vlad1.com/~vladimir/misc/pixman-vc71.lib Needs to go into gfx/cairo/libpixman/src/
Comment on attachment 187980 [details] [diff] [review] build patch Do we really want to do that for _all_ msvc builds? Seems like we should be blacklisting known-evil versions. We can tidy that up after 1.1a2/1.8b3, though. r+a=shaver; checking in a (temporary?) copy of pixman isn't any worse than the copy of batik we have!
Attachment #187980 - Flags: review?(bryner)
Attachment #187980 - Flags: review+
Attachment #187980 - Flags: approval1.8b3+
(In reply to comment #3) > (From update of attachment 187980 [details] [diff] [review] [edit]) > Do we really want to do that for _all_ msvc builds? Seems like we should be > blacklisting known-evil versions. We can tidy that up after 1.1a2/1.8b3, > though. My plan is to just undo this hack on the trunk after we branch, which is presumably right after 1.1a2..
checked in.. waiting for tinderbox now.
The checkin for this broke beast, because permissions got screwed up. Yay. I disabled it in CVS, but it can be reenabled by uncommenting the line in gfx/cairo/pixman/src/Makefile.am. I'll fix it for good once I have someone handy who can poke at the tinderboxes to make them go.
Comment on attachment 187980 [details] [diff] [review] build patch >+ $(RM) $(DIST)/lib/$(LIBRARY) >+ $(INSTALL) $(IFLAGS1) $(srcdir)/pixman-vc71.lib $(DIST)/lib/$(LIBRARY) This nsinstall command creates a directory dist/lib/mozlibpixman.lib and copies pixman-vc71.lib into it. The build fails because it expects to open a file mozlibpixman.lib which turns out to be a directory.
pacifica is affected, too.
(In reply to comment #7) > (From update of attachment 187980 [details] [diff] [review] [edit]) > >+ $(RM) $(DIST)/lib/$(LIBRARY) > >+ $(INSTALL) $(IFLAGS1) $(srcdir)/pixman-vc71.lib $(DIST)/lib/$(LIBRARY) > > This nsinstall command creates a directory dist/lib/mozlibpixman.lib and copies > pixman-vc71.lib into it. The build fails because it expects to open a file > mozlibpixman.lib which turns out to be a directory. I was afraid of that. We seem to be using two different nsinstalls here -- this works fine with mine, which is from the moztools dist (size 30208 bytes, Apr 28 1998). The wrong one seems to always assume the destination is a directory... nsinstall doesn't seem to have any help output or anything, so I've no idea what the arguments it really expects are.
Local test of nsinstall on beast (which is also the same size and timestamp as vlad's) treats the second argument as a directory, creating what parts that don't exist, and copies the source file into the destination path. In the log output, c:/moztools/bin/nsinstall is called directly for copying mozlibpixman.lib.
Checked in followup to just use cp instead of nsinstall. nsinstall seems to always assume that the target is a directory, unless the basename of that path is identical to the source name, at which point it just copies it in. nsinstall still has no --help or similar. Maybe we should just use gnu install... This patch should fix it, and shuold fix the tinderboxes (by deleting the directory that was created).
Tested this patch locally on beast already. Will commit and respin.
Attachment #187980 - Attachment is obsolete: true
Attachment #188262 - Attachment is obsolete: true
Attachment #188271 - Flags: review+
Attachment #188271 - Flags: approval1.8b3+
Comment on attachment 188271 [details] [diff] [review] copy pixman-vc71.lib over mozlibpixman.lib on winnt builds Checking in Makefile.in; /cvsroot/mozilla/gfx/cairo/libpixman/src/Makefile.in,v <-- Makefile.in new revision: 1.10; previous revision: 1.9 done
The first build issue is resolved. A new issue has appeared. It appears the currently committed pixman-vc71.lib is incompatible with the vc6 build. The error: Creating library firefox.lib and object firefox.exp LINK : warning LNK4098: defaultlib "LIBC" conflicts with use of other libs; use /NODEFAULTLIB:library mozlibpixman.lib(renderedge.obj) : fatal error LNK1103: debugging information corrupt; recompile module make[4]: *** [firefox.exe] Error 79
Hmm. vlad doesn't look to be around atm. I will comment out the vc71 portion of this build so we can get Windows trunk green again and will leave it to him to turn it back on when a compatible lib is put in place.
Thanks Chase; I'm not sure why the debug information issue is showing up, but I'll recompile without debugging information. I wonder if I'm locally ending up with the VC71 linker instead of the VC6 one.. I'll look tomorrow/tuesday.
If I understand the windows build process completely, we also need a copy of mozlibpixman.pdb for talkback symbols. If that's the case we'll need you to commit that, too.
Comment on attachment 188271 [details] [diff] [review] copy pixman-vc71.lib over mozlibpixman.lib on winnt builds arg. cp screws up file permissions. please don't use it *ever*.
I don't get it, why isn't it sufficient to do libs:: $(INSTALL) $(srcdir)/pixman-vc71.lib $(DIST)
(In reply to comment #18) > (From update of attachment 188271 [details] [diff] [review] [edit]) > arg. cp screws up file permissions. please don't use it *ever*. cp is used to set up the file to have the right name, and then nsinstall is used to install it into dist/lib, with the right permissions. (In reply to comment #19) > I don't get it, why isn't it sufficient to do > > libs:: > $(INSTALL) $(srcdir)/pixman-vc71.lib $(DIST) Because the resulting filename needs to be mozlibpixman.lib, not pixman-vc71.lib, and nsinstall can't install to a file named differently than the source file.
i'd rather the file be nsinstalled with the wrong name first and mv'd to rename it second. what's controlling the name of the file? if it's in cvs, why can't cvs have $(srcdir)/vc71/mozlibpixman.lib or something like it?
(In reply to comment #21) > i'd rather the file be nsinstalled with the wrong name first and mv'd to rename > it second. what's controlling the name of the file? if it's in cvs, why can't > cvs have $(srcdir)/vc71/mozlibpixman.lib or something like it? We can do any of 50 things; this is a very temporary band-aid being put in for 1.1. As soon as we branch, this band aid is being removed from the trunk. I'm honestly more interested in getting this to work for our builds, than trying to get it exactly perfect.
Ok, working version of pixman-vc71.lib checked in. Only enabled on optimized builds, as pixman-vc71.lib explicitly requests the multi-threaded non-debug dll runtime (which is what we use for opt builds), and tinderbox is happy.
Status: NEW → RESOLVED
Closed: 20 years ago
Resolution: --- → FIXED
Does that mean that Firefox should build now in VC6 with ac_add_options --enable-svg ac_add_options --enable-svg-renderer=cairo in the .mozconfig? For me it still doesn't and gives a "cairo-win32-private.h(43) : warning C4005: 'WINVER" and a "cairo-win32-surface.c(130) : warning C4244: '=' : 'const double ' in 'long ', possible data loss" warning. Or are there special cygwin (?) packages for cairo to be installed?
(In reply to comment #24) > Does that mean that Firefox should build now in VC6 with > > ac_add_options --enable-svg > ac_add_options --enable-svg-renderer=cairo in the .mozconfig? > > For me it still doesn't and gives a "cairo-win32-private.h(43) : warning C4005: > 'WINVER" and a "cairo-win32-surface.c(130) : warning C4244: '=' : 'const double > ' in 'long ', possible data loss" warning. > > Or are there special cygwin (?) packages for cairo to be installed? This isn't related to any cairo/svg/win32 issues, just solely a fix for pixman miscompilation issues. I'm not sure what the win32 issue is; builds fine here and on the tinderboxes..
(In reply to comment #24) > For me it still doesn't and gives a "cairo-win32-private.h(43) : warning C4005: > 'WINVER" and a "cairo-win32-surface.c(130) : warning C4244: '=' : 'const double > ' in 'long ', possible data loss" warning. Those two lines do not explain any problems compiling cairo, since they are just warnings, not errors.
Sorry Chris. I just numbered the warnings and forgot the error. I don't even know if this is related to this bug or not: [quote] Konvertierung von 'long ' in 'unsigned short ', moeglicher Datenverlust c:/mozilla/gfx/cairo/cairo/src/cairo-win32-surface.c(956) : warning C4244: '=' : Konvertierung von 'long ' in 'unsigned short ', moeglicher Datenverlust make[5]: *** [cairo-win32-surface.obj] Error 2 make[5]: Leaving directory `/cygdrive/c/mozilla/gfx/cairo/cairo/src' make[4]: *** [libs] Error 2 make[4]: Leaving directory `/cygdrive/c/mozilla/gfx/cairo' make[3]: *** [libs] Error 2 make[3]: Leaving directory `/cygdrive/c/mozilla/gfx' make[2]: *** [tier_9] Error 2 make[2]: Leaving directory `/cygdrive/c/mozilla' make[1]: *** [default] Error 2 make[1]: Leaving directory `/cygdrive/c/mozilla' make: *** [build] Error 2 [\quote]
that still does not show the error...
Attached patch Makefile.in diffSplinter Review
This fix breaks VC8 builds. The problem is that pixman-vc71.lib links, as its default library, the libc.lib (check with dumpbin /directives pixman-vc71.lib) but there's no such library in VC8 (I use Visual Studio 2005 Beta 2). A simple patch to Makefile.in which tests for VC8 solves this problem (see attachment).
Sorry, I forgot to add that it breaks Firefox _branch_ builds (MOZILLA_1.8_BRANCH) as a result of landing this bug on the branch in bug 307155
Branch VC8 builds are uninteresting; if someone wants to make personal VC8 builds, they'll have to make the fix in the makefile directly (just get rid of pixman-vc71 stuff entirely, as it's not needed for VC8). This workaround is already gone from the trunk, so it shouldn't be an issue there.
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: