From 3408a321c6dd48f320bcdf0ae05522abe8f1e2c8 Mon Sep 17 00:00:00 2001 From: Pascal Thomet Date: Sat, 9 May 2020 13:05:12 +0200 Subject: [PATCH] [opencv4:android]: Correct paths in portfile MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently the compilation of opencv4 for android leads to the following folder structure: ```` packages/opencv4_arm_android/ debug/ lib/ sdk/ native/ jni/ include/ opencv2/ share/ README.android ```` vcpkg complains about a missing include folder, and about the presence of unwanted README.android file. **Steps to reproduce the error** ******************************** 1. Install the android triplets: You can copy-paste the script below to populate them (and maybe later adjust them to your needs): ```` echo " set(VCPKG_TARGET_ARCHITECTURE arm) set(VCPKG_CRT_LINKAGE dynamic) set(VCPKG_LIBRARY_LINKAGE dynamic) set(VCPKG_CMAKE_SYSTEM_NAME Android) " > triplets/community/arm-android.cmake echo " set(VCPKG_TARGET_ARCHITECTURE arm64) set(VCPKG_CRT_LINKAGE dynamic) set(VCPKG_LIBRARY_LINKAGE dynamic) set(VCPKG_CMAKE_SYSTEM_NAME Android) " > triplets/community/arm64-android.cmake echo " set(VCPKG_TARGET_ARCHITECTURE x86) set(VCPKG_CRT_LINKAGE dynamic) set(VCPKG_LIBRARY_LINKAGE dynamic) set(VCPKG_CMAKE_SYSTEM_NAME Android) " > triplets/community/x86-android.cmake echo " set(VCPKG_TARGET_ARCHITECTURE x64) set(VCPKG_CRT_LINKAGE dynamic) set(VCPKG_LIBRARY_LINKAGE dynamic) set(VCPKG_CMAKE_SYSTEM_NAME Android) " > triplets/community/x64-android.cmake ```` 2. Install [android ndk](https://developer.android.com/ndk/downloads/) 3. Set ANDROID_NDK_HOME env variable, for example: ```` export ANDROID_NDK_HOME=/home/YourAccount/Android/Sdk/ndk-bundle ```` 4. Try to build opencv4[core]: ```` ./vcpkg install "opencv4[core]:arm-android" ```` You will get the following error ```` -- Installing: .../vcpkg/packages/opencv4_arm-android/share/opencv4/copyright -- Performing post-build validation The folder /include is empty or not present. This indicates the library was not correctly installed. The following files are placed in .../vcpkg/packages/opencv4_arm-android: .../vcpkg/packages/opencv4_arm-android/README.android Files cannot be present in those directories. The following files are placed in .../vcpkg/packages/opencv4_arm-android/debug: .../vcpkg/packages/opencv4_arm-android/debug/README.android Files cannot be present in those directories. Found 3 error(s). Please correct the portfile: ../vcpkg/ports/opencv4/portfile.cmake -- Performing post-build validation done Error: Building package opencv4:android-armeabi-v7a failed with: POST_BUILD_CHECKS_FAILED ```` **What this patch does** ************************ It reorganizes the package folder post install, so that it contents looks like: ```` packages/opencv4_arm-android ├── debug │   ├── lib │   └── sdk │   └── native ├── include │   └── opencv2 │   ├── calib3d │   ├── core │   └── ... ├── lib └── share ├── opencv │   ├── abi-armeabi-v7a │   └── licenses └── opencv4 ```` **How to test this patch** ************************** 1. Build opencv for all 4 archs ```` ./vcpkg install "opencv4[core]:arm-android" "opencv4[core]:arm64-android" "opencv4[core]:x64-android" "opencv4[core]:x86-android" ```` 2. Export opencv4 prefab: ```` ./vcpkg export --triplet x64-android "opencv4[core]" --prefab ```` You will get the following prefab structure ```` prefabo/opencv4 ├── aar │   ├── AndroidManifest.xml │   ├── META-INF │   │   └── LICENSE │   └── prefab │   ├── modules │   │   ├── opencv_calib3d │   │   │   ├── libs │   │   │   │   ├── android.arm64-v8a │   │   │   │   │   ├── abi.json │   │   │   │   │   ├── include │   │   │   │   │   │   └── opencv2 │   │   │   │   │   └── libopencv_calib3d.so │   │   │   │   ├── android.armeabi-v7a │   │   │   │   │   ├── abi.json │   │   │   │   │   ├── include │   │   │   │   │   │   └── opencv2 │   │   │   │   │   └── libopencv_calib3d.so │   │   │   │   ├── android.x86 │   │   │   │   │   ├── abi.json │   │   │   │   │   ├── include │   │   │   │   │   │   └── opencv2 │   │   │   │   │   └── libopencv_calib3d.so │   │   │   │   └── android.x86_64 │   │   │   │   ├── abi.json │   │   │   │   ├── include │   │   │   │   │   └── opencv2 │   │   │   │   └── libopencv_calib3d.so │   │   │   └── module.json │   │   ├── opencv_core │   │   │   ├── libs │   │   │   │   ├── android.arm64-v8a │   │   │   │   │   ├── abi.json │   │   │   │   │   ├── include │   │   │   │   │   │   └── opencv2 │   │   │   │   │   └── libopencv_core.so ```` --- ports/opencv4/CONTROL | 2 +- ports/opencv4/portfile.cmake | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/ports/opencv4/CONTROL b/ports/opencv4/CONTROL index 4d5203b69522cb..8aa7e06d98765e 100644 --- a/ports/opencv4/CONTROL +++ b/ports/opencv4/CONTROL @@ -1,5 +1,5 @@ Source: opencv4 -Version: 4.1.1-5 +Version: 4.1.1-6 Build-Depends: protobuf, zlib Homepage: https://github.com/opencv/opencv Description: computer vision library diff --git a/ports/opencv4/portfile.cmake b/ports/opencv4/portfile.cmake index 95c4c53dccbc81..e918daa094051c 100644 --- a/ports/opencv4/portfile.cmake +++ b/ports/opencv4/portfile.cmake @@ -389,4 +389,11 @@ file(REMOVE ${CURRENT_PACKAGES_DIR}/debug/setup_vars_opencv4.cmd) file(REMOVE ${CURRENT_PACKAGES_DIR}/LICENSE) file(REMOVE ${CURRENT_PACKAGES_DIR}/debug/LICENSE) +if(${VCPKG_CMAKE_SYSTEM_NAME} STREQUAL "Android") + file(RENAME ${CURRENT_PACKAGES_DIR}/sdk/native/jni/include ${CURRENT_PACKAGES_DIR}/include) + file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/sdk) + file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/README.android) + file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/README.android) +endif() + file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright)