Installing this file will lead to clashes with applications, that
link against json-c and include their own build-time config.h.
Anyways, that particular header file is not needed to build and
link against json-c.
On Windows, or at least when cross-built with Mingw-w64, build fails
because strict prototype fails on an included file (thus nothing we can
do about in json-c code):
> from /home/jehan/dev/src/json-c/json_util.c:44:
> /home/jehan/.local/share/crossroad/roads/w64/json-c/include/minwindef.h:196:3: error: function declaration isn't a prototype [-Werror=strict-prototypes]
> 196 | typedef INT_PTR (WINAPI *FARPROC) ();
> | ^~~~~~~
> /home/jehan/.local/share/crossroad/roads/w64/json-c/include/minwindef.h:197:3: error: function declaration isn't a prototype [-Werror=strict-prototypes]
> 197 | typedef INT_PTR (WINAPI *NEARPROC) ();
> | ^~~~~~~
> /home/jehan/.local/share/crossroad/roads/w64/json-c/include/minwindef.h:198:3: error: function declaration isn't a prototype [-Werror=strict-prototypes]
> 198 | typedef INT_PTR (WINAPI *PROC) ();
> | ^~~~~~~
Let's just disable the errors for Windows build.
Include all compiler warnings, and provide DISABLE_WERROR to make them not be errors.
Define _REENTRANT, if setting it works.
Set -Bsymbolic-functions, and provide DISABLE_BSYMBOLIC to turn that off.
Implement the check for HAS_GNU_WARNING_LONG
CMake was not properly substituting the installation dir variables (they
ended up all empty), so the pkg-config results were also wrongs. For
instance cflags was: -I -I/json-c
Even though json-c was found at configure time, this obviously broke the
build of any application using it.
Now json-c can be bundled to any cmake-based project and used with
couple lines of code:
add_subdirectory(json-c EXCLUDE_FROM_ALL)
target_link_libraries(MyProject json-c)
This patch provides a CMakeLists.txt file to build JSON-C library without relying on auto-tools support. This makes the build a bit more portable and cleaner.
It can detect headers and symbols and generate config.h header file based on those detections. It cannot yet handle ctest(1) as the testing itself depends on comparing the output against files. Testing would need some creative abuse of CMake :) This will be provided a few patches later and may possibly involve refactoring test cases.
The patch has been tested on GCC 4.8.5 (Linux), GCC 7.2.0 (MinGW) and Microsoft Visual C++ 16.0 (2010?) locally. Also, compiles correctly on Travis CI and AppVeyor without errors.
When building the project using cmake then installing it. The
definitions in `json_object_iterator.h` are required but not installed
by the cmake install rule. This patch adds the `json_object_iterator.h`
file to the list of files to install.
Signed-off-by: Keith Holman <keith.holman@windriver.com>
1. The windows dll will output the lib and dll, and rename the static
lib will have conflict on windows.
2. Delete rename code to dismiss the conflict.