libcester icon indicating copy to clipboard operation
libcester copied to clipboard

Fail to compile the example on termux

Open chenyulue opened this issue 3 years ago • 2 comments

Firstly, thanks for the awesome testing framework.

I've used libcester on termux, but failed to compile the given example. The errors are as follows:

In file included from ./test.c:2:
/data/data/com.termux/files/usr/local/include/exotic/cester.h:283:10: error: field has incomplete type 'FILE' (aka 'struct __sFILE')
    FILE original_stream;                   /**< The actual address of the captured stream. For internal use only.*/
         ^
/data/data/com.termux/files/usr/include/stdio.h:61:8: note: forward declaration of 'struct __sFILE'
struct __sFILE;
       ^
In file included from ./test.c:2:
/data/data/com.termux/files/usr/local/include/exotic/cester.h:407:10: error: field has incomplete type 'FILE' (aka 'struct __sFILE')
    FILE output_stream_address;                         /**< Output stream address. incase the output stream was captured in test it state can be reset. For internal use only. */
         ^
/data/data/com.termux/files/usr/include/stdio.h:61:8: note: forward declaration of 'struct __sFILE'
struct __sFILE;
       ^
In file included from ./././test.c:2:
/data/data/com.termux/files/usr/local/include/exotic/cester.h:3880:13: error: incomplete type 'FILE' (aka 'struct __sFILE') is not assignable
    *stream = *(captured_stream->replaced_stream_handle);
    ~~~~~~~ ^
/data/data/com.termux/files/usr/include/stdio.h:61:8: note: forward declaration of 'struct __sFILE'
struct __sFILE;
       ^
In file included from ./././test.c:2:
/data/data/com.termux/files/usr/local/include/exotic/cester.h:3959:33: error: incomplete type 'FILE' (aka 'struct __sFILE') is not assignable
                        *stream = *(captured_stream->replaced_stream_handle);
                        ~~~~~~~ ^
/data/data/com.termux/files/usr/local/include/exotic/cester.h:367:43: note: expanded from macro 'CESTER_ARRAY_FOREACH'
                                          z\
                                          ^
/data/data/com.termux/files/usr/include/stdio.h:61:8: note: forward declaration of 'struct __sFILE'
struct __sFILE;
       ^
4 errors generated.

My compiler is clang of version 15 on termux. Then I check it on windows with clang of the same version, and no error happens.

Maybe this error is related to the termux platform, but I'm not sure. If you are free, please check it. Thanks!

chenyulue avatar Sep 27 '22 03:09 chenyulue

Hello, @chenyulue I will try to simulate your environment today to see if I can reproduce the error. And also I have an update in the pipeline to make the FILE capturing and testing feature optional will merge that to the main branch today.

Thecarisma avatar Sep 27 '22 07:09 Thecarisma

After some search, I think I've found the reason for the above error.

In the termux, the stdio.h file includes the following snippet:

#if __ANDROID_API__ < 24
#include <bits/struct_file.h>
#endif

The struct_file.h defines the FILE struct. In my phone , __ANDROID_API is 24, so unfortunately in the cester.h header, the FILE is not defined.

So I add the following code into the cester.h header:

#ifdef __ANDROID_API__
#include <bits/struct_file.h>
#endif

After that, at least the given example can be compiled and run successfully. I'm not sure whether there are any other issues. I'll check it in my real projects.

chenyulue avatar Sep 30 '22 16:09 chenyulue