Re: dllobject/libobject

Bram Moolenaar <[email protected]>
Newsgroups gmane.comp.tools.aap.devel
Message-ID <[email protected]>
I wrote:

> A generic solution would be to tell ":dll" that it can use ordinary
> object files when "d" source files are used.  But how to do that from a
> "d" language module?  We probably have to do this by adding attributes
> to the object files, so that ":dll" can see that they are OK to use as
> dllobjtype.

If a compile action is defined for "d" to "dllobject" then ":dll" will
use it.  Thus it should only be a matter of defining a compile action
for all object types:

	:action compile object,libobject,dllobject,default d
	    :sys dcc $source -o $target

I don't see an obvious way to specify that "object", "dllobject" and
"libobject" are actually the same.  So long as we don't really need
this, I think we can leave it out.

The real problem actually occurs when dllobject and libobject files have
the same extension, but the _are_ different.  Aap then doesn't protect
the user for mixing up the files and will happily try to link the wrong
object files.  The user should use a different $BDIR.  But it would be
nice if Aap can warn the user when he is doing something that won't
work.

> I suppose key to this story is that src2obj() should be language
> specific.  For a D file it could add an attribute to the object file
> that says it can both be used with :program and :dll.  Thus instead of
> explicitly giving a different suffix argument to src2obj() it could be
> much smarter: recognize the filetype of the source and select the object
> suffix and other attributes based on that.

I have implemented this now.  src2obj() recognizes the filetype of the
source and uses a different variable for the object file suffix.  For
example, src2obj("foo.d", "OBJSUF") uses $D_OBJSUF.  If it doesn't exist
then if falls back to $OBJSUF.

This is a very simple method.  In your language module you can set four
variables to specify the extension to be used:

	D_OBJSUF = $OBJSUF
	D_DLLOBJSUF = $OBJSUF
	D_LIBOBJSUF = $OBJSUF
	D_LTOBJSUF = $OBJSUF

In this example they are all equal, you mentioned that is how the "d"
language works.

> We should also have a "src2dllobj()" and "src2libobj()" then.  Or use an
> argument to specify "dllobject" or "libobject" (and "ltobject" I
> suppose).

I have now solved this by using the "sufname" argument for src2obj().
This already existed, thus it's a very simple change.  The only thing is
that the filetype detection may prepend the filetype to the variable
name.  If you don't want this, the new "auto" argument can be set to
zero.

The new docs for src2obj():

src2obj(source, sufname = "OBJSUF", auto = 1)

    Transform a string, which is a list of source files, into the
    corresponding list of object files. Each item in "source" is changed
    by prepending $BDIR and changing or appending the suffix specified
    with "sufname" (defaults to $OBJSUF).

    The attribute "var_BDIR" is used instead of $BDIR when the attribute
    exists. The attribute "suffix" is used for the suffix instead of
    using the "suffix" argument when the attribute exists.

    When the "auto" argument is non-zero (the default) then the filetype
    of the source file will be prepended to the "sufname" (in upper case
    and adding an underscore). Thus for a Java source file, $JAVA_OBJSUF
    will be used. When it does not exists "sufname" is used. When this
    is not wanted the "auto" argument must be set to zero.


Aap version 1.032 is available now.

Lars, please check if this works well with your "d" module.  With a bit
of luck Adriaan manages to implement ":import" and then it should all
work.

-- 
hundred-and-one symptoms of being an internet addict:
20. When looking at a pageful of someone else's links, you notice all of them
    are already highlighted in purple.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///          Creator of Vim - Vi IMproved -- http://www.Vim.org          \\\
\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
 \\\  Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html  ///


-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.