From: Renato S. <br....@gm...> - 2013-10-26 23:36:17
|
I'm digging into a problem with building Pidgin in GCC 4.8, and I found out that w32api 3.14 includes winsock2.h while current version 4.0.3-1 includes winsock.h instead. Pidgin source code has some files which end up including winsock2.h after windows.h, which is a problem if windows.h inlcuded winsock.h already, which is the case with GCC 4.8 and current w32api 4.0.3-1 (I'm assuming GCC is tied with specific versions of w32api). So a few questions: 1. Is w32api 3.14 the right match for GCC 4.4.0? That's was indicated for manual download from their wiki. I wonder if they use a different w32api version for that version of GCC. If that's the case, then GCC 4.8 possibly needs a custom version as well. 2. Why does newer win32api include winsock.h instead of winsock2.h? I would expect the opposite, no? 3. What is the right w32api version match for GCC 4.7.2? That's the "right" compiler to use, rather than 4.8, but I cannot find a way to downgrade GCC, as asked in another thread. I would like to take a look at whatever version is used by GCC 4.7.2 to check if it still includes winsock2.h instead of winsock.h. 4. What are my alternatives with these new versions of win32api which include winsock.h, except for moving the indirect winsock2.h includes to the top before windows.h in Pidgin source code? Thanks in advance. |
From: Earnie B. <ea...@us...> - 2013-10-28 12:08:39
|
On Sat, Oct 26, 2013 at 7:35 PM, Renato Silva wrote: > I'm digging into a problem with building Pidgin in GCC 4.8, and I found out > that w32api 3.14 includes winsock2.h while current version 4.0.3-1 includes > winsock.h instead. Pidgin source code has some files which end up including > winsock2.h after windows.h, which is a problem if windows.h inlcuded > winsock.h already, which is the case with GCC 4.8 and current w32api 4.0.3-1 > (I'm assuming GCC is tied with specific versions of w32api). > It was incorrect for windows.h to include winsock2. instead of winsock.h; that bug was fixed and noted in NEWS. It is documented that if the end user wants to use winsock2.h instead of winsock.h that he include winsock2.h instead of windows.h. The windows.h file is included by winsock2.h. -- Earnie -- https://sites.google.com/site/earnieboyd |
From: Gisle V. <gv...@ya...> - 2013-10-28 12:50:56
|
"Renato Silva" <br....@gm...> wrote: > 4. What are my alternatives with these new versions of win32api which > include winsock.h, except for moving the indirect winsock2.h includes to > the top before windows.h in Pidgin source code? Have you tried adding '-DWIN32_LEAN_AND_MEAN' to your CFLAGS? Thus <winsock*.h> is not included via <windows.h>. --gv |
From: Earnie B. <ea...@us...> - 2013-10-28 12:56:52
|
On Mon, Oct 28, 2013 at 8:36 AM, Gisle Vanem wrote: > "Renato Silva" wrote: > >> 4. What are my alternatives with these new versions of win32api which >> include winsock.h, except for moving the indirect winsock2.h includes to >> the top before windows.h in Pidgin source code? > > Have you tried adding '-DWIN32_LEAN_AND_MEAN' to your CFLAGS? > Thus <winsock*.h> is not included via <windows.h>. That eliminates other files as well. The correct fix is to include winsock2.h instead of windows.h. It is correct to do so because it is the published documented method for using winsock2.h. -- Earnie -- https://sites.google.com/site/earnieboyd |
From: Eli Z. <el...@gn...> - 2013-10-28 16:19:42
|
> From: Renato Silva <br....@gm...> > Date: Sat, 26 Oct 2013 21:35:29 -0200 > > 3. What is the right w32api version match for GCC 4.7.2? Any one between 3.17 and 3.20, inclusive, AFAIK. |
From: Renato S. <br....@gm...> - 2013-10-29 04:18:59
|
2013/10/28 Eli Zaretskii <el...@gn...> > > From: Renato Silva <br....@gm...> > > Date: Sat, 26 Oct 2013 21:35:29 -0200 > > > > 3. What is the right w32api version match for GCC 4.7.2? > > Any one between 3.17 and 3.20, inclusive, AFAIK. > Thanks. My post was awaiting *moderator approval*, so in the meantime I just managed to build Pidgin successfully<http://bazaar.launchpad.net/~renatosilva/pidgin/windev/revision/32>, with a separate, manual GCC 4.7.2 installation. I used w32api 3.17 which "fortunately" still includes winsock2.h, so previous problems with GCC 4.8 and its w32api just disappeared. Thanks anyway! > > > ------------------------------------------------------------------------------ > October Webinars: Code for Performance > Free Intel webinars can help you accelerate application performance. > Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most > from > the latest Intel processors and coprocessors. See abstracts and register > > http://pubads.g.doubleclick.net/gampad/clk?id=60135991&iu=/4140/ostg.clktrk > _______________________________________________ > MinGW-users mailing list > Min...@li... > > This list observes the Etiquette found at > http://www.mingw.org/Mailing_Lists. > We ask that you be polite and do the same. Disregard for the list > etiquette may cause your account to be moderated. > > _______________________________________________ > You may change your MinGW Account Options or unsubscribe at: > https://lists.sourceforge.net/lists/listinfo/mingw-users > Also: mailto:min...@li...?subject=unsubscribe > |
From: Earnie B. <ea...@us...> - 2013-10-29 11:28:25
|
On Tue, Oct 29, 2013 at 12:18 AM, Renato Silva wrote: > > 2013/10/28 Eli Zaretskii >> >> > From: Renato Silva >> > Date: Sat, 26 Oct 2013 21:35:29 -0200 >> > >> > 3. What is the right w32api version match for GCC 4.7.2? >> >> Any one between 3.17 and 3.20, inclusive, AFAIK. > > > Thanks. My post was awaiting moderator approval, so in the meantime I just > managed to build Pidgin successfully, with a separate, manual GCC 4.7.2 > installation. I used w32api 3.17 which "fortunately" still includes > winsock2.h, so previous problems with GCC 4.8 and its w32api just > disappeared. Thanks anyway! Using a broken library which exhibits seeming correctness doesn't "fix" anything. Your software package needs to include winsock2.h before or, more correctly, instead of windows.h. -- Earnie -- https://sites.google.com/site/earnieboyd |
From: Renato S. <br....@gm...> - 2013-10-29 15:09:58
|
2013/10/29 Earnie Boyd <ea...@us...> > On Tue, Oct 29, 2013 at 12:18 AM, Renato Silva wrote: > > > > 2013/10/28 Eli Zaretskii > >> > >> > From: Renato Silva > >> > Date: Sat, 26 Oct 2013 21:35:29 -0200 > >> > > >> > 3. What is the right w32api version match for GCC 4.7.2? > >> > >> Any one between 3.17 and 3.20, inclusive, AFAIK. > > > > > > Thanks. My post was awaiting moderator approval, so in the meantime I > just > > managed to build Pidgin successfully, with a separate, manual GCC 4.7.2 > > installation. I used w32api 3.17 which "fortunately" still includes > > winsock2.h, so previous problems with GCC 4.8 and its w32api just > > disappeared. Thanks anyway! > > Using a broken library which exhibits seeming correctness doesn't > "fix" anything. Your software package needs to include winsock2.h > before or, more correctly, instead of windows.h. > Tell this to the Pidgin developers. > > -- > Earnie > -- https://sites.google.com/site/earnieboyd > > > ------------------------------------------------------------------------------ > Android is increasing in popularity, but the open development platform that > developers love is also attractive to malware creators. Download this white > paper to learn more about secure code signing practices that can help keep > Android apps secure. > http://pubads.g.doubleclick.net/gampad/clk?id=65839951&iu=/4140/ostg.clktrk > _______________________________________________ > MinGW-users mailing list > Min...@li... > > This list observes the Etiquette found at > http://www.mingw.org/Mailing_Lists. > We ask that you be polite and do the same. Disregard for the list > etiquette may cause your account to be moderated. > > _______________________________________________ > You may change your MinGW Account Options or unsubscribe at: > https://lists.sourceforge.net/lists/listinfo/mingw-users > Also: mailto:min...@li...?subject=unsubscribe > |
From: Keith M. <kei...@us...> - 2013-10-30 05:49:11
|
On 29/10/13 15:09, Renato Silva wrote: >> Using a broken library which exhibits seeming correctness doesn't >> "fix" anything. Your software package needs to include winsock2.h >> before or, more correctly, instead of windows.h. That's not entirely consistent with Microsoft's recommendation; (see my earlier response to Earnie, in reply to Gisle Vanem). However, MSDN is unequivocal on this: windows.h includes winsock.h, (unless a definition of WIN32_LEAN_AND_MEAN precedes its inclusion); it should *not* include winsock2.h, and it was a bug for our w32api-3.x implementation to have done so. On this much, Earnie is correct: any code which relies on this misfeature is just plain broken. > Tell this to the Pidgin developers. *You* should do this. It is you who have an interest vested in building Pidgin; while others may help you towards understanding of a particular bug, why should they be expected to intercede, on your behalf, with the developers of another project, which right now, is mostly of interest to you? -- Regards, Keith. |
From: Keith M. <kei...@us...> - 2013-10-30 05:37:59
|
On 28/10/13 12:56, Earnie Boyd wrote: > On Mon, Oct 28, 2013 at 8:36 AM, Gisle Vanem wrote: >> "Renato Silva" wrote: >> >>> 4. What are my alternatives with these new versions of win32api which >>> include winsock.h, except for moving the indirect winsock2.h includes to >>> the top before windows.h in Pidgin source code? >> >> Have you tried adding '-DWIN32_LEAN_AND_MEAN' to your CFLAGS? >> Thus <winsock*.h> is not included via <windows.h>. > > That eliminates other files as well. The correct fix is to include > winsock2.h instead of windows.h. It is correct to do so because it is > the published documented method for using winsock2.h. Actually, Gisle's recommendation is consistent with Microsoft's own MSDN documentation; quoting http://tinyurl.com/qepstdt > The Winsock2.h header file internally includes core elements from the > Windows.h header file, so there is not usually an #include line for > the Windows.h header file in Winsock applications. If an #include > line is needed for the Windows.h header file, this should be preceded > with the #define WIN32_LEAN_AND_MEAN macro. For historical reasons, > the Windows.h header defaults to including the Winsock.h header file > for Windows Sockets 1.1. The declarations in the Winsock.h header > file will conflict with the declarations in the Winsock2.h header > file required by Windows Sockets 2.0. The WIN32_LEAN_AND_MEAN macro > prevents the Winsock.h from being included by the Windows.h header. > An example illustrating this is shown below. > > > #ifndef WIN32_LEAN_AND_MEAN > #define WIN32_LEAN_AND_MEAN > #endif > > #include <windows.h> > #include <winsock2.h> Microsoft don't seem to say it themselves, but there is anecdotal evidence on their developer forums: http://tinyurl.com/phfbvs5 > If it produces [different] errors then you need to say which errors. > > But the solution which always works is to include winsock2.h before > windows.h. It may not be formally documented thus, but this may just be better practice. -- Regards, Keith. |
From: Earnie B. <ea...@us...> - 2013-10-30 12:11:25
|
On Wed, Oct 30, 2013 at 1:37 AM, Keith Marshall <kei...@us...> wrote: > On 28/10/13 12:56, Earnie Boyd wrote: >> On Mon, Oct 28, 2013 at 8:36 AM, Gisle Vanem wrote: >>> "Renato Silva" wrote: >>> >>>> 4. What are my alternatives with these new versions of win32api which >>>> include winsock.h, except for moving the indirect winsock2.h includes to >>>> the top before windows.h in Pidgin source code? >>> >>> Have you tried adding '-DWIN32_LEAN_AND_MEAN' to your CFLAGS? >>> Thus <winsock*.h> is not included via <windows.h>. >> >> That eliminates other files as well. The correct fix is to include >> winsock2.h instead of windows.h. It is correct to do so because it is >> the published documented method for using winsock2.h. > > Actually, Gisle's recommendation is consistent with Microsoft's own MSDN > documentation; quoting http://tinyurl.com/qepstdt > The 2nd example on the page with which this URL points to and you quote below could just as easily have removed the include for windows.h. But the example was to point out the possible use of WIN32_LEAN_AND_MEAN to avoid including winsock.h but it doesn't state one way or another that it is the preferred method. >> The Winsock2.h header file internally includes core elements from the >> Windows.h header file, so there is not usually an #include line for >> the Windows.h header file in Winsock applications. If an #include >> line is needed for the Windows.h header file, this should be preceded >> with the #define WIN32_LEAN_AND_MEAN macro. For historical reasons, >> the Windows.h header defaults to including the Winsock.h header file >> for Windows Sockets 1.1. The declarations in the Winsock.h header >> file will conflict with the declarations in the Winsock2.h header >> file required by Windows Sockets 2.0. The WIN32_LEAN_AND_MEAN macro >> prevents the Winsock.h from being included by the Windows.h header. >> An example illustrating this is shown below. >> >> >> #ifndef WIN32_LEAN_AND_MEAN >> #define WIN32_LEAN_AND_MEAN >> #endif >> >> #include <windows.h> >> #include <winsock2.h> > > Microsoft don't seem to say it themselves, but there is anecdotal > evidence on their developer forums: http://tinyurl.com/phfbvs5 > >> If it produces [different] errors then you need to say which errors. >> >> But the solution which always works is to include winsock2.h before >> windows.h. > > It may not be formally documented thus, but this may just be better > practice. > The best example I found of a client/server using socks is http://www.tenouk.com/Winsock/Winsock2example9.html and you'll notice that windows.h is not included but WIN32_LEAN_AND_MEAN is still defined because winsock2.h includes windows.h. -- Earnie -- https://sites.google.com/site/earnieboyd |