Compiling libwww for Windows with MinGW32 [patch]

Hello,

is anybody with write access to the CVS reading this list? I'd really
like this patch to go into libwww!

I have been working on getting libwww to compile with mingw
<http://www.mingw.org/> for the last days. The resulting patch
(against Sep 28 CVS) is attached. The advantage of using mingw rather
than Cygwin is that the resulting programs do not need the Cygwin DLL
(which is quite large!) to run.

I have compiled static libwww libraries both by cross-compiling from
Linux, and native under Cygwin. To do the latter, the following steps
are needed:

- Get Cygwin from <http://sources.redhat.com/cygwin/>. Apart from the
  usual packages, don't forget to install the packages mingw, mingw
  runtime, w32api, perl, m4, auto*.
- (For those who need it: Compile and install SSL and zlib for MinGW. 
  You can't use the Cygwin versions. I haven't tried this.)
- Get the latest libwww CVS version - see
  <http://www.w3.org/Library/Distribution.html#Snapshot> or
  <http://www.w3.org/Library/cvs.html>
- The following files in libwww/config need to be added/updated,
  otherwise libtool will choke on the mingw target: config.guess
  config.sub depcomp install-sh ltmain.sh missing mkinstalldirs. 
  Libtool doesn't come with Cygwin, so get it from
  <http://www.gnu.org/software/libtool/>. Make sure to configure and
  install it with --prefix=/usr, or aclocal won't work. The files are
  in /usr/share/automake and /usr/share/libtool.
- "cd libwww"
- "sh libwww-mingw.diff" to apply the patch
- "export CC='gcc -mno-cygwin -fnative-struct'" to instruct Cygwin to
  produce MinGW32 binaries. The -fnative-struct may not be needed,
  depending on whether you also use it for the rest of your
  application.
- Go through the usual CVS bootstrap procedure
  <http://www.w3.org/Library/cvs.html#Boot>
- "./configure --target=i586-pc-mingw32 ..." and compile/install

Using the resulting libwww, I have successfully compiled and used the
LoadToFile example.


This patch explicitly *disables* generation of DLLs in configure.in,
because the only effect of enabling it is that all files are compiled
twice. Some further work would be necessary to get DLLs:

- Read libtool docs :-)
- Remove my AC_DISABLE_SHARED in configure.in
- Add LIBS="$LIBS -no-unused" in configure.in for mingw
- In libwww/Library/src/Makefile.am, add lines like:
      libwwwcore_la_LIBADD = -L.libs -lwwwutils
  to indicate dependencies between the libraries.
- Order the libs in lib_LTLIBRARIES so that depended-on libs come
  first.
- Prepend "__declspec(dllimport)" or "__declspec(dllexport)" to
  certain symbols in the source (e.g. WWW_TraceFlag)
- Provide a ws2_32.dll (WinSock 2) - libtool demands this, but doesn't
  like the native M$ DLL. I don't know how to fix this.

All the best,

  Richard

----------------------------------------------------------------------

Legal part: (from <http://www.w3.org/PATCHES.html>)

W3C (MIT, INRIA, Keio) is hereby permitted to distribute these
materials under W3C Software and Document licenses. Furthermore:

  1. I vouch that I have all rights necessary to contribute the
     materials in a way that does not violate copyright, patent, and
     trademark rights; contractual obligations, or libel and export
     control regulations.
  2. I agree that all contributed materials will be governed by the
     W3C Software or Document licenses.
  3. W3C will retain attribution of authorship. The W3C makes no
     a-priori commitment to support contributions.

I the undersigned represent that I own the copyright.
(My PGP signature will have to do!-)
-- 
  __   _
  |_) /|  Richard Atterer     |  CS student at the Technische  |  GnuPG key:
  | \/¯|  http://atterer.net  |  Universität München, Germany  |  0x888354F7
  ¯ ´` ¯

Received on Thursday, 4 October 2001 19:14:32 UTC