Skip to content
Back to formatted view

Raw Message

Message-ID: <dba1e14b0712201428n3c55c57fx71de164f3ea50f7@mail.gmail.com>
Date: 2007-12-20T22:28:31Z
From: Iago Mosqueira
Subject: SHLIB steps on a Makefile
In-Reply-To: <Pine.LNX.4.64.0712202206210.11123@gannet.stats.ox.ac.uk>

On Dec 20, 2007 11:23 PM, Prof Brian Ripley <ripley at stats.ox.ac.uk> wrote:
> On Thu, 20 Dec 2007, Iago Mosqueira wrote:
>
> > Hi,
> >
> > I need to create a Makefile.win for a given package so as to fiddle
> > slightly with the compilation process. My Makefile works fine in Linux
>
> That's rather dangerous: we have had lots of trouble with packages for
> which the Makefile works on the maintainer's Linux, but not on other
> people's systems (even Linux ones).
>
> Do you really, really need a Makefile.win?: I would be surprised if you
> did.  Only 9 CRAN packages have a Makefile.win, and two of those are
> dummies and one other we have asked the maintainers to replace by
> Makevars.win as it is not portable.
>
> > but I am having trouble creating Makefile.win for MinGW. I first
> > looked at the commands that Rcmd SHLIB appeared to be running and
> > copied those onto the Makefile. But one step seems to be missing, the
> > creation of the _res.rc file needed by windres
> >
> >       g++-sjlj -I$(RHOME)/include -I../inst/include/ -O2 -Wall -c pkg.cpp -o pkg.o
> >       windres --preprocessor="gcc-sjlj -E -xc -DRC_INVOKED"
> > -I$(RHOME)/include -I../inst/include -i pkg_res.rc -o pkg_res.o
> >       g++-sjlj -shared -s -o pkg.dll pkg.def pkg.o FL pkg_res.o -L$(RHOME)/bin -lR
> >
> > This might be fairly obvious, but it is my first attempt at compiling
> > with MinGW and my search has been fruitless.
> >
> > What is it that I need to add to replicate what Rcmd SHLIB does?
>
> Adding the resources is not essential: they add identification to the
> DLL which can be very useful but are icing on the cake.  So I would not
> try to emulate that step.
>
> But the Makefile in use is src/gnuwin32/MakeDll and that contains
>
> $(DLLNAME)_res.rc:
>          @PERL5LIB=$(RHOME)/share/perl $(PERL) $(RHOME)/src/gnuwin32/makeDllRes.pl $(DLLNAME) > $@
>
> $(DLLNAME)_res.o: $(DLLNAME)_res.rc $(RHOME)/include/Rversion.h
>

Many thanks for the information. I am trying to make a package C code
compile against a DLL already present in another package, so I need to
include its location in the call to gcc.  I'll see what the most
portable system could be and will test widely.

Regards,


Iago Mosqueira