summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--PKGBUILD43
-rw-r--r--namespace.patch196
2 files changed, 226 insertions, 13 deletions
diff --git a/PKGBUILD b/PKGBUILD
index 7fbfde65d18f..dbf01445dad7 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -5,15 +5,39 @@ pkgname=libquotient-encryption
pkgver=0.7.2
pkgrel=1
pkgdesc="A Qt library to write cross-platform clients for Matrix (with experimental encryption support)"
-arch=(x86_64 aarch64)
+arch=("x86_64" "aarch64")
url="https://github.com/quotient-im/libQuotient"
license=("LGPL2.1")
depends=("gcc-libs" "glibc" "libolm" "openssl" "qt5-base" "qt5-multimedia" "qtkeychain-qt5")
makedepends=("cmake")
-provides=("libquotient" "libQuotient.so=${pkgver%.*}-64")
-conflicts=("libquotient")
-source=("https://github.com/quotient-im/libQuotient/archive/${pkgver}/${pkgname}-${pkgver}.tar.gz")
-sha256sums=("62ff42c8fe321e582ce8943417c1d815ab3f373a26fa0d99a5926e713f6a9382")
+provides=("libQuotientE2EE.so=${pkgver%.*}-64")
+source=("https://github.com/quotient-im/libQuotient/archive/${pkgver}/${pkgname}-${pkgver}.tar.gz"
+ "namespace.patch")
+sha256sums=("62ff42c8fe321e582ce8943417c1d815ab3f373a26fa0d99a5926e713f6a9382"
+ "cfb01b1855ac31fdfa614b3802b0cfc9890b92b7a4dade71f5f94f775773a94e")
+
+prepare() {
+ # This patch makes the following changes to CMakeLists.txt:
+ # - Adds a new variable called `${LIBRARY_NAME}` which is currently set
+ # to `QuotientE2EE`, which will replace `${PROJECT_NAME}` in all cases
+ # where the name needs to be changed
+ # - Replaces the name of the library target with `${LIBRARY_NAME}` so that
+ # the generated shared objects are called `libQuotientE2EE.so*`
+ # - All references to `${PROJECT_NAME}` which really refer to the library
+ # target instead of the CMake project as a whole have been changed
+ # - Changed the output names of the `pkg-config` script and the output
+ # CMake files (i.e. `QuotientE2EEConfig.cmake`,
+ # `QuotientE2EETargets.cmake` and so on)
+ # - Changed the install directories for the config files and headers to use
+ # `QuotientE2EE` instead of `Quotient`
+ # - Disable generating files for integration with the Android Native
+ # Development Kit, as these files have generic names which will conflict
+ # with the official Arch `libquotient` package
+ # Also, the template files for the `pkg-config` script (`Quotient.pc.in`)
+ # and CMake script (`QuotientConfig.cmake.in`) have been adjusted to use
+ # `${LIBRARY_NAME}` where necessary instead of hard-coding `Quotient`.
+ patch -Np0 -d . -i namespace.patch
+}
build() {
cmake -B build -S "libQuotient-${pkgver}" \
@@ -28,12 +52,5 @@ build() {
package() {
DESTDIR="${pkgdir}" cmake --install build
- install -Dm 644 "libQuotient-${pkgver}/README.md" "${pkgdir}/usr/share/doc/${pkgname}/README.md"
-
- # NOTE: There does not seem to be a way to inhibit generating the
- # Android Native Development Kit (NDK) build file without patching
- # libQuotient's build script. This file has a generic name which
- # will conflict with the official `libquotient` package, so it must
- # therefore be removed manually.
- rm -r "${pkgdir}/usr/share/ndk-modules"
+ install -Dm644 "libQuotient-${pkgver}/README.md" "${pkgdir}/usr/share/doc/${pkgname}/README.md"
}
diff --git a/namespace.patch b/namespace.patch
new file mode 100644
index 000000000000..948ec7878429
--- /dev/null
+++ b/namespace.patch
@@ -0,0 +1,196 @@
+diff '--color=auto' -rupN libQuotient-0.7.2.orig/cmake/QuotientConfig.cmake.in libQuotient-0.7.2/cmake/QuotientConfig.cmake.in
+--- libQuotient-0.7.2.orig/cmake/QuotientConfig.cmake.in 2023-06-26 10:28:12.392559752 +0930
++++ libQuotient-0.7.2/cmake/QuotientConfig.cmake.in 2023-06-26 11:28:49.614659917 +0930
+@@ -2,10 +2,10 @@ include(CMakeFindDependencyMacro)
+
+ @FIND_DEPS@
+
+-include("${CMAKE_CURRENT_LIST_DIR}/QuotientTargets.cmake")
++include("${CMAKE_CURRENT_LIST_DIR}/@LIBRARY_NAME@Targets.cmake")
+
+ if (NOT QUOTIENT_FORCE_NAMESPACED_INCLUDES)
+- get_target_property(_include_dir @PROJECT_NAME@ INTERFACE_INCLUDE_DIRECTORIES)
+- list(APPEND _include_dir "${_include_dir}/Quotient")
+- set_target_properties(@PROJECT_NAME@ PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${_include_dir}")
++ get_target_property(_include_dir @LIBRARY_NAME@ INTERFACE_INCLUDE_DIRECTORIES)
++ list(APPEND _include_dir "${_include_dir}/@LIBRARY_NAME@")
++ set_target_properties(@LIBRARY_NAME@ PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${_include_dir}")
+ endif()
+diff '--color=auto' -rupN libQuotient-0.7.2.orig/CMakeLists.txt libQuotient-0.7.2/CMakeLists.txt
+--- libQuotient-0.7.2.orig/CMakeLists.txt 2023-06-26 10:28:12.385892873 +0930
++++ libQuotient-0.7.2/CMakeLists.txt 2023-06-26 11:30:48.835074310 +0930
+@@ -5,6 +5,7 @@ endif()
+
+ set(API_VERSION "0.7")
+ project(Quotient VERSION "${API_VERSION}.2" LANGUAGES CXX)
++set(LIBRARY_NAME ${PROJECT_NAME}E2EE)
+
+ message(STATUS)
+ message(STATUS "Configuring ${PROJECT_NAME} ${PROJECT_VERSION} ==>")
+@@ -68,7 +69,7 @@ if (WIN32)
+ endif()
+ else()
+ include(GNUInstallDirs)
+- set(CMakeFilesLocation "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")
++ set(CMakeFilesLocation "${CMAKE_INSTALL_LIBDIR}/cmake/${LIBRARY_NAME}")
+ endif(WIN32)
+ set(${PROJECT_NAME}_INSTALL_INCLUDEDIR
+ "${CMAKE_INSTALL_INCLUDEDIR}/" CACHE PATH
+@@ -273,24 +274,24 @@ add_compile_options(
+ -DQT_NO_FOREACH
+ )
+
+-add_library(${PROJECT_NAME} ${lib_SRCS} ${api_ALL_SRCS})
++add_library(${LIBRARY_NAME} ${lib_SRCS} ${api_ALL_SRCS})
+ # Set BUILDING_SHARED_QUOTIENT if building as a shared library
+-target_compile_definitions(${PROJECT_NAME} PRIVATE
+- $<$<STREQUAL:$<TARGET_PROPERTY:${PROJECT_NAME},TYPE>,SHARED_LIBRARY>:BUILDING_SHARED_QUOTIENT>)
++target_compile_definitions(${LIBRARY_NAME} PRIVATE
++ $<$<STREQUAL:$<TARGET_PROPERTY:${LIBRARY_NAME},TYPE>,SHARED_LIBRARY>:BUILDING_SHARED_QUOTIENT>)
+ # Set QUOTIENT_STATIC in a static library setting
+-target_compile_definitions(${PROJECT_NAME} PUBLIC
+- $<$<STREQUAL:$<TARGET_PROPERTY:${PROJECT_NAME},TYPE>,STATIC_LIBRARY>:QUOTIENT_STATIC>)
+-target_compile_definitions(${PROJECT_NAME} PRIVATE
++target_compile_definitions(${LIBRARY_NAME} PUBLIC
++ $<$<STREQUAL:$<TARGET_PROPERTY:${LIBRARY_NAME},TYPE>,STATIC_LIBRARY>:QUOTIENT_STATIC>)
++target_compile_definitions(${LIBRARY_NAME} PRIVATE
+ QT_NO_JAVA_STYLE_ITERATORS QT_NO_URL_CAST_FROM_STRING QT_NO_CAST_TO_ASCII
+ QT_STRICT_ITERATORS QT_NO_CAST_FROM_BYTEARRAY)
+
+-target_compile_definitions(${PROJECT_NAME} PUBLIC ${PROJECT_NAME}_VERSION_MAJOR=${PROJECT_VERSION_MAJOR}
++target_compile_definitions(${LIBRARY_NAME} PUBLIC ${PROJECT_NAME}_VERSION_MAJOR=${PROJECT_VERSION_MAJOR}
+ ${PROJECT_NAME}_VERSION_MINOR=${PROJECT_VERSION_MINOR} ${PROJECT_NAME}_VERSION_PATCH=${PROJECT_VERSION_PATCH}
+ ${PROJECT_NAME}_VERSION_STRING=\"${PROJECT_VERSION}\")
+ if (${PROJECT_NAME}_ENABLE_E2EE)
+- target_compile_definitions(${PROJECT_NAME} PUBLIC ${PROJECT_NAME}_E2EE_ENABLED)
++ target_compile_definitions(${LIBRARY_NAME} PUBLIC ${PROJECT_NAME}_E2EE_ENABLED)
+ endif()
+-set_target_properties(${PROJECT_NAME} PROPERTIES
++set_target_properties(${LIBRARY_NAME} PROPERTIES
+ CXX_STANDARD 20
+ CXX_EXTENSIONS OFF
+ VISIBILITY_INLINES_HIDDEN ON
+@@ -299,33 +300,33 @@ set_target_properties(${PROJECT_NAME} PR
+ SOVERSION ${API_VERSION}
+ INTERFACE_${PROJECT_NAME}_MAJOR_VERSION ${API_VERSION}
+ )
+-set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY
++set_property(TARGET ${LIBRARY_NAME} APPEND PROPERTY
+ COMPATIBLE_INTERFACE_STRING ${PROJECT_NAME}_MAJOR_VERSION)
+
+-target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20)
++target_compile_features(${LIBRARY_NAME} PUBLIC cxx_std_20)
+ if (MSVC)
+- target_compile_options(${PROJECT_NAME} PUBLIC /Zc:preprocessor)
++ target_compile_options(${LIBRARY_NAME} PUBLIC /Zc:preprocessor)
+ endif()
+
+ # Don't use PCH w/GCC (https://bugzilla.redhat.com/show_bug.cgi?id=1721553#c34)
+ if (NOT CMAKE_CXX_COMPILER_ID STREQUAL GNU)
+- target_precompile_headers(${PROJECT_NAME} PRIVATE Quotient/converters.h)
++ target_precompile_headers(${LIBRARY_NAME} PRIVATE Quotient/converters.h)
+ endif ()
+
+-target_include_directories(${PROJECT_NAME} PUBLIC
++target_include_directories(${LIBRARY_NAME} PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+ $<BUILD_INTERFACE:$<$<NOT:$<BOOL:${QUOTIENT_FORCE_NAMESPACED_INCLUDES}>>:${CMAKE_CURRENT_SOURCE_DIR}/Quotient>>
+ $<INSTALL_INTERFACE:${${PROJECT_NAME}_INSTALL_INCLUDEDIR}>
+ )
+
+-target_link_libraries(${PROJECT_NAME} PUBLIC ${Qt}::Core ${Qt}::Network ${Qt}::Gui qt${${Qt}Core_VERSION_MAJOR}keychain)
++target_link_libraries(${LIBRARY_NAME} PUBLIC ${Qt}::Core ${Qt}::Network ${Qt}::Gui qt${${Qt}Core_VERSION_MAJOR}keychain)
+ if (Qt STREQUAL Qt5) # See #483
+- target_link_libraries(${PROJECT_NAME} PRIVATE ${Qt}::Multimedia)
++ target_link_libraries(${LIBRARY_NAME} PRIVATE ${Qt}::Multimedia)
+ endif()
+ set(FIND_DEPS "find_dependency(${Qt}Keychain)") # For QuotientConfig.cmake.in
+
+ if (${PROJECT_NAME}_ENABLE_E2EE)
+- target_link_libraries(${PROJECT_NAME}
++ target_link_libraries(${LIBRARY_NAME}
+ PUBLIC
+ Olm::Olm
+ ${Qt}::Sql
+@@ -338,7 +339,7 @@ if (${PROJECT_NAME}_ENABLE_E2EE)
+ find_dependency(${Qt}Sql)")
+ endif()
+
+-configure_file(${PROJECT_NAME}.pc.in ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc @ONLY NEWLINE_STYLE UNIX)
++configure_file(${PROJECT_NAME}.pc.in ${CMAKE_CURRENT_BINARY_DIR}/${LIBRARY_NAME}.pc @ONLY NEWLINE_STYLE UNIX)
+
+ # Configure testing
+
+@@ -350,45 +351,45 @@ endif()
+
+ # Configure installation
+
+-install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}Targets
++install(TARGETS ${LIBRARY_NAME} EXPORT ${LIBRARY_NAME}Targets
+ LIBRARY RUNTIME
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ )
+-install(DIRECTORY Quotient/ DESTINATION ${${PROJECT_NAME}_INSTALL_INCLUDEDIR}/Quotient
++install(DIRECTORY Quotient/ DESTINATION ${${PROJECT_NAME}_INSTALL_INCLUDEDIR}/${LIBRARY_NAME}
+ FILES_MATCHING PATTERN "*.h")
+
+ include(CMakePackageConfigHelpers)
+ # NB: SameMajorVersion doesn't really work yet, as we're within 0.x trail.
+ # Maybe consider jumping the gun and releasing 1.0, as semver advises?
+ write_basic_package_version_file(
+- "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}ConfigVersion.cmake"
++ "${CMAKE_CURRENT_BINARY_DIR}/${LIBRARY_NAME}/${LIBRARY_NAME}ConfigVersion.cmake"
+ COMPATIBILITY SameMajorVersion
+ )
+
+-export(PACKAGE ${PROJECT_NAME})
+-export(EXPORT ${PROJECT_NAME}Targets
+- FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}Targets.cmake")
++export(PACKAGE ${LIBRARY_NAME})
++export(EXPORT ${LIBRARY_NAME}Targets
++ FILE "${CMAKE_CURRENT_BINARY_DIR}/${LIBRARY_NAME}/${LIBRARY_NAME}Targets.cmake")
+ configure_file(cmake/${PROJECT_NAME}Config.cmake.in
+- "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}Config.cmake"
++ "${CMAKE_CURRENT_BINARY_DIR}/${LIBRARY_NAME}/${LIBRARY_NAME}Config.cmake"
+ @ONLY
+ )
+
+-install(EXPORT ${PROJECT_NAME}Targets
+- FILE ${PROJECT_NAME}Targets.cmake DESTINATION ${CMakeFilesLocation})
++install(EXPORT ${LIBRARY_NAME}Targets
++ FILE ${LIBRARY_NAME}Targets.cmake DESTINATION ${CMakeFilesLocation})
+
+ install(FILES
+- "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}Config.cmake"
+- "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}ConfigVersion.cmake"
++ "${CMAKE_CURRENT_BINARY_DIR}/${LIBRARY_NAME}/${LIBRARY_NAME}Config.cmake"
++ "${CMAKE_CURRENT_BINARY_DIR}/${LIBRARY_NAME}/${LIBRARY_NAME}ConfigVersion.cmake"
+ DESTINATION ${CMakeFilesLocation}
+ )
+-install(EXPORT_ANDROID_MK ${PROJECT_NAME}Targets DESTINATION ${CMAKE_INSTALL_DATADIR}/ndk-modules)
++#install(EXPORT_ANDROID_MK ${PROJECT_NAME}Targets DESTINATION ${CMAKE_INSTALL_DATADIR}/ndk-modules)
+
+ if (WIN32)
+ install(FILES mime/packages/freedesktop.org.xml DESTINATION mime/packages)
+ endif (WIN32)
+
+ if (UNIX AND NOT APPLE)
+- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc
++ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${LIBRARY_NAME}.pc
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
+ endif()
+
+diff '--color=auto' -rupN libQuotient-0.7.2.orig/Quotient.pc.in libQuotient-0.7.2/Quotient.pc.in
+--- libQuotient-0.7.2.orig/Quotient.pc.in 2023-06-26 10:28:12.385892873 +0930
++++ libQuotient-0.7.2/Quotient.pc.in 2023-06-26 11:04:31.648488210 +0930
+@@ -3,8 +3,8 @@ exec_prefix=${prefix}
+ includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
+ libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
+
+-Name: Quotient
++Name: @LIBRARY_NAME@
+ Description: A Qt5 library to write cross-platfrom clients for Matrix
+ Version: @API_VERSION@
+ Cflags: -I${includedir}
+-Libs: -L${libdir} -lQuotient
++Libs: -L${libdir} -l@LIBRARY_NAME@