Move implementation out of interface headers #62
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
tkrzw has quite a bit of code that is implemented in header files that are supposed to be included by consuming projects.
This causes some technical issues with weak symbols inside the consumer's translation units (or
.obj
files), that might fail to be deduplicated if the consuming project uses compiler settings different from those used by the tkrzw build system.More importantly, however, parts of the code, especially imlementations of non-virtual functions, might end up being embedded into consumer applications when an optimization phase eliminates the procedure calls, raising many concerns considering licensing.
This commit moves all implementations from header files documented for inclusion into third-party projects on https://dbmx.net/tkrzw/, as well as any header that implicitly gets included by including a tkrzw interface header into source files.
Further,
inline
declarations are removed as within tkrzw, the inlining happens on the discredition of the linker independed of theinline
keyword, while cross-module inlining is what this commit is supposed to interdict.Nothing can be done about the template code in tkrzw_lib_common.h, however, template code is whitelisted on GPLv3.
Closes: #61