Opened 8 months ago
Closed 8 months ago
#69524 closed defect (fixed)
rawstudio does not build again: error: unknown type name 'xmlDocPtr' etc.
Reported by: | barracuda156 | Owned by: | barracuda156 |
---|---|---|---|
Priority: | Normal | Milestone: | |
Component: | ports | Version: | 2.9.1 |
Keywords: | Cc: | ||
Port: | rawstudio |
Description
:info:build libtool: compile: /opt/local/bin/gcc-mp-13 -DHAVE_CONFIG_H -I. -I.. -I.. -DWITH_GCONF -isystem/opt/local/include/LegacySupport -I/opt/local/include -Wall -fno-strict-aliasing -DPACKAGE_DATA_DIR=\"/opt/local/share\" -DPACKAGE_LIBRARY_DIR=\"/opt/local/lib/rawstudio/plugins\" -DPACKAGE_LOCALE_DIR=\"/opt/local/share/locale\" -I/opt/local/include/gtk-3.0 -I/opt/local/include/at-spi2-atk/2.0 -I/opt/local/include/at-spi-2.0 -I/opt/local/include/dbus-1.0 -I/opt/local/lib/dbus-1.0/include -I/opt/local/include/gtk-3.0 -I/opt/local/include/gio-unix-2.0 -I/opt/local/include/cairo -I/opt/local/include/pango-1.0 -I/opt/local/include/harfbuzz -I/opt/local/include/pango-1.0 -I/opt/local/include/fribidi -I/opt/local/include/harfbuzz -I/opt/local/include/atk-1.0 -I/opt/local/include/cairo -I/opt/local/include/pixman-1 -I/opt/local/include/freetype2 -I/opt/local/include/gdk-pixbuf-2.0 -I/opt/local/include/libpng16 -I/opt/local/include/libxml2 -I/opt/local/include/glib-2.0 -I/opt/local/lib/glib-2.0/include -DORBIT2=1 -I/opt/local/include/gconf/2 -I/opt/local/include/orbit-2.0 -I/opt/local/include/glib-2.0 -I/opt/local/lib/glib-2.0/include -I/opt/local/include/lensfun -I/opt/local/include/glib-2.0 -I/opt/local/lib/glib-2.0/include -pipe -Os -arch ppc -MT rs-lens-db-editor.lo -MD -MP -MF .deps/rs-lens-db-editor.Tpo -c rs-lens-db-editor.c -o rs-lens-db-editor.o >/dev/null 2>&1 :info:build rs-lens-fix.c: In function 'rs_lens_fix_init': :info:build rs-lens-fix.c:248:9: error: unknown type name 'xmlDocPtr' :info:build 248 | xmlDocPtr doc; :info:build | ^~~~~~~~~ :info:build rs-lens-fix.c:249:9: error: unknown type name 'xmlNodePtr' :info:build 249 | xmlNodePtr cur; :info:build | ^~~~~~~~~~ :info:build rs-lens-fix.c:250:9: error: unknown type name 'xmlNodePtr' :info:build 250 | xmlNodePtr entry = NULL; :info:build | ^~~~~~~~~~ :info:build rs-lens-fix.c:250:28: warning: initialization of 'int' from 'void *' makes integer from pointer without a cast [-Wint-conversion] :info:build 250 | xmlNodePtr entry = NULL; :info:build | ^~~~ :info:build rs-lens-fix.c:251:9: error: unknown type name 'xmlChar' :info:build 251 | xmlChar *val; :info:build | ^~~~~~~ :info:build rs-lens-fix.c:266:15: warning: implicit declaration of function 'xmlParseFile' [-Wimplicit-function-declaration] :info:build 266 | doc = xmlParseFile(filename); :info:build | ^~~~~~~~~~~~ :info:build libtool: compile: /opt/local/bin/gcc-mp-13 -DHAVE_CONFIG_H -I. -I.. -I.. -DWITH_GCONF -isystem/opt/local/include/LegacySupport -I/opt/local/include -Wall -fno-strict-aliasing -DPACKAGE_DATA_DIR=\"/opt/local/share\" -DPACKAGE_LIBRARY_DIR=\"/opt/local/lib/rawstudio/plugins\" -DPACKAGE_LOCALE_DIR=\"/opt/local/share/locale\" -I/opt/local/include/gtk-3.0 -I/opt/local/include/at-spi2-atk/2.0 -I/opt/local/include/at-spi-2.0 -I/opt/local/include/dbus-1.0 -I/opt/local/lib/dbus-1.0/include -I/opt/local/include/gtk-3.0 -I/opt/local/include/gio-unix-2.0 -I/opt/local/include/cairo -I/opt/local/include/pango-1.0 -I/opt/local/include/harfbuzz -I/opt/local/include/pango-1.0 -I/opt/local/include/fribidi -I/opt/local/include/harfbuzz -I/opt/local/include/atk-1.0 -I/opt/local/include/cairo -I/opt/local/include/pixman-1 -I/opt/local/include/freetype2 -I/opt/local/include/gdk-pixbuf-2.0 -I/opt/local/include/libpng16 -I/opt/local/include/libxml2 -I/opt/local/include/glib-2.0 -I/opt/local/lib/glib-2.0/include -DORBIT2=1 -I/opt/local/include/gconf/2 -I/opt/local/include/orbit-2.0 -I/opt/local/include/glib-2.0 -I/opt/local/lib/glib-2.0/include -I/opt/local/include/lensfun -I/opt/local/include/glib-2.0 -I/opt/local/lib/glib-2.0/include -pipe -Os -arch ppc -MT rs-filetypes.lo -MD -MP -MF .deps/rs-filetypes.Tpo -c rs-filetypes.c -fno-common -DPIC -o .libs/rs-filetypes.o :info:build rs-lens-fix.c:275:15: warning: implicit declaration of function 'xmlDocGetRootElement' [-Wimplicit-function-declaration] :info:build 275 | cur = xmlDocGetRootElement(doc); :info:build | ^~~~~~~~~~~~~~~~~~~~ :info:build rs-lens-fix.c:276:21: warning: implicit declaration of function 'xmlStrcmp'; did you mean 'strcmp'? [-Wimplicit-function-declaration] :info:build 276 | if (cur && (xmlStrcmp(cur->name, BAD_CAST "rawstudio-lens-fix") == 0)) :info:build | ^~~~~~~~~ :info:build | strcmp :info:build rs-lens-fix.c:276:34: error: invalid type argument of '->' (have 'int') :info:build 276 | if (cur && (xmlStrcmp(cur->name, BAD_CAST "rawstudio-lens-fix") == 0)) :info:build | ^~ :info:build rs-lens-fix.c:276:42: error: 'BAD_CAST' undeclared (first use in this function) :info:build 276 | if (cur && (xmlStrcmp(cur->name, BAD_CAST "rawstudio-lens-fix") == 0)) :info:build | ^~~~~~~~ :info:build rs-lens-fix.c:276:42: note: each undeclared identifier is reported only once for each function it appears in :info:build rs-lens-fix.c:276:50: error: expected ')' before string constant :info:build 276 | if (cur && (xmlStrcmp(cur->name, BAD_CAST "rawstudio-lens-fix") == 0)) :info:build | ~ ^~~~~~~~~~~~~~~~~~~~~ :info:build | ) :info:build rs-lens-fix.c:278:26: error: invalid type argument of '->' (have 'int') :info:build 278 | cur = cur->xmlChildrenNode; :info:build | ^~ :info:build rs-lens-fix.c:281:44: error: invalid type argument of '->' (have 'int') :info:build 281 | if ((!xmlStrcmp(cur->name, BAD_CAST "lens"))) :info:build | ^~ :info:build rs-lens-fix.c:281:60: error: expected ')' before string constant :info:build 281 | if ((!xmlStrcmp(cur->name, BAD_CAST "lens"))) :info:build | ~ ^~~~~~~ :info:build | )
Change History (15)
comment:1 follow-up: 2 Changed 8 months ago by ryandesign (Ryan Carsten Schmidt)
comment:2 follow-up: 4 Changed 8 months ago by barracuda156
Replying to ryandesign:
Incompatibility with libxml2 2.12.x, I'm sure. I've fixed similar in several ports already.
Thank you, that is indeed the case, and I have fixed the build now (was a matter of two headers), however it does not work, unfortunately, for unrelated reasons.
On Sonoma it fails to launch on:
svacchanda@Sergeys-Air ~ % rawstudio dlopen(/opt/local/lib/rawstudio/plugins/denoise.so, 0x000A): symbol not found in flat namespace '__Z22rs_detect_cpu_featuresv' ** ERROR:rs-plugin-manager.c:56:rs_plugin_manager_load_all_plugins: assertion failed: (g_type_module_use(G_TYPE_MODULE(plugin))) Bail out! ERROR:rs-plugin-manager.c:56:rs_plugin_manager_load_all_plugins: assertion failed: (g_type_module_use(G_TYPE_MODULE(plugin))) zsh: abort rawstudio
comment:3 Changed 8 months ago by barracuda156
UPD. Ah, that bug was there already: https://github.com/rawstudio/rawstudio/issues/82#issuecomment-1223877154 Not sure about Sonoma one, maybe arm64 is not properly supported.
comment:4 Changed 8 months ago by ryandesign (Ryan Carsten Schmidt)
Replying to barracuda156:
On Sonoma it fails to launch on:
svacchanda@Sergeys-Air ~ % rawstudio dlopen(/opt/local/lib/rawstudio/plugins/denoise.so, 0x000A): symbol not found in flat namespace '__Z22rs_detect_cpu_featuresv' ** ERROR:rs-plugin-manager.c:56:rs_plugin_manager_load_all_plugins: assertion failed: (g_type_module_use(G_TYPE_MODULE(plugin))) Bail out! ERROR:rs-plugin-manager.c:56:rs_plugin_manager_load_all_plugins: assertion failed: (g_type_module_use(G_TYPE_MODULE(plugin))) zsh: abort rawstudio
I can confirm that on Monterey x86_64.
comment:5 follow-up: 6 Changed 8 months ago by ryandesign (Ryan Carsten Schmidt)
My observations about this are:
rs_detect_cpu_features
is defined in librawstudio, which is a C library, so the symbol in the library is _rs_detect_cpu_features
.
denoise.so doesn't link with librawstudio; none of the plugins do. Maybe that's not required if they're loaded by the main rawstudio program since rawstudio does link with librawstudio.
Of the 5 plugins that use rs_detect_cpu_features
, denoise is the only one written in C++. All the others are C and correctly reference the _rs_detect_cpu_features
symbol. denoise, being a C++ plugin, references the name-mangled symbol, __Z22rs_detect_cpu_featuresv
, which doesn't exist.
rawstudio.h uses the correct trick to tell any C++ code including it that the library's functions are C functions that should not be name-mangled:
#ifdef __cplusplus extern "C" { #endif
#ifdef __cplusplus } /* extern "c" */ #endif
There is one rawstudio header—rs-types.h—included outside of that #ifdef
, but rs-types.h doesn't include any other rawstudio headers and only defines datatypes so I don't think that would be the cause.
So I'm not sure yet why denoise is using the name-mangled symbol when it shouldn't.
comment:6 follow-ups: 7 8 Changed 8 months ago by ryandesign (Ryan Carsten Schmidt)
Replying to ryandesign:
rawstudio.h uses the correct trick to tell any C++ code including it that the library's functions are C functions that should not be name-mangled:
#ifdef __cplusplus extern "C" { #endif#ifdef __cplusplus } /* extern "c" */ #endif
Ah. The problem is you added a patchfile to remove those. Why? (Not one of the 52 comments in the PR that made this change appears to have questioned it.)
I do see that they removed this guard on 20210523 but they put it back on 20210526.
If I remove this part of your patch and add the fix for the libxml2 2.12 problem then the port builds and does not have the denoise.so error on startup.
comment:7 Changed 8 months ago by barracuda156
Replying to ryandesign:
Ah. The problem is you added a patchfile to remove those. Why? (Not one of the 52 comments in the PR that made this change appears to have questioned it.)
I do see that they removed this guard on 20210523 but they put it back on 20210526.
If I remove this part of your patch and add the fix for the libxml2 2.12 problem then the port builds and does not have the denoise.so error on startup.
Thank you! I do not remember now, there was some reason (I am not saying the patch was correct, but it would not have been added without an underlying issue).
Let me sort symbols issue on PPC, once that works, I make a PR to sort this out (and drop that part of the patch which causes a breakage).
comment:8 Changed 8 months ago by barracuda156
Replying to ryandesign:
So on powerpc symbols that are not found at runtime have a form of inline something
. For example, inline guint clampbits16(gint x)
in demosaic plugin.
What is the correct way to fix that?
comment:9 follow-up: 10 Changed 8 months ago by ryandesign (Ryan Carsten Schmidt)
On PowerPC you're using gcc which might have different inline semantincs from clang and in addition IIRC inline semantics differed in c89 and c99 modes. I'd have to do some research.
comment:10 Changed 8 months ago by barracuda156
Replying to ryandesign:
On PowerPC you're using gcc which might have different inline semantincs from clang and in addition IIRC inline semantics differed in c89 and c99 modes. I'd have to do some research.
I think I was struggling back then to make it build with clang. I have dropped patch-rawstudio.h.diff
completely, and it still builds fine with gcc. It does not help, however, the symbols are still not found.
comment:11 follow-ups: 12 14 Changed 8 months ago by ryandesign (Ryan Carsten Schmidt)
How about committing the fix for the issue this ticket was filed for (error: unknown type name 'xmlDocPtr'
), and the second issue you mentioned (symbol not found in flat namespace '__Z22rs_detect_cpu_featuresv'
), and leave the third issue for later.
comment:12 Changed 8 months ago by barracuda156
Replying to ryandesign:
How about committing the fix for the issue this ticket was filed for (
error: unknown type name 'xmlDocPtr'
), and the second issue you mentioned (symbol not found in flat namespace '__Z22rs_detect_cpu_featuresv'
), and leave the third issue for later.
Will be done today.
comment:13 Changed 8 months ago by barracuda156
comment:14 Changed 8 months ago by barracuda156
Replying to ryandesign:
How about committing the fix for the issue this ticket was filed for (
error: unknown type name 'xmlDocPtr'
), and the second issue you mentioned (symbol not found in flat namespace '__Z22rs_detect_cpu_featuresv'
), and leave the third issue for later.
Ryan, could we merge it, if you are happy with the changes?
comment:15 Changed 8 months ago by barracuda156
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
Incompatibility with libxml2 2.12.x, I'm sure. I've fixed similar in several ports already.
The last commit in the rawstudio repository was 3 years ago. libxml2 2.12.x came out more recently than that so they haven't fixed this yet. I also don't see an issue about it in their issue tracker. I'd start by filing an issue there. However, they haven't responded to the 4-month-old bug report that it doesn't build with exiv2 0.28.x, so they may not respond to a new issue either and you may have to work on the fix yourself.
I haven't updated exiv2 to 0.28.x because of the amount of breakage it will cause so if you can incorporate the patches for exiv2 0.28.x support as well, if you haven't already, that will be of help in moving that forward too.