diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 0b9b70b..0000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,114 +0,0 @@ -version: 2 - -jobs: - build: - docker: - - image: mbgl/jnihpp:df002510f3-linux - working_directory: /src - steps: - - checkout - - # Note: jni.hpp does not work with GCC 5 and earlier due to compiler bugs. - - - run: - name: Test GCC 6 with Android JNI - when: always - environment: - CXX: g++-6 - CC: gcc-6 - VARIANT: android - command: make clean ; make test examples - - run: - name: Test GCC 6 with OpenJDK JNI - when: always - environment: - CXX: g++-6 - CC: gcc-6 - VARIANT: openjdk - command: make clean ; make test examples - - - run: - name: Test GCC 7 with Android JNI - when: always - environment: - CXX: g++-7 - CC: gcc-7 - VARIANT: android - command: make clean ; make test examples - - run: - name: Test GCC 7 with OpenJDK JNI - when: always - environment: - CXX: g++-7 - CC: gcc-7 - VARIANT: openjdk - command: make clean ; make test examples - - - - run: - name: Test Clang 3.8 with Android JNI - when: always - environment: - CXX: clang++-3.8 - CC: clang-3.8 - VARIANT: android - command: make clean ; make test examples - - run: - name: Test Clang 3.8 with OpenJDK JNI - when: always - environment: - CXX: clang++-3.8 - CC: clang-3.8 - VARIANT: openjdk - command: make clean ; make test examples - - - run: - name: Test Clang 3.9 with Android JNI - when: always - environment: - CXX: clang++-3.9 - CC: clang-3.9 - VARIANT: android - command: make clean ; make test examples - - run: - name: Test Clang 3.9 with OpenJDK JNI - when: always - environment: - CXX: clang++-3.9 - CC: clang-3.9 - VARIANT: openjdk - command: make clean ; make test examples - - - run: - name: Test Clang 4.0 with Android JNI - when: always - environment: - CXX: clang++-4.0 - CC: clang-4.0 - VARIANT: android - command: make clean ; make test examples - - run: - name: Test Clang 4.0 with OpenJDK JNI - when: always - environment: - CXX: clang++-4.0 - CC: clang-4.0 - VARIANT: openjdk - command: make clean ; make test examples - - - run: - name: Test Clang 5.0 with Android JNI - when: always - environment: - CXX: clang++-5.0 - CC: clang-5.0 - VARIANT: android - command: make clean ; make test examples - - run: - name: Test Clang 5.0 with OpenJDK JNI - when: always - environment: - CXX: clang++-5.0 - CC: clang-5.0 - VARIANT: openjdk - command: make clean ; make test examples diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..6686a53 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,26 @@ +name: ci + +on: + push: + + pull_request: + branches: + - "*" + +jobs: + build: + runs-on: ubuntu-24.04 + + strategy: + matrix: + compiler: [clang++-16, clang++-17, clang++-18, g++-12, g++-13, g++-14] + + steps: + - uses: actions/checkout@v4 + + - name: Build with ${{ matrix.compiler }} + env: + CXX: ${{ matrix.compiler }} + run: | + make clean + make test examples diff --git a/Makefile b/Makefile index db16ecd..a86b8c8 100644 --- a/Makefile +++ b/Makefile @@ -4,13 +4,29 @@ BUILD := build/$(VARIANT) COMPILER := $(shell CXX="${CXX}" misc/compiler.sh) COMPILER_MAJOR_VERSION := $(shell CXX="${CXX}" misc/compiler-major-version.sh) +COMMON_WARNINGS := \ + -Wall \ + -Wextra \ + -pedantic \ + -Wno-unused-but-set-variable \ + -Wno-switch-default \ + -Wno-cast-function-type + ifeq ($(COMPILER), clang) - CXXFLAGS_WARNINGS := -Weverything -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-exit-time-destructors - ifeq ($(shell test $(COMPILER_MAJOR_VERSION) -gt 4; echo $$?),0) - CXXFLAGS_WARNINGS += -Wno-unused-template - endif + CXXFLAGS_WARNINGS := \ + $(COMMON_WARNINGS) \ + -Weverything \ + -Wno-c++98-compat \ + -Wno-c++98-compat-pedantic \ + -Wno-exit-time-destructors \ + -Wno-unused-template \ + -Wno-poison-system-directories \ + -Wno-cast-function-type-strict \ + -Wno-shadow-field \ + -Wno-reserved-identifier \ + -Wno-unsafe-buffer-usage else ifeq ($(COMPILER), gcc) - CXXFLAGS_WARNINGS := -Wall -Wextra -pedantic -Wno-unused-but-set-variable + CXXFLAGS_WARNINGS := $(COMMON_WARNINGS) endif CXXFLAGS := $(CXXFLAGS) --std=c++14 -fPIC -Iinclude $(CXXFLAGS_WARNINGS) -Werror diff --git a/examples/NativePeer.java b/examples/NativePeer.java index 3961b35..22efd3a 100644 --- a/examples/NativePeer.java +++ b/examples/NativePeer.java @@ -19,7 +19,6 @@ public static void main(String[] args) { System.out.println("2 + 2 = " + calculator.add(2, 2)); System.out.println("8 - 4 = " + calculator.subtract(8, 4)); - // You wouldn't normally use this; it's here to show that the native finalizer does get executed. - System.runFinalizersOnExit(true); + // the native finalizer will get executed } } diff --git a/include/jni/native_method.hpp b/include/jni/native_method.hpp index 192e301..b35d586 100644 --- a/include/jni/native_method.hpp +++ b/include/jni/native_method.hpp @@ -196,9 +196,9 @@ namespace jni template < class Peer, class TagType, class = std::enable_if_t< std::is_same::value > > auto operator()(const Field& field) { - auto wrapper = [field, lambda = lambda] (JNIEnv& env, Object& obj, Args... args) + auto wrapper = [field, currLambda = lambda] (JNIEnv& env, Object& obj, Args... args) { - return lambda(env, *reinterpret_cast(obj.Get(env, field)), args...); + return currLambda(env, *reinterpret_cast(obj.Get(env, field)), args...); }; return MakeNativeMethod(name, wrapper); diff --git a/include/jni/string_conversion.hpp b/include/jni/string_conversion.hpp index 78974ef..bc5e8fb 100644 --- a/include/jni/string_conversion.hpp +++ b/include/jni/string_conversion.hpp @@ -7,6 +7,9 @@ #include #include +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + namespace jni { inline std::u16string convertUTF8ToUTF16(const std::string& string) @@ -19,3 +22,5 @@ namespace jni return std::wstring_convert, char16_t>().to_bytes(string); } } + +#pragma GCC diagnostic pop