AIX packaging: src/plugin/quota does not build
Michael Felt
michael at felt.demon.nl
Mon Jun 12 14:04:45 EEST 2017
#stdout to /dev/null to see only the error messages
It comes down to more issues with how IBM xlc handles (less elegantly)
Compound Literals compared to GCC.
michael at x071:[/data/prj/aixtools/github/dovecot/x071-test]make -i >/dev/null
"../../../../src/x071-test/src/plugins/quota/quota.c", line 382.17:
1506-196 (S) Initialization between types "char* const" and "struct
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota.c", line 383.17:
1506-196 (S) Initialization between types "void(* const)(struct
quota_root*,const char*)" and "struct quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota.c", line 384.17:
1506-196 (S) Initialization between types "char* const" and "struct
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota.c", line 385.17:
1506-196 (S) Initialization between types "void(* const)(struct
quota_root*,const char*)" and "struct quota_param_parser" is not allowed.
make[4]: [quota.lo] Error 1 (ignored)
The above issues I resolved by changing
/*
* Sigh, xlc and Compound Literals
*
struct quota_param_parser quota_param_hidden = {.param_name = "hidden",
.param_handler = hidden_param_handler};
struct quota_param_parser quota_param_ignoreunlimited = {.param_name =
"ignoreunlimited", .param_handler = ignoreunlim_param_handler};
struct quota_param_parser quota_param_noenforcing = {.param_name =
"noenforcing", .param_handler = noenforcing_param_handler};
struct quota_param_parser quota_param_ns = {.param_name = "ns=",
.param_handler = ns_param_handler};
*/
to
#define quota_param_hidden {.param_name = "hidden", .param_handler =
hidden_param_handler}
#define quota_param_ignoreunlimited {.param_name = "ignoreunlimited",
.param_handler = ignoreunlim_param_handler}
#define quota_param_noenforcing {.param_name = "noenforcing",
.param_handler = noenforcing_param_handler}
#define quota_param_ns {.param_name = "ns=", .param_handler =
ns_param_handler}
Unfortunately, this did not help quota-fs.c, so I move the defines to
quota.h.
However, since hidden_param_handler() is defined as a static routine, it
is not visible outside of quota.c. As such the error messages change from:
"../../../../src/x071-test/src/plugins/quota/quota-fs.c", line 125.17:
1506-196 (S) Initialization between types "char* const" and "struct
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-fs.c", line 125.37:
1506-196 (S) Initialization between types "void(* const)(struct
quota_root*,const char*)" and "struct quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-fs.c", line 125.62:
1506-196 (S) Initialization between types "char* const" and "struct
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-fs.c", line 126.18:
1506-515 (S) Member designator cannot be applied to an object of type
"const struct quota_param_parser[]".
make[4]: [quota-fs.lo] Error 1 (ignored)
"../../../../src/x071-test/src/plugins/quota/quota-dict.c", line 47.17:
1506-196 (S) Initialization between types "char* const" and "struct
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-dict.c", line 47.37:
1506-196 (S) Initialization between types "void(* const)(struct
quota_root*,const char*)" and "struct quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-dict.c", line 47.66:
1506-196 (S) Initialization between types "char* const" and "struct
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-dict.c", line 47.91:
1506-196 (S) Initialization between types "void(* const)(struct
quota_root*,const char*)" and "struct quota_param_parser" is not allowed.
make[4]: [quota-dict.lo] Error 1 (ignored)
"../../../../src/x071-test/src/plugins/quota/quota-imapc.c", line 66.17:
1506-196 (S) Initialization between types "char* const" and "struct
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-imapc.c", line 67.18:
1506-515 (S) Member designator cannot be applied to an object of type
"const struct quota_param_parser[]".
make[4]: [quota-imapc.lo] Error 1 (ignored)
libtool: error: 'quota.lo' is not a valid libtool object
make[4]: [lib10_quota_plugin.la] Error 1 (ignored)
libtool: error: 'quota.lo' is not a valid libtool object
make[4]: [quota-status] Error 1 (ignored)
make[4]: *** No rule to make target `../quota/lib10_quota_plugin.la',
needed by `lib11_imap_quota_plugin.la'. Stop.
make[3]: [all-recursive] Error 1 (ignored)
to:
michael at x071:[/data/prj/aixtools/github/dovecot/x071-test/src/plugins/quota]make
-i >/dev/null
"../../../../src/x071-test/src/plugins/quota/quota-fs.c", line 125.17:
1506-045 (S) Undeclared identifier hidden_param_handler.
"../../../../src/x071-test/src/plugins/quota/quota-fs.c", line 126.17:
1506-045 (S) Undeclared identifier noenforcing_param_handler.
"../../../../src/x071-test/src/plugins/quota/quota-fs.c", line 127.17:
1506-045 (S) Undeclared identifier ns_param_handler.
make: [quota-fs.lo] Error 1 (ignored)
"../../../../src/x071-test/src/plugins/quota/quota-dict.c", line 47.17:
1506-045 (S) Undeclared identifier hidden_param_handler.
"../../../../src/x071-test/src/plugins/quota/quota-dict.c", line 47.37:
1506-045 (S) Undeclared identifier ignoreunlim_param_handler.
"../../../../src/x071-test/src/plugins/quota/quota-dict.c", line 47.66:
1506-045 (S) Undeclared identifier noenforcing_param_handler.
"../../../../src/x071-test/src/plugins/quota/quota-dict.c", line 47.91:
1506-045 (S) Undeclared identifier ns_param_handler.
make: [quota-dict.lo] Error 1 (ignored)
"../../../../src/x071-test/src/plugins/quota/quota-imapc.c", line 66.17:
1506-045 (S) Undeclared identifier ns_param_handler.
make: [quota-imapc.lo] Error 1 (ignored)
libtool: error: 'quota-fs.lo' is not a valid libtool object
make: [lib10_quota_plugin.la] Error 1 (ignored)
libtool: error: 'quota-fs.lo' is not a valid libtool object
make: [quota-status] Error 1 (ignored)
For me, this is a procedure declaration issue I may not resolve on my
own - I must assume there is a reason that these routines are "static".
Michael
p.s. Once this is resolved I hope to be able to use "make check". I had
to massage the Makefiles to get gnulib/getopt to link into dovecot. Once
I can run "make check" I'll request help on how to get a new directory
included in the Makefile list, and also assistance with making sure it
can also work with out-of-tree builds.
More information about the dovecot
mailing list