]> sigrok.org Git - sigrok-util.git/blob - cross-compile/android/pulseview-cpp.patch
sigrok-cross-android: Adapt PulseView for Qt5
[sigrok-util.git] / cross-compile / android / pulseview-cpp.patch
1 diff --git a/CMakeLists.txt b/CMakeLists.txt
2 index 11767a6..b8eed96 100644
3 --- a/CMakeLists.txt
4 +++ b/CMakeLists.txt
5 @@ -317,12 +317,21 @@ if(WIN32)
6         list(APPEND PULSEVIEW_LINK_LIBS "-lqsvg")
7  endif()
8  
9 +if(ANDROID)
10 +add_library(${PROJECT_NAME} SHARED
11 +       ${pulseview_SOURCES}
12 +       ${pulseview_HEADERS_MOC}
13 +       ${pulseview_FORMS_HEADERS}
14 +       ${pulseview_RESOURCES_RCC}
15 +)
16 +else()
17  add_executable(${PROJECT_NAME}
18         ${pulseview_SOURCES}
19         ${pulseview_HEADERS_MOC}
20         ${pulseview_FORMS_HEADERS}
21         ${pulseview_RESOURCES_RCC}
22  )
23 +endif()
24  
25  target_link_libraries(${PROJECT_NAME} ${PULSEVIEW_LINK_LIBS})
26  
27 diff --git a/main.cpp b/main.cpp
28 index 2c6a59e..79627db 100644
29 --- a/main.cpp 2014-04-26 23:40:24.253187700 +0200
30 +++ b/main.cpp  2014-04-27 00:38:55.378353311 +0200
31 @@ -20,6 +20,9 @@
32  
33  #ifdef ENABLE_DECODE
34  #include <libsigrokdecode/libsigrokdecode.h> /* First, so we avoid a _POSIX_C_SOURCE warning. */
35 +#ifdef ANDROID
36 +#include <jni.h>
37 +#endif
38  #endif
39  
40  #include <stdint.h>
41 @@ -45,6 +48,47 @@
42  Q_IMPORT_PLUGIN(qsvg)
43  #endif
44  
45 +#if defined(ENABLE_DECODE) && defined(ANDROID)
46 +jint JNI_OnLoad(JavaVM *vm, void *reserved)
47 +{
48 +       JNIEnv* env;
49 +
50 +       (void)reserved;
51 +
52 +       if (vm->GetEnv((void **)&env, JNI_VERSION_1_6) != JNI_OK) {
53 +               return -1;
54 +       }
55 +
56 +       jclass envc = env->FindClass("org/sigrok/androidutils/Environment");
57 +       jmethodID getEnv =  env->GetStaticMethodID(envc, "getEnvironment",
58 +                                                  "()[Ljava/lang/String;");
59 +       jobjectArray envs =
60 +               (jobjectArray)env->CallStaticObjectMethod(envc, getEnv);
61 +       jsize i, envn = env->GetArrayLength(envs);
62 +       for (i=0; i<envn; i+=2) {
63 +               jstring key = (jstring)env->GetObjectArrayElement(envs, i);
64 +               jstring value = (jstring)env->GetObjectArrayElement(envs, i+1);
65 +               const char *utfkey = env->GetStringUTFChars(key, 0);
66 +               const char *utfvalue = env->GetStringUTFChars(value, 0);
67 +               setenv(utfkey, utfvalue, 1);
68 +               env->ReleaseStringUTFChars(value, utfvalue);
69 +               env->ReleaseStringUTFChars(key, utfkey);
70 +               env->DeleteLocalRef(value);
71 +               env->DeleteLocalRef(key);
72 +       }
73 +       env->DeleteLocalRef(envs);
74 +       env->DeleteLocalRef(envc);
75 +
76 +       return JNI_VERSION_1_6;
77 +}
78 +
79 +void JNI_OnUnload(JavaVM *vm, void *reserved)
80 +{
81 +       (void)vm;
82 +       (void)reserved;
83 +}
84 +#endif
85 +
86  void usage()
87  {
88         fprintf(stdout,