cfltk icon indicating copy to clipboard operation
cfltk copied to clipboard

Including the library in a third-party project

Open AlexanderZhirov opened this issue 3 years ago • 19 comments

I would like to understand how to properly connect the library to a third-party project, using the example of FreeRDP. I'm trying to build a program with a self-written GUI based on the FLTK library. Since FreeRDP is written in C, I want to build together with CFLTK.

I created a small form, wrote for its assembly CMakeLists.txt , and corrected the file by including his code there:

...
#include "../xfreerdp.h"

#include "../gfree/gfree.h"

int main(int argc, char* argv[])
{
    gfree();
    int rc = 1;
...

And corrected the FreeRDP build file CMakeLists.txt:

...

set(GFREE gfree)
add_subdirectory(${GFREE})
set(GFREE_FLAGS
    gfree
    cfltk
    fltk
    fltk_images
    fltk_jpeg
    fltk_z
    png16
    m
    X11
    Xinerama
    Xfixes
    Xcursor
    Xft
    Xrender
    fontconfig
)
ADD_LIBRARY(cfltk STATIC IMPORTED)
set_target_properties(cfltk PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/gfree_lib/libcfltk.a)
ADD_LIBRARY(fltk STATIC IMPORTED)
set_target_properties(fltk PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/gfree_lib/libfltk.a)
ADD_LIBRARY(fltk_images STATIC IMPORTED)
set_target_properties(fltk_images PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/gfree_lib/libfltk_images.a)
ADD_LIBRARY(fltk_jpeg STATIC IMPORTED)
set_target_properties(fltk_jpeg PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/gfree_lib/libfltk_jpeg.a)
ADD_LIBRARY(fltk_z STATIC IMPORTED)
set_target_properties(fltk_z PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/gfree_lib/libfltk_z.a)

....

set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} freerdp-client freerdp m ${GFREE_FLAGS})
....

Actually, the FreeRDP project is assembled without errors. It starts.

изображение

But when I connect to any server, I get errors:

[21:01:24:425] [4624:4625] [ERROR][com.freerdp.core.nego] - Protocol Security Negotiation Failure
[21:01:24:426] [4624:4625] [ERROR][com.freerdp.core] - rdp_client_connect:freerdp_set_last_error_ex ERRCONNECT_SECURITY_NEGO_CONNECT_FAILED [0x0002000C]
[21:01:24:426] [4624:4625] [ERROR][com.freerdp.core.connection] - Error: protocol security negotiation or connection failure

Without integrating my code into the FreeRDP project, my connection is performed without errors. I suspect that this is due to my introduction of third-party code into the FreeRDP project.

I understand that, most likely, I am connecting my code to the FreeRDP project as incorrectly as possible. I have never done this, and therefore I face problems.

Is it possible to implement all this somehow, taking into account that third-party code does not affect the performance of the main FreeRDP code?

AlexanderZhirov avatar Jul 04 '22 08:07 AlexanderZhirov

I have found your issue in the FreeRDP repo and downloaded the source code. I'm not familiar with FreeRDP unfortunately. You can try moving the gui creation code to later (maybe before freerdp_client_stop(context);). Currently there doesn't seem to be any interaction between the gui and the client connection. Maybe it requires some form of command line argument input to connect? also clientEntryPoints seems to require initialization to the ClientNew function pointer, otherwise it remains null. This could be why the connection is failing.

MoAlyousef avatar Jul 04 '22 10:07 MoAlyousef

It's strange, I took the code out of the main function - other errors began to pour out:

xfreerdp.c

#include <winpr/crt.h>
#include <winpr/synch.h>
#include <winpr/thread.h>

#include <freerdp/freerdp.h>
#include <freerdp/client/cmdline.h>

#include "../xf_client.h"
#include "../xfreerdp.h"

#include "../gfree/gfree.h"

int connect(int argc, char* argv[]);

int main(int argc, char* argv[])
{
//    gfree();
    connect(argc, argv);
}

int connect(int argc, char* argv[])
{
    int rc = 1;
    int status;
    HANDLE thread;
    xfContext* xfc;
    DWORD dwExitCode;
    rdpContext* context;
    rdpSettings* settings;
    RDP_CLIENT_ENTRY_POINTS clientEntryPoints;

    ZeroMemory(&clientEntryPoints, sizeof(RDP_CLIENT_ENTRY_POINTS));
    clientEntryPoints.Size = sizeof(RDP_CLIENT_ENTRY_POINTS);
    clientEntryPoints.Version = RDP_CLIENT_INTERFACE_VERSION;

    RdpClientEntry(&clientEntryPoints);

    context = freerdp_client_context_new(&clientEntryPoints);
    if (!context)
        return 1;

    settings = context->settings;
    xfc = (xfContext*)context;

    status = freerdp_client_settings_parse_command_line(context->settings, argc, argv, FALSE);
    if (status)
    {
        rc = freerdp_client_settings_command_line_status_print(settings, status, argc, argv);

        if (settings->ListMonitors)
            xf_list_monitors(xfc);

        goto out;
    }

    if (freerdp_client_start(context) != 0)
        goto out;

    thread = freerdp_client_get_thread(context);

    WaitForSingleObject(thread, INFINITE);
    GetExitCodeThread(thread, &dwExitCode);
    rc = xf_exit_code_from_disconnect_reason(dwExitCode);

    freerdp_client_stop(context);

out:
    freerdp_client_context_free(context);

    return rc;
}
errors
[14:05:53:378] [58503:58510] [ERROR][com.freerdp.utils] - Caught signal 'Segmentation error' [11]
[14:05:53:379] [58503:58510] [ERROR][com.freerdp.utils] - 0: /home/alexander/programming/c/FreeRDP/_build/Debug/client/X11/xfreerdp(+0x29160a) [0x563129dd760a]

[14:05:53:379] [58503:58510] [ERROR][com.freerdp.utils] - 1: /home/alexander/programming/c/FreeRDP/_build/Debug/client/X11/xfreerdp(+0x29181c) [0x563129dd781c]

[14:05:53:379] [58503:58510] [ERROR][com.freerdp.utils] - 2: /home/alexander/programming/c/FreeRDP/_build/Debug/client/X11/xfreerdp(+0x2917ee) [0x563129dd77ee]

[14:05:53:379] [58503:58510] [ERROR][com.freerdp.utils] - 3: /home/alexander/programming/c/FreeRDP/_build/Debug/client/X11/xfreerdp(+0x92176) [0x563129bd8176]

[14:05:53:379] [58503:58510] [ERROR][com.freerdp.utils] - 4: /usr/lib/haswell/libc.so.6(+0x41850) [0x7f5d907eb850]

[14:05:53:379] [58503:58510] [ERROR][com.freerdp.utils] - 5: /usr/lib/haswell/libc.so.6(+0x18d69c) [0x7f5d9093769c]

[14:05:53:379] [58503:58510] [ERROR][com.freerdp.utils] - 6: /home/alexander/programming/c/FreeRDP/_build/Debug/client/X11/xfreerdp(+0x7cc99) [0x563129bc2c99]

[14:05:53:379] [58503:58510] [ERROR][com.freerdp.utils] - 7: /home/alexander/programming/c/FreeRDP/_build/Debug/client/X11/xfreerdp(freerdp_client_settings_parse_command_line_arguments+0xc3) [0x563129bc2fef]

[14:05:53:379] [58503:58510] [ERROR][com.freerdp.utils] - 8: /home/alexander/programming/c/FreeRDP/_build/Debug/client/X11/xfreerdp(freerdp_client_settings_parse_command_line+0x4d) [0x563129bbdd49]

[14:05:53:379] [58503:58510] [ERROR][com.freerdp.utils] - 9: /home/alexander/programming/c/FreeRDP/_build/Debug/client/X11/xfreerdp(+0x773e8) [0x563129bbd3e8]

[14:05:53:379] [58503:58510] [ERROR][com.freerdp.utils] - 10: /home/alexander/programming/c/FreeRDP/_build/Debug/client/X11/xfreerdp(+0x2b3419) [0x563129df9419]

[14:05:53:379] [58503:58510] [ERROR][com.freerdp.utils] - 11: /home/alexander/programming/c/FreeRDP/_build/Debug/client/X11/xfreerdp(+0xcf951) [0x563129c15951]

[14:05:53:379] [58503:58510] [ERROR][com.freerdp.utils] - 12: /home/alexander/programming/c/FreeRDP/_build/Debug/client/X11/xfreerdp(+0xd0698) [0x563129c16698]

[14:05:53:379] [58503:58510] [ERROR][com.freerdp.utils] - 13: /home/alexander/programming/c/FreeRDP/_build/Debug/client/X11/xfreerdp(+0xd7c42) [0x563129c1dc42]

[14:05:53:379] [58503:58510] [ERROR][com.freerdp.utils] - 14: /home/alexander/programming/c/FreeRDP/_build/Debug/client/X11/xfreerdp(+0x18ad4d) [0x563129cd0d4d]

[14:05:53:379] [58503:58510] [ERROR][com.freerdp.utils] - 15: /home/alexander/programming/c/FreeRDP/_build/Debug/client/X11/xfreerdp(+0x18ad75) [0x563129cd0d75]

[14:05:53:379] [58503:58510] [ERROR][com.freerdp.utils] - 16: /home/alexander/programming/c/FreeRDP/_build/Debug/client/X11/xfreerdp(+0x18b503) [0x563129cd1503]

[14:05:53:379] [58503:58510] [ERROR][com.freerdp.utils] - 17: /home/alexander/programming/c/FreeRDP/_build/Debug/client/X11/xfreerdp(+0x18c158) [0x563129cd2158]

[14:05:53:379] [58503:58510] [ERROR][com.freerdp.utils] - 18: /home/alexander/programming/c/FreeRDP/_build/Debug/client/X11/xfreerdp(+0x18a5ef) [0x563129cd05ef]

[14:05:53:379] [58503:58510] [ERROR][com.freerdp.utils] - 19: /home/alexander/programming/c/FreeRDP/_build/Debug/client/X11/xfreerdp(+0xc2854) [0x563129c08854]

AlexanderZhirov avatar Jul 04 '22 11:07 AlexanderZhirov

Most likely I just redefined the system function.

AlexanderZhirov avatar Jul 04 '22 11:07 AlexanderZhirov

Swapped function calls - and the errors are the same. Most likely, I somehow incorrectly connect static libraries and they in general somehow affect the executable file. I don't even have any other assumptions.

int main(int argc, char* argv[])
{
    connect_rdp(argc, argv);
    gfree();
}
[14:26:34:876] [59544:59550] [ERROR][com.freerdp.core.nego] - Protocol Security Negotiation Failure
[14:26:34:876] [59544:59550] [ERROR][com.freerdp.core] - rdp_client_connect:freerdp_set_last_error_ex ERRCONNECT_SECURITY_NEGO_CONNECT_FAILED [0x0002000C]
[14:26:34:876] [59544:59550] [ERROR][com.freerdp.core.connection] - Error: protocol security negotiation or connection failure

AlexanderZhirov avatar Jul 04 '22 11:07 AlexanderZhirov

I don’t think it’s an issue if static linking. I think it might be an issue in initializing clientEntryPoints function pointer table, specifically the ClientNew pointer. Unfortunately I can’t find documentation on how to create a new client for FreeRDP. But the sample code seems to require it: https://github.com/FreeRDP/FreeRDP/blob/master/client/Sample/tf_freerdp.c

MoAlyousef avatar Jul 04 '22 11:07 MoAlyousef

specifically the ClientNew pointer

Hmm, I have a pointer defined

изображение

AlexanderZhirov avatar Jul 04 '22 11:07 AlexanderZhirov

I'm not sure what might be the issue unfortunately. You can try linking with a shared build of libcfltk and see if that helps.

MoAlyousef avatar Jul 04 '22 13:07 MoAlyousef

In general, I followed the simplest path. Built a dynamic library. Next, added only one flag in CMakeLists.txt:

...
target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${${MODULE_PREFIX}_LIBS} cfltk)
...

And edited the xfreerdp.c file:

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include <winpr/crt.h>
#include <winpr/synch.h>
#include <winpr/thread.h>

#include <freerdp/freerdp.h>
#include <freerdp/client/cmdline.h>

#include "../xf_client.h"
#include "../xfreerdp.h"

#include <cfltk/cfl.h>
#include <cfltk/cfl_window.h>
#include <stdlib.h>

int cfltk()
{
    Fl_init_all();
    Fl_Window *w = Fl_Window_new(100, 100, 100, 100, NULL);
    Fl_Window_end(w);
    Fl_Window_show(w);
    return Fl_run();
}

int main(int argc, char *argv[])
{
    int rc = 1;
    int status;
    HANDLE thread;
    xfContext *xfc;
    DWORD dwExitCode;
    rdpContext *context;
    rdpSettings *settings;
    RDP_CLIENT_ENTRY_POINTS clientEntryPoints;

    ZeroMemory(&clientEntryPoints, sizeof(RDP_CLIENT_ENTRY_POINTS));
    clientEntryPoints.Size = sizeof(RDP_CLIENT_ENTRY_POINTS);
    clientEntryPoints.Version = RDP_CLIENT_INTERFACE_VERSION;

    RdpClientEntry(&clientEntryPoints);

    context = freerdp_client_context_new(&clientEntryPoints);
    if (!context)
        return 1;

    settings = context->settings;
    xfc = (xfContext*) context;

    status = freerdp_client_settings_parse_command_line(context->settings, argc, argv, FALSE);
    if (status)
    {
        rc = freerdp_client_settings_command_line_status_print(settings, status, argc, argv);

        if (settings->ListMonitors)
            xf_list_monitors(xfc);

        goto out;
    }

    if (freerdp_client_start(context) != 0)
        goto out;

    thread = freerdp_client_get_thread(context);

    WaitForSingleObject(thread, INFINITE);
    GetExitCodeThread(thread, &dwExitCode);
    rc = xf_exit_code_from_disconnect_reason(dwExitCode);

    freerdp_client_stop(context);

    out: freerdp_client_context_free(context);

    cfltk();

    return rc;
}

The result is as follows with /v:MyRemoteServerIP /d:MyDomain /u:MyUser -authentication /sec:tls:

изображение

AlexanderZhirov avatar Jul 04 '22 15:07 AlexanderZhirov

What about when you comment out cfltk() in main, but still link cfltk?

MoAlyousef avatar Jul 04 '22 16:07 MoAlyousef

What about when you comment out cfltk() in main, but still link cfltk?

Oh, by the way! Even when there is no code from cfltk, but the cfltk flag is used during compilation, the result is exactly the same. I.e. the FreeRDP project reacts negatively even to the library itself.

AlexanderZhirov avatar Jul 04 '22 16:07 AlexanderZhirov

It might be a binary compatibility issue between FLTK’s dependencies and FreeRDP’s dependencies.

MoAlyousef avatar Jul 04 '22 17:07 MoAlyousef

It might be a binary compatibility issue between FLTK’s dependencies and FreeRDP’s dependencies.

What do you mean?

AlexanderZhirov avatar Jul 04 '22 17:07 AlexanderZhirov

@MoAlyousef Maybe it's worth trying somehow on version FLTK 1.3.8? I'm trying to assemble it now, but it doesn't work out for me. I think need to fix the source code in cfltk.

build cfltk with fltk 1.3.8
...
[ 93%] Built target fluid
[ 93%] Building CXX object CMakeFiles/cfltk.dir/src/cfl_button.cpp.o
In file included from /home/alexander/repositories/git/cfltk/src/cfl_lock.cpp:2:
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:8:22: ошибка: нет декларации «NULL» в этой области видимости
    8 |     void *ev_data_ = NULL;
      |                      ^~~~
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:5:1: замечание: «NULL» is defined in header «<cstddef>»; did you forget to «#include <cstddef>»?
    4 | #include <FL/Fl_Widget.H>
  +++ |+#include <cstddef>
    5 | 
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:9:24: ошибка: нет декларации «NULL» в этой области видимости
    9 |     void *draw_data_ = NULL;
      |                        ^~~~
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:9:24: замечание: «NULL» is defined in header «<cstddef>»; did you forget to «#include <cstddef>»?
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:10:26: ошибка: нет декларации «NULL» в этой области видимости
   10 |     void *resize_data_ = NULL;
      |                          ^~~~
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:10:26: замечание: «NULL» is defined in header «<cstddef>»; did you forget to «#include <cstddef>»?
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:13:29: ошибка: нет декларации «NULL» в этой области видимости
   13 |     handler inner_handler = NULL;
      |                             ^~~~
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:13:29: замечание: «NULL» is defined in header «<cstddef>»; did you forget to «#include <cstddef>»?
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:15:27: ошибка: нет декларации «NULL» в этой области видимости
   15 |     drawer inner_drawer = NULL;
      |                           ^~~~
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:15:27: замечание: «NULL» is defined in header «<cstddef>»; did you forget to «#include <cstddef>»?
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:17:26: ошибка: нет декларации «NULL» в этой области видимости
   17 |     deleter_fp deleter = NULL;
      |                          ^~~~
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:17:26: замечание: «NULL» is defined in header «<cstddef>»; did you forget to «#include <cstddef>»?
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:19:30: ошибка: нет декларации «NULL» в этой области видимости
   19 |     resizer resize_handler = NULL;
      |                              ^~~~
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:19:30: замечание: «NULL» is defined in header «<cstddef>»; did you forget to «#include <cstddef>»?
In file included from /home/alexander/repositories/git/cfltk/src/cfl_lock.cpp:1:
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp: В функции-члене «virtual void Widget_Derived<T>::resize(int, int, int, int)»:
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:35:18: ошибка: «Fl» не был декларирован
   35 |             LOCK(Fl::handle(28, this->top_window()));
      |                  ^~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp: В деструкторе «Widget_Derived<T>::~Widget_Derived()»:
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:78:20: ошибка: нет декларации «NULL» в этой области видимости
   78 |         ev_data_ = NULL;
      |                    ^~~~
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:78:20: замечание: «NULL» is defined in header «<cstddef>»; did you forget to «#include <cstddef>»?
In file included from /home/alexander/repositories/git/cfltk/src/cfl_window.cpp:19:
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:8:22: ошибка: нет декларации «NULL» в этой области видимости
    8 |     void *ev_data_ = NULL;
      |                      ^~~~
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:5:1: замечание: «NULL» is defined in header «<cstddef>»; did you forget to «#include <cstddef>»?
    4 | #include <FL/Fl_Widget.H>
  +++ |+#include <cstddef>
    5 | 
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:9:24: ошибка: нет декларации «NULL» в этой области видимости
    9 |     void *draw_data_ = NULL;
      |                        ^~~~
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:9:24: замечание: «NULL» is defined in header «<cstddef>»; did you forget to «#include <cstddef>»?
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:10:26: ошибка: нет декларации «NULL» в этой области видимости
   10 |     void *resize_data_ = NULL;
      |                          ^~~~
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:10:26: замечание: «NULL» is defined in header «<cstddef>»; did you forget to «#include <cstddef>»?
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:13:29: ошибка: нет декларации «NULL» в этой области видимости
   13 |     handler inner_handler = NULL;
      |                             ^~~~
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:13:29: замечание: «NULL» is defined in header «<cstddef>»; did you forget to «#include <cstddef>»?
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:15:27: ошибка: нет декларации «NULL» в этой области видимости
   15 |     drawer inner_drawer = NULL;
      |                           ^~~~
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:15:27: замечание: «NULL» is defined in header «<cstddef>»; did you forget to «#include <cstddef>»?
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:17:26: ошибка: нет декларации «NULL» в этой области видимости
   17 |     deleter_fp deleter = NULL;
      |                          ^~~~
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:17:26: замечание: «NULL» is defined in header «<cstddef>»; did you forget to «#include <cstddef>»?
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:19:30: ошибка: нет декларации «NULL» в этой области видимости
   19 |     resizer resize_handler = NULL;
      |                              ^~~~
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:19:30: замечание: «NULL» is defined in header «<cstddef>»; did you forget to «#include <cstddef>»?
In file included from /home/alexander/repositories/git/cfltk/src/cfl_window.cpp:18:
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp: В функции-члене «virtual void Widget_Derived<T>::resize(int, int, int, int)»:
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:35:18: ошибка: «Fl» не был декларирован
   35 |             LOCK(Fl::handle(28, this->top_window()));
      |                  ^~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp: В деструкторе «Widget_Derived<T>::~Widget_Derived()»:
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:78:20: ошибка: нет декларации «NULL» в этой области видимости
   78 |         ev_data_ = NULL;
      |                    ^~~~
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:78:20: замечание: «NULL» is defined in header «<cstddef>»; did you forget to «#include <cstddef>»?
gmake[2]: *** [CMakeFiles/cfltk.dir/build.make:90: CMakeFiles/cfltk.dir/src/cfl_lock.cpp.o] Ошибка 1
gmake[2]: *** Ожидание завершения заданий…
In file included from /home/alexander/repositories/git/cfltk/src/cfl_button.cpp:3:
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:8:22: ошибка: нет декларации «NULL» в этой области видимости
    8 |     void *ev_data_ = NULL;
      |                      ^~~~
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:5:1: замечание: «NULL» is defined in header «<cstddef>»; did you forget to «#include <cstddef>»?
    4 | #include <FL/Fl_Widget.H>
  +++ |+#include <cstddef>
    5 | 
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:9:24: ошибка: нет декларации «NULL» в этой области видимости
    9 |     void *draw_data_ = NULL;
      |                        ^~~~
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:9:24: замечание: «NULL» is defined in header «<cstddef>»; did you forget to «#include <cstddef>»?
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:10:26: ошибка: нет декларации «NULL» в этой области видимости
   10 |     void *resize_data_ = NULL;
      |                          ^~~~
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:10:26: замечание: «NULL» is defined in header «<cstddef>»; did you forget to «#include <cstddef>»?
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:13:29: ошибка: нет декларации «NULL» в этой области видимости
   13 |     handler inner_handler = NULL;
      |                             ^~~~
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:13:29: замечание: «NULL» is defined in header «<cstddef>»; did you forget to «#include <cstddef>»?
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:15:27: ошибка: нет декларации «NULL» в этой области видимости
   15 |     drawer inner_drawer = NULL;
      |                           ^~~~
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:15:27: замечание: «NULL» is defined in header «<cstddef>»; did you forget to «#include <cstddef>»?
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:17:26: ошибка: нет декларации «NULL» в этой области видимости
   17 |     deleter_fp deleter = NULL;
      |                          ^~~~
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:17:26: замечание: «NULL» is defined in header «<cstddef>»; did you forget to «#include <cstddef>»?
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:19:30: ошибка: нет декларации «NULL» в этой области видимости
   19 |     resizer resize_handler = NULL;
      |                              ^~~~
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:19:30: замечание: «NULL» is defined in header «<cstddef>»; did you forget to «#include <cstddef>»?
In file included from /home/alexander/repositories/git/cfltk/src/cfl_button.cpp:2:
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp: В функции-члене «virtual void Widget_Derived<T>::resize(int, int, int, int)»:
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:35:18: ошибка: «Fl» не был декларирован
   35 |             LOCK(Fl::handle(28, this->top_window()));
      |                  ^~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp: В деструкторе «Widget_Derived<T>::~Widget_Derived()»:
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:78:20: ошибка: нет декларации «NULL» в этой области видимости
   78 |         ev_data_ = NULL;
      |                    ^~~~
/home/alexander/repositories/git/cfltk/include/cfl_widget.hpp:78:20: замечание: «NULL» is defined in header «<cstddef>»; did you forget to «#include <cstddef>»?
/home/alexander/repositories/git/cfltk/src/cfl.cpp: В функции «int Fl_menu_linespacing()»:
/home/alexander/repositories/git/cfltk/src/cfl.cpp:70:16: ошибка: «menu_linespacing» не является элементом «Fl»
   70 |     return Fl::menu_linespacing();
      |                ^~~~~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl.cpp: В функции «void Fl_set_menu_linespacing(int)»:
/home/alexander/repositories/git/cfltk/src/cfl.cpp:74:9: ошибка: «menu_linespacing» не является элементом «Fl»
   74 |     Fl::menu_linespacing(H);
      |         ^~~~~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl.cpp: В функции «int Fl_box_shadow_width()»:
/home/alexander/repositories/git/cfltk/src/cfl.cpp:253:16: ошибка: «box_shadow_width» не является элементом «Fl»
  253 |     return Fl::box_shadow_width();
      |                ^~~~~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl.cpp: В функции «void Fl_set_box_shadow_width(int)»:
/home/alexander/repositories/git/cfltk/src/cfl.cpp:257:9: ошибка: «box_shadow_width» не является элементом «Fl»
  257 |     Fl::box_shadow_width(W);
      |         ^~~~~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl.cpp: В функции «int Fl_box_border_radius_max()»:
/home/alexander/repositories/git/cfltk/src/cfl.cpp:261:16: ошибка: «box_border_radius_max» не является элементом «Fl»
  261 |     return Fl::box_border_radius_max();
      |                ^~~~~~~~~~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl.cpp: В функции «void Fl_set_box_border_radius_max(int)»:
/home/alexander/repositories/git/cfltk/src/cfl.cpp:265:9: ошибка: «box_border_radius_max» не является элементом «Fl»
  265 |     Fl::box_border_radius_max(R);
      |         ^~~~~~~~~~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl.cpp: В функции «void Fl_set_color_with_alpha(unsigned int, unsigned char, unsigned char, unsigned char, unsigned char)»:
/home/alexander/repositories/git/cfltk/src/cfl.cpp:277:18: ошибка: no matching function for call to «Fl::set_color(unsigned int&, unsigned char&, unsigned char&, unsigned char&, unsigned char&)»
  277 |     Fl::set_color(c, r, g, b, a);
      |     ~~~~~~~~~~~~~^~~~~~~~~~~~~~~
In file included from /home/alexander/repositories/git/cfltk/src/cfl.cpp:1:
/home/alexander/repositories/git/cfltk/fltk/FL/Fl.H:1032:17: замечание: candidate: «static void Fl::set_color(Fl_Color, uchar, uchar, uchar)»
 1032 |   static void   set_color(Fl_Color, uchar, uchar, uchar);
      |                 ^~~~~~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl.H:1032:17: замечание:   кандидат ожидает 4 аргумента, 5 предоставлено
/home/alexander/repositories/git/cfltk/fltk/FL/Fl.H:1037:17: замечание: candidate: «static void Fl::set_color(Fl_Color, unsigned int)»
 1037 |   static void   set_color(Fl_Color i, unsigned c); // platform dependent
      |                 ^~~~~~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl.H:1037:17: замечание:   кандидат ожидает 2 аргумента, 5 предоставлено
/home/alexander/repositories/git/cfltk/src/cfl.cpp: В функции «int Fl_should_program_quit()»:
/home/alexander/repositories/git/cfltk/src/cfl.cpp:399:16: ошибка: «program_should_quit» не является элементом «Fl»
  399 |     return Fl::program_should_quit();
      |                ^~~~~~~~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl.cpp: В функции «void Fl_program_should_quit(int)»:
/home/alexander/repositories/git/cfltk/src/cfl.cpp:403:9: ошибка: «program_should_quit» не является элементом «Fl»
  403 |     Fl::program_should_quit(flag);
      |         ^~~~~~~~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl.cpp: В функции «void Fl_init_all()»:
/home/alexander/repositories/git/cfltk/src/cfl.cpp:445:5: ошибка: «fl_define_FL_MULTI_LABEL» was not declared in this scope; did you mean «fl_define_FL_SHADOW_LABEL»?
  445 |     fl_define_FL_MULTI_LABEL();
      |     ^~~~~~~~~~~~~~~~~~~~~~~~
      |     fl_define_FL_SHADOW_LABEL
/home/alexander/repositories/git/cfltk/src/cfl.cpp:446:5: ошибка: «fl_define_FL_ICON_LABEL» was not declared in this scope; did you mean «fl_define_FL_SHADOW_LABEL»?
  446 |     fl_define_FL_ICON_LABEL();
      |     ^~~~~~~~~~~~~~~~~~~~~~~
      |     fl_define_FL_SHADOW_LABEL
/home/alexander/repositories/git/cfltk/src/cfl.cpp:447:5: ошибка: «fl_define_FL_IMAGE_LABEL» was not declared in this scope; did you mean «fl_define_FL_SHADOW_LABEL»?
  447 |     fl_define_FL_IMAGE_LABEL();
      |     ^~~~~~~~~~~~~~~~~~~~~~~~
      |     fl_define_FL_SHADOW_LABEL
/home/alexander/repositories/git/cfltk/src/cfl.cpp: В функции «void Fl_set_screen_scale(int, float)»:
/home/alexander/repositories/git/cfltk/src/cfl.cpp:563:9: ошибка: «screen_scale» не является элементом «Fl»
  563 |     Fl::screen_scale(n, val);
      |         ^~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl.cpp: В функции «float Fl_screen_scale(int)»:
/home/alexander/repositories/git/cfltk/src/cfl.cpp:567:16: ошибка: «screen_scale» не является элементом «Fl»
  567 |     return Fl::screen_scale(n);
      |                ^~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl.cpp: В функции «int Fl_screen_scaling_supported()»:
/home/alexander/repositories/git/cfltk/src/cfl.cpp:571:16: ошибка: «screen_scaling_supported» не является элементом «Fl»
  571 |     return Fl::screen_scaling_supported();
      |                ^~~~~~~~~~~~~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl.cpp: В функции «void Fl_keyboard_screen_scaling(int)»:
/home/alexander/repositories/git/cfltk/src/cfl.cpp:619:9: ошибка: «keyboard_screen_scaling» не является элементом «Fl»
  619 |     Fl::keyboard_screen_scaling(value);
      |         ^~~~~~~~~~~~~~~~~~~~~~~
gmake[2]: *** [CMakeFiles/cfltk.dir/build.make:104: CMakeFiles/cfltk.dir/src/cfl.cpp.o] Ошибка 1
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «int Fl_Window_decorated_w(const Fl_Window*)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:157:42: ошибка: передача «const Fl_Window» как аргумент «this» отбрасывает квалификаторы [-fpermissive]
  157 |         LOCK(auto ret = self->decorated_w());                                                      \
      |                         ~~~~~~~~~~~~~~~~~^~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:253:1: замечание: в расширении макроса «WINDOW_DEFINE»
  253 | WINDOW_DEFINE(Fl_Window)
      | ^~~~~~~~~~~~~
In file included from /home/alexander/repositories/git/cfltk/fltk/FL/Fl_Double_Window.H:25,
                 from /home/alexander/repositories/git/cfltk/src/cfl_window.cpp:23:
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:638:7: замечание:   в вызове «int Fl_Window::decorated_w()»
  638 |   int decorated_w();
      |       ^~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «int Fl_Window_decorated_h(const Fl_Window*)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:161:42: ошибка: передача «const Fl_Window» как аргумент «this» отбрасывает квалификаторы [-fpermissive]
  161 |         LOCK(auto ret = self->decorated_h());                                                      \
      |                         ~~~~~~~~~~~~~~~~~^~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:253:1: замечание: в расширении макроса «WINDOW_DEFINE»
  253 | WINDOW_DEFINE(Fl_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:644:7: замечание:   в вызове «int Fl_Window::decorated_h()»
  644 |   int decorated_h();
      |       ^~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «void Fl_Window_set_shape(Fl_Window*, const void*)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:171:36: ошибка: no matching function for call to «Fl_Window::shape()»
  171 |         LOCK(auto old = self->shape(); if (!image) self->shape(NULL);                              \
      |                         ~~~~~~~~~~~^~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:253:1: замечание: в расширении макроса «WINDOW_DEFINE»
  253 | WINDOW_DEFINE(Fl_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:145:8: замечание: candidate: «void Fl_Window::shape(const Fl_Image*)»
  145 |   void shape(const Fl_Image* img);
      |        ^~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:145:8: замечание:   кандидат ожидает 1 аргумент, 0 предоставлено
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:149:15: замечание: candidate: «void Fl_Window::shape(const Fl_Image&)»
  149 |   inline void shape(const Fl_Image& b) { shape(&b); }
      |               ^~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:149:15: замечание:   кандидат ожидает 1 аргумент, 0 предоставлено
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:172:68: ошибка: аргумент типа «<ошибка типа>» задан для «delete»; должен быть указатель
  172 |              else self->shape(((Fl_Image *)image)->copy()); delete old;)                           \
      |                                                                    ^~~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:253:1: замечание: в расширении макроса «WINDOW_DEFINE»
  253 | WINDOW_DEFINE(Fl_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «const void* Fl_Window_shape(Fl_Window*)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:175:37: ошибка: no matching function for call to «Fl_Window::shape()»
  175 |         LOCK(auto temp = self->shape());                                                           \
      |                          ~~~~~~~~~~~^~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:253:1: замечание: в расширении макроса «WINDOW_DEFINE»
  253 | WINDOW_DEFINE(Fl_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:145:8: замечание: candidate: «void Fl_Window::shape(const Fl_Image*)»
  145 |   void shape(const Fl_Image* img);
      |        ^~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:145:8: замечание:   кандидат ожидает 1 аргумент, 0 предоставлено
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:149:15: замечание: candidate: «void Fl_Window::shape(const Fl_Image&)»
  149 |   inline void shape(const Fl_Image& b) { shape(&b); }
      |               ^~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:149:15: замечание:   кандидат ожидает 1 аргумент, 0 предоставлено
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «int Fl_Window_screen_num(Fl_Window*)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:196:31: ошибка: «Fl_Window» {aka «class Fl_Window»} не содержит элемента с именем «screen_num»
  196 |         LOCK(auto ret = self->screen_num());                                                       \
      |                               ^~~~~~~~~~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:253:1: замечание: в расширении макроса «WINDOW_DEFINE»
  253 | WINDOW_DEFINE(Fl_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «void Fl_Window_set_screen_num(Fl_Window*, int)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:200:20: ошибка: «Fl_Window» {aka «class Fl_Window»} не содержит элемента с именем «screen_num»
  200 |         LOCK(self->screen_num(screen_num));                                                        \
      |                    ^~~~~~~~~~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:253:1: замечание: в расширении макроса «WINDOW_DEFINE»
  253 | WINDOW_DEFINE(Fl_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «int Fl_Single_Window_decorated_w(const Fl_Single_Window*)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:157:42: ошибка: передача «const Fl_Single_Window» как аргумент «this» отбрасывает квалификаторы [-fpermissive]
  157 |         LOCK(auto ret = self->decorated_w());                                                      \
      |                         ~~~~~~~~~~~~~~~~~^~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:313:1: замечание: в расширении макроса «WINDOW_DEFINE»
  313 | WINDOW_DEFINE(Fl_Single_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:638:7: замечание:   в вызове «int Fl_Window::decorated_w()»
  638 |   int decorated_w();
      |       ^~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «int Fl_Single_Window_decorated_h(const Fl_Single_Window*)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:161:42: ошибка: передача «const Fl_Single_Window» как аргумент «this» отбрасывает квалификаторы [-fpermissive]
  161 |         LOCK(auto ret = self->decorated_h());                                                      \
      |                         ~~~~~~~~~~~~~~~~~^~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:313:1: замечание: в расширении макроса «WINDOW_DEFINE»
  313 | WINDOW_DEFINE(Fl_Single_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:644:7: замечание:   в вызове «int Fl_Window::decorated_h()»
  644 |   int decorated_h();
      |       ^~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «void Fl_Single_Window_set_shape(Fl_Single_Window*, const void*)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:171:36: ошибка: no matching function for call to «Fl_Single_Window::shape()»
  171 |         LOCK(auto old = self->shape(); if (!image) self->shape(NULL);                              \
      |                         ~~~~~~~~~~~^~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:313:1: замечание: в расширении макроса «WINDOW_DEFINE»
  313 | WINDOW_DEFINE(Fl_Single_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:145:8: замечание: candidate: «void Fl_Window::shape(const Fl_Image*)»
  145 |   void shape(const Fl_Image* img);
      |        ^~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:145:8: замечание:   кандидат ожидает 1 аргумент, 0 предоставлено
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:149:15: замечание: candidate: «void Fl_Window::shape(const Fl_Image&)»
  149 |   inline void shape(const Fl_Image& b) { shape(&b); }
      |               ^~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:149:15: замечание:   кандидат ожидает 1 аргумент, 0 предоставлено
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:172:68: ошибка: аргумент типа «<ошибка типа>» задан для «delete»; должен быть указатель
  172 |              else self->shape(((Fl_Image *)image)->copy()); delete old;)                           \
      |                                                                    ^~~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:313:1: замечание: в расширении макроса «WINDOW_DEFINE»
  313 | WINDOW_DEFINE(Fl_Single_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «const void* Fl_Single_Window_shape(Fl_Single_Window*)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:175:37: ошибка: no matching function for call to «Fl_Single_Window::shape()»
  175 |         LOCK(auto temp = self->shape());                                                           \
      |                          ~~~~~~~~~~~^~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:313:1: замечание: в расширении макроса «WINDOW_DEFINE»
  313 | WINDOW_DEFINE(Fl_Single_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:145:8: замечание: candidate: «void Fl_Window::shape(const Fl_Image*)»
  145 |   void shape(const Fl_Image* img);
      |        ^~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:145:8: замечание:   кандидат ожидает 1 аргумент, 0 предоставлено
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:149:15: замечание: candidate: «void Fl_Window::shape(const Fl_Image&)»
  149 |   inline void shape(const Fl_Image& b) { shape(&b); }
      |               ^~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:149:15: замечание:   кандидат ожидает 1 аргумент, 0 предоставлено
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «int Fl_Single_Window_screen_num(Fl_Single_Window*)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:196:31: ошибка: «Fl_Single_Window» {aka «class Fl_Single_Window»} не содержит элемента с именем «screen_num»
  196 |         LOCK(auto ret = self->screen_num());                                                       \
      |                               ^~~~~~~~~~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:313:1: замечание: в расширении макроса «WINDOW_DEFINE»
  313 | WINDOW_DEFINE(Fl_Single_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «void Fl_Single_Window_set_screen_num(Fl_Single_Window*, int)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:200:20: ошибка: «Fl_Single_Window» {aka «class Fl_Single_Window»} не содержит элемента с именем «screen_num»
  200 |         LOCK(self->screen_num(screen_num));                                                        \
      |                    ^~~~~~~~~~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:313:1: замечание: в расширении макроса «WINDOW_DEFINE»
  313 | WINDOW_DEFINE(Fl_Single_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «int Fl_Double_Window_decorated_w(const Fl_Double_Window*)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:157:42: ошибка: передача «const Fl_Double_Window» как аргумент «this» отбрасывает квалификаторы [-fpermissive]
  157 |         LOCK(auto ret = self->decorated_w());                                                      \
      |                         ~~~~~~~~~~~~~~~~~^~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:325:1: замечание: в расширении макроса «WINDOW_DEFINE»
  325 | WINDOW_DEFINE(Fl_Double_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:638:7: замечание:   в вызове «int Fl_Window::decorated_w()»
  638 |   int decorated_w();
      |       ^~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «int Fl_Double_Window_decorated_h(const Fl_Double_Window*)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:161:42: ошибка: передача «const Fl_Double_Window» как аргумент «this» отбрасывает квалификаторы [-fpermissive]
  161 |         LOCK(auto ret = self->decorated_h());                                                      \
      |                         ~~~~~~~~~~~~~~~~~^~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:325:1: замечание: в расширении макроса «WINDOW_DEFINE»
  325 | WINDOW_DEFINE(Fl_Double_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:644:7: замечание:   в вызове «int Fl_Window::decorated_h()»
  644 |   int decorated_h();
      |       ^~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «void Fl_Double_Window_set_shape(Fl_Double_Window*, const void*)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:171:36: ошибка: no matching function for call to «Fl_Double_Window::shape()»
  171 |         LOCK(auto old = self->shape(); if (!image) self->shape(NULL);                              \
      |                         ~~~~~~~~~~~^~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:325:1: замечание: в расширении макроса «WINDOW_DEFINE»
  325 | WINDOW_DEFINE(Fl_Double_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:145:8: замечание: candidate: «void Fl_Window::shape(const Fl_Image*)»
  145 |   void shape(const Fl_Image* img);
      |        ^~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:145:8: замечание:   кандидат ожидает 1 аргумент, 0 предоставлено
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:149:15: замечание: candidate: «void Fl_Window::shape(const Fl_Image&)»
  149 |   inline void shape(const Fl_Image& b) { shape(&b); }
      |               ^~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:149:15: замечание:   кандидат ожидает 1 аргумент, 0 предоставлено
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:172:68: ошибка: аргумент типа «<ошибка типа>» задан для «delete»; должен быть указатель
  172 |              else self->shape(((Fl_Image *)image)->copy()); delete old;)                           \
      |                                                                    ^~~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:325:1: замечание: в расширении макроса «WINDOW_DEFINE»
  325 | WINDOW_DEFINE(Fl_Double_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «const void* Fl_Double_Window_shape(Fl_Double_Window*)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:175:37: ошибка: no matching function for call to «Fl_Double_Window::shape()»
  175 |         LOCK(auto temp = self->shape());                                                           \
      |                          ~~~~~~~~~~~^~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:325:1: замечание: в расширении макроса «WINDOW_DEFINE»
  325 | WINDOW_DEFINE(Fl_Double_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:145:8: замечание: candidate: «void Fl_Window::shape(const Fl_Image*)»
  145 |   void shape(const Fl_Image* img);
      |        ^~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:145:8: замечание:   кандидат ожидает 1 аргумент, 0 предоставлено
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:149:15: замечание: candidate: «void Fl_Window::shape(const Fl_Image&)»
  149 |   inline void shape(const Fl_Image& b) { shape(&b); }
      |               ^~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:149:15: замечание:   кандидат ожидает 1 аргумент, 0 предоставлено
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «int Fl_Double_Window_screen_num(Fl_Double_Window*)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:196:31: ошибка: «Fl_Double_Window» {aka «class Fl_Double_Window»} не содержит элемента с именем «screen_num»
  196 |         LOCK(auto ret = self->screen_num());                                                       \
      |                               ^~~~~~~~~~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:325:1: замечание: в расширении макроса «WINDOW_DEFINE»
  325 | WINDOW_DEFINE(Fl_Double_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «void Fl_Double_Window_set_screen_num(Fl_Double_Window*, int)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:200:20: ошибка: «Fl_Double_Window» {aka «class Fl_Double_Window»} не содержит элемента с именем «screen_num»
  200 |         LOCK(self->screen_num(screen_num));                                                        \
      |                    ^~~~~~~~~~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:325:1: замечание: в расширении макроса «WINDOW_DEFINE»
  325 | WINDOW_DEFINE(Fl_Double_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «int Fl_Menu_Window_decorated_w(const Fl_Menu_Window*)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:157:42: ошибка: передача «const Fl_Menu_Window» как аргумент «this» отбрасывает квалификаторы [-fpermissive]
  157 |         LOCK(auto ret = self->decorated_w());                                                      \
      |                         ~~~~~~~~~~~~~~~~~^~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:333:1: замечание: в расширении макроса «WINDOW_DEFINE»
  333 | WINDOW_DEFINE(Fl_Menu_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:638:7: замечание:   в вызове «int Fl_Window::decorated_w()»
  638 |   int decorated_w();
      |       ^~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «int Fl_Menu_Window_decorated_h(const Fl_Menu_Window*)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:161:42: ошибка: передача «const Fl_Menu_Window» как аргумент «this» отбрасывает квалификаторы [-fpermissive]
  161 |         LOCK(auto ret = self->decorated_h());                                                      \
      |                         ~~~~~~~~~~~~~~~~~^~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:333:1: замечание: в расширении макроса «WINDOW_DEFINE»
  333 | WINDOW_DEFINE(Fl_Menu_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:644:7: замечание:   в вызове «int Fl_Window::decorated_h()»
  644 |   int decorated_h();
      |       ^~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «void Fl_Menu_Window_set_shape(Fl_Menu_Window*, const void*)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:171:36: ошибка: no matching function for call to «Fl_Menu_Window::shape()»
  171 |         LOCK(auto old = self->shape(); if (!image) self->shape(NULL);                              \
      |                         ~~~~~~~~~~~^~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:333:1: замечание: в расширении макроса «WINDOW_DEFINE»
  333 | WINDOW_DEFINE(Fl_Menu_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:145:8: замечание: candidate: «void Fl_Window::shape(const Fl_Image*)»
  145 |   void shape(const Fl_Image* img);
      |        ^~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:145:8: замечание:   кандидат ожидает 1 аргумент, 0 предоставлено
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:149:15: замечание: candidate: «void Fl_Window::shape(const Fl_Image&)»
  149 |   inline void shape(const Fl_Image& b) { shape(&b); }
      |               ^~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:149:15: замечание:   кандидат ожидает 1 аргумент, 0 предоставлено
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:172:68: ошибка: аргумент типа «<ошибка типа>» задан для «delete»; должен быть указатель
  172 |              else self->shape(((Fl_Image *)image)->copy()); delete old;)                           \
      |                                                                    ^~~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:333:1: замечание: в расширении макроса «WINDOW_DEFINE»
  333 | WINDOW_DEFINE(Fl_Menu_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «const void* Fl_Menu_Window_shape(Fl_Menu_Window*)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:175:37: ошибка: no matching function for call to «Fl_Menu_Window::shape()»
  175 |         LOCK(auto temp = self->shape());                                                           \
      |                          ~~~~~~~~~~~^~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:333:1: замечание: в расширении макроса «WINDOW_DEFINE»
  333 | WINDOW_DEFINE(Fl_Menu_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:145:8: замечание: candidate: «void Fl_Window::shape(const Fl_Image*)»
  145 |   void shape(const Fl_Image* img);
      |        ^~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:145:8: замечание:   кандидат ожидает 1 аргумент, 0 предоставлено
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:149:15: замечание: candidate: «void Fl_Window::shape(const Fl_Image&)»
  149 |   inline void shape(const Fl_Image& b) { shape(&b); }
      |               ^~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:149:15: замечание:   кандидат ожидает 1 аргумент, 0 предоставлено
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «int Fl_Menu_Window_screen_num(Fl_Menu_Window*)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:196:31: ошибка: «Fl_Menu_Window» {aka «class Fl_Menu_Window»} не содержит элемента с именем «screen_num»
  196 |         LOCK(auto ret = self->screen_num());                                                       \
      |                               ^~~~~~~~~~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:333:1: замечание: в расширении макроса «WINDOW_DEFINE»
  333 | WINDOW_DEFINE(Fl_Menu_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «void Fl_Menu_Window_set_screen_num(Fl_Menu_Window*, int)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:200:20: ошибка: «Fl_Menu_Window» {aka «class Fl_Menu_Window»} не содержит элемента с именем «screen_num»
  200 |         LOCK(self->screen_num(screen_num));                                                        \
      |                    ^~~~~~~~~~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:333:1: замечание: в расширении макроса «WINDOW_DEFINE»
  333 | WINDOW_DEFINE(Fl_Menu_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «int Fl_Overlay_Window_decorated_w(const Fl_Overlay_Window*)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:157:42: ошибка: передача «const Fl_Overlay_Window» как аргумент «this» отбрасывает квалификаторы [-fpermissive]
  157 |         LOCK(auto ret = self->decorated_w());                                                      \
      |                         ~~~~~~~~~~~~~~~~~^~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:390:1: замечание: в расширении макроса «WINDOW_DEFINE»
  390 | WINDOW_DEFINE(Fl_Overlay_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:638:7: замечание:   в вызове «int Fl_Window::decorated_w()»
  638 |   int decorated_w();
      |       ^~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «int Fl_Overlay_Window_decorated_h(const Fl_Overlay_Window*)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:161:42: ошибка: передача «const Fl_Overlay_Window» как аргумент «this» отбрасывает квалификаторы [-fpermissive]
  161 |         LOCK(auto ret = self->decorated_h());                                                      \
      |                         ~~~~~~~~~~~~~~~~~^~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:390:1: замечание: в расширении макроса «WINDOW_DEFINE»
  390 | WINDOW_DEFINE(Fl_Overlay_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:644:7: замечание:   в вызове «int Fl_Window::decorated_h()»
  644 |   int decorated_h();
      |       ^~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «void Fl_Overlay_Window_set_shape(Fl_Overlay_Window*, const void*)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:171:36: ошибка: no matching function for call to «Fl_Overlay_Window::shape()»
  171 |         LOCK(auto old = self->shape(); if (!image) self->shape(NULL);                              \
      |                         ~~~~~~~~~~~^~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:390:1: замечание: в расширении макроса «WINDOW_DEFINE»
  390 | WINDOW_DEFINE(Fl_Overlay_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:145:8: замечание: candidate: «void Fl_Window::shape(const Fl_Image*)»
  145 |   void shape(const Fl_Image* img);
      |        ^~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:145:8: замечание:   кандидат ожидает 1 аргумент, 0 предоставлено
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:149:15: замечание: candidate: «void Fl_Window::shape(const Fl_Image&)»
  149 |   inline void shape(const Fl_Image& b) { shape(&b); }
      |               ^~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:149:15: замечание:   кандидат ожидает 1 аргумент, 0 предоставлено
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:172:68: ошибка: аргумент типа «<ошибка типа>» задан для «delete»; должен быть указатель
  172 |              else self->shape(((Fl_Image *)image)->copy()); delete old;)                           \
      |                                                                    ^~~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:390:1: замечание: в расширении макроса «WINDOW_DEFINE»
  390 | WINDOW_DEFINE(Fl_Overlay_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «const void* Fl_Overlay_Window_shape(Fl_Overlay_Window*)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:175:37: ошибка: no matching function for call to «Fl_Overlay_Window::shape()»
  175 |         LOCK(auto temp = self->shape());                                                           \
      |                          ~~~~~~~~~~~^~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:390:1: замечание: в расширении макроса «WINDOW_DEFINE»
  390 | WINDOW_DEFINE(Fl_Overlay_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:145:8: замечание: candidate: «void Fl_Window::shape(const Fl_Image*)»
  145 |   void shape(const Fl_Image* img);
      |        ^~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:145:8: замечание:   кандидат ожидает 1 аргумент, 0 предоставлено
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:149:15: замечание: candidate: «void Fl_Window::shape(const Fl_Image&)»
  149 |   inline void shape(const Fl_Image& b) { shape(&b); }
      |               ^~~~~
/home/alexander/repositories/git/cfltk/fltk/FL/Fl_Window.H:149:15: замечание:   кандидат ожидает 1 аргумент, 0 предоставлено
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «int Fl_Overlay_Window_screen_num(Fl_Overlay_Window*)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:196:31: ошибка: «Fl_Overlay_Window» {aka «class Fl_Overlay_Window»} не содержит элемента с именем «screen_num»
  196 |         LOCK(auto ret = self->screen_num());                                                       \
      |                               ^~~~~~~~~~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:390:1: замечание: в расширении макроса «WINDOW_DEFINE»
  390 | WINDOW_DEFINE(Fl_Overlay_Window)
      | ^~~~~~~~~~~~~
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp: В функции «void Fl_Overlay_Window_set_screen_num(Fl_Overlay_Window*, int)»:
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:200:20: ошибка: «Fl_Overlay_Window» {aka «class Fl_Overlay_Window»} не содержит элемента с именем «screen_num»
  200 |         LOCK(self->screen_num(screen_num));                                                        \
      |                    ^~~~~~~~~~
/home/alexander/repositories/git/cfltk/include/cfl_lock.h:14:5: замечание: в определении макроса «LOCK»
   14 |     x;                                                                                             \
      |     ^
/home/alexander/repositories/git/cfltk/src/cfl_window.cpp:390:1: замечание: в расширении макроса «WINDOW_DEFINE»
  390 | WINDOW_DEFINE(Fl_Overlay_Window)
      | ^~~~~~~~~~~~~
gmake[2]: *** [CMakeFiles/cfltk.dir/build.make:132: CMakeFiles/cfltk.dir/src/cfl_button.cpp.o] Ошибка 1
gmake[2]: *** [CMakeFiles/cfltk.dir/build.make:118: CMakeFiles/cfltk.dir/src/cfl_window.cpp.o] Ошибка 1
gmake[1]: *** [CMakeFiles/Makefile2:196: CMakeFiles/cfltk.dir/all] Ошибка 2
gmake: *** [Makefile:136: all] Ошибка 2

AlexanderZhirov avatar Jul 04 '22 17:07 AlexanderZhirov

You might prefer to try FLTK 1.3.8 directly instead of cfltk. You only need to change the file extension to cpp, and remove cfltk from CMake. The rest should be the same.

MoAlyousef avatar Jul 04 '22 18:07 MoAlyousef

You might prefer to try FLTK 1.3.8 directly instead of cfltk. You only need to change the file extension to cpp, and remove cfltk from CMake. The rest should be the same.

It is unlikely to work, since FreeRDP is written in C

AlexanderZhirov avatar Jul 04 '22 18:07 AlexanderZhirov

CMake should be able to easily handle a mixed C/C++ codebase. Supporting FLTK 1.3.x from cfltk would require much work, removing a lot of the wrapper and everything related to SVG images.

MoAlyousef avatar Jul 04 '22 21:07 MoAlyousef

Most likely it will not work, dependencies in the code began to pop up:

...
[ 99%] Building C object client/X11/CMakeFiles/xfreerdp-client.dir/xf_graphics.c.o
[ 99%] Building C object client/X11/CMakeFiles/xfreerdp-client.dir/xf_keyboard.c.o
[ 99%] Building C object client/X11/CMakeFiles/xfreerdp-client.dir/xf_video.c.o
[100%] Building C object client/X11/CMakeFiles/xfreerdp-client.dir/xf_window.c.o
[100%] Building C object client/X11/CMakeFiles/xfreerdp-client.dir/xf_client.c.o
[100%] Building CXX object client/X11/CMakeFiles/xfreerdp-client.dir/cli/xfreerdp.cpp.o
In file included from /home/alexander/programming/c/FreeRDP/client/X11/cli/xfreerdp.cpp:33:
/home/alexander/programming/c/FreeRDP/client/X11/cli/../xfreerdp.h:268:20: ошибка: declaration of «button_map xf_context::button_map [11]» changes meaning of «button_map» [-fpermissive]
  268 |         button_map button_map[NUM_BUTTONS_MAPPED];
      |                    ^~~~~~~~~~
/home/alexander/programming/c/FreeRDP/client/X11/cli/../xfreerdp.h:121:3: замечание: «button_map» declared here as «typedef struct button_map button_map»
  121 | } button_map;
      |   ^~~~~~~~~~
gmake[2]: *** [client/X11/CMakeFiles/xfreerdp-client.dir/build.make:286: client/X11/CMakeFiles/xfreerdp-client.dir/cli/xfreerdp.cpp.o] Ошибка 1
gmake[2]: *** Ожидание завершения заданий…
gmake[1]: *** [CMakeFiles/Makefile2:3090: client/X11/CMakeFiles/xfreerdp-client.dir/all] Ошибка 2
gmake: *** [Makefile:156: all] Ошибка 2

изображение

изображение

AlexanderZhirov avatar Jul 05 '22 05:07 AlexanderZhirov

@MoAlyousef hmm... I just tried using the IUP library, and FreeRDP started connecting. Still, I suggest reconsidering about adding version 1.3.8, most likely - it will work. I'm not sure. But I have a working version of the FLTK (1.3.1) + FreeRDP bundle at hand.

изображение

I think there was something rewritten in the 4th version, so there is some incompatibility.

AlexanderZhirov avatar Jul 05 '22 07:07 AlexanderZhirov

The problem is that it's not sure to work with FLTK 1.3.8 since 1.3.1 is 10 years old now.

MoAlyousef avatar Jul 05 '22 12:07 MoAlyousef