> lin hong wrote:
>> Hi, all
>>
>> we are making a release of our software with libxml under windows. we
>> end
>> up compiling it from source code, I thought it might worth writing it
>> down
>> here.
>>
>> first thing is, if you don't care about dependency of cygwin libraries
>> (which means the program require cygwin installed to run), just get
>> libxml
>> through cygwin setup. For us, it's not fair to ask normal user to
>> install
>> cygwin, so we try binary first.
>>
>
> I'm more comfortable with MSYS.

most work we did are under mac/linux, but for windows release, we are
using cygwin. is MSYS better than cygwin? I'm not familiar with windows at
all.

>
>> we got the binary from http://xmlsoft.org/sources/win32/
>>
>> but it does not work on cygwin + Win7 , just try to run any exe file
>> under
>> /bin dir, we got this.
>>
>> ./xsltproc.exe
>> /usr/i686-pc-mingw32/xslt_xml2/bin/xsltproc.exe: error while loading
>> shared libraries: ?: cannot open shared object file: No such file or
>> directory
>>
>
> Where do the .dll live?  In /usr/i686-pc-mingw32/xslt_xml2/bin?  If not,
> you'll need to add the path to the dll to PATH or move the dll to this
> xslt_xml2/bin directory.

what ".dll" files do we need to move under /bin ?

>> I believe it works for WinXP because I saw the msg on the website:
>> "The binaries are supported on an operating system based on the
>> NT-kernel,
>> such as Windows NT, Windows 2000 and Windows XP, exclusively"
>>
>> also it seems require iconv, which we don't really need.
>>
>
> libxslt requires it.

we did compile libxslt later without iconv -- at least I thought it works.
maybe we are missing some part of function.

>
>> anyway, we decide to compile it ourselves,  here are the changes I did:
>>
>
> You'll need the patches I just submitted to this list.
>
>> 0. for windows, makefile and configure are under /win32, run configure
>> like Readme.txt sugguests:
>>
>
> I believe you'll need to specify the --host switch if you're using Cygwin.
>
>> cscript configure.js threads:no static:yes compiler:mingw iconv:no
>> prefix=where_you_want_to_install   include=where_your_mingw_include_is
>> lib=where_your_mingw_lib_is debug=yes
>>
>> 1. We are using mingw , so Makefile.mingw is the one for us. modify
>> Makefile.mingw:
>>
>
> With MSYS I just use configure to create the Makefile.
>
>> 1.1 We want the program be independent from cygwin library, add
>> "-mno-cygwin" to CC
>> ! CC = gcc.exe -mno-cygwin
>>
>
> The -mno-cygwin switch is dead.  Cygwin now uses a cross build concept
> instead of a bastardized separation of MinGW gcc and Cygwin gcc.  This
> is the reason you'll need to specify the --host if you Cygwin to
> configure it.
>

really? we are using cygwin1.7.9(0.237/5/3).  is the "--host" option for
cygwin or just for libxml?
if the "--host" option can take care of MingGW/Cygwin choice problem, it
would be great.

>> 1.2 Want more output during compiling? add "-v"
>> ! CFLAGS += -v -DWIN32 -D_WINDOWS -D_MBCS -DNOLIBTOOL
>>
>
> I don't know about these defines, I did not have to do that.
>

"-v" is just verbose option. it's not necessary. other options are default
by the makefile.

>> 1.3 The default gcc linker refuse to look into Mingw directory before
>> Cygwin directory, I don't know why, so I use flexlink instead, modify
>> LD:
>
> Again you need to add --host to the configure.
>
>> LD = flexlink
>> also add flags flexlink needs:
>> + #flexlink flag
>> + FL_LDFLAGS = -chain mingw
>> + FL_LDFLAGS += -L $(BINDIR) -L $(LIBPREFIX)
>>
>
> I don't have any idea what flexlink is.

flexlink is linker that manage symbols for windows dll. make lift easier
for windows rookie like me, you can download it from
http://alain.frisch.fr/flexdll.html.

>
>> 1.4 Then call our LD with its flags to make "dll"
>> # Creates the libxml shared object.
>> ! #XMLSO_LDFLAGS = $(LDFLAGS) -shared -Wl,--dll
>> -Wl,--out-implib,$(BINDIR)/$(XML_IMP)
>>   $(BINDIR)/$(XML_SO) : $(BINDIR) $(XML_OBJS)
>> !  $(LD) $(FL_LDFLAGS) -o $(BINDIR)/$(XML_SO) $(XML_OBJS) $(LIBS)
>>
>
> Configure with --disable-static --enable-shared or vice versa.

I thought we need to set "static=1", so here we should do --enable-static
& --disable-shared?

>
>> 1.5 Make ".a" , there is a typo in the original makefile, they mess up
>> the
>> "/" with "\" -- you will get a "bin.mingwlibxml2.a" instead of
>> "bin.mingw/libxml2.a" because of this.
>>  # Creates the libxml archive.
>>   $(BINDIR)/$(XML_A) : $(BINDIR) $(XML_OBJS_A)
>> !  $(AR) $(ARFLAGS) $(BINDIR)/$(XML_A) $(XML_OBJS_A)
>>
>
> The Makefile.mingw is probably constructed to be used with mingw32-make
> which can handle the \ in paths but lacks in other things.

where is "mingw32-make"?

>
>> 1.6 Make sure STATIC is set to 1 in config.mingw -- if you did configure
>> with "static:yes", you are good. Add "-exe" to flexlink so it will
>> create
>> executable instead of dll file.
>> ! # An implicit rule for xmllint and friends.
>> ! # STATIC=1 is set in config.mingw
>> ! # I also change XML_BASENAME to XML_NAME.(-llibxml2 to -lxml2)
>>   ifeq ($(STATIC),1)
>>   $(BINDIR)/%.exe : $(UTILS_SRCDIR)/%.c
>>    $(CC) -DLIBXML_STATIC $(CFLAGS) -o $(subst
>> .c,.o,$(UTILS_INTDIR)/$(<F))
>> -c $<
>> !  # $(LD) $(LDFLAGS) -o $@ $(subst .c,.o,$(UTILS_INTDIR)/$(<F))
>> -l$(XML_BASENAME) $(LIBS)
>> !  $(LD) $(FL_LDFLAGS) -exe -o $@ $(subst .c,.o,$(UTILS_INTDIR)/$(<F))
>> -l$(XML_NAME) $(LIBS)
>>
>> That's pretty much everything for makefile.
>>
>> 3. so far everything we did so far is under win32, config.h in the upper
>> dir needs to be changed
>>
>> in config.h, find these two undef
>>
>>    /* Determine what socket length (socklen_t) data type is */
>>    #undef XML_SOCKLEN_T
>>    /* Define to 1 if you have the <stdint.h> header file. */
>>    #undef HAVE_STDINT_H
>>
>> Define them
>>
>> Without stdint.h you will get error message like "uint32 undefined".
>>
>> 4. set flag C_INCLUDE_PATH.
>> Set c_include_path flag can fix the "could not find libxml/xxx.h"
>> problem
>> Head files are under /libxml2-2.7.8/include and
>> /libxml2-2.7.8/include/libxml/,
>> to make our gcc look into these directories, we need to point
>> C_INCLUDE_PATH to them,  just setting C_FLAGS is NOT enough -- that's
>> really really strange.
>> although later I found out /libxml2-2.7.8/libxml/ also have a set of all
>> head files, so maybe pointing C_INCLUDE_PATH to that is also ok.
>>
>>
>> OK,  take a breath and run
>>
>> make -f Makefile.mingw
>>
>> that's it.
>
> Without my patch xmlcatalog will fail to read the entries in the catalog
> if you use GCC-4.6.1.
>
> All I needed to do with MinGW + MSYS otherwise was
>
> cd libxml2-2.7.8
> mkdir bld
> cd bld
> ../configure --prefix=/mingw --without-python --enable-shared
> --disable-static
> make
> make install
>
> I've also built it with the python bindings but you must ensure that
> your environment is set up with PYTHON variables.
>
> --
> Earnie
> -- https://sites.google.com/site/earnieboyd/
>


_______________________________________________
xml mailing list, project page  http://xmlsoft.org/
xml@gnome.org
http://mail.gnome.org/mailman/listinfo/xml

Reply via email to