sourcemeta / jsontoolkit

JSON Toolkit is a swiss-army knife library for expressive JSON programming in modern C++
https://jsontoolkit.sourcemeta.com/
GNU Affero General Public License v3.0
26 stars 2 forks source link

CMake: build fails while using GCC 13.2.0 to build the files/modules. #539

Open Era-cell opened 5 months ago

Era-cell commented 5 months ago

CMakefile compiles and creates a build directory properly. But after selecting GCC 13.2.0 and make build. Fails and stops at a particular function/class Im not sure what to call it.

[build] G:\CPP\build_deps\jsontoolkit-src\src\jsonpointer\jsonpointer.cc:125:69: required from here

Complete stack trace is in : https://elmah.io/tools/stack-trace-formatter/dcb82161c59745be8ba4f8f9042e151f/ System specifications: amd64 Windows 11 IDE: VS Code Extensions used: CMake by twxs, CMake tools by Microsoft

jviotti commented 5 months ago

Copying the stack trace here too for the record:


[main] Building folder: CPP 
[build] Starting build
[proc] Executing command: C:\cmake-3.29.1-windows-x86_64\bin\cmake.EXE --build g:/CPP/build --config Debug --target all -j 14 --
[build] [  2%] Building CXX object _deps/jsontoolkit-build/src/json/CMakeFiles/sourcemeta_jsontoolkit_json.dir/json.cc.obj
[build] [  5%] Building C object _deps/jsontoolkit-build/vendor/uriparser/CMakeFiles/uriparser.dir/src/UriCommon.c.obj
[build] [  7%] Building C object _deps/jsontoolkit-build/vendor/uriparser/CMakeFiles/uriparser.dir/src/UriCompare.c.obj
[build] [ 10%] Building C object _deps/jsontoolkit-build/vendor/uriparser/CMakeFiles/uriparser.dir/src/UriEscape.c.obj
[build] [ 12%] Building C object _deps/jsontoolkit-build/vendor/uriparser/CMakeFiles/uriparser.dir/src/UriFile.c.obj
[build] [ 15%] Building C object _deps/jsontoolkit-build/vendor/uriparser/CMakeFiles/uriparser.dir/src/UriIp4Base.c.obj
[build] [ 17%] Building C object _deps/jsontoolkit-build/vendor/uriparser/CMakeFiles/uriparser.dir/src/UriIp4.c.obj
[build] [ 20%] Building C object _deps/jsontoolkit-build/vendor/uriparser/CMakeFiles/uriparser.dir/src/UriMemory.c.obj
[build] [ 23%] Building C object _deps/jsontoolkit-build/vendor/uriparser/CMakeFiles/uriparser.dir/src/UriParseBase.c.obj
[build] [ 25%] Building C object _deps/jsontoolkit-build/vendor/uriparser/CMakeFiles/uriparser.dir/src/UriParse.c.obj
[build] [ 28%] Building C object _deps/jsontoolkit-build/vendor/uriparser/CMakeFiles/uriparser.dir/src/UriNormalizeBase.c.obj
[build] [ 30%] Building C object _deps/jsontoolkit-build/vendor/uriparser/CMakeFiles/uriparser.dir/src/UriRecompose.c.obj
[build] [ 33%] Building C object _deps/jsontoolkit-build/vendor/uriparser/CMakeFiles/uriparser.dir/src/UriQuery.c.obj
[build] [ 35%] Building C object _deps/jsontoolkit-build/vendor/uriparser/CMakeFiles/uriparser.dir/src/UriNormalize.c.obj
[build] [ 41%] Building C object _deps/jsontoolkit-build/vendor/uriparser/CMakeFiles/uriparser.dir/src/UriShorten.c.obj
[build] [ 41%] Building C object _deps/jsontoolkit-build/vendor/uriparser/CMakeFiles/uriparser.dir/src/UriResolve.c.obj
[build] [ 43%] Linking C static library liburiparser.a
[build] [ 43%] Built target uriparser
[build] [ 46%] Building CXX object _deps/jsontoolkit-build/src/uri/CMakeFiles/sourcemeta_jsontoolkit_uri.dir/uri.cc.obj
[build] [ 48%] Building CXX object _deps/jsontoolkit-build/src/uri/CMakeFiles/sourcemeta_jsontoolkit_uri.dir/escaping.cc.obj
[build] [ 51%] Linking CXX static library libsourcemeta_jsontoolkit_uri.a
[build] [ 51%] Built target sourcemeta_jsontoolkit_uri
[build] [ 53%] Linking CXX static library libsourcemeta_jsontoolkit_json.a
[build] [ 53%] Built target sourcemeta_jsontoolkit_json
[build] [ 56%] Building CXX object _deps/jsontoolkit-build/src/jsonpointer/CMakeFiles/sourcemeta_jsontoolkit_jsonpointer.dir/jsonpointer.cc.obj
[build] [ 58%] Building CXX object _deps/jsontoolkit-build/src/jsonl/CMakeFiles/sourcemeta_jsontoolkit_jsonl.dir/jsonl.cc.obj
[build] [ 61%] Building CXX object _deps/jsontoolkit-build/src/jsonl/CMakeFiles/sourcemeta_jsontoolkit_jsonl.dir/iterator.cc.obj
[build] In file included from C:/msys64/ucrt64/include/c++/13.2.0/ext/alloc_traits.h:34,
[build]                  from C:/msys64/ucrt64/include/c++/13.2.0/bits/stl_uninitialized.h:64,
[build]                  from C:/msys64/ucrt64/include/c++/13.2.0/vector:65,
[build]                  from G:/CPP/build/_deps/jsontoolkit-src/src/json/include/sourcemeta/jsontoolkit/json_array.h:5,
[build]                  from G:/CPP/build/_deps/jsontoolkit-src/src/json/include/sourcemeta/jsontoolkit/json_value.h:4,
[build]                  from G:/CPP/build/_deps/jsontoolkit-src/src/json/include/sourcemeta/jsontoolkit/json.h:11,
[build]                  from G:/CPP/build/_deps/jsontoolkit-src/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer.h:10,
[build]                  from G:\CPP\build\_deps\jsontoolkit-src\src\jsonpointer\jsonpointer.cc:1:
[build] C:/msys64/ucrt64/include/c++/13.2.0/bits/alloc_traits.h: In instantiation of 'static constexpr void std::allocator_traits<std::allocator<_Up> >::construct(allocator_type&, _Up*, _Args&& ...) [with _Up = sourcemeta::jsontoolkit::GenericToken<char, std::char_traits<char>, std::allocator>; _Args = {long unsigned int&}; _Tp = sourcemeta::jsontoolkit::GenericToken<char, std::char_traits<char>, std::allocator>; allocator_type = std::allocator<sourcemeta::jsontoolkit::GenericToken<char, std::char_traits<char>, std::allocator> >]':
[build] C:/msys64/ucrt64/include/c++/13.2.0/bits/vector.tcc:117:30:   required from 'constexpr std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {long unsigned int&}; _Tp = sourcemeta::jsontoolkit::GenericToken<char, std::char_traits<char>, std::allocator>; _Alloc = std::allocator<sourcemeta::jsontoolkit::GenericToken<char, std::char_traits<char>, std::allocator> >; reference = sourcemeta::jsontoolkit::GenericToken<char, std::char_traits<char>, std::allocator>&]'
[build] G:/CPP/build/_deps/jsontoolkit-src/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_pointer.h:174:35:   required from 'sourcemeta::jsontoolkit::GenericPointer<CharT, Traits, Allocator>::reference sourcemeta::jsontoolkit::GenericPointer<CharT, Traits, Allocator>::emplace_back(Args&& ...) [with Args = {long unsigned int}; CharT = char; Traits = std::char_traits<char>; Allocator = std::allocator; reference = sourcemeta::jsontoolkit::GenericToken<char, std::char_traits<char>, std::allocator>&]'
[build] G:\CPP\build\_deps\jsontoolkit-src\src\jsonpointer\parser.h:119:26:   required from 'sourcemeta::jsontoolkit::GenericPointer<CharT, Traits, Allocator> sourcemeta::jsontoolkit::parse_pointer(std::basic_istream<_CharT, _Traits>&) [with CharT = char; Traits = std::char_traits<char>; Allocator = std::allocator]'
[build] G:\CPP\build\_deps\jsontoolkit-src\src\jsonpointer\jsonpointer.cc:125:69:   required from here
[build] C:/msys64/ucrt64/include/c++/13.2.0/bits/alloc_traits.h:539:28: error: no matching function for call to 'construct_at(sourcemeta::jsontoolkit::GenericToken<char, std::char_traits<char>, std::allocator>*&, long unsigned int&)'
[build]   539 |           std::construct_at(__p, std::forward<_Args>(__args)...);
[build]       |           ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[build] In file included from C:/msys64/ucrt64/include/c++/13.2.0/bits/stl_iterator.h:85,
[build]                  from C:/msys64/ucrt64/include/c++/13.2.0/bits/stl_algobase.h:67,
[build]                  from C:/msys64/ucrt64/include/c++/13.2.0/vector:62:
[build] C:/msys64/ucrt64/include/c++/13.2.0/bits/stl_construct.h:94:5: note: candidate: 'template<class _Tp, class ... _Args> constexpr decltype (::new(void*(0)) _Tp) std::construct_at(_Tp*, _Args&& ...)'
[build]    94 |     construct_at(_Tp* __location, _Args&&... __args)
[build]       |     ^~~~~~~~~~~~
[build] C:/msys64/ucrt64/include/c++/13.2.0/bits/stl_construct.h:94:5: note:   template argument deduction/substitution failed:
[build] C:/msys64/ucrt64/include/c++/13.2.0/bits/stl_construct.h: In substitution of 'template<class _Tp, class ... _Args> constexpr decltype (::new(void*(0)) _Tp) std::construct_at(_Tp*, _Args&& ...) [with _Tp = sourcemeta::jsontoolkit::GenericToken<char, std::char_traits<char>, std::allocator>; _Args = {long unsigned int&}]':
[build] C:/msys64/ucrt64/include/c++/13.2.0/bits/alloc_traits.h:539:21:   required from 'static constexpr void std::allocator_traits<std::allocator<_Up> >::construct(allocator_type&, _Up*, _Args&& ...) [with _Up = sourcemeta::jsontoolkit::GenericToken<char, std::char_traits<char>, std::allocator>; _Args = {long unsigned int&}; _Tp = sourcemeta::jsontoolkit::GenericToken<char, std::char_traits<char>, std::allocator>; allocator_type = std::allocator<sourcemeta::jsontoolkit::GenericToken<char, std::char_traits<char>, std::allocator> >]'
[build] C:/msys64/ucrt64/include/c++/13.2.0/bits/vector.tcc:117:30:   required from 'constexpr std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {long unsigned int&}; _Tp = sourcemeta::jsontoolkit::GenericToken<char, std::char_traits<char>, std::allocator>; _Alloc = std::allocator<sourcemeta::jsontoolkit::GenericToken<char, std::char_traits<char>, std::allocator> >; reference = sourcemeta::jsontoolkit::GenericToken<char, std::char_traits<char>, std::allocator>&]'
[build] G:/CPP/build/_deps/jsontoolkit-src/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_pointer.h:174:35:   required from 'sourcemeta::jsontoolkit::GenericPointer<CharT, Traits, Allocator>::reference sourcemeta::jsontoolkit::GenericPointer<CharT, Traits, Allocator>::emplace_back(Args&& ...) [with Args = {long unsigned int}; CharT = char; Traits = std::char_traits<char>; Allocator = std::allocator; reference = sourcemeta::jsontoolkit::GenericToken<char, std::char_traits<char>, std::allocator>&]'
[build] G:\CPP\build\_deps\jsontoolkit-src\src\jsonpointer\parser.h:119:26:   required from 'sourcemeta::jsontoolkit::GenericPointer<CharT, Traits, Allocator> sourcemeta::jsontoolkit::parse_pointer(std::basic_istream<_CharT, _Traits>&) [with CharT = char; Traits = std::char_traits<char>; Allocator = std::allocator]'
[build] G:\CPP\build\_deps\jsontoolkit-src\src\jsonpointer\jsonpointer.cc:125:69:   required from here
[build] C:/msys64/ucrt64/include/c++/13.2.0/bits/stl_construct.h:96:17: error: call of overloaded 'GenericToken(long unsigned int&)' is ambiguous
[build]    96 |     -> decltype(::new((void*)0) _Tp(std::declval<_Args>()...))
[build]       |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[build] In file included from G:/CPP/build/_deps/jsontoolkit-src/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_pointer.h:4,
[build]                  from G:/CPP/build/_deps/jsontoolkit-src/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer.h:13:
[build] G:/CPP/build/_deps/jsontoolkit-src/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_token.h:77:3: note: candidate: 'sourcemeta::jsontoolkit::GenericToken<CharT, Traits, Allocator>::GenericToken(int) [with CharT = char; Traits = std::char_traits<char>; Allocator = std::allocator]'
[build]    77 |   GenericToken(const int index) : data{std::in_place_type<Index>, index} {}
[build]       |   ^~~~~~~~~~~~
[build] G:/CPP/build/_deps/jsontoolkit-src/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_token.h:66:3: note: candidate: 'sourcemeta::jsontoolkit::GenericToken<CharT, Traits, Allocator>::GenericToken(Index) [with CharT = char; Traits = std::char_traits<char>; Allocator = std::allocator; Index = long long unsigned int]'
[build]    66 |   GenericToken(const Index index) : data{std::in_place_type<Index>, index} {}
[build]       |   ^~~~~~~~~~~~
[build] G:/CPP/build/_deps/jsontoolkit-src/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_token.h:54:3: note: candidate: 'sourcemeta::jsontoolkit::GenericToken<CharT, Traits, Allocator>::GenericToken(CharT) [with CharT = char; Traits = std::char_traits<char>; Allocator = std::allocator]'
[build]    54 |   GenericToken(const CharT character)
[build]       |   ^~~~~~~~~~~~
[build] G:/CPP/build/_deps/jsontoolkit-src/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_token.h:15:7: note: candidate: 'constexpr sourcemeta::jsontoolkit::GenericToken<char, std::char_traits<char>, std::allocator>::GenericToken(const sourcemeta::jsontoolkit::GenericToken<char, std::char_traits<char>, std::allocator>&)'
[build]    15 | class GenericToken {
[build]       |       ^~~~~~~~~~~~
[build] G:/CPP/build/_deps/jsontoolkit-src/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_token.h:15:7: note: candidate: 'constexpr sourcemeta::jsontoolkit::GenericToken<char, std::char_traits<char>, std::allocator>::GenericToken(sourcemeta::jsontoolkit::GenericToken<char, std::char_traits<char>, std::allocator>&&)'
[build] mingw32-make[2]: *** [_deps\jsontoolkit-build\src\jsonpointer\CMakeFiles\sourcemeta_jsontoolkit_jsonpointer.dir\build.make:76: _deps/jsontoolkit-build/src/jsonpointer/CMakeFiles/sourcemeta_jsontoolkit_jsonpointer.dir/jsonpointer.cc.obj] Error 1
[build] mingw32-make[1]: *** [CMakeFiles\Makefile2:315: _deps/jsontoolkit-build/src/jsonpointer/CMakeFiles/sourcemeta_jsontoolkit_jsonpointer.dir/all] Error 2
[build] mingw32-make[1]: *** Waiting for unfinished jobs....
[build] [ 64%] Linking CXX static library libsourcemeta_jsontoolkit_jsonl.a
[build] [ 64%] Built target sourcemeta_jsontoolkit_jsonl
[build] mingw32-make: *** [Makefile:135: all] Error 2
[proc] The command: C:\cmake-3.29.1-windows-x86_64\bin\cmake.EXE --build g:/CPP/build --config Debug --target all -j 14 -- exited with code: 2
[driver] Build completed: 00:00:07.205
[build] Build finished with exit code 2
``
jviotti commented 5 months ago

@Era-cell Do you still have the output from the configure phase?

Era-cell commented 5 months ago

Yeah! this is it:@jviotti

[main] Configuring project: CPP 
[proc] Executing command: C:\cmake-3.29.1-windows-x86_64\bin\cmake.EXE --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_C_COMPILER:FILEPATH=C:\msys64\ucrt64\bin\gcc.exe -DCMAKE_CXX_COMPILER:FILEPATH=C:\msys64\ucrt64\bin\g++.exe -SG:/CPP -Bg:/CPP/build -G "MinGW Makefiles"
[cmake] Not searching for unused variables given on the command line.
[cmake] -- The C compiler identification is GNU 13.2.0
[cmake] -- The CXX compiler identification is GNU 13.2.0
[cmake] -- Detecting C compiler ABI info
[cmake] -- Detecting C compiler ABI info - done
[cmake] -- Check for working C compiler: C:/msys64/ucrt64/bin/gcc.exe - skipped
[cmake] -- Detecting C compile features
[cmake] -- Detecting C compile features - done
[cmake] -- Detecting CXX compiler ABI info
[cmake] -- Detecting CXX compiler ABI info - done
[cmake] -- Check for working CXX compiler: C:/msys64/ucrt64/bin/g++.exe - skipped
[cmake] -- Detecting CXX compile features
[cmake] -- Detecting CXX compile features - done
[cmake] CMake Deprecation Warning at build/_deps/jsontoolkit-src/vendor/uriparser/CMakeLists.txt:37 (cmake_minimum_required):
[cmake]   Compatibility with CMake < 3.5 will be removed from a future version of
[cmake]   CMake.
[cmake] 
[cmake]   Update the VERSION argument <min> value or use a ...<max> suffix to tell
[cmake]   CMake that the project does not need compatibility with older versions.
[cmake] 
[cmake] 
[cmake] -- Performing Test URIPARSER_COMPILER_SUPPORTS_VISIBILITY
[cmake] -- Performing Test URIPARSER_COMPILER_SUPPORTS_VISIBILITY - Success
[cmake] -- Looking for wprintf
[cmake] -- Looking for wprintf - found
[cmake] -- Looking for reallocarray
[cmake] -- Looking for reallocarray - not found
[cmake] -- ===========================================================================
[cmake] -- 
[cmake] -- Configuration
[cmake] --   Build type ............. 
[cmake] --   Shared libraries ....... 
[cmake] --   Compiler flags
[cmake] --     C ....................   -fvisibility=hidden
[cmake] --     C++ ..................   -fvisibility=hidden
[cmake] --   Linker flags
[cmake] --     Executable ........... 
[cmake] --     Module ............... 
[cmake] --     Shared ............... 
[cmake] --   Paths
[cmake] --     Prefix ............... C:/Program Files (x86)/jsontoolkit-test
[cmake] --     qhelpgenerator ....... 
[cmake] -- 
[cmake] --   Features
[cmake] --     Code for char * ...... ON
[cmake] --     Code for wchar_t * ... ON
[cmake] --     Tools ................ OFF
[cmake] --     Test suite ........... OFF
[cmake] CMake Warning (dev) at build/_deps/jsontoolkit-src/cmake/FindUriParser.cmake:11 (install):
[cmake]   Target uriparser has PUBLIC_HEADER files but no PUBLIC_HEADER DESTINATION.
[cmake] Call Stack (most recent call first):
[cmake]   build/_deps/jsontoolkit-src/CMakeLists.txt:38 (find_package)
[cmake] This warning is for project developers.  Use -Wno-dev to suppress it.
[cmake] 
[cmake] --     Documentation ........ OFF
[cmake] -- 
[cmake] -- ===========================================================================
[cmake] -- Performing Test COMPILER_HAS_DEPRECATED_ATTR
[cmake] -- Performing Test COMPILER_HAS_DEPRECATED_ATTR - Success
[cmake] -- Performing Test CMAKE_HAVE_LIBC_PTHREAD
[cmake] -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
[cmake] -- Found Threads: TRUE
[cmake] -- Configuring done (10.4s)
[cmake] -- Generating done (0.1s)
[cmake] -- Build files have been written to: G:/CPP/build
[cpptools] The build configurations generated do not contain the active build configuration. Using "" for CMAKE_BUILD_TYPE instead of "Debug" to ensure that IntelliSense configurations can be found

---------------------------------------------------For the CMakeFile.txt--------------------------------------------------
cmake_minimum_required(VERSION 3.14)
project(jsontoolkit-test)
set(CMAKE_CXX_STANDARD 20)

include(FetchContent)
FetchContent_Declare(
  jsontoolkit
  URL https://github.com/sourcemeta/jsontoolkit/archive/aadb403139736411cd2ef37c106578e4b9c41782.zip
  DOWNLOAD_EXTRACT_TIMESTAMP NO)
FetchContent_MakeAvailable(jsontoolkit)

add_executable(main main.cpp)
target_link_libraries(main PUBLIC sourcemeta::jsontoolkit::json)
target_link_libraries(main PUBLIC sourcemeta::jsontoolkit::jsonschema)
tony-go commented 5 months ago

I'm able to build it with following commands:

make clean
make CC=gcc-13 CXX=g++-13

But a few tests are failing...

The following tests FAILED:
      1 - JSON (SEGFAULT)
      2 - JSON (Subprocess aborted)
      3 - JSONTestSuite (Subprocess aborted)
      4 - JSONSchema (Subprocess aborted)
      5 - JSONSchemaReferencingSuite (SEGFAULT)
      6 - JSONPointer (SEGFAULT)
     20 - jsonschema_walker_invalid_mode (Subprocess aborted)

I think that @jviotti experienced the same.

Let's dive ... 🤿

jviotti commented 5 months ago

Correct @tony-go ! Looking at the configure step, I think @Era-cell is on Windows though, using gcc through MSYS2 (in case that changes anything). @Era-cell Can you confirm you are executing these steps from within an MSYS2 shell?

Era-cell commented 5 months ago

@jviotti Let me describe it: I have installed VS Code extensions: Cmake Tools(Microsoft) and CMake(twxs). Screenshot 2024-04-16 014720 Selecting {CMake: Select a kit} from command palette prompts asking for a compiler to chose from. Because I have the path to bin of msys2 from microsoft, it detects GCC 13.2.0 This step generates "build" file without error. Again I have to Select {CMake: Build} from the same. Where errors occur when compiler is configured to gcc 13.2.0.