unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Re: How to link new libraries when building emacs
       [not found] <CACnP4N+4Z8O9TKYbEg5bttTyf0t_PQJ_sDW4GF8hcgcWMSfjwA@mail.gmail.com>
@ 2024-04-03  5:52 ` Po Lu
  2024-04-03 16:42   ` Elijah G
  0 siblings, 1 reply; 11+ messages in thread
From: Po Lu @ 2024-04-03  5:52 UTC (permalink / raw)
  To: Elijah G; +Cc: emacs-devel

Elijah G <eg642616@gmail.com> writes:

> Hello, i don't know if this is a good place to ask this, i'm building
> emacs with an additional library (exactly d2d1.h), however i'm getting
> errors that library isn't linking, I have been looking for how to
> solve it, but nothing, even i've tried searching in commits about
> other libraries imported but I ended up getting lost. So If anyone
> knows I would greatly appreciate it.

Unless this library exists in Windows 9X, merely linking with the
library will not suffice; it must be dynamically loaded, and its
functions avoided on systems that predate their introduction.  Grepping
for "LoadLibrary" should return plenty of examples.

Also, reading

  https://github.com/apitrace/dxsdk/blob/master/Include/d2d1.h

d2d1 is also a C++ library, while Emacs headers expect a C compiler and
probably cannot be made to compile otherwise without substantial effort
and creating a new burden on the rest of us, so it's not possible to
make use of its functionality unless we decide to require a C++ compiler
for the MS Windows port, and even then not without restricting calls to
C++ functions in files isolated from Emacs facilities which in turn
export C interfaces to such functionality.  I'm not confident that
MinGW's C++ ABI is stable enough to support loading C++ libraries at
runtime either.

> Also I would like to know where the font display source is stored,

It's divided among w32font.c, w32uniscribe.c and hbfont.c, AFAIK.

> specifically emoji support in Windows NT port.

There's no specific support for Emoji in any of those files, I think.

Finally, emacs-devel@gnu.org is a far more suitable venue for questions
regarding Emacs development.



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: How to link new libraries when building emacs
  2024-04-03  5:52 ` How to link new libraries when building emacs Po Lu
@ 2024-04-03 16:42   ` Elijah G
  2024-04-04  0:28     ` Po Lu
  0 siblings, 1 reply; 11+ messages in thread
From: Elijah G @ 2024-04-03 16:42 UTC (permalink / raw)
  To: Po Lu; +Cc: emacs-devel

On Tue, Apr 2, 2024 at 11:52 PM Po Lu <luangruo@yahoo.com> wrote:
>
> Elijah G <eg642616@gmail.com> writes:
>
> > Hello, i don't know if this is a good place to ask this, i'm building
> > emacs with an additional library (exactly d2d1.h), however i'm getting
> > errors that library isn't linking, I have been looking for how to
> > solve it, but nothing, even i've tried searching in commits about
> > other libraries imported but I ended up getting lost. So If anyone
> > knows I would greatly appreciate it.
>
> Unless this library exists in Windows 9X, merely linking with the
> library will not suffice; it must be dynamically loaded, and its
> functions avoided on systems that predate their introduction.  Grepping
> for "LoadLibrary" should return plenty of examples.
>

Thank you, I thought I had to modify autoconf files to import the library
like libjansson or windows.h, I'll test it.

> Also, reading
>
>   https://github.com/apitrace/dxsdk/blob/master/Include/d2d1.h
>
> d2d1 is also a C++ library, while Emacs headers expect a C compiler and
> probably cannot be made to compile otherwise without substantial effort
> and creating a new burden on the rest of us, so it's not possible to
> make use of its functionality unless we decide to require a C++ compiler
> for the MS Windows port, and even then not without restricting calls to
> C++ functions in files isolated from Emacs facilities which in turn
> export C interfaces to such functionality.  I'm not confident that
> MinGW's C++ ABI is stable enough to support loading C++ libraries at
> runtime either.
>

I don't know if there are already libraries in emacs that also are C++,
I'm trying to get support for color emojis in the NT port and the only library
that I know allows this is d2d1.h, I needed to test if it's possible with
msys2 mingw tools.

> > Also I would like to know where the font display source is stored,
>
> It's divided among w32font.c, w32uniscribe.c and hbfont.c, AFAIK.
>

Thanks.

> Finally, emacs-devel@gnu.org is a far more suitable venue for questions
> regarding Emacs development.

Thanks, I think I'll resend this to emacs-devel@gnu.org to know more
about this.



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: How to link new libraries when building emacs
  2024-04-03 16:42   ` Elijah G
@ 2024-04-04  0:28     ` Po Lu
  2024-04-04  2:15       ` Elijah G
  0 siblings, 1 reply; 11+ messages in thread
From: Po Lu @ 2024-04-04  0:28 UTC (permalink / raw)
  To: Elijah G; +Cc: emacs-devel

Elijah G <eg642616@gmail.com> writes:

> I don't know if there are already libraries in emacs that also are C++,
> I'm trying to get support for color emojis in the NT port and the only library
> that I know allows this is d2d1.h, I needed to test if it's possible with
> msys2 mingw tools.

But if it's C++, we know it will be impossible, right?

> Thanks, I think I'll resend this to emacs-devel@gnu.org to know more
> about this.

That won't be necessary.  I've already moved this thread over.



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: How to link new libraries when building emacs
  2024-04-04  0:28     ` Po Lu
@ 2024-04-04  2:15       ` Elijah G
  2024-04-04  3:15         ` Po Lu
  0 siblings, 1 reply; 11+ messages in thread
From: Elijah G @ 2024-04-04  2:15 UTC (permalink / raw)
  To: Po Lu; +Cc: emacs-devel

On Wed, Apr 3, 2024 at 6:28 PM Po Lu <luangruo@yahoo.com> wrote:
>
> Elijah G <eg642616@gmail.com> writes:
>
> > I don't know if there are already libraries in emacs that also are C++,
> > I'm trying to get support for color emojis in the NT port and the only library
> > that I know allows this is d2d1.h, I needed to test if it's possible with
> > msys2 mingw tools.
>
> But if it's C++, we know it will be impossible, right?

Yes you are right, but since d1d2.h is also made in C i think it
may be possible to import it into emacs, (except d2d1_helper headers
since they are made in pure C++ (also i'm thinking of adding another
header into emacs to add similar helper functions)),
I think it's worth a try, also I don't know if using opengl can also
achieve this.

In one of my tests i could import d2d1 into my emacs build,
this is the code that i used for this:
int
w32font_draw (struct glyph_string *s, int from, int to,
          int x, int y, bool with_background)
{

  HMODULE d2d = LoadLibrary ("d2d1.dll");
  if (d2d)
    {
#include <d2d1.h>
      DEFVAR_INT ("D2D1_HEADER", VD2D1_HEADER_VALUE, doc: /*C HEADER*/);
      VD2D1_HEADER_VALUE =
D2D1_INTERPOLATION_MODE_DEFINITION_MULTI_SAMPLE_LINEAR;
    }
...

It's only a test that I made to check if it's possible to import it
Without dueling with C++ and using their functions and/or variables
in C (I'm not sure where I should move this code snippet).

> > Thanks, I think I'll resend this to emacs-devel@gnu.org to know more
> > about this.
>
> That won't be necessary.  I've already moved this thread over.

Thank you.



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: How to link new libraries when building emacs
  2024-04-04  2:15       ` Elijah G
@ 2024-04-04  3:15         ` Po Lu
  2024-04-04  3:49           ` Elijah G
  2024-04-04  6:47           ` Eli Zaretskii
  0 siblings, 2 replies; 11+ messages in thread
From: Po Lu @ 2024-04-04  3:15 UTC (permalink / raw)
  To: Elijah G; +Cc: emacs-devel

Elijah G <eg642616@gmail.com> writes:

> Yes you are right, but since d1d2.h is also made in C i think it
> may be possible to import it into emacs, (except d2d1_helper headers
> since they are made in pure C++ (also i'm thinking of adding another
> header into emacs to add similar helper functions)),

If this header requires a C++ compiler, I can't promise the additional
build-time requirement will be acceptable.

> It's only a test that I made to check if it's possible to import it
> Without dueling with C++ and using their functions and/or variables
> in C (I'm not sure where I should move this code snippet).

syms_of_w32font, perhaps?  (It's really not I who's best-positioned to
answer such questions.)



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: How to link new libraries when building emacs
  2024-04-04  3:15         ` Po Lu
@ 2024-04-04  3:49           ` Elijah G
  2024-04-04  4:25             ` Elijah G
  2024-04-04  6:47           ` Eli Zaretskii
  1 sibling, 1 reply; 11+ messages in thread
From: Elijah G @ 2024-04-04  3:49 UTC (permalink / raw)
  To: Po Lu; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 662 bytes --]

On Wed, Apr 3, 2024 at 9:16 PM Po Lu <luangruo@yahoo.com> wrote:
>
> Elijah G <eg642616@gmail.com> writes:
>
> > Yes you are right, but since d1d2.h is also made in C i think it
> > may be possible to import it into emacs, (except d2d1_helper headers
> > since they are made in pure C++ (also i'm thinking of adding another
> > header into emacs to add similar helper functions)),
>
> If this header requires a C++ compiler, I can't promise the additional
> build-time requirement will be acceptable.

As far as i know, the header doesn't need any c++ compiler (also the dlls
are built-in in my system), my build is using gcc  -g3 -O2 -gdwarf-2.

[-- Attachment #2: Type: text/html, Size: 946 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: How to link new libraries when building emacs
  2024-04-04  3:49           ` Elijah G
@ 2024-04-04  4:25             ` Elijah G
  0 siblings, 0 replies; 11+ messages in thread
From: Elijah G @ 2024-04-04  4:25 UTC (permalink / raw)
  To: Po Lu; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 961 bytes --]

El mié., 3 de abril de 2024 9:49 p. m., Elijah G <eg642616@gmail.com>
escribió:

> On Wed, Apr 3, 2024 at 9:16 PM Po Lu <luangruo@yahoo.com> wrote:
> >
> > Elijah G <eg642616@gmail.com> writes:
> >
> > > Yes you are right, but since d1d2.h is also made in C i think it
> > > may be possible to import it into emacs, (except d2d1_helper headers
> > > since they are made in pure C++ (also i'm thinking of adding another
> > > header into emacs to add similar helper functions)),
> >
> > If this header requires a C++ compiler, I can't promise the additional
> > build-time requirement will be acceptable.
>
> As far as i know, the header doesn't need any c++ compiler (also the dlls
> are built-in in my system), my build is using gcc  -g3 -O2 -gdwarf-2.
>

I forgot to mention, since i'm not a pure expert in C that header can be a
bit buggy or slow, however i think this thread can also be used for send
the state of the header.

>

[-- Attachment #2: Type: text/html, Size: 1738 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: How to link new libraries when building emacs
  2024-04-04  3:15         ` Po Lu
  2024-04-04  3:49           ` Elijah G
@ 2024-04-04  6:47           ` Eli Zaretskii
  2024-04-04 22:47             ` Elijah G
  1 sibling, 1 reply; 11+ messages in thread
From: Eli Zaretskii @ 2024-04-04  6:47 UTC (permalink / raw)
  To: Po Lu; +Cc: eg642616, emacs-devel

> From: Po Lu <luangruo@yahoo.com>
> Cc: emacs-devel@gnu.org
> Date: Thu, 04 Apr 2024 11:15:43 +0800
> 
> Elijah G <eg642616@gmail.com> writes:
> 
> > Yes you are right, but since d1d2.h is also made in C i think it
> > may be possible to import it into emacs, (except d2d1_helper headers
> > since they are made in pure C++ (also i'm thinking of adding another
> > header into emacs to add similar helper functions)),
> 
> If this header requires a C++ compiler, I can't promise the additional
> build-time requirement will be acceptable.

AFAICT, that header can be used both with a C++ compiler and a C
compiler.  See the D2D_USE_C_DEFINITIONS macro in the header and how
it is set and used.

> > It's only a test that I made to check if it's possible to import it
> > Without dueling with C++ and using their functions and/or variables
> > in C (I'm not sure where I should move this code snippet).
> 
> syms_of_w32font, perhaps?

No, syms_of_w32font is run during dumping.  The right place is in
syms_of_w32uniscribe_for_pdumper, when 'initialized' is non-zero
(i.e. not during dumping).  This assumes that using Direct2D with the
'gdi' font back-end is either impossible or doesn't make a lot of
sense anyway.

I'm guessing that using Direct2D will need a whole new font back-end,
since we'd need a different implementation of the main drawing methods
exported by the font driver.



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: How to link new libraries when building emacs
  2024-04-04  6:47           ` Eli Zaretskii
@ 2024-04-04 22:47             ` Elijah G
  2024-04-05  5:18               ` Eli Zaretskii
  0 siblings, 1 reply; 11+ messages in thread
From: Elijah G @ 2024-04-04 22:47 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Po Lu, emacs-devel

On Thu, Apr 4, 2024 at 12:47 AM Eli Zaretskii <eliz@gnu.org> wrote:
>
> I'm guessing that using Direct2D will need a whole new font back-end,
> since we'd need a different implementation of the main drawing methods
> exported by the font driver.

I guess so, Also it needs DirectDraw (dwrite.h) which sadly most
of their functions to draw are made in C++ AFAIS,
i think I'll need to create a new header like w32direct2d.h
I wonder how to import another C header, do i need to modify
autoconf files or something like that?.



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: How to link new libraries when building emacs
  2024-04-04 22:47             ` Elijah G
@ 2024-04-05  5:18               ` Eli Zaretskii
  2024-04-05 22:53                 ` Elijah G
  0 siblings, 1 reply; 11+ messages in thread
From: Eli Zaretskii @ 2024-04-05  5:18 UTC (permalink / raw)
  To: Elijah G; +Cc: luangruo, emacs-devel

> From: Elijah G <eg642616@gmail.com>
> Date: Thu, 4 Apr 2024 16:47:07 -0600
> Cc: Po Lu <luangruo@yahoo.com>, emacs-devel@gnu.org
> 
> On Thu, Apr 4, 2024 at 12:47 AM Eli Zaretskii <eliz@gnu.org> wrote:
> >
> > I'm guessing that using Direct2D will need a whole new font back-end,
> > since we'd need a different implementation of the main drawing methods
> > exported by the font driver.
> 
> I guess so, Also it needs DirectDraw (dwrite.h) which sadly most
> of their functions to draw are made in C++ AFAIS,

Yes, it seems so.  It's the main reason we didn't try to use them in
Emacs.

> i think I'll need to create a new header like w32direct2d.h
> I wonder how to import another C header, do i need to modify
> autoconf files or something like that?.

No need to change autoconf files, just add the header and use it in
the C sources.  Autoconf changes are needed only if some systems don't
have a header file, but for header files that are part of Emacs, that
cannot happen.



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: How to link new libraries when building emacs
  2024-04-05  5:18               ` Eli Zaretskii
@ 2024-04-05 22:53                 ` Elijah G
  0 siblings, 0 replies; 11+ messages in thread
From: Elijah G @ 2024-04-05 22:53 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: luangruo, emacs-devel

On Thu, Apr 4, 2024 at 11:19 PM Eli Zaretskii <eliz@gnu.org> wrote:
>
> > From: Elijah G <eg642616@gmail.com>
> > Date: Thu, 4 Apr 2024 16:47:07 -0600
> > Cc: Po Lu <luangruo@yahoo.com>, emacs-devel@gnu.org
> >
> > On Thu, Apr 4, 2024 at 12:47 AM Eli Zaretskii <eliz@gnu.org> wrote:
> > >
> > > I'm guessing that using Direct2D will need a whole new font back-end,
> > > since we'd need a different implementation of the main drawing methods
> > > exported by the font driver.
> >
> > I guess so, Also it needs DirectDraw (dwrite.h) which sadly most
> > of their functions to draw are made in C++ AFAIS,
>
> Yes, it seems so.  It's the main reason we didn't try to use them in
> Emacs.

What a shame, I'll try to do a new back-end for Directdraw,
i can't promise it, but I hope I succeed.

> > i think I'll need to create a new header like w32direct2d.h
> > I wonder how to import another C header, do i need to modify
> > autoconf files or something like that?.
>
> No need to change autoconf files, just add the header and use it in
> the C sources.  Autoconf changes are needed only if some systems don't
> have a header file, but for header files that are part of Emacs, that
> cannot happen.

Thanks for the info.



^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2024-04-05 22:53 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <CACnP4N+4Z8O9TKYbEg5bttTyf0t_PQJ_sDW4GF8hcgcWMSfjwA@mail.gmail.com>
2024-04-03  5:52 ` How to link new libraries when building emacs Po Lu
2024-04-03 16:42   ` Elijah G
2024-04-04  0:28     ` Po Lu
2024-04-04  2:15       ` Elijah G
2024-04-04  3:15         ` Po Lu
2024-04-04  3:49           ` Elijah G
2024-04-04  4:25             ` Elijah G
2024-04-04  6:47           ` Eli Zaretskii
2024-04-04 22:47             ` Elijah G
2024-04-05  5:18               ` Eli Zaretskii
2024-04-05 22:53                 ` Elijah G

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).